From c2d61474251f429ce5d50dc600deb5822bff4379 Mon Sep 17 00:00:00 2001 From: yanfeizuo Date: Fri, 1 Dec 2023 15:42:50 +0800 Subject: [PATCH 0001/1768] update for sumer --- projects/helper/compound.js | 146 +++++++++++++++++++++++++++++++++++- projects/sumer/index.js | 4 +- 2 files changed, 147 insertions(+), 3 deletions(-) diff --git a/projects/helper/compound.js b/projects/helper/compound.js index a953250582..f6403948a2 100644 --- a/projects/helper/compound.js +++ b/projects/helper/compound.js @@ -174,6 +174,135 @@ function getCompoundV2Tvl(comptroller, chain, transformAdress, } } +function getCompoundV2TvlForSumer(comptroller, chain, transformAdress, + cether = "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", cetheEquivalent = ADDRESSES.ethereum.WETH, + borrowed = false, checkForLPTokens = undefined, + { + fetchBalances = false, + blacklistedTokens = [], + abis = {}, + resolveLPs = true, + } = {}) { + abis = { ...abi, ...abis } + blacklistedTokens = blacklistedTokens.map(i => i.toLowerCase()) + return async (timestamp, ethBlock, _, { api = undefined } = {}) => { + if (!api) { + api = new sdk.ChainApi({ chain, }) + } + chain = api.chain + const block = api.block + if (!transformAdress) transformAdress = await getChainTransform(chain) + let balances = {}; + let markets = await getMarkets(comptroller, block, chain, cether, cetheEquivalent, blacklistedTokens, abis) + if (!borrowed && fetchBalances) { + return sumTokens2({ api, tokensAndOwners: markets.map(i => [i.underlying, i.cToken]), blacklistedTokens, }) + } + const cTokenCalls = markets.map(market => ({ + target: market.cToken, + })) + // Get V2 tokens locked + let v2Locked; + + let isCTokens = await sdk.api.abi.multiCall({ + block, + chain, + calls: cTokenCalls, + abi: 'function isCToken() external view returns (bool)' + }); + + const cTokens = []; + const suTokens = []; + + isCTokens.output.map(t => { + if (t.output) { + cTokens.push({ target: t.input.target }) + } else { + suTokens.push({ target: t.input.target }) + } + }); + + const v2Locked1 = await sdk.api.abi.multiCall({ + block, + chain, + calls: cTokens, + abi: borrowed ? abi.totalBorrows : abi.getCash, + }); + + let v2Locked2; + if (!borrowed) { + const suTokenSupply = await sdk.api.abi.multiCall({ + block, + chain, + calls: suTokens, + abi: "erc20:totalSupply", + }); + + let exchangeRate = await sdk.api.abi.multiCall({ + block, + chain, + calls: suTokens, + abi: 'function exchangeRateCurrent() external returns (uint256)' + }) + + v2Locked2 = { + output: suTokenSupply.output.map(o => { + const rate = exchangeRate.output.find(e => e.input.target === o.input.target) + return { + ...o, + output: o.output * (rate.output / 1e18) + '' + } + }) + } + + } else { + v2Locked2 = { output: [] } + } + + v2Locked = { + output: [ + ...v2Locked1.output, + ...v2Locked2.output + ] + } + + let symbols; + if (checkForLPTokens !== undefined) { + symbols = await sdk.api.abi.multiCall({ + block, + chain, + calls: cTokenCalls, + abi: "erc20:symbol", + }); + } + + const lpPositions = [] + markets.forEach((market, idx) => { + const underlying = market.underlying.toLowerCase() + if (blacklistedTokens.includes(underlying)) return; + let getCash = v2Locked.output.find((result) => result.input.target === market.cToken); + if (!getCash) return; + if (checkForLPTokens !== undefined && checkForLPTokens(symbols.output[idx].output)) { + lpPositions.push({ + token: underlying, + balance: getCash.output + }) + } else { + sdk.util.sumSingleBalance(balances, transformAdress(underlying), getCash.output) + } + }); + + if (comptroller == "0x92DcecEaF4c0fDA373899FEea00032E8E8Da58Da") { + await unwrapPuffTokens(balances, lpPositions, block) + } else if (lpPositions.length > 0) { + await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAdress) + } + + if (resolveLPs) await unwrapLPsAuto({ balances, block, chain, abis}) + + return transformBalances(chain, balances); + } +} + const BigNumber = require('bignumber.js').default; const { toUSDTBalances } = require('./balances'); @@ -276,6 +405,16 @@ function compoundExports(comptroller, chain, cether, cetheEquivalent, transformA } } +function compoundExportsForSumer(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens = [], fetchBalances, abis = {}, resolveLPs=true } = {}) { + if (cether !== undefined && cetheEquivalent === undefined) { + throw new Error("You need to define the underlying for native cAsset") + } + return { + tvl: getCompoundV2TvlForSumer(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, false, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }), + borrowed: getCompoundV2TvlForSumer(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, true, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }) + } +} + function compoundExportsWithAsyncTransform(comptroller, chain, cether, cetheEquivalent, options) { return { tvl: async (...args) => { @@ -329,6 +468,10 @@ function compoundExports2({ comptroller, chain, cether, cetheEquivalent = nullAd return compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, }) } +function compoundExports2ForSumer({ comptroller, chain, cether, cetheEquivalent = nullAddress, transformAdressRaw, checkForLPTokens, blacklistedTokens = [], fetchBalances = true, abis = {} }) { + return compoundExportsForSumer(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, }) +} + module.exports = { getCompoundV2Tvl, compoundExports, @@ -337,5 +480,6 @@ module.exports = { compoundExportsWithAsyncTransform, fullCoumpoundExports, usdCompoundExports, - compoundExportsWithDifferentBase + compoundExportsWithDifferentBase, + compoundExports2ForSumer }; diff --git a/projects/sumer/index.js b/projects/sumer/index.js index 213807040c..a7b84d82b3 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -1,5 +1,5 @@ -const { compoundExports2 } = require('../helper/compound') +const { compoundExports2ForSumer } = require('../helper/compound') module.exports = { - meter: compoundExports2({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), + meter: compoundExports2ForSumer({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), } \ No newline at end of file From ff89cf1be7bebe8dad5f4ba7dcb7656d05f16cdd Mon Sep 17 00:00:00 2001 From: magmastone <152827065+magmastone@users.noreply.github.com> Date: Sun, 14 Jan 2024 22:01:41 +0800 Subject: [PATCH 0002/1768] Update magma contract --- projects/magma/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/magma/index.js b/projects/magma/index.js index c73bbdc5cb..b04437328c 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -3,7 +3,7 @@ const { getLiquityTvl } = require('../helper/liquity') module.exports = { iotex: { - tvl: getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435'), - // staking: staking('0x109e342FE7132585abFa785887E2c05c85Fbcf71', '0x20143c45c2ce7984799079f256d8a68a918eeee6'), // disabled as backing of WEN is already counted towards tvl + tvl: getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), + // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl }, }; From 0d55b14ae45a442376d85624ab49a8c309560d22 Mon Sep 17 00:00:00 2001 From: magmastone <152827065+magmastone@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:36:00 +0800 Subject: [PATCH 0003/1768] Update magma's contracts updated contracts --- projects/magma/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/magma/index.js b/projects/magma/index.js index b04437328c..1ee3b2fce1 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -3,7 +3,10 @@ const { getLiquityTvl } = require('../helper/liquity') module.exports = { iotex: { - tvl: getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), + tvl: sdk.util.sumChainTvls([ + getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), + getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435'), + ]), // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl }, }; From 3df9c1298aa52e878ba64f6c6dc56fc954f11394 Mon Sep 17 00:00:00 2001 From: magmastone <152827065+magmastone@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:38:58 +0800 Subject: [PATCH 0004/1768] fix format --- projects/magma/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/magma/index.js b/projects/magma/index.js index 1ee3b2fce1..4757834f31 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -5,7 +5,7 @@ module.exports = { iotex: { tvl: sdk.util.sumChainTvls([ getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), - getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435'), + getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435') ]), // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl }, From a23b2370bc047a2de7e697211247fb3ecbcd2755 Mon Sep 17 00:00:00 2001 From: magmastone <152827065+magmastone@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:41:33 +0800 Subject: [PATCH 0005/1768] missed sdk --- projects/magma/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/magma/index.js b/projects/magma/index.js index 4757834f31..944f4132a0 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -1,5 +1,6 @@ const { getLiquityTvl } = require('../helper/liquity') // const { staking } = require('../helper/staking') +const sdk = require('@defillama/sdk') module.exports = { iotex: { From dac012d2782e482592231f840be175452bcdc5a3 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Wed, 7 Feb 2024 00:21:33 +0700 Subject: [PATCH 0006/1768] update staking dackie --- projects/dackieswap-v2/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 34a1dc7381..a92962d135 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -1,4 +1,12 @@ const { getUniTVL } = require("../helper/unknownTokens"); +const { stakings } = require("../helper/staking"); + +const DACKIE = "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B"; + +const stakingPools = [ + // Lock & flexible pool + "0x4Ad387bcb03B92a6e22A72391Cc37493Fc388B05", +]; module.exports = { misrepresentedTokens: true, @@ -7,7 +15,8 @@ module.exports = { factory: "0x591f122D1df761E616c13d265006fcbf4c6d6551", useDefaultCoreAssets: true, fetchBalances: true - }) + }), + staking: stakings(stakingPools, DACKIE) }, optimism: { tvl: getUniTVL({ From 319bb81257ae298b28316fdd9b8eb55be7750733 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Thu, 15 Feb 2024 14:36:12 +0700 Subject: [PATCH 0007/1768] update arbitrum --- projects/dackieswap-v2/index.js | 7 +++++++ projects/dackieswap/index.js | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index a92962d135..1181d219bc 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -24,5 +24,12 @@ module.exports = { useDefaultCoreAssets: true, fetchBalances: true }) + }, + arbitrum: { + tvl: getUniTVL({ + factory: "0x507940c2469e6E3B33032F1d4FF8d123BDDe2f5C", + useDefaultCoreAssets: true, + fetchBalances: true + }) } }; \ No newline at end of file diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 271d718de1..3f6bd78aad 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -2,5 +2,6 @@ const { uniV3Export } = require("../helper/uniswapV3"); module.exports = uniV3Export({ base: { factory: "0x3D237AC6D2f425D2E890Cc99198818cc1FA48870", fromBlock: 2031627 }, - optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 } + optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 }, + arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, }); \ No newline at end of file From 5bc645431e9f3a28f56d6293706dfce10d2cec4d Mon Sep 17 00:00:00 2001 From: yanfeizuo Date: Tue, 20 Feb 2024 11:47:34 +0800 Subject: [PATCH 0008/1768] Revert "update for sumer" This reverts commit c2d61474251f429ce5d50dc600deb5822bff4379. --- projects/helper/compound.js | 146 +----------------------------------- projects/sumer/index.js | 4 +- 2 files changed, 3 insertions(+), 147 deletions(-) diff --git a/projects/helper/compound.js b/projects/helper/compound.js index fdaeb20d5f..0ee8d93bce 100644 --- a/projects/helper/compound.js +++ b/projects/helper/compound.js @@ -174,135 +174,6 @@ function getCompoundV2Tvl(comptroller, chain, transformAdress, } } -function getCompoundV2TvlForSumer(comptroller, chain, transformAdress, - cether = "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", cetheEquivalent = ADDRESSES.ethereum.WETH, - borrowed = false, checkForLPTokens = undefined, - { - fetchBalances = false, - blacklistedTokens = [], - abis = {}, - resolveLPs = true, - } = {}) { - abis = { ...abi, ...abis } - blacklistedTokens = blacklistedTokens.map(i => i.toLowerCase()) - return async (timestamp, ethBlock, _, { api = undefined } = {}) => { - if (!api) { - api = new sdk.ChainApi({ chain, }) - } - chain = api.chain - const block = api.block - if (!transformAdress) transformAdress = await getChainTransform(chain) - let balances = {}; - let markets = await getMarkets(comptroller, block, chain, cether, cetheEquivalent, blacklistedTokens, abis) - if (!borrowed && fetchBalances) { - return sumTokens2({ api, tokensAndOwners: markets.map(i => [i.underlying, i.cToken]), blacklistedTokens, }) - } - const cTokenCalls = markets.map(market => ({ - target: market.cToken, - })) - // Get V2 tokens locked - let v2Locked; - - let isCTokens = await sdk.api.abi.multiCall({ - block, - chain, - calls: cTokenCalls, - abi: 'function isCToken() external view returns (bool)' - }); - - const cTokens = []; - const suTokens = []; - - isCTokens.output.map(t => { - if (t.output) { - cTokens.push({ target: t.input.target }) - } else { - suTokens.push({ target: t.input.target }) - } - }); - - const v2Locked1 = await sdk.api.abi.multiCall({ - block, - chain, - calls: cTokens, - abi: borrowed ? abi.totalBorrows : abi.getCash, - }); - - let v2Locked2; - if (!borrowed) { - const suTokenSupply = await sdk.api.abi.multiCall({ - block, - chain, - calls: suTokens, - abi: "erc20:totalSupply", - }); - - let exchangeRate = await sdk.api.abi.multiCall({ - block, - chain, - calls: suTokens, - abi: 'function exchangeRateCurrent() external returns (uint256)' - }) - - v2Locked2 = { - output: suTokenSupply.output.map(o => { - const rate = exchangeRate.output.find(e => e.input.target === o.input.target) - return { - ...o, - output: o.output * (rate.output / 1e18) + '' - } - }) - } - - } else { - v2Locked2 = { output: [] } - } - - v2Locked = { - output: [ - ...v2Locked1.output, - ...v2Locked2.output - ] - } - - let symbols; - if (checkForLPTokens !== undefined) { - symbols = await sdk.api.abi.multiCall({ - block, - chain, - calls: cTokenCalls, - abi: "erc20:symbol", - }); - } - - const lpPositions = [] - markets.forEach((market, idx) => { - const underlying = market.underlying.toLowerCase() - if (blacklistedTokens.includes(underlying)) return; - let getCash = v2Locked.output.find((result) => result.input.target === market.cToken); - if (!getCash) return; - if (checkForLPTokens !== undefined && checkForLPTokens(symbols.output[idx].output)) { - lpPositions.push({ - token: underlying, - balance: getCash.output - }) - } else { - sdk.util.sumSingleBalance(balances, transformAdress(underlying), getCash.output) - } - }); - - if (comptroller == "0x92DcecEaF4c0fDA373899FEea00032E8E8Da58Da") { - await unwrapPuffTokens(balances, lpPositions, block) - } else if (lpPositions.length > 0) { - await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAdress) - } - - if (resolveLPs) await unwrapLPsAuto({ balances, block, chain, abis}) - - return transformBalances(chain, balances); - } -} - const BigNumber = require('bignumber.js').default; const { toUSDTBalances } = require('./balances'); @@ -405,16 +276,6 @@ function compoundExports(comptroller, chain, cether, cetheEquivalent, transformA } } -function compoundExportsForSumer(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens = [], fetchBalances, abis = {}, resolveLPs=true } = {}) { - if (cether !== undefined && cetheEquivalent === undefined) { - throw new Error("You need to define the underlying for native cAsset") - } - return { - tvl: getCompoundV2TvlForSumer(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, false, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }), - borrowed: getCompoundV2TvlForSumer(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, true, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }) - } -} - function compoundExportsWithAsyncTransform(comptroller, chain, cether, cetheEquivalent, options) { return { tvl: async (...args) => { @@ -468,10 +329,6 @@ function compoundExports2({ comptroller, chain, cether, cetheEquivalent = nullAd return compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, }) } -function compoundExports2ForSumer({ comptroller, chain, cether, cetheEquivalent = nullAddress, transformAdressRaw, checkForLPTokens, blacklistedTokens = [], fetchBalances = true, abis = {} }) { - return compoundExportsForSumer(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, }) -} - module.exports = { getCompoundV2Tvl, compoundExports, @@ -480,6 +337,5 @@ module.exports = { compoundExportsWithAsyncTransform, fullCoumpoundExports, usdCompoundExports, - compoundExportsWithDifferentBase, - compoundExports2ForSumer + compoundExportsWithDifferentBase }; diff --git a/projects/sumer/index.js b/projects/sumer/index.js index a7b84d82b3..213807040c 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -1,5 +1,5 @@ -const { compoundExports2ForSumer } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') module.exports = { - meter: compoundExports2ForSumer({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), + meter: compoundExports2({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), } \ No newline at end of file From e56a1a583f45270a7813ee2739bcda0738bb307b Mon Sep 17 00:00:00 2001 From: yanfeizuo Date: Tue, 20 Feb 2024 11:56:21 +0800 Subject: [PATCH 0009/1768] add base to project sumer --- projects/sumer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index 213807040c..db9c5d8866 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -2,4 +2,5 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { meter: compoundExports2({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), + base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), } \ No newline at end of file From ced258492e9e888be795b7fbfb523938ee19407c Mon Sep 17 00:00:00 2001 From: yanfeizuo Date: Wed, 21 Feb 2024 16:35:25 +0800 Subject: [PATCH 0010/1768] add arbitrum to project sumer --- projects/sumer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index db9c5d8866..02958bea50 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -3,4 +3,5 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { meter: compoundExports2({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), + arbitrum: compoundExports2({ comptroller: '0xBfb69860C91A22A2287df1Ff3Cdf0476c5aab24A' }), } \ No newline at end of file From 516942b9f065078a67f32b13ce44be0ead62ca43 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sun, 3 Mar 2024 01:15:14 +0700 Subject: [PATCH 0011/1768] update blast --- projects/dackieswap-v2/index.js | 7 +++++++ projects/dackieswap/index.js | 1 + 2 files changed, 8 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 1181d219bc..33477e7461 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -31,5 +31,12 @@ module.exports = { useDefaultCoreAssets: true, fetchBalances: true }) + }, + blast: { + tvl: getUniTVL({ + factory: "0x757cD583004400ee67e5cC3c7A60C6a62E3F6d30", + useDefaultCoreAssets: true, + fetchBalances: true + }) } }; \ No newline at end of file diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 3f6bd78aad..d4038adba0 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -4,4 +4,5 @@ module.exports = uniV3Export({ base: { factory: "0x3D237AC6D2f425D2E890Cc99198818cc1FA48870", fromBlock: 2031627 }, optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 }, arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, + blast: { factory: "0xB9010964301326160173da694c0697a2FcE82F39", fromBlock: 286237 }, }); \ No newline at end of file From 5a80723aae0e80d2374cd4d169710efe96baf4fb Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Wed, 6 Mar 2024 22:12:32 +0700 Subject: [PATCH 0012/1768] update blast factory --- projects/dackieswap-v2/index.js | 2 +- projects/dackieswap/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 33477e7461..e7043afc96 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -34,7 +34,7 @@ module.exports = { }, blast: { tvl: getUniTVL({ - factory: "0x757cD583004400ee67e5cC3c7A60C6a62E3F6d30", + factory: "0xF5190E64dB4cbf7ee5E72B55cC5b2297e20264c2", useDefaultCoreAssets: true, fetchBalances: true }) diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index d4038adba0..f1960c087f 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -4,5 +4,5 @@ module.exports = uniV3Export({ base: { factory: "0x3D237AC6D2f425D2E890Cc99198818cc1FA48870", fromBlock: 2031627 }, optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 }, arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, - blast: { factory: "0xB9010964301326160173da694c0697a2FcE82F39", fromBlock: 286237 }, + blast: { factory: "0xd1575B2e0C82fba9Eddc3de9c9AAF923AFA670cC", fromBlock: 286237 }, }); \ No newline at end of file From ce73da832434fe0c22aeb30781a4212d65eab5e4 Mon Sep 17 00:00:00 2001 From: Alien Deployer Date: Thu, 7 Mar 2024 12:10:25 +0300 Subject: [PATCH 0013/1768] stability adapter --- projects/stability/abi.json | 5 +++++ projects/stability/index.js | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 projects/stability/abi.json create mode 100644 projects/stability/index.js diff --git a/projects/stability/abi.json b/projects/stability/abi.json new file mode 100644 index 0000000000..92693fc605 --- /dev/null +++ b/projects/stability/abi.json @@ -0,0 +1,5 @@ +{ + "vaultAddresses": "function vaultAddresses() view returns (address[] memory vaultAddress)", + "strategy": "address:strategy", + "assetsAmounts": "function assetsAmounts() view returns (address[] memory assets_, uint[] memory amounts_)" +} \ No newline at end of file diff --git a/projects/stability/index.js b/projects/stability/index.js new file mode 100644 index 0000000000..04cdaf721a --- /dev/null +++ b/projects/stability/index.js @@ -0,0 +1,43 @@ +const abi = require('./abi.json') + +const config = { + polygon: { + vaultManager: '0x6008b366058B42792A2497972A3312274DC5e1A8', + }, +} + +module.exports = {} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async function (_, _1, _2, { api }) { + // Stability Platform Vaults + // Get all vaults + const vaults = await api.call({ + abi: abi.vaultAddresses, + target: config[chain].vaultManager + }); + + // Get strategy addresses + const strategies = await api.multiCall({ abi: abi.strategy, calls: vaults, }) + + // Get all assets amounts managed by strategies + const assetsAmountsAll = await api.multiCall({ abi: abi.assetsAmounts, calls: strategies, }) + + // Get summary balances + const balances = {} + for (const assetsAmounts of assetsAmountsAll) { + for (let i = 0; i < assetsAmounts[0].length; i++) { + const asset = assetsAmounts[0][i] + if (balances[asset] === undefined) { + balances[asset] = 0 + } + balances[asset] += +assetsAmounts[1][i] + } + } + + // Add data + api.addTokens(Object.keys(balances), Object.keys(balances).map(asset => balances[asset])) + }, + } +}) \ No newline at end of file From 6c380d81946fbf95363f86209039e7abe6773424 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Thu, 21 Mar 2024 01:12:26 +0700 Subject: [PATCH 0014/1768] update inevm factory --- projects/dackieswap-v2/index.js | 7 +++++++ projects/dackieswap/index.js | 1 + 2 files changed, 8 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index e7043afc96..13d96e3f72 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -38,5 +38,12 @@ module.exports = { useDefaultCoreAssets: true, fetchBalances: true }) + }, + inevm: { + tvl: getUniTVL({ + factory: "0x507940c2469e6E3B33032F1d4FF8d123BDDe2f5C", + useDefaultCoreAssets: true, + fetchBalances: true + }) } }; \ No newline at end of file diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index f1960c087f..71aec8d493 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -5,4 +5,5 @@ module.exports = uniV3Export({ optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 }, arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, blast: { factory: "0xd1575B2e0C82fba9Eddc3de9c9AAF923AFA670cC", fromBlock: 286237 }, + inevm: { factory: "0xf79A36F6f440392C63AD61252a64d5d3C43F860D", fromBlock: 291933 }, }); \ No newline at end of file From 3c520a3cbeecb9e4715bc11fe569a4b19ebecc38 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sun, 7 Apr 2024 06:10:36 +0900 Subject: [PATCH 0015/1768] update mode factory --- projects/dackieswap-v2/index.js | 7 +++++++ projects/dackieswap/index.js | 1 + 2 files changed, 8 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 13d96e3f72..dedc33d322 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -45,5 +45,12 @@ module.exports = { useDefaultCoreAssets: true, fetchBalances: true }) + }, + mode: { + tvl: getUniTVL({ + factory: "0x757cD583004400ee67e5cC3c7A60C6a62E3F6d30", + useDefaultCoreAssets: true, + fetchBalances: true + }) } }; \ No newline at end of file diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 71aec8d493..78cca08f65 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -6,4 +6,5 @@ module.exports = uniV3Export({ arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, blast: { factory: "0xd1575B2e0C82fba9Eddc3de9c9AAF923AFA670cC", fromBlock: 286237 }, inevm: { factory: "0xf79A36F6f440392C63AD61252a64d5d3C43F860D", fromBlock: 291933 }, + mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, }); \ No newline at end of file From bdb23e2dff31858cf2a2a5150f59240a3f6c899b Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Thu, 16 May 2024 07:49:46 +0100 Subject: [PATCH 0016/1768] fix nile-v1 tvl --- projects/nile-exchange-v1/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/nile-exchange-v1/index.js b/projects/nile-exchange-v1/index.js index b5d73fca55..15f24f55bf 100644 --- a/projects/nile-exchange-v1/index.js +++ b/projects/nile-exchange-v1/index.js @@ -4,7 +4,7 @@ const { staking } = require('../helper/staking') module.exports = { misrepresentedTokens: true, linea:{ - tvl: getUniTVL({ factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', useDefaultCoreAssets: true, hasStablePools: true, stablePoolSymbol: 'crAMM' }), + tvl: getUniTVL({ factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', useDefaultCoreAssets: true, hasStablePools: true, stablePoolSymbol: 'cAMM' }), staking: staking("0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F", "0xAAAac83751090C6ea42379626435f805DDF54DC8"), }, } \ No newline at end of file From 984502a16e429ad17f5c84937dfd0a8ce5e9ac89 Mon Sep 17 00:00:00 2001 From: yanfeizuo Date: Fri, 19 Jul 2024 16:32:31 +0800 Subject: [PATCH 0017/1768] config ethereum for sumer --- projects/sumer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index 02958bea50..aaf4cf6016 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -4,4 +4,5 @@ module.exports = { meter: compoundExports2({ comptroller: '0xcB4cdDA50C1B6B0E33F544c98420722093B7Aa88' }), base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), arbitrum: compoundExports2({ comptroller: '0xBfb69860C91A22A2287df1Ff3Cdf0476c5aab24A' }), + ethereum: compoundExports2({ comptroller: '0x60A4570bE892fb41280eDFE9DB75e1a62C70456F' }), } \ No newline at end of file From c55fa82829bbeb09de717e07a7a14b26a1e1315a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 11:40:48 +0200 Subject: [PATCH 0018/1768] code refactor --- projects/bella.js | 12 ++++++------ projects/{config => }/bella/abis/bVault.js | 0 projects/{config => }/bella/abis/izi.js | 0 projects/{config => }/bella/izi.js | 0 projects/{config => }/bella/util.js | 0 5 files changed, 6 insertions(+), 6 deletions(-) rename projects/{config => }/bella/abis/bVault.js (100%) rename projects/{config => }/bella/abis/izi.js (100%) rename projects/{config => }/bella/izi.js (100%) rename projects/{config => }/bella/util.js (100%) diff --git a/projects/bella.js b/projects/bella.js index 4a1f0abafa..7eaaa8ac2e 100644 --- a/projects/bella.js +++ b/projects/bella.js @@ -1,8 +1,8 @@ const { sumTokens2 } = require('./helper/unwrapLPs') const ADDRESSES = require('./helper/coreAssets.json'); -const { getPoolLiquidityAmount } = require('./config/bella/izi'); -const iziABI = require('./config/bella/abis/izi'); +const { getPoolLiquidityAmount } = require('./bella/izi'); +const iziABI = require('./bella/abis/izi'); const bVaults = { bUsdt: '0x2c23276107b45E64c8c59482f4a24f4f2E568ea6', @@ -24,6 +24,7 @@ async function tvl(api) { const utokens = await api.multiCall({ calls: tokens, abi: 'address:token'}) const bals = await api.multiCall({ calls: tokens, abi: "uint256:underlyingBalance"}) api.add(utokens, bals) + } async function pool2(api) { @@ -35,7 +36,7 @@ module.exports = { tvl, pool2, }, - manta: { + manta: { pool2: async (api) => { const STONE = '0xEc901DA9c68E90798BbBb74c11406A32A70652C3' const WUSDM = '0xbdAd407F77f44F7Da6684B416b1951ECa461FB07' @@ -106,10 +107,9 @@ module.exports = { const infoABI = "function getMiningContractInfo() external view returns (address tokenX, address tokenY, uint24 fee_, address iziTokenAddr, uint256 lastTouchTime_, uint256 totalVLiquidity_, uint256 bal0, uint256 bal1, uint256 balIzi, uint256 startTime_, uint256 endTime_)" const data = await api.multiCall({ abi: infoABI, calls: pool2s }) - const transform = i => i.toLowerCase() === '0xb83cfb285fc8d936e8647fa9b1cc641dbaae92d9' ? 'ethereum:0xa91ac63d040deb1b7a5e4d4134ad23eb0ba07e14' : 'era:' + i for (const { tokenX, tokenY, iziTokenAddr, bal0, bal1, balIzi } of data) { - api.add(transform(tokenX), bal0, { skipChain: true }) - api.add(transform(tokenY), bal1, { skipChain: true }) + api.add(tokenX, bal0) + api.add(tokenY, bal1) api.add(iziTokenAddr, balIzi) } }, diff --git a/projects/config/bella/abis/bVault.js b/projects/bella/abis/bVault.js similarity index 100% rename from projects/config/bella/abis/bVault.js rename to projects/bella/abis/bVault.js diff --git a/projects/config/bella/abis/izi.js b/projects/bella/abis/izi.js similarity index 100% rename from projects/config/bella/abis/izi.js rename to projects/bella/abis/izi.js diff --git a/projects/config/bella/izi.js b/projects/bella/izi.js similarity index 100% rename from projects/config/bella/izi.js rename to projects/bella/izi.js diff --git a/projects/config/bella/util.js b/projects/bella/util.js similarity index 100% rename from projects/config/bella/util.js rename to projects/bella/util.js From 1e8da68bb7c4c33a619b31b1ef9d8d9387b47fd7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:08:34 +0200 Subject: [PATCH 0019/1768] code refactor --- projects/demodyfi/index.js | 135 ++------------------------------ projects/hbtc.js | 10 +-- projects/helper/coreAssets.json | 1 - projects/imbtc.js | 10 +-- projects/snowbank.js | 46 +---------- projects/strudel.js | 10 +-- projects/typhoon.js | 20 +---- projects/unagii.js | 40 ++-------- projects/valuedefi.js | 38 ++------- projects/velhalla.js | 22 +----- 10 files changed, 43 insertions(+), 289 deletions(-) diff --git a/projects/demodyfi/index.js b/projects/demodyfi/index.js index 5d4e830a96..56664c44bd 100644 --- a/projects/demodyfi/index.js +++ b/projects/demodyfi/index.js @@ -1,139 +1,18 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); -const wGLMR = ADDRESSES.moonbeam.WGLMR; -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); - -async function dmodBscStakingPool(timestamp, block, chainBlocks) { - const stakingBalance = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:balanceOf", - chain: "bsc", - target: "0x002D8563759f5e1EAf8784181F3973288F6856e4", - params: ["0xc94e085E2E2D92A950fa4A6B923263C0B47c6dBa"], - block: chainBlocks["bsc"], - }) - ).output - ); - - const decimals = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:decimals", - chain: "bsc", - target: "0x002D8563759f5e1EAf8784181F3973288F6856e4", - params: [], - block: chainBlocks["bsc"], - }) - ).output - ); - - return { 'demodyfi': stakingBalance.div(new BigNumber(10).pow(decimals)).toFixed(0) }; -} -async function dmodEthereumStakingPool(timestamp, block, chainBlocks) { - const stakingBalance = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:balanceOf", - chain: "ethereum", - target: ADDRESSES.moonbeam.WGLMR, - params: ["0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683"], - block - }) - ).output - ); - - const decimals = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:decimals", - chain: "ethereum", - target: ADDRESSES.moonbeam.WGLMR, - params: [], - block - }) - ).output - ); - - return { 'demodyfi': stakingBalance.div(new BigNumber(10).pow(decimals)).toFixed(0) }; -} -async function dmodBscLPPool(timestamp, block, chainBlocks) { - const transform = i => `bsc:${i}`; - const balances = {}; - - const lpTokenbalance = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:balanceOf", - chain: "bsc", - target: "0x0f35d854C267D29C0E418F561b75aE09B9E413D4", - params: ["0xc94e085E2E2D92A950fa4A6B923263C0B47c6dBa"], - block: chainBlocks["bsc"], - }) - ).output - ); - - await unwrapUniswapLPs( - balances, - [ - { - balance: lpTokenbalance, - token: "0x0f35d854C267D29C0E418F561b75aE09B9E413D4", - }, - ], - chainBlocks["bsc"], - "bsc", - transform - ); - - return balances; -} -async function dmodEthereumLPPool(timestamp, block, chainBlocks) { - const balances = {}; - - const lpTokenbalance = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:balanceOf", - chain: "ethereum", - target: "0xD5B1Cd8D245A93E0697707AEe82497388508b132", - params: ["0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683"], - block - }) - ).output - ); - - await unwrapUniswapLPs( - balances, - [ - { - balance: lpTokenbalance, - token: "0xD5B1Cd8D245A93E0697707AEe82497388508b132", - }, - ], - block, - "ethereum" - ); - - return balances; -} +const { staking } = require('../helper/staking') +const { pool2 } = require('../helper/pool2') module.exports = { misrepresentedTokens: true, ethereum: { - tvl: () => ({}), - staking: dmodEthereumStakingPool, - pool2: dmodEthereumLPPool + staking: staking('0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683', '0x5f6c5C2fB289dB2228d159C69621215e354218d7'), + pool2: pool2('0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683', '0xD5B1Cd8D245A93E0697707AEe82497388508b132'), }, bsc: { - tvl: () => ({}), - staking: dmodBscStakingPool, - pool2: dmodBscLPPool + staking: staking('0xc94e085E2E2D92A950fa4A6B923263C0B47c6dBa', '0x002D8563759f5e1EAf8784181F3973288F6856e4'), + pool2: pool2('0xc94e085E2E2D92A950fa4A6B923263C0B47c6dBa', '0x0f35d854C267D29C0E418F561b75aE09B9E413D4'), }, moonbeam: { tvl: getUniTVL({ factory: '0x61999fAb7fdcEe1B26b82b5c2f825BCC8F8c2458', useDefaultCoreAssets: true }), }, -}; -// node test.js projects/demodyfi/index.js \ No newline at end of file +}; \ No newline at end of file diff --git a/projects/hbtc.js b/projects/hbtc.js index c75e4383f4..9fc2122d58 100644 --- a/projects/hbtc.js +++ b/projects/hbtc.js @@ -1,9 +1,7 @@ -const sdk = require('@defillama/sdk') - -async function tvl(ts, block) { - return { - '0x0316EB71485b0Ab14103307bf65a021042c6d380': (await sdk.api.erc20.totalSupply({ target: '0x0316EB71485b0Ab14103307bf65a021042c6d380', block })).output - } +async function tvl(api) { + const hbtc = '0x0316EB71485b0Ab14103307bf65a021042c6d380' + const supply = await api.call({ abi: 'erc20:totalSupply', target: hbtc }) + api.add(hbtc, supply) } module.exports = { diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index afed2434df..d11ebf23c1 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -513,7 +513,6 @@ "_AVAX": "0x525bd1f949ffa2a0c5820f3b6fe61bb897466ff7", "SWAPZ": "0x9b6fbf0ea23faf0d77b94d5699b44062e5e747ac", "DAI": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "SCAR": "0x8d9fb713587174ee97e91866050c383b5cee6209", "sVLX": "0xaadbaa6758fc00dec9b43a0364a372605d8f1883", "VLX": "0x2b1abeb48f875465bf0d3a262a2080ab1c7a3e39", "ETH_1": "0x380f73bad5e7396b260f737291ae5a8100baabcd", diff --git a/projects/imbtc.js b/projects/imbtc.js index e83d4b92af..7d80f59ec1 100644 --- a/projects/imbtc.js +++ b/projects/imbtc.js @@ -1,10 +1,8 @@ -const sdk = require('@defillama/sdk') - -async function tvl(ts, block) { - return { - 'bitcoin': (await sdk.api.erc20.totalSupply({ target: '0x3212b29E33587A00FB1C83346f5dBFA69A458923', block })).output / 1e8 - } +async function tvl(api) { + const imBTC = '0x3212b29E33587A00FB1C83346f5dBFA69A458923' + const supply = await api.call({ abi: 'erc20:totalSupply', target: imBTC }) + api.add(imBTC, supply) } module.exports = { diff --git a/projects/snowbank.js b/projects/snowbank.js index a395f0226a..45e333f821 100644 --- a/projects/snowbank.js +++ b/projects/snowbank.js @@ -1,51 +1,11 @@ -const { sumTokensAndLPsSharedOwners } = require("./helper/unwrapLPs"); -const sdk = require('@defillama/sdk'); - +const { staking } = require('./helper/staking') const TimeStaking = "0x85784d5e2CCae89Bcb39EbF0ac6Cdc93d42d99AD" const time = "0x7d1232b90d3f809a54eeaeebc639c62df8a8942f" -const staking = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const stakingBalance = await sdk.api.abi.call({ - abi: 'erc20:balanceOf', - target: time, - params: TimeStaking, - block: chainBlocks.avax, - chain: 'avax' - }); - - sdk.util.sumSingleBalance(balances, 'avax:'+time, stakingBalance.output); - - return balances; -}; - -// https://app.wonderland.money/#/bonds -const treasury = "0xa82422A5FD4F9cB85cD4aAc393cD3296A27dD873" -const mim = "0x130966628846BFd36ff31a822705796e8cb8C18D" - -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [mim, false], - ["0x425c45adfb53861e5db8f17d9b072ab60d4404d8", true], - ["0xa3d2cfe49df9d1ea0dc589b69252e1eddc417d6d", true], - ], - [treasury], - chainBlocks.avax, - 'avax', - addr=>addr.toLowerCase()==="0x130966628846bfd36ff31a822705796e8cb8c18d"?"0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3":`avax:${addr}` - ); - - return balances; -} module.exports = { avax:{ - tvl, - staking + tvl: () => ({}), + staking: staking(TimeStaking, time) }, methodology: "Counts tokens on the treasury for tvl and staked SB for staking", diff --git a/projects/strudel.js b/projects/strudel.js index bb5eda5226..5a2896b567 100644 --- a/projects/strudel.js +++ b/projects/strudel.js @@ -1,9 +1,7 @@ -const sdk = require('@defillama/sdk') - -async function tvl(ts, block) { - return { - 'bitcoin': (await sdk.api.erc20.totalSupply({ target: '0xe1406825186D63980fd6e2eC61888f7B91C4bAe4', block })).output / 1e18 - } +async function tvl(api) { + const BTC = '0xe1406825186D63980fd6e2eC61888f7B91C4bAe4' + const supply = await api.call({ abi: 'erc20:totalSupply', target: BTC }) + api.addCGToken('bitcoin', supply/1e18) } module.exports = { diff --git a/projects/typhoon.js b/projects/typhoon.js index e919f9fe1e..6fb3199e55 100644 --- a/projects/typhoon.js +++ b/projects/typhoon.js @@ -1,21 +1,9 @@ -const ADDRESSES = require('./helper/coreAssets.json') -const sdk = require('@defillama/sdk'); +const { sumTokensExport, nullAddress } = require('./helper/unwrapLPs'); const tornado = '0x9cDb933eDab885bB767658B9ED5C3800bc1d761B'; const reserve = '0xC9B4Dff1ce5384C7014579099e63EA0092e14eD5'; -const weth = ADDRESSES.ethereum.WETH; - -async function tvl(timestamp, block) { - return { [weth] : Number((await sdk.api.eth.getBalance({ - target: tornado, - block - })).output) + Number((await sdk.api.eth.getBalance({ - target: reserve, - block - })).output)}; -} module.exports = { - ethereum: { - tvl - } + ethereum: { + tvl: sumTokensExport({ tokens: [nullAddress], owners: [tornado, reserve], }) + } }; \ No newline at end of file diff --git a/projects/unagii.js b/projects/unagii.js index 20408950ca..5ace1a038a 100644 --- a/projects/unagii.js +++ b/projects/unagii.js @@ -1,9 +1,4 @@ -const sdk = require('@defillama/sdk') -const { getChainTransform } = require('./helper/portedTokens') -const chain = 'ethereum' - -async function tvl(_, block) { - const transform = await getChainTransform(chain) +async function tvl(api) { const vaults = [ '0x4aD0b81f92B16624BBcF46FC0030cFBBf8d02376', '0xBc5991cCd8cAcEba01edC44C2BB9832712c29cAB', @@ -20,38 +15,15 @@ async function tvl(_, block) { '0xDe07f45688cb6CfAaC398c1485860e186D55996D', ] - const { output: minters } = await sdk.api.abi.multiCall({ - abi: abi.minter, - calls: v2Vaults.map(i => ({ target: i })), - chain, block, - }) - - minters.forEach(({ output }) => vaults.push(output)) - - const { output: tokens } = await sdk.api.abi.multiCall({ - abi: abi.token, - calls: vaults.map(i => ({ target: i })), - chain, block, - }) - - const { output: totalAssets } = await sdk.api.abi.multiCall({ - abi: abi.totalAssets, - calls: vaults.map(i => ({ target: i })), - chain, block, - }) - const balances = {} - tokens.forEach(({ output }, i) => sdk.util.sumSingleBalance(balances, transform(output), totalAssets[i].output)) - return balances + const minters = await api.multiCall({ abi: "address:minter", calls: v2Vaults}) + vaults.push(...minters) + const tokens = await api.multiCall({ abi: 'address:token', calls: vaults}) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults}) + api.add(tokens, bals) } module.exports = { ethereum: { tvl } -} - -const abi = { - minter: "address:minter", - token: "address:token", - totalAssets: "uint256:totalAssets", } \ No newline at end of file diff --git a/projects/valuedefi.js b/projects/valuedefi.js index 71df0f5602..289eeec283 100644 --- a/projects/valuedefi.js +++ b/projects/valuedefi.js @@ -18,42 +18,20 @@ const bscDexTVL = getUniTVL({ useDefaultCoreAssets: true, }) -async function bscStableSwapTvl(_, _b, { bsc: block }) { - const chain = 'bsc' - const { output: poolLength } = await sdk.api.abi.call({ - target: stableSwapFactory, - abi: abis.allPoolsLength, - chain, block, - }) - - const params = createIncrementArray(poolLength).map(i => ({ params: i })) - - const { output: pools } = await sdk.api.abi.multiCall({ - target: stableSwapFactory, - abi: abis.allPools, - calls: params, - chain, block, - }) +async function bscStableSwapTvl(api) { + const pools = await api.fetchList({ lengthAbi: 'allPoolsLength', itemAbi: 'allPools', target: stableSwapFactory}) - const { output: tokenLength } = await sdk.api.abi.multiCall({ - abi: abis.getTokenLength, - calls: pools.map(i => ({ target: i.output })), - chain, block, - }) + const tokenLength = await api.multiCall({ abi: abis.getTokenLength, calls: pools, }) const tokenCalls = [] - tokenLength.forEach(i => { - createIncrementArray(i.output).forEach(j => tokenCalls.push({ target: i.input.target, params: j })) + tokenLength.forEach((i, idx) => { + createIncrementArray(i).forEach(j => tokenCalls.push({ target: pools[idx], params: j })) }) - const { output: tokens } = await sdk.api.abi.multiCall({ - abi: abis.getToken, - calls: tokenCalls, - chain, block, - }) + const tokens = await api.multiCall({ abi: abis.getToken, calls: tokenCalls, }) - const toa = tokens.map(i => ([i.output, i.input.target])) - return sumTokens2({ tokensAndOwners: toa, chain, block }) + const toa = tokens.map((i, idx) => ([i, tokenCalls[idx].target])) + return sumTokens2({ tokensAndOwners: toa, api}) } module.exports = { diff --git a/projects/velhalla.js b/projects/velhalla.js index 7c4ceb9579..be54a03c1f 100644 --- a/projects/velhalla.js +++ b/projects/velhalla.js @@ -1,24 +1,8 @@ -const ADDRESSES = require('./helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const owner = "0x7DeD7f9D3dF541190F666FB6897483e46D54e948"; -const target = ADDRESSES.velas.SCAR; - -async function staking(timestamp, block, chainBlocks) { - return { - [`bsc:${target}`]: ( - await sdk.api.erc20.balanceOf({ - target, - owner, - block: chainBlocks.velas, - chain: "velas", - }) - ).output, - }; -} +const { staking } = require('./helper/staking') module.exports = { velas: { tvl: () => ({}), - staking, + staking: staking('0x7DeD7f9D3dF541190F666FB6897483e46D54e948', '0x8d9fb713587174ee97e91866050c383b5cee6209'), }, -}; \ No newline at end of file +} \ No newline at end of file From ca53677707fda901b19a4d4ce07dd9426b999306 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:08:38 +0200 Subject: [PATCH 0020/1768] code refactor --- projects/delta/index.js | 71 ++++------------------------------------- 1 file changed, 6 insertions(+), 65 deletions(-) diff --git a/projects/delta/index.js b/projects/delta/index.js index e0ad89e1b9..c7a6143220 100644 --- a/projects/delta/index.js +++ b/projects/delta/index.js @@ -1,6 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); const { staking } = require("../helper/staking"); const vaultStakingContract = "0x9fE9Bb6B66958f2271C4B0aD23F6E8DDA8C221BE"; @@ -8,74 +5,18 @@ const rebasingContract = "0xfcfC434ee5BfF924222e084a8876Eee74Ea7cfbA"; const DELTA_WETH_SLP = "0x1498bd576454159Bb81B5Ce532692a8752D163e8"; const DELTA = "0x9EA3b5b4EC044b70375236A281986106457b20EF"; -const WETH = ADDRESSES.ethereum.WETH; -async function Pool2(timestamp, block) { - const balances = {}; - - const totalSupply_slp = ( - await sdk.api.erc20.totalSupply({ - target: DELTA_WETH_SLP, - }) - ).output; - - const totalSupply_rlp = ( - await sdk.api.erc20.totalSupply({ - target: rebasingContract, - }) - ).output; - - const balance_slp = ( - await sdk.api.abi.call({ - abi: 'erc20:balanceOf', - target: DELTA_WETH_SLP, - params: rebasingContract, - block - }) - ).output; - - const balance_rlp = ( - await sdk.api.abi.call({ - abi: 'erc20:balanceOf', - target: rebasingContract, - params: vaultStakingContract, - block - }) - ).output; - - const underlyingsBalance = ( - await sdk.api.abi.multiCall({ - calls: [DELTA, WETH].map((token) => ({ - target: token, - params: DELTA_WETH_SLP, - })), - abi: 'erc20:balanceOf', - block - }) - ).output; - - underlyingsBalance.forEach((call) => { - const underlyingSetBalance = BigNumber(call.output) - .times(balance_slp) - .div(totalSupply_slp) - .times(balance_rlp) - .div(totalSupply_rlp); - - sdk.util.sumSingleBalance( - balances, - call.input.target, - underlyingSetBalance.toFixed(0) - ); - }); - - return balances; +async function pool2(api) { + const totalSupply_rlp = await api.call({ abi: 'erc20:totalSupply', target: rebasingContract, }) + const balance_slp = await api.call({ abi: 'erc20:balanceOf', target: DELTA_WETH_SLP, params: rebasingContract, }) + const balance_rlp = await api.call({ abi: 'erc20:balanceOf', target: rebasingContract, params: vaultStakingContract, }) + api.add(DELTA_WETH_SLP, balance_slp * balance_rlp / totalSupply_rlp) } module.exports = { - misrepresentedTokens: true, ethereum: { staking: staking(vaultStakingContract, DELTA), - pool2: Pool2, + pool2, tvl: async () => ({}) }, methodology: "Counts liquidty on the Staking and Pool2", From 45c253c46cde41963412a38eb783a2c850d7db74 Mon Sep 17 00:00:00 2001 From: buto Date: Thu, 15 Aug 2024 13:11:51 +0300 Subject: [PATCH 0021/1768] fix: marinade tvl (#11306) --- projects/marinade.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/projects/marinade.js b/projects/marinade.js index 18b1555992..82d33f65dc 100644 --- a/projects/marinade.js +++ b/projects/marinade.js @@ -10,11 +10,14 @@ async function tvl() { account: { validatorSystem: { totalActiveBalance }, availableReserveBalance, + emergencyCoolingDown, }, },] = await program.account.state.all() + const balances = { - solana: (+totalActiveBalance + +availableReserveBalance) / 1e9 + solana: (+totalActiveBalance + +availableReserveBalance + +emergencyCoolingDown) / 1e9 } + return sumTokens2({ balances, solOwners: ['UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q'] }) // Liq Pool Sol Leg Pda } @@ -24,5 +27,5 @@ module.exports = { ], timetravel: false, solana: { tvl }, - methodology: `We sum the amount of SOL staked, SOL in reserve address: Du3Ysj1wKbxPKkuPPnvzQLQh8oMSVifs3jGZjJWXFmHN and SOL in the Liquidity pool: UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q`, -} + methodology: `We sum the amount of SOL staked, SOL in reserve address: Du3Ysj1wKbxPKkuPPnvzQLQh8oMSVifs3jGZjJWXFmHN, SOL in the Liquidity pool: UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q, and the emergency cooling down balance.`, +} \ No newline at end of file From d17fba3edc6d431ff0613f0fae22fc7053a2d1a9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:12:49 +0200 Subject: [PATCH 0022/1768] Revert "fix: marinade tvl (#11306)" (#11308) This reverts commit 45c253c46cde41963412a38eb783a2c850d7db74. --- projects/marinade.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/projects/marinade.js b/projects/marinade.js index 82d33f65dc..18b1555992 100644 --- a/projects/marinade.js +++ b/projects/marinade.js @@ -10,14 +10,11 @@ async function tvl() { account: { validatorSystem: { totalActiveBalance }, availableReserveBalance, - emergencyCoolingDown, }, },] = await program.account.state.all() - const balances = { - solana: (+totalActiveBalance + +availableReserveBalance + +emergencyCoolingDown) / 1e9 + solana: (+totalActiveBalance + +availableReserveBalance) / 1e9 } - return sumTokens2({ balances, solOwners: ['UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q'] }) // Liq Pool Sol Leg Pda } @@ -27,5 +24,5 @@ module.exports = { ], timetravel: false, solana: { tvl }, - methodology: `We sum the amount of SOL staked, SOL in reserve address: Du3Ysj1wKbxPKkuPPnvzQLQh8oMSVifs3jGZjJWXFmHN, SOL in the Liquidity pool: UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q, and the emergency cooling down balance.`, -} \ No newline at end of file + methodology: `We sum the amount of SOL staked, SOL in reserve address: Du3Ysj1wKbxPKkuPPnvzQLQh8oMSVifs3jGZjJWXFmHN and SOL in the Liquidity pool: UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q`, +} From 3ca314c67b8e28669175b3e121e880e6afab33f4 Mon Sep 17 00:00:00 2001 From: LidoKing <55234791+LidoKing@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:20:32 +0800 Subject: [PATCH 0023/1768] add tvl from v2 program (#11302) --- projects/nxfinance/index.js | 21 ++- .../nxfinance/{nx-idl.json => nx-idl-v1.json} | 0 projects/nxfinance/nx-idl-v2.json | 167 ++++++++++++++++++ 3 files changed, 182 insertions(+), 6 deletions(-) rename projects/nxfinance/{nx-idl.json => nx-idl-v1.json} (100%) create mode 100644 projects/nxfinance/nx-idl-v2.json diff --git a/projects/nxfinance/index.js b/projects/nxfinance/index.js index 98400c018a..01d45f48f7 100644 --- a/projects/nxfinance/index.js +++ b/projects/nxfinance/index.js @@ -1,16 +1,25 @@ const { Program } = require("@project-serum/anchor"); const { getProvider, } = require("../helper/solana"); -const nxIdl = require("./nx-idl.json"); +const nxIdlV1 = require("./nx-idl-v1.json"); +const nxIdlV2 = require("./nx-idl-v2.json"); -const NX_PROGRAM_ADDR = "EHBN9YKtMmrZhj8JZqyBQRGqyyeHw5xUB1Q5eAHszuMt"; +const NX_PROGRAM_ADDR_V1 = "EHBN9YKtMmrZhj8JZqyBQRGqyyeHw5xUB1Q5eAHszuMt"; +const NX_PROGRAM_ADDR_V2 = "NXFiKimQN3QSL3CDhCXddyVmLfrai8HK36bHKaAzK7g"; async function tvl(api) { const provider = getProvider(); - const nx_program = new Program(nxIdl, NX_PROGRAM_ADDR, provider); - const accounts = await nx_program.account.marginPool.all() - for (let { account: pool } of accounts) - api.add(pool.tokenMint.toBase58(), pool.depositTokens.toString()) + const nx_program_v1 = new Program(nxIdlV1, NX_PROGRAM_ADDR_V1, provider) + const nx_program_v2 = new Program(nxIdlV2, NX_PROGRAM_ADDR_V2, provider) + const res = await Promise.all([ + nx_program_v1.account.marginPool.all(), + nx_program_v2.account.collateralPool.all(), + nx_program_v2.account.lendingPool.all() + ]) + + for (let value of res) + for (let { account: pool } of value) + api.add(pool.tokenMint.toBase58(), pool.depositTokens.toString()) } module.exports = { diff --git a/projects/nxfinance/nx-idl.json b/projects/nxfinance/nx-idl-v1.json similarity index 100% rename from projects/nxfinance/nx-idl.json rename to projects/nxfinance/nx-idl-v1.json diff --git a/projects/nxfinance/nx-idl-v2.json b/projects/nxfinance/nx-idl-v2.json new file mode 100644 index 0000000000..deb4ab7486 --- /dev/null +++ b/projects/nxfinance/nx-idl-v2.json @@ -0,0 +1,167 @@ +{ + "version": "0.1.0", + "name": "nx_lend", + "instructions": [], + "accounts": [ + { + "name": "CollateralPool", + "type": { + "kind": "struct", + "fields": [ + { + "name": "nxMarket", + "docs": [ + "Market's pubkey" + ], + "type": "publicKey" + }, + { + "name": "marketAuthority", + "docs": [ + "The pool authority to act" + ], + "type": "publicKey" + }, + { + "name": "tokenMint", + "docs": [ + "The token the pool allows lending and borrowing on" + ], + "type": "publicKey" + }, + { + "name": "depositTokens", + "docs": [ + "The total amount of tokens available in the pool's vault" + ], + "type": "u64" + }, + { + "name": "depositNotes", + "docs": [ + "The total amount of notes issued to depositors of tokens." + ], + "type": "u64" + } + ] + } + }, + { + "name": "LendingPool", + "type": { + "kind": "struct", + "fields": [ + { + "name": "nxMarket", + "docs": [ + "Market's pubkey" + ], + "type": "publicKey" + }, + { + "name": "tokenMint", + "docs": [ + "The pool authority to act", + "The token the pool allows lending and borrowing on" + ], + "type": "publicKey" + }, + { + "name": "borrowTokens", + "docs": [ + "The total amount of tokens borrowed, that need to be repaid to", + "the pool." + ], + "type": "u64" + }, + { + "name": "borrowNotes", + "docs": [ + "The total amount of notes issued to borrowers of tokens" + ], + "type": "u64" + }, + { + "name": "depositTokens", + "docs": [ + "The total amount of tokens available in the pool's vault" + ], + "type": "u64" + }, + { + "name": "depositNotes", + "docs": [ + "The total amount of notes issued to depositors of tokens." + ], + "type": "u64" + }, + { + "name": "depositInterest", + "type": "u64" + }, + { + "name": "borrowInterest", + "docs": [ + "Amount of unrepaid interest by borrowers, for loan note exchange rate calculation" + ], + "type": "u64" + }, + { + "name": "protocolFee", + "docs": [ + "10% of interest goes to the protocol," + ], + "type": "u64" + }, + { + "name": "accruedUntil", + "docs": [ + "The time the interest was last accrued up to" + ], + "type": "i64" + }, + { + "name": "utilizationFlag", + "docs": [ + "If the utilization rate is flagged as full" + ], + "type": "u16" + }, + { + "name": "interestRateConfigs", + "type": { + "vec": { + "defined": "InterestRateData" + } + } + } + ] + } + } + ], + "types": [ + { + "name": "InterestRateData", + "type": { + "kind": "struct", + "fields": [ + { + "name": "utilizationRate", + "docs": [ + "y=kx+b x=utilization_rate y=interest_rate" + ], + "type": "i32" + }, + { + "name": "kValue", + "type": "i32" + }, + { + "name": "bValue", + "type": "i32" + } + ] + } + } + ] +} \ No newline at end of file From a6ec4de62de7cb095baf4fd9235900c7d1d190ef Mon Sep 17 00:00:00 2001 From: 0xsign <99134502+0xsign@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:22:52 +0200 Subject: [PATCH 0024/1768] Mellow add Re7rwBTC vault (#11298) --- projects/mellow-protocol-v2/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/mellow-protocol-v2/index.js b/projects/mellow-protocol-v2/index.js index 476d2c9cf1..f6cb5cb78f 100644 --- a/projects/mellow-protocol-v2/index.js +++ b/projects/mellow-protocol-v2/index.js @@ -11,7 +11,8 @@ const config = { '0x82dc3260f599f4fC4307209A1122B6eAa007163b', '0xd6E09a5e6D719d1c881579C9C8670a210437931b', '0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811', - '0x5E362eb2c0706Bd1d134689eC75176018385430B' + '0x5E362eb2c0706Bd1d134689eC75176018385430B', + '0x7F43fDe12A40dE708d908Fb3b9BFB8540d9Ce444' ], }, } From de25b6add6673f88d37ae6735478bd00da2ca462 Mon Sep 17 00:00:00 2001 From: Paxe Date: Thu, 15 Aug 2024 13:39:07 +0300 Subject: [PATCH 0025/1768] paxe project listing (#11296) * paxe project listing * paxe tvl adapters update * Update index.js --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/paxe/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/paxe/index.js diff --git a/projects/paxe/index.js b/projects/paxe/index.js new file mode 100644 index 0000000000..eb070c98bc --- /dev/null +++ b/projects/paxe/index.js @@ -0,0 +1,13 @@ +const { staking } = require("../helper/staking") + +const PAXE_TOKEN = "0xd2A3eec06719D5Ac66248003B5488E02165dd2fa" +const PAXE_FARMING_CONTRACT = '0xbA576f5ecbA5182a20f010089107dFb00502241f' +const RESTAKING_POOL = '0x269e1ceb128ccCD5684BbAFF9906D69eD1e9e9C8' + +module.exports = { + methodology: 'We count the TVL on the PAXE token in the farming contract and the restaking pool', + bsc: { + tvl: () => ({}), + staking: staking([RESTAKING_POOL, PAXE_FARMING_CONTRACT], PAXE_TOKEN) + } +} From 4ba7d7b8f5f058a9339277b95f139d74669cbafe Mon Sep 17 00:00:00 2001 From: Aleksei Lushnikov Date: Thu, 15 Aug 2024 13:39:28 +0300 Subject: [PATCH 0026/1768] symbiosis adds USDC.ETH supprt on zetachain (#11310) --- projects/symbiosis-finance/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/symbiosis-finance/config.js b/projects/symbiosis-finance/config.js index bc211d0e2e..46832f3c71 100644 --- a/projects/symbiosis-finance/config.js +++ b/projects/symbiosis-finance/config.js @@ -385,6 +385,7 @@ module.exports = { name: 'zeta', tokens: [ TOKENS.zeta.pufETH, + ADDRESSES.zeta.USDC_1, ], holders: [ '0x8a7F930003BedD63A1ebD99C5917FD6aE7E3dedf', // portal v2 From cb8b06adfd618b491ee99b4b341e10a850ab0f11 Mon Sep 17 00:00:00 2001 From: 0xIvan <83612730+0xIvan@users.noreply.github.com> Date: Thu, 15 Aug 2024 21:29:29 +0800 Subject: [PATCH 0027/1768] Add Smart LP TVL (#11314) * Change file name * Remove unused * Refactor * Add stip farm tvl * Remove double counting * Update addreess * Add new staking contract * Add new jusdc * Jones - add smart lp tvl * minor refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/jones-dao/addresses.js | 12 ++++++------ projects/jones-dao/index.js | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/projects/jones-dao/addresses.js b/projects/jones-dao/addresses.js index 6bcdf633ba..52d3218687 100644 --- a/projects/jones-dao/addresses.js +++ b/projects/jones-dao/addresses.js @@ -45,20 +45,20 @@ module.exports = { "0xF46Ce0C13577232D5F29D9Bd78a9Cab278755346", "0x42448fDDCec02124cf6dB19a9f91Dea7bB0e88e5", ], + smartLpArbFactories: [ + "0xFEFd54D82337d3Dacb5DE53083C22BA41ca76CC5", + "0xb385809cCdB2BD87A5Cd32ad09287399F0318a92", + "0xf965734b1750E64D9a01c991C5E630D279C34fd2", + "0xb754D87BdAb6Cc8c903abC2Bda9cE6B3c9481e60", + ], tokens: { - arb: ADDRESSES.arbitrum.ARB, aura: "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF", dpx: "0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55", - dpx_eth: "0x0C1Cf6883efA1B496B01f654E247B9b419873054", glp: ADDRESSES.arbitrum.fsGLP, gohm: "0x8D9bA570D6cb60C7e3e0F31343Efe75AB8E65FB1", jones: "0x10393c20975cf177a3513071bc110f7962cd67da", - jglp: "0x7241bC8035b65865156DDb5EdEf3eB32874a3AF6", rdpx: "0x32Eb7902D4134bf98A28b963D26de779AF92A212", - rdpx_eth: "0x7418F5A2621E13c05d1EFBd71ec922070794b90a", usdc: ADDRESSES.arbitrum.USDC_CIRCLE, uvrt: "0xa485a0bc44988B95245D5F20497CCaFF58a73E99", - weth: ADDRESSES.arbitrum.WETH, - wjaura: "0xcB9295ac65De60373A25C18d2044D517ed5da8A9", }, }; diff --git a/projects/jones-dao/index.js b/projects/jones-dao/index.js index 15c9d21578..fa378a17fe 100644 --- a/projects/jones-dao/index.js +++ b/projects/jones-dao/index.js @@ -43,6 +43,20 @@ async function tvl(api) { api.addTokens(metavaultTokens, metavaultBalances); api.addTokens(optionVaultTokens, optionVaultBalances); api.addTokens(addresses.tokens.usdc, jusdcTvl.output); + const getLPManagerContractsABI = "function getLPManagerContracts(uint256 _nonce) view returns (address lp,address viewer,address swapper,address receiver,address priceHelper,address lpManager,address doubleTracker,address singleTrackerZero,address singleTrackerOne,address compounder,address router)" + + + for (const factoryAddress of addresses.smartLpArbFactories) { + const contracts = await api.fetchList({ lengthAbi: 'nonce', itemAbi: getLPManagerContractsABI, target: factoryAddress, startFromOne: true }) + const lpManagers = contracts.map(c => c.lpManager) + + const token0s = await api.multiCall({ abi: "address:token0", calls: lpManagers }) + const token1s = await api.multiCall({ abi: "address:token1", calls: lpManagers }) + const aums = await api.multiCall({ abi: "function aum() returns (uint256 amount0, uint256 amount1)", calls: lpManagers }) + + api.add(token0s, aums.map(a => a.amount0)) + api.add(token1s, aums.map(a => a.amount1)) + } const tokensAndOwners = [ [addresses.tokens.uvrt, addresses.glp.stableRewardTracker], From 641ab3f15fe120f0c58964a62f4094e43146c4de Mon Sep 17 00:00:00 2001 From: Sergey R Date: Thu, 15 Aug 2024 15:29:36 +0200 Subject: [PATCH 0028/1768] added drop protocol (#11313) --- projects/drop/index.js | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 projects/drop/index.js diff --git a/projects/drop/index.js b/projects/drop/index.js new file mode 100644 index 0000000000..b8ddb5bef1 --- /dev/null +++ b/projects/drop/index.js @@ -0,0 +1,43 @@ +const sdk = require("@defillama/sdk"); +const { queryContract } = require('../helper/chain/cosmos') + +const chains = { + cosmos: { + chainId: "cosmoshub-4", + denom: "uatom", + coinGeckoId: "cosmos", + dropContract: "neutron16m3hjh7l04kap086jgwthduma0r5l0wh8kc6kaqk92ge9n5aqvys9q6lxr" + }, +}; + +function makeTvlFn(chain) { + return async () => { + const balances = {}; + const data = await queryContract({ + contract: chain.dropContract, + chain: "neutron", + data: { + "total_bonded": {} + } + }); + const assetBalance = parseInt(data, 10) / 1e6; + const amount = assetBalance; + + sdk.util.sumSingleBalance( + balances, + chain.coinGeckoId, + amount + ); + + return balances; + }; +} + +module.exports = { + timetravel: false, + methodology: "Sum of all the tokens that are liquid staked on DROP", +}; + +for (const chainName of Object.keys(chains)) { + module.exports[chainName] = { tvl: makeTvlFn(chains[chainName]) }; +} From 8d536ad8791a9fb73a47964ca75581044b27c572 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:40:40 +0200 Subject: [PATCH 0029/1768] update drop --- projects/drop/index.js | 44 +++++++++++------------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/projects/drop/index.js b/projects/drop/index.js index b8ddb5bef1..7cf5f94515 100644 --- a/projects/drop/index.js +++ b/projects/drop/index.js @@ -1,43 +1,21 @@ -const sdk = require("@defillama/sdk"); const { queryContract } = require('../helper/chain/cosmos') -const chains = { - cosmos: { - chainId: "cosmoshub-4", - denom: "uatom", +const config = { + neutron: [{ coinGeckoId: "cosmos", - dropContract: "neutron16m3hjh7l04kap086jgwthduma0r5l0wh8kc6kaqk92ge9n5aqvys9q6lxr" - }, + contract: "neutron16m3hjh7l04kap086jgwthduma0r5l0wh8kc6kaqk92ge9n5aqvys9q6lxr" + }], }; -function makeTvlFn(chain) { - return async () => { - const balances = {}; - const data = await queryContract({ - contract: chain.dropContract, - chain: "neutron", - data: { - "total_bonded": {} - } - }); - const assetBalance = parseInt(data, 10) / 1e6; - const amount = assetBalance; - - sdk.util.sumSingleBalance( - balances, - chain.coinGeckoId, - amount - ); - - return balances; - }; +async function tvl(api) { + for (const { coinGeckoId, contract, decimals = 6 } of config[api.chain]) { + const bonded = await queryContract({ contract, chain: api.chain, data: { "total_bonded": {} } }) + api.addCGToken(coinGeckoId, bonded / 10 ** decimals) + } } module.exports = { timetravel: false, methodology: "Sum of all the tokens that are liquid staked on DROP", -}; - -for (const chainName of Object.keys(chains)) { - module.exports[chainName] = { tvl: makeTvlFn(chains[chainName]) }; -} + neutron: { tvl } +} \ No newline at end of file From 5c90c4603e999035215f536648415e3db1227319 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:50:26 +0200 Subject: [PATCH 0030/1768] update dedust (#11312) --- projects/dedust/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/projects/dedust/index.js b/projects/dedust/index.js index 0d504ed2c0..14452d04ff 100644 --- a/projects/dedust/index.js +++ b/projects/dedust/index.js @@ -1,5 +1,11 @@ const { get } = require('../helper/http') +const { call } = require('../helper/chain/ton') const { transformDexBalances } = require('../helper/portedTokens') +const ADDRESSES = require("../helper/coreAssets.json"); + + +const SCALE_STAKING_ADDRESS = 'EQBNZB91JJX9Ub7KMEAUoQNVcQlCsob5e_WMFbvsML_UoAKD' +const SCALE = "EQBlqsm144Dq6SjbPI4jjZvA1hqTIP3CvHovbIfW_t-SCALE" module.exports = { misrepresentedTokens: true, @@ -17,6 +23,13 @@ module.exports = { token1Bal: i.right_token_reserve, })) }) + }, + staking: async (api) => { + const get_staking_data = await call({ target: SCALE_STAKING_ADDRESS, abi: "get_staking_data" }) + // TODO: move this to price server + const price_response = await get(`https://tonapi.io/v2/rates?tokens=${SCALE}¤cies=ton`) + const scale_price = price_response.rates[SCALE].prices.TON + return api.add(ADDRESSES.ton.TON, parseInt(get_staking_data[3]) * scale_price) } } } From b73856750c5cebf538eea501f1f972d6334304e9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:46:11 +0200 Subject: [PATCH 0031/1768] track cronos zkevm (#11316) --- package-lock.json | 14 +++++++------- projects/ebisus-bay/index.js | 23 +++++++++++++---------- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 5 ++++- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9894796191..b5a77a06d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -997,9 +997,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.76", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.76.tgz", - "integrity": "sha512-9aU+dFZjtWpkq9ESn84jg2C5QZDYd7lSyh49IKzWqVt065XIsOiUPm4BiF3htr0e8AzsWFlkUwvqYCr0z32oqA==", + "version": "5.0.78", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.78.tgz", + "integrity": "sha512-VnK7/9DeBjrEaN/CG6dNR6G9624ntVEPy8DRWSVDhaQ8FM4sMWfsYDQbM4o028BKT7CM3vxKku8SrI2iwcZsGQ==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", @@ -2248,11 +2248,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } diff --git a/projects/ebisus-bay/index.js b/projects/ebisus-bay/index.js index 32cf05c4aa..7d826375e2 100644 --- a/projects/ebisus-bay/index.js +++ b/projects/ebisus-bay/index.js @@ -1,20 +1,23 @@ const { staking } = require('../helper/staking') const { getUniTVL } = require('../helper/unknownTokens') -const factory = '0x5f1d751f447236f486f4268b883782897a902379' const frtnToken = '0xaF02D78F39C0002D14b95A3bE272DA02379AfF21' const bankContract = '0x1E16Aa4Bb965478Df310E8444CD18Fa56603A25F' module.exports = { - misrepresentedTokens: true, - methodology: "The TVL accounts for all LP on the dex, using the factory address 0x5f1d751f447236f486f4268b883782897a902379). Staking accounts for the FRTN staked in the bank on our platform.", - cronos: { - staking: staking(bankContract, frtnToken), - tvl: getUniTVL({ - factory, - useDefaultCoreAssets: true, - }), - }, + misrepresentedTokens: true, + methodology: "The TVL accounts for all LP on the dex, using the factory address 0x5f1d751f447236f486f4268b883782897a902379). Staking accounts for the FRTN staked in the bank on our platform.", } +const config = { + cronos: '0x5f1d751f447236f486f4268b883782897a902379', + cronos_zkevm: '0x1A695B3aC30D41F9A1D856A27DD0D9DdaaCe750d', +} + +Object.keys(config).forEach(chain => { + const factory = config[chain] + module.exports[chain] = { tvl: getUniTVL({ factory, useDefaultCoreAssets: true, }) } +}) + +module.exports.cronos.staking = staking(bankContract, frtnToken) \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 1d21a6407a..623870f0cb 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -70,6 +70,7 @@ "crab", "crescent", "cronos", + "cronos_zkevm", "csc", "cube", "curio", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index a91afada53..e059bcd931 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -42,7 +42,10 @@ const fixBalancesTokens = { }, islm: { '0x0ce35b0d42608ca54eb7bcc8044f7087c18e7717': { coingeckoId: 'usd-coin', decimals: 6 }, - } + }, + cronos_zkevm: { + '0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d': { coingeckoId: 'crypto-com-chain', decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 53b17adabd2ca6d2e28bf216d8b1dc4a2d1ca50e Mon Sep 17 00:00:00 2001 From: pie Date: Thu, 15 Aug 2024 23:11:24 +0800 Subject: [PATCH 0032/1768] feat: subtract the cgUSDT of withdrawal vault to reflect true TVL (#11317) * feat: subtract the cgUSDT in the withdrawal vault to reflect the true supply * chore: rename balance variable --- projects/cygnus-finance/index.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/projects/cygnus-finance/index.js b/projects/cygnus-finance/index.js index a4a696fe38..91b0350825 100644 --- a/projects/cygnus-finance/index.js +++ b/projects/cygnus-finance/index.js @@ -13,12 +13,15 @@ async function getJettonMetadata(addr) { const res = await get(`https://tonapi.io/v2/jettons/${addr}`) return res } +async function getJettonBalance(address, jettonMasterAddress) { + const res = await get(`https://tonapi.io/v2/accounts/${address}/jettons/${jettonMasterAddress}`) + return res.balance +} async function tonTvl() { const MINTER_ADDRESS = "EQCfvQW-thWpqKgyqtXCFbYayDlHqS0-frkyP6VD70paLFZa" const CGUSDT_ADDRESS = 'EQBIBw3mF_TDMJqWAZihVsyUBMWpWw_deftZLiCxTmrCUOKy' - const minterResult = await call({ target: MINTER_ADDRESS, abi: "get_minter_data", stack: [] }) // exchange rate from cgUSDT to USDT: decimal 9 const cgusdtTousdt = (minterResult[5]) / 10 ** 9 @@ -27,8 +30,11 @@ async function tonTvl() { const jettonResult = await getJettonMetadata(CGUSDT_ADDRESS) const cgUsdtTotalSupply = jettonResult['total_supply'] + // subtract the amount of cgUSDT in the withdrawal vault + const withdrawVaultBalance = await getJettonBalance(MINTER_ADDRESS, CGUSDT_ADDRESS) + // caculate tvl - const tvl = (cgUsdtTotalSupply) / 10 ** 6 * cgusdtTousdt + const tvl = (cgUsdtTotalSupply - withdrawVaultBalance) / 10 ** 6 * cgusdtTousdt return { "coingecko:tether": tvl } } From 03c7211e0140b8b71492a7d64f6d86ffd5b2875b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:12:50 +0200 Subject: [PATCH 0033/1768] Revert "Revert "fix: marinade tvl (#11306)" (#11308)" (#11309) This reverts commit d17fba3edc6d431ff0613f0fae22fc7053a2d1a9. --- projects/marinade.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/projects/marinade.js b/projects/marinade.js index 18b1555992..82d33f65dc 100644 --- a/projects/marinade.js +++ b/projects/marinade.js @@ -10,11 +10,14 @@ async function tvl() { account: { validatorSystem: { totalActiveBalance }, availableReserveBalance, + emergencyCoolingDown, }, },] = await program.account.state.all() + const balances = { - solana: (+totalActiveBalance + +availableReserveBalance) / 1e9 + solana: (+totalActiveBalance + +availableReserveBalance + +emergencyCoolingDown) / 1e9 } + return sumTokens2({ balances, solOwners: ['UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q'] }) // Liq Pool Sol Leg Pda } @@ -24,5 +27,5 @@ module.exports = { ], timetravel: false, solana: { tvl }, - methodology: `We sum the amount of SOL staked, SOL in reserve address: Du3Ysj1wKbxPKkuPPnvzQLQh8oMSVifs3jGZjJWXFmHN and SOL in the Liquidity pool: UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q`, -} + methodology: `We sum the amount of SOL staked, SOL in reserve address: Du3Ysj1wKbxPKkuPPnvzQLQh8oMSVifs3jGZjJWXFmHN, SOL in the Liquidity pool: UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q, and the emergency cooling down balance.`, +} \ No newline at end of file From 11ce8fabfc0f6b98237de02cf45d37b2d3a00542 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 15 Aug 2024 16:25:09 +0100 Subject: [PATCH 0034/1768] add rpc --- projects/helper/env.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/helper/env.js b/projects/helper/env.js index a5dd7389b1..940fd1b280 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -23,6 +23,7 @@ const DEFAULTS = { SEI_RPC_MULTICALL: '0xcA11bde05977b3631167028862bE2a173976CA11', SEI_RPC: 'https://evm-rpc.sei-apis.com/', ETLK_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + CRONOS_ZKEVM_RPC: 'https://mainnet.zkevm.cronos.org' // added manually short name is zkcro } const ENV_KEYS = [ From 82c05656117d8e5f778eab258ef40ec7f2778787 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 15 Aug 2024 16:42:47 +0100 Subject: [PATCH 0035/1768] revert --- projects/helper/env.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/helper/env.js b/projects/helper/env.js index 940fd1b280..a5dd7389b1 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -23,7 +23,6 @@ const DEFAULTS = { SEI_RPC_MULTICALL: '0xcA11bde05977b3631167028862bE2a173976CA11', SEI_RPC: 'https://evm-rpc.sei-apis.com/', ETLK_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", - CRONOS_ZKEVM_RPC: 'https://mainnet.zkevm.cronos.org' // added manually short name is zkcro } const ENV_KEYS = [ From 67db9b9860a5199ee8f19b795b58943b10eeeaa7 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 15 Aug 2024 19:48:37 +0100 Subject: [PATCH 0036/1768] add cronos zkevm --- projects/marswap/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/marswap/index.js b/projects/marswap/index.js index c798121331..2d9a76dc73 100644 --- a/projects/marswap/index.js +++ b/projects/marswap/index.js @@ -7,6 +7,7 @@ const config = { shibarium: ["0xBe0223f65813C7c82E195B48F8AAaAcb304FbAe7","0xd871a3f5d3bB9c00DDB0cC772690351B9712968D"], base: ["0xeE42fe6d6Be1eF43701DDAbc417AD22d82C5ecC3"], cronos: ["0xD716B78F0002C23190B024fc93C33CF73E30b8A6"], + cronos_zkevm: ["0xc547615d77b2d5c1add3d744342d8CB027873e82"] } module.exports = { From 52ba39d909130ed2798b5538aa1f7630f05c1749 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 15 Aug 2024 23:06:10 +0100 Subject: [PATCH 0037/1768] Move WBTC to bitcon (WIP) (#11322) * Move WBTC to bitcon (WIP) * Update index.js * Update index.js --------- Co-authored-by: 0xngmi <80541789+0xngmi@users.noreply.github.com> --- projects/wbtc/index.js | 410 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 410 insertions(+) create mode 100644 projects/wbtc/index.js diff --git a/projects/wbtc/index.js b/projects/wbtc/index.js new file mode 100644 index 0000000000..39646181e9 --- /dev/null +++ b/projects/wbtc/index.js @@ -0,0 +1,410 @@ +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); +const ADDRESSES = require('./helper/coreAssets.json') + + +// WALLETS FROM HERE https://wbtc.network/dashboard/audit +const owners = [ + "31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", + "31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", + "32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", + "32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", + "32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", + "32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", + "32m8wzKabRRF7o6JRXN1srLSA5FzND769o", + "32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8", + "32okkzumvdoocdjN18SzbnTTNd2omQvvt3", + "337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ", + "33C6kjmmGp2mrS6coGn627an3xpiRpEyhX", + "33DM5s2vPgX2P52DpurbXdVYa8dGwDCsJ3", + "33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ", + "33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb", + "33epzdB4nk3FWHtUpHMQrzTWxiehSti11v", + "33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8", + "33xk2gq91LNUaip9bPnoECtfaA1RjAcrSo", + "33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8", + "343uVxqsriiveWxekC6s3mNaERzsbfke3h", + "34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q", + "34whRPeeSYTPcihybfXmkG2uoShUdT3d2d", + "35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e", + "35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB", + "35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59", + "35SZSm1CDcz7p27Hj78xZACv4Ak45EKGpf", + "35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR", + "35XnFgLYBuYogTx9HHGbJCRGfyqyC9ZtDG", + "35ZmRhYBwDfvoASsw35KNJxwypvsX9xD14", + "35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6", + "36WQ2FEUnTmt67xXNZgQMSFQZjK6AJxLCZ", + "36hbDz8GSBpQdEf2UzcKieCNxSA3HS17JX", + "36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE", + "371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd", + "37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz", + "37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi", + "37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh", + "37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx", + "38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv", + "38MHxNgiHENWExwCe3EEWYmfvgFM3i1WVW", + "38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD", + "38TQEEGTmmPa1rghsYGwZhapiDQsSEnkub", + "38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm", + "38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF", + "38rK7BfeiegdchggPCk2CZc3fuy8ozwzPP", + "39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ", + "39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm", + "39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE", + "39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c", + "39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2", + "3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit", + "3ANaBZ6odMrzdg9xifgRNxAUFUxnReesws", + "3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm", + "3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T", + "3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA", + "3BY62gfDUmuzMp1T9Wx4LnMRk3oNbQsKyQ", + "3Brhg9KYdB9oDrUtvKJ9k7mbn7zzHnMV51", + "3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb", + "3DKc1cFmTC4BJFcoyeN7fDp1oavTM4SvuX", + "3DeAGDRtQ984GazpLqfpS4kRW8NXBei5V8", + "3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4", + "3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd", + "3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2", + "3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1", + "3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT", + "3G3kGKAD5BgWZu91ejMXsW5LxEMhKZj46Z", + "3GbZUJ2oaUG3rZTvAwTCqpsNMWGm6j62r1", + "3GnY2SF2DoWRwWyQb6jThRJ5xYzNWFfd7J", + "3Go9rkgYQ3oLXfbbiDFENXmWZXQDaMjvtx", + "3GohY4RNGXjRH5KhByj5m4Amxq9jTsGfBr", + "3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm", + "3HLxZqoEHdGPV9oFZQxVfG41z1uP1LrNaJ", + "3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH", + "3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy", + "3He1eqsBZM5kbtZGuUDX7ysfEVWCjweZtJ", + "3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU", + "3JJpCZCk4h4TpQeU7SA1yhH768Xgbtdbfg", + "3JTWYpPz7JkvhnAN7XKzYK31AfmxEUzRb8", + "3JbEPhuab1Gx6yrY8dD6wF1NrVAn3eG8CD", + "3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t", + "3JfZb6DbsRaQExeHAYmFa3s3azckqdyQr5", + "3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5", + "3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s", + "3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth", + "3KUrPEGy9VFeQHZYJSGZpE78X5zf1n48pP", + "3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7", + "3KkkHYZywtjNy2eoVvL1xLo2Mnzz3gaDqQ", + "3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse", + "3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT", + "3LYNPfnfmGRQcheXUZFRNEYPDDmLvDSgAE", + "3LoYYxQis416ykPKGNuWe4iLdfSPWCHjgd", + "3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq", + "3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1", + "3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", + "3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", + "3Mzdh31vo6wUPTWnZ7GncPPWXA1WDopkhm", + "3NNsvp7bfeihJTiGbiL3t6jH3jUbRERsB7", + "3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", + "3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", + "3PggDrcp4et9phMamnSenN8HeNPP2YCuCX", + "3QB2qhnj5Xxwhh3GKcfwQDSkL91BCCn5cp", + "3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", + "3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", + "3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", + "bc1q02hdwthfslrempcvrgnrelsluszmt20qjaahg3tn2plse5pc3evsskz9g6", + "bc1q07jp79h30qmh39pkdmntaycwezmfl2njzvp85z8sdthhp2cus42qrwzglw", + "bc1q094s5w7semhdkcgzxrhxe6am449prjhsend8p83fhk9jv6rnr0eq6af0pp", + "bc1q0asc7qsj90esjzfmgz7r79tc5vd455yugwx0q4eqdqhqs82t0s2sfhtec2", + "bc1q0de5mlkcvundsnzdsmj6padctjh25jgsq3tcyu6d2qcgjnz0h8us2sws8a", + "bc1q0nnem9u53fcxcnmuutqw7j458hn56ljte34edvstjfyz8rfhxyesju3hhx", + "bc1q0s0enxvmfvfg3dj0rza2el0vz7p3a6xk2juv7vztw22l4g35rknsmv58se", + "bc1q0tckafgtukhn78d32ljl8c3hr0an5jq08599gf08mqxeqlahdg3s5wvuz3", + "bc1q0tvp3naff0auk3p4q99k3s9ltlf2w97uclrjspf3lvjkjywsj8lqvdx46f", + "bc1q0vthrmhktt2mhew5rq6e5q3qlj573uxcfqry5h9ea3gh4l9fz6hq999wz3", + "bc1q20mxuuv6ta5uy6m3s34lzwgs6p4qme4wyvv9y2cawd8a45y84susw2c9rk", + "bc1q2420wgxmqkxjkpkkdd9hxflxuqxhuqnt7atg0w3q3ypv0qfel0yqtanfuy", + "bc1q28pdpztsjuy4lqsa5hs249vq8ftykkt06aa8w97hgjxuvqz30trqqz5jdh", + "bc1q2j0ks6v6swlavvg20adsdn7hf9avm0979jc003g9lkg9dx0trz3sma7q62", + "bc1q2njvavlw9esncygac77d3jxjfwu877f23gxa88x33vjf3xa24lqq0xxetl", + "bc1q2nra9wwwq7pu4cg8zwycp8dzg9hcv8ywlj356p4ahjy7l80khphqvjdyfy", + "bc1q2qux9ad0egep5v5f2sup5hyszrl3nrfzyegmnmccmw7yk9chplhsy5sn4l", + "bc1q2wd3mfdcvjrxlccpl7wrzunzch7xaymtfzuvvx2tld760j3x5chqgsget8", + "bc1q33qexf56q60lxfpjhvgkj0l0lcgsapa7lsugkcwnyrceuw7kd89qsmy8h7", + "bc1q349jnpnefh952da4unfapsd3a6zmhgw8ctd2nk4ut40r37ax0d2qn0dluu", + "bc1q3d9jgd2yfx49986hjek9ulcj55umf6uyssrxqdmma7w7f7cyhc7qqyqvzr", + "bc1q3dyv677fn6feur2qjaqjdcftzgrmrwa7mjnvq7y8wxtka4ceu8tswfcvwm", + "bc1q42vvtdvdkdzj7glr6mtd52vgxddagktxusha6dxl2fes2dernqwqzff9k3", + "bc1q46uyezygewcl972rkp6z4pdtay669pxwrl8q70mgnda4cyf6yz0qj6rcsn", + "bc1q47z7kxma7lp7chnkaucee7ey9qds292kylz6rqvdlusu839ved9stns32j", + "bc1q48j4p67jmgpdpzxtu5tv3rendwvf6jjtqs2gt8ed96syxuqrsdfsl788un", + "bc1q4fpz2ntr5zlz6jga924hmaqc4a86s8luvfym3ff0qqr6gxykp60qeqqdn7", + "bc1q4gs9f4nhla3ufe6sumn8k0smcc5vxr0524nz3d5nhww70dr703lse46rmp", + "bc1q4gvftsdjy8wd6ga8c3a66rg4q6lxqvgak6edgnz7whs690vy2x8st6at64", + "bc1q4tl9hjvv3yvvsgqdajd492etlg8phrtml36ee5n0dt3mylmce23qnd5fdm", + "bc1q4zvuejph0q3z2c0narhgjtz6w47h6rst5eyyvr270lxh4tfqzluqrx4h4f", + "bc1q5a0t7av9xtay7av70fdwscsnx62rssut3mg7dclwmmsj0nxq5z3qgm8t49", + "bc1q5j8dyy5u94j0ulfg98l6jwsgjfq7dna0wwcwqvjcmwkgkwtcf30sm856qg", + "bc1q5ltp433ew9q98antza5s68h46g404eeaj6jkg4u6799q9dmkdngsmh6zny", + "bc1q5mq8f6rh85jwk0agf8huhtjp6syxcu7q4dk7alda9c2cedflj8js0u8j9f", + "bc1q5s4sa6s4vgst2pt97gvnxrmh9z8xa2j7kj370400fpx06pkk9uls7vzaaq", + "bc1q5sn9gqy6hd46yw545946f6a5crqryskhs9gge5z3gkp5d9luezmqllv7wz", + "bc1q5wj7yc27dzvnejeq9h543d6xt4cd90q8v8569tpzm6g5k3k252wq9jwuza", + "bc1q5xfafyynujpe4xm3sau92sy8rar3auf80vz3as6cjrn7pyvncfxq34hhcv", + "bc1q63yjt8zpr2kcegcmjr3vyqukm9zhlr432mcgss027lzs36qeh7qse8ct8w", + "bc1q67r0cfzcaqqm70sr00jq9fdyaplwcg24rtskylppej2qpgscjw7q5nrwf9", + "bc1q68mfyj37aurdzxwpq93vka6qkvhmcjl02l66va6vy8yktegp6nvs5knqe2", + "bc1q6e05t64zsdffvjxgw9njyxt5yhgq7xt2xxsufxk5npfcz4aewrgsyccu28", + "bc1q6hcsftu0hmm7q67cec272y8sxwhkq0pnpymshuty9x8wmymmjhdsquhzh4", + "bc1q6j7yxe948zd35xsrx3jucflxeq65unmrwusrm9a6c82lj459zmyskn5xk3", + "bc1q6kumts4ps94pyp8mfdn7yyy9p7y8n0wvgq760xpyk2r005rsh0dqdxxp22", + "bc1q6lmpnckv0zkdkv6xkvd2m2uy8mxetnz9g3qxkp3kpkvfhnsv0w7slkje25", + "bc1q6vk4rdxdnuklg5m4ltm866v6scz6lyuxdhj50qp6p4en8vtt23js9wpzgj", + "bc1q6vs72ztq8xchew26exy4kdnjxzrlxz43ny4lfckg95z5ka6ge6rs4rc5g2", + "bc1q6xr3ys66ry7jsfdfrlz82kfkwwnmdqtjh0ctm7y974kvufrwwezs6clrgr", + "bc1q6yk7s5g8u2ev7k9sw4zdazlfxj4vtduxgpekxvttzhju00c0yshs7ymvzl", + "bc1q6yzjmcudjlvq5nc0un27kfzwr283u0wdm53kqhelsja428t8jjfqpxc32j", + "bc1q76gspqpw24cqsptydstwy3egft798n2zq39gxfmfuxd5fvhh8p9s2s7c7f", + "bc1q78df3e2evtq70ntdcmcwzn0gs8a9zrlzh3p3xfrrt7p7s589pqesccuz22", + "bc1q78tqk9mn587sgnqqthsyrawmwpne7ssl4a4wlyasq4c9jqjtndwsyj22kn", + "bc1q79crmsa0k8g8k735nqqlctxqhz6eeugw2qv3x0sskdvsmsvjq7rsujhrr9", + "bc1q7d5q7e53k4w3c6n28tjrdvmlxl8skxutykk6fs9fgh79h0k9xc4sr9hzuy", + "bc1q7du4789yhw996lqwx6scre99sfzy2e53ax9502daxscsye7vvmksy8r743", + "bc1q7eaej94t49psde7mkmy6dd7vgn8f0zg45yqalpysy7u47y3z00lqg3x7fn", + "bc1q7l6c5ddseh5h54680ae0ufkx29y6rnl5yr8vhr6nfwc5smk8p0ysexsgsw", + "bc1q7pnj8k3tphfvcq7vrzlja5vqdqp7xed9rfn9hdl4ehgq09la9yhs5dpurz", + "bc1q7ps737rkza38ha5ysg3k4sjrd2xauexthkw23lxt74lpr70gum4s2jp8uk", + "bc1q7ta8kheq8ellkn6fmmkzxj47vq0uqcd53zd8n7g45hl945d6eals3d4ljj", + "bc1q7wcl3plp72cghpd6lapucmxtaa5fq4w4wmhswu6xjqhrmt9jsh7sfapsw4", + "bc1q7zdunrqm74erprv46nyryjkvl5nuymgmn2ek3x7mgck48umga5mstxdl9p", + "bc1q8fkquy9luszzu2mlsad3fsjgx433vp4qx69wswz5skhz65txv2lssgaua9", + "bc1q8mfdkttc6n804j43jmcqkftdug7yje77a55qeyhsy5ej7ca65wgscrvyd2", + "bc1q8nm7r22vw6lnmzl52lqvnlrft6hm36ye0087e984feavjmej4spq8y57z9", + "bc1q8pqeaj8c647ascnjpc582dzwfw8xstvyderzxzvc2dk09j8d4rasvctr5f", + "bc1q8uldtn4rnr23djmpvgwacs6tcazepkflhmej9t5r3afc9lldq4mqrl6zna", + "bc1q93rsljth5uxrpye4na8688r043lye0ny7uyexr4n24hf9wlgdmns9zcjn5", + "bc1q95ptqclhvj9vrsfnexfd4fs3l95dyyrt3cq3qyfpgxsmfuhspj3qq5gcqt", + "bc1q9988y3xw3mhv0tnrugu8c2vsw7e6f7ywrdaya6wcrcertw8rz54snxgnl9", + "bc1q9cs23smvx9c4q6eqcjpxgp0yrw6ar62w2x4mwe4dd88hqsfg35yq2pfk3y", + "bc1q9d6ayjfl3jagylp7x86v3dzzk65u0gt34mw74w9fxh0nyaf24slqp6sat4", + "bc1q9ehldvjkmd3s28m7922w6mun083kpjqfr9q9cal8zkqp0yaxyr4sy8v4re", + "bc1q9evu4ywa2tmhxt9x3fe6nt0e5ngxmq7kewmdvuk57j4c53ak4zjsj87pw7", + "bc1q9f5cecrwtwrfrvgxde5c04serf3txc8mdx7kgk3zhen2xp22zgcq5dngyh", + "bc1q9fftzadztvgpe90hnwec9n5al44xkuw6dc0n3mtt8w9wxyeg3rlqwfn527", + "bc1q9r4slky3fsjnen39u3fh6d22pwvk3pduj3htwyd5as3hywe2d49q6zyk05", + "bc1q9rrkgd0x5rv57ftysp3t4e35zhma2ejcjj0per8cg89um0mn0acs5hqh5k", + "bc1q9xne956dj0szmxur2up3xg4jl0ktjxpkggr7r5kw5tth48n4pemskcd9mc", + "bc1qa0mxdj0yehl3m99c8tsgepmngz0a0yf96v9al3ejyvla97hysjdsgzj59x", + "bc1qafrg9lt04d9wvurrgvr7l8p4cn5f07zh86d8rljeh6fzqegxe44sj82x4a", + "bc1qah2zmzd4atalqpds7ke86h7lvv49xqa43cyk28y2lwsus7sujd2sndplut", + "bc1qaj7w4a7kxvkjdgz76mc2uy66825ngjhqtasqd6tgssrajc68dk0qqkd3hc", + "bc1qak00ktehfya8j5vg5xcq7dfa2rae7zfnvjgs9jm0fsxa7a420rjs4zcp6t", + "bc1qanjru8xgu07kq6w0meyvydsfuvrlt75f4uekrhkuucp73w4gq0kql9dh26", + "bc1qatg2m52vj24zxvu92azvphxs08xp59prr86fcgdg42sp85v3qhsqsw88rc", + "bc1qau35ge0tgqlqvhn3pyv99ckukaxh9kes6e3jfpc4vw2ssfh3fpeq4dec6j", + "bc1qaygehcvv8334c6x9e42shrjz88kpnhw0gycz5fque4w4rjck6pnq7msl6g", + "bc1qaz28gc8e58uj5e80nu9j0yjws4zy84ahqlnfqd9ryhvc7a80vlyq430rvv", + "bc1qc058aal4cj2kk8e3tvhwu95cndy0lzr2zrxe49f3yasp693nyh7slfcgpl", + "bc1qc3h2hv8wnld70ujx8dyrmxs0ly27xs7us09y6e226yfl5vrgc2qsrxuucz", + "bc1qc9wlxjgu53ua5efqyjfwhwr3cn89smxq230h574v56edwmw0f0vq8qaakl", + "bc1qca7rh32jt8kg4kqtkcu98uucjlsslzsreh7tchk6hddvwe8kzzjshpppat", + "bc1qcf7wyjzz6f32je5vyk6pvketf5ykyg2lys66vwm43mc0g0gchzasy0k2e8", + "bc1qcmslz2gwsenf0xn9g90gvwkzympzxxhwhp8vrckudj0w5pdndwss92v3h4", + "bc1qcnp9057urvh2rrm09eya8mrasea7yys9q3q8hxs7unyct7nydtcsz57ajd", + "bc1qcnx924c7w3e8r42q3rvup60lw64gyn2kd4fs3pwckw7zw9966aaq568nz4", + "bc1qcudwp0xdlldgw78t6zfcklehwqt44a0hqt6n92k6uplk2w6q33fst0kdnv", + "bc1qcxzdm5pcfqnam3umsxsnwfykfx8j9rsl4nhrfqnt55qeg9q3625qvvyyuz", + "bc1qd3lvm6evz5suedhlwyrtf9cjrqtaq9unwe6423yl3j3exmq97a4s0mpzwt", + "bc1qdjxc3z0m2q5mz7lr67pmuq8hgqmhds6nmae0fkk2s07zge2f9jsseutev2", + "bc1qdm5rxs4w29c5u8wg7ppeqssgjrql23c0gsps7m0ctr6ratcl2a3sjnnq9g", + "bc1qdn29e8sa4xmwf0c4r6xkekea2mwt73d2qjsdtsne5j6gd9ujwysqmfh59v", + "bc1qdqs2zn6hrhvpxrtp0t82xfk2jv2j445hu7gguzm0ktwzdq5zzflqth7638", + "bc1qdvpvz88pq46qnvcz6jz08nmfldwhf8nx2v6x4z4tc79mpy8smkvqc9t9q8", + "bc1qe6xyfazpkry4nje0wmhfnv6faxfuu2drx4uryejdl2mhrplgeujs3knff6", + "bc1qe9q66vu5yyuzedfzugdh3yj5ask3n4wpx8pghw7ff6x7dd5p0gqqf66rxd", + "bc1qecswgzwg3sldnh4cwdfgly7f05sp2sela8g7hg0y0vp8l7t9nueqarz5w9", + "bc1qemj5cexuhn0ld93drv40kqfhvl2dag5vgy3d9vv4dar0hl6he3xs4fpjma", + "bc1qemtc7ddu4fvngf7pg8c5sukqswt3fr2zcnqnt7pju6a5fyrz7e5q96x25r", + "bc1qesf0u9lu5petyuukl9zq0g86wf2k69yehys2n4te7pf2y2csqpgst0tqhu", + "bc1qf285u7ygu9f2umg33a4c9wtdkfpahpt5kvqazk6arzktsw6vwguq02eckh", + "bc1qf2dh6acfagsayfprjzwzzysn4d4rdudkd6dq2adu2wj0t6ty8vlqnse73k", + "bc1qf3ret54m7mdevr8xwv8msstpcx6978vgwzfxkw3zjmlydfk4lqxqekert0", + "bc1qf42d25evlz8m503fgdw3trkzq9y53s5kwayfwjpvas26q2cnlt4skltleh", + "bc1qfdpu4yp2zk7xmm6tpfcatxe4gax5ktd0g9ra59jzcqtqkldrqe4qn0qqc2", + "bc1qfjrw5r0wttwu0u0gewyfcs2v37mujcxlhrfp7pqt48zwtjt2fs2shqjw2d", + "bc1qfrn20wgnt6l0a3qq4fxca8c66cuyqmvrfwkwwqhkxnf6z5xuxnpqzdzymf", + "bc1qg47q9u0ctw40jf0p8wswc67tcr96wel065f735cdu3e9aypqpumsvt4lun", + "bc1qg7egerrjv5ka0axjcwzh2rnkldr2k5yace828glhjyc6yz6s46sq6jk8xw", + "bc1qggrjslsem6ep9x4yxvyfdtgcxvyf9z85srlxpsuucrq6xsvaz3jspha83z", + "bc1qgp74f6xyajxznu2hnjh9txmzy7k7et3pkh9rc6enxt68fh8lw5js78s4d8", + "bc1qgpf2ar68l58zau2alfdnuw6afhm99k0nlfsrvcacd3jzpjlhq96qhxaxtr", + "bc1qgtldvmct0wa0569crgedr3ccrlydxfrymk7rfmalt7ehjqx54axsfv00gg", + "bc1qgtlgfqdyw60cawws4lvnesva46lgmyx2hhfl9xcnqp5m45u3dq3ska8nl2", + "bc1qgu5wpteehuuq8dcdd30d7la405j9r8wa2ttzqawt73lt8aec6kjs6u33r4", + "bc1qgzq2gq0l5nuxlaj45eyp4v3w6scaa9hx6f4chg60sufwmqwe4c7sp9tcng", + "bc1qh08szja77tucpmmwqmvyk72z0kjkqwuk2r327w7vwwh0f7997u6q3du9ga", + "bc1qh0yftewpsf8s3pyln8s6ky6qd6c7n643gndfhmkp7uczayua2mys9u6gw7", + "bc1qh3kulsckdz7d5ar3taglhqz4sa3wuasanyypuxyjscwzh0mm3g8qe9danw", + "bc1qh4qr0ytwjz7axxyrnl95la36jdqlygqpnul7wxx6a0mwzfmg9tkqkgszc7", + "bc1qhdaulu7pyhdhz4ty35v62gkx56nj2l7e6rz3x799sztdklan8n8sx863nu", + "bc1qhh2t6x7z57svrxdtl83xzdfz8melaueg7jmtpmsma40g2cfdxkes3lkd95", + "bc1qhjjcklsnjs0aseena8mmvlu7kufmeuhrlfz9l7dewpqsn43s707qkd7dny", + "bc1qhjxpm66t2k6v7c5zk6u2sdh8t36kas4a5402sqw82ewdpzuutf2s38ra4l", + "bc1qhl29w3rzcp9q3623hzvvnuksst0g48347qm82tr8ng3dfm9r0yvshlmvh2", + "bc1qhn7h9l2ky9l95sq7rqgaxp6c8ka0r5vfrghaln2pmeu67x4zpzzq3zcccf", + "bc1qhr5qw998er3rerm0lawlzzuuux6kja9zm4ryjls0aq5anprwuugs0yfcdg", + "bc1qhrgwkqetel4vpvj2azyyyhdvpg9u8j2dqz0svuwzh3vx4pvjf2dqtkt4uk", + "bc1qhrsvduw6j20dh4mseyf38zxqzd642zd6vmfjg9lmjj4d25qlvj5sv36ajm", + "bc1qhszm6vgtkhdn9cex8xurjkxjs2jhte0teetdnu4clr0ecxm20u5qhghyh9", + "bc1qj233g3tm9jejsnxvz3a06zqaqwwj2356f2n2sv572ggpahmmmxfqflfcx4", + "bc1qj390dgucrvx68jfad2wdpfhfuynvztgy9sy9a7009wmpecsdlu8q8zh0k4", + "bc1qj5dr2574mxgrxqxahymlvwna345d6d8424tyuqy3v2zhgu55j7fs2ezzq5", + "bc1qj9sat2haxfa7lsga96cxu26w9k4nr7z6sx4m33uzfq2x53sagcpqfzzjdz", + "bc1qjfmxg8fxqx286r254f3frzgra4sp4n5p2zczfsnrpkhdnyjyrhfqwul5wh", + "bc1qjnf3kfl592u85jlkvv99ms2qghv7yycrvg9902dtlh4lnfywg6wq5stn90", + "bc1qjnt2w6jx3ttx8dw0gt3nflm3ld0n2akkrkjzp73ua3kxzyhsj4jst848l6", + "bc1qjr7emlhxssap2npu5szrs5fa3cgxcnrd9gh9e3mdxzhdpye4puas7dp5pk", + "bc1qjsqyvnms83kvlnhc7r8phce0wj7j7nnvh8ye8ejxynke0uujwvksn2lely", + "bc1qjwjq6t60fwfsr7hf80yrhyy9lrvfjl2l9lpdwsw6sds4ph9uuglqjj53xx", + "bc1qk6ctvhc78eg80v989xmt7u5mwefewt728d9s0jxpgvqxa2m87xxsnu0wzw", + "bc1qk6n59st3mvj6ns0juv3vsdng48aszwdt7gyp0xlt8mrfn5qc9crsdx8dv8", + "bc1qkayh60m2uc86cere4z2gz03g2ayg2k726klqf0vx7lq588xzz0nqjvrg0q", + "bc1qkeh8sh6hzc49097j6fs8lgkfxpyas7wntelwnfqk4xhzccaj0nfq73s3f0", + "bc1qkjr6ew6d5nqf2vpxd7vm4w5lps72c8sxnc7hxnwcs9psqvpcmqkset3kdn", + "bc1qkka8ku2z79wq7wtkr44qmp6x3gftc9suju2q3ncw0xdy2nwj37jqu7hec8", + "bc1qkkhxgzvlvhymm2eprt0eukr3gw23zmarcuw087td9l34tmuprrysh643xt", + "bc1qkqap38eq4y8auh6z8yjwrj8r2p77n6xshcp8xpy2kkjcu7lhfyfqntsrjh", + "bc1qkrh06leyzgp84z0v495c0gr68tqn9ewue3lendpcrdz8htz0yw6q9aqyz3", + "bc1qktk40875p4gcafun6m2yzfxsrdt6d5h55c2zhd45wfefkusux27s38c764", + "bc1qku8s2753ttheldjrz5v4xmampnetjp3vy30m7j0nd3348e2m9rpq26l3ef", + "bc1qkvtt6kaw688mzu7txj9q3mn9m60pskv62gdz5j5kugd5fc7f8dfsdsfsq6", + "bc1qlftdm0w434ud5nz5ktnmak4gmr7k4x5qajmr5pvuh4vz9m4e8ljsujemsu", + "bc1qlk5g7mtuyxdy3txqz7q24yjffcdk6g6mr4ks48afv5234hly3hvslw8aje", + "bc1qllpem4drxvxu45r7aj7aqma50cylmaup07eynehs6v3f8zppcw2s00v3rt", + "bc1qln0rhtex8dwmqgex2mzkm47c437tunl6kw9amq7s4dye57fjk44s8x264n", + "bc1qlss2xnh3hsa78pedunw9qsm9nzpczrq90dtcp0sqknt3xkf5wyzsjtc662", + "bc1qlv8j6wgysv9xdpqtfau2lq5rcju0v4eyazrlawpgu8pwd2usz0dsfqc9up", + "bc1qlv8t6axsf50pe5wnt4x4xhqfudkumdvx3rc38f9kj3q82qhqy6lq626v47", + "bc1qm6hw09d24eqlz0x5r5txlpsrqvpf250fd5py3s4uwax6gwtdjfrq03yh9z", + "bc1qm72da6c6sq6a34rkwxk9sfpmy9kqea4dv33280hm5ghfdm4myvaqxnhcrw", + "bc1qm8z7nqmtmrurzcz82yec3sgk5rz67tm5rcaklqxajyxd348vppes86jvuz", + "bc1qmcvwrhj556capug3q5xzhwyhq82cps4l6ng0w573v6rl8zgkrlmqwh9386", + "bc1qmfzk56r5xvgfztej8fkg7rw76wy5qylh79shsaewpltfq4pz2qss5ajj7r", + "bc1qmhjm7sca3qwyujgfqtg3vw7swzxyg7mkxe4e7uzdef5ftc2kejwqjp7q7p", + "bc1qmj4g65rdqztaea7aqwnht5v2fhajmjat8j0q75nencrq2gu8q3ds5e0k5l", + "bc1qmr28gws3f589wmxf870mee4mapyzrv2209h3c992hhv3nn7ppctqhejqve", + "bc1qmschx4zu5yd9y82jqs6rwse3lftuzu97j9x76wdtx2avtee0g56qppefym", + "bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa", + "bc1qn55zpxs6fzjju36zuvkndzjfz0glhejtv299krn96sahl2pupthqhjc49k", + "bc1qneexyhzwx2g7ugw7m93kf48d6mdpt76gghmnr07s7dq7nhlwvc0shnryqd", + "bc1qnnx8uu6tuw5qlnqava2vjzrlsrwlaws7h6med4ndhtghrw8r5vcske26rv", + "bc1qntgp8cuk9sp2xadzc72h20qt372nvkjk5pmknvu9zntnf0yly5dqy7ev8j", + "bc1qnwa48yav84vzadrk79ulzrzu8s5epl7sfqelxufnpls63j7szx6s4n20hg", + "bc1qnwh5kqa6u5k2zevq0dfwn8z8mux4sz6t23g4xqeaf2lrd6zda75ssrs0gx", + "bc1qnx38lf4ds0lrw3s0l9fc745l0x3xdzw3w8stmxdvwu3v0n8jrcqsxm34ls", + "bc1qp798q5d3n8wsj3x345c7v65u9fwfe43e9vyupllmrrjq5k5n39rseze5vk", + "bc1qpa3ggjgfsr4cule3c42ns4y97k9z38whpx5940uw4mn6taeaaqjs97t28r", + "bc1qpcywcjgfel39zc762pmwayj9wu3v5xly0kjtdx2n2w0pandsce9q5rr54q", + "bc1qpr7fnnc9gan8vd9waym2rc2td24s72732wltnu9rc0yxhdssqaasr3up6s", + "bc1qpsftpydc86wxgga26r6nfq5tvrh5m34055kdrp25lulqu70shunskxflr3", + "bc1qptacp904tazvu54qxty5qunnwqhcm84ydrt39r9c4cqzkqrtju6qfd7eyt", + "bc1qpvwcac0hah03lepsvrx8zu9gdyvprfnckga4cfjg3ctaflwc4xvqp6hw3h", + "bc1qpwhmpvrau7f82hlh6es4wzedcq2rx5aqx5ue4ajsl4r7h29udx7q2ztulw", + "bc1qq5d4g9gcrwmwm8w965cwtkdgu60sl7fteahhtelzhna7rm29q0uswgca9t", + "bc1qq6jmww5tpr6t4cgl577d28cjr6mpxz85d6tkh7kjn2njkyd7flrqyt25yw", + "bc1qq77frdehk027ur54wzhhpg8dtqwpdn3emaxv42kxxlzmttrznzqs7mye34", + "bc1qq7m25904sfa4qn0na5gfssltjdmxwuvqxfl73dunza4s4cysqh7ssale4g", + "bc1qqea6940qjuhnuqqcu6u5ajeh3as8drwwwey56vxp90d05gzx72psw4ngua", + "bc1qqf4k7r66y3g3fpjlq6g46g5av5qgqvjpdhu6lhg68fwzm4rc4v0quux3vy", + "bc1qqfkncsw0gzr3vdyearnvt9w3ckuymet0v495dk5hwpfyjfeej42s28g3uz", + "bc1qqmsz5fe3dqcg7wxt3wc9s69td0yxnhlj97pvxknv8s25yuylawwsc99267", + "bc1qqsse9hgmx3w56c5suhkp2gqyxqhh6acc6wf0gnd7fjtp97f7c8esmhtj4x", + "bc1qqtmu9k5pakw4q4p242322x5tjy6tqtjj3u596nvksxjdhw789gfsmuskwz", + "bc1qqtyxkv77ce6s7hqw2ljg6axaxf4463q2krwne5vlxhhk3x7laasq3vqe5x", + "bc1qqx37qn2ca3gpjtuj5dkh8l6u4dh9sujn66f5gwe5maw7cvw47rmsej5kwl", + "bc1qqzq92mhj6a0v8kflqx6t0p3g47pdrqpv8f8gu7uk2a30kxxnplns4ez65a", + "bc1qr9kjw52l7m3nxhprgkt99nhrqtem5erzay6jy3j7xzyge65z3v2qse5xdw", + "bc1qra0g63370unwjrjpx4f267xss94zgxp78wqyc8gavqstnplakmfq0yq9f9", + "bc1qrg5y53hvpnu78pvy70v4s0qe52rnx3298gdvc7t9lsu2lya7deuql4a28j", + "bc1qrje4nstr7yy2qvmrfazlnjcsd3573fh6j9u58t446mn3ltp8e5vqgz8535", + "bc1qrjgp0ksa0wmhdfslzta0cem3s030jg3cxf7xfqtjcjy3jstj8wnsenhgs3", + "bc1qrmhgzejkazuezzduws22wuk6atlsxruytyh9ynx2855qpfezy5vskdznmv", + "bc1qrpcnmqxe8q4mq3n04qdy657wu23qxu8x5pvc0yx9adwz0x093gtsh5r2cv", + "bc1qrtyl2hpxu4lpl8x7fz6rlwvd43v6a9ynvqjf2mr7gegvnmdc0lxqas83mx", + "bc1qruqm8ef6lukm3kew536vxpys0nsrkdqqq7gn5eyjz6fsdee55frq9ksm66", + "bc1qrz3dctwmkkksya4n0cfhfdej480vx9shkt9vfe63qg0crmr3x68swt9jn8", + "bc1qs3w6eh4wqxphz769jlkglhdrmfaz4pj668aag2qrhcmrj74a02psr7mx0l", + "bc1qs6edu8cf7dtn2fq4earyhagryd3zsqvkdlaj285xptzjrq4szzkqz3fxze", + "bc1qsh9f8ackh9etwqjy6hd3vcqnc8wy9wnynsfypyv0p8nxesytkqeqtp7edq", + "bc1qsl92pxqza6xmw26xp6783slr46eh7wfdeyxnpyg0ammfcrc370esjrcfma", + "bc1qsmwlvh7v6wkg9kxtgh65q9lat00xx68g7nqycn8jdr5dudvqe8ksd4mxg7", + "bc1qsu0lfh6ae4pklru5cs6qscf9z88m4ckljlcxyqp5qfcvv5ygg40suzkygv", + "bc1qsvgk35j2tgq3anjydqlccunngrqur9pk3hdlfpgmd3kq69njaqmqdde6r0", + "bc1qswcfs3404reuplxzvmnxv23r82jzttw7ugm4gzwdwddpqa985mzs4ex3wv", + "bc1qsy0tanmqylsxjzpfecms96du4vp4tursfh9fyp4w0ff5aky7qe9sclj6f4", + "bc1qt5fugtlsp402yta0xvl79rlxc5epx9nd926f9dvct5r3uzuay5gqwyq55w", + "bc1qt5hqtxfktkuusrpcyus2zrc4x28hg23l35pushfmj0dsvmfrv2lq5vu9au", + "bc1qt8wuxew7ly35fvu2xaytmjvr6dlux5d05p9qahzw6h3axkc5p2ksla52xp", + "bc1qtahzsvs0hrt22dmdt3268hpdh9eh3rlxprac584x8l9s2df6jefq5nse9k", + "bc1qtcx3lve9uscxevqv0ekj2e75kjy6mqn0aedxq6xrtxv9td0jm7dsj7vtuu", + "bc1qthgusw4jxlw2e9h69r8hpv22df47dups2gmkzlgp7l8ww27eew6q7ewjvv", + "bc1qtjq2ypqq3kamya3dsfphy7mdqwp5nc4adaxan6mqdze59d7ptu3qc9ryth", + "bc1qtllzgt5hsxvnhga8tq3nars4d94c263q8dm8vakrq6r42648vhtqtyy36q", + "bc1qtr7kzsz669mfn8677ltxlm8c3t9nkzskj2v3lexx0kxhamzg7zxspkd8w9", + "bc1qttkf88qadw9mlvnfftw37gllk8q7m3jmfxrugath75rl3ydpt9zqlfjzzl", + "bc1qtuvqgvkjnq0gw4cc6p60yc3y6j7jzz937cs0wy6w09h5dyg36d0q8xsjlh", + "bc1qty4wtp9zhvtjuj7p36vf4avs98l4vata8634m3z4ys99t5qlhjwscslcg5", + "bc1qtyaqju2ar9x2v6c4jf42j9x9qzjcwev9u8uys524qnhznths37zq27ppfm", + "bc1qtym0jxefs7z9vr5y50gdsmtdfgcfyr9rxema6n23jw4cswulcu6qsj8t92", + "bc1qtzn5ktk3hhhgaweupzt9k6k9m00jws3xn5teplwupfy2ltl0xcjsl4g02l", + "bc1qu5pttfk0s407dtr7ds2e547ugq80ay4n82qpvwqzsvlccdjcp84qxpef24", + "bc1qu6jn53gw9t3j62lee0ht0p3dhtkycg24gj5kcp230jq6fn4jcsnsxjxn6h", + "bc1quezt5y4lqf37guytyf8jj56eywjvsanv7u8fq6q8p46hg02tc5vsyx3let", + "bc1qup8qwemtepa2wf4r8w599lphxq6f38s3ta8925eu7y8zvp4x6v2svqrfq2", + "bc1qv85ky08r24v3cnysh8hk9c5ftg60f2kwellmzpzlqnwfawgtdqesghlznz", + "bc1qvax0qf0zgycnwyd2cmgzsr65l6mldc7r3wm4876xg4u7rtywp2dsw034tt", + "bc1qvcwzkv448c9rz60fas5wqgnrl5gzvh0nnacyudqcsxhr0j9fa24s48m79n", + "bc1qvkn8eymy7c2rpw2c5x6x8td4hrul6vx79y4mtd4zzdxdrxwk9q2sv6rnn8", + "bc1qvu6u5tnjk22sggwkp2j3vlxle5mq9xz8v82g7j57k9ele02wjmkqz9vrvt", + "bc1qw0lsnwv0sga0n3rcpaxtjg4z6jhf0xu6dyhdv7jcx9d8gm4phtesr9vywe", + "bc1qw5ue35s2rms9wz2ajxu4h83uzaylax7jqwp3h3cxamj9j05dgw9q6nnr24", + "bc1qwu39fckqy2cl9z42994xyhg657q7txajwakf9sdzt4f3caluk3fqz3zl94", + "bc1qwx5sl8mls6hkmumjnekf6szuzh979cmgzsz8dqm3xeayrxfgz4us8m8y4z", + "bc1qwzy2ezy8zskmuu2v6y60w5uqe46qeql94may8fetnl9uyahlx0lsthg04q", + "bc1qx628pacq3m5px4zjjagrtpc8a6v3my5l06rxcrl5xr3vfv4s00cqcxmlhy", + "bc1qx6ws8f6p3zzevs0rf5kvu7e074snfmr8mms8ezgreg7kas84l7ssptyejn", + "bc1qx9yj7x4xmek7rm5styss3vcdth48p6uqzjdfsua9s7v430jq2r8q0j4kge", + "bc1qxaj93j90njr4lwrevjhg3zr2qyr0zerw0d8fxlxhep6c8uu4jqdqhlqptt", + "bc1qxpa34lagwsvq5t8ul09y2hz2dh0flkampx8lqyp3jdt4lpwaxx2qe2uvxj", + "bc1qxs6nw2cjmctjeqjk5lhr47uv6anmge3ut66gmuexcryrymusqt9s2tvz62", + "bc1qxuv7ge2hcfhzykp49g2pxz69p99d0aujx5wupud28tulftlc0agslcmuuf", + "bc1qxyx06rxxprx9plp009nvl0f0ft5e3af3tt53n7pctylafqfltwvqyk7sfg", + "bc1qy2av32x3tkfucu25dqfh4nqkf50ayng43ervl7fcwg4crcu3queqtlcrsa", + "bc1qy7efv6fkened6hnhzydmcd9eatj20dsnc4px2gtmkedc0xznlcxq6n04jv", + "bc1qy8hl8khkpcsnjqvgna6h8249x4at9vjern9meph0e5el4g0nudlq7kd773", + "bc1qy9f5q32h9rmem40nd06e4l8cxwqlttuale9s6q076aymt0dayx6qekhfmp", + "bc1qy9w004s6gek29k3npgmxq8huqx48l2gatx9yqlu0rchxzlnn7nlsn059c2", + "bc1qyr5df2mhp3lfjrd2sjx56eqm7netrtdtwengw657k7k6hnmyedlqwfx472", + "bc1qys46dh5q94lykgqrvthhh52ajsk7s4c5ex7p9t7tvqe3uxheq2us3rwra2", + "bc1qywh2j5t52zhqhvlqymsw78mq9lfrh4utf47ufhfpkgfzj3trqaaswuak4h", + "bc1qz2fe23n5ykggw9394gxly6jqxk23rmhxesvd7q9d3sfee6cqmycqha09qg", + "bc1qzchnul757l7q2yrhtv2gga3h560vfjdj002xcstcd5cvspa3puks4h7gu5", + "bc1qzdah777dzr46n8wwdmr2y8etxzt0e66j90v4f9m2dj2wzjk3mtgqhamaj5", + "bc1qze2smuhn3k3yxq49fzsmz4pfjemnhpsjt5g3xc8slyh42edy23zsxjsr73", + "bc1qzk3kkegykpk0uzyekqfyr4l4ky62hx7tt9cx4r5klv98x3f37z0sr26gaf", + "bc1qzlhsk5ftpz6uaxgmm8hel59v7avmn0q8wp9gaaxdzzkde7ryumeqdnte02", + "bc1qzm3t8m5fcnz8t22kf2lyr97u2wret0pkjvzngldnqq5su434tsrqxjncvj", +]; + +async function tvl(api){ + if(api.timestamp > Date.now()/1e3 - 3600){ + return sumTokensExport({ owners })(api) + } else { + return { + [ADDRESSES.ethereum.WBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.WBTC, block:api.block })).output + } + } +} + +module.exports = { + bitcoin: { + tvl, + }, + methodology: `TVL for WBTC consists of the BTC deposits in custody that were used to mint WBTC`, +}; From f84832f639c714f1b1ffc275f08e04ea6af65fd7 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 15 Aug 2024 23:18:52 +0100 Subject: [PATCH 0038/1768] fix wbtc and replace --- projects/wbtc.js | 417 +++++++++++++++++++++++++++++++++++++++-- projects/wbtc/index.js | 410 ---------------------------------------- 2 files changed, 403 insertions(+), 424 deletions(-) delete mode 100644 projects/wbtc/index.js diff --git a/projects/wbtc.js b/projects/wbtc.js index 84b706887f..d806eb7234 100644 --- a/projects/wbtc.js +++ b/projects/wbtc.js @@ -1,20 +1,409 @@ +const sdk = require("@defillama/sdk"); +const { sumTokens } = require("./helper/sumTokens"); const ADDRESSES = require('./helper/coreAssets.json') -const sdk = require('@defillama/sdk') -async function tvl(ts, block) { - return { - [ADDRESSES.ethereum.WBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.WBTC, block })).output - } -} -async function tvlTron(api) { - return { - [ADDRESSES.ethereum.WBTC]: (await api.call({ target: 'TXpw8XeWYeTUd4quDskoUqeQPowRh4jY65', abi: 'erc20:totalSupply' })), - ['ethereum:'+ADDRESSES.null]: (await api.call({ target: 'TXWkP3jLBqRGojUih1ShzNyDaN5Csnebok', abi: 'erc20:totalSupply' })), +// WALLETS FROM HERE https://wbtc.network/dashboard/audit +const owners = [ + "31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", + "31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", + "32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", + "32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", + "32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", + "32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", + "32m8wzKabRRF7o6JRXN1srLSA5FzND769o", + "32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8", + "32okkzumvdoocdjN18SzbnTTNd2omQvvt3", + "337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ", + "33C6kjmmGp2mrS6coGn627an3xpiRpEyhX", + "33DM5s2vPgX2P52DpurbXdVYa8dGwDCsJ3", + "33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ", + "33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb", + "33epzdB4nk3FWHtUpHMQrzTWxiehSti11v", + "33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8", + "33xk2gq91LNUaip9bPnoECtfaA1RjAcrSo", + "33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8", + "343uVxqsriiveWxekC6s3mNaERzsbfke3h", + "34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q", + "34whRPeeSYTPcihybfXmkG2uoShUdT3d2d", + "35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e", + "35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB", + "35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59", + "35SZSm1CDcz7p27Hj78xZACv4Ak45EKGpf", + "35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR", + "35XnFgLYBuYogTx9HHGbJCRGfyqyC9ZtDG", + "35ZmRhYBwDfvoASsw35KNJxwypvsX9xD14", + "35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6", + "36WQ2FEUnTmt67xXNZgQMSFQZjK6AJxLCZ", + "36hbDz8GSBpQdEf2UzcKieCNxSA3HS17JX", + "36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE", + "371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd", + "37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz", + "37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi", + "37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh", + "37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx", + "38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv", + "38MHxNgiHENWExwCe3EEWYmfvgFM3i1WVW", + "38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD", + "38TQEEGTmmPa1rghsYGwZhapiDQsSEnkub", + "38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm", + "38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF", + "38rK7BfeiegdchggPCk2CZc3fuy8ozwzPP", + "39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ", + "39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm", + "39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE", + "39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c", + "39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2", + "3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit", + "3ANaBZ6odMrzdg9xifgRNxAUFUxnReesws", + "3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm", + "3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T", + "3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA", + "3BY62gfDUmuzMp1T9Wx4LnMRk3oNbQsKyQ", + "3Brhg9KYdB9oDrUtvKJ9k7mbn7zzHnMV51", + "3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb", + "3DKc1cFmTC4BJFcoyeN7fDp1oavTM4SvuX", + "3DeAGDRtQ984GazpLqfpS4kRW8NXBei5V8", + "3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4", + "3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd", + "3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2", + "3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1", + "3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT", + "3G3kGKAD5BgWZu91ejMXsW5LxEMhKZj46Z", + "3GbZUJ2oaUG3rZTvAwTCqpsNMWGm6j62r1", + "3GnY2SF2DoWRwWyQb6jThRJ5xYzNWFfd7J", + "3Go9rkgYQ3oLXfbbiDFENXmWZXQDaMjvtx", + "3GohY4RNGXjRH5KhByj5m4Amxq9jTsGfBr", + "3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm", + "3HLxZqoEHdGPV9oFZQxVfG41z1uP1LrNaJ", + "3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH", + "3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy", + "3He1eqsBZM5kbtZGuUDX7ysfEVWCjweZtJ", + "3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU", + "3JJpCZCk4h4TpQeU7SA1yhH768Xgbtdbfg", + "3JTWYpPz7JkvhnAN7XKzYK31AfmxEUzRb8", + "3JbEPhuab1Gx6yrY8dD6wF1NrVAn3eG8CD", + "3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t", + "3JfZb6DbsRaQExeHAYmFa3s3azckqdyQr5", + "3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5", + "3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s", + "3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth", + "3KUrPEGy9VFeQHZYJSGZpE78X5zf1n48pP", + "3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7", + "3KkkHYZywtjNy2eoVvL1xLo2Mnzz3gaDqQ", + "3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse", + "3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT", + "3LYNPfnfmGRQcheXUZFRNEYPDDmLvDSgAE", + "3LoYYxQis416ykPKGNuWe4iLdfSPWCHjgd", + "3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq", + "3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1", + "3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", + "3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", + "3Mzdh31vo6wUPTWnZ7GncPPWXA1WDopkhm", + "3NNsvp7bfeihJTiGbiL3t6jH3jUbRERsB7", + "3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", + "3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", + "3PggDrcp4et9phMamnSenN8HeNPP2YCuCX", + "3QB2qhnj5Xxwhh3GKcfwQDSkL91BCCn5cp", + "3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", + "3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", + "3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", + "bc1q02hdwthfslrempcvrgnrelsluszmt20qjaahg3tn2plse5pc3evsskz9g6", + "bc1q07jp79h30qmh39pkdmntaycwezmfl2njzvp85z8sdthhp2cus42qrwzglw", + "bc1q094s5w7semhdkcgzxrhxe6am449prjhsend8p83fhk9jv6rnr0eq6af0pp", + "bc1q0asc7qsj90esjzfmgz7r79tc5vd455yugwx0q4eqdqhqs82t0s2sfhtec2", + "bc1q0de5mlkcvundsnzdsmj6padctjh25jgsq3tcyu6d2qcgjnz0h8us2sws8a", + "bc1q0nnem9u53fcxcnmuutqw7j458hn56ljte34edvstjfyz8rfhxyesju3hhx", + "bc1q0s0enxvmfvfg3dj0rza2el0vz7p3a6xk2juv7vztw22l4g35rknsmv58se", + "bc1q0tckafgtukhn78d32ljl8c3hr0an5jq08599gf08mqxeqlahdg3s5wvuz3", + "bc1q0tvp3naff0auk3p4q99k3s9ltlf2w97uclrjspf3lvjkjywsj8lqvdx46f", + "bc1q0vthrmhktt2mhew5rq6e5q3qlj573uxcfqry5h9ea3gh4l9fz6hq999wz3", + "bc1q20mxuuv6ta5uy6m3s34lzwgs6p4qme4wyvv9y2cawd8a45y84susw2c9rk", + "bc1q2420wgxmqkxjkpkkdd9hxflxuqxhuqnt7atg0w3q3ypv0qfel0yqtanfuy", + "bc1q28pdpztsjuy4lqsa5hs249vq8ftykkt06aa8w97hgjxuvqz30trqqz5jdh", + "bc1q2j0ks6v6swlavvg20adsdn7hf9avm0979jc003g9lkg9dx0trz3sma7q62", + "bc1q2njvavlw9esncygac77d3jxjfwu877f23gxa88x33vjf3xa24lqq0xxetl", + "bc1q2nra9wwwq7pu4cg8zwycp8dzg9hcv8ywlj356p4ahjy7l80khphqvjdyfy", + "bc1q2qux9ad0egep5v5f2sup5hyszrl3nrfzyegmnmccmw7yk9chplhsy5sn4l", + "bc1q2wd3mfdcvjrxlccpl7wrzunzch7xaymtfzuvvx2tld760j3x5chqgsget8", + "bc1q33qexf56q60lxfpjhvgkj0l0lcgsapa7lsugkcwnyrceuw7kd89qsmy8h7", + "bc1q349jnpnefh952da4unfapsd3a6zmhgw8ctd2nk4ut40r37ax0d2qn0dluu", + "bc1q3d9jgd2yfx49986hjek9ulcj55umf6uyssrxqdmma7w7f7cyhc7qqyqvzr", + "bc1q3dyv677fn6feur2qjaqjdcftzgrmrwa7mjnvq7y8wxtka4ceu8tswfcvwm", + "bc1q42vvtdvdkdzj7glr6mtd52vgxddagktxusha6dxl2fes2dernqwqzff9k3", + "bc1q46uyezygewcl972rkp6z4pdtay669pxwrl8q70mgnda4cyf6yz0qj6rcsn", + "bc1q47z7kxma7lp7chnkaucee7ey9qds292kylz6rqvdlusu839ved9stns32j", + "bc1q48j4p67jmgpdpzxtu5tv3rendwvf6jjtqs2gt8ed96syxuqrsdfsl788un", + "bc1q4fpz2ntr5zlz6jga924hmaqc4a86s8luvfym3ff0qqr6gxykp60qeqqdn7", + "bc1q4gs9f4nhla3ufe6sumn8k0smcc5vxr0524nz3d5nhww70dr703lse46rmp", + "bc1q4gvftsdjy8wd6ga8c3a66rg4q6lxqvgak6edgnz7whs690vy2x8st6at64", + "bc1q4tl9hjvv3yvvsgqdajd492etlg8phrtml36ee5n0dt3mylmce23qnd5fdm", + "bc1q4zvuejph0q3z2c0narhgjtz6w47h6rst5eyyvr270lxh4tfqzluqrx4h4f", + "bc1q5a0t7av9xtay7av70fdwscsnx62rssut3mg7dclwmmsj0nxq5z3qgm8t49", + "bc1q5j8dyy5u94j0ulfg98l6jwsgjfq7dna0wwcwqvjcmwkgkwtcf30sm856qg", + "bc1q5ltp433ew9q98antza5s68h46g404eeaj6jkg4u6799q9dmkdngsmh6zny", + "bc1q5mq8f6rh85jwk0agf8huhtjp6syxcu7q4dk7alda9c2cedflj8js0u8j9f", + "bc1q5s4sa6s4vgst2pt97gvnxrmh9z8xa2j7kj370400fpx06pkk9uls7vzaaq", + "bc1q5sn9gqy6hd46yw545946f6a5crqryskhs9gge5z3gkp5d9luezmqllv7wz", + "bc1q5wj7yc27dzvnejeq9h543d6xt4cd90q8v8569tpzm6g5k3k252wq9jwuza", + "bc1q5xfafyynujpe4xm3sau92sy8rar3auf80vz3as6cjrn7pyvncfxq34hhcv", + "bc1q63yjt8zpr2kcegcmjr3vyqukm9zhlr432mcgss027lzs36qeh7qse8ct8w", + "bc1q67r0cfzcaqqm70sr00jq9fdyaplwcg24rtskylppej2qpgscjw7q5nrwf9", + "bc1q68mfyj37aurdzxwpq93vka6qkvhmcjl02l66va6vy8yktegp6nvs5knqe2", + "bc1q6e05t64zsdffvjxgw9njyxt5yhgq7xt2xxsufxk5npfcz4aewrgsyccu28", + "bc1q6hcsftu0hmm7q67cec272y8sxwhkq0pnpymshuty9x8wmymmjhdsquhzh4", + "bc1q6j7yxe948zd35xsrx3jucflxeq65unmrwusrm9a6c82lj459zmyskn5xk3", + "bc1q6kumts4ps94pyp8mfdn7yyy9p7y8n0wvgq760xpyk2r005rsh0dqdxxp22", + "bc1q6lmpnckv0zkdkv6xkvd2m2uy8mxetnz9g3qxkp3kpkvfhnsv0w7slkje25", + "bc1q6vk4rdxdnuklg5m4ltm866v6scz6lyuxdhj50qp6p4en8vtt23js9wpzgj", + "bc1q6vs72ztq8xchew26exy4kdnjxzrlxz43ny4lfckg95z5ka6ge6rs4rc5g2", + "bc1q6xr3ys66ry7jsfdfrlz82kfkwwnmdqtjh0ctm7y974kvufrwwezs6clrgr", + "bc1q6yk7s5g8u2ev7k9sw4zdazlfxj4vtduxgpekxvttzhju00c0yshs7ymvzl", + "bc1q6yzjmcudjlvq5nc0un27kfzwr283u0wdm53kqhelsja428t8jjfqpxc32j", + "bc1q76gspqpw24cqsptydstwy3egft798n2zq39gxfmfuxd5fvhh8p9s2s7c7f", + "bc1q78df3e2evtq70ntdcmcwzn0gs8a9zrlzh3p3xfrrt7p7s589pqesccuz22", + "bc1q78tqk9mn587sgnqqthsyrawmwpne7ssl4a4wlyasq4c9jqjtndwsyj22kn", + "bc1q79crmsa0k8g8k735nqqlctxqhz6eeugw2qv3x0sskdvsmsvjq7rsujhrr9", + "bc1q7d5q7e53k4w3c6n28tjrdvmlxl8skxutykk6fs9fgh79h0k9xc4sr9hzuy", + "bc1q7du4789yhw996lqwx6scre99sfzy2e53ax9502daxscsye7vvmksy8r743", + "bc1q7eaej94t49psde7mkmy6dd7vgn8f0zg45yqalpysy7u47y3z00lqg3x7fn", + "bc1q7l6c5ddseh5h54680ae0ufkx29y6rnl5yr8vhr6nfwc5smk8p0ysexsgsw", + "bc1q7pnj8k3tphfvcq7vrzlja5vqdqp7xed9rfn9hdl4ehgq09la9yhs5dpurz", + "bc1q7ps737rkza38ha5ysg3k4sjrd2xauexthkw23lxt74lpr70gum4s2jp8uk", + "bc1q7ta8kheq8ellkn6fmmkzxj47vq0uqcd53zd8n7g45hl945d6eals3d4ljj", + "bc1q7wcl3plp72cghpd6lapucmxtaa5fq4w4wmhswu6xjqhrmt9jsh7sfapsw4", + "bc1q7zdunrqm74erprv46nyryjkvl5nuymgmn2ek3x7mgck48umga5mstxdl9p", + "bc1q8fkquy9luszzu2mlsad3fsjgx433vp4qx69wswz5skhz65txv2lssgaua9", + "bc1q8mfdkttc6n804j43jmcqkftdug7yje77a55qeyhsy5ej7ca65wgscrvyd2", + "bc1q8nm7r22vw6lnmzl52lqvnlrft6hm36ye0087e984feavjmej4spq8y57z9", + "bc1q8pqeaj8c647ascnjpc582dzwfw8xstvyderzxzvc2dk09j8d4rasvctr5f", + "bc1q8uldtn4rnr23djmpvgwacs6tcazepkflhmej9t5r3afc9lldq4mqrl6zna", + "bc1q93rsljth5uxrpye4na8688r043lye0ny7uyexr4n24hf9wlgdmns9zcjn5", + "bc1q95ptqclhvj9vrsfnexfd4fs3l95dyyrt3cq3qyfpgxsmfuhspj3qq5gcqt", + "bc1q9988y3xw3mhv0tnrugu8c2vsw7e6f7ywrdaya6wcrcertw8rz54snxgnl9", + "bc1q9cs23smvx9c4q6eqcjpxgp0yrw6ar62w2x4mwe4dd88hqsfg35yq2pfk3y", + "bc1q9d6ayjfl3jagylp7x86v3dzzk65u0gt34mw74w9fxh0nyaf24slqp6sat4", + "bc1q9ehldvjkmd3s28m7922w6mun083kpjqfr9q9cal8zkqp0yaxyr4sy8v4re", + "bc1q9evu4ywa2tmhxt9x3fe6nt0e5ngxmq7kewmdvuk57j4c53ak4zjsj87pw7", + "bc1q9f5cecrwtwrfrvgxde5c04serf3txc8mdx7kgk3zhen2xp22zgcq5dngyh", + "bc1q9fftzadztvgpe90hnwec9n5al44xkuw6dc0n3mtt8w9wxyeg3rlqwfn527", + "bc1q9r4slky3fsjnen39u3fh6d22pwvk3pduj3htwyd5as3hywe2d49q6zyk05", + "bc1q9rrkgd0x5rv57ftysp3t4e35zhma2ejcjj0per8cg89um0mn0acs5hqh5k", + "bc1q9xne956dj0szmxur2up3xg4jl0ktjxpkggr7r5kw5tth48n4pemskcd9mc", + "bc1qa0mxdj0yehl3m99c8tsgepmngz0a0yf96v9al3ejyvla97hysjdsgzj59x", + "bc1qafrg9lt04d9wvurrgvr7l8p4cn5f07zh86d8rljeh6fzqegxe44sj82x4a", + "bc1qah2zmzd4atalqpds7ke86h7lvv49xqa43cyk28y2lwsus7sujd2sndplut", + "bc1qaj7w4a7kxvkjdgz76mc2uy66825ngjhqtasqd6tgssrajc68dk0qqkd3hc", + "bc1qak00ktehfya8j5vg5xcq7dfa2rae7zfnvjgs9jm0fsxa7a420rjs4zcp6t", + "bc1qanjru8xgu07kq6w0meyvydsfuvrlt75f4uekrhkuucp73w4gq0kql9dh26", + "bc1qatg2m52vj24zxvu92azvphxs08xp59prr86fcgdg42sp85v3qhsqsw88rc", + "bc1qau35ge0tgqlqvhn3pyv99ckukaxh9kes6e3jfpc4vw2ssfh3fpeq4dec6j", + "bc1qaygehcvv8334c6x9e42shrjz88kpnhw0gycz5fque4w4rjck6pnq7msl6g", + "bc1qaz28gc8e58uj5e80nu9j0yjws4zy84ahqlnfqd9ryhvc7a80vlyq430rvv", + "bc1qc058aal4cj2kk8e3tvhwu95cndy0lzr2zrxe49f3yasp693nyh7slfcgpl", + "bc1qc3h2hv8wnld70ujx8dyrmxs0ly27xs7us09y6e226yfl5vrgc2qsrxuucz", + "bc1qc9wlxjgu53ua5efqyjfwhwr3cn89smxq230h574v56edwmw0f0vq8qaakl", + "bc1qca7rh32jt8kg4kqtkcu98uucjlsslzsreh7tchk6hddvwe8kzzjshpppat", + "bc1qcf7wyjzz6f32je5vyk6pvketf5ykyg2lys66vwm43mc0g0gchzasy0k2e8", + "bc1qcmslz2gwsenf0xn9g90gvwkzympzxxhwhp8vrckudj0w5pdndwss92v3h4", + "bc1qcnp9057urvh2rrm09eya8mrasea7yys9q3q8hxs7unyct7nydtcsz57ajd", + "bc1qcnx924c7w3e8r42q3rvup60lw64gyn2kd4fs3pwckw7zw9966aaq568nz4", + "bc1qcudwp0xdlldgw78t6zfcklehwqt44a0hqt6n92k6uplk2w6q33fst0kdnv", + "bc1qcxzdm5pcfqnam3umsxsnwfykfx8j9rsl4nhrfqnt55qeg9q3625qvvyyuz", + "bc1qd3lvm6evz5suedhlwyrtf9cjrqtaq9unwe6423yl3j3exmq97a4s0mpzwt", + "bc1qdjxc3z0m2q5mz7lr67pmuq8hgqmhds6nmae0fkk2s07zge2f9jsseutev2", + "bc1qdm5rxs4w29c5u8wg7ppeqssgjrql23c0gsps7m0ctr6ratcl2a3sjnnq9g", + "bc1qdn29e8sa4xmwf0c4r6xkekea2mwt73d2qjsdtsne5j6gd9ujwysqmfh59v", + "bc1qdqs2zn6hrhvpxrtp0t82xfk2jv2j445hu7gguzm0ktwzdq5zzflqth7638", + "bc1qdvpvz88pq46qnvcz6jz08nmfldwhf8nx2v6x4z4tc79mpy8smkvqc9t9q8", + "bc1qe6xyfazpkry4nje0wmhfnv6faxfuu2drx4uryejdl2mhrplgeujs3knff6", + "bc1qe9q66vu5yyuzedfzugdh3yj5ask3n4wpx8pghw7ff6x7dd5p0gqqf66rxd", + "bc1qecswgzwg3sldnh4cwdfgly7f05sp2sela8g7hg0y0vp8l7t9nueqarz5w9", + "bc1qemj5cexuhn0ld93drv40kqfhvl2dag5vgy3d9vv4dar0hl6he3xs4fpjma", + "bc1qemtc7ddu4fvngf7pg8c5sukqswt3fr2zcnqnt7pju6a5fyrz7e5q96x25r", + "bc1qesf0u9lu5petyuukl9zq0g86wf2k69yehys2n4te7pf2y2csqpgst0tqhu", + "bc1qf285u7ygu9f2umg33a4c9wtdkfpahpt5kvqazk6arzktsw6vwguq02eckh", + "bc1qf2dh6acfagsayfprjzwzzysn4d4rdudkd6dq2adu2wj0t6ty8vlqnse73k", + "bc1qf3ret54m7mdevr8xwv8msstpcx6978vgwzfxkw3zjmlydfk4lqxqekert0", + "bc1qf42d25evlz8m503fgdw3trkzq9y53s5kwayfwjpvas26q2cnlt4skltleh", + "bc1qfdpu4yp2zk7xmm6tpfcatxe4gax5ktd0g9ra59jzcqtqkldrqe4qn0qqc2", + "bc1qfjrw5r0wttwu0u0gewyfcs2v37mujcxlhrfp7pqt48zwtjt2fs2shqjw2d", + "bc1qfrn20wgnt6l0a3qq4fxca8c66cuyqmvrfwkwwqhkxnf6z5xuxnpqzdzymf", + "bc1qg47q9u0ctw40jf0p8wswc67tcr96wel065f735cdu3e9aypqpumsvt4lun", + "bc1qg7egerrjv5ka0axjcwzh2rnkldr2k5yace828glhjyc6yz6s46sq6jk8xw", + "bc1qggrjslsem6ep9x4yxvyfdtgcxvyf9z85srlxpsuucrq6xsvaz3jspha83z", + "bc1qgp74f6xyajxznu2hnjh9txmzy7k7et3pkh9rc6enxt68fh8lw5js78s4d8", + "bc1qgpf2ar68l58zau2alfdnuw6afhm99k0nlfsrvcacd3jzpjlhq96qhxaxtr", + "bc1qgtldvmct0wa0569crgedr3ccrlydxfrymk7rfmalt7ehjqx54axsfv00gg", + "bc1qgtlgfqdyw60cawws4lvnesva46lgmyx2hhfl9xcnqp5m45u3dq3ska8nl2", + "bc1qgu5wpteehuuq8dcdd30d7la405j9r8wa2ttzqawt73lt8aec6kjs6u33r4", + "bc1qgzq2gq0l5nuxlaj45eyp4v3w6scaa9hx6f4chg60sufwmqwe4c7sp9tcng", + "bc1qh08szja77tucpmmwqmvyk72z0kjkqwuk2r327w7vwwh0f7997u6q3du9ga", + "bc1qh0yftewpsf8s3pyln8s6ky6qd6c7n643gndfhmkp7uczayua2mys9u6gw7", + "bc1qh3kulsckdz7d5ar3taglhqz4sa3wuasanyypuxyjscwzh0mm3g8qe9danw", + "bc1qh4qr0ytwjz7axxyrnl95la36jdqlygqpnul7wxx6a0mwzfmg9tkqkgszc7", + "bc1qhdaulu7pyhdhz4ty35v62gkx56nj2l7e6rz3x799sztdklan8n8sx863nu", + "bc1qhh2t6x7z57svrxdtl83xzdfz8melaueg7jmtpmsma40g2cfdxkes3lkd95", + "bc1qhjjcklsnjs0aseena8mmvlu7kufmeuhrlfz9l7dewpqsn43s707qkd7dny", + "bc1qhjxpm66t2k6v7c5zk6u2sdh8t36kas4a5402sqw82ewdpzuutf2s38ra4l", + "bc1qhl29w3rzcp9q3623hzvvnuksst0g48347qm82tr8ng3dfm9r0yvshlmvh2", + "bc1qhn7h9l2ky9l95sq7rqgaxp6c8ka0r5vfrghaln2pmeu67x4zpzzq3zcccf", + "bc1qhr5qw998er3rerm0lawlzzuuux6kja9zm4ryjls0aq5anprwuugs0yfcdg", + "bc1qhrgwkqetel4vpvj2azyyyhdvpg9u8j2dqz0svuwzh3vx4pvjf2dqtkt4uk", + "bc1qhrsvduw6j20dh4mseyf38zxqzd642zd6vmfjg9lmjj4d25qlvj5sv36ajm", + "bc1qhszm6vgtkhdn9cex8xurjkxjs2jhte0teetdnu4clr0ecxm20u5qhghyh9", + "bc1qj233g3tm9jejsnxvz3a06zqaqwwj2356f2n2sv572ggpahmmmxfqflfcx4", + "bc1qj390dgucrvx68jfad2wdpfhfuynvztgy9sy9a7009wmpecsdlu8q8zh0k4", + "bc1qj5dr2574mxgrxqxahymlvwna345d6d8424tyuqy3v2zhgu55j7fs2ezzq5", + "bc1qj9sat2haxfa7lsga96cxu26w9k4nr7z6sx4m33uzfq2x53sagcpqfzzjdz", + "bc1qjfmxg8fxqx286r254f3frzgra4sp4n5p2zczfsnrpkhdnyjyrhfqwul5wh", + "bc1qjnf3kfl592u85jlkvv99ms2qghv7yycrvg9902dtlh4lnfywg6wq5stn90", + "bc1qjnt2w6jx3ttx8dw0gt3nflm3ld0n2akkrkjzp73ua3kxzyhsj4jst848l6", + "bc1qjr7emlhxssap2npu5szrs5fa3cgxcnrd9gh9e3mdxzhdpye4puas7dp5pk", + "bc1qjsqyvnms83kvlnhc7r8phce0wj7j7nnvh8ye8ejxynke0uujwvksn2lely", + "bc1qjwjq6t60fwfsr7hf80yrhyy9lrvfjl2l9lpdwsw6sds4ph9uuglqjj53xx", + "bc1qk6ctvhc78eg80v989xmt7u5mwefewt728d9s0jxpgvqxa2m87xxsnu0wzw", + "bc1qk6n59st3mvj6ns0juv3vsdng48aszwdt7gyp0xlt8mrfn5qc9crsdx8dv8", + "bc1qkayh60m2uc86cere4z2gz03g2ayg2k726klqf0vx7lq588xzz0nqjvrg0q", + "bc1qkeh8sh6hzc49097j6fs8lgkfxpyas7wntelwnfqk4xhzccaj0nfq73s3f0", + "bc1qkjr6ew6d5nqf2vpxd7vm4w5lps72c8sxnc7hxnwcs9psqvpcmqkset3kdn", + "bc1qkka8ku2z79wq7wtkr44qmp6x3gftc9suju2q3ncw0xdy2nwj37jqu7hec8", + "bc1qkkhxgzvlvhymm2eprt0eukr3gw23zmarcuw087td9l34tmuprrysh643xt", + "bc1qkqap38eq4y8auh6z8yjwrj8r2p77n6xshcp8xpy2kkjcu7lhfyfqntsrjh", + "bc1qkrh06leyzgp84z0v495c0gr68tqn9ewue3lendpcrdz8htz0yw6q9aqyz3", + "bc1qktk40875p4gcafun6m2yzfxsrdt6d5h55c2zhd45wfefkusux27s38c764", + "bc1qku8s2753ttheldjrz5v4xmampnetjp3vy30m7j0nd3348e2m9rpq26l3ef", + "bc1qkvtt6kaw688mzu7txj9q3mn9m60pskv62gdz5j5kugd5fc7f8dfsdsfsq6", + "bc1qlftdm0w434ud5nz5ktnmak4gmr7k4x5qajmr5pvuh4vz9m4e8ljsujemsu", + "bc1qlk5g7mtuyxdy3txqz7q24yjffcdk6g6mr4ks48afv5234hly3hvslw8aje", + "bc1qllpem4drxvxu45r7aj7aqma50cylmaup07eynehs6v3f8zppcw2s00v3rt", + "bc1qln0rhtex8dwmqgex2mzkm47c437tunl6kw9amq7s4dye57fjk44s8x264n", + "bc1qlss2xnh3hsa78pedunw9qsm9nzpczrq90dtcp0sqknt3xkf5wyzsjtc662", + "bc1qlv8j6wgysv9xdpqtfau2lq5rcju0v4eyazrlawpgu8pwd2usz0dsfqc9up", + "bc1qlv8t6axsf50pe5wnt4x4xhqfudkumdvx3rc38f9kj3q82qhqy6lq626v47", + "bc1qm6hw09d24eqlz0x5r5txlpsrqvpf250fd5py3s4uwax6gwtdjfrq03yh9z", + "bc1qm72da6c6sq6a34rkwxk9sfpmy9kqea4dv33280hm5ghfdm4myvaqxnhcrw", + "bc1qm8z7nqmtmrurzcz82yec3sgk5rz67tm5rcaklqxajyxd348vppes86jvuz", + "bc1qmcvwrhj556capug3q5xzhwyhq82cps4l6ng0w573v6rl8zgkrlmqwh9386", + "bc1qmfzk56r5xvgfztej8fkg7rw76wy5qylh79shsaewpltfq4pz2qss5ajj7r", + "bc1qmhjm7sca3qwyujgfqtg3vw7swzxyg7mkxe4e7uzdef5ftc2kejwqjp7q7p", + "bc1qmj4g65rdqztaea7aqwnht5v2fhajmjat8j0q75nencrq2gu8q3ds5e0k5l", + "bc1qmr28gws3f589wmxf870mee4mapyzrv2209h3c992hhv3nn7ppctqhejqve", + "bc1qmschx4zu5yd9y82jqs6rwse3lftuzu97j9x76wdtx2avtee0g56qppefym", + "bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa", + "bc1qn55zpxs6fzjju36zuvkndzjfz0glhejtv299krn96sahl2pupthqhjc49k", + "bc1qneexyhzwx2g7ugw7m93kf48d6mdpt76gghmnr07s7dq7nhlwvc0shnryqd", + "bc1qnnx8uu6tuw5qlnqava2vjzrlsrwlaws7h6med4ndhtghrw8r5vcske26rv", + "bc1qntgp8cuk9sp2xadzc72h20qt372nvkjk5pmknvu9zntnf0yly5dqy7ev8j", + "bc1qnwa48yav84vzadrk79ulzrzu8s5epl7sfqelxufnpls63j7szx6s4n20hg", + "bc1qnwh5kqa6u5k2zevq0dfwn8z8mux4sz6t23g4xqeaf2lrd6zda75ssrs0gx", + "bc1qnx38lf4ds0lrw3s0l9fc745l0x3xdzw3w8stmxdvwu3v0n8jrcqsxm34ls", + "bc1qp798q5d3n8wsj3x345c7v65u9fwfe43e9vyupllmrrjq5k5n39rseze5vk", + "bc1qpa3ggjgfsr4cule3c42ns4y97k9z38whpx5940uw4mn6taeaaqjs97t28r", + "bc1qpcywcjgfel39zc762pmwayj9wu3v5xly0kjtdx2n2w0pandsce9q5rr54q", + "bc1qpr7fnnc9gan8vd9waym2rc2td24s72732wltnu9rc0yxhdssqaasr3up6s", + "bc1qpsftpydc86wxgga26r6nfq5tvrh5m34055kdrp25lulqu70shunskxflr3", + "bc1qptacp904tazvu54qxty5qunnwqhcm84ydrt39r9c4cqzkqrtju6qfd7eyt", + "bc1qpvwcac0hah03lepsvrx8zu9gdyvprfnckga4cfjg3ctaflwc4xvqp6hw3h", + "bc1qpwhmpvrau7f82hlh6es4wzedcq2rx5aqx5ue4ajsl4r7h29udx7q2ztulw", + "bc1qq5d4g9gcrwmwm8w965cwtkdgu60sl7fteahhtelzhna7rm29q0uswgca9t", + "bc1qq6jmww5tpr6t4cgl577d28cjr6mpxz85d6tkh7kjn2njkyd7flrqyt25yw", + "bc1qq77frdehk027ur54wzhhpg8dtqwpdn3emaxv42kxxlzmttrznzqs7mye34", + "bc1qq7m25904sfa4qn0na5gfssltjdmxwuvqxfl73dunza4s4cysqh7ssale4g", + "bc1qqea6940qjuhnuqqcu6u5ajeh3as8drwwwey56vxp90d05gzx72psw4ngua", + "bc1qqf4k7r66y3g3fpjlq6g46g5av5qgqvjpdhu6lhg68fwzm4rc4v0quux3vy", + "bc1qqfkncsw0gzr3vdyearnvt9w3ckuymet0v495dk5hwpfyjfeej42s28g3uz", + "bc1qqmsz5fe3dqcg7wxt3wc9s69td0yxnhlj97pvxknv8s25yuylawwsc99267", + "bc1qqsse9hgmx3w56c5suhkp2gqyxqhh6acc6wf0gnd7fjtp97f7c8esmhtj4x", + "bc1qqtmu9k5pakw4q4p242322x5tjy6tqtjj3u596nvksxjdhw789gfsmuskwz", + "bc1qqtyxkv77ce6s7hqw2ljg6axaxf4463q2krwne5vlxhhk3x7laasq3vqe5x", + "bc1qqx37qn2ca3gpjtuj5dkh8l6u4dh9sujn66f5gwe5maw7cvw47rmsej5kwl", + "bc1qqzq92mhj6a0v8kflqx6t0p3g47pdrqpv8f8gu7uk2a30kxxnplns4ez65a", + "bc1qr9kjw52l7m3nxhprgkt99nhrqtem5erzay6jy3j7xzyge65z3v2qse5xdw", + "bc1qra0g63370unwjrjpx4f267xss94zgxp78wqyc8gavqstnplakmfq0yq9f9", + "bc1qrg5y53hvpnu78pvy70v4s0qe52rnx3298gdvc7t9lsu2lya7deuql4a28j", + "bc1qrje4nstr7yy2qvmrfazlnjcsd3573fh6j9u58t446mn3ltp8e5vqgz8535", + "bc1qrjgp0ksa0wmhdfslzta0cem3s030jg3cxf7xfqtjcjy3jstj8wnsenhgs3", + "bc1qrmhgzejkazuezzduws22wuk6atlsxruytyh9ynx2855qpfezy5vskdznmv", + "bc1qrpcnmqxe8q4mq3n04qdy657wu23qxu8x5pvc0yx9adwz0x093gtsh5r2cv", + "bc1qrtyl2hpxu4lpl8x7fz6rlwvd43v6a9ynvqjf2mr7gegvnmdc0lxqas83mx", + "bc1qruqm8ef6lukm3kew536vxpys0nsrkdqqq7gn5eyjz6fsdee55frq9ksm66", + "bc1qrz3dctwmkkksya4n0cfhfdej480vx9shkt9vfe63qg0crmr3x68swt9jn8", + "bc1qs3w6eh4wqxphz769jlkglhdrmfaz4pj668aag2qrhcmrj74a02psr7mx0l", + "bc1qs6edu8cf7dtn2fq4earyhagryd3zsqvkdlaj285xptzjrq4szzkqz3fxze", + "bc1qsh9f8ackh9etwqjy6hd3vcqnc8wy9wnynsfypyv0p8nxesytkqeqtp7edq", + "bc1qsl92pxqza6xmw26xp6783slr46eh7wfdeyxnpyg0ammfcrc370esjrcfma", + "bc1qsmwlvh7v6wkg9kxtgh65q9lat00xx68g7nqycn8jdr5dudvqe8ksd4mxg7", + "bc1qsu0lfh6ae4pklru5cs6qscf9z88m4ckljlcxyqp5qfcvv5ygg40suzkygv", + "bc1qsvgk35j2tgq3anjydqlccunngrqur9pk3hdlfpgmd3kq69njaqmqdde6r0", + "bc1qswcfs3404reuplxzvmnxv23r82jzttw7ugm4gzwdwddpqa985mzs4ex3wv", + "bc1qsy0tanmqylsxjzpfecms96du4vp4tursfh9fyp4w0ff5aky7qe9sclj6f4", + "bc1qt5fugtlsp402yta0xvl79rlxc5epx9nd926f9dvct5r3uzuay5gqwyq55w", + "bc1qt5hqtxfktkuusrpcyus2zrc4x28hg23l35pushfmj0dsvmfrv2lq5vu9au", + "bc1qt8wuxew7ly35fvu2xaytmjvr6dlux5d05p9qahzw6h3axkc5p2ksla52xp", + "bc1qtahzsvs0hrt22dmdt3268hpdh9eh3rlxprac584x8l9s2df6jefq5nse9k", + "bc1qtcx3lve9uscxevqv0ekj2e75kjy6mqn0aedxq6xrtxv9td0jm7dsj7vtuu", + "bc1qthgusw4jxlw2e9h69r8hpv22df47dups2gmkzlgp7l8ww27eew6q7ewjvv", + "bc1qtjq2ypqq3kamya3dsfphy7mdqwp5nc4adaxan6mqdze59d7ptu3qc9ryth", + "bc1qtllzgt5hsxvnhga8tq3nars4d94c263q8dm8vakrq6r42648vhtqtyy36q", + "bc1qtr7kzsz669mfn8677ltxlm8c3t9nkzskj2v3lexx0kxhamzg7zxspkd8w9", + "bc1qttkf88qadw9mlvnfftw37gllk8q7m3jmfxrugath75rl3ydpt9zqlfjzzl", + "bc1qtuvqgvkjnq0gw4cc6p60yc3y6j7jzz937cs0wy6w09h5dyg36d0q8xsjlh", + "bc1qty4wtp9zhvtjuj7p36vf4avs98l4vata8634m3z4ys99t5qlhjwscslcg5", + "bc1qtyaqju2ar9x2v6c4jf42j9x9qzjcwev9u8uys524qnhznths37zq27ppfm", + "bc1qtym0jxefs7z9vr5y50gdsmtdfgcfyr9rxema6n23jw4cswulcu6qsj8t92", + "bc1qtzn5ktk3hhhgaweupzt9k6k9m00jws3xn5teplwupfy2ltl0xcjsl4g02l", + "bc1qu5pttfk0s407dtr7ds2e547ugq80ay4n82qpvwqzsvlccdjcp84qxpef24", + "bc1qu6jn53gw9t3j62lee0ht0p3dhtkycg24gj5kcp230jq6fn4jcsnsxjxn6h", + "bc1quezt5y4lqf37guytyf8jj56eywjvsanv7u8fq6q8p46hg02tc5vsyx3let", + "bc1qup8qwemtepa2wf4r8w599lphxq6f38s3ta8925eu7y8zvp4x6v2svqrfq2", + "bc1qv85ky08r24v3cnysh8hk9c5ftg60f2kwellmzpzlqnwfawgtdqesghlznz", + "bc1qvax0qf0zgycnwyd2cmgzsr65l6mldc7r3wm4876xg4u7rtywp2dsw034tt", + "bc1qvcwzkv448c9rz60fas5wqgnrl5gzvh0nnacyudqcsxhr0j9fa24s48m79n", + "bc1qvkn8eymy7c2rpw2c5x6x8td4hrul6vx79y4mtd4zzdxdrxwk9q2sv6rnn8", + "bc1qvu6u5tnjk22sggwkp2j3vlxle5mq9xz8v82g7j57k9ele02wjmkqz9vrvt", + "bc1qw0lsnwv0sga0n3rcpaxtjg4z6jhf0xu6dyhdv7jcx9d8gm4phtesr9vywe", + "bc1qw5ue35s2rms9wz2ajxu4h83uzaylax7jqwp3h3cxamj9j05dgw9q6nnr24", + "bc1qwu39fckqy2cl9z42994xyhg657q7txajwakf9sdzt4f3caluk3fqz3zl94", + "bc1qwx5sl8mls6hkmumjnekf6szuzh979cmgzsz8dqm3xeayrxfgz4us8m8y4z", + "bc1qwzy2ezy8zskmuu2v6y60w5uqe46qeql94may8fetnl9uyahlx0lsthg04q", + "bc1qx628pacq3m5px4zjjagrtpc8a6v3my5l06rxcrl5xr3vfv4s00cqcxmlhy", + "bc1qx6ws8f6p3zzevs0rf5kvu7e074snfmr8mms8ezgreg7kas84l7ssptyejn", + "bc1qx9yj7x4xmek7rm5styss3vcdth48p6uqzjdfsua9s7v430jq2r8q0j4kge", + "bc1qxaj93j90njr4lwrevjhg3zr2qyr0zerw0d8fxlxhep6c8uu4jqdqhlqptt", + "bc1qxpa34lagwsvq5t8ul09y2hz2dh0flkampx8lqyp3jdt4lpwaxx2qe2uvxj", + "bc1qxs6nw2cjmctjeqjk5lhr47uv6anmge3ut66gmuexcryrymusqt9s2tvz62", + "bc1qxuv7ge2hcfhzykp49g2pxz69p99d0aujx5wupud28tulftlc0agslcmuuf", + "bc1qxyx06rxxprx9plp009nvl0f0ft5e3af3tt53n7pctylafqfltwvqyk7sfg", + "bc1qy2av32x3tkfucu25dqfh4nqkf50ayng43ervl7fcwg4crcu3queqtlcrsa", + "bc1qy7efv6fkened6hnhzydmcd9eatj20dsnc4px2gtmkedc0xznlcxq6n04jv", + "bc1qy8hl8khkpcsnjqvgna6h8249x4at9vjern9meph0e5el4g0nudlq7kd773", + "bc1qy9f5q32h9rmem40nd06e4l8cxwqlttuale9s6q076aymt0dayx6qekhfmp", + "bc1qy9w004s6gek29k3npgmxq8huqx48l2gatx9yqlu0rchxzlnn7nlsn059c2", + "bc1qyr5df2mhp3lfjrd2sjx56eqm7netrtdtwengw657k7k6hnmyedlqwfx472", + "bc1qys46dh5q94lykgqrvthhh52ajsk7s4c5ex7p9t7tvqe3uxheq2us3rwra2", + "bc1qywh2j5t52zhqhvlqymsw78mq9lfrh4utf47ufhfpkgfzj3trqaaswuak4h", + "bc1qz2fe23n5ykggw9394gxly6jqxk23rmhxesvd7q9d3sfee6cqmycqha09qg", + "bc1qzchnul757l7q2yrhtv2gga3h560vfjdj002xcstcd5cvspa3puks4h7gu5", + "bc1qzdah777dzr46n8wwdmr2y8etxzt0e66j90v4f9m2dj2wzjk3mtgqhamaj5", + "bc1qze2smuhn3k3yxq49fzsmz4pfjemnhpsjt5g3xc8slyh42edy23zsxjsr73", + "bc1qzk3kkegykpk0uzyekqfyr4l4ky62hx7tt9cx4r5klv98x3f37z0sr26gaf", + "bc1qzlhsk5ftpz6uaxgmm8hel59v7avmn0q8wp9gaaxdzzkde7ryumeqdnte02", + "bc1qzm3t8m5fcnz8t22kf2lyr97u2wret0pkjvzngldnqq5su434tsrqxjncvj", +]; + +async function tvl(api, block){ + if(api.timestamp > Date.now()/1e3 - 3600){ + return sumTokens({ owners, api }) + } else { + return { + [ADDRESSES.ethereum.WBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.WBTC, block:block })).output + } } } module.exports = { - ethereum: { tvl }, - tron: { tvl: tvlTron }, - methodology: `TVL for WBTC consists of the BTC deposits in custody that were used to mint WBTC` -} + bitcoin: { + tvl, + }, + methodology: `TVL for WBTC consists of the BTC deposits in custody that were used to mint WBTC`, +}; diff --git a/projects/wbtc/index.js b/projects/wbtc/index.js deleted file mode 100644 index 39646181e9..0000000000 --- a/projects/wbtc/index.js +++ /dev/null @@ -1,410 +0,0 @@ -const sdk = require("@defillama/sdk"); -const { sumTokensExport } = require("../helper/sumTokens"); -const ADDRESSES = require('./helper/coreAssets.json') - - -// WALLETS FROM HERE https://wbtc.network/dashboard/audit -const owners = [ - "31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", - "31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", - "32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", - "32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", - "32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", - "32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", - "32m8wzKabRRF7o6JRXN1srLSA5FzND769o", - "32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8", - "32okkzumvdoocdjN18SzbnTTNd2omQvvt3", - "337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ", - "33C6kjmmGp2mrS6coGn627an3xpiRpEyhX", - "33DM5s2vPgX2P52DpurbXdVYa8dGwDCsJ3", - "33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ", - "33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb", - "33epzdB4nk3FWHtUpHMQrzTWxiehSti11v", - "33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8", - "33xk2gq91LNUaip9bPnoECtfaA1RjAcrSo", - "33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8", - "343uVxqsriiveWxekC6s3mNaERzsbfke3h", - "34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q", - "34whRPeeSYTPcihybfXmkG2uoShUdT3d2d", - "35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e", - "35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB", - "35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59", - "35SZSm1CDcz7p27Hj78xZACv4Ak45EKGpf", - "35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR", - "35XnFgLYBuYogTx9HHGbJCRGfyqyC9ZtDG", - "35ZmRhYBwDfvoASsw35KNJxwypvsX9xD14", - "35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6", - "36WQ2FEUnTmt67xXNZgQMSFQZjK6AJxLCZ", - "36hbDz8GSBpQdEf2UzcKieCNxSA3HS17JX", - "36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE", - "371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd", - "37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz", - "37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi", - "37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh", - "37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx", - "38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv", - "38MHxNgiHENWExwCe3EEWYmfvgFM3i1WVW", - "38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD", - "38TQEEGTmmPa1rghsYGwZhapiDQsSEnkub", - "38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm", - "38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF", - "38rK7BfeiegdchggPCk2CZc3fuy8ozwzPP", - "39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ", - "39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm", - "39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE", - "39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c", - "39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2", - "3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit", - "3ANaBZ6odMrzdg9xifgRNxAUFUxnReesws", - "3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm", - "3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T", - "3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA", - "3BY62gfDUmuzMp1T9Wx4LnMRk3oNbQsKyQ", - "3Brhg9KYdB9oDrUtvKJ9k7mbn7zzHnMV51", - "3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb", - "3DKc1cFmTC4BJFcoyeN7fDp1oavTM4SvuX", - "3DeAGDRtQ984GazpLqfpS4kRW8NXBei5V8", - "3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4", - "3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd", - "3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2", - "3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1", - "3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT", - "3G3kGKAD5BgWZu91ejMXsW5LxEMhKZj46Z", - "3GbZUJ2oaUG3rZTvAwTCqpsNMWGm6j62r1", - "3GnY2SF2DoWRwWyQb6jThRJ5xYzNWFfd7J", - "3Go9rkgYQ3oLXfbbiDFENXmWZXQDaMjvtx", - "3GohY4RNGXjRH5KhByj5m4Amxq9jTsGfBr", - "3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm", - "3HLxZqoEHdGPV9oFZQxVfG41z1uP1LrNaJ", - "3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH", - "3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy", - "3He1eqsBZM5kbtZGuUDX7ysfEVWCjweZtJ", - "3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU", - "3JJpCZCk4h4TpQeU7SA1yhH768Xgbtdbfg", - "3JTWYpPz7JkvhnAN7XKzYK31AfmxEUzRb8", - "3JbEPhuab1Gx6yrY8dD6wF1NrVAn3eG8CD", - "3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t", - "3JfZb6DbsRaQExeHAYmFa3s3azckqdyQr5", - "3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5", - "3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s", - "3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth", - "3KUrPEGy9VFeQHZYJSGZpE78X5zf1n48pP", - "3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7", - "3KkkHYZywtjNy2eoVvL1xLo2Mnzz3gaDqQ", - "3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse", - "3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT", - "3LYNPfnfmGRQcheXUZFRNEYPDDmLvDSgAE", - "3LoYYxQis416ykPKGNuWe4iLdfSPWCHjgd", - "3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq", - "3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1", - "3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", - "3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", - "3Mzdh31vo6wUPTWnZ7GncPPWXA1WDopkhm", - "3NNsvp7bfeihJTiGbiL3t6jH3jUbRERsB7", - "3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", - "3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", - "3PggDrcp4et9phMamnSenN8HeNPP2YCuCX", - "3QB2qhnj5Xxwhh3GKcfwQDSkL91BCCn5cp", - "3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", - "3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", - "3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", - "bc1q02hdwthfslrempcvrgnrelsluszmt20qjaahg3tn2plse5pc3evsskz9g6", - "bc1q07jp79h30qmh39pkdmntaycwezmfl2njzvp85z8sdthhp2cus42qrwzglw", - "bc1q094s5w7semhdkcgzxrhxe6am449prjhsend8p83fhk9jv6rnr0eq6af0pp", - "bc1q0asc7qsj90esjzfmgz7r79tc5vd455yugwx0q4eqdqhqs82t0s2sfhtec2", - "bc1q0de5mlkcvundsnzdsmj6padctjh25jgsq3tcyu6d2qcgjnz0h8us2sws8a", - "bc1q0nnem9u53fcxcnmuutqw7j458hn56ljte34edvstjfyz8rfhxyesju3hhx", - "bc1q0s0enxvmfvfg3dj0rza2el0vz7p3a6xk2juv7vztw22l4g35rknsmv58se", - "bc1q0tckafgtukhn78d32ljl8c3hr0an5jq08599gf08mqxeqlahdg3s5wvuz3", - "bc1q0tvp3naff0auk3p4q99k3s9ltlf2w97uclrjspf3lvjkjywsj8lqvdx46f", - "bc1q0vthrmhktt2mhew5rq6e5q3qlj573uxcfqry5h9ea3gh4l9fz6hq999wz3", - "bc1q20mxuuv6ta5uy6m3s34lzwgs6p4qme4wyvv9y2cawd8a45y84susw2c9rk", - "bc1q2420wgxmqkxjkpkkdd9hxflxuqxhuqnt7atg0w3q3ypv0qfel0yqtanfuy", - "bc1q28pdpztsjuy4lqsa5hs249vq8ftykkt06aa8w97hgjxuvqz30trqqz5jdh", - "bc1q2j0ks6v6swlavvg20adsdn7hf9avm0979jc003g9lkg9dx0trz3sma7q62", - "bc1q2njvavlw9esncygac77d3jxjfwu877f23gxa88x33vjf3xa24lqq0xxetl", - "bc1q2nra9wwwq7pu4cg8zwycp8dzg9hcv8ywlj356p4ahjy7l80khphqvjdyfy", - "bc1q2qux9ad0egep5v5f2sup5hyszrl3nrfzyegmnmccmw7yk9chplhsy5sn4l", - "bc1q2wd3mfdcvjrxlccpl7wrzunzch7xaymtfzuvvx2tld760j3x5chqgsget8", - "bc1q33qexf56q60lxfpjhvgkj0l0lcgsapa7lsugkcwnyrceuw7kd89qsmy8h7", - "bc1q349jnpnefh952da4unfapsd3a6zmhgw8ctd2nk4ut40r37ax0d2qn0dluu", - "bc1q3d9jgd2yfx49986hjek9ulcj55umf6uyssrxqdmma7w7f7cyhc7qqyqvzr", - "bc1q3dyv677fn6feur2qjaqjdcftzgrmrwa7mjnvq7y8wxtka4ceu8tswfcvwm", - "bc1q42vvtdvdkdzj7glr6mtd52vgxddagktxusha6dxl2fes2dernqwqzff9k3", - "bc1q46uyezygewcl972rkp6z4pdtay669pxwrl8q70mgnda4cyf6yz0qj6rcsn", - "bc1q47z7kxma7lp7chnkaucee7ey9qds292kylz6rqvdlusu839ved9stns32j", - "bc1q48j4p67jmgpdpzxtu5tv3rendwvf6jjtqs2gt8ed96syxuqrsdfsl788un", - "bc1q4fpz2ntr5zlz6jga924hmaqc4a86s8luvfym3ff0qqr6gxykp60qeqqdn7", - "bc1q4gs9f4nhla3ufe6sumn8k0smcc5vxr0524nz3d5nhww70dr703lse46rmp", - "bc1q4gvftsdjy8wd6ga8c3a66rg4q6lxqvgak6edgnz7whs690vy2x8st6at64", - "bc1q4tl9hjvv3yvvsgqdajd492etlg8phrtml36ee5n0dt3mylmce23qnd5fdm", - "bc1q4zvuejph0q3z2c0narhgjtz6w47h6rst5eyyvr270lxh4tfqzluqrx4h4f", - "bc1q5a0t7av9xtay7av70fdwscsnx62rssut3mg7dclwmmsj0nxq5z3qgm8t49", - "bc1q5j8dyy5u94j0ulfg98l6jwsgjfq7dna0wwcwqvjcmwkgkwtcf30sm856qg", - "bc1q5ltp433ew9q98antza5s68h46g404eeaj6jkg4u6799q9dmkdngsmh6zny", - "bc1q5mq8f6rh85jwk0agf8huhtjp6syxcu7q4dk7alda9c2cedflj8js0u8j9f", - "bc1q5s4sa6s4vgst2pt97gvnxrmh9z8xa2j7kj370400fpx06pkk9uls7vzaaq", - "bc1q5sn9gqy6hd46yw545946f6a5crqryskhs9gge5z3gkp5d9luezmqllv7wz", - "bc1q5wj7yc27dzvnejeq9h543d6xt4cd90q8v8569tpzm6g5k3k252wq9jwuza", - "bc1q5xfafyynujpe4xm3sau92sy8rar3auf80vz3as6cjrn7pyvncfxq34hhcv", - "bc1q63yjt8zpr2kcegcmjr3vyqukm9zhlr432mcgss027lzs36qeh7qse8ct8w", - "bc1q67r0cfzcaqqm70sr00jq9fdyaplwcg24rtskylppej2qpgscjw7q5nrwf9", - "bc1q68mfyj37aurdzxwpq93vka6qkvhmcjl02l66va6vy8yktegp6nvs5knqe2", - "bc1q6e05t64zsdffvjxgw9njyxt5yhgq7xt2xxsufxk5npfcz4aewrgsyccu28", - "bc1q6hcsftu0hmm7q67cec272y8sxwhkq0pnpymshuty9x8wmymmjhdsquhzh4", - "bc1q6j7yxe948zd35xsrx3jucflxeq65unmrwusrm9a6c82lj459zmyskn5xk3", - "bc1q6kumts4ps94pyp8mfdn7yyy9p7y8n0wvgq760xpyk2r005rsh0dqdxxp22", - "bc1q6lmpnckv0zkdkv6xkvd2m2uy8mxetnz9g3qxkp3kpkvfhnsv0w7slkje25", - "bc1q6vk4rdxdnuklg5m4ltm866v6scz6lyuxdhj50qp6p4en8vtt23js9wpzgj", - "bc1q6vs72ztq8xchew26exy4kdnjxzrlxz43ny4lfckg95z5ka6ge6rs4rc5g2", - "bc1q6xr3ys66ry7jsfdfrlz82kfkwwnmdqtjh0ctm7y974kvufrwwezs6clrgr", - "bc1q6yk7s5g8u2ev7k9sw4zdazlfxj4vtduxgpekxvttzhju00c0yshs7ymvzl", - "bc1q6yzjmcudjlvq5nc0un27kfzwr283u0wdm53kqhelsja428t8jjfqpxc32j", - "bc1q76gspqpw24cqsptydstwy3egft798n2zq39gxfmfuxd5fvhh8p9s2s7c7f", - "bc1q78df3e2evtq70ntdcmcwzn0gs8a9zrlzh3p3xfrrt7p7s589pqesccuz22", - "bc1q78tqk9mn587sgnqqthsyrawmwpne7ssl4a4wlyasq4c9jqjtndwsyj22kn", - "bc1q79crmsa0k8g8k735nqqlctxqhz6eeugw2qv3x0sskdvsmsvjq7rsujhrr9", - "bc1q7d5q7e53k4w3c6n28tjrdvmlxl8skxutykk6fs9fgh79h0k9xc4sr9hzuy", - "bc1q7du4789yhw996lqwx6scre99sfzy2e53ax9502daxscsye7vvmksy8r743", - "bc1q7eaej94t49psde7mkmy6dd7vgn8f0zg45yqalpysy7u47y3z00lqg3x7fn", - "bc1q7l6c5ddseh5h54680ae0ufkx29y6rnl5yr8vhr6nfwc5smk8p0ysexsgsw", - "bc1q7pnj8k3tphfvcq7vrzlja5vqdqp7xed9rfn9hdl4ehgq09la9yhs5dpurz", - "bc1q7ps737rkza38ha5ysg3k4sjrd2xauexthkw23lxt74lpr70gum4s2jp8uk", - "bc1q7ta8kheq8ellkn6fmmkzxj47vq0uqcd53zd8n7g45hl945d6eals3d4ljj", - "bc1q7wcl3plp72cghpd6lapucmxtaa5fq4w4wmhswu6xjqhrmt9jsh7sfapsw4", - "bc1q7zdunrqm74erprv46nyryjkvl5nuymgmn2ek3x7mgck48umga5mstxdl9p", - "bc1q8fkquy9luszzu2mlsad3fsjgx433vp4qx69wswz5skhz65txv2lssgaua9", - "bc1q8mfdkttc6n804j43jmcqkftdug7yje77a55qeyhsy5ej7ca65wgscrvyd2", - "bc1q8nm7r22vw6lnmzl52lqvnlrft6hm36ye0087e984feavjmej4spq8y57z9", - "bc1q8pqeaj8c647ascnjpc582dzwfw8xstvyderzxzvc2dk09j8d4rasvctr5f", - "bc1q8uldtn4rnr23djmpvgwacs6tcazepkflhmej9t5r3afc9lldq4mqrl6zna", - "bc1q93rsljth5uxrpye4na8688r043lye0ny7uyexr4n24hf9wlgdmns9zcjn5", - "bc1q95ptqclhvj9vrsfnexfd4fs3l95dyyrt3cq3qyfpgxsmfuhspj3qq5gcqt", - "bc1q9988y3xw3mhv0tnrugu8c2vsw7e6f7ywrdaya6wcrcertw8rz54snxgnl9", - "bc1q9cs23smvx9c4q6eqcjpxgp0yrw6ar62w2x4mwe4dd88hqsfg35yq2pfk3y", - "bc1q9d6ayjfl3jagylp7x86v3dzzk65u0gt34mw74w9fxh0nyaf24slqp6sat4", - "bc1q9ehldvjkmd3s28m7922w6mun083kpjqfr9q9cal8zkqp0yaxyr4sy8v4re", - "bc1q9evu4ywa2tmhxt9x3fe6nt0e5ngxmq7kewmdvuk57j4c53ak4zjsj87pw7", - "bc1q9f5cecrwtwrfrvgxde5c04serf3txc8mdx7kgk3zhen2xp22zgcq5dngyh", - "bc1q9fftzadztvgpe90hnwec9n5al44xkuw6dc0n3mtt8w9wxyeg3rlqwfn527", - "bc1q9r4slky3fsjnen39u3fh6d22pwvk3pduj3htwyd5as3hywe2d49q6zyk05", - "bc1q9rrkgd0x5rv57ftysp3t4e35zhma2ejcjj0per8cg89um0mn0acs5hqh5k", - "bc1q9xne956dj0szmxur2up3xg4jl0ktjxpkggr7r5kw5tth48n4pemskcd9mc", - "bc1qa0mxdj0yehl3m99c8tsgepmngz0a0yf96v9al3ejyvla97hysjdsgzj59x", - "bc1qafrg9lt04d9wvurrgvr7l8p4cn5f07zh86d8rljeh6fzqegxe44sj82x4a", - "bc1qah2zmzd4atalqpds7ke86h7lvv49xqa43cyk28y2lwsus7sujd2sndplut", - "bc1qaj7w4a7kxvkjdgz76mc2uy66825ngjhqtasqd6tgssrajc68dk0qqkd3hc", - "bc1qak00ktehfya8j5vg5xcq7dfa2rae7zfnvjgs9jm0fsxa7a420rjs4zcp6t", - "bc1qanjru8xgu07kq6w0meyvydsfuvrlt75f4uekrhkuucp73w4gq0kql9dh26", - "bc1qatg2m52vj24zxvu92azvphxs08xp59prr86fcgdg42sp85v3qhsqsw88rc", - "bc1qau35ge0tgqlqvhn3pyv99ckukaxh9kes6e3jfpc4vw2ssfh3fpeq4dec6j", - "bc1qaygehcvv8334c6x9e42shrjz88kpnhw0gycz5fque4w4rjck6pnq7msl6g", - "bc1qaz28gc8e58uj5e80nu9j0yjws4zy84ahqlnfqd9ryhvc7a80vlyq430rvv", - "bc1qc058aal4cj2kk8e3tvhwu95cndy0lzr2zrxe49f3yasp693nyh7slfcgpl", - "bc1qc3h2hv8wnld70ujx8dyrmxs0ly27xs7us09y6e226yfl5vrgc2qsrxuucz", - "bc1qc9wlxjgu53ua5efqyjfwhwr3cn89smxq230h574v56edwmw0f0vq8qaakl", - "bc1qca7rh32jt8kg4kqtkcu98uucjlsslzsreh7tchk6hddvwe8kzzjshpppat", - "bc1qcf7wyjzz6f32je5vyk6pvketf5ykyg2lys66vwm43mc0g0gchzasy0k2e8", - "bc1qcmslz2gwsenf0xn9g90gvwkzympzxxhwhp8vrckudj0w5pdndwss92v3h4", - "bc1qcnp9057urvh2rrm09eya8mrasea7yys9q3q8hxs7unyct7nydtcsz57ajd", - "bc1qcnx924c7w3e8r42q3rvup60lw64gyn2kd4fs3pwckw7zw9966aaq568nz4", - "bc1qcudwp0xdlldgw78t6zfcklehwqt44a0hqt6n92k6uplk2w6q33fst0kdnv", - "bc1qcxzdm5pcfqnam3umsxsnwfykfx8j9rsl4nhrfqnt55qeg9q3625qvvyyuz", - "bc1qd3lvm6evz5suedhlwyrtf9cjrqtaq9unwe6423yl3j3exmq97a4s0mpzwt", - "bc1qdjxc3z0m2q5mz7lr67pmuq8hgqmhds6nmae0fkk2s07zge2f9jsseutev2", - "bc1qdm5rxs4w29c5u8wg7ppeqssgjrql23c0gsps7m0ctr6ratcl2a3sjnnq9g", - "bc1qdn29e8sa4xmwf0c4r6xkekea2mwt73d2qjsdtsne5j6gd9ujwysqmfh59v", - "bc1qdqs2zn6hrhvpxrtp0t82xfk2jv2j445hu7gguzm0ktwzdq5zzflqth7638", - "bc1qdvpvz88pq46qnvcz6jz08nmfldwhf8nx2v6x4z4tc79mpy8smkvqc9t9q8", - "bc1qe6xyfazpkry4nje0wmhfnv6faxfuu2drx4uryejdl2mhrplgeujs3knff6", - "bc1qe9q66vu5yyuzedfzugdh3yj5ask3n4wpx8pghw7ff6x7dd5p0gqqf66rxd", - "bc1qecswgzwg3sldnh4cwdfgly7f05sp2sela8g7hg0y0vp8l7t9nueqarz5w9", - "bc1qemj5cexuhn0ld93drv40kqfhvl2dag5vgy3d9vv4dar0hl6he3xs4fpjma", - "bc1qemtc7ddu4fvngf7pg8c5sukqswt3fr2zcnqnt7pju6a5fyrz7e5q96x25r", - "bc1qesf0u9lu5petyuukl9zq0g86wf2k69yehys2n4te7pf2y2csqpgst0tqhu", - "bc1qf285u7ygu9f2umg33a4c9wtdkfpahpt5kvqazk6arzktsw6vwguq02eckh", - "bc1qf2dh6acfagsayfprjzwzzysn4d4rdudkd6dq2adu2wj0t6ty8vlqnse73k", - "bc1qf3ret54m7mdevr8xwv8msstpcx6978vgwzfxkw3zjmlydfk4lqxqekert0", - "bc1qf42d25evlz8m503fgdw3trkzq9y53s5kwayfwjpvas26q2cnlt4skltleh", - "bc1qfdpu4yp2zk7xmm6tpfcatxe4gax5ktd0g9ra59jzcqtqkldrqe4qn0qqc2", - "bc1qfjrw5r0wttwu0u0gewyfcs2v37mujcxlhrfp7pqt48zwtjt2fs2shqjw2d", - "bc1qfrn20wgnt6l0a3qq4fxca8c66cuyqmvrfwkwwqhkxnf6z5xuxnpqzdzymf", - "bc1qg47q9u0ctw40jf0p8wswc67tcr96wel065f735cdu3e9aypqpumsvt4lun", - "bc1qg7egerrjv5ka0axjcwzh2rnkldr2k5yace828glhjyc6yz6s46sq6jk8xw", - "bc1qggrjslsem6ep9x4yxvyfdtgcxvyf9z85srlxpsuucrq6xsvaz3jspha83z", - "bc1qgp74f6xyajxznu2hnjh9txmzy7k7et3pkh9rc6enxt68fh8lw5js78s4d8", - "bc1qgpf2ar68l58zau2alfdnuw6afhm99k0nlfsrvcacd3jzpjlhq96qhxaxtr", - "bc1qgtldvmct0wa0569crgedr3ccrlydxfrymk7rfmalt7ehjqx54axsfv00gg", - "bc1qgtlgfqdyw60cawws4lvnesva46lgmyx2hhfl9xcnqp5m45u3dq3ska8nl2", - "bc1qgu5wpteehuuq8dcdd30d7la405j9r8wa2ttzqawt73lt8aec6kjs6u33r4", - "bc1qgzq2gq0l5nuxlaj45eyp4v3w6scaa9hx6f4chg60sufwmqwe4c7sp9tcng", - "bc1qh08szja77tucpmmwqmvyk72z0kjkqwuk2r327w7vwwh0f7997u6q3du9ga", - "bc1qh0yftewpsf8s3pyln8s6ky6qd6c7n643gndfhmkp7uczayua2mys9u6gw7", - "bc1qh3kulsckdz7d5ar3taglhqz4sa3wuasanyypuxyjscwzh0mm3g8qe9danw", - "bc1qh4qr0ytwjz7axxyrnl95la36jdqlygqpnul7wxx6a0mwzfmg9tkqkgszc7", - "bc1qhdaulu7pyhdhz4ty35v62gkx56nj2l7e6rz3x799sztdklan8n8sx863nu", - "bc1qhh2t6x7z57svrxdtl83xzdfz8melaueg7jmtpmsma40g2cfdxkes3lkd95", - "bc1qhjjcklsnjs0aseena8mmvlu7kufmeuhrlfz9l7dewpqsn43s707qkd7dny", - "bc1qhjxpm66t2k6v7c5zk6u2sdh8t36kas4a5402sqw82ewdpzuutf2s38ra4l", - "bc1qhl29w3rzcp9q3623hzvvnuksst0g48347qm82tr8ng3dfm9r0yvshlmvh2", - "bc1qhn7h9l2ky9l95sq7rqgaxp6c8ka0r5vfrghaln2pmeu67x4zpzzq3zcccf", - "bc1qhr5qw998er3rerm0lawlzzuuux6kja9zm4ryjls0aq5anprwuugs0yfcdg", - "bc1qhrgwkqetel4vpvj2azyyyhdvpg9u8j2dqz0svuwzh3vx4pvjf2dqtkt4uk", - "bc1qhrsvduw6j20dh4mseyf38zxqzd642zd6vmfjg9lmjj4d25qlvj5sv36ajm", - "bc1qhszm6vgtkhdn9cex8xurjkxjs2jhte0teetdnu4clr0ecxm20u5qhghyh9", - "bc1qj233g3tm9jejsnxvz3a06zqaqwwj2356f2n2sv572ggpahmmmxfqflfcx4", - "bc1qj390dgucrvx68jfad2wdpfhfuynvztgy9sy9a7009wmpecsdlu8q8zh0k4", - "bc1qj5dr2574mxgrxqxahymlvwna345d6d8424tyuqy3v2zhgu55j7fs2ezzq5", - "bc1qj9sat2haxfa7lsga96cxu26w9k4nr7z6sx4m33uzfq2x53sagcpqfzzjdz", - "bc1qjfmxg8fxqx286r254f3frzgra4sp4n5p2zczfsnrpkhdnyjyrhfqwul5wh", - "bc1qjnf3kfl592u85jlkvv99ms2qghv7yycrvg9902dtlh4lnfywg6wq5stn90", - "bc1qjnt2w6jx3ttx8dw0gt3nflm3ld0n2akkrkjzp73ua3kxzyhsj4jst848l6", - "bc1qjr7emlhxssap2npu5szrs5fa3cgxcnrd9gh9e3mdxzhdpye4puas7dp5pk", - "bc1qjsqyvnms83kvlnhc7r8phce0wj7j7nnvh8ye8ejxynke0uujwvksn2lely", - "bc1qjwjq6t60fwfsr7hf80yrhyy9lrvfjl2l9lpdwsw6sds4ph9uuglqjj53xx", - "bc1qk6ctvhc78eg80v989xmt7u5mwefewt728d9s0jxpgvqxa2m87xxsnu0wzw", - "bc1qk6n59st3mvj6ns0juv3vsdng48aszwdt7gyp0xlt8mrfn5qc9crsdx8dv8", - "bc1qkayh60m2uc86cere4z2gz03g2ayg2k726klqf0vx7lq588xzz0nqjvrg0q", - "bc1qkeh8sh6hzc49097j6fs8lgkfxpyas7wntelwnfqk4xhzccaj0nfq73s3f0", - "bc1qkjr6ew6d5nqf2vpxd7vm4w5lps72c8sxnc7hxnwcs9psqvpcmqkset3kdn", - "bc1qkka8ku2z79wq7wtkr44qmp6x3gftc9suju2q3ncw0xdy2nwj37jqu7hec8", - "bc1qkkhxgzvlvhymm2eprt0eukr3gw23zmarcuw087td9l34tmuprrysh643xt", - "bc1qkqap38eq4y8auh6z8yjwrj8r2p77n6xshcp8xpy2kkjcu7lhfyfqntsrjh", - "bc1qkrh06leyzgp84z0v495c0gr68tqn9ewue3lendpcrdz8htz0yw6q9aqyz3", - "bc1qktk40875p4gcafun6m2yzfxsrdt6d5h55c2zhd45wfefkusux27s38c764", - "bc1qku8s2753ttheldjrz5v4xmampnetjp3vy30m7j0nd3348e2m9rpq26l3ef", - "bc1qkvtt6kaw688mzu7txj9q3mn9m60pskv62gdz5j5kugd5fc7f8dfsdsfsq6", - "bc1qlftdm0w434ud5nz5ktnmak4gmr7k4x5qajmr5pvuh4vz9m4e8ljsujemsu", - "bc1qlk5g7mtuyxdy3txqz7q24yjffcdk6g6mr4ks48afv5234hly3hvslw8aje", - "bc1qllpem4drxvxu45r7aj7aqma50cylmaup07eynehs6v3f8zppcw2s00v3rt", - "bc1qln0rhtex8dwmqgex2mzkm47c437tunl6kw9amq7s4dye57fjk44s8x264n", - "bc1qlss2xnh3hsa78pedunw9qsm9nzpczrq90dtcp0sqknt3xkf5wyzsjtc662", - "bc1qlv8j6wgysv9xdpqtfau2lq5rcju0v4eyazrlawpgu8pwd2usz0dsfqc9up", - "bc1qlv8t6axsf50pe5wnt4x4xhqfudkumdvx3rc38f9kj3q82qhqy6lq626v47", - "bc1qm6hw09d24eqlz0x5r5txlpsrqvpf250fd5py3s4uwax6gwtdjfrq03yh9z", - "bc1qm72da6c6sq6a34rkwxk9sfpmy9kqea4dv33280hm5ghfdm4myvaqxnhcrw", - "bc1qm8z7nqmtmrurzcz82yec3sgk5rz67tm5rcaklqxajyxd348vppes86jvuz", - "bc1qmcvwrhj556capug3q5xzhwyhq82cps4l6ng0w573v6rl8zgkrlmqwh9386", - "bc1qmfzk56r5xvgfztej8fkg7rw76wy5qylh79shsaewpltfq4pz2qss5ajj7r", - "bc1qmhjm7sca3qwyujgfqtg3vw7swzxyg7mkxe4e7uzdef5ftc2kejwqjp7q7p", - "bc1qmj4g65rdqztaea7aqwnht5v2fhajmjat8j0q75nencrq2gu8q3ds5e0k5l", - "bc1qmr28gws3f589wmxf870mee4mapyzrv2209h3c992hhv3nn7ppctqhejqve", - "bc1qmschx4zu5yd9y82jqs6rwse3lftuzu97j9x76wdtx2avtee0g56qppefym", - "bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa", - "bc1qn55zpxs6fzjju36zuvkndzjfz0glhejtv299krn96sahl2pupthqhjc49k", - "bc1qneexyhzwx2g7ugw7m93kf48d6mdpt76gghmnr07s7dq7nhlwvc0shnryqd", - "bc1qnnx8uu6tuw5qlnqava2vjzrlsrwlaws7h6med4ndhtghrw8r5vcske26rv", - "bc1qntgp8cuk9sp2xadzc72h20qt372nvkjk5pmknvu9zntnf0yly5dqy7ev8j", - "bc1qnwa48yav84vzadrk79ulzrzu8s5epl7sfqelxufnpls63j7szx6s4n20hg", - "bc1qnwh5kqa6u5k2zevq0dfwn8z8mux4sz6t23g4xqeaf2lrd6zda75ssrs0gx", - "bc1qnx38lf4ds0lrw3s0l9fc745l0x3xdzw3w8stmxdvwu3v0n8jrcqsxm34ls", - "bc1qp798q5d3n8wsj3x345c7v65u9fwfe43e9vyupllmrrjq5k5n39rseze5vk", - "bc1qpa3ggjgfsr4cule3c42ns4y97k9z38whpx5940uw4mn6taeaaqjs97t28r", - "bc1qpcywcjgfel39zc762pmwayj9wu3v5xly0kjtdx2n2w0pandsce9q5rr54q", - "bc1qpr7fnnc9gan8vd9waym2rc2td24s72732wltnu9rc0yxhdssqaasr3up6s", - "bc1qpsftpydc86wxgga26r6nfq5tvrh5m34055kdrp25lulqu70shunskxflr3", - "bc1qptacp904tazvu54qxty5qunnwqhcm84ydrt39r9c4cqzkqrtju6qfd7eyt", - "bc1qpvwcac0hah03lepsvrx8zu9gdyvprfnckga4cfjg3ctaflwc4xvqp6hw3h", - "bc1qpwhmpvrau7f82hlh6es4wzedcq2rx5aqx5ue4ajsl4r7h29udx7q2ztulw", - "bc1qq5d4g9gcrwmwm8w965cwtkdgu60sl7fteahhtelzhna7rm29q0uswgca9t", - "bc1qq6jmww5tpr6t4cgl577d28cjr6mpxz85d6tkh7kjn2njkyd7flrqyt25yw", - "bc1qq77frdehk027ur54wzhhpg8dtqwpdn3emaxv42kxxlzmttrznzqs7mye34", - "bc1qq7m25904sfa4qn0na5gfssltjdmxwuvqxfl73dunza4s4cysqh7ssale4g", - "bc1qqea6940qjuhnuqqcu6u5ajeh3as8drwwwey56vxp90d05gzx72psw4ngua", - "bc1qqf4k7r66y3g3fpjlq6g46g5av5qgqvjpdhu6lhg68fwzm4rc4v0quux3vy", - "bc1qqfkncsw0gzr3vdyearnvt9w3ckuymet0v495dk5hwpfyjfeej42s28g3uz", - "bc1qqmsz5fe3dqcg7wxt3wc9s69td0yxnhlj97pvxknv8s25yuylawwsc99267", - "bc1qqsse9hgmx3w56c5suhkp2gqyxqhh6acc6wf0gnd7fjtp97f7c8esmhtj4x", - "bc1qqtmu9k5pakw4q4p242322x5tjy6tqtjj3u596nvksxjdhw789gfsmuskwz", - "bc1qqtyxkv77ce6s7hqw2ljg6axaxf4463q2krwne5vlxhhk3x7laasq3vqe5x", - "bc1qqx37qn2ca3gpjtuj5dkh8l6u4dh9sujn66f5gwe5maw7cvw47rmsej5kwl", - "bc1qqzq92mhj6a0v8kflqx6t0p3g47pdrqpv8f8gu7uk2a30kxxnplns4ez65a", - "bc1qr9kjw52l7m3nxhprgkt99nhrqtem5erzay6jy3j7xzyge65z3v2qse5xdw", - "bc1qra0g63370unwjrjpx4f267xss94zgxp78wqyc8gavqstnplakmfq0yq9f9", - "bc1qrg5y53hvpnu78pvy70v4s0qe52rnx3298gdvc7t9lsu2lya7deuql4a28j", - "bc1qrje4nstr7yy2qvmrfazlnjcsd3573fh6j9u58t446mn3ltp8e5vqgz8535", - "bc1qrjgp0ksa0wmhdfslzta0cem3s030jg3cxf7xfqtjcjy3jstj8wnsenhgs3", - "bc1qrmhgzejkazuezzduws22wuk6atlsxruytyh9ynx2855qpfezy5vskdznmv", - "bc1qrpcnmqxe8q4mq3n04qdy657wu23qxu8x5pvc0yx9adwz0x093gtsh5r2cv", - "bc1qrtyl2hpxu4lpl8x7fz6rlwvd43v6a9ynvqjf2mr7gegvnmdc0lxqas83mx", - "bc1qruqm8ef6lukm3kew536vxpys0nsrkdqqq7gn5eyjz6fsdee55frq9ksm66", - "bc1qrz3dctwmkkksya4n0cfhfdej480vx9shkt9vfe63qg0crmr3x68swt9jn8", - "bc1qs3w6eh4wqxphz769jlkglhdrmfaz4pj668aag2qrhcmrj74a02psr7mx0l", - "bc1qs6edu8cf7dtn2fq4earyhagryd3zsqvkdlaj285xptzjrq4szzkqz3fxze", - "bc1qsh9f8ackh9etwqjy6hd3vcqnc8wy9wnynsfypyv0p8nxesytkqeqtp7edq", - "bc1qsl92pxqza6xmw26xp6783slr46eh7wfdeyxnpyg0ammfcrc370esjrcfma", - "bc1qsmwlvh7v6wkg9kxtgh65q9lat00xx68g7nqycn8jdr5dudvqe8ksd4mxg7", - "bc1qsu0lfh6ae4pklru5cs6qscf9z88m4ckljlcxyqp5qfcvv5ygg40suzkygv", - "bc1qsvgk35j2tgq3anjydqlccunngrqur9pk3hdlfpgmd3kq69njaqmqdde6r0", - "bc1qswcfs3404reuplxzvmnxv23r82jzttw7ugm4gzwdwddpqa985mzs4ex3wv", - "bc1qsy0tanmqylsxjzpfecms96du4vp4tursfh9fyp4w0ff5aky7qe9sclj6f4", - "bc1qt5fugtlsp402yta0xvl79rlxc5epx9nd926f9dvct5r3uzuay5gqwyq55w", - "bc1qt5hqtxfktkuusrpcyus2zrc4x28hg23l35pushfmj0dsvmfrv2lq5vu9au", - "bc1qt8wuxew7ly35fvu2xaytmjvr6dlux5d05p9qahzw6h3axkc5p2ksla52xp", - "bc1qtahzsvs0hrt22dmdt3268hpdh9eh3rlxprac584x8l9s2df6jefq5nse9k", - "bc1qtcx3lve9uscxevqv0ekj2e75kjy6mqn0aedxq6xrtxv9td0jm7dsj7vtuu", - "bc1qthgusw4jxlw2e9h69r8hpv22df47dups2gmkzlgp7l8ww27eew6q7ewjvv", - "bc1qtjq2ypqq3kamya3dsfphy7mdqwp5nc4adaxan6mqdze59d7ptu3qc9ryth", - "bc1qtllzgt5hsxvnhga8tq3nars4d94c263q8dm8vakrq6r42648vhtqtyy36q", - "bc1qtr7kzsz669mfn8677ltxlm8c3t9nkzskj2v3lexx0kxhamzg7zxspkd8w9", - "bc1qttkf88qadw9mlvnfftw37gllk8q7m3jmfxrugath75rl3ydpt9zqlfjzzl", - "bc1qtuvqgvkjnq0gw4cc6p60yc3y6j7jzz937cs0wy6w09h5dyg36d0q8xsjlh", - "bc1qty4wtp9zhvtjuj7p36vf4avs98l4vata8634m3z4ys99t5qlhjwscslcg5", - "bc1qtyaqju2ar9x2v6c4jf42j9x9qzjcwev9u8uys524qnhznths37zq27ppfm", - "bc1qtym0jxefs7z9vr5y50gdsmtdfgcfyr9rxema6n23jw4cswulcu6qsj8t92", - "bc1qtzn5ktk3hhhgaweupzt9k6k9m00jws3xn5teplwupfy2ltl0xcjsl4g02l", - "bc1qu5pttfk0s407dtr7ds2e547ugq80ay4n82qpvwqzsvlccdjcp84qxpef24", - "bc1qu6jn53gw9t3j62lee0ht0p3dhtkycg24gj5kcp230jq6fn4jcsnsxjxn6h", - "bc1quezt5y4lqf37guytyf8jj56eywjvsanv7u8fq6q8p46hg02tc5vsyx3let", - "bc1qup8qwemtepa2wf4r8w599lphxq6f38s3ta8925eu7y8zvp4x6v2svqrfq2", - "bc1qv85ky08r24v3cnysh8hk9c5ftg60f2kwellmzpzlqnwfawgtdqesghlznz", - "bc1qvax0qf0zgycnwyd2cmgzsr65l6mldc7r3wm4876xg4u7rtywp2dsw034tt", - "bc1qvcwzkv448c9rz60fas5wqgnrl5gzvh0nnacyudqcsxhr0j9fa24s48m79n", - "bc1qvkn8eymy7c2rpw2c5x6x8td4hrul6vx79y4mtd4zzdxdrxwk9q2sv6rnn8", - "bc1qvu6u5tnjk22sggwkp2j3vlxle5mq9xz8v82g7j57k9ele02wjmkqz9vrvt", - "bc1qw0lsnwv0sga0n3rcpaxtjg4z6jhf0xu6dyhdv7jcx9d8gm4phtesr9vywe", - "bc1qw5ue35s2rms9wz2ajxu4h83uzaylax7jqwp3h3cxamj9j05dgw9q6nnr24", - "bc1qwu39fckqy2cl9z42994xyhg657q7txajwakf9sdzt4f3caluk3fqz3zl94", - "bc1qwx5sl8mls6hkmumjnekf6szuzh979cmgzsz8dqm3xeayrxfgz4us8m8y4z", - "bc1qwzy2ezy8zskmuu2v6y60w5uqe46qeql94may8fetnl9uyahlx0lsthg04q", - "bc1qx628pacq3m5px4zjjagrtpc8a6v3my5l06rxcrl5xr3vfv4s00cqcxmlhy", - "bc1qx6ws8f6p3zzevs0rf5kvu7e074snfmr8mms8ezgreg7kas84l7ssptyejn", - "bc1qx9yj7x4xmek7rm5styss3vcdth48p6uqzjdfsua9s7v430jq2r8q0j4kge", - "bc1qxaj93j90njr4lwrevjhg3zr2qyr0zerw0d8fxlxhep6c8uu4jqdqhlqptt", - "bc1qxpa34lagwsvq5t8ul09y2hz2dh0flkampx8lqyp3jdt4lpwaxx2qe2uvxj", - "bc1qxs6nw2cjmctjeqjk5lhr47uv6anmge3ut66gmuexcryrymusqt9s2tvz62", - "bc1qxuv7ge2hcfhzykp49g2pxz69p99d0aujx5wupud28tulftlc0agslcmuuf", - "bc1qxyx06rxxprx9plp009nvl0f0ft5e3af3tt53n7pctylafqfltwvqyk7sfg", - "bc1qy2av32x3tkfucu25dqfh4nqkf50ayng43ervl7fcwg4crcu3queqtlcrsa", - "bc1qy7efv6fkened6hnhzydmcd9eatj20dsnc4px2gtmkedc0xznlcxq6n04jv", - "bc1qy8hl8khkpcsnjqvgna6h8249x4at9vjern9meph0e5el4g0nudlq7kd773", - "bc1qy9f5q32h9rmem40nd06e4l8cxwqlttuale9s6q076aymt0dayx6qekhfmp", - "bc1qy9w004s6gek29k3npgmxq8huqx48l2gatx9yqlu0rchxzlnn7nlsn059c2", - "bc1qyr5df2mhp3lfjrd2sjx56eqm7netrtdtwengw657k7k6hnmyedlqwfx472", - "bc1qys46dh5q94lykgqrvthhh52ajsk7s4c5ex7p9t7tvqe3uxheq2us3rwra2", - "bc1qywh2j5t52zhqhvlqymsw78mq9lfrh4utf47ufhfpkgfzj3trqaaswuak4h", - "bc1qz2fe23n5ykggw9394gxly6jqxk23rmhxesvd7q9d3sfee6cqmycqha09qg", - "bc1qzchnul757l7q2yrhtv2gga3h560vfjdj002xcstcd5cvspa3puks4h7gu5", - "bc1qzdah777dzr46n8wwdmr2y8etxzt0e66j90v4f9m2dj2wzjk3mtgqhamaj5", - "bc1qze2smuhn3k3yxq49fzsmz4pfjemnhpsjt5g3xc8slyh42edy23zsxjsr73", - "bc1qzk3kkegykpk0uzyekqfyr4l4ky62hx7tt9cx4r5klv98x3f37z0sr26gaf", - "bc1qzlhsk5ftpz6uaxgmm8hel59v7avmn0q8wp9gaaxdzzkde7ryumeqdnte02", - "bc1qzm3t8m5fcnz8t22kf2lyr97u2wret0pkjvzngldnqq5su434tsrqxjncvj", -]; - -async function tvl(api){ - if(api.timestamp > Date.now()/1e3 - 3600){ - return sumTokensExport({ owners })(api) - } else { - return { - [ADDRESSES.ethereum.WBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.WBTC, block:api.block })).output - } - } -} - -module.exports = { - bitcoin: { - tvl, - }, - methodology: `TVL for WBTC consists of the BTC deposits in custody that were used to mint WBTC`, -}; From 2a8046693dd8458a2d6df8e94213f9d342f44583 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 15 Aug 2024 23:39:03 +0100 Subject: [PATCH 0039/1768] support more btc addresses --- projects/helper/chain/bitcoin.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/projects/helper/chain/bitcoin.js b/projects/helper/chain/bitcoin.js index dbd183809b..d024efff4c 100644 --- a/projects/helper/chain/bitcoin.js +++ b/projects/helper/chain/bitcoin.js @@ -18,9 +18,12 @@ const limiter = new RateLimiter({ tokensPerInterval: 1, interval: 10_000 }); async function _sumTokensBlockchain({ balances = {}, owners = [], }) { console.time('bitcoin' + owners.length + '___' + owners[0]) - const { addresses } = await get(url3(owners)) - for (const addr of addresses) - sdk.util.sumSingleBalance(balances, 'bitcoin', addr.final_balance / 1e8) + const STEP = 200 + for(let i=0; i Date: Fri, 16 Aug 2024 12:01:41 +0800 Subject: [PATCH 0040/1768] add zklink to sumer --- projects/sumer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index aaf4cf6016..797a3d92bd 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -5,4 +5,5 @@ module.exports = { base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), arbitrum: compoundExports2({ comptroller: '0xBfb69860C91A22A2287df1Ff3Cdf0476c5aab24A' }), ethereum: compoundExports2({ comptroller: '0x60A4570bE892fb41280eDFE9DB75e1a62C70456F' }), + zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }) } \ No newline at end of file From d72836f2908a0988e7a48cafdf80b0ab7e322507 Mon Sep 17 00:00:00 2001 From: yanfeizuo <69463394+yanfeizuo@users.noreply.github.com> Date: Fri, 16 Aug 2024 12:46:10 +0800 Subject: [PATCH 0041/1768] Config zklink to Meter sumer (#11326) * update for sumer * Revert "update for sumer" This reverts commit c2d61474251f429ce5d50dc600deb5822bff4379. * add base to project sumer * add arbitrum to project sumer * config ethereum for sumer * add zklink to sumer --- projects/sumer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index aaf4cf6016..797a3d92bd 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -5,4 +5,5 @@ module.exports = { base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), arbitrum: compoundExports2({ comptroller: '0xBfb69860C91A22A2287df1Ff3Cdf0476c5aab24A' }), ethereum: compoundExports2({ comptroller: '0x60A4570bE892fb41280eDFE9DB75e1a62C70456F' }), + zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }) } \ No newline at end of file From 38668e6ef1d6cc2e6dc7370fcf83d239af89eeea Mon Sep 17 00:00:00 2001 From: Topleft <87454455+topleft1562@users.noreply.github.com> Date: Thu, 15 Aug 2024 23:49:14 -0500 Subject: [PATCH 0042/1768] add crono zk (#11321) From b06cc17d32d9ecb58a7f2b96c149ee71b9e26eda Mon Sep 17 00:00:00 2001 From: Keref Date: Fri, 16 Aug 2024 15:16:01 +0800 Subject: [PATCH 0043/1768] Ethereum + arbitrum deployments (#11325) * feat: monroeprotocol * feat: Monroe prod * MonroeProtocol: new chains deployments * feat: Monroe v2 * feat: arbitrum+eth deployments --- projects/monroeprotocol/index.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/projects/monroeprotocol/index.js b/projects/monroeprotocol/index.js index 6d2e2fc9d2..1e80fd1868 100644 --- a/projects/monroeprotocol/index.js +++ b/projects/monroeprotocol/index.js @@ -16,8 +16,14 @@ const V1_SPECIAL_ADDRESSES = { monusd: "0x051baaA86328Fc7F522431932B8010F66f260A6a" } } -// V2 -const roeUSD = "0xF88DF111343BffE7a2d89FB770d77A264d53f043" +const DETERMINISTIC_roeUSD = "0x87196DB491ee1C77B91853CB79C118A322d6A9c0" +// V2 addresses +const V2_ADDRESSES = { + manta: "0xF88DF111343BffE7a2d89FB770d77A264d53f043", + avax: "0xF88DF111343BffE7a2d89FB770d77A264d53f043", + arbitrum: DETERMINISTIC_roeUSD, + ethereum: DETERMINISTIC_roeUSD +} async function tvl(api) { const owners = [] @@ -37,9 +43,10 @@ async function tvl(api) { // V2 if (V2_CHAINS.indexOf(api.chain) > -1) { - const vaultLengthV2 = await api.call({ abi: "uint:getVaultsLength", target: roeUSD }) + const vaultLengthV2 = await api.call({ abi: "uint:getVaultsLength", target: V2_ADDRESSES[api.chain] }) const vaultCallsV2 = createIncrementArray(vaultLengthV2) - const vaultsV2 = await api.multiCall({ abi: "function vaults(uint vaultId) view returns (address)", calls: vaultCallsV2, target: roeUSD}) + const vaultsV2 = await api.multiCall({ abi: "function vaults(uint vaultId) view returns (address)", calls: vaultCallsV2, target: V2_ADDRESSES[api.chain]}) + const _tokensV2 = await api.multiCall({ abi: 'address:collateralAsset', calls: vaultsV2}) tokens.push(..._tokensV2) owners.push(...vaultsV2) From 136a9a03774663506877b0fb895783f9c12bfc01 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:29:08 +0200 Subject: [PATCH 0044/1768] Add ZK pool on Clave and refactor code (#11327) * Add ZK pool on Clave * code refactor --------- Co-authored-by: asgarovf --- projects/clave/index.js | 12 ++++++++++++ projects/helper/coreAssets.json | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 projects/clave/index.js diff --git a/projects/clave/index.js b/projects/clave/index.js new file mode 100644 index 0000000000..3ce9e9ba2d --- /dev/null +++ b/projects/clave/index.js @@ -0,0 +1,12 @@ +const ZtakeV1Address = "0x9248F1Ee8cBD029F3D22A92EB270333a39846fB2" + +async function tvl(api) { + const ZK = await api.call({ abi: 'address:ZK', target: ZtakeV1Address}) + return api.sumTokens({ owner: ZtakeV1Address, tokens: [ZK] }) +} + +module.exports = { + era: { + tvl, + } +} diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index d11ebf23c1..6613d8f44d 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1358,7 +1358,8 @@ "WBTC": "0xBBeB516fb02a01611cBBE0453Fe3c580D7281011", "USDT": "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C", "BUSD": "0x2039bb4116B4EFc145Ec4f0e2eA75012D6C0f181", - "DAI": "0x4B9eb6c0b6ea15176BBF62841C6B2A8a398cb656" + "DAI": "0x4B9eb6c0b6ea15176BBF62841C6B2A8a398cb656", + "ZK": "0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E" }, "polygon_zkevm": { "WETH": "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9", From 7c84523f4119b074f1188224af39bc5fa60346cb Mon Sep 17 00:00:00 2001 From: Joshua Sum <58564538+JoshuaSum@users.noreply.github.com> Date: Fri, 16 Aug 2024 04:39:52 -0400 Subject: [PATCH 0045/1768] update: Adding hubSOL and hSOL to Solayer (#11323) * add solayer adapter * refactor: Update solayer index.js for TVL calculation and methodology * update: add in hubSOL and hSOL for TVL calculations --------- Co-authored-by: somer Co-authored-by: Jason --- projects/solayer/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/solayer/index.js b/projects/solayer/index.js index 9657dd6952..93a68c5879 100644 --- a/projects/solayer/index.js +++ b/projects/solayer/index.js @@ -10,7 +10,9 @@ async function tvl() { ['J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn', 'GgTE2exWZ36Q82FoVgEEzEHYCfsbGjm3P6zRfx3hLUv4'], ['mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', 'E9LmYVKU5oyjWs9Zmzv9ji8NkzhJxJQbUEH3FWDKZt8D'], ['bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1', '2DRZbbse5b5souvMQkifpS8CRBsDeLt6a9xDqqVJvmdw'], - ['5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm', 'GF8jvNGY44tnCfhnzdoSUBpgfog9YnLc6BRBCnt8j9do'] + ['5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm', 'GF8jvNGY44tnCfhnzdoSUBpgfog9YnLc6BRBCnt8j9do'], + ['HUBsveNpjo5pWqNkH57QzxjQASdTVXcSK7bVKTSZtcSX', '49EXLuCxc2ArgFfpJBeuci6DgULxMzrETAHpAGvsFBf1'], + ['Gwa3a4VJbAyorLhn6TEeWLbQ4tWyup4E6oL3WjAga7tx', '2DriEN733SMxEzqDBVSGwev7KwcdHPXVy65sw9u5mR14'] ], }) ]); From ef65a78104af5ef1eb1b9ebb2e3b99a4c4ce439c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 16 Aug 2024 10:44:06 +0200 Subject: [PATCH 0046/1768] track more sol staking projects --- projects/bonk-sol/index.js | 12 ++++++++++++ projects/helius-sol/index.js | 12 ++++++++++++ projects/jupSOL/index.js | 12 ++++++++++++ projects/shinobi-sol/index.js | 12 ++++++++++++ projects/solayer/index.js | 36 ++++++++++++++--------------------- projects/vsol/index.js | 12 ++++++++++++ 6 files changed, 74 insertions(+), 22 deletions(-) create mode 100644 projects/bonk-sol/index.js create mode 100644 projects/helius-sol/index.js create mode 100644 projects/jupSOL/index.js create mode 100644 projects/shinobi-sol/index.js create mode 100644 projects/vsol/index.js diff --git a/projects/bonk-sol/index.js b/projects/bonk-sol/index.js new file mode 100644 index 0000000000..913d9a817c --- /dev/null +++ b/projects/bonk-sol/index.js @@ -0,0 +1,12 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('ArAQfbzsdotoKB5jJcZa3ajQrrPcWr2YQoDAEAiFxJAC', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file diff --git a/projects/helius-sol/index.js b/projects/helius-sol/index.js new file mode 100644 index 0000000000..97dc4ee5b9 --- /dev/null +++ b/projects/helius-sol/index.js @@ -0,0 +1,12 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('3wK2g8ZdzAH8FJ7PKr2RcvGh7V9VYson5hrVsJM5Lmws', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file diff --git a/projects/jupSOL/index.js b/projects/jupSOL/index.js new file mode 100644 index 0000000000..ad18701309 --- /dev/null +++ b/projects/jupSOL/index.js @@ -0,0 +1,12 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('8VpRhuxa7sUUepdY3kQiTmX9rS5vx4WgaXiAnXq4KCtr', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file diff --git a/projects/shinobi-sol/index.js b/projects/shinobi-sol/index.js new file mode 100644 index 0000000000..763e467561 --- /dev/null +++ b/projects/shinobi-sol/index.js @@ -0,0 +1,12 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('spp1mo6shdcrRyqDK2zdurJ8H5uttZE6H6oVjHxN1QN', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file diff --git a/projects/solayer/index.js b/projects/solayer/index.js index 93a68c5879..6e4b7d6a45 100644 --- a/projects/solayer/index.js +++ b/projects/solayer/index.js @@ -1,26 +1,18 @@ -const { sumTokens2, getConnection } = require("../helper/solana"); -const { PublicKey } = require("@solana/web3.js"); +const { sumTokens2, getSolBalanceFromStakePool } = require("../helper/solana"); -async function tvl() { - const connection = getConnection(); - const [account, lst] = await Promise.all([ - connection.getAccountInfo(new PublicKey('po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2')), - sumTokens2({ - tokensAndOwners: [ - ['J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn', 'GgTE2exWZ36Q82FoVgEEzEHYCfsbGjm3P6zRfx3hLUv4'], - ['mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', 'E9LmYVKU5oyjWs9Zmzv9ji8NkzhJxJQbUEH3FWDKZt8D'], - ['bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1', '2DRZbbse5b5souvMQkifpS8CRBsDeLt6a9xDqqVJvmdw'], - ['5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm', 'GF8jvNGY44tnCfhnzdoSUBpgfog9YnLc6BRBCnt8j9do'], - ['HUBsveNpjo5pWqNkH57QzxjQASdTVXcSK7bVKTSZtcSX', '49EXLuCxc2ArgFfpJBeuci6DgULxMzrETAHpAGvsFBf1'], - ['Gwa3a4VJbAyorLhn6TEeWLbQ4tWyup4E6oL3WjAga7tx', '2DriEN733SMxEzqDBVSGwev7KwcdHPXVy65sw9u5mR14'] - ], - }) - ]); - - return { - solana: Number(account.data.readBigUint64LE(258)) / 1e9, - ...lst - }; +async function tvl(api) { + await getSolBalanceFromStakePool('po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2', api) + return sumTokens2({ + tokenAccounts: [ + 'AGuwBAj91dgz1fhaK4qgYcH7SohyZEMK1VXTizFsWjq7', + 'Q75n2KgZp7insTKkavJWftWWuGDDUuHMquosQ5hbn7G', + 'HBjQ1jF2ynYFpwx46qiZsKE3rmvgEcxnkhvKeGP6omUd', + '6eLZQKhbiBNmR4PiDFJgE6TZAoH3BwR6ceVwc3K1YjBZ', + 'HNw9tA7sWvjDH4cDCykj23Q4ifkKZerr6MbMfFXgyp62', + 'Gwa3a4VJbAyorLhn6TEeWLbQ4tWyup4E6oL3WjAga7tx', + ], + balances: api.getBalances() + }) } module.exports = { diff --git a/projects/vsol/index.js b/projects/vsol/index.js new file mode 100644 index 0000000000..8099c9524b --- /dev/null +++ b/projects/vsol/index.js @@ -0,0 +1,12 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('Fu9BYC6tWBo1KMKaP3CFoKfRhqv9akmy3DuYwnCyWiyC', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file From 1c40610ffa19f39081f27c879c0b664965ffe600 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:32:50 +0100 Subject: [PATCH 0047/1768] add zeta chain to native lend (#11329) --- projects/native-lend/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/native-lend/index.js b/projects/native-lend/index.js index bc24c5182b..8b68a4c95d 100644 --- a/projects/native-lend/index.js +++ b/projects/native-lend/index.js @@ -11,8 +11,8 @@ const config = { zklink: "0x4AC97E2727B0e92AE32F5796b97b7f98dc47F059", bsc: "0x3ba16AC2A67D126BF1DBa0a81E6C75073EFd95d9", mantle:"0x48A6FE0Fa8DfF6D290Bd21aB6BCC1DDAeb9f2D0e", - ethereum:"0x3ba16AC2A67D126BF1DBa0a81E6C75073EFd95d9" - + ethereum:"0x3ba16AC2A67D126BF1DBa0a81E6C75073EFd95d9", + zeta:"0x3ba16AC2A67D126BF1DBa0a81E6C75073EFd95d9" }; Object.keys(config).forEach((chain) => { From 8303bb2320875fd4dd30ae5455d6cb8362aaec0d Mon Sep 17 00:00:00 2001 From: 0xsign <99134502+0xsign@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:22:37 +0200 Subject: [PATCH 0048/1768] Mellow add Re7rtBTC, amphrBTC and roETH vaults (#11328) --- projects/mellow-protocol-v2/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/mellow-protocol-v2/index.js b/projects/mellow-protocol-v2/index.js index f6cb5cb78f..471e5df178 100644 --- a/projects/mellow-protocol-v2/index.js +++ b/projects/mellow-protocol-v2/index.js @@ -12,7 +12,10 @@ const config = { '0xd6E09a5e6D719d1c881579C9C8670a210437931b', '0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811', '0x5E362eb2c0706Bd1d134689eC75176018385430B', - '0x7F43fDe12A40dE708d908Fb3b9BFB8540d9Ce444' + '0x7F43fDe12A40dE708d908Fb3b9BFB8540d9Ce444', + '0x3a828C183b3F382d030136C824844Ea30145b4c7', + '0x64047dD3288276d70A4F8B5Df54668c8403f877F', + '0x7b31F008c48EFb65da78eA0f255EE424af855249', ], }, } From d255b0da17ae2384156362e951c7194649ddd1cd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 16 Aug 2024 17:26:52 +0200 Subject: [PATCH 0049/1768] Oraidex v3 (#11331) * orai: add amm-v3 info * orai: calculate tvl dex v3 from on-chain data instead of from indexer * orai: disabled no-constant-condition for while true * code refactor --------- Co-authored-by: trungbach --- projects/helper/chain/cosmos.js | 30 +++++++++++++++++++-------- projects/oraidex-v3/index.js | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 projects/oraidex-v3/index.js diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index fda290201e..535ce0d9c7 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -118,7 +118,13 @@ async function getBalance({ token, owner, block, chain } = {}) { return Number(data.balance); } -async function sumCW20Tokens({ balances = {}, tokens, owner, block, chain } = {}) { +async function sumCW20Tokens({ balances, tokens, owner, block, chain, api, } = {}) { + if (api) { + if (!chain) chain = api.chain; + if (!balances) balances = api.getBalances(); + } else { + if (!balances) balances = {}; + } await Promise.all( tokens.map(async (token) => { const balance = await getBalance({ token, owner, block, chain, }); @@ -139,7 +145,7 @@ async function getDenomBalance({ denom, owner, block, chain } = {}) { return balance ? Number(balance.amount) : 0; } -async function getBalance2({ balances = {}, owner, block, chain, tokens, blacklistedTokens, } = {}) { +async function getBalance2({ balances = {}, owner, block, chain, tokens, blacklistedTokens, api, } = {}) { const subpath = "cosmos"; let endpoint = `${getEndpoint( chain @@ -153,7 +159,9 @@ async function getBalance2({ balances = {}, owner, block, chain, tokens, blackli for (const { denom, amount } of data) { if (blacklistedTokens?.includes(denom)) continue; if (tokens && !tokens.includes(denom)) continue; - sdk.util.sumSingleBalance(balances, denom.replaceAll('/', ':'), amount); + if (api) api.add(denom, amount); + else + sdk.util.sumSingleBalance(balances, denom.replaceAll('/', ':'), amount); } return balances; } @@ -195,7 +203,7 @@ const multipleEndpoints = { "https://sei-m.api.n0ok.net", "https://sei-api.lavenderfive.com", "https://api-sei.stingray.plus" - ] + ], } async function queryContractWithRetries({ contract, chain, data }) { @@ -220,7 +228,7 @@ async function queryContractWithRetries({ contract, chain, data }) { } } -async function queryManyContracts({ contracts = [], chain, data, permitFailure = false}) { +async function queryManyContracts({ contracts = [], chain, data, permitFailure = false }) { const parallelLimit = 25 const { results, errors } = await PromisePool .withConcurrency(parallelLimit) @@ -280,7 +288,13 @@ async function queryContractStore({ return query(url, block, chain); } -async function sumTokens({ balances = {}, owners = [], chain, owner, tokens, blacklistedTokens, }) { +async function sumTokens({ balances, owners = [], chain, owner, tokens, blacklistedTokens, api, }) { + if (api) { + if (!chain) chain = api.chain; + if (!balances) balances = api.getBalances(); + } else { + if (!balances) balances = {}; + } if (!tokens?.length || (tokens?.length === 1 && tokens[0] === ADDRESSES.null)) tokens = undefined; if (owner) owners = [owner] log(chain, "fetching balances for ", owners.length); @@ -288,7 +302,7 @@ async function sumTokens({ balances = {}, owners = [], chain, owner, tokens, bla const { errors } = await PromisePool.withConcurrency(parallelLimit) .for(owners) - .process(async (owner) => getBalance2({ balances, owner, chain, tokens, blacklistedTokens, })); + .process(async (owner) => getBalance2({ balances, owner, chain, tokens, blacklistedTokens, api, })); if (errors && errors.length) throw errors[0]; return transformBalances(chain, balances); @@ -311,5 +325,5 @@ module.exports = { getTokenBalance, getToken, sumCW20Tokens, - queryContractWithRetries + queryContractWithRetries, }; diff --git a/projects/oraidex-v3/index.js b/projects/oraidex-v3/index.js new file mode 100644 index 0000000000..664b36bb8b --- /dev/null +++ b/projects/oraidex-v3/index.js @@ -0,0 +1,36 @@ +const { sumTokens, sumCW20Tokens, queryContract } = require('../helper/chain/cosmos') +const { getUniqueAddresses } = require('../helper/utils') + +const AMM_V3_CONTRACT = "orai10s0c75gw5y5eftms5ncfknw6lzmx0dyhedn75uz793m8zwz4g8zq4d9x9a" + +const isNativeToken = denom => !denom.startsWith("orai1") + +async function tvl(api) { + const CHUNK_SIZE = 100 + const pools = [] + let hasMore = true + + while (hasMore) { + const startAfter = pools.length == 0 ? undefined : pools[pools.length - 1].pool_key + const res = await queryContract({ + chain: api.chain, + contract: AMM_V3_CONTRACT, + data: { pools: { limit: CHUNK_SIZE, startAfter } } + }) + + pools.push(...res) + hasMore = res.length === CHUNK_SIZE + } + + let cw20Tokens = pools.map(pool => [pool.pool_key.token_x, pool.pool_key.token_y]).flat().filter(token => !isNativeToken(token)) + cw20Tokens = getUniqueAddresses(cw20Tokens, true) + + await sumTokens({ owner: AMM_V3_CONTRACT, api, }) + return sumCW20Tokens({ api, tokens: cw20Tokens, owner: AMM_V3_CONTRACT }) +} + +module.exports = { + timetravel: false, + methodology: "Liquidity on pool V3", + orai: { tvl } +} \ No newline at end of file From 9733fd807ca3c878deb32996fe5b6aa801b4fc06 Mon Sep 17 00:00:00 2001 From: arrland <142511376+arrland@users.noreply.github.com> Date: Fri, 16 Aug 2024 17:47:54 +0200 Subject: [PATCH 0050/1768] Add Arrland adapter (#11214) * Name: Pirates of the Arrland Twitter Link: https://x.com/ArrlandNFT List of audit links if any: https://github.com/solidproof/projects/tree/main/2024/Arrland https://skynet.certik.com/projects/arrland https://github.com/solidproof/projects/tree/main/2024/Pirates%20of%20the%20Arrland Website Link: https://arrland.com/ Logo (High resolution, will be shown with rounded borders): https://imgur.com/WelrkvN.png Current TVL: --- polygon-staking --- RUM 928.9489624865132 Total: 928.9489624865132 --- polygon-pool2 --- RUM 11.11 k WMATIC 9.15 k USDT 1.97 k Total: 22.23 k --- polygon --- USD+ 51.66 k Total: 51.66 k --- staking --- RUM 929 Total: 928.9489624865132 --- pool2 --- RUM 11.11 k WMATIC 9.15 k USDT 1.97 k Total: 22.23 k --- tvl --- USD+ 51.66 k Total: 51.66 k ------ TVL ------ polygon 51.66 k polygon-pool2 22.23 k pool2 22.23 k polygon-staking 929 staking 929 total 51.66 k Treasury Addresses (if the protocol has treasury) - None Chain: Polygon Coingecko ID (so your TVL can appear on Coingecko, leave empty if not listed): "arrland-rum" Coinmarketcap ID (so your TVL can appear on Coinmarketcap, leave empty if not listed): 24789 Short Description (to be shown on DefiLlama): Pirates of the Arrland is a Play2Earn competetive 3D game project combining DeFi and on-chain farming. Token address and ticker if any: 0x14E5386f47466A463f85D151653E1736c0c50Fc3 Category (full list at https://defillama.com/categories) *Please choose only one: Gaming forkedFrom (Does your project originate from another project): No methodology: Counts total value locked on Pirate NFTs staked, the token staking, LP token staking Github org/user (Optional, if your code is open source, we can track activity): https://github.com/arrland * Update TVL calculation for Arrland on Polygon - Remove custom TVL calculation based on NFT floor price - Simplify TVL calculation using sumTokensExport helper - TVL now counts $RUM tokens locked in LP staking contracts - Update methodology description to reflect new calculation method * Refactor TVL calculation for Arrland on Polygon - Remove sumTokensExport helper for TVL calculation - Set TVL to return 0 - Update methodology to reflect the simplified TVL calculation --------- Co-authored-by: Dominik Szopa --- projects/arrland/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/arrland/index.js diff --git a/projects/arrland/index.js b/projects/arrland/index.js new file mode 100644 index 0000000000..737a9c7182 --- /dev/null +++ b/projects/arrland/index.js @@ -0,0 +1,17 @@ + +const { stakings } = require("../helper/staking"); +const { pool2s } = require("../helper/pool2"); + +const stakingAddresses = ["0x111e34bA90D1dE9a2A57f987b5711C71FA4c0Fa0"]; +const stakingToken = "0x14e5386f47466a463f85d151653e1736c0c50fc3"; +const pool2StakingAddresses = ["0xEAf6E84B4E4C2Ce70a80fd781B6A7f177E7b60F5", "0xb94380939A15C574FE22B04FC95Ec5CCaAD783b8"]; +const lpTokens = ["0x6495b61b8088a0a82de737ffb142136119b016e6", "0x464b7eb1c66d662e652dfbfced35d465498ad9ac"]; + +module.exports = { + polygon: { + tvl: () => 0, + staking: stakings(stakingAddresses, stakingToken, "polygon"), + pool2: pool2s(pool2StakingAddresses, lpTokens, "polygon") + }, + methodology: "Counts total value locked as the $RUM token staking, LP token staking", +} \ No newline at end of file From a44d4790d638a060cf2c0689b0454e7ec93dab28 Mon Sep 17 00:00:00 2001 From: Jaimi Patel Date: Fri, 16 Aug 2024 17:00:56 +0100 Subject: [PATCH 0051/1768] Add dexalot tvl adapter (#11318) * add dexalot tvl adapter * refactor tvl via sumTokens2 for avax,arb+base to helper file * add adapter for dexalot bridge * minor refactor * minor refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/dexalot-bridge/index.js | 3 +++ projects/dexalot/helper.js | 33 ++++++++++++++++++++++++++++++++ projects/dexalot/index.js | 25 ++++++++++++++++++++++++ projects/helper/chains.json | 1 + 4 files changed, 62 insertions(+) create mode 100644 projects/dexalot-bridge/index.js create mode 100644 projects/dexalot/helper.js create mode 100644 projects/dexalot/index.js diff --git a/projects/dexalot-bridge/index.js b/projects/dexalot-bridge/index.js new file mode 100644 index 0000000000..a68684be3d --- /dev/null +++ b/projects/dexalot-bridge/index.js @@ -0,0 +1,3 @@ +const { exportDexalotTVL } = require("../dexalot/helper"); + +module.exports = exportDexalotTVL("Portfolio") \ No newline at end of file diff --git a/projects/dexalot/helper.js b/projects/dexalot/helper.js new file mode 100644 index 0000000000..99d791be70 --- /dev/null +++ b/projects/dexalot/helper.js @@ -0,0 +1,33 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { get } = require("../helper/http"); + +const dexalotTradingAPI = "https://api.dexalot.com/privapi/trading" + +// [chain]: env +const supportedChains = { + "arbitrum": "production-multi-arb", + "avax": "production-multi-avax", + "base": "production-multi-base" +} + +function getTVL(env, contractName) { + return async (api) => { + const contract = await get(`${dexalotTradingAPI}/deployment?contracttype=${contractName}&env=${env}`) + const allTokens = await get(`${dexalotTradingAPI}/tokens`) + const tokens = allTokens.filter((t) => !t.isvirtual && t.env === env).map((t) => t.address) + return sumTokens2({ api, owner: contract[0].address, tokens }) + } +} + +// Returns TVL for each supported chain (excludes Dexalot chain) +function exportDexalotTVL(contractName) { + const res = {} + for (const [chain, env] of Object.entries(supportedChains)) { + res[chain] = {tvl: getTVL(env, contractName)} + } + return res +} + +module.exports = { + exportDexalotTVL +} \ No newline at end of file diff --git a/projects/dexalot/index.js b/projects/dexalot/index.js new file mode 100644 index 0000000000..c08832f465 --- /dev/null +++ b/projects/dexalot/index.js @@ -0,0 +1,25 @@ +const { get } = require("../helper/http"); +const { exportDexalotTVL } = require("./helper"); + +const dexalotAPI = "https://api.dexalot.com" + +async function getDexalotChainLockedOrders(_) { + const lockedTokens = await get(`${dexalotAPI}/api/stats/orderstvl`) + const res = {} + for (const {coingecko_id, amount} of lockedTokens) { + // Ignore counting tokens without coingecko_id + if (coingecko_id == null) { + continue + } + res[coingecko_id] = amount + } + return res +} + +module.exports = { + methodology: "Dexalot TVL is comprised of the token balances locked in the MainnetRFQ (swap) contracts and the value locked in open orders on the Dexalot chain.", + dexalot: { + tvl: getDexalotChainLockedOrders, + }, + ...exportDexalotTVL("MainnetRFQ") +} \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 623870f0cb..ded34e3f96 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -81,6 +81,7 @@ "defichain_evm", "defiverse", "degen", + "dexalot", "dexit", "dfs", "dfk", From 64e8c4c0e8d6d7baeb8fee67750b8277fa9ea12d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 16 Aug 2024 19:00:04 +0200 Subject: [PATCH 0052/1768] fix astroport --- projects/astroport/index.js | 4 +++- projects/helper/coreAssets.json | 3 +++ projects/terraswap/factoryTvl.js | 13 +++++++------ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/projects/astroport/index.js b/projects/astroport/index.js index ed71d81eda..979e401072 100644 --- a/projects/astroport/index.js +++ b/projects/astroport/index.js @@ -11,7 +11,9 @@ module.exports = { tvl: getFactoryTvl("terra14x9fr055x5hvr48hzy2t4q7kvjvfttsvxusa4xsdcy702mnzsvuqprer8r") }, neutron: { - tvl: getFactoryTvl("neutron1hptk0k5kng7hjy35vmh009qd5m6l33609nypgf2yc6nqnewduqasxplt4e") + tvl: getFactoryTvl("neutron1hptk0k5kng7hjy35vmh009qd5m6l33609nypgf2yc6nqnewduqasxplt4e", { + blacklistedPairs: ['neutron14hn88erzgqskhvvczvdncu79tz4xqncrun5l5yqkwecmzrlpqnjquqp33f'] + }) }, sei: { tvl: getFactoryTvl("sei1xr3rq8yvd7qplsw5yx90ftsr2zdhg4e9z60h5duusgxpv72hud3shh3qfl") diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 6613d8f44d..22e9a1d1c3 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1880,5 +1880,8 @@ "WETH": "0x6b48c2e6a32077ec17e8ba0d98ffc676dfab1a30", "USDC": "0x3B860c0b53f2e8bd5264AA7c3451d41263C933F2", "RUSD": "0xa9f32a851b1800742e47725da54a09a7ef2556a3" + }, + "neutron": { + "NTRN": "untrn" } } \ No newline at end of file diff --git a/projects/terraswap/factoryTvl.js b/projects/terraswap/factoryTvl.js index 553e5ea64a..06c8723aaf 100644 --- a/projects/terraswap/factoryTvl.js +++ b/projects/terraswap/factoryTvl.js @@ -16,14 +16,15 @@ function getAssetInfo(asset) { return [extractTokenInfo(asset), Number(asset.amount)] } -async function getAllPairs(factory, chain) { +async function getAllPairs(factory, chain, { blacklistedPairs = [] } = {}) { + const blacklist = new Set(blacklistedPairs) let allPairs = [] let currentPairs; const limit = factory === 'terra14x9fr055x5hvr48hzy2t4q7kvjvfttsvxusa4xsdcy702mnzsvuqprer8r' ? 29 : 30 // some weird native token issue at one of the pagination query do { const queryStr = `{"pairs": { "limit": ${limit} ${allPairs.length ? `,"start_after":${JSON.stringify(allPairs[allPairs.length - 1].asset_infos)}` : ""} }}` currentPairs = (await queryContract({ contract: factory, chain, data: queryStr })).pairs - allPairs.push(...currentPairs) + allPairs.push(...currentPairs.filter(pair => !blacklist.has(pair.contract_addr))) } while (currentPairs.length > 0) const dtos = [] const getPairPool = (async (pair) => { @@ -47,9 +48,9 @@ async function getAllPairs(factory, chain) { return dtos } -function getFactoryTvl(factory) { - return async (_, _1, _2, { chain }) => { - const pairs = (await getAllPairs(factory, chain)).filter(pair => (pair.assets[0].balance && pair.assets[1].balance)) +function getFactoryTvl(factory, { blacklistedPairs = []} = {}) { + return async (api) => { + const pairs = (await getAllPairs(factory, api.chain, { blacklistedPairs })).filter(pair => (pair.assets[0].balance && pair.assets[1].balance)) const data = pairs.map(({ assets }) => ({ token0: assets[0].addr, @@ -57,7 +58,7 @@ function getFactoryTvl(factory) { token1: assets[1].addr, token1Bal: assets[1].balance, })) - return transformDexBalances({ chain, data }) + return transformDexBalances({ api, data }) } } From 99225ab588c1e187496222dfc273334d85af9edf Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 16 Aug 2024 19:24:46 +0200 Subject: [PATCH 0053/1768] minor fix --- projects/helper/coreAssets.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 22e9a1d1c3..b199f3a666 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1261,6 +1261,8 @@ "GRAV_boot": "C23D820C5B6009E544AFC8AF5A2FEC288108AEDBFAEFDBBDD6BE54CC23069559", "JUNO_boot": "8D9262E35CAE362FA74AE05E430550757CF8D842EC1B241F645D3CB7179AFD10", "TIA": "D79E7D83AB399BFFF93433E54FAA480C191248FC556924A2A8351AE2638B3877", + "TIA1": "773B4D0A3CD667B2275D5A4A7A2F0909C0BA0F4059C0B9181E680DDF4965DCC7", + "AXL_WETH": "A585C2D15DCD3B010849B453A2CFCB5E213208A5AB665691792684C26274304D", "EVMOS_boot": "4B322204B4F59D770680FE4D7A565DDC3F37BFF035474B717476C66A4F83DD72" }, "starknet": { From 619cc3fc9b0df41253d7b7b92e319d1cc198900f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 16 Aug 2024 20:39:06 +0200 Subject: [PATCH 0054/1768] add more ibc core tokens --- projects/helper/coreAssets.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index b199f3a666..e5f2cc8828 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1215,6 +1215,7 @@ "ATOM_2": "27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", "USDC": "B3504E092456BA618CC28AC671A71FB08C6CA0FD0BE7C8A5B5A3E2DD933CC9E4", "USDC_1": "E1616E7C19EA474C565737709A628D6F8A23FF9D3E9A7A6871306CF5E0A5341E", + "USDC_2": "B559A80D62249C8AA07A380E2A2BEA6E5CA9A6F079C912C3A9E9B494105E4F81", "GRAV": "C950356239AD2A205DE09FDF066B1F9FF19A7CA7145EA48A5B19B76EE47E52F7", "SCRT": "A358D7F19237777AF6D8AD0E0F53268F8B18AE8A53ED318095C14D6D7F3B2DB5", "AXL": "903A61A498756EA560B85A85132D3AEE21B5DEDD41213725D22ABF276EA6945E", @@ -1239,6 +1240,7 @@ "AXLUSDC": "BFF0D3805B50D93E2FA5C0B2DDF7E0B30A631076CD80BC12A48C0E95404B4A41", "AXLUSDC_1": "EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034", "AXLUSDC_2": "295548A78785A1007F232DE286149A6FF512F180AF5657780FC89C009E2C348F", + "AXLUSDT": "57503D7852EF4E1899FE6D71C5E81D7C839F76580F86F21E39348FC2BC9D7CE2", "UST": "B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C", "UST_1": "6F4968A73F90CF7DE6394BF937D6DF7C7D162D74D839C13F53B41157D315E05F", "G-WETH": "DBF5FA602C46392DE9F4796A0FC7D02F3A8A3D32CA3FAA50B761D4AA6F619E95", From 4ecc050623f4a10dceb10c27c2c386556724b772 Mon Sep 17 00:00:00 2001 From: Nicolas Menendez Date: Fri, 16 Aug 2024 21:19:31 +0200 Subject: [PATCH 0055/1768] Add Capyfi protocol (#11332) * add capyfi protocol * code refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/capyfi/index.js | 6 ++++++ projects/helper/tokenMapping.js | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 projects/capyfi/index.js diff --git a/projects/capyfi/index.js b/projects/capyfi/index.js new file mode 100644 index 0000000000..8dfbc1567c --- /dev/null +++ b/projects/capyfi/index.js @@ -0,0 +1,6 @@ +const { compoundExports2, methodology } = require('../helper/compound') + +module.exports = { + methodology, + lac: compoundExports2({ comptroller: '0x123Abe3A273FDBCeC7fc0EBedc05AaeF4eE63060', cether: '0x465ebfceb3953e2922b686f2b4006173664d16ce' }) +} diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index e059bcd931..d3fbf64100 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -46,6 +46,12 @@ const fixBalancesTokens = { cronos_zkevm: { '0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d': { coingeckoId: 'crypto-com-chain', decimals: 18 }, }, + lac: { + [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, + '0x2911a1AB18546cb501628Be8625C7503a2A7DB54': { coingeckoId: "la-coin", decimals: 18 }, + '0x42c8c9c0f0a98720dacdaeac0c319cb272b00d7e': { coingeckoId: "ethereum", decimals: 18 }, + '0xf54b8cb8eeee3823a55dddf5540ceaddf9724626': { coingeckoId: "wrapped-bitcoin", decimals: 8 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 88221ee1017e84f744168c6375af43e2e89622e0 Mon Sep 17 00:00:00 2001 From: 0xBraunGuy <105317789+0xBraunGuy@users.noreply.github.com> Date: Sat, 17 Aug 2024 05:46:37 -0400 Subject: [PATCH 0056/1768] lulo tvl adapter with timetravel (#11333) --- projects/lulo/index.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 projects/lulo/index.js diff --git a/projects/lulo/index.js b/projects/lulo/index.js new file mode 100644 index 0000000000..084fb15f92 --- /dev/null +++ b/projects/lulo/index.js @@ -0,0 +1,33 @@ +const sdk = require('@defillama/sdk') + +const endpoint = 'http://api.flexlend.fi/stats' +const startTimestamp = 1704067200 // 2024-01-01 + +async function tvl(options) { + const balances = {} + const request = { + method: 'GET', + headers: { + accept: 'application/json', + 'x-lulo-api-key': String(process.env.LULO_API_KEY || ''), + }, + } + + const response = await fetch(`${endpoint}?timestamp=${options.timestamp}`, request) + + const { data } = await response.json() + + data.map(d => { + sdk.util.sumSingleBalance(balances, d.mintAddress, d.tokens, 'solana') + }) + return balances +} + +module.exports = { + doublecounted: true, + timetravel: true, + start: startTimestamp, + methodology: + 'Volume is calculated by summing the total USD value of deposited funds in Lulo across all tokens', + solana: { tvl }, +} From 4f69138e3322302fc7fc22c13c53d6f360d396c7 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:11:20 +0200 Subject: [PATCH 0057/1768] feat: Adapter, defi.money (#11330) * feat:Adapter, defi-money * add methodology * add yield part * doublecounted: true * split project in two different products * code refactor * remove pool2 --------- Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/defi-money/index.js | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 projects/defi-money/index.js diff --git a/projects/defi-money/index.js b/projects/defi-money/index.js new file mode 100644 index 0000000000..ed6010732e --- /dev/null +++ b/projects/defi-money/index.js @@ -0,0 +1,51 @@ +const { sumTokens2 } = require("../helper/unwrapLPs") + +const config = { + optimism: { + controller: "0x1337F001E280420EcCe9E7B934Fa07D67fdb62CD", + MONEY: "0x7e803F4edd6528caFBf5C5d03Cc106b04379C24b", + stakeLPs: [ + // "0x7e803F4edd6528caFBf5C5d03Cc106b04379C24b", // MONEY - already included in tvl + "0xE8f00491afa68B4A653C77e5f92DBA0F8df3a185", // crvUSD/MONEY + "0xa398a48C2738fd6c79F5654823Fb93456B0fDaF6", // USDT/MONEY + "0x36afCD1083eE9186A2b984E10d75C1E14b99B75e", // USDC/MONEY + "0xcf38a66DeD7825cfEF66046c256Aa0EDbd41BEf5", // DAI/MONEY + "0x73C3eC2b8e00929824a529e60fb6ed8aF193c7cc", // FRAX/MONEY + ], + }, + arbitrum: { + controller: "0x1337F001E280420EcCe9E7B934Fa07D67fdb62CD", + MONEY: "0xEbE54BEE7A397919C53850bA68E126b0A6b295ed", + stakeLPs: [ + // "0xEbE54BEE7A397919C53850bA68E126b0A6b295ed", // MONEY - already included in tvl + "0xF2852d7e810d3EC7094bFE1D7DDCa5044c259c25", // crvUSD/MONEY + "0x6e59b326984fC132F16a977cd20E38641A9043De", // USDT/MONEY + "0xdE718A791226c93B53C77D60E5D4693C05a31422", // USDC/MONEY + "0xE3763d545707F435e21eeBbe75070495c806B744", // DAI/MONEY + "0x07aDF588508b923B8eA0389d27b61b9CB8a197Cb", // FRAX/MONEY + ], + }, +} + +const tvl = async (api) => { + const { controller, } = config[api.chain] + const colls = await api.call({ target: controller, abi: 'address[]:get_all_collaterals' }) + const amms = await api.multiCall({ abi: 'function get_amm(address) view returns (address)', calls: colls, target: controller }) + return sumTokens2({ api, tokensAndOwners2: [colls, amms]}) +} + +const pool2 = async (api) => { + const { stakeLPs = [], } = config[api.chain] + const tokens = await api.multiCall({ abi: 'address:STAKE_TOKEN', calls: stakeLPs }) + return sumTokens2({ api, tokensAndOwners2: [tokens, stakeLPs]}) +} + +module.exports = { + methodology: "TVL corresponds to the collateral deposited in the markets", +} + +Object.keys(config).forEach((chain) => { + module.exports[chain] = { + tvl, pool2, + } +}) From 14d5e7f0a18036c816d04f450cabcc10edd84038 Mon Sep 17 00:00:00 2001 From: cgi-bin/ <6095048+sven-hash@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:14:41 +0200 Subject: [PATCH 0058/1768] update: add new ayin pool (#11334) Co-authored-by: cgi-bin --- projects/ayin/index.js | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/projects/ayin/index.js b/projects/ayin/index.js index 33c05f2320..375005468d 100644 --- a/projects/ayin/index.js +++ b/projects/ayin/index.js @@ -3,15 +3,26 @@ const alephium = require('../helper/chain/alephium') const Addresses = { alphAyinPool: '25ywM8iGxKpZWuGA5z6DXKGcZCXtPBmnbQyJEsjvjjWTy', alphUsdtPool: '2A5R8KZQ3rhKYrW7bAS4JTjY9FCFLJg6HjQpqSFZBqACX', + alphUsdcPool: '283R192Z8n6PhXSpSciyvCsLEiiEVFkSE6MbRBA4KSaAj', alphWethPool: 'yXMFxdoKcE86W9NAyajc8Z3T3k2f5FGiHqHtuA69DYT1', - ayinUsdtPool: '21NEBCk8nj5JBKpS7eN8kX6xGJoLHNqTS3WBFnZ7q8L9m', alphWbtcPool: '28XY326TxvSekaAwiWDLFg2QBRfacSga8dyNJCYGUYNbq', + alphApadPool: 'vFpZ1DF93x1xGHoXM8rsDBFjpcoSsCi5ZEuA5NG5UJGX', + alphChengPool: '25b5aNfdrNRjJ7ugPTkxThT51L1NSvf8igQyDHKZhweiK', + alphAnsdPool: 'uM4QJwHqFoTF2Pou8TqwhaDiHYLk4SHG65uaQG8r7KkT', + alphAlphagaPool: '23cXw23ZjRqKc7i185ZoH8vh9KT4XTumVRWpVLUecgLMd', + ayinUsdtPool: '21NEBCk8nj5JBKpS7eN8kX6xGJoLHNqTS3WBFnZ7q8L9m', + ayinUsdcPool: '2961aauvprhETv6TXGQRc3zZY4FbLnqKon2a4wK6ABH9q', + ayinApadPool: '247rZysrruj8pj2GnFyK2bqB2nU4JsUj7k2idksAp4XMy', usdtUsdcPool: '27C75V9K5o9CkkGTMDQZ3x2eP82xnacraEqTYXA35Xuw5', usdt: 'zSRgc7goAYUgYsEBYdAzogyyeKv3ne3uvWb3VDtxnaEK', weth: 'vP6XSUyjmgWCB2B9tD5Rqun56WJqDdExWnfwZVEqzhQb', ayin: 'vT49PY8ksoUL6NcXiZ1t2wAmC7tTPRfFfER8n3UCLvXy', wbtc: 'xUTp3RXGJ1fJpCGqsAY6GgyfRQ3WQ1MdcYR1SiwndAbR', - usdc: '22Nb9JajRpAh9A2fWNgoKt867PA6zNyi541rtoraDfKXV' + usdc: '22Nb9JajRpAh9A2fWNgoKt867PA6zNyi541rtoraDfKXV', + apad: '27HxXZJBTPjhHXwoF1Ue8sLMcSxYdxefoN2U6d8TKmZsm', + cheng: '27DP28mGQzSrHGZgnRvYQH1VAWYZVVLUjGALazLrtrRJF', + ansd: '2AhEaQiUYtAF6g1vtRQHsPR7xTkMY1PRr3k7QkXuisynF', + alphaga: '26Mirs33zojnVMRkqVDJtMZvVZcbAFVyxGojGw7UtWp2K' } const XAyinAddress = 'zst5zMzizEeFYFis6DNSknY5GCYTpM85D3yXeRLe2ug3' @@ -21,7 +32,10 @@ const TokenIds = { weth: alephium.contractIdFromAddress(Addresses.weth), ayin: alephium.contractIdFromAddress(Addresses.ayin), wbtc: alephium.contractIdFromAddress(Addresses.wbtc), - usdc: alephium.contractIdFromAddress(Addresses.usdc) + usdc: alephium.contractIdFromAddress(Addresses.usdc), + apad: alephium.contractIdFromAddress(Addresses.apad), + cheng: alephium.contractIdFromAddress(Addresses.cheng), + ansd: alephium.contractIdFromAddress(Addresses.ansd) } async function ayinTvlForXAyin() { @@ -37,12 +51,12 @@ async function ayinTvlForXAyin() { async function tvl() { const alphTvls = await Promise.all([ - Addresses.alphAyinPool, Addresses.alphUsdtPool, Addresses.alphWethPool + Addresses.alphAyinPool, Addresses.alphUsdtPool, Addresses.alphUsdcPool, Addresses.alphWethPool, Addresses.alphApadPool, Addresses.alphChengPool, Addresses.alphAnsdPool, Addresses.alphAlphagaPool ].map(poolAddress => alephium.getAlphBalance(poolAddress))) const alphTvl = alphTvls.reduce((tvl, res) => tvl + Number(res.balance), 0) const tokensTvls = await Promise.all([ Addresses.alphAyinPool, Addresses.alphUsdtPool, Addresses.alphWethPool, Addresses.ayinUsdtPool, - Addresses.alphWbtcPool, Addresses.usdtUsdcPool + Addresses.ayinUsdcPool,Addresses.alphWbtcPool, Addresses.usdtUsdcPool,Addresses.alphApadPool, Addresses.alphChengPool, Addresses.ayinApadPool, Addresses.alphAnsdPool, Addresses.alphAlphagaPool ].map(poolAddress => alephium.getTokensBalance(poolAddress))) const tokensTvl = tokensTvls.reduce((res, tokenTvls) => { tokenTvls.forEach(tokenTvl => { @@ -51,14 +65,18 @@ async function tvl() { } }); return res - }, { [TokenIds.ayin]: 0, [TokenIds.usdt]: 0, [TokenIds.weth]: 0, [TokenIds.wbtc]: 0, [TokenIds.usdc]: 0 }) + }, { [TokenIds.ayin]: 0, [TokenIds.usdt]: 0, [TokenIds.weth]: 0, [TokenIds.wbtc]: 0, [TokenIds.usdc]: 0, [TokenIds.apad]: 0, [TokenIds.cheng]: 0, [TokenIds.ansd]: 0, [TokenIds.ansd]: 0, [TokenIds.alphaga]: 0 }) return { alephium: alphTvl / 1e18, ayin: tokensTvl[TokenIds.ayin] / 1e18, weth: tokensTvl[TokenIds.weth] / 1e18, tether: tokensTvl[TokenIds.usdt] / 1e6, usdc: tokensTvl[TokenIds.usdc] / 1e6, - bitcoin: tokensTvl[TokenIds.wbtc] / 1e8 + bitcoin: tokensTvl[TokenIds.wbtc] / 1e8, + alphpad: tokensTvl[TokenIds.apad] / 1e18, + gigacheng: tokensTvl[TokenIds.cheng] / 1e6, + alephiumdomains: tokensTvl[TokenIds.ansd] / 1e18, + alphaga: tokensTvl[TokenIds.alphaga] / 1e18 } } From 24dd550493f5a408a96af9c95de84e1fe2da55c0 Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Sat, 17 Aug 2024 06:15:23 -0400 Subject: [PATCH 0059/1768] Added waxdao project (#11286) * added waxdao project * separate staking for waxdao * removed dao.waxdao contract --------- Co-authored-by: Mike D --- projects/waxdao/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/waxdao/index.js diff --git a/projects/waxdao/index.js b/projects/waxdao/index.js new file mode 100644 index 0000000000..ed2f776ee9 --- /dev/null +++ b/projects/waxdao/index.js @@ -0,0 +1,30 @@ +const { get_account_tvl } = require("../helper/chain/eos"); + +const staking_accounts = ["waxdaofarmer", "farms.waxdao", "tf.waxdao"]; + +const tokens = [ + ["eosio.token", "WAX", "wax"], + ["wuffi", "WUF", "wuffi"], + ["alien.worlds", "TLM", "alien-worlds"], +]; + + +// WaxDAO +// https://waxdao.io +async function wax() { + const accounts = ["waxdaolocker", "waxdaomarket", "waxdaobacker", "waxdaoescrow", "waxdaosynths"]; + + return await get_account_tvl(accounts, tokens, "wax"); +} + +async function staking() { + return await get_account_tvl(staking_accounts, tokens, "wax"); +} + +module.exports = { + methodology: `WaxDAO TVL is achieved by querying token balances from vesting, farming, and market contract(s)`, + wax: { + tvl: wax, + staking + }, +} \ No newline at end of file From c534a782c36ff5b85374cc7c565374b221736ed6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 17 Aug 2024 13:08:46 +0200 Subject: [PATCH 0060/1768] update fortunafi --- projects/fortunafi/index.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/projects/fortunafi/index.js b/projects/fortunafi/index.js index 16071d8635..fa3ecdece1 100644 --- a/projects/fortunafi/index.js +++ b/projects/fortunafi/index.js @@ -20,16 +20,12 @@ const config = { }, } -module.exports = { - misrepresentedTokens: true, -} - Object.keys(config).forEach(chain => { - const tConfig = config[chain] + const tokens = Object.values(config[chain]) module.exports[chain] = { tvl: async (api) => { - const nav = await api.multiCall({ abi: 'uint256:nav', calls: Object.values(tConfig), permitFailure: true }) - api.addCGToken('tether', nav.reduce((acc, i) => acc + (i ?? 0)/1e18, 0)) + const supplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: tokens}) + api.add(tokens, supplies) } } }) From 5d712ac31a34d44159be4c3041568567bd7f53e8 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 17:58:23 +0100 Subject: [PATCH 0061/1768] add check --- projects/splash.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/splash.js b/projects/splash.js index 0e4c15d75f..2e4904dd0d 100644 --- a/projects/splash.js +++ b/projects/splash.js @@ -2,6 +2,9 @@ const { get } = require('./helper/http'); async function cardanoTVL() { let { tvlAda } = await get('https://api2.splash.trade/platform-api/v1/platform/stats') + if(tvlAda>1e9){ + throw new Error("wrong") + } return { cardano: tvlAda }; } From 767ef6cb6eefacd1215808f2d72f220b389d211e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 18 Aug 2024 18:13:10 +0200 Subject: [PATCH 0062/1768] update ferdyflip: #11338 --- projects/ferdyflip/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ferdyflip/index.js b/projects/ferdyflip/index.js index f20b732b28..e6242ae519 100644 --- a/projects/ferdyflip/index.js +++ b/projects/ferdyflip/index.js @@ -4,7 +4,7 @@ const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); // https://docs.ferdyflip.xyz/developers/contracts/platform const config = { avax: { - tokens: [ADDRESSES.avax.WAVAX, nullAddress], owners: ['0x20AfbaC35B333dA4fE7230CC60946F88ee87aAA3'], + tokens: [ADDRESSES.avax.WAVAX, nullAddress], owners: ['0x20AfbaC35B333dA4fE7230CC60946F88ee87aAA3', '0xe0a69f4d29c891b9c5c7368b591ed3109bcb80f7'], }, base: { tokens: [ADDRESSES.base.WETH, nullAddress], owners: ['0x3b6014e4b38791444a352D687022D6d6d79Eb99c'], From bd0f65d6c237cc9c55e8884c1dbbcf0902991ed8 Mon Sep 17 00:00:00 2001 From: Dan Hsu Date: Mon, 19 Aug 2024 01:33:51 +0900 Subject: [PATCH 0063/1768] Add hasui from Navi (#11337) * feature: update stapearl psm id * feature: add lst lp to tvl * feature: modified the function of getStakingLPAmount * feature: add navi sLP * feature: change id and remove console.log * feature: add scallop sLP * feature: add hasui from navi --- projects/bucket-protocol/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index 040f879c68..1c69565b56 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -68,6 +68,8 @@ const scallop_sUSDC_LP_ID = const scallop_sUSDT_LP_ID = "0x6b68b42cbb4efccd9df30466c21fff3c090279992c005c45154bd1a0d87ac725"; +const haSUI_Navi_Pond_ID = "0xef1ff1334c1757d8e841035090d34b17b7aa3d491a3cb611319209169617518e" + async function getStakingLPAmount(id) { const stakingLPObject = await sui.getObject(id); return stakingLPObject.fields.output_volume; @@ -238,6 +240,12 @@ async function tvl(api) { snaviLPAmount ); + const haSuiNaviPondAmount = await getStakingLPAmount(haSUI_Navi_Pond_ID); + api.add( + "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI", + haSuiNaviPondAmount + ); + const scallopUSDC_LPAmount = await getScallopsLPAmount(scallop_sUSDC_LP_ID); api.add(USDC, scallopUSDC_LPAmount); From db9b483f0d84469d1d28bd3eb114fb808621ba75 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 19 Aug 2024 00:10:45 +0100 Subject: [PATCH 0064/1768] fix --- projects/icpswap/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/icpswap/index.js b/projects/icpswap/index.js index e0cfff7225..294d40baef 100644 --- a/projects/icpswap/index.js +++ b/projects/icpswap/index.js @@ -17,7 +17,7 @@ async function tvl() { .for(pairs) .process(async ({ pool_id }) => { const res = await get(`https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/pool_tvl?poolId=${pool_id}&limit=1`) - if (res.length > 0) + if (res.length > 0 && res[0].tvlUSD < 100e6) tvl += +res[0].tvlUSD }) From f656f38380a8bb1496dd6e0c07bc9a6de26d7bce Mon Sep 17 00:00:00 2001 From: roinevirta <70798584+roinevirta@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:04:47 +0300 Subject: [PATCH 0065/1768] add random reward (#11339) --- projects/RandomReward/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 projects/RandomReward/index.js diff --git a/projects/RandomReward/index.js b/projects/RandomReward/index.js new file mode 100644 index 0000000000..1002d86503 --- /dev/null +++ b/projects/RandomReward/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); + +const RR_ETHEREUM = '0x5ec1e43163b303b13fea20a892cba7e5568d8a8f'; + +module.exports = { + methodology: `Total ETH held in the Random Reward contract, available for distribution.`, + ethereum: { tvl: sumTokensExport({ owner: RR_ETHEREUM, tokens: [nullAddress]}), }, + }; \ No newline at end of file From c8c4e698b9f894de6b33f160f8ab2811dec07c6f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:24:48 +0200 Subject: [PATCH 0066/1768] track chain assets: lisk l2 --- projects/lisk-l2/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/lisk-l2/index.js diff --git a/projects/lisk-l2/index.js b/projects/lisk-l2/index.js new file mode 100644 index 0000000000..40f48c841a --- /dev/null +++ b/projects/lisk-l2/index.js @@ -0,0 +1,15 @@ +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') +const config = { + ethereum: { + owners: ['0x2658723bf70c7667de6b25f99fcce13a16d25d08', '0x26dB93F8b8b4f7016240af62F7730979d353f9A7',], + blacklistedTokens: ['0x6033F7f88332B8db6ad452B7C6D5bB643990aE3f'], + tokens: [nullAddress], + } +} + +Object.keys(config).forEach(chain => { + const { owners, tokens = [], blacklistedTokens, } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owners, tokens, fetchCoValentTokens: true, blacklistedTokens, }) + } +}) \ No newline at end of file From 5c14ff567468bd74df91f16ade0a0920ad7b98af Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:25:09 +0200 Subject: [PATCH 0067/1768] use ankr api for fetching ethereum tokens --- projects/helper/token.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/helper/token.js b/projects/helper/token.js index f122188e89..5fc065501d 100644 --- a/projects/helper/token.js +++ b/projects/helper/token.js @@ -97,7 +97,7 @@ async function ankrGetTokens(address, { onlyWhitelisted = true, skipCacheRead = jsonrpc: '2.0', method: 'ankr_getAccountBalance', params: { - blockchain: Object.values(ankrChainMapping).filter(i => i !== 'eth'), + blockchain: Object.values(ankrChainMapping), onlyWhitelisted, nativeFirst: true, skipSyncCheck: true, @@ -117,7 +117,7 @@ async function ankrGetTokens(address, { onlyWhitelisted = true, skipCacheRead = for (const [chain, values] of Object.entries(tokens)) { tokens[chain] = getUniqueAddresses(values) } - tokens.eth = await getETHTokens(address, onlyWhitelisted) + // tokens.eth = await getETHTokens(address, onlyWhitelisted) await setCache(project, key, tokenCache) return tokens From 880fc5a9896d7a0e8b91bd5f89ab4818533ef653 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 19 Aug 2024 12:35:35 +0200 Subject: [PATCH 0068/1768] fix:Adapter,Axelar (Crescent network seems down, comment) (#11340) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/alexar/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/alexar/index.js b/projects/alexar/index.js index f35001a02d..d3dd0f8e1f 100644 --- a/projects/alexar/index.js +++ b/projects/alexar/index.js @@ -10,7 +10,7 @@ const chainMapping = { bsc: 'binance' }; -const chainListSupply = ['juno', 'cosmos', 'comdex', 'carbon', 'crescent', 'injective', 'kujira', 'osmosis', 'persistence', 'stargaze', 'secret', 'stargaze', 'umee', 'evmos', 'terra2']; +const chainListSupply = ['juno', 'cosmos', 'comdex', 'carbon', /*'crescent',*/ 'injective', 'kujira', 'osmosis', 'persistence', 'stargaze', 'secret', 'stargaze', 'umee', 'evmos', 'terra2']; const chainListTotal = ['avax', 'bsc', 'moonbeam', 'polygon', 'fantom', 'arbitrum', 'aurora', 'celo', 'kava', 'mantle', 'ethereum', 'base']; From 555e024f1dee4691899ec4d4fa721a205d4a21bf Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:18:43 +0200 Subject: [PATCH 0069/1768] update yieldnest #11341 --- projects/yieldnest/index.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index 353c76b420..f69868f71d 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -1,14 +1,18 @@ const ADDRESSES = require('../helper/coreAssets.json') -const token = '0x09db87a538bd693e9d08544577d5ccfaa6373a48' +const YN_ETH = '0x09db87a538bd693e9d08544577d5ccfaa6373a48' +const YN_LSDE = '0x35Ec69A77B79c255e5d47D5A3BdbEFEfE342630c' module.exports = { ethereum: { tvl: async (api) => { - const ethBalance = await api.call({ abi: 'uint256:totalAssets', target: token }) - api.add(ADDRESSES.null, ethBalance) - return api.getBalances() + const ynethBalance = await api.call({ abi: 'uint256:totalAssets', target: YN_ETH }) + api.add(ADDRESSES.null, ynethBalance) + const lsdRegistry = '0x323C933df2523D5b0C756210446eeE0fB84270fd' + const lsds = await api.call({ abi: 'address[]:getAssets', target: lsdRegistry }) + const bals = await api.call({ abi: 'function assetBalances(address[]) view returns (uint256[])', target: YN_LSDE, params: [lsds] }) + api.add(lsds, bals) } }, } \ No newline at end of file From 85309c3811e6df6da658043c21a8bac6aade0858 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:05:36 +0200 Subject: [PATCH 0070/1768] fix:Adapter,Peerme (#11342) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/peerme/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/peerme/index.js b/projects/peerme/index.js index 77cad14bf3..2e94c842b0 100644 --- a/projects/peerme/index.js +++ b/projects/peerme/index.js @@ -11,10 +11,10 @@ const PROTOCOL_ADDRESSES = [ ]; async function getDaoAddresses() { - return await getConfig( + return (await getConfig( "peerme", API_BASE_URL + "/integrations/defi-llama/dao-addresses" - ); + )).filter(address => address !== null); } async function tvl() { From fe0c7b87089c4b622d007826289ef1bb69df3ac6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:50:08 +0200 Subject: [PATCH 0071/1768] update icpswap --- projects/icpswap/index.js | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/projects/icpswap/index.js b/projects/icpswap/index.js index 294d40baef..291c1d488a 100644 --- a/projects/icpswap/index.js +++ b/projects/icpswap/index.js @@ -1,28 +1,12 @@ const { get } = require('../helper/http') -const { toUSDTBalances } = require('../helper/balances') -const { PromisePool } = require('@supercharge/promise-pool') module.exports = { misrepresentedTokens: true, icp: { tvl }, } -async function tvl() { - let tvl = 0 - let pairs = await get('https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/pairs') - if (typeof pairs === 'string') pairs = JSON.parse(pairs.replace('},]', '}]')) - - const { errors } = await PromisePool.withConcurrency(15) - .for(pairs) - .process(async ({ pool_id }) => { - const res = await get(`https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/pool_tvl?poolId=${pool_id}&limit=1`) - if (res.length > 0 && res[0].tvlUSD < 100e6) - tvl += +res[0].tvlUSD - }) - - if (errors && errors.length) - throw errors[0] - - return toUSDTBalances(tvl) +async function tvl(api) { + let { tvlUSD } = await get('https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/overview') + api.addCGToken('tether', Math.round(tvlUSD)) } From 15b18bcd3ee60a6d55cecd97d2f2b45f8cc929d2 Mon Sep 17 00:00:00 2001 From: Cohiba Nan <132758148+Cohiban@users.noreply.github.com> Date: Mon, 19 Aug 2024 23:48:06 +0800 Subject: [PATCH 0072/1768] Remove bitcoin address (#11345) --- projects/ainn-layer2/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/ainn-layer2/index.js b/projects/ainn-layer2/index.js index 1c5871701f..6768c352a4 100644 --- a/projects/ainn-layer2/index.js +++ b/projects/ainn-layer2/index.js @@ -5,7 +5,6 @@ const BTCOwners = [ "bc1q6dtp7ayaj5k2zv0z5ayhkdsvmtvdqgyaa9zs53", "3H8cmLndtkBs7kiHByhHAddTzy8taUwYPt", "bc1pepsapf26n8y2f4uftlmhy60ksghx6rqlxdcj4uacfqrkcg6pmncs52rzuu", - "bc1qcmmkxfp2rawrp6yx55rez9jcqdnxtam8jhu2v2d9kz46upf948wq2usauv", "bc1qu4ru2sph5jatscx5xuf0ttka36yvuql7hl5h4c", "1JA46eiDpfx589wawn5RvtEXgwc518QfhZ", "bc1qaajdlp5yrj5f77wq2ndtfqnmsamvvxhpy95662zkzykn9qhvdgys580hcs", From 15a5a1625324301dc04e409470144741dec85b39 Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Tue, 20 Aug 2024 19:00:29 +0800 Subject: [PATCH 0073/1768] Add arbitrum for Pell Network (#11348) --- projects/pell/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pell/index.js b/projects/pell/index.js index 746bb039d5..5caac463b1 100644 --- a/projects/pell/index.js +++ b/projects/pell/index.js @@ -1,7 +1,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require('../helper/cache') -const chains = ['ethereum', 'merlin', 'bouncebit', 'btr', 'bsc', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob'] +const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob'] chains.forEach(chain => { module.exports[chain] = { From 0ca1a1452cad489e539158f898b3b4fb81a33392 Mon Sep 17 00:00:00 2001 From: ArmandLobster Date: Tue, 20 Aug 2024 13:38:05 +0200 Subject: [PATCH 0074/1768] Lobster Protocol Adapter (#11349) * Create index.js * Create config.js * Delete projects/lobster-protocol/config.js * Create config.js * Create abis.js * code refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lobster-protocol/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/lobster-protocol/index.js diff --git a/projects/lobster-protocol/index.js b/projects/lobster-protocol/index.js new file mode 100644 index 0000000000..f136ccff46 --- /dev/null +++ b/projects/lobster-protocol/index.js @@ -0,0 +1,30 @@ +const DHEDGE_FACTORY_ABI = "function getManagedPools(address manager) view returns (address[] managedPools)"; +const LOBSTER_POOL_ABI = "function getFundSummary() view returns (tuple(string name, uint256 totalSupply, uint256 totalFundValue))"; + +const CONFIG_DATA = { + arbitrum: { + dhedgeFactory: "0xffFb5fB14606EB3a548C113026355020dDF27535", + lobsterManager: "0x6EBb1B5Be9bc93858f71714eD03f67BF237473cB", + } +} + +async function tvl(api) { + const { dhedgeFactory, lobsterManager } = CONFIG_DATA[api.chain]; + + const pools = await api.call({ abi: DHEDGE_FACTORY_ABI, target: dhedgeFactory, params: lobsterManager, }); + const poolSummaries = await api.multiCall({ abi: LOBSTER_POOL_ABI, calls: pools, }) + api.addCGToken('tether', poolSummaries.reduce((acc, p) => acc + +p.totalFundValue/1e18, 0)) +} + +module.exports = { + misrepresentedTokens: true, + start: 1704067199, // Sunday 31 December 2023 23:59:59 + methodology: + "Aggregates total value of Lobster protocol vaults on Arbitrum", + arbitrum: { + tvl, + }, + hallmarks: [ + [1710971510, "First Arbitrum Vault Release"], + ], +} \ No newline at end of file From 7e6ef9ab84ee9dae922cd3e6dd3265532cf36c30 Mon Sep 17 00:00:00 2001 From: ttbbio Date: Tue, 20 Aug 2024 15:27:02 +0300 Subject: [PATCH 0075/1768] feat: Add cyberPerp adapter (#11351) Co-authored-by: Bohdan Ilchenko --- projects/cyberperp/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/cyberperp/index.js diff --git a/projects/cyberperp/index.js b/projects/cyberperp/index.js new file mode 100644 index 0000000000..70e531c520 --- /dev/null +++ b/projects/cyberperp/index.js @@ -0,0 +1,9 @@ +const { gmxExports } = require("../helper/gmx"); + +const vault = "0x35C301Df78a6eD459931F56fBa6Cb2ad71bE606b"; + +module.exports = { + iotaevm: { + tvl: gmxExports({ vault}), + }, +}; \ No newline at end of file From 2301925aabc50a2e2ace1100ddb1a7db164821fc Mon Sep 17 00:00:00 2001 From: H2 Finance Dev Date: Tue, 20 Aug 2024 20:27:15 +0800 Subject: [PATCH 0076/1768] add h2-finance v2 & v3 DEX TVLs (#11350) --- projects/h2-finance/index.js | 12 ++++++++++++ projects/h2-v3/index.js | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 projects/h2-finance/index.js create mode 100644 projects/h2-v3/index.js diff --git a/projects/h2-finance/index.js b/projects/h2-finance/index.js new file mode 100644 index 0000000000..c68597e616 --- /dev/null +++ b/projects/h2-finance/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports={ + misrepresentedTokens: true, + methodology: "Factory address (0x50704Ac00064be03CEEd817f41E0Aa61F52ef4DC) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", + cronos_zkevm: { + tvl: getUniTVL({ + factory: '0x50704Ac00064be03CEEd817f41E0Aa61F52ef4DC', + useDefaultCoreAssets: true, + }) + } +} \ No newline at end of file diff --git a/projects/h2-v3/index.js b/projects/h2-v3/index.js new file mode 100644 index 0000000000..6e444b0a3a --- /dev/null +++ b/projects/h2-v3/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + cronos_zkevm: { + factory: "0x301cbe34dd38Cf69295Bf2698DC9be3B9EECEdFa", + fromBlock: 79, + }, +}); \ No newline at end of file From fb625558e39cafc032528c100c0928c6d7e8ef31 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:28:24 +0200 Subject: [PATCH 0077/1768] tune vfat --- projects/vfat/index.js | 6 ++++-- projects/vfat/utils.js | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/projects/vfat/index.js b/projects/vfat/index.js index 45dfe145ae..3f69a48338 100644 --- a/projects/vfat/index.js +++ b/projects/vfat/index.js @@ -2,7 +2,7 @@ const { getLogs } = require('../helper/cache/getLogs'); const { sumTokens2, addUniV3LikePosition } = require('../helper/unwrapLPs'); const config = require('./config'); -const { sumLPBalances } = require('./utils'); +const { sumLPBalances, filteredV3LPTokens } = require('./utils'); // Helper function to fetch sickles async function fetchSickles(api, factory, fromBlockSickle) { @@ -175,9 +175,11 @@ async function tvlBaseOptimism(api) { await sumLPBalances(api, deployedAeroGauges.lp, sickles, stakingTokens); const pools = await api.multiCall({ abi: 'address:pool', calls: deployedAeroGauges.nft }); + const whitelistedPoolList = new Set(await filteredV3LPTokens({ api, lpTokens: pools, minLPValue: 50e3 })); const slot0s = await api.multiCall({ abi: 'function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, bool unlocked)', calls: pools }); await Promise.all(deployedAeroGauges.nft.map(async (gauge, i) => { + if (!whitelistedPoolList.has(pools[i])) return; const tick = slot0s[i].tick; const nftIds = (await api.multiCall({ abi: 'function stakedValues(address depositor) view returns (uint256[])', calls: sickles, target: gauge })).flat(); const positions = await api.multiCall({ abi: 'function positions(uint256 tokenId) view returns (uint96 nonce, address operator, address token0, address token1, int24 tickSpacing, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)', calls: nftIds, target: NonfungiblePositionManager, permitFailure: true, }); @@ -322,4 +324,4 @@ Object.keys(config).forEach(chain => { module.exports[chain] = { tvl } }) -module.exports.isHeavyProtocol = true +module.exports.isHeavyProtocol = true \ No newline at end of file diff --git a/projects/vfat/utils.js b/projects/vfat/utils.js index 0339c2e583..df8cbf5d8c 100644 --- a/projects/vfat/utils.js +++ b/projects/vfat/utils.js @@ -6,7 +6,7 @@ async function sumLPBalances(api, gauges, sickles, lpTokens) { lpTokens.forEach((lpToken, index) => lpTokens[index] = lpToken.toLowerCase()) let minLPValue = 4e3 if (lpTokens.length > 200) minLPValue = 15e3 - if (lpTokens.length > 400) minLPValue = 25e3 + if (lpTokens.length > 400) minLPValue = 40e3 const filteredLPSet = new Set(await filteredLPTokens({ api, lpTokens, minLPValue, })) @@ -24,7 +24,7 @@ async function sumLPBalances(api, gauges, sickles, lpTokens) { token = token.toLowerCase() return `${api.chain}:${gaugeTokenMapping[token] ?? token}` } - await sumTokens2({ api, transformAddress, tokens, owners: sickles }) + await sumTokens2({ api, transformAddress, tokens, owners: sickles, sumChunkSize: 10000, }) } // we are going to filter out tokens that we dont have price in the server and LP tokens with less than 1k value in it @@ -67,6 +67,35 @@ async function filteredLPTokens({ api, lpTokens, minLPValue = 10e3 }) { } +// we are going to filter out tokens that we dont have price in the server and LP tokens with less than 1k value in it +async function filteredV3LPTokens({ api, lpTokens, minLPValue = 10e3 }) { + const token0s = await api.multiCall({ abi: 'address:token0', calls: lpTokens, permitFailure: true, }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: lpTokens, permitFailure: true, }) + const tok1n0Bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: lpTokens.map((i, idx) => ({ target: token0s[idx], params: i})), permitFailure: true, }) + const tok1n1Bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: lpTokens.map((i, idx) => ({ target: token1s[idx], params: i})), permitFailure: true, }) + const allTokens = [token0s, token1s,].flat().filter(i => i).map(i => i.toLowerCase()) + const dummyBals = {} + allTokens.forEach(i => dummyBals[api.chain + ':' + i] = 1e20) // hack to cache token prices to memory + await Balances.getUSDValue(dummyBals) + + const filteredLPTokens = [] + for (let i = 0; i < lpTokens.length; i++) { + const lpBalance = new Balances({ chain: api.chain, }) + lpBalance.add(token0s[i], tok1n0Bals[i] ?? 0) + lpBalance.add(token1s[i], tok1n1Bals[i] ?? 0) + const lpValue = await lpBalance.getUSDValue() + if (lpValue < minLPValue) { // LP has less than 2k value, we ignore it + continue; + } + filteredLPTokens.push(lpTokens[i]) + } + + api.log(api.chain, 'filteredLPTokens', filteredLPTokens.length, 'out of', lpTokens.length, 'LP tokens are filtered out.') + return filteredLPTokens +} + + module.exports = { sumLPBalances, + filteredV3LPTokens, } \ No newline at end of file From 3f7903edf8583cac073a36c6275cb20109ea2a34 Mon Sep 17 00:00:00 2001 From: 0xGenesisDAO Date: Tue, 20 Aug 2024 15:33:32 +0300 Subject: [PATCH 0078/1768] add genesis dao (#11352) --- projects/genesis-dao/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/genesis-dao/index.js diff --git a/projects/genesis-dao/index.js b/projects/genesis-dao/index.js new file mode 100644 index 0000000000..060d5973b4 --- /dev/null +++ b/projects/genesis-dao/index.js @@ -0,0 +1,18 @@ +const genAddress = '0x99999999999997fceB5549c58aB66dF52385ca4d'; +const sGenAddress = '0x8888888888888e9b808caA0a8BB7e2268fd17351'; + +async function stakedGen(api) { + const sGenSupply = await api.call({ + abi: 'erc20:totalSupply', + target: sGenAddress + }); + + api.add(genAddress, sGenSupply) +} + +module.exports = { + ethereum: { + tvl: () => ({}), + staking: stakedGen + } +}; From d74eb83de0d5e2207ee6410bb4aec29653705f98 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 20 Aug 2024 15:06:53 +0200 Subject: [PATCH 0079/1768] cronos zk: add multicall --- projects/h2-finance/index.js | 13 ++----------- projects/helper/env.js | 12 +----------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/projects/h2-finance/index.js b/projects/h2-finance/index.js index c68597e616..6f884585f9 100644 --- a/projects/h2-finance/index.js +++ b/projects/h2-finance/index.js @@ -1,12 +1,3 @@ -const { getUniTVL } = require('../helper/unknownTokens') +const { uniTvlExport } = require('../helper/unknownTokens') -module.exports={ - misrepresentedTokens: true, - methodology: "Factory address (0x50704Ac00064be03CEEd817f41E0Aa61F52ef4DC) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", - cronos_zkevm: { - tvl: getUniTVL({ - factory: '0x50704Ac00064be03CEEd817f41E0Aa61F52ef4DC', - useDefaultCoreAssets: true, - }) - } -} \ No newline at end of file +module.exports= uniTvlExport('cronos_zkevm', '0x50704Ac00064be03CEEd817f41E0Aa61F52ef4DC') \ No newline at end of file diff --git a/projects/helper/env.js b/projects/helper/env.js index a5dd7389b1..0779759b7b 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -12,17 +12,7 @@ const DEFAULTS = { MULTIVERSX_RPC: 'https://api.multiversx.com', ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", - BSQUARED_RPC: "https://rpc.bsquared.network,https://b2-mainnet.alt.technology", // add manually, short name is b2-mainnet - BTR_RPC_MULTICALL: '0xc8818aaeaBF0dF9f3f3ffF54Ab185705177A6234', - DEFICHAIN_EVM_RPC_MULTICALL: '0x7fEf77CDe3B41221Cff54B84Ea89D2EBc6b53352', - BOUNCEBIT_RPC_MULTICALL: '0x493d616f5F9a64e5B3D527120E406439bdF29272', - ZKLINK_RPC_MULTICALL: '0xa8738F57538E3Bb73872d1133F2358c7Fe56FD35', - REAL_RPC: 'https://real.drpc.org', // added manually short name is re-al - TAIKO_RPC: 'https://rpc.taiko.xyz', // added manually short name is tko-mainnet - REAL_RPC_MULTICALL: '0xcA11bde05977b3631167028862bE2a173976CA11', - SEI_RPC_MULTICALL: '0xcA11bde05977b3631167028862bE2a173976CA11', - SEI_RPC: 'https://evm-rpc.sei-apis.com/', - ETLK_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + CRONOS_ZKEVM_RPC_MULTICALL: '0x9b122BF7a96F24EFB7A2b5765c635909dB3458F7', } const ENV_KEYS = [ From 36bf572f760d52a533cea24c19f00ac3fccddf31 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 20 Aug 2024 19:46:01 +0100 Subject: [PATCH 0080/1768] update to LOCK staking contract --- projects/houdiniswap/index.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/projects/houdiniswap/index.js b/projects/houdiniswap/index.js index 837ba71d33..2586d7e86a 100644 --- a/projects/houdiniswap/index.js +++ b/projects/houdiniswap/index.js @@ -1,15 +1,8 @@ -const { stakings } = require("../helper/staking") +const { staking } = require("../helper/staking") module.exports={ ethereum:{ tvl:()=>({}), - staking: stakings([ - "0x488B813ED84aB52857cA90ade050f8ca126bEda6", - "0xf9FA02cC165dBd70fF34d27b5AC9E0AE6D74D756", - "0xE42aDCB4B9F2e3E6acb70399c420Cb6D6795B09d", - "0xE3507B38342CCB9Aa03E5AF2deA6C1F54351F553", - "0xf7E1edF3E4EC64360aFB739EBD2c0F40A5CC57D3", - "0x979a7307Dd7Ba386b52F08a9A35a26807affbCC9" - ], "0x888cea2bbdd5d47a4032cf63668d7525c74af57a") + staking: staking("0x4401c51110e7d3a970Fe48AeaeE8249b181210a1","0x922D8563631B03C2c4cf817f4d18f6883AbA0109") } } \ No newline at end of file From 2494137e4a7e6cd3d3fefcfe8349ba3837b3c309 Mon Sep 17 00:00:00 2001 From: 0xGenesisDAO Date: Tue, 20 Aug 2024 22:15:08 +0300 Subject: [PATCH 0081/1768] Add Treasury to Genesis (#11353) * add treasury to genesis * Update genesis-dao.js --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/treasury/genesis-dao.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/treasury/genesis-dao.js diff --git a/projects/treasury/genesis-dao.js b/projects/treasury/genesis-dao.js new file mode 100644 index 0000000000..3757a56759 --- /dev/null +++ b/projects/treasury/genesis-dao.js @@ -0,0 +1,7 @@ +const { treasuryExports } = require("../helper/treasury"); + +module.exports = treasuryExports({ + ethereum: { + owners: ['0x31b6a4dca90fabf29879143ca5bb2c10e8a11e4c'], ownTokens: ['0x99999999999997fceB5549c58aB66dF52385ca4d'] + }, +}) From 83055e3b01e69d2ab96fb139d36074f1a4daec06 Mon Sep 17 00:00:00 2001 From: Brian Bodollo Date: Wed, 21 Aug 2024 03:15:49 +0800 Subject: [PATCH 0082/1768] feat: added band chain to stride tvl (#11354) --- projects/helper/chains.json | 1 + projects/stride/index.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index ded34e3f96..9225969f62 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -19,6 +19,7 @@ "aura", "aurora", "avax", + "band", "base", "beam", "bevm", diff --git a/projects/stride/index.js b/projects/stride/index.js index be7bb722a0..da125f6422 100644 --- a/projects/stride/index.js +++ b/projects/stride/index.js @@ -17,7 +17,7 @@ const chains = { juno: { chainId: "juno-1", denom: "ujuno", - coinGeckoId: "juno-network", + coinGeckoId: "juno-network", }, osmosis: { @@ -85,6 +85,12 @@ const chains = { denom: "aISLM", coinGeckoId: "islamic-coin", }, + + band: { + chainId: "laozi-mainnet", + denom: "uband", + coinGeckoId: "band-protocol", + } }; // inj uses 1e18 - https://docs.injective.network/learn/basic-concepts/inj_coin#base-denomination From 2117c1ba18a8035bc35e58511b2c3b39551ae204 Mon Sep 17 00:00:00 2001 From: Hacker <57176420+Havoc19@users.noreply.github.com> Date: Wed, 21 Aug 2024 00:46:37 +0530 Subject: [PATCH 0083/1768] added tvl logic for velvet v3 (#11355) --- projects/velvet-capital-v3/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/velvet-capital-v3/index.js diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js new file mode 100644 index 0000000000..aae6f8a296 --- /dev/null +++ b/projects/velvet-capital-v3/index.js @@ -0,0 +1,24 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + const indexes = await api.fetchList({ lengthAbi: 'uint256:portfolioId', itemAbi: 'function getPortfolioList(uint256) view returns (address)', target: config[api.chain] }) + const [tokens, vaults] = await Promise.all([ + api.multiCall({ abi: 'address[]:getTokens', calls: indexes }), + api.multiCall({ abi: 'address:vault', calls: indexes }), + ]) + + const ownerTokens = tokens.map((tokens, i) => [tokens, vaults[i]]); + return sumTokens2({ api, ownerTokens, resolveLP: true }); +} + +module.exports = { + methodology: 'calculates overall value deposited across different protocol portfolios', +} + +const config = { + base : '0xf93659fb357899e092813bc3a2959ceDb3282a7f' +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From ebf335f5d4cb08fea42f38380d938ec7f1fe3061 Mon Sep 17 00:00:00 2001 From: Trisome-Bedrock <151131601+Trisome-Bedrock@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:37:47 +0800 Subject: [PATCH 0084/1768] add FBTC1 on Ethereum and Mantle networks (#11358) --- projects/unibtc/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/unibtc/index.js b/projects/unibtc/index.js index d6ec58d877..1696cbbf24 100644 --- a/projects/unibtc/index.js +++ b/projects/unibtc/index.js @@ -1,10 +1,13 @@ const ADDRESSES = require('../helper/coreAssets.json') const defaultVault = '0xF9775085d726E782E83585033B58606f7731AB18' +const fbtc0 = '0xc96de26018a54d51c097160568752c4e3bd6c364' +const fbtc1 = '0xd681C5574b7F4E387B608ed9AF5F5Fc88662b37c' + const config = { ethereum: { vault: '0x047D41F2544B7F63A8e991aF2068a363d210d6Da', - tokens: [ADDRESSES['ethereum'].WBTC, '0xc96de26018a54d51c097160568752c4e3bd6c364'] + tokens: [ADDRESSES['ethereum'].WBTC, fbtc0, fbtc1] }, optimism: { vault: defaultVault, @@ -12,7 +15,7 @@ const config = { }, mantle: { vault: defaultVault, - tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364'] + tokens: [fbtc0, fbtc1] }, bsquared: { vault: defaultVault, From 77f217084c49312a8b8460db9db062a420538612 Mon Sep 17 00:00:00 2001 From: MindGamesM Date: Wed, 21 Aug 2024 08:57:43 +0300 Subject: [PATCH 0085/1768] Added tvl logic for BlastUP (#11356) * add blastup project * Update index.js * update tvl * code refactor --------- Co-authored-by: MindGames Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/blastup/index.js | 25 ++++++++++++++++++++----- projects/helper/tokenMapping.js | 3 +++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/projects/blastup/index.js b/projects/blastup/index.js index a44fce37bd..916a4b5be3 100644 --- a/projects/blastup/index.js +++ b/projects/blastup/index.js @@ -1,10 +1,25 @@ -const { staking } = require("../helper/staking") -const stakingpool = "0x0E84461a00C661A18e00Cab8888d146FDe10Da8D" +const { staking } = require("../helper/staking"); +const ADDRESSES = require("../helper/coreAssets.json"); -const ADDRESSES = require("../helper/coreAssets.json") +const stakingpool = "0x0E84461a00C661A18e00Cab8888d146FDe10Da8D"; + +const blastup = "0x59c159e5a4f4d1c86f7abdc94b7907b7473477f6"; +const lockedBlastup = "0xf8a5d147a3a3416ab151758d969eff15c27ab743"; +const stakingContracts = [ + "0x115ebda9489cf250ff0e8ea9f473c96c222a874c", // LockedBlastUPStaking 6% + "0x2e36e05e7ecd36164ada93752a9a82c1efaa9582", // LockedBlastUPStaking 12% + "0xf399110e921d25dd1ad6a0eef020991df3dd0cd3", // LockedBlastUPStaking 18% + "0xb0d7902685a4f4d916a21a0ed721298d590cd9cd", // BlastUPStaking 6% + "0x520bf8e72f9e808102eb421fb03764624d1984e9", // BlastUPStaking 12% + "0xc3524c6fdce9e60c1a1ddce54953973264097542", // BlastUPStaking 18% +] module.exports = { blast: { - tvl: staking(stakingpool, [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]), + tvl: staking([stakingpool], [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]), + staking: staking(stakingContracts, [blastup, lockedBlastup]), }, -} + hallmarks: [ + [1717575654, "IDO Farming Launch"], + ], +} \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index d3fbf64100..5d1df9ad32 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -51,6 +51,9 @@ const fixBalancesTokens = { '0x2911a1AB18546cb501628Be8625C7503a2A7DB54': { coingeckoId: "la-coin", decimals: 18 }, '0x42c8c9c0f0a98720dacdaeac0c319cb272b00d7e': { coingeckoId: "ethereum", decimals: 18 }, '0xf54b8cb8eeee3823a55dddf5540ceaddf9724626': { coingeckoId: "wrapped-bitcoin", decimals: 8 }, + }, + blast: { + '0xf8a5d147a3a3416ab151758d969eff15c27ab743': { coingeckoId: "blast:0x59c159e5a4f4d1c86f7abdc94b7907b7473477f6", decimals: 0 }, } } From 18e2c087e76d44fd1e918a3c9b2644b51a2a588c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:49:02 +0200 Subject: [PATCH 0086/1768] ether-fi: add vaults #11357 --- projects/etherfi-lrt/index.js | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index 576cdac1e0..cb839dd703 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -1,17 +1,15 @@ -const ADDRESSES = require('../helper/coreAssets.json'); -const sdk = require('@defillama/sdk'); - -async function tvl(api) { - const balETH2 = await api.call({ - abi: "uint256:totalSupply", - target: '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', - }); - api.add(ADDRESSES.ethereum.EETH, BigInt(balETH2)); -} +const { sumTokensExport } = require('../helper/unwrapLPs'); +const vaults = [ + '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', + '0x7223442cad8e9cA474fC40109ab981608F8c4273', + '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', +] module.exports = { doublecounted: true, ethereum: { - tvl, + tvl: sumTokensExport({ owners: vaults, fetchCoValentTokens: true, tokenConfig: { + onlyWhitelisted: false, + }}), }, -}; +} \ No newline at end of file From f9b21c0e5fd5005f6e299ab7f484cb9bb5a279c3 Mon Sep 17 00:00:00 2001 From: Joel Mun Date: Wed, 21 Aug 2024 18:53:58 +0800 Subject: [PATCH 0087/1768] feat: update zkLend staked amount (#11364) * feat: update zkLend staked amount * minor fix --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/zklend/abi.js | 32 ++++++++++++++++++++++++- projects/zklend/index.js | 50 ++++++++++++++++++---------------------- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/projects/zklend/abi.js b/projects/zklend/abi.js index 586b6da1cb..be9c79fd6b 100644 --- a/projects/zklend/abi.js +++ b/projects/zklend/abi.js @@ -20,7 +20,37 @@ const market = [ ] const marketAbi = {} market.forEach(i => marketAbi[i.name] = i) +const staking = [ + { + name: "core::integer::u256", + type: "struct", + members: [ + { + name: "low", + type: "core::integer::u128", + }, + { + name: "high", + type: "core::integer::u128", + }, + ], + }, + { + "type": "function", + "name": "get_total_staked_amount", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, +] +const stakingAbi = {} +staking.forEach(i => stakingAbi[i.name] = i) module.exports = { - marketAbi + marketAbi, + stakingAbi, } \ No newline at end of file diff --git a/projects/zklend/index.js b/projects/zklend/index.js index b9b7c1bbf8..721c7b96a2 100644 --- a/projects/zklend/index.js +++ b/projects/zklend/index.js @@ -1,46 +1,42 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { multiCall, sumTokens } = require('../helper/chain/starknet') -const { marketAbi } = require('./abi'); +const { multiCall, sumTokens, call } = require('../helper/chain/starknet') +const { marketAbi, stakingAbi, } = require('./abi'); const market = '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05' const stakingContract = '0x0212c219a68c8fe38f37951123d1ec877570dfa891de270aa4f8634c5e60bc23' const assets = [ - ADDRESSES.starknet.WBTC, - ADDRESSES.starknet.ETH, - ADDRESSES.starknet.USDC, - ADDRESSES.starknet.DAI, - ADDRESSES.starknet.DAI_1, - ADDRESSES.starknet.USDT, - ADDRESSES.starknet.WSTETH, - ADDRESSES.starknet.STRK + ADDRESSES.starknet.WBTC, + ADDRESSES.starknet.ETH, + ADDRESSES.starknet.USDC, + ADDRESSES.starknet.DAI, + ADDRESSES.starknet.DAI_1, + ADDRESSES.starknet.USDT, + ADDRESSES.starknet.WSTETH, + ADDRESSES.starknet.STRK ] async function tvl(api) { - return sumTokens({ api, owner: market, tokens: assets }) + return sumTokens({ api, owner: market, tokens: assets }) } async function staking(api) { - return sumTokens({ - api, - owner: stakingContract, - tokens: [ - ADDRESSES.starknet.ZEND - ] - }) + const amountStakedAtStakingContract = await call({ target: stakingContract, abi: stakingAbi.get_total_staked_amount }) + api.add(ADDRESSES.starknet.ZEND, amountStakedAtStakingContract) + return sumTokens({ api, owner: market, tokens: [ADDRESSES.starknet.ZEND] }) } async function borrowed(api) { - let data = await multiCall({ calls: assets, target: market, abi: marketAbi.get_total_debt_for_token }); - data = data.map(i => +i) - api.addTokens(assets, data) + let data = await multiCall({ calls: assets, target: market, abi: marketAbi.get_total_debt_for_token }); + data = data.map(i => +i) + api.addTokens(assets, data) } module.exports = { - methodology: 'Value of user supplied asset on zkLend is considered as TVL', - starknet: { - tvl, - borrowed, - staking, - }, + methodology: 'Value of user supplied asset on zkLend is considered as TVL', + starknet: { + tvl, + borrowed, + staking, + }, } From be18b21a597b092f6d13acea40ef661950d4c3b5 Mon Sep 17 00:00:00 2001 From: lyfmantle <161433628+lyfmantle@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:55:12 +0800 Subject: [PATCH 0088/1768] feat: update fbtc static addresses (#11360) --- projects/fbtc/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/fbtc/index.js b/projects/fbtc/index.js index 27ec3a12b3..217c5c55e5 100644 --- a/projects/fbtc/index.js +++ b/projects/fbtc/index.js @@ -2,8 +2,13 @@ const { sumTokens } = require('../helper/chain/bitcoin') const sdk = require('@defillama/sdk') const staticAddresses = [ - // https://docs.fbtc.com/security/bitcoin-reserve-address 'bc1qr5nz7n8ulcdz0w3s6fska80fawxhvqlh273qypm3rkjequ9wpmhs65ppw7', + 'bc1qhu98nf6ddz6ja73rn72encdr8ezsyhexwpdzap0vcs7lg2wpmrnq5ygfsl', + 'bc1qg6asmzjr7nr5f5upg3xqyrdxl2tq8ef58hha7t0s82mzzx6zjxesyccp4h', + 'bc1qxe3md4lehg8gmrlx3e8xqju5mytt266l4hcy8khl6tm5mahghmeqtxlgqq', + 'bc1qy48h0kuv0r3e330wjfs6r74sk49pkzumnm907t5mhqjxml22r3ss2ucuxc', + '32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', + // https://docs.fbtc.com/security/bitcoin-reserve-address 'bc1q7jgulg69frc8zuzy0ng8d5208kae7t0twyfjwm', 'bc1q6c3c0t3zvnphce37ufr4yz9veaqvew2wg0shwr', '3HjNJWcn2ayFLikzmKRaFtcbLufYChQo3T', @@ -25,4 +30,4 @@ module.exports = { bitcoin: { tvl, } -} \ No newline at end of file +} From fcdc33f99c5804da5ce23c5ca675c887e48da7cd Mon Sep 17 00:00:00 2001 From: AbstraDexXYZ <155727634+AbstraDexXYZ@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:56:38 +0700 Subject: [PATCH 0089/1768] Abstra dex (#11361) * abstraDex * abstraDex * abstraDex-fix * Abstradex --- projects/abstraDex/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/abstraDex/index.js b/projects/abstraDex/index.js index ac6ecf1f30..823febf75e 100644 --- a/projects/abstraDex/index.js +++ b/projects/abstraDex/index.js @@ -1,4 +1,6 @@ + + const { getUniTVL } = require("../helper/unknownTokens"); const config = { @@ -7,6 +9,7 @@ const config = { zeta: '0x174c4C03DfeA09682728A5959A253bf1F7C7766F', blast: '0xA7afB6163c331DDb0845843889D6f9544328846F', cyeth: '0x174c4c03dfea09682728a5959a253bf1f7c7766f', + cronos_zkevm: '0x76D1fC018676f8A973474C24F40A2e14e401b770', } module.exports = { @@ -15,4 +18,5 @@ module.exports = { Object.keys(config).forEach(chain => { module.exports[chain] = { tvl: getUniTVL({ factory: config[chain], useDefaultCoreAssets: true, }), } -}) \ No newline at end of file +}) + From fdcb1ee92414ed8a10fc20e66252ca52df6e2a5f Mon Sep 17 00:00:00 2001 From: juntingzhang <98256859+juntingzhang@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:57:21 +0800 Subject: [PATCH 0090/1768] feat: add manta cedefi yield (#11362) --- projects/manta-myield/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/manta-myield/index.js diff --git a/projects/manta-myield/index.js b/projects/manta-myield/index.js new file mode 100644 index 0000000000..103f0e0a58 --- /dev/null +++ b/projects/manta-myield/index.js @@ -0,0 +1,14 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") + +const tokens = [ + "0x1468177DbCb2a772F3d182d2F1358d442B553089", // "mBTC" + "0xACCBC418a994a27a75644d8d591afC22FaBA594e", // "mETH" + "0x649d4524897cE85A864DC2a2D5A11Adb3044f44a", // "mUSD" +] +const mTokenStakeContract = "0x1B9bcc6644CC9b5e1F89aBaAb66904F5a562d4a1" + +module.exports = { + manta: { + tvl: sumTokensExport({ owner: mTokenStakeContract, tokens }), + }, +} \ No newline at end of file From f9bf678e5594e1fa6f357ff752406d637f92cc48 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:34:15 +0200 Subject: [PATCH 0091/1768] ankr cache: retain prev tokens --- projects/helper/token.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/token.js b/projects/helper/token.js index 5fc065501d..c84b3e14d8 100644 --- a/projects/helper/token.js +++ b/projects/helper/token.js @@ -106,7 +106,7 @@ async function ankrGetTokens(address, { onlyWhitelisted = true, skipCacheRead = id: 42 } }; - const tokens = {} + const tokens = cache.tokens ?? {} const { data: { result: { assets } } } = await axios.request(options) const tokenCache = { timestamp: timeNow, tokens, } for (const asset of assets) { From 2c1dbe40cfbfbf9f18402b184487983e099f7d1d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 21 Aug 2024 07:45:05 -0400 Subject: [PATCH 0092/1768] double2win (#11344) --- projects/double2win/config.js | 24 +++++++++++++ projects/double2win/index.js | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 projects/double2win/config.js create mode 100644 projects/double2win/index.js diff --git a/projects/double2win/config.js b/projects/double2win/config.js new file mode 100644 index 0000000000..262c978956 --- /dev/null +++ b/projects/double2win/config.js @@ -0,0 +1,24 @@ +module.exports = { + arbitrum: { + uniswapV2Vault: { + doubleContract: '0xBf212dEE0aea6531dEb0B02be6E70b527dDF8246', + type: 'v2-vault' + }, + uniswapV2Migration: { + doubleContract: '0x1c6E7CE03ae7a9A252BcE0C9F871654dBB0C7ca5', + type: 'v2-vault' + }, + uniswapV3Vault: { + doubleContract: '0x07116C5ED5cBb49464f64926Ba152B8985fe3AFf', + type: 'v3-vault' + }, + uniswapV3Migration: { + doubleContract: '0x99F980fa0b1939A0A1033092EF2a668df8D8b70D', + type: 'v3-vault' + }, + assetVault: { + doubleContract: '0x7C09A9c30736F17043Fe6D0C0A3D03a7Cf6e78FD', + type: 'asset-vault' + }, + } +}; diff --git a/projects/double2win/index.js b/projects/double2win/index.js new file mode 100644 index 0000000000..ebb95389ca --- /dev/null +++ b/projects/double2win/index.js @@ -0,0 +1,63 @@ +const config = require("./config") +const { sumTokens2 } = require('../helper/unwrapLPs') +const { cachedGraphQuery } = require('../helper/cache') + +const subgraphs = { + "arbitrum": "https://api.studio.thegraph.com/query/16975/double-arbitrum/version/latest", +} + +async function getTokens(chain) { + const graphQuery = ` + { + assetTokens(where: {amount_gt: "0"}) { + tokenAddress + } + migrations(where: {pair_starts_with: "0x", lpAmount_gt: "0"}) { + pair + ammType + } + liquidities(where: {pair_starts_with: "0x", lpAmount_gt: "0"}) { + pair + ammType + } + } + ` + + const { assetTokens, migrations, liquidities } = await cachedGraphQuery(`double2win/${chain}`, subgraphs[chain], graphQuery) + + return { assets: assetTokens.map(i => i.tokenAddress), v2Tokens: migrations.concat(liquidities).filter(i => i.ammType === 'UniswapV2').map(i => i.pair) } +} + +module.exports = { + doublecounted: true, +} + +Object.keys(config).forEach((chain) => { + const configs = Object.values(config[chain]) + + module.exports[chain] = { + tvl: async (api) => { + const v2Vaults = [] + const v3Vaults = [] + const assetVaults = [] + configs.forEach((config) => { + switch (config.type) { + case 'v2-vault': + v2Vaults.push(config.doubleContract) + break + case 'v3-vault': + v3Vaults.push(config.doubleContract) + break + case 'asset-vault': + assetVaults.push(config.doubleContract) + break + } + }) + const { assets, v2Tokens } = await getTokens(chain) + await sumTokens2({ resolveUniV3: true, api, owners: v3Vaults }) + await sumTokens2({ owners: assetVaults, tokens: assets, api }) + return sumTokens2({ owners: v2Vaults, tokens: v2Tokens, resolveLP: true, api }) + } + } + +}) From d97d878f160f6686e0232d38afecbe83c6ec16b8 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:15:14 +0100 Subject: [PATCH 0093/1768] add new wallet pstake btc (#11368) --- projects/pstake-btc/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 8fc11f2365..7076dd84c4 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -1,7 +1,7 @@ const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require("@defillama/sdk"); -const owner = "bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d"; +const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl"]; module.exports = { methodology: `Total amount of BTC in ${owner}.`, From 4e4ffb9140b29340ceef552afb3391b6907213e4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 21 Aug 2024 15:58:33 +0200 Subject: [PATCH 0094/1768] update xrpl dex --- projects/xrpl-dex/app.js | 35 ++++++++++++++++++----------------- projects/xrpl-dex/index.js | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js index 178092d168..1dcb854b5d 100644 --- a/projects/xrpl-dex/app.js +++ b/projects/xrpl-dex/app.js @@ -43,8 +43,8 @@ const fetchPoolReserves = async (pool, atLedgerIndex) => { }); const xrplResponseJson = await xrplResponse.json(); return { - token0: parseReserve(xrplResponseJson.result.amm.amount), - token1: parseReserve(xrplResponseJson.result.amm.amount2), + token0: parseReserve(xrplResponseJson.result.amm?.amount), + token1: parseReserve(xrplResponseJson.result.amm?.amount2), }; }; @@ -89,6 +89,7 @@ const discoverPools = async (nextMarker, isBinary, atLedgerIndex, poolsFound = [ }; const parseReserve = (reserveData) => { + if (!reserveData) return null; const reserveIsXrp = typeof reserveData === "string"; return { currency: reserveIsXrp ? "XRP" : reserveData.currency, @@ -130,13 +131,14 @@ async function main() { const projectKey = 'xrpl-dex' const cacheKey = 'cache' let { allPools, lastPoolUpdate, lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) + lastPoolUpdate = false if (!lastPoolUpdate || timeNow - lastPoolUpdate > 3 * aDayInSeconds) { // try { - console.time("xrpl-dex fetch pool list"); - allPools = await discoverPools(null, 1); - console.timeEnd("xrpl-dex fetch pool list"); - lastPoolUpdate = getTimeNow(); - await setCache(projectKey, cacheKey, { allPools, lastPoolUpdate, lastDataUpdate, tvl }) + console.time("xrpl-dex fetch pool list"); + allPools = await discoverPools(null, 1); + console.timeEnd("xrpl-dex fetch pool list"); + lastPoolUpdate = getTimeNow(); + await setCache(projectKey, cacheKey, { allPools, lastPoolUpdate, lastDataUpdate, tvl }) // } catch (e) { // console.error(e) // } @@ -149,17 +151,16 @@ async function main() { tvl = await transformDexBalances({ chain: 'ripple', - data: poolsWithReserves.map(i => ({ - token0: i.token0Reserve.currency, - token0Bal: i.token0Reserve.amount, - token1: i.token1Reserve.currency, - token1Bal: i.token1Reserve.amount, - })), + data: poolsWithReserves + .filter(i => i.token0Reserve && i.token1Reserve) + .map(i => ({ + token0: i.token0Reserve.currency, + token0Bal: i.token0Reserve.amount, + token1: i.token1Reserve.currency, + token1Bal: i.token1Reserve.amount, + })), }) await setCache(projectKey, cacheKey, { - allPools, lastPoolUpdate, lastDataUpdate: getTimeNow(), tvl: { - ripple: tvl.ripple, - 'ripple:XRP': tvl['ripple:XRP'], - } + allPools, lastPoolUpdate, lastDataUpdate: getTimeNow(), tvl, }) } \ No newline at end of file diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index 0de17de24c..8841ed5aee 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -20,7 +20,7 @@ async function tvl() { const projectKey = 'xrpl-dex' const cacheKey = 'cache' let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds) + if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !Object.keys(tvl).length) throw new Error("stale/missing tvl data"); return tvl } \ No newline at end of file From 29ad813cd524d18a94e6ff33f98147c042fef81a Mon Sep 17 00:00:00 2001 From: TJ <58812386+TJ-2@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:19:33 +0200 Subject: [PATCH 0095/1768] Add Meridian Swaps (#11366) --- projects/meridian-swap/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 projects/meridian-swap/index.js diff --git a/projects/meridian-swap/index.js b/projects/meridian-swap/index.js new file mode 100644 index 0000000000..c6aba3608e --- /dev/null +++ b/projects/meridian-swap/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports={ + misrepresentedTokens: true, + telos:{ + tvl: getUniTVL({ factory: '0x1F2542D8F784565D526eeaDC9F1ca8Fbb75e5996', useDefaultCoreAssets: true }), + } +} \ No newline at end of file From 69a40bbd2e2cdfe942f8446c18e710659b6aae7b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:20:00 -0400 Subject: [PATCH 0096/1768] Track noble assets (#11370) * added USDC and USDY tracking for Noble ecosystem * code refactor --------- Co-authored-by: twothirtyfive --- projects/helper/chain/cosmos.js | 8 ++++++-- projects/helper/coreAssets.json | 4 ++++ projects/helper/tokenMapping.js | 6 +++++- projects/noble/index.js | 30 ++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 projects/noble/index.js diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index 535ce0d9c7..a5aaa88520 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -42,7 +42,8 @@ const endPoints = { nolus: "https://pirin-cl.nolus.network:1317", nibiru: "https://lcd.nibiru.fi", bostrom: "https://lcd.bostrom.cybernode.ai", - joltify: "https://lcd.joltify.io" + joltify: "https://lcd.joltify.io", + noble: "https://api.noble.xyz" }; const chainSubpaths = { @@ -75,7 +76,10 @@ async function query(url, block, chain) { return (await get(endpoint)).result; } -async function queryV1Beta1({ chain, paginationKey, block, url } = {}) { +async function queryV1Beta1({ chain, paginationKey, block, url, api } = {}) { + if (api) { + chain = api.chain + } const subpath = chainSubpaths[chain] || "cosmos"; let endpoint = `${getEndpoint(chain)}/${subpath}/${url}`; if (block !== undefined) { diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index e5f2cc8828..b3cb004d42 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1887,5 +1887,9 @@ }, "neutron": { "NTRN": "untrn" + }, + "noble": { + "USDC": "uusdc", + "USDY": "ausdy" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 5d1df9ad32..1136c5aa52 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -54,7 +54,11 @@ const fixBalancesTokens = { }, blast: { '0xf8a5d147a3a3416ab151758d969eff15c27ab743': { coingeckoId: "blast:0x59c159e5a4f4d1c86f7abdc94b7907b7473477f6", decimals: 0 }, - } + }, + noble: { + [ADDRESSES.noble.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, + [ADDRESSES.noble.USDY]: { coingeckoId: "ondo-us-dollar-yield", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/noble/index.js b/projects/noble/index.js new file mode 100644 index 0000000000..ec6c789752 --- /dev/null +++ b/projects/noble/index.js @@ -0,0 +1,30 @@ +const { queryV1Beta1 } = require('../helper/chain/cosmos'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const NOBLE_DENOMS_URL = 'bank/v1beta1/denoms_metadata'; +const NOBLE_SUPPLY_URL = 'bank/v1beta1/supply/'; + +const IGNORE_DENOMS = ['ufrienzies', 'ustake']; + +async function tvl(api) { + const { metadatas } = await queryV1Beta1({ api, url: NOBLE_DENOMS_URL }); + + for (const metadata of metadatas) { + const baseDenom = metadata.base; + + // ignore invalid denoms + if (IGNORE_DENOMS.includes(baseDenom)) + continue; + + // fetch supply for denom + const { amount } = await queryV1Beta1({ api, url: `${NOBLE_SUPPLY_URL}${baseDenom}` }); + api.add(baseDenom, amount.amount); + } + return sumTokens2({ api }); +} + +module.exports = { + noble: { + tvl, + }, +}; From f6dd35194982ad1cfde4bd24db6f43abb80bcb4f Mon Sep 17 00:00:00 2001 From: shafu Date: Wed, 21 Aug 2024 18:21:20 +0300 Subject: [PATCH 0097/1768] Add weETH vault (#11371) --- projects/dyad/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/dyad/index.js b/projects/dyad/index.js index ad98f5fab9..c6f9545a9f 100644 --- a/projects/dyad/index.js +++ b/projects/dyad/index.js @@ -6,6 +6,7 @@ const vaults = [ // "0xf3768D6e78E65FC64b8F12ffc824452130BD5394", // Kerosene is own token "0x3D72f7Fc3A9537e1fcC6FBF91AF55CcF2c5C4ed0", "0x3FC5c0e19b6287f25EB271c2E8e7Ba898FE7ab29", + "0x5B74DD13D4136443A7831fB7AD139BA123B5071B", ] async function tvl(api) { From 90573d69e5be58f597f163b819ac445bc00b945a Mon Sep 17 00:00:00 2001 From: LtSnakePlissken Date: Wed, 21 Aug 2024 17:22:07 +0200 Subject: [PATCH 0098/1768] Update index.js (#11373) Added Rootstock (RSK) to list of chains. --- projects/elkfinance/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/elkfinance/index.js b/projects/elkfinance/index.js index b6f6026c62..86c844e12e 100644 --- a/projects/elkfinance/index.js +++ b/projects/elkfinance/index.js @@ -31,7 +31,8 @@ const factories = { base: "0xfbb4E52FEcc90924c79F980eb24a9794ae4aFFA4", linea: "0xfbb4E52FEcc90924c79F980eb24a9794ae4aFFA4", velas: "0xfbb4E52FEcc90924c79F980eb24a9794ae4aFFA4", - q: "0xfbb4E52FEcc90924c79F980eb24a9794ae4aFFA4" + q: "0xfbb4E52FEcc90924c79F980eb24a9794ae4aFFA4", + rsk: "0x69D10bc18cd588a4B70F836A471D4e9c2Fd86092" } function chainTvl(chain) { From 0e070fefa38bb4e88da01833229b56ff51db0dd0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:52:38 -0400 Subject: [PATCH 0099/1768] Add MetaStreet Airdrop Pass functionality (#11367) * add metastreet-airdrop-pass * code refactor * code refactor --------- Co-authored-by: wegory --- projects/delagate-xyz/index.js | 25 +++++++++++++++++++++++ projects/helper/tokenMapping.js | 2 +- projects/helper/unwrapLPs.js | 4 ++-- projects/metastreet-airdrop-pass/index.js | 17 +++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 projects/delagate-xyz/index.js create mode 100644 projects/metastreet-airdrop-pass/index.js diff --git a/projects/delagate-xyz/index.js b/projects/delagate-xyz/index.js new file mode 100644 index 0000000000..0eb3f51366 --- /dev/null +++ b/projects/delagate-xyz/index.js @@ -0,0 +1,25 @@ +const { getLogs2, } = require('../helper/cache/getLogs') +const { getUniqueAddresses } = require('../helper/tokenMapping') +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + const tokens = await getLogs2({ + api, + factory: '0x00000000000000447e69651d841bD8D104Bed493', + fromBlock: 18184587, + eventAbi: 'event DelegateERC721 (address indexed from, address indexed to, address indexed contract, uint256 tokenId, bytes32 rights, bool enable)', + customCacheFunction: ({ cache, logs }) => { + if (!cache.logs) cache.logs = [] + cache.logs.push(...logs.map(i => i.contract)) + cache.logs = getUniqueAddresses(cache.logs) + return cache + }, + }) + return sumTokens2({ owner: '0xc2e257476822377dfb549f001b4cb00103345e66', tokens, permitFailure: true, sumChunkSize: 50 }) +} + +module.exports = { + ethereum: { + tvl, + }, +} \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 1136c5aa52..e5f430de38 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -63,7 +63,7 @@ const fixBalancesTokens = { ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) -function getUniqueAddresses(addresses, chain) { +function getUniqueAddresses(addresses, chain = 'ethereum') { const toLowerCase = !caseSensitiveChains.includes(chain) const set = new Set() addresses.forEach(i => set.add(toLowerCase ? i.toLowerCase() : i)) diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index cdc587eba7..deca1d854b 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -906,8 +906,8 @@ async function sumTokens2({ if (resolveNFTs) { const coreNftTokens = whitelistedNFTs[api.chain] ?? [] - const nftTokens = await Promise.all(owners.map(i => covalentGetTokens(i, api))) - nftTokens.forEach((tokens, i) => ownerTokens.push([[tokens, coreNftTokens].flat(), owners[i]])) + const nftTokens = await Promise.all(owners.map(i => covalentGetTokens(i, api, { onlyWhitelisted: false}))) + nftTokens.forEach((nfts, i) => ownerTokens.push([[nfts, tokens, coreNftTokens].flat(), owners[i]])) } if (solidlyVeNfts.length) { diff --git a/projects/metastreet-airdrop-pass/index.js b/projects/metastreet-airdrop-pass/index.js new file mode 100644 index 0000000000..02e3a35ca4 --- /dev/null +++ b/projects/metastreet-airdrop-pass/index.js @@ -0,0 +1,17 @@ +async function tvl(api) { + const factory = '0xA8a7e295c19b7D9239A992B8D9C053917b8841C6' + const delegateV2 = '0x00000000000000447e69651d841bD8D104Bed493' + const delegations = await api.call({ abi: abi.getIncomingDelegations, target: delegateV2, params: factory }) + delegations.filter(i => i.type_ === '3').forEach(i => api.add(i.contract_, 1)) +} + +module.exports = { + ethereum: { + tvl, + }, + methodology: "TVL is calculated by summing the value of underlying NFTs of the delegation tokens owned by MetaStreet Airdrop Pass Factory." +} + +const abi = { + "getIncomingDelegations": "function getIncomingDelegations(address to) view returns ((uint8 type_, address to, address from, bytes32 rights, address contract_, uint256 tokenId, uint256 amount)[] delegations_)", +} From 318c1e2d081e070d6aae4f29f3c3fa50f4eea17d Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 22 Aug 2024 01:07:18 +0100 Subject: [PATCH 0100/1768] add stakewise v3 --- projects/stakewise-v3/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/stakewise-v3/index.js diff --git a/projects/stakewise-v3/index.js b/projects/stakewise-v3/index.js new file mode 100644 index 0000000000..901bf64db1 --- /dev/null +++ b/projects/stakewise-v3/index.js @@ -0,0 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk'); + +async function xdaiTvl(timestamp, ethBlock, { xdai: block }) { + const chain = "xdai" + const supply = await sdk.api.erc20.totalSupply({ + target: '0xF490c80aAE5f2616d3e3BDa2483E30C4CB21d1A0', + block, + chain + }) + + return { + [ADDRESSES.ethereum.GNO]: supply.output + } +} + +module.exports = { + methodology: 'Counts coins staked', + xdai:{ + tvl: xdaiTvl + } +} From 4fbc0d8c006d82977e5a427d9df4e6fc5db0dcdf Mon Sep 17 00:00:00 2001 From: Nghia Pham <57862573+ngfam@users.noreply.github.com> Date: Thu, 22 Aug 2024 14:09:36 +0700 Subject: [PATCH 0101/1768] [PENDLE] Added factory V5 (#11376) * added factory v5 pendle * code refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/pendle/v2.js | 101 +++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 56 deletions(-) diff --git a/projects/pendle/v2.js b/projects/pendle/v2.js index beb4e471bb..93db46e334 100644 --- a/projects/pendle/v2.js +++ b/projects/pendle/v2.js @@ -3,58 +3,63 @@ const contracts = require("./contracts"); const { staking } = require("../helper/staking"); const { getLogs } = require("../helper/cache/getLogs"); const bridgedAssets = [ADDRESSES.ethereum.STETH, ADDRESSES.ethereum.EETH]; -const { getConfig } = require('../helper/cache') +const { getConfig } = require('../helper/cache'); const config = { ethereum: { factory: "0x27b1dacd74688af24a64bd3c9c1b143118740784", - factoryV3: "0x1A6fCc85557BC4fB7B534ed835a03EF056552D52", - factoryV4: '0x3d75Bd20C983edb5fD218A1b7e0024F1056c7A2F', fromBlock: 16032059, - fromBlockV3: 18669498, - fromBlockV4: 20323253 + factories: [ + { factory: "0x1a6fcc85557bc4fb7b534ed835a03ef056552d52", fromBlock: 18669498 }, // v3 + { factory: "0x3d75bd20c983edb5fd218a1b7e0024f1056c7a2f", fromBlock: 20323253 }, // v4 + { factory: "0x6fcf753f2c67b83f7b09746bbc4fa0047b35d050", fromBlock: 20512280 }, // v5 + ], }, arbitrum: { factory: "0xf5a7de2d276dbda3eef1b62a9e718eff4d29ddc8", - factoryV3: "0x2FCb47B58350cD377f94d3821e7373Df60bD9Ced", - factoryV4: '0xd9f5e9589016da862D2aBcE980A5A5B99A94f3E8', fromBlock: 62979673, - fromBlockV3: 154873897, - fromBlockV4: 233004891 + factories: [ + { factory: "0x2fcb47b58350cd377f94d3821e7373df60bd9ced", fromBlock: 154873897 }, // v3 + { factory: "0xd9f5e9589016da862d2abce980a5a5b99a94f3e8", fromBlock: 233004891 }, // v4 + { factory: "0xd29e76c6f15ada0150d10a1d3f45accd2098283b", fromBlock: 242035998 }, // v5 + ], }, bsc: { - factory: "0x2bEa6BfD8fbFF45aA2a893EB3B6d85D10EFcC70E", - factoryV3: "0xC40fEbF5A33b8C92B187d9be0fD3fe0ac2E4B07c", - factoryV4: '0x7D20e644D2A9e149e5be9bE9aD2aB243a7835d37', + factory: "0x2bea6bfd8fbff45aa2a893eb3b6d85d10efcc70e", fromBlock: 34060741, - fromBlockV3: 33884419, - fromBlockV4: 40539593, + factories: [ + { factory: "0xc40febf5a33b8c92b187d9be0fd3fe0ac2e4b07c", fromBlock: 33884419 }, // v3 + { factory: "0x7d20e644d2a9e149e5be9be9ad2ab243a7835d37", fromBlock: 40539593 }, // v4 + { factory: "0x7c7f73f7a320364dbb3c9aaa9bccd402040ee0f9", fromBlock: 41294178 }, // v5 + ], pts: [ - "0x5eC2ae0AFDEc891E7702344dc2A31C636B3627Eb", - "0x70c1138B54ba212776d3A9d29b6160C54C31cd5d", - "0x04eb6B56ff53f457c8E857ca8D4fbC8d9a531c0C", + "0x5ec2ae0afdec891e7702344dc2a31c636b3627eb", + "0x70c1138b54ba212776d3a9d29b6160c54c31cd5d", + "0x04eb6b56ff53f457c8e857ca8d4fbc8d9a531c0c", ], }, optimism: { - factory: "0x17F100fB4bE2707675c6439468d38249DD993d58", - factoryV3: "0x4A2B38b9cBd83c86F261a4d64c243795D4d44aBC", - factoryV4: '0x73Be47237F12F36203823BAc9A4d80dC798B7015', + factory: "0x17f100fb4be2707675c6439468d38249dd993d58", fromBlock: 108061448, - fromBlockV3: 112783590, - fromBlockV4: 122792017 + factories: [ + { factory: "0x4a2b38b9cbd83c86f261a4d64c243795d4d44abc", fromBlock: 112783590 }, // v3 + { factory: "0x73be47237f12f36203823bac9a4d80dc798b7015", fromBlock: 122792017 }, // v4 + { factory: "0x02adf72d5d06a9c92136562eb237c07696833a84", fromBlock: 123998311 }, // v5 + ], }, mantle: { - factoryV3: "0xD228EC1f7D4313fe321fab511A872475D07F5bA6", - factoryV4: '0xCa274A44a52241c1a8EFb9f84Bf492D8363929FC', - fromBlockV3: 61484384, - fromBlockV4: 66526601 + factories: [ + { factory: "0xd228ec1f7d4313fe321fab511a872475d07f5ba6", fromBlock: 61484384 }, // v3 + { factory: "0xca274a44a52241c1a8efb9f84bf492d8363929fc", fromBlock: 66526601 }, // v4 + { factory: "0xcb02435716b0143d4ac1bdf370302d619e714126", fromBlock: 67661738 }, // v5 + ], }, }; module.exports = {}; Object.keys(config).forEach((chain) => { - const { factory, factoryV3, factoryV4, fromBlock, pts, fromBlockV3, fromBlockV4 } = config[chain]; + const { factory, fromBlock, pts, factories, } = config[chain]; module.exports[chain] = { tvl: async (api) => { const logs = factory @@ -70,36 +75,20 @@ Object.keys(config).forEach((chain) => { fromBlock, }) : []; + for (let { factory, fromBlock } of factories) { + logs.push( + ...(await getLogs({ + api, + target: factory, + eventAbi: + "event CreateNewMarket (address indexed market, address indexed PT, int256 scalarRoot, int256 initialAnchor, uint256 lnFeeRateRoot)", + onlyArgs: true, + fromBlock, + })) + ); + } - const logsV3 = factoryV3 - ? await getLogs({ - api, - target: factoryV3, - topic: [ - "0xae811fae25e2770b6bd1dcb1475657e8c3a976f91d1ebf081271db08eef920af", - ], - eventAbi: - "event CreateNewMarket (address indexed market, address indexed PT, int256 scalarRoot, int256 initialAnchor, uint256 lnFeeRateRoot)", - onlyArgs: true, - fromBlock: fromBlockV3, - }) - : []; - - const logsV4 = factoryV4 - ? await getLogs({ - api, - target: factoryV4, - topic: [ - "0xae811fae25e2770b6bd1dcb1475657e8c3a976f91d1ebf081271db08eef920af", - ], - eventAbi: - "event CreateNewMarket (address indexed market, address indexed PT, int256 scalarRoot, int256 initialAnchor, uint256 lnFeeRateRoot)", - onlyArgs: true, - fromBlock: fromBlockV4, - }) - : []; - - const pt = logs.map((i) => i.PT).concat(logsV3.map((i) => i.PT)).concat(logsV4.map((i) => i.PT)); + const pt = logs.map((i) => i.PT); if (pts) pt.push(...pts); let sy = [ ...new Set( From 801dac5346f64cf08a4b7d117ff8b04ed312cdfd Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:58:15 +0100 Subject: [PATCH 0102/1768] add binance btc (#11377) --- projects/binance-btc/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/binance-btc/index.js diff --git a/projects/binance-btc/index.js b/projects/binance-btc/index.js new file mode 100644 index 0000000000..d9f2e15961 --- /dev/null +++ b/projects/binance-btc/index.js @@ -0,0 +1,15 @@ +const sdk = require('@defillama/sdk'); +const { sumTokensExport } = require('../helper/sumTokens'); + +const owners = [ +'3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb' +] + +module.exports = { + methodology: "BTC on btc chain", + bitcoin: { + tvl: sdk.util.sumChainTvls([ + sumTokensExport({ owners }), + ]), + }, +}; \ No newline at end of file From edd6a46975a49e4ace8ae58d02cfd7944cb48daa Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 10:03:47 +0200 Subject: [PATCH 0103/1768] Track openworld leverage farming #11375 --- projects/openworld-lev-farm/index.js | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 projects/openworld-lev-farm/index.js diff --git a/projects/openworld-lev-farm/index.js b/projects/openworld-lev-farm/index.js new file mode 100644 index 0000000000..72760f72bd --- /dev/null +++ b/projects/openworld-lev-farm/index.js @@ -0,0 +1,34 @@ +const { get } = require('../helper/http') +const { getConfig } = require('../helper/cache') + +const positionManager = '0x0b95Ea9Eb46716d20991163AE60eD2e16645Ef38'; +const getValueFarmAbi = 'function getFarmValue(address) view returns (address token0, uint256 amount0, address token1, uint256 amount1)'; +const OPEN = '0x58cb98a966f62aa6f2190eb3aa03132a0c3de3d5' + +async function tvl(api) { + const vaults = await getConfig('open-world/lev-farming-vaults/'+api.chain, undefined, { + fetcher: async () => { + const data = await get('https://analytic.ow.finance/lending-synthetic') + return data.data.map(v => v.vaultAddress) + } + }) + const farms = await getConfig('open-world/lev-farming-farms/'+api.chain, undefined, { + fetcher: async () => { + const data = await get('https://product-exploration.ow.finance/pools') + return data.data.map(v => v.workerAddress) + } + }) + const tokens = await api.multiCall({ abi: 'address:token', calls: vaults }) + await api.sumTokens({ tokensAndOwners2: [tokens, vaults], }) + const farmData = await api.multiCall({ abi: getValueFarmAbi, calls: farms, target: positionManager }) + for (const i of farmData) { + api.add(i.token0, i.amount0) + api.add(i.token1, i.amount1) + } + + api.removeTokenBalance(OPEN) +} + +module.exports = { + arbitrum: { tvl }, +} \ No newline at end of file From 196c4d0dd0859d7ddbe7ee227269cef46bd707af Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:02:00 +0200 Subject: [PATCH 0104/1768] fix jellyverse --- projects/jellyverse/index.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/projects/jellyverse/index.js b/projects/jellyverse/index.js index 382b6f6677..c227ea7322 100644 --- a/projects/jellyverse/index.js +++ b/projects/jellyverse/index.js @@ -1,19 +1,20 @@ -const { onChainTvl } = require('../helper/balancer') - -const config = { - vault: "0xFB43069f6d0473B85686a85F4Ce4Fc1FD8F00875", - startingBlock: 81_247_457, -}; +const { cachedGraphQuery } = require('../helper/cache') module.exports = { sei: { - tvl: onChainTvl(config.vault, config.startingBlock, { - preLogTokens: [ - '0x3894085Ef7Ff0f0aeDf52E2A2704928d1Ec074F1', - '0xB75D0B03c06A926e488e2659DF1A861F860bD3d1', - '0x5f0E07dFeE5832Faa00c63F2D33A0D79150E8598', - '0x5Cf6826140C1C56Ff49C808A1A75407Cd1DF9423', - ] - }), + tvl, + } +} + +async function tvl(api) { + let { tokens } = await cachedGraphQuery('jellyverse', 'https://graph.mainnet.jellyverse.org/subgraphs/name/jelly/verse', `{ + tokens { + address + symbol + pool { id } } +}`) + const vault = "0xFB43069f6d0473B85686a85F4Ce4Fc1FD8F00875" + tokens = tokens.filter(t => !t.pool).map(t => t.address) + return api.sumTokens({ owner: vault, tokens }) } From 058201e34fe16f2d331e4ce2a5e9c7cebccb7810 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:05:39 +0200 Subject: [PATCH 0105/1768] fix jellyverse --- projects/jellyverse/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/jellyverse/index.js b/projects/jellyverse/index.js index c227ea7322..8a844ea973 100644 --- a/projects/jellyverse/index.js +++ b/projects/jellyverse/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { cachedGraphQuery } = require('../helper/cache') module.exports = { @@ -16,5 +17,6 @@ async function tvl(api) { }`) const vault = "0xFB43069f6d0473B85686a85F4Ce4Fc1FD8F00875" tokens = tokens.filter(t => !t.pool).map(t => t.address) + tokens.push(ADDRESSES.sei.WSEI) return api.sumTokens({ owner: vault, tokens }) } From b3a3b8c4048f01bc61efcfbc6275df6347e1cf8f Mon Sep 17 00:00:00 2001 From: Dry cake <174254844+dry-cake@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:13:31 +0200 Subject: [PATCH 0106/1768] Add aqua-network adapter (#11374) * Add aqua-network tvl adapter * fix: api calls * fix texts --- projects/aqua-network/index.js | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 projects/aqua-network/index.js diff --git a/projects/aqua-network/index.js b/projects/aqua-network/index.js new file mode 100644 index 0000000000..e60f8cf783 --- /dev/null +++ b/projects/aqua-network/index.js @@ -0,0 +1,52 @@ +const utils = require("../helper/utils"); +const { getApiTvl } = require("../helper/historicalApi"); + +const AQUA_STATS_URL = "https://amm-api.aqua.network/api/external/v1/statistics/totals/?size=all" + +function findClosestDate(items) { + const currentDate = new Date().getTime(); + + let closestItem = null; + let closestDiff = Infinity; + + for (let item of items) { + const itemDate = new Date(item.date).getTime(); + const diff = Math.abs(currentDate - itemDate); + + if (diff < closestDiff) { + closestItem = item; + closestDiff = diff; + } + } + + return closestItem; +} + +async function current() { + var aquaHistoricalData = ( + await utils.fetchURL(AQUA_STATS_URL) + ).data; + + const currentItem = findClosestDate(aquaHistoricalData); + + return parseFloat(currentItem.tvl) / 10e7; +} + +function tvl(time) { + return getApiTvl(time, current, async () => { + var aquaHistoricalData = ( + await utils.fetchURL(AQUA_STATS_URL) + ).data; + + return aquaHistoricalData.map((item) => ({ + date: new Date(item.date), + totalLiquidityUSD: parseFloat(item.tvl) / 10e7, + })); + }); +} + +module.exports = { + methodology: + 'counts the liquidity of the Pools on AMM, data is pulled from the Aquarius API: "https://amm-api.aqua.network/api/external/v1/statistics/totals/".', + stellar: {tvl}, +}; From 8dc6f19f83dc5932acb3281307a87afbf1936cf9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:26:31 +0200 Subject: [PATCH 0107/1768] minor fix --- projects/aqua-network/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/aqua-network/index.js b/projects/aqua-network/index.js index e60f8cf783..948b43a8cb 100644 --- a/projects/aqua-network/index.js +++ b/projects/aqua-network/index.js @@ -37,7 +37,7 @@ function tvl(time) { var aquaHistoricalData = ( await utils.fetchURL(AQUA_STATS_URL) ).data; - + return aquaHistoricalData.map((item) => ({ date: new Date(item.date), totalLiquidityUSD: parseFloat(item.tvl) / 10e7, @@ -46,7 +46,8 @@ function tvl(time) { } module.exports = { + misrepresentedTokens: true, methodology: 'counts the liquidity of the Pools on AMM, data is pulled from the Aquarius API: "https://amm-api.aqua.network/api/external/v1/statistics/totals/".', - stellar: {tvl}, + stellar: { tvl }, }; From 5d26773b36b153a6a18a60d5b07f4c6ff5662d67 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:35:57 +0200 Subject: [PATCH 0108/1768] bugfix xrpl --- projects/helper/coreAssets.json | 3 +++ projects/xrpl-dex/app.js | 1 - projects/xrpl-dex/index.js | 7 ++++--- projects/xrpl-dex/package-lock.json | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index b3cb004d42..3242b8c41f 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1891,5 +1891,8 @@ "noble": { "USDC": "uusdc", "USDY": "ausdy" + }, + "ripple": { + "XRP": "XRP" } } \ No newline at end of file diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js index 1dcb854b5d..6f6870d2dd 100644 --- a/projects/xrpl-dex/app.js +++ b/projects/xrpl-dex/app.js @@ -131,7 +131,6 @@ async function main() { const projectKey = 'xrpl-dex' const cacheKey = 'cache' let { allPools, lastPoolUpdate, lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - lastPoolUpdate = false if (!lastPoolUpdate || timeNow - lastPoolUpdate > 3 * aDayInSeconds) { // try { console.time("xrpl-dex fetch pool list"); diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index 8841ed5aee..e49f337192 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -14,13 +14,14 @@ function getTimeNow() { return Math.floor(Date.now() / 1000); } -async function tvl() { +async function tvl(api) { const timeNow = getTimeNow() const aDayInSeconds = 60 * 60 * 24; const projectKey = 'xrpl-dex' const cacheKey = 'cache' let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !Object.keys(tvl).length) + const val = tvl?.XRP + if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !val) throw new Error("stale/missing tvl data"); - return tvl + api.addCGToken('ripple', val/1e6) } \ No newline at end of file diff --git a/projects/xrpl-dex/package-lock.json b/projects/xrpl-dex/package-lock.json index f79d19f783..646973e4f7 100644 --- a/projects/xrpl-dex/package-lock.json +++ b/projects/xrpl-dex/package-lock.json @@ -7,7 +7,7 @@ "": { "name": "xrpl-dex", "version": "1.0.0", - "license": "ISC", + "license": "MIT", "dependencies": { "ripple-binary-codec": "^2.1.0" } From 7cae2d1bdbc5f3b15d5fbe3885514bfa0fdbcc15 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:55:10 +0200 Subject: [PATCH 0109/1768] fix jellyverse --- projects/jellyverse/index.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/projects/jellyverse/index.js b/projects/jellyverse/index.js index 8a844ea973..ab552ed471 100644 --- a/projects/jellyverse/index.js +++ b/projects/jellyverse/index.js @@ -1,4 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { cachedGraphQuery } = require('../helper/cache') module.exports = { @@ -8,15 +7,24 @@ module.exports = { } async function tvl(api) { - let { tokens } = await cachedGraphQuery('jellyverse', 'https://graph.mainnet.jellyverse.org/subgraphs/name/jelly/verse', `{ - tokens { - address - symbol - pool { id } + let { balancers } = await cachedGraphQuery('jellyverse', 'https://graph.mainnet.jellyverse.org/subgraphs/name/jelly/verse', `{ + balancers { + pools { + address + tokens { + symbol + address + } + } } }`) const vault = "0xFB43069f6d0473B85686a85F4Ce4Fc1FD8F00875" - tokens = tokens.filter(t => !t.pool).map(t => t.address) - tokens.push(ADDRESSES.sei.WSEI) - return api.sumTokens({ owner: vault, tokens }) + const blacklistedTokens = [] + const tokens = balancers.map(i => { + blacklistedTokens.push(...i.pools.map(j => j.address)) + return i.pools.map(j => { + return j.tokens.map(k => k.address) + }).flat() + }).flat() + return api.sumTokens({ owner: vault, tokens, blacklistedTokens, }) } From 36d538312a24da2a1e3070915d3ddfd89523a8fb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:59:26 +0200 Subject: [PATCH 0110/1768] fix jellyverse (hopefully last time) --- projects/jellyverse/index.js | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/projects/jellyverse/index.js b/projects/jellyverse/index.js index ab552ed471..c64f1b4dab 100644 --- a/projects/jellyverse/index.js +++ b/projects/jellyverse/index.js @@ -7,24 +7,14 @@ module.exports = { } async function tvl(api) { - let { balancers } = await cachedGraphQuery('jellyverse', 'https://graph.mainnet.jellyverse.org/subgraphs/name/jelly/verse', `{ - balancers { - pools { - address - tokens { - symbol - address - } - } + let tokens = await cachedGraphQuery('jellyverse', 'https://graph.mainnet.jellyverse.org/subgraphs/name/jelly/verse', `query q($lastId: ID){ + tokens (where: {id_gt: $lastId} first: 1000) { + id + address + pool { id } } -}`) +}`, { fetchById: true }) const vault = "0xFB43069f6d0473B85686a85F4Ce4Fc1FD8F00875" - const blacklistedTokens = [] - const tokens = balancers.map(i => { - blacklistedTokens.push(...i.pools.map(j => j.address)) - return i.pools.map(j => { - return j.tokens.map(k => k.address) - }).flat() - }).flat() - return api.sumTokens({ owner: vault, tokens, blacklistedTokens, }) + tokens = tokens.filter(t => !t.pool).map(t => t.address) + return api.sumTokens({ owner: vault, tokens }) } From b6bbabfc7788059c6fe9d8d25a061134ec5edd95 Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Thu, 22 Aug 2024 20:18:37 +0800 Subject: [PATCH 0111/1768] add bsquared network configs (#11379) * Update index.js * Update index.js --- projects/kiloex/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index 04eb9a113c..d2980aad50 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -7,6 +7,7 @@ const manta_owners = ["0xA2E2F3726DF754C1848C8fd1CbeA6aAFF84FC5B2", "0x1EbEd4024 const manta_stone_token = "0xEc901DA9c68E90798BbBb74c11406A32A70652C3"; const manat_manta_token = "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5"; const taiko_owners = ["0x735D00A9368164B9dcB2e008d5Cd15b367649aD5", "0x235C5C450952C12C8b815086943A7bBCF96bc619","0x2646E743A8F47b8d2427dBcc10f89e911f2dBBaa"]; +const bsquared_owners = ["0xA2E2F3726DF754C1848C8fd1CbeA6aAFF84FC5B2", "0x1EbEd4024308afcb05E6938eF8Ebd1ec5d6E8C46","0xB20Faa4BA0DdEbDe49299557f4F1ebB5532745e3"]; module.exports = { start: 1690971144, @@ -20,4 +21,7 @@ module.exports = { taiko: { tvl: sumTokensExport({ owners: taiko_owners, tokens: [ADDRESSES.taiko.USDC] }) }, + bsquared: { + tvl: sumTokensExport({ owners: bsquared_owners, tokens: [ADDRESSES.bsquared.USDT] }) + }, }; From f49108ec6b29923d5c4927ed07899d5715053f18 Mon Sep 17 00:00:00 2001 From: Brendon Votteler Date: Thu, 22 Aug 2024 14:20:36 +0200 Subject: [PATCH 0112/1768] feat: add v2 gateways to bob-gateway (#11381) --- projects/bob-gateway/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/bob-gateway/index.js b/projects/bob-gateway/index.js index 3e9ec079e1..bebbc6b72b 100644 --- a/projects/bob-gateway/index.js +++ b/projects/bob-gateway/index.js @@ -19,6 +19,9 @@ module.exports = { "0xCA94d277d04e8e6ce960F7492b2df62e2215d562", "0x9BBBc8F4e4258cC9Ec79164DDB7ef72954f381E2", "0x47340424457463Fa77B59FDAdea31cA886a241FD", + // V2 gateways taken from gateway registry (allGateways): https://explorer.gobob.xyz/address/0x37f330e667208633e1da1cf601d01f0ef8484306?tab=read_contract + "0x1578c26085b45A559D6B4D4cCfc1DD9e5c66F7B6", + "0x2a7b7Db980B2228D5FfC47711D09d13F8F90961e", ], }), } From df0554e3294e05597b1c102a36d76ba7e479f9d2 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 22 Aug 2024 14:24:03 +0200 Subject: [PATCH 0113/1768] Fix,Adapter,Counterstake (#11378) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/counterstake/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/counterstake/index.js b/projects/counterstake/index.js index ee60d77fe5..6a35750872 100644 --- a/projects/counterstake/index.js +++ b/projects/counterstake/index.js @@ -74,7 +74,7 @@ async function totalObyteTvl(timestamp) { const totalTVLByEVMNetwork = async (api) => { const bridges = await getConfig('counterstake/bridges', 'https://counterstake.org/api/bridges').then((data) => data.data); - const pooledAssistants = await getConfig('counterstake/poolStakes', 'https://counterstake.org/api/pooled_assistants').then((data) => data.data); + const pooledAssistants = await getConfig('counterstake/poolStakes', 'https://counterstake.org/api/pooled_assistants').then((data) => data.data.assistants); const bridgeAasByChain = []; const tokensAndOwners = [] @@ -89,6 +89,7 @@ const totalTVLByEVMNetwork = async (api) => { } }); + pooledAssistants.filter(({ network }) => network.toLowerCase() === api.chain).forEach(({ assistant_aa, side, bridge_id }) => { const bridge = bridges.find((bridge) => bridge.bridge_id === bridge_id); From a65e9d13c1514196e7bdf306169c70e71b3c6873 Mon Sep 17 00:00:00 2001 From: Kyrylo Riabov Date: Thu, 22 Aug 2024 15:30:07 +0300 Subject: [PATCH 0114/1768] Added QUSD and WQ tokens (#11363) --- projects/helper/coreAssets.json | 4 +++- projects/helper/tokenMapping.js | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 3242b8c41f..d4971e537c 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1726,7 +1726,9 @@ "WDAI": "0xDeb87c37Dcf7F5197026f574cd40B3Fc8Aa126D1", "WUSDC": "0x79Cb92a2806BF4f82B614A84b6805963b8b1D8BB", "WETH": "0xd56F9ffF3fe3BD0C7B52afF9A42eb70E05A287Cc", - "ELK": "0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE" + "ELK": "0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE", + "QUSD": "0xE31DD093A2A0aDc80053bF2b929E56aBFE1B1632", + "WQ": "0xd07178e3eCbC78De110Df84fe1A979D5f349784a" }, "zklink": { "WBTC": "0xda4aaed3a53962c83b35697cd138cc6df43af71f", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index e5f430de38..21b3ccf6c8 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -57,7 +57,11 @@ const fixBalancesTokens = { }, noble: { [ADDRESSES.noble.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, - [ADDRESSES.noble.USDY]: { coingeckoId: "ondo-us-dollar-yield", decimals: 18 }, + [ADDRESSES.noble.USDY]: { coingeckoId: "ondo-us-dollar-yield", decimals: 18 }, + }, + q: { + [ADDRESSES.q.QUSD]: { coingeckoId: "usd-coin", decimals: 18 }, + [ADDRESSES.q.WQ]: { coingeckoId: "q-protocol", decimals: 18 }, }, } From 18a1137b33f4f7c84fbf5a36bafafbf9c139c0c0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 14:44:09 +0200 Subject: [PATCH 0115/1768] pull QUSD price from USDC-QUSD pool --- projects/helper/tokenMapping.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 21b3ccf6c8..db830e49bb 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -60,7 +60,6 @@ const fixBalancesTokens = { [ADDRESSES.noble.USDY]: { coingeckoId: "ondo-us-dollar-yield", decimals: 18 }, }, q: { - [ADDRESSES.q.QUSD]: { coingeckoId: "usd-coin", decimals: 18 }, [ADDRESSES.q.WQ]: { coingeckoId: "q-protocol", decimals: 18 }, }, } From d0193dc315a96a7347476b5717f326a3ef1296c2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:02:15 +0200 Subject: [PATCH 0116/1768] refactor bitstamp --- projects/bitstamp/index.js | 532 ++++-------------------------- projects/helper/chain/litecoin.js | 22 +- 2 files changed, 83 insertions(+), 471 deletions(-) diff --git a/projects/bitstamp/index.js b/projects/bitstamp/index.js index 71f427b327..946b9467bb 100644 --- a/projects/bitstamp/index.js +++ b/projects/bitstamp/index.js @@ -1,241 +1,9 @@ -const { cexExports } = require("../helper/cex"); +const sdk = require('@defillama/sdk') +const { cexExports } = require("../helper/cex") +const { getConfig } = require('../helper/cache') +const { get } = require('../helper/http') const config = { - ethereum: { - owners: [ - "0x182e1259ef6ee45dc811132ef4ba5871f1536822", - "0x48ec5560bfd59b95859965cce48cc244cfdf6b0c", - "0xee9fb7a615cb76b46d26be6ebc9114a627a81c5b", - "0x08dd6f4d6dce88f11f964fe811e55f301ad30ddf", - "0x379825f8da776b573a63404a5c499c8a379a131f", - "0x7cf32ff080efdf4066263202048a36f752232bf6", - "0xa3f74537f048b893d726c173cb322fd21a28b18a", - "0xee7c0bf91f9ac8117b490c8e028714acbcb41364", - "0xdd7fe457f4dec4afec5d7f3284276db8c5c6dd6b", - "0xe1576685451986e3f93c2fb87cca3aec5b5d45d0", - "0x559e7711e4041da2e2efefe1097d9ab3c8eecf2a", - "0xa07b07e4542bea95f38c54f39ec25750ffc3dfcd", - "0x31c84a968736fcfe02a9ba274e0fa515a4a6659c", - "0x88a4df73aac310484c60c4c0ac4904cab938c20b", - "0x4c0907f7ad337635a7fd414a0c7a938e0d64bf4d", - "0x6130611f7a65deb930bd0c0825af88078fcced43", - "0xab09b0c5c112999bee4f45e323c4ad2b59638603", - "0x58eaa8177d4309a8bb83205e49a8468cfa799d7e", - "0x1f7b76ab2d5c0893d0a7c3df03698b19d2a179ac", - "0x896dfee1afeb6336e86911bd5a341c1264e5611a", - "0xee10d544bf3deff395679f3ca43fd06163841717", - "0xa8cfe8de6aebc9024d180f306793730f7c425a95", - "0xc5b611f502a0dcf6c3188fd494061ae29b2baa4f", - "0xb66410ae75317faf13dba869b6df7b30892d1e46", - "0xd02744b3b05aea06373a7e0cde443039c6596468", - "0x4c766def136f59f6494f0969b1355882080cf8e0", - "0x1522900b6dafac587d499a862861c0869be6e428", - "0x593aebee9117eea447279e5973f64c68d8e977a0", - "0x333c100ae1a2743a1e55d73913cac6d95deb7f62", - "0xd4fcc07a8da7d55599167991d4ab47f976d0a306", - "0x772396dd44ce3d347838bfec437cb32f534963f2", - "0xc20b79cff9d2c89ba8aeb9abf4bfef0314ca7bd2", - "0x9fec89e34efaa4fc9f19c02f474c71373e6effe7", - "0xab7bb7959332888e44d795c6f28ee876a8469eaa", - "0xbcddeba6a9672c1f76a8b8edd3190bdfe6d4ef11", - "0x7e677cacaae0d465cfd336869f1f575a48bf012a", - "0x16a798dbd8fa626143bb4f06fa4724d4145d4e6e", - "0x6778c14331251bbbee71414eda389dcef4bd81b8", - "0x9a9bed3eb03e386d66f8a29dc67dc29bbb1ccb72", - "0xe5cd446e0e4df139db80f38840bb617d5cd0d5f8", - "0xcddf488f1c826160ee832d4f1492f00cf8557ff6", - "0xfcfebdd956a9babd9c687f9cf599774b7a01a7d3", - "0xc304bd0f391f1ed6d6b3f2845f8e42c550a5ed5b", - "0xd46914c273443505563d346f98d41f6a40dff36c", - "0xfbb23038fe6cfa16aa898d7dbca7c3269bdaf258", - "0x059799f2261d37b829c2850cee67b5b975432271", - "0x7e9ca63e3f1c26fc8fd4aee1cfcc065b9a107d7a", - "0x858c83a0c97a3a710fd3b9167a0248d76d3b036f", - "0x8366dcab4cc14c826fc9d51bd4c16567bd07b02a", - "0x9dcce8fffc06163f2a754a996262c6414db0116b", - "0x0a4ac8b30bb0e477c301135ff9566b2b9d7d9244", - "0xb8e73ba7c6c0b50a0cd94fe9f6622762b0401c02", - "0xd2ab693e92148b8d3e73c72ff71bd28101ac1d68", - "0x1667574d6fa214aa5810535e3351f3047d8925a5", - "0x4cc61daed7824ff8b5081f204e16bea330c2eeab", - "0x518b82370bc31ebb96922ec257d92517d7387615", - "0x5fe562fce21b136b20936aa4903a95af4a4a7d36", - "0x30792c8b2a252efa66878b175a1af1e6eaf97b6d" - ], - }, - bitcoin: { - owners: [ - "3HXo1ez8mbfTkVKGcarHEeGNsurTLwsuXH", - "bc1q5u42awdp09sj67shdxzvcvjhjy5pwf9fz77gw3zghsgl6wrgxvdspp6xgg", - "3Ee3Cft7X4DbRzMoBdaKWrCZ4AqriA5sbF", - "bc1q990xdskw5q7h820grr4fru4ntytenrggjqpc0g04hfrlc47hu66qeh3f7x", - "3QTCJEYBR7XFEwcpio7GJgqEpGruX33ojm", - "3MF4BwuPuasoK6v4a3iarDgSFVjmXxLG6j", - "39emsnF1cY5djp3kmrdR5H9ghdjDwVwjiP", - "bc1qcea4vxps9dwpn8suytmma4ksln2h0vddhzdvulp5tsfsh8m5j0uqu9un9x", - "36Ge1JYchtdkvYScTdo4N1jCspkwqHd9Ff", - "bc1qr8t4agyvjc3wtwu6wrup2cawzrvnkkfkx5x8hk7u5xv8rhzw05rqjsed6w", - "bc1qywt6zyx7zzewa70nguum7hklyd0vmnm3z6qts40wlhzxaj05axfsf5qz2a", - "bc1qrv5nhx3gmyxtkf8zu6yq9p8rsgmg7le32mts385jcurhjfnzhg5smtwhvc", - "bc1qyuan8kg2xx2h46wmrqkp7a7787c8uwy97k2qdpx2ajssjkck3yjsfpfyjk", - "3DgJ7MPGS4fAb9aaGwtsPrVgoceM41aMu2", - "bc1qllgvgtdmszgjjwcugx8ea4u3vnmnfsjyc9txahd8c0pl24mfzehs0fcpnx", - "bc1q9uurrfmdqfjghn7rny73a3vcq2jg60d3wjuegzua43mgxfjutk5qmkdy6z", - "31hsam8EVqBubkP9Ph4RNfEYr69VVB3mTu", - "bc1qz8j8d7turgfml80fm4gdlh2zv6dfct798suynm9gjwex9h6sy0ssvm9gzr", - "bc1q2wx2hpjn036mu6qg2zwsqrm0g8h9gtm4egj4cymjtvyaapsz09usep66v9", - "bc1q40sd4nfynlamhpfvcy5t506vl8d2zwyeufhzupnz7vfx3gs3cjfshlkdlk", - "bc1qh824az3v5fhxuc0k07xc8kzf2dmf67dfpmjewakany34vyhgmkjsry0cm9", - "bc1qmrsmmk4ezlcl546mcxwahym7u6q0nv5x0nn22uw7cd256mgz9f3q8hczr2", - "bc1qvv40knxv9rcyw0c5vwzrq50x7zks9jpeyf3nhagrycq4yd6trm9qtmeear", - "35MynuEPTZJd8Y7QhEsUiKKt18TrF9UgJQ", - "bc1qwj7zwn3p4y8grutk9zxxn09vm0cs9g0mledte5kqxsm43w08u6pqp8p82q", - "bc1q3anumarec8zlzs7nt4waljuhg2ueel6m0z5s3v7vg6cnfu66m83spupgm6", - "bc1q5094926zt42j83ea7ds8v3yyksz24fgzzmyqw723dsajkr4quw0szze4kd", - "bc1qzyptk5guyzfv3dsu8qmred7hy2r9wmla6rjkuzy4f5cld4z6zuhqdmtsfq", - "bc1q0guw5chrlr2ca50x3ce9ptpcxf6fuz0zjxf6fzr6nq759n7mmn3qgdk3dt", - "bc1qgn63a8xeg5dg4uc7jktc99ujftnf4dzx3nd8875xukjvp3uv2a7qnafuqa", - "3Hi5VHVgmYZYfAPc9aNvQoNXyEv5rYvJQN", - "bc1qu22qs0un63e0xzn642lgn5zjwzm75k59rx2kxdau3uq4g6rjekxs7xln4x", - "bc1qylffvfh2a6pl6nz49uc6hm6pwp24mg03wte6ud4t598y3pahks4sl7zw4r", - "bc1qckj933afq7ultlp4nrqhqk3shkaxt6j8y39htyn0umglr233m6wqfv7ay8", - "bc1qany0allcwhuewg0wewnapt985vs4lq0jffyupkg5xkq52cwqrf4q8uzq6q", - "bc1qugr8udpmpcu9edg9f90zqs2hkcqek528nt30klhm6eharygczw5set6a78", - "bc1qjz2y6sx0h63nvxt72j42rjjap0zpursvuxn7ezhjegpfnwpv4y5sc7v8rj", - "bc1qj0xc7sf880llyjt0dg9d6nmh045cjshzz3udzmkq7ws3ph9yr57stt72zv", - "bc1ql2aveuauhett4au3eekd77asmqedctkaxdynmktj27huu62t9w0sfwhcfm", - "bc1q9smt7qjhlkv9r3ds4r2n2u7jhxms0ns60jdqvaz4kuxj8uglvuyszxj8h2", - "bc1qfa25ekdmau8pwe2kgnmpq4h27c8xrhk5acsw2jrgjlu9ut97phsqlhzjau", - "bc1q5zlr6tqscu4va8r935z84zlfzlywvn3sg8psxrl59yy58n90hauqc7gcvn", - "bc1qpx8ws376tje3v6llfnxvyjjergz4zpmldtv9wlgr9rxe9q3uv78q64y7xx", - "bc1qfh0enm3gt5ctwykh39n4w3769lafmwwcw9murpm37x0ga5g2us7sy8dqck", - "33t9PxtMC3yUpT5gvjVaA4PDwaMT8xCbpu", - "bc1q3xrf5yh85zfgegj28563yvf646vuap7uz4ylut955s9e94rta9eqa06ynk", - "bc1qa9v2dxhxsj75mcczwlssparhhnzcmkudg3tswtdcfrr0eussva9qxwzpdl", - "bc1qeeujz9hg8lautsd8y3yv4mkgzff95yhgrwvlw9kkenr5uqupry8qjjaltz", - "3Jc5hrY64F1C9rfrXJrrKR73bhGj3Um3Eq", - "bc1qgvwrzlmteud92sa8twzkpelv6pe6s35z9a94zrvvh5rdvzs0n3ps3g29zv", - "bc1qc9kg9knfu7m99c4mnaqmlzr7kx8lwad5g5nkg4gazfe7uptcs88qh83xz5", - "bc1q2yjfzcl44sjd2jf9hmzre9dr9wydpnvtz6qqr8kxt96ey9yg7zlswa8ptn", - "bc1q66v58wlm63wt9a0hphc6xlxzu4ydt0tut3exmxufyenpx62spvvqnzld8h", - "bc1qygcnzafa52ghna3gw5yuh7yjpqpmy0vda89fsun2jk6u6877nvgqe4tndx", - "bc1qdkmdeu2awyla77crpswk34f7nd0wh597m5yglgwj4hlj6jh9q95scavwge", - "bc1qxdv33kz4339w4g9krc4dn9w9zkhs8pzfng3yr23m7az74urjxg7qdkghls", - "bc1q508ncrv9k5327k43pq7wjq9a303kg8get4drk4qal7kq82yqcyssz00kyj", - "bc1qecc3md6lccjh4wkkyh8jjrrca5j6zcnhgfllg77fazjy8rfddzqqjmx4y4", - "bc1qjsq73k97hvqpf7th4t6k5ry5epatadhymyuu66gvl4dsh6g8getsm7jvxh", - "bc1q7n96fy8jqt442pp43ag2z9re0dw95z9tyz3t2hz358xe5tx5akrq6gl6vp", - "bc1qvudg5q68cuut2c4klc2pl8yq0cxpwm2ytz5sp9pct08d0pygw67qfwevr2", - "bc1qfl638mvlzv5rt28p58vn89v2u0tpnpa2pajtx67mp6v3xcyxmycqepnff9", - "bc1qdlg992c8m3v8arvlvcs3zs9sgejcv8nk0dg3ceg8rhygt6cym5jqvl7c2y", - "bc1qxzaqdtx8xenrxwhhuuptk9p76m6jqg50wky2wlamhzxmj9576wmqhealnz", - "bc1qy0lrrdzw6ammn6wr8s9ywud0gg87e7ypv0ccut6f3cw4fhf2yh4qxylryt", - "bc1qq3s6jlsf90k7yssg7zntcws89kjsc2tdvydjzk6akddkafw99gss7pcnmy", - "bc1q6t2uuzsx2f07zhe9xnumv0yjmuchacd6wq78phgf0fq5nt2mknrqg67y0d", - "bc1qm3q35an2q08pxjvt4cepfcrcerdfqz9nthau5xjavdy24e8wnhws7hz9ds", - "bc1q3tt0yzedrvlccftvedr54rq2yu47yr9pl29czenscf5yxunthflqkvxszz", - "bc1q2w47h0s50wzuzv5v287tzazk8ph4na5ndm2sejmjmuy5l58t7gxq9ytgdf", - "bc1q7dg4q2lsryndtxar6ner3j4c20fsfknnqkr5mzc3j8q8upjd5ysq99k6jr", - "bc1qn0nnrcflsfsu3ytyd902tl86d589jg04lmlxu6zy7x2c6dke2xnqyzl68f", - "3EmcYExbPqbdXHv5t36hjrAgZJoQUMjJ2p", - "bc1q2tqsq67t3w09qlxjna4834d8p0get7x75ztc27awp4fuyn0jud8sksmc90", - "bc1q5csapeundkkgwaw6mg4e89xeklhhg53cl4x853evype4tj2hr7cqvq4e2k", - "bc1qclm7ufxfkctrym5ylj7wu3ztyec2tesqtsq9q8h8jum2s5nr5q2suj8trm", - "bc1q69x54qdwjryjqqas8x2dzsxrv86d4f6fzjnmjehxl75um8666zmqdaupu5", - "bc1q9ppqatggglvvc4fy5xwgd6987e9k9f5aj3amda4t9se3knjdpdesu5z93z", - "bc1qqw2mzuzpy2g5h5eqmtwlhkeunl5vkdnva8uh7n0n0jg8qj38aufq978ccl", - "bc1q6xaf29uq4p0smacnwkkfwpqhzc2dyrdyqfds8tv8spaslx94ajvssknu9w", - "bc1qm0lf34sy33en4n847v3mefp9ug6u4qhtmnh50cqu9rg5fwckxayq3kpm0c", - "bc1q8ydpjsakfdaj0gtpprcjz2e676pmwgp4jkt5p2r2p77pc6ucycpql9k384", - "bc1qmlrdlux5vy6n9cgvc4xptqehp6zch39kagp9ly24qsktvvg2s2eqwv0464", - "bc1qu7jjgj4k3l4dvxpfcw68xu5ax8ey65vusdms666xxr7wdnu0mh3sk2sjhf", - "bc1q6j8cpspexxjkvavszl7cf0rsa8jxhkkn3few8cj9yztql72624hsw8x7hx", - "bc1qsm9stprpj0f2wugft76usyknjwz6x0t9skttp864clfj5ea49mkshkctpz", - "bc1qt4rsuptcqy0rfpnyqd66hu84z3rh2a653jfm7kcyq42dtjqs5eqqd7sth6", - "bc1qtj8jff2pyjgdhlaxvcux25mzx0kted7y7arhmda7hwzty45fatqsatm4mv", - "3R2AHeAdtsr7cmDdsD9TCSzRA9uruQf5Si", - "bc1q5r6svlv9dcrrvn6jrpsw7e95efk0tcurnlflyg5wwrcatnm87jms0g4sfj", - "bc1qu9pfft03wmfj3hc468zku7jju7sve0fuwtk87w2c6kh6cmzkkwasyzva4f", - "bc1qvyg8ftctqqszvnd8kzr8x9zy6g58x4gha5q286df76p8fheq746qqv5udv", - "bc1qg7ah54n9m7g43hf3kda74gj4nx5jvmypgc3lwx3qdf7pmd250trq7v6zsy", - "bc1qrlz2smvvw6wh796z5rqts09mh2vuw7qzyhkmf4txqas3z3xhg7uq7r9jqa", - "bc1qu6fcjugaq8nkxnpkxnt0w6l08f4ptkuhthfl2wejp6atfslg6a2sma7tvh", - "bc1qvll04lemznae7qwdc5h2l66nmgla9y62rddmz7sna5vletejx2ts5x9v6q", - "bc1qjsd8g23fvjeqejel295nteszpmwrfudwwdcp5tpcwzanseed0dlsxxcuqv", - "bc1qswexuuxeav7nps2xgtpraka85xd32yt6ffguv8kfn9dge9eewnjsddu268", - "bc1q36xemg4j7zr7s8gcqtev4x05lxyrmngqpp0pgcja4pd6vcswy6hqdrgxjg", - "bc1q68j3fvunhumc990f9zesz9j853mgp0dq7hq7v4myjsrqmemc5l8qyh4z8y", - "3JuPfeK7N4hTgXp3ULx6a4zr5fFwoBmdFU", - "bc1qgvc6wewukj2ncav8zu9pru3hyn5e2tc8tc5pq3zz3jwrp0r9e5csfyzd6j", - "bc1qjjksugl9m577hqkx5024y4n7he3qyeq0v322m5qyflmt3thpkycsqupa7r", - "bc1qnudsthrkaxcf84grje6hqqr2ep2la3vn25pszq0j02pvy07kxmhs4fwu68", - "bc1qqq22y6fk63htdk9l69ftelmgnamkf29mts68ax9w7wmn9awr7drqrda8zq", - "bc1q64q05wy4djkl6ua3rn02j3q8fuw8ja6hd3zhts0le227frcw3d0ql3cjjj", - "bc1qfw27hzd3wlmyg6lycc7k9rnmtpvnmayxuhk9u8a3al90k2m4ujaqkzqhtv", - "bc1qvdfl8e6ydhyylzwhat28vaq28rrf8y0f978830qhmp8vxnq26cdqaw36nk", - "bc1quk67hcwup6rv232jzu6esdkupvd72yy8mfnuw9x98qvk0443rm0q6y8hyc", - "bc1qpxk2k8jjptrsymt9jk2v3tg3al73q4g55p3kvre6dssca25rjrespsnqht", - "bc1qgwjxuu06p2tpx9c39a3q96gy3jq0sl5fwe628d3pck4uen8657cqv0xjk3", - "bc1q25nnk9ymgz2wdch2cp0dv552u9fper6eghwewugl520dsw25ntaqk829ds", - "bc1qpwdg9zxjdpvnk22pyf3pw9skq6zr4lm8eghwrgpfh98h9qvht50ssp5psa", - "bc1q6v6u0n2050rgvj6hg8wzesekf3hra3rnk22q2wcefmt548pzs6es4xe377", - "bc1q8eh667mvm7hqtah6wmm267aypnqd8wjy86633fh4rankzssks9ysxqlkp2", - "bc1qlxga5tkwwsyf87sfsc3f00t9832y7fqatpk0lae3ulvqs7p50anqxuc0hd", - "bc1ql2cf6x0y4qrzj66h6q96dcypuqnj3wuhgwv6zd9tc868lfncxqhqzwqx5g", - "bc1qn307vllfyzpu7tc0wcg83r2c4qwvhjrlggzthmav33uke2r2uhqsjdyfkk", - "bc1q7k8jka4k50c3ku5kck544dyv7anuzrw6kltz8655f9wdmtffl5yq78gj28", - "bc1q9x3u7ejm8nzgd6f4rf08p3acpwnl67zg2mre9982lcmwe396s7fs07xcp8", - "bc1qamlk7aexpmgfjhl2lc68vgr03u6pkpwxx95ueqrhlfrgmm45qe3sheqgu8", - "bc1qw5tg0p4eml8yz7rn3aq9x6xxs24dns2m7v03yaf4hwvwy6rca3cq8cjf4z", - "bc1q5qrqs8w99c8sv2x9d0fnzr6fedglulj4q9u5xpfkgf9uuj0g4x4stre65x", - "bc1q92sr30tvtppn98a2q94mgfw2h7l9n6eff4tdlz3v6pp8lw58ersqp73eup", - "bc1q5rk3m5afaxm08q4mdd9cr79mxrue884vkjfpx98fd604j59xvxzqqz9n0v", - "bc1qtjxe4cqycprjvypl7cutnwhw5pccrlyctylg7mlkmynzh7fmfncsugvafp", - "bc1q2jfkjf2as7rzgu96ph6uqj8kmzky9t5mzv97ajldjmjwyyd5xlnqe8j03j", - "bc1qty828us6hwk27akswk2jqlqsmtjcpmnl5ydj54dyus2s4aagyqyq8qhl0j", - "bc1q0sjx50elp20dxv9xwz0cxzg0lz9nsuauh3ftkrwym7ykznmrzgzq86t0he", - "bc1qj7v4zyg2s3eqg4tw7rf9ll4hlyegecvfxj688u29hdnqsa8gx5esw93ham", - "3MiAhu93R5PNLbsSDDa8Mx9bzJ1p5h8mJV", - "bc1q24pz8s3xved68yfjkn7pwqqg06326hnq6wuuf70chgz96nrgq55s2hf4l4", - "bc1q9h576pc36efmgg9rukzgjtpt8v5gnvnkqlpzfds22ge06d94fylqn38h2m", - "bc1qq3skjfz04m5uugkt6upm3826aw9epgdx9a53026zjg0f5pt6nrdqxx5sxv", - "bc1qzyqngswkj5k3fkdmqp3d2rckhtng6sjnhwc4ke6xfw90q09606usp94r2e", - "bc1q4smhz9urpkm38zar0x9adtl0ry44xrd4hnl3rgwsuvw5q3j6lras7u44tv", - "bc1qzteedl90xqhn5df7dpjx849ryu6k0j8fr5kxrqh827zkw93e9c0qpx56em", - "bc1qxa786w23cmwz7j3rdd80efyu2v6j0j9ts9g98chv3t6afhxvne5qdutqts", - "bc1qey328570qay9rsh8tyldmpur4e0vgcxvlyrdnuptw062dv5jh7rq8pxzdd", - "bc1qgxcntq072tt35mgm56fznlxuk8dcv805j5erjakl2j2tgl78djnqjx8ffd", - "bc1qx4gamh6xe889jahz34rasp8adqtutajec4vs3xgdy23jex6y4e3sm6a9dk", - "3L5TXDJvpn8ZuVMxRNqsxXod68eLgnQcJv", - "bc1qglr465a0qqurhq2h5ywv0dm2u85lgz2jhx9wy8qxr09hzcfthkgqtn8f6n", - "bc1qhvzp3vkq6nduu9xnkrn594fsh5r7f9xy6kz8fckenuuumpqz7twsww9kdt", - "bc1qvd8p4dlk0lpl3e5hdf9np9hjemwhnqqky4u4kjwh75trjgs6z56qt5w8uq", - "bc1qmh369aeu3sydpsyrpcmj27tz99zdr2m5rwx9gpgyn2nck0ltyepqe3tyhv", - "bc1qfhhxvffnf7xg4ljgqf7dzw9585mp7qdfg0jw5a55yxnmmh58xudszeltff", - "36NSBe6tr6rAYnKrj5tHnTGNLUdJ7wFd7q", - "bc1q6qf896wlull9zd4vzhtwj2ezdey6j6nclrx4g3ss7s8dumxrhutqduezef", - "bc1qjmh40jm2uuzg7t340th7a4psawdh0yn9e33lg9zsnt9w2hzrztcqak3dhq", - "bc1qudsy5xpf473t7gufua8pv9vjzmtk657eead24lsmkagetyvmpa5q6la3g0", - "bc1qj3fkyxu3uchcf3mcat60rwru8nyejmqrz4jd6nlxjxccr7rs2l8sm7x3sp", - "bc1qhsgl73x4exf9xxvq9ssdw5vcqvng73keawjdsdnpj0txsenxuezqzul3ju", - "bc1q7rmd9pjnackkdzml99rux93hck0jwtn8974tt04fh6wmquat0gys8ph7fq", - "bc1q4y53pluuegyjwxahjeyt6sgj8w64ajwzzmc7waftn7fvg0q89qmsgpqe65", - "bc1q363axxlu7n5nr7ppmkzws304fvd043g9dv73dchern9gv2qetzuqmu0sgq", - "bc1q0m8y3s9xye5tzm6l0pkyhw5dm0quekehshxp6lyjhe0622u92qpqdknhzs", - "bc1q8pu37vmcz745ssf0cc902j7ff0npkyt4ud2r9jnptvv57wq2ta8qpxnku2", - "bc1qsqvppheug2f09we2exaccu4t68630nl23kj45v2e432rss36xp6sv76jn7", - "3FPR61t9Xg9onKRjEzY3WjiB62Ss8rDuPG", - "bc1q6sa2f4u8yx50hhrflsl00h5w3rzujull5a8phf0he5aeq3sp4jds9xrecr", - "bc1qmulsa5cl9fg4e4utafz0jjagzhzwzcazxmcf307fleuhhmytf45szdhrm4", - "bc1qrw2fgsxrwfumtlerg0gw9fejqsycwnvtrvmyeuxnzyz2zz0l90rqz0z28n", - "bc1qd4ldj3vxv3cy9efxnprh7xxh5jsdzvzfgah8gkpcphpg58rcxnxs2gxtdx", - "bc1q0um5gc4h4ne3qlhtqcsvaqv59sa7juvf2tscdru2ff7lv90mv8hqyxjzdd", - "bc1qufvtm8wwjqppqhp8jetw9slssp345tgkjwq0wta20gj5q0lalmvsxa39aw", - "bc1qam9r0jd0qdxp2003t4g8e508ezjhpzj00r6d2ufjjsqzdcf3trjqzx3uyx", - "bc1qjwmkz8yd8w706qp9naa9qs7gdycgt65l7ff97u2g3jhcae5jrsdsdfnxyc", - "bc1q9keeaul4ymdqx8pjcn8ut2kws2rfdn4leg66d739usn3jpcm7n4qmp6jw8", - ], - }, ripple: { owners: [ "rnuDDzvYWTPqXTDVvwE9oLGLgxzV7Rpnpe", @@ -252,237 +20,65 @@ const config = { "rHHrmqpzuDSkpcRK2PFm7P5Mo5zf927ina", ], }, - solana: { - owners: [ - 'DTNnXBh7JcKTzfWbqcuNYaYBQXS2fWWoXEdJ5iyNwvFX', - 'ETZY5TjMKdV2KdHVmUNTN56pWhMc8TyjrXtQ7YexDCmG', - 'i57ExrKB2i4mSgjSuq2xz617mQXmu33WG2WEYypmdvX', - 'HBxZShcE86UMmF93KUM8eWJKqeEXi5cqWCLYLMMhqMYm', - 'E1EfU3iKUS16mB2vdgj6mi3ssV32dm2Pxh7W74XxKuYu', - ], - }, - avax: { - owners: [ - '0xa3fb85c3a2c50d8c0e1dd7fa7746f97c9e1d9591', - '0xc0ac2f4a3cf22fd504d8835b07f5acccfa9b27f9', - '0x162af7b6e0303bbddc5044b8bece12012fbcbe20', - '0x1f69d824c3b4f906ac3fc8826e2391bcb9330e02', - '0x3f3e23249f38d35a4cdaf44edfd99eeb4325b401' - ], - }, - cardano: { - owners: [ - "addr1q9w7x0secwr3uz397nl3zw4wc7w9su22rlc7v54p5q425xjauvlpnsu8rc9zta8lzya2a3uutpc558l3uef2rgp24gdqhcgfgs", - "addr1q9frvl4a0wgmk4e28gu4asyqrd6ezd3wn3e2wdq4h3hn73zjxelt67u3hdtj5w3etmqgqxm4jymza8rj5u6pt0r08azq3pf2u9", - "addr1qysvm626pgxcwgy2w7fk2ulmw0mc6v3twzes3arns64hk5eqeh545zsdsusg5aunv4elkulh35ezku9npr688p4t0dfsw7ur3u", - ], - }, - near: { - owners: [ - "992e069ce45717059abba021058759968fb0f61f048c09ac95b7a68a70b65ab1", - "7206287337fd1c74c3df9a04cecd8471a0ba8de3eb63bba3a1e49778f8538899", - "0df4207b35f21783f743f10b82dac228c9f11339aa1bc359f568b52efb6c46df", - "5362a3510eaf41f139d760ec375a425b95d4f86fe596f8d5e29351481a0a4941", - "452b94b0072819f60c0d757f6927155f12d6376409b0e6eac42d04946cd4c6eb", - ], - }, - /* - stellar: { - owners: [ - 'GCMDM2J4UH3CY5CUVNAKN3ALJ6VW7QVOV5WYBNC6XSJ4JCFTYPRLWG4C', - 'GB4274MD64QUXIZK35W5T6CHJBR6HDFELUFWSOCVWZPGD6OR33KTDZV2', - 'GB26QFVS5MMZLAY6ZOQJINFEYMYFWCL3P4EBIM7VRZOLBMZMBBD3BD4S', - 'GBR3K7R7WWMRIH32LSC2KWRUPY7OJIYXGQBPL2IRRYTECBI6CCPRVMDM', - 'GCC7ASAR7YFLV5SRIVAHMSBUWHSFJ6UEI2IN6YDUSNS7OCMQ4OZRBE3Q', - 'GB2ABH667FCKODV2YDXOLBLUUB7PDVJS65Q3MRG5YTCNQYKQNWWJQLI6', - 'GDNLCQTHJLNEUHD7OFS2SRK4VZUAAUBHNZSHY5LO3VWPVGVMCDFWAI7I', - 'GA3NTBDIKQVDDM6ZDKJLGXJFESWJ636AGRIW34RH5WL24LUMX3YASKX2', - 'GAWTWG5FZBWAZ6UZB2N7CNHB3ZWSPTVGU6SOQPN5N2TZQ5LDSJIPFEBK', - 'GDFHYZ7VDCVWKSMYAQH5XUO6CQQFFD5PQD6BEPVARNGNK5WLCNSECNFG' - ], - }, - */ - algorand: { - owners: [ - 'QLMX7FEKGZIKACSIH7FIFV3BNHXP77YZ5PTLTN5TKWWXBKL6HD6MO44FFQ', - '6ITEMKNE36NXKWWDL3WBYDHK3T77UY3QDCMBYBC5QMGVDFWEP626JX6CXY', - 'HTXFD4TB53EW35PF2S44DSE7PM77CKJ3QB3RRCR2FUOL4TTY6VYVUYWZGA', - 'IBFD3A43F3A63OCMV766BWQ3XHOXPJD5A67TPCTDG33FV6CVAGQ2AV6JMM', - 'VTPBTLUKFHKAZPXB2F43G3WXXD6I7URQS74BFYOUPD5GAQTWJY4UIOCXWI', - '6LNHIKUNADNB3SWPBSEJWDYLI2LPU5MQIV3Q4CF6FUPSIGURGG2JG6LRWI', - 'M7DNNAMT74T56D5BXJZ74IGD3TMZTIWQPIH4ZXTSILDOX7KXHOSX7LVYRY', - 'OINGC6GTRT5PWHZLKXHCZIKDE5K7WGURBHGHWT334RD3IRZDYCQPBJZ4YA', - 'IZV3NPANUZNG4FINAZZY6FF2QX6RVNG2ES7H5GYW5XQMYCLB4GBNZ6JTAA', - 'U5HSJ2K5RTWM5GUGPKZJP7S7KLT7ZJO5TEC2DEMYYFVQA6FHZ4LV72PO3U', - '3SMUH6GNY5WN677EM7WQZQU4T7V74WGPQOZXZJVNWYQXU4VJWJQSFOLRFY', - 'QHY5JVMIM6Z4F2P2W5FWLWHQTPPDTJXIEG4LDHZU6SRAJ7JN3HAMY5OX3I', - '6F3LATDIIVENDETF656572KILJAJ436F7JKWKQJEZAMQ6M4AEDFYNDGHFQ', - 'SGZUETZ7URTHFAYQDBP2ULJE6TQP5EVH3VCA27XPAI3LC7VH5HPHI4LFPE', - 'T42RUEO2MI4ORTX7733QECAYQ7ADS555J32NKHANHON5VIXBTRN4SOTAQQ' - ], - }, - sui: { - owners: [ - '0x5e74a105e60dcd2518706123953169ce7e0a000228c059d819c399f8e5d3dc18', - '0x5d9e6694ce659e907e10570c9fe7e71bc6eb5c99b6bdbd988c01575336ffa926', - '0xf52c6bef1b471531d3ef807811cfd28dee8f6ea97c7f9807d66caf81a82eacf2', - ], - }, - litecoin: { - owners: [ - 'MCCdPVEndTqpfNaUGQKoGqjYhnbnL4GsQR', - 'MVuBroau9tv99iUgLYp1sYbiPWtaZVBVwj', - 'MBTYopzaj3Pj5stq3XHLVvnWgiiTmNxrPf', - 'MGgwJ89huWE9zWahG8BW15TnM9AiME3mUo', - 'MNmoU5hxCbtXnNNo2nzcMsJZsBozfjt4F6', - 'MW5LnTpBEsAaT2TTyizzrwu9TVeKQXV9sR', - 'MHrmoW9rYSfvhaUgchoLEs1bjFzQ7NYwAf', - 'MQk45oaSMWsVmHBqoR1nZf5QukYcVmicWG', - 'MKY3d5NRvPE1mt9UmncQdS3DHGJpi3eTLc', - 'MFzqtyZRyw3zArZNUqAmEoRepZZ3UZiQFR', - 'MLyNpaG81sbYKz9Q8eVPioMCAsbEx8tjSS', - 'MTkDRqPnFzciriAWKxkPAYokGQpNbSaZMk', - 'MB7razLmn9RP1QkAyp5fhKYRXQXDoMfou8', - 'MJdcFiZPi6odqB3ixfHzFArgDKYkk72n26', - 'MCushifeh4zqaMi9dACwk9HGGFWQR7GM6Q', - 'MFdvNPxZGxSvVTQ9YTLCFhYPDVdqZzbM6W', - 'MW3CL1cGohXpd12qbvmNgQCqkQQiefuHHB', - 'MPNgSTzW5pmmnkr15RD6tXjWKaBq7kFi6t', - 'ML8aaX5RCGoMoJhC6EDiJBoe4eUAdidbK2', - 'MARwVoM1Nw62map35HMQRZGEZRC5CVCr4p', - 'MKtrjJwaU6rRm6y4w84gmYUTpuHcqw3B71', - 'MCWWG5pAQT31UQHLAhReeczFoQSCnzYkGt', - 'M83TvqQ8nWWdKTq6BdJ9gwJ9RqtqKESmJV', - 'MChEk9B4oDoGRPEHtye9aD9yjginJdT8G2', - 'MQrpVnx26vEAa3Mg2MQYwGdgFz4wSLFEiK', - 'MLv3eAWkkJqD9BBu1anvwm7hDf5hcvXvAS', - 'MStyLttcvux71LzoSnzBrr6bBEesYXoJME', - 'MJ4boTwV4d3iZWjuALZQJAYZRCfLUZmyiQ', - 'MUoeTyvGbxSyBLhuM5igjNV1pNtajZd7N5', - 'MNHyBmCs8BFAnMaampeB9GYycWC93wPsp6', - 'MQspNzustkQpanzvDob8PSR1CpnL714q2Q', - 'MKFmcjUWauE4oKg7C8YVySYf4VRQB8NZm1', - 'MCT8RZ6GmtYY7S9Sp9GWpV2y4wSwKDT7q8', - 'MBvoh2jBPrhcxdxeW17AvGixDjxnmDX96D', - 'MRR6a9n56yiABMRt9M14mE3SRm2gfkWBoi', - 'MQopYayjCVJRz23zJv9cD4pc35sdamDiez', - 'MP4zbwY1BPkdWG818do8B1kHc2976kwbW7', - 'MSMRRic2iPbGNuLZpfpSYjRVRdmn7m9H9u', - 'MRDW39X8mAbp7NXubpgbTGDrAn6dBNpnaS', - 'MS74cGiGME4Ghvr5REnCPo7KyqF13CQgUp', - 'MHnChtxbzCEdbmxVr897KjdEto8FsUDTaJ', - 'ME3cFeGyAWY6JqNAquEPNwxTpFNaMEzCom', - 'MECQWviAf7D9yZLRFC1XxeV2YLsVmsZGDA', - 'MMGW9R7wGdgi542yxn7drHcrwGzbPip7YB', - 'MR4o5A1GNwp16kepviArDAhBStowX3HWpB', - 'MQN8VMFxUSSNptJQd11xWJKora4TzcUWTX', - 'MSEacqJaABy84jEZU1tCARjNUyPkYYXyF4', - 'MAXXLxninTeh1wYQ6nVwY5kDKxuadVpPkQ', - 'MTdkASZFEHut7wAevUrDkK4ExCS5xccskg', - 'MBa5bozs9mGuqSpTmCxvjEcTRFpqVxfwxJ', - 'MTzJnrDEGvbPx76DAbRsMFf381e4D4JtvY', - 'MNxMb9gYu49k58Uhj3HeUBq8VQLic73SAv', - 'MHSFnosEGtAiu1AGyzSSVGSNAZaGHccNtS', - 'MBiApf5uVdj8kf6T8BEaYupXrReeZkxyj7', - 'MQksdQkafz3xhi5M7TpEEod73rCxoDdd6j', - 'MMAihs8bxAZPrXqc1wH23zFm3QFBoLqjCN', - 'ML6wKWcZrTz8JW49one627CoyuAutae29B', - 'MLSkwqjRxJsqYQsz23JTmDsPVG6L4g8YXq', - 'MKmvDX9rHPeqDsstgVYkaqXA3FkBJKX1NP', - 'MRJkrVxQy7CmwLSuXSxEUJV2RmdpdK31Sg', - 'MQsUPLNiiENZ7rW7L4bmvfchV4V4yuTBiH', - 'MUZjr75r5LDNUQ5Kxib8pxM4mx6j83AVAr', - 'MKZKMr49AnAjfFTaU2PtniYtCxk9oWEMko', - 'MCn7NaXw4oiUtQTDywUZB8SHvG6aj3U86m', - 'MHyyn6QcHzTBaVsUAymKAQkr7Tj4qnEjzN', - 'MADJo5apdb39a8uENhspT9osr7Qc6dwBWd', - 'MM7j9WiEP8VnV8Bs2sh5svrr5Da633FzEe', - 'MLK71sPBJzt2gXggAQpWpZ177zDiSbnyaa', - 'MV3176sptKx4W1pPJAz3Ty22J4j5JYCBjV', - 'MK78ACpK6CYRBudZbMhjs3XLPVrTRqXEwf', - 'MC9Jtp9bLL6YRh42obVTqzavvigHgK97Bm', - 'MWkZD4BuH9YTkKqidjFVKgEWEiRrcPnjnU', - 'MJ844ockZqTR6hiFV9tJaLy1wNnYt5F1aV', - 'MU9KDuz1B38tsGiRzC5hW5zWCazQPRSfza', - 'MS1tfawWKcXjG3k715ixy5Euf8aNjrUfPH', - 'MRJGL6M9quKsmwmkpK9r7QzSSXLnKDg3Cy', - 'MF3kCFYtnBUDoZRekSYQsytG6huxDPncR6', - 'MQDMjpZqc2qiAXnquT2E4cg4e81Kjrpiir', - 'MBg8quT4yw6jDMS4f9sXM4V8UU1gM6YBEX', - 'MGkumZM7EhMvaaNgZrMArJTJrftfVeeMZ5', - 'MNHiuHydXpWgxk8nZELRoZCE1vB2SWzJZH', - 'MArcGPBHNYjY5gGUdSz4k9LQoC23AKaBJ9', - 'MFJw1K2XDz5jmqNdEAsjFFEgVGyf1rG7sg', - 'M9hF4w47naAvTRhrxzAJAqRu5LncUrBXjP', - 'MGUCCLzphy71PK9XpvVeP9V9F8QRYnrQ67', - 'M8BoMtMbPdstujGHFXnbBVwDKY3P1qp36r', - 'MJt5SFbtYx3TRANdP1anA8Cq9GwYBp67sf', - 'MDK6bRjna44CTToSxUokYCE6bhLUTba5K7', - 'MTC8jiKhpNBNKS1f8Bx1nuEDUE2pXNeKeo', - 'MGT6XdigiRQSxUaZJDdexHGZiRdfs5kTwc', - 'MVAbWRSN7JWwK4nZ2TJk3acF8vprCMvEMH', - 'MLquwFoWqQY7BDvMMyrBbDawX7PXFmkZPQ', - 'MSULJbAKZwDCxFDAnKZSQGWnExtkQrB9Fo', - 'M816JPe3XbujpUQe4E24XGKq6m1Azviooy', - 'MNU3N26EWgP7AnwUj3owtmQK6VcnZcvBVm', - 'MHFAu1pPv2pDoxZGgXLVGXJByiQYKBaPHq', - 'MNzHV8vgBKDvJD9Cd5i35f1zMjtzLqoNv7', - 'MBtAcFuHWDhTkNWf4X28DtxRHc7x3xSedQ', - 'MJLZKsvpFp8c9LNk6ZCMApo3C5fq27c7Du', - 'MHnWzMcfqR8twkaLqxGYd5KRxMTCjq8rTT', - 'MJpU1cEFUYgD9tyUydwRX1U6vij5hYxFr4', - 'MDDMKZgiyCZLKHZPidW67c25UCQk8d1Qbq', - 'MV5UhTa4wvy9iuExNGJeeVu6f3C64xoGoc', - 'MHkMRkmrrYx1cprn62YFC9LcpidmPPjJdd', - 'MAgUB1Np8VnePm4wAfN3PF1nshoJiTqyrs', - 'MSFNPnkS7hM1yqF5U25rDhwdXWKrBBiwbL', - 'MR9wCB9rAeZsTesxURVsvubYA3WnBqK6Kv', - 'MQTwvMkCf1fkb6gayogUbtfLhCdAnb3aHL', - 'MADgny8erjzWxeU9xQB95wY9emxGFYNNMf', - 'MUcR16vjth9qqkHYDqfRFneuffk4mrFEP1', - 'MBG7pCv3eqKDUK7u1qaFZJRZ9CaK2Fwm2f', - 'MVNjiy399cNaHhEdBk5oqmn2RQj4XZ7M5h', - 'MGLfAxFnSpdFsqijPhrRFTyqxVgj1h21C1', - 'MQ8yAwgH8Kfruh3uF8EGg1GE2tGA4mHdPL', - 'MSHbNAAz84j1NXbuuUpBAhG9k5gpXPbjsB', - 'MLf7WwukRFsAYVhEtbxkEpQhHewoXaKEym', - 'MNWkx5CWqd83HR4MWVfeEuUNYk4ZgehXVx', - 'MUckCpvUjkAsetKwHpxrVXFq8BmiSYtJ3i', - 'MMGRuY6AbuqCxHvn4PEboVzQxTpfw2LXNb', - 'MDg6Uxukmcou8ZfRdpoXYzhJGJy52cnb1g', - 'MFViYJjMCsmDNzLK2JNzpEJFaUoqU6fxY2', - 'MWciPQLSRYzmzq59jUdwuXwSMh7viCHWSh', - 'MEDZ1jzxpgzxcAMULoWLgeAEUVCNgZoc58', - 'MUsWJrTkQaq88Y7PzxyJgcics35MZUcihq', - 'MJ4ADyMSMHMVvNVvy1y22AeZd19xckcsnP', - 'MH1x7vW7gTCJPV3gBe7EZDJPiMfSdozVDG', - 'MGxv2m7BcfEkoFLRxWMX1DgHQF46FDrRSU', - 'MSiLHBGLjeYBayjF3tSDJhrUxLwuHSF8Tw', - 'MQvDDWc2JF3aKsaMj9XQVi58eRsX5XQUHz', - 'MD64yoKxEcRqvhfFHPZ3TpSWpF2xNaCtxS', - 'MLADqj2Dk5uLkscjRwSoXWBzC73jQ5qaJ1', - 'MEBHGWxZ1YLBbFFTHQcEpah2Ns1uMYx9JH', - 'MAQBFztghZSLuk8xaaWY5yhsM4tZdr8Hus', - 'MTJBX7FWKq9TBXRbqmJz7ib81Ri5xeSvvz', - 'MVU8ekQmE9xNgJSSDwwSuRgTa4wL7rRHFk', - 'MF2JvKQM7F7JSm4cJ1ytKPBoLB3GuqtZS5', - 'MP95gZj56ytfb6K3mPNLmN8NKQgURtgCMK', - 'M9K67PRA41R7HhZW7ox54BjUgEpp6g2avY', - 'MUph6usZJPeE9PAgbnd5XNoGrMXnA3Y12V', - 'MBRgYVvqwzhKFie5NjVkdhL4zbzraAtEpB', - 'MCEXrNou3Ry5i3DsP2YnWRotLmKdsuByqx', - 'MKrHnSYqMnyrD7EXrpYhLXxNoB14KGsnBh', - 'MVgkRx9SUegmfSCVZYuo7CzN6AMjt4m4fz', - 'MQQAQaMqj6Q4SZf5feC9FLgXKDv3cGzUDM', - 'MJN5ak3g2XDCLkHCZAVEhEue9m27LGCsPE', - 'M85TWZuiv4xLZoffdLfQzqDtSdzqR9FLvh', - 'MFz59sSyCNQCLdCuacDk3uL79GgsZf2Stt', - 'MLE5MCwyh6oZ91DWXM2EykFQysZUwcsVj5', - 'MDmMUDZemobFEP1Jj2RmC1tH2a6rA817mj', - 'MPF5NFk2QXYd56XsgCh1QeHkHdRM6ZhyHM', - 'MQr6tpazFhE5W7KypjgFcmmSwn3F3NQCkE' - ], - }, }; -module.exports = cexExports(config); +const chains = [ + 'bitcoin', 'litecoin', 'ripple', + 'ethereum', 'avax', 'solana', 'sui', 'xdc', 'near', 'cardano', 'algorand', +] + +chains.forEach(chain => { + module.exports[chain] = { + tvl: async (...args) => { + const data = await getAllData() + const tvlFunc = cexExports({ [chain]: data[chain] })[chain].tvl + return tvlFunc(...args) + } + } +}) + +let _allData + +function getAllData() { + if (!_allData) + _allData = _getAllData() + + return _allData + + function _getAllData() { + return getConfig('bitstamp', undefined, { + fetcher: async () => { + let page = 1 + let hasMorePages = true + let lastItem + const walletChainMapping = {} + do { + sdk.log('fetching page', page) + const data = await get('https://www.bitstamp.net/api/v2/wallet_transparency/?perPage=1000&page=' + page) + const allWallets = Object.values(data.wallets).flat() + const currentLastItem = allWallets[allWallets.length - 1] + + allWallets.forEach(({ address, network }) => { + if (!walletChainMapping[network]) + walletChainMapping[network] = {} + walletChainMapping[network][address] = true + }) + + page++ + hasMorePages = !lastItem || currentLastItem.address !== lastItem.address + lastItem = currentLastItem + } while (hasMorePages) + + Object.entries(walletChainMapping).forEach(([chain, wallets]) => { + walletChainMapping[chain] = { owners: Object.keys(wallets) } + }) + + walletChainMapping.avax = walletChainMapping['avalanche-c-chain'] + walletChainMapping.xdc = walletChainMapping['xdc-network'] + walletChainMapping.ripple = config.ripple + return walletChainMapping + } + }) + } +} + diff --git a/projects/helper/chain/litecoin.js b/projects/helper/chain/litecoin.js index f24b942d5b..400d6f6d20 100644 --- a/projects/helper/chain/litecoin.js +++ b/projects/helper/chain/litecoin.js @@ -1,10 +1,22 @@ const sdk = require('@defillama/sdk') const { get } = require('../http') +const { PromisePool } = require('@supercharge/promise-pool') // const url = addr => 'https://chainz.cryptoid.info/ltc/api.dws?q=getbalance&a=' + addr -const url = addr => 'https://ltc.tokenview.io/api/address/balancetrend/ltc/' + addr +const url1 = addr => 'https://ltc.tokenview.io/api/address/balancetrend/ltc/' + addr +const url = addr => 'https://explorer.litecoin.net/api/address/' + addr async function getBalance(addr) { + try { + const {chain_stats} = await get(url(addr)) + return (chain_stats.funded_txo_sum - chain_stats.spent_txo_sum) / 1e8 + } catch (e) { + console.error(e) + return getBalance1(addr) + } +} + +async function getBalance1(addr) { // return get(url(addr)) const {data} = await get(url(addr)) return +Object.values(data[0])[0] @@ -12,10 +24,14 @@ async function getBalance(addr) { async function sumTokens({ balances = {}, owners = [] }) { let total = 0 - for (const owner of owners) { + + await PromisePool + .withConcurrency(5) + .for(owners) + .process(async owner => { const balance = await getBalance(owner) total += balance - } + }) sdk.util.sumSingleBalance(balances, 'litecoin', total) return balances } From 2ec24d2afdc859146b7609339076eb1f1eb7172d Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:41:58 +0100 Subject: [PATCH 0117/1768] add new wallet pstake (#11382) --- projects/pstake-btc/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 7076dd84c4..6079a8ee24 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -1,7 +1,7 @@ const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require("@defillama/sdk"); -const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl"]; +const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay"]; module.exports = { methodology: `Total amount of BTC in ${owner}.`, From bc829ef0d778c1d1e89d6765921561e3d8d804f0 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:51:19 +0100 Subject: [PATCH 0118/1768] add new wallet pstake (#11384) From 91126b73a06f0e1671caec7bd1c14ec5c5759a8f Mon Sep 17 00:00:00 2001 From: Nicolas Zozol Date: Thu, 22 Aug 2024 17:22:37 +0200 Subject: [PATCH 0119/1768] update: adding chains Scroll, mantle and linea (#11383) --- projects/swaap-v2/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/swaap-v2/index.js b/projects/swaap-v2/index.js index c2a7fecc92..3a212aa372 100644 --- a/projects/swaap-v2/index.js +++ b/projects/swaap-v2/index.js @@ -12,6 +12,9 @@ const config = { bsc: { vault: '0x03c01acae3d0173a93d819efdc832c7c4f153b06', fromBlock: 39148730,}, base: { vault: '0x03c01acae3d0173a93d819efdc832c7c4f153b06', fromBlock: 14451361,}, mode: { vault: '0xd315a9c38ec871068fec378e4ce78af528c76293', fromBlock: 7242549,}, + mantle: { vault: '0xd315a9c38ec871068fec378e4ce78af528c76293', fromBlock: 65689171,}, + scroll: { vault: '0xd315a9c38ec871068fec378e4ce78af528c76293', fromBlock: 6934854,}, + linea: { vault: '0xd315a9c38ec871068fec378e4ce78af528c76293', fromBlock: 6052579,}, } /** From 7fbeb8ea5876217ccbe7a910d70aec2ef7d3e195 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Thu, 22 Aug 2024 18:38:29 +0100 Subject: [PATCH 0120/1768] add abacus --- projects/abacus/index.js | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 projects/abacus/index.js diff --git a/projects/abacus/index.js b/projects/abacus/index.js new file mode 100644 index 0000000000..9076f89a81 --- /dev/null +++ b/projects/abacus/index.js @@ -0,0 +1,42 @@ +const { staking } = require("../helper/staking"); + +// Abacus contracts +// arbitrum +const abcRAM = '0x9EfCFc5b49390FC3fb9B58607D2e89445Bb380BF'; +const abcRAMStake = '0xBD8a830f4Ae6B2355E12E9714FeDB5aE9d71c81D'; + +// avalanche +const abcPHAR = '0xd5d0A9b3f2C264b955Ae7161cfA6D38A7aEa60a7'; +const abcPHARStake = '0x541AdD99620d1294900851dCa2eca06a5c797c3e'; + +// mantle +const abcCLEO = '0xCffbE0E73c750731EdB38C14Bc81A39dAc91819d'; +const abcCLEOStake = '0x498126eDEA7FBb4626585ebc98a8230B8fFa1cC9'; + +// bsc +const liveTHE = '0xCdC3A010A3473c0C4b2cB03D8489D6BA387B83CD'; +const liveTHEStake = '0xD8C61EDe8CD9EE7B93855c3f110191e95eDF2979'; + +// polygon +const liveRETRO = '0xCaAF554900E33ae5DBc66ae9f8ADc3049B7D31dB'; +const liveRETROStake = '0x1de28CB80428C265e7f40A05066B68c31e8d7D0e'; + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + tvl: staking(abcRAMStake, abcRAM, "arbitrum"), + }, + avax: { + tvl: staking(abcPHARStake, abcPHAR, "avax"), + }, + mantle: { + tvl: staking(abcCLEOStake, abcCLEO, "mantle"), + }, + bsc: { + tvl: staking(liveTHEStake, liveTHE, "bsc"), + }, + polygon: { + tvl: staking(liveRETROStake, liveRETRO, "polygon"), + }, + methodology: "Counts tokens staked in the Abacus staking contracts across multiple chains", +}; \ No newline at end of file From 4b6d631bacff1308797831a1627f6ac219a40f8a Mon Sep 17 00:00:00 2001 From: Stone <125890624+Stonepapa@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:16:54 +0800 Subject: [PATCH 0121/1768] Add some assets for bsquared. (#11395) * Update index.js * Update index.js --- projects/bsquared/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/bsquared/index.js b/projects/bsquared/index.js index 3057e6cf22..df8c3fc94d 100644 --- a/projects/bsquared/index.js +++ b/projects/bsquared/index.js @@ -20,6 +20,7 @@ const BTCOwners = [ "bc1qe4xx7eg5c4qjq8838zv05f7uzfmyyyftdpy48t", "3GPVsXtvbfFNRYbLwJowaL7EXo8hqakfkv", "bc1q8axfvwqa0fqds5w6vva9g5kej9e4mp4ap3dmff", + "bc1q6crqwsg59s2j4v5gvd94775pjj8l0fmflmv9jd", "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2" ]; From 616cbb09d57f5ff6a208f8f8ae92be96f7ac40f3 Mon Sep 17 00:00:00 2001 From: hamur dev <122794657+tpktpj@users.noreply.github.com> Date: Fri, 23 Aug 2024 04:30:05 -0400 Subject: [PATCH 0122/1768] Add new markets (#11391) --- projects/avalon-finance/index.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 47dc1ec950..1c3171a6fe 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -18,6 +18,19 @@ const innovativeMarket = { merlin: aaveExports('', '0x91b212e9FaF20117Eae59d6289CB38749DDFc070', undefined, ['0x883cb2E2d9c5D4D9aF5b0d37fc39Fa2284405682'], { v3: true }), btr: aaveExports('', '0x90EA8C92AddE4D3f323Dad9E36f0E0395dbc929d', undefined, ['0x4c25c261Fe47bC216113D140BaF72B05E151bcE4'], { v3: true }), } +const pumpBTCMarkets = { + // Ethereum - Pump BTC + ethereum: aaveExports('', '0xE00A3FE97714765A1a2054E850724Fd1320FaCc0', undefined, ['0x2eE0438BCC1876cEA2c6fc43dD21417cF3D1c2eF'], { v3: true }), + // BSC - PumpBTC + bsc: aaveExports('', '0xb1C93Ba1286b6CCA1496C266f0eBfCe94b0C0cc0', undefined, ['0x58c937fa2D147117dB43d187f9411151edfFf03c'], { v3: true }), +} + +const otherProtocolTokenMarkets = { + // ETH - Swell BTC + ethereum: aaveExports('', '0x3975BE5E668b189b8Ac9049B96A9D9561c4F5273', undefined, ['0x87Ed94868f6fbaA834Db81a1C5854c445caCaB67'], { v3: true }), + // Merlin - UniBTC + merlin: aaveExports('', '0x0024818043D04B1Cc9685233D47eF7eea6Df0A5E', undefined, ['0x623700Fee1dF64088f258e2c4DAB4D6aEac4dDA6'], { v3: true }), +} -module.exports = mergeExports(mainMarket, innovativeMarket) +module.exports = mergeExports(mainMarket, innovativeMarket,pumpBTCMarkets,otherProtocolTokenMarkets) module.exports.methodology = methodologies.lendingMarket From 780376d1be8087c04f7b1b5c5746c46a022a40ec Mon Sep 17 00:00:00 2001 From: Darruma <30578602+Darruma@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:16:39 +0100 Subject: [PATCH 0123/1768] feat: add tvl for bcraft clans (#11390) --- projects/bcraft/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/bcraft/index.js diff --git a/projects/bcraft/index.js b/projects/bcraft/index.js new file mode 100644 index 0000000000..3f2fce4509 --- /dev/null +++ b/projects/bcraft/index.js @@ -0,0 +1,12 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const clans = "0x0De0D0cF717af57D2101F6Be0962fA890c1FBeC6" +async function tvl(time, ethBlock, _b, { api}) { + return sumTokens2({ tokens: [nullAddress], owner: clans, api }) +} + +module.exports = { + methodology: `We count the ETH on ${clans}`, + base: { + tvl: tvl + } +} \ No newline at end of file From bccc0b8535dffe37b6ebeeca0db9f2120fe850df Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Fri, 23 Aug 2024 05:36:13 -0400 Subject: [PATCH 0124/1768] added neftyblocks project and fixed atomichub TVL adapter (#11385) Co-authored-by: Mike D --- projects/atomichub/index.js | 5 +++-- projects/neftyblocks/index.js | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 projects/neftyblocks/index.js diff --git a/projects/atomichub/index.js b/projects/atomichub/index.js index b5936881a9..7b07e90db9 100644 --- a/projects/atomichub/index.js +++ b/projects/atomichub/index.js @@ -12,14 +12,15 @@ async function eos() { // AtomicHub // https://wax.atomichub.io/ async function wax() { + const accounts = ["atomicmarket", "atomicassets"]; const tokens = [ ["eosio.token", "WAX", "wax"], ]; - return await get_account_tvl("atomicmarket", tokens, "wax"); + return await get_account_tvl(accounts, tokens, "wax"); } module.exports = { - methodology: `AtomicHub TVL is achieved by querying token balances from AtomicHub's smart contract.`, + methodology: `AtomicHub TVL is achieved by querying token balances from AtomicHub's smart contracts.`, eos: { tvl: eos }, diff --git a/projects/neftyblocks/index.js b/projects/neftyblocks/index.js new file mode 100644 index 0000000000..b6f1fd65f8 --- /dev/null +++ b/projects/neftyblocks/index.js @@ -0,0 +1,27 @@ +const { get_account_tvl } = require("../helper/chain/eos"); + +const tokens = [ + ["eosio.token", "WAX", "wax"], + ["alien.worlds", "TLM", "alien-worlds"], + ["token.nefty", "NEFTY", "nefty"], +]; + +// NeftyBlocks +// https://neftyblocks.com +async function wax() { + const accounts = ["blend.nefty", "up.nefty", "neftyblocksd", "neftyblocksp", "market.nefty", "swap.nefty", "swap.we"]; + return await get_account_tvl(accounts, tokens, "wax"); +} + +async function staking() { + const accounts = ["stake.nefty", "reward.nefty"]; + return await get_account_tvl(accounts, tokens, "wax"); +} + +module.exports = { + methodology: `NeftyBlocks TVL is achieved by querying token balances from NFT market and swap contracts.`, + wax: { + tvl: wax, + staking + }, +} \ No newline at end of file From 76ef6539b699e71a265d719bcd5ea3f41ce862db Mon Sep 17 00:00:00 2001 From: RomanYarinski <139853615+RomanYarinski@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:45:38 +0200 Subject: [PATCH 0125/1768] Update Vest Exchange adapter (#11387) * feat: add vest adapter * Refactor TVL calculation in Vest module * feat: add new addresses to Vest Exchange adapter --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/vest/index.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/projects/vest/index.js b/projects/vest/index.js index 6a9e98895b..7187a502c5 100644 --- a/projects/vest/index.js +++ b/projects/vest/index.js @@ -5,6 +5,39 @@ module.exports = { methodology: "Total USDC locked in the Vest Exchange.", start: 1710709200, era: { - tvl: staking('0xf7483A1464DeF6b8d5A6Caca4A8ce7E5be8F1F68', ADDRESSES.era.USDC), + tvl: staking([ + "0xf7483A1464DeF6b8d5A6Caca4A8ce7E5be8F1F68", + "0x7ccF5BbeC69c790D27dA3b5398B9e0d6D6EeC9F3", + ], ADDRESSES.era.USDC), + }, + base: { + tvl: staking( + "0xE80F92077131b9890599E418AE323de71cE1C35a", + ADDRESSES.base.USDC + ), + }, + optimism: { + tvl: staking( + "0xE80F92077131b9890599E418AE323de71cE1C35a", + ADDRESSES.optimism.USDC_CIRCLE + ), + }, + ethereum: { + tvl: staking( + "0xE80F92077131b9890599E418AE323de71cE1C35a", + ADDRESSES.ethereum.USDC + ), + }, + polygon: { + tvl: staking( + "0xE80F92077131b9890599E418AE323de71cE1C35a", + ADDRESSES.polygon.USDC_CIRCLE + ), + }, + arbitrum: { + tvl: staking( + "0x80C526d1c2fddADB3Cd39810cd7A79E07b0EDa00", + ADDRESSES.arbitrum.USDC_CIRCLE + ), }, } \ No newline at end of file From 031673c13b0b74c2687b3ffab69b8ddd07861401 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:07:17 +0200 Subject: [PATCH 0126/1768] update aqua network #11386 --- projects/aqua-network/index.js | 65 ++++++++++++++-------------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/projects/aqua-network/index.js b/projects/aqua-network/index.js index 948b43a8cb..621f7abeac 100644 --- a/projects/aqua-network/index.js +++ b/projects/aqua-network/index.js @@ -1,51 +1,38 @@ -const utils = require("../helper/utils"); -const { getApiTvl } = require("../helper/historicalApi"); - +const { get } = require('../helper/http') const AQUA_STATS_URL = "https://amm-api.aqua.network/api/external/v1/statistics/totals/?size=all" -function findClosestDate(items) { - const currentDate = new Date().getTime(); - - let closestItem = null; - let closestDiff = Infinity; - - for (let item of items) { - const itemDate = new Date(item.date).getTime(); - const diff = Math.abs(currentDate - itemDate); - - if (diff < closestDiff) { - closestItem = item; - closestDiff = diff; - } - } - - return closestItem; +let _data + +async function getData() { + if (!_data) + _data = get(AQUA_STATS_URL) + const data = await _data + const res = {} + data.forEach((item) => { + res[item.date] = item.tvl / 1e8 + }) + return res } -async function current() { - var aquaHistoricalData = ( - await utils.fetchURL(AQUA_STATS_URL) - ).data; - - const currentItem = findClosestDate(aquaHistoricalData); - - return parseFloat(currentItem.tvl) / 10e7; +function formatUnixTimestamp(unixTimestamp) { + const date = new Date(unixTimestamp * 1000); // Convert Unix timestamp to milliseconds + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are zero-based + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; } -function tvl(time) { - return getApiTvl(time, current, async () => { - var aquaHistoricalData = ( - await utils.fetchURL(AQUA_STATS_URL) - ).data; - - return aquaHistoricalData.map((item) => ({ - date: new Date(item.date), - totalLiquidityUSD: parseFloat(item.tvl) / 10e7, - })); - }); +async function tvl(api) { + const key = formatUnixTimestamp(api.timestamp) + const allData = await getData() + const usdValue = allData[key] + if (!usdValue) + throw new Error('No data found for current date'); + api.addCGToken('tether', usdValue) } module.exports = { + start: 1719792000, misrepresentedTokens: true, methodology: 'counts the liquidity of the Pools on AMM, data is pulled from the Aquarius API: "https://amm-api.aqua.network/api/external/v1/statistics/totals/".', From add145a1c3ec6c6eb8297f6e4a406a29837b57e4 Mon Sep 17 00:00:00 2001 From: Andrei Simion Date: Fri, 23 Aug 2024 17:18:55 +0700 Subject: [PATCH 0127/1768] =?UTF-8?q?=20=F0=9F=8C=B6=20added=20Tanukix=20D?= =?UTF-8?q?EX=20on=20the=20Taiko=20chain=20(#11396)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🌶 added Tanukix DEX on the Taiko chain * code refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 3 +++ projects/tanukix/index.js | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 projects/tanukix/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index db830e49bb..46ff851fd1 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -62,6 +62,9 @@ const fixBalancesTokens = { q: { [ADDRESSES.q.WQ]: { coingeckoId: "q-protocol", decimals: 18 }, }, + taiko: { + '0x7d02A3E0180451B17e5D7f29eF78d06F8117106C': { coingeckoId: "dai", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/tanukix/index.js b/projects/tanukix/index.js new file mode 100644 index 0000000000..a257ba1488 --- /dev/null +++ b/projects/tanukix/index.js @@ -0,0 +1,8 @@ +const { onChainTvl } = require('../helper/balancer') + +module.exports = { + methodology: "Sum of all the tokens locked in TanukiX vault", + taiko: { + tvl: onChainTvl('0x3251e99cEf4b9bA03a6434B767aa5Ad11ca6cc31', 204741) + }, +} \ No newline at end of file From 2d1d14f36e4d628367c95776d212cd06e4fa5a9c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:45:07 +0200 Subject: [PATCH 0128/1768] code refactor --- projects/abacus/index.js | 62 ++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 40 deletions(-) diff --git a/projects/abacus/index.js b/projects/abacus/index.js index 9076f89a81..08c6fd4eb8 100644 --- a/projects/abacus/index.js +++ b/projects/abacus/index.js @@ -1,42 +1,24 @@ -const { staking } = require("../helper/staking"); +const wildCreditABI = require('../wildcredit/abi.json'); -// Abacus contracts -// arbitrum -const abcRAM = '0x9EfCFc5b49390FC3fb9B58607D2e89445Bb380BF'; -const abcRAMStake = '0xBD8a830f4Ae6B2355E12E9714FeDB5aE9d71c81D'; +const config = { + arbitrum: { strategy: '0xB4E291f443f51D80186dd3EE0Af7F4a4E6e90804', veToken: '0xAAA343032aA79eE9a6897Dab03bef967c3289a06', token: '0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418' }, + avax: { strategy: '0xedEd6a22bf714d4B19b7e7bC1CA0BCF88956751c', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xaaab9d12a30504559b0c5a9a5977fee4a6081c6b' }, + bsc: { strategy: '0x37e46C030e0d843b39F692c9108E54945F4CCCf7', veToken: '0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D', token: '0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11' }, + polygon: { strategy: '0x32dAc1B8AD93b53F549D6555e01c35dCC50b6229', veToken: '0xB419cE2ea99f356BaE0caC47282B9409E38200fa', token: '0xBFA35599c7AEbb0dAcE9b5aa3ca5f2a79624D8Eb' }, + mantle: { strategy: '0xCaAF554900E33ae5DBc66ae9f8ADc3049B7D31dB', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xC1E0C8C30F251A07a894609616580ad2CEb547F2' }, +} -// avalanche -const abcPHAR = '0xd5d0A9b3f2C264b955Ae7161cfA6D38A7aEa60a7'; -const abcPHARStake = '0x541AdD99620d1294900851dCa2eca06a5c797c3e'; - -// mantle -const abcCLEO = '0xCffbE0E73c750731EdB38C14Bc81A39dAc91819d'; -const abcCLEOStake = '0x498126eDEA7FBb4626585ebc98a8230B8fFa1cC9'; - -// bsc -const liveTHE = '0xCdC3A010A3473c0C4b2cB03D8489D6BA387B83CD'; -const liveTHEStake = '0xD8C61EDe8CD9EE7B93855c3f110191e95eDF2979'; - -// polygon -const liveRETRO = '0xCaAF554900E33ae5DBc66ae9f8ADc3049B7D31dB'; -const liveRETROStake = '0x1de28CB80428C265e7f40A05066B68c31e8d7D0e'; - -module.exports = { - misrepresentedTokens: true, - arbitrum: { - tvl: staking(abcRAMStake, abcRAM, "arbitrum"), - }, - avax: { - tvl: staking(abcPHARStake, abcPHAR, "avax"), - }, - mantle: { - tvl: staking(abcCLEOStake, abcCLEO, "mantle"), - }, - bsc: { - tvl: staking(liveTHEStake, liveTHE, "bsc"), - }, - polygon: { - tvl: staking(liveRETROStake, liveRETRO, "polygon"), - }, - methodology: "Counts tokens staked in the Abacus staking contracts across multiple chains", -}; \ No newline at end of file +Object.keys(config).forEach(chain => { + const { strategy, veToken, token, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const nftPositions = await api.call({ abi: 'erc20:balanceOf', target: veToken, params: strategy }) + const positionIds = await api.multiCall({ + abi: wildCreditABI.tokenOfOwnerByIndex, target: veToken, + calls: Array(Number(nftPositions)).fill(0).map((_, index) => ({ params: [strategy, index] })) + }) + const locked = await api.multiCall({ abi: 'function locked(uint256) view returns (uint256 amount, uint256 end)', calls: positionIds, target: veToken }) + locked.forEach(i => api.add(token, i.amount)) + } + } +}) \ No newline at end of file From 415842f28233e97261bd4a7f7ca5b030d80a7457 Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Fri, 23 Aug 2024 18:08:38 -0700 Subject: [PATCH 0129/1768] Create index.js (#11401) --- projects/xtrade/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/xtrade/index.js diff --git a/projects/xtrade/index.js b/projects/xtrade/index.js new file mode 100644 index 0000000000..e0e2a717df --- /dev/null +++ b/projects/xtrade/index.js @@ -0,0 +1,9 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + xlayer: { + factory: '0x612D9EA08be59479B112D8d400C7F0A2E4aD4172', + fromBlock: 813172, + isAlgebra: true, + }, +}) From e6b162c0cfce817175d2f504925841c63fe43132 Mon Sep 17 00:00:00 2001 From: tstemko <57684389+tstemko@users.noreply.github.com> Date: Sat, 24 Aug 2024 02:47:54 -0400 Subject: [PATCH 0130/1768] Add europa, fuse, hedera, kava, scroll, taiko to TVL calcs (#11388) Co-authored-by: Tatyana Stemkovski --- projects/ichifarm/index.js | 41 ++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index 982a5bf1f6..8ed215101c 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -79,6 +79,11 @@ const config = { { factory: '0x8a76c26E0089111989C14EF56b9733aa38B94148', fromBlock: 20999423, isAlgebra: false, }, // zkSync Era ] }, + europa: { + vaultConfigs: [ + { factory: '0x1B0ef045830466171D617dD0F1142aD699A4Cd63', fromBlock: 5607229, isAlgebra: false, }, // Sushi + ] + }, evmos: { vaultConfigs: [ { factory: '0x7c6389714719c68caac8ae06bae6e878b3605f6d', fromBlock: 19029984, isAlgebra: false, }, // Forge @@ -90,16 +95,21 @@ const config = { { factory: '0x89FFdaa18b296d9F0CF02fBD88e5c633FEFA5f34', fromBlock: 79156621, isAlgebra: true, }, // Spiritswap ] }, - // hedera: { - // vaultConfigs: [ - // { factory: '0xb62399d23d1c81f08ea445a42d7f15cc12090a71', fromBlock: 59010832, isAlgebra: false, }, // Saucerswap - // ] - // }, - // kava: { - // vaultConfigs: [ - // { factory: '0x2d2c72C4dC71AA32D64e5142e336741131A73fc0', fromBlock: 8864638, isAlgebra: false, }, // Kinetix - // ] - // }, + fuse: { + vaultConfigs: [ + { factory: '0xfBf38920cCbCFF7268Ad714ae5F9Fad6dF607065', fromBlock: 30026180, isAlgebra: false, }, // Voltage + ] + }, + hedera: { + vaultConfigs: [ + { factory: '0xb62399d23d1c81f08ea445a42d7f15cc12090a71', fromBlock: 59010832, isAlgebra: false, }, // Saucerswap + ] + }, + kava: { + vaultConfigs: [ + { factory: '0x2d2c72C4dC71AA32D64e5142e336741131A73fc0', fromBlock: 8864638, isAlgebra: false, }, // Kinetix + ] + }, linea: { vaultConfigs: [ { factory: '0xb0e7871d53BE1b1d746bBfD9511e2eF3cD70a6E7', fromBlock: 4722347, isAlgebra: false, }, // Linehub @@ -133,6 +143,17 @@ const config = { { factory: '0x1721cB3ff3cAF70a79bDE9d771B27646ed8115b1', fromBlock: 11102475, isAlgebra: true, }, // QuickSwap ] }, + scroll: { + vaultConfigs: [ + { factory: '0xb42D5956cDe4386B65C087CfCD16910aB6114F15', fromBlock: 5264782, isAlgebra: false, }, // Metavault + { factory: '0x9FAb4bdD4E05f5C023CCC85D2071b49791D7418F', fromBlock: 4728729, isAlgebra: false, }, // Uniswap + ] + }, + taiko: { + vaultConfigs: [ + { factory: '0x9FAb4bdD4E05f5C023CCC85D2071b49791D7418F', fromBlock: 11578, isAlgebra: true, }, // Henjin + ] + }, } Object.keys(config).forEach(chain => { From eda97bef03beedc73d18c85c7646285d8660044c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 24 Aug 2024 08:52:13 +0200 Subject: [PATCH 0131/1768] update ichifarm --- projects/ichifarm/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index 8ed215101c..15462f2083 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -79,11 +79,11 @@ const config = { { factory: '0x8a76c26E0089111989C14EF56b9733aa38B94148', fromBlock: 20999423, isAlgebra: false, }, // zkSync Era ] }, - europa: { + /* europa: { vaultConfigs: [ { factory: '0x1B0ef045830466171D617dD0F1142aD699A4Cd63', fromBlock: 5607229, isAlgebra: false, }, // Sushi ] - }, + }, */ evmos: { vaultConfigs: [ { factory: '0x7c6389714719c68caac8ae06bae6e878b3605f6d', fromBlock: 19029984, isAlgebra: false, }, // Forge @@ -100,11 +100,11 @@ const config = { { factory: '0xfBf38920cCbCFF7268Ad714ae5F9Fad6dF607065', fromBlock: 30026180, isAlgebra: false, }, // Voltage ] }, - hedera: { + /* hedera: { vaultConfigs: [ { factory: '0xb62399d23d1c81f08ea445a42d7f15cc12090a71', fromBlock: 59010832, isAlgebra: false, }, // Saucerswap ] - }, + }, */ kava: { vaultConfigs: [ { factory: '0x2d2c72C4dC71AA32D64e5142e336741131A73fc0', fromBlock: 8864638, isAlgebra: false, }, // Kinetix @@ -200,8 +200,9 @@ Object.keys(config).forEach(chain => { onlyArgs: true, fromBlock, }) - const vaultBalances = await api.multiCall({ abi: abi.getTotalAmounts, calls: logs.map(l => l.ichiVault) }) + const vaultBalances = await api.multiCall({ abi: abi.getTotalAmounts, calls: logs.map(l => l.ichiVault), permitFailure: true }) vaultBalances.forEach((b, i) => { + if (!b) return const { tokenA, tokenB } = logs[i] if (!blacklistedTokens.includes(tokenA.toLowerCase())) api.add(tokenA, b.total0) if (!blacklistedTokens.includes(tokenB.toLowerCase())) api.add(tokenB, b.total1) From 33cf3efc78eac35b92bf5f5ea33198a3201f4688 Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Sat, 24 Aug 2024 02:52:45 -0400 Subject: [PATCH 0132/1768] added refunding balance to /helper/chain/eos (#11402) Co-authored-by: Mike D --- projects/helper/chain/eos.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/helper/chain/eos.js b/projects/helper/chain/eos.js index 4799d9d3cc..4122653eda 100644 --- a/projects/helper/chain/eos.js +++ b/projects/helper/chain/eos.js @@ -40,7 +40,12 @@ function get_precision(symbol) { async function get_staked(account_name, symbol, chain = "eos") { const response = await post(`${RPC_ENDPOINTS[chain]}/v1/chain/get_account`, { account_name }) try { - return response.voter_info.staked / (10 ** get_precision(symbol)) + let refunding = 0; + if(response.refund_request){ + refunding += parseFloat(response.refund_request.cpu_amount); + refunding += parseFloat(response.refund_request.net_amount); + } + return refunding + (response.voter_info.staked / (10 ** get_precision(symbol))) } catch (e) { return 0; } From a370bd32c54a897fca42b54edd278dd14ba8fc77 Mon Sep 17 00:00:00 2001 From: Gustavo <44475146+Gustbel@users.noreply.github.com> Date: Sat, 24 Aug 2024 03:53:29 -0300 Subject: [PATCH 0133/1768] added iotaevm deployment to deepr-finance (#11400) --- projects/deepr-finance/index.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/projects/deepr-finance/index.js b/projects/deepr-finance/index.js index b252e40e0b..4735b983be 100644 --- a/projects/deepr-finance/index.js +++ b/projects/deepr-finance/index.js @@ -1,6 +1,11 @@ -const { compoundExports2, methodology, } = require('../helper/compound'); +const { compoundExports2, methodology } = require("../helper/compound"); module.exports = { - shimmer_evm: compoundExports2({ comptroller: '0xF7E452A8685D57083Edf4e4CC8064EcDcF71D7B7', }), + shimmer_evm: compoundExports2({ + comptroller: "0xF7E452A8685D57083Edf4e4CC8064EcDcF71D7B7", + }), + iotaevm: compoundExports2({ + comptroller: "0xee07121d97FDEA35675e02017837a7a43aeDa48F", + }), methodology, -} \ No newline at end of file +}; From 0244f164ff7b07a123c33eaad611173397dc96d4 Mon Sep 17 00:00:00 2001 From: hfnole Date: Sat, 24 Aug 2024 03:07:47 -0400 Subject: [PATCH 0134/1768] create index.js (#11399) * Create index.js * code refactor --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/taoline/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/taoline/index.js diff --git a/projects/taoline/index.js b/projects/taoline/index.js new file mode 100644 index 0000000000..68025d3f08 --- /dev/null +++ b/projects/taoline/index.js @@ -0,0 +1,9 @@ +const { sumTokensExport } = require('../helper/solana'); + +module.exports = { + timetravel: false, + solana: { + tvl: () => ({}), + staking: sumTokensExport({ owner: '55UhbArZh8WBNM6dbjo93bdiUxnyznX1ivFQNgRhopJN' }), + }, +}; From 39287d6d73847e31cc0e5fc9361905b6327ea2e4 Mon Sep 17 00:00:00 2001 From: LeeChunHao2000 <64617939+LeeChunHao2000@users.noreply.github.com> Date: Mon, 26 Aug 2024 00:32:56 -0700 Subject: [PATCH 0135/1768] Update Arbitrum TVL for Anzen (#11403) --- projects/anzen-v2/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/anzen-v2/index.js b/projects/anzen-v2/index.js index be764330c2..ae832b45bd 100644 --- a/projects/anzen-v2/index.js +++ b/projects/anzen-v2/index.js @@ -6,6 +6,7 @@ const USDz = '0xa469b7ee9ee773642b3e93e842e5d9b5baa10067'; const Base_USDz = '0x04d5ddf5f3a8939889f11e97f8c4bb48317f1938'; const Blast_USDz = '0x52056ed29fe015f4ba2e3b079d10c0b87f46e8c6'; const Manta_USDz = '0x73d23f3778a90be8846e172354a115543df2a7e4'; +const Arbitrum_USDz = '0x5018609ab477cc502e170a5accf5312b86a4b94f'; const SPCT = '0xf30a29f1c540724fd8c5c4be1af604a6c6800d29'; // Secured collateral const mainnet_tvl = async (api) => { @@ -28,6 +29,11 @@ const manta_tvl = async (api) => { api.add(Manta_USDz, supply) } +const arbitrum_tvl = async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: Arbitrum_USDz }) + api.add(Arbitrum_USDz, supply) +} + const collateral_assets = async (api) => { const supply = await api.call({ abi: 'erc20:totalSupply', target: SPCT }) api.add(SPCT, supply) @@ -47,4 +53,7 @@ module.exports = { manta: { tvl: manta_tvl, }, + arbitrum: { + tvl: arbitrum_tvl, + }, }; From dd8e203dc52d3a9456a98b058d19f1818104e0b7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 03:48:28 -0400 Subject: [PATCH 0136/1768] track alphPad (#11409) Co-authored-by: krk0d3r Co-authored-by: krk0d3r <156105012+krk0d3r@users.noreply.github.com> --- projects/alphpad/index.js | 35 +++++++++++++++++++++++++++++++ projects/helper/chain/alephium.js | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 projects/alphpad/index.js diff --git a/projects/alphpad/index.js b/projects/alphpad/index.js new file mode 100644 index 0000000000..8da07e5e17 --- /dev/null +++ b/projects/alphpad/index.js @@ -0,0 +1,35 @@ +const alephium = require('../helper/chain/alephium') + +const Addresses = { + apad: '27HxXZJBTPjhHXwoF1Ue8sLMcSxYdxefoN2U6d8TKmZsm', + alphApadPool: 'vFpZ1DF93x1xGHoXM8rsDBFjpcoSsCi5ZEuA5NG5UJGX', + alphUsdtPool: '2A5R8KZQ3rhKYrW7bAS4JTjY9FCFLJg6HjQpqSFZBqACX', + vault: 'yzoCumd4Fpi959NSis9Nnyr28UkgyRYqrKBgYNAuYj3m' +} + +async function apadLocked() { + const results = await alephium.contractMultiCall([ + { group: 0, address: Addresses.vault, methodIndex: 34 }, + { group: 0, address: Addresses.alphApadPool, methodIndex: 8 }, + { group: 0, address: Addresses.alphUsdtPool, methodIndex: 8 }, + ]); + const apadLocked = results[0].returns[0].value; + const apadInAlph = results[1].returns[0].value / results[1].returns[1].value; + const alphInUsd = (results[2].returns[1].value * 10 ** 12) / results[2].returns[0].value; + return ((apadLocked / 10 ** 18) * apadInAlph) * alphInUsd; +} + +async function staking(api) { + const apadLockedValue = await apadLocked(); + api.addCGToken('tether', apadLockedValue) +} + + +module.exports = { + timetravel: false, + methodology: 'TVL locked in the APAD on Alephium', + alephium: { + tvl: () => ({}), + staking + } +} diff --git a/projects/helper/chain/alephium.js b/projects/helper/chain/alephium.js index 1c6defca2e..982a05db0e 100644 --- a/projects/helper/chain/alephium.js +++ b/projects/helper/chain/alephium.js @@ -5,7 +5,7 @@ const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' const bs58 = basex(ALPHABET) const EXPLORER_API_HOST = 'https://backend-v115.mainnet.alephium.org' -const NODE_API_HOST = 'https://chadnode.ayin.app' +const NODE_API_HOST = 'https://node.mainnet.alephium.org' async function getAlphBalance(address) { return (await axios.get(`${EXPLORER_API_HOST}/addresses/${address}/balance`)).data From 5da53688fe68c706a8f820c95b6ada1a89aaf02e Mon Sep 17 00:00:00 2001 From: laocheng <920886811@163.com> Date: Mon, 26 Aug 2024 15:49:45 +0800 Subject: [PATCH 0137/1768] feat: add bitmap-game tvl (#11380) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bitmap-game/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/bitmap-game/index.js diff --git a/projects/bitmap-game/index.js b/projects/bitmap-game/index.js new file mode 100644 index 0000000000..d291c88f6e --- /dev/null +++ b/projects/bitmap-game/index.js @@ -0,0 +1,12 @@ +const { staking } = require('../helper/staking') +const STAKE_MERL_CONTRACT = '0xb311c4b8091aff30Bb928b17Cc59Ce5D8775b13A' +const MERL_TOKEN = '0x5c46bFF4B38dc1EAE09C5BAc65872a1D8bc87378' +const STAKE_BITMAP_TOKEN_CONTRACT = '0x8567bD39b8870990a2cA14Df3102a00A7d72f7E3' +const BITMAP_TOKEN = '0x7b0400231Cddf8a7ACa78D8c0483890cd0c6fFD6' + +module.exports = { + merlin: { + tvl: staking([STAKE_BITMAP_TOKEN_CONTRACT, STAKE_MERL_CONTRACT,], [BITMAP_TOKEN, MERL_TOKEN,]), + staking: () => ({}), + } +} From 9bfdbcb2ea33d9b7dbd38da4614b5559092931ce Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 09:52:12 +0200 Subject: [PATCH 0138/1768] fix bitmap game --- projects/bitmap-game/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/bitmap-game/index.js b/projects/bitmap-game/index.js index d291c88f6e..ef3e0d1897 100644 --- a/projects/bitmap-game/index.js +++ b/projects/bitmap-game/index.js @@ -6,7 +6,7 @@ const BITMAP_TOKEN = '0x7b0400231Cddf8a7ACa78D8c0483890cd0c6fFD6' module.exports = { merlin: { - tvl: staking([STAKE_BITMAP_TOKEN_CONTRACT, STAKE_MERL_CONTRACT,], [BITMAP_TOKEN, MERL_TOKEN,]), - staking: () => ({}), + tvl: staking([STAKE_BITMAP_TOKEN_CONTRACT, STAKE_MERL_CONTRACT,], MERL_TOKEN), + staking: staking([STAKE_BITMAP_TOKEN_CONTRACT, STAKE_MERL_CONTRACT,], BITMAP_TOKEN,), } -} +} \ No newline at end of file From 9841cd25a56af239245a453040d8679f6efbf02d Mon Sep 17 00:00:00 2001 From: 0xShad0w <44497716+0xShad0w@users.noreply.github.com> Date: Mon, 26 Aug 2024 08:52:55 +0100 Subject: [PATCH 0139/1768] add abacus (#11389) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/abacus/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/abacus/index.js diff --git a/projects/abacus/index.js b/projects/abacus/index.js new file mode 100644 index 0000000000..08c6fd4eb8 --- /dev/null +++ b/projects/abacus/index.js @@ -0,0 +1,24 @@ +const wildCreditABI = require('../wildcredit/abi.json'); + +const config = { + arbitrum: { strategy: '0xB4E291f443f51D80186dd3EE0Af7F4a4E6e90804', veToken: '0xAAA343032aA79eE9a6897Dab03bef967c3289a06', token: '0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418' }, + avax: { strategy: '0xedEd6a22bf714d4B19b7e7bC1CA0BCF88956751c', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xaaab9d12a30504559b0c5a9a5977fee4a6081c6b' }, + bsc: { strategy: '0x37e46C030e0d843b39F692c9108E54945F4CCCf7', veToken: '0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D', token: '0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11' }, + polygon: { strategy: '0x32dAc1B8AD93b53F549D6555e01c35dCC50b6229', veToken: '0xB419cE2ea99f356BaE0caC47282B9409E38200fa', token: '0xBFA35599c7AEbb0dAcE9b5aa3ca5f2a79624D8Eb' }, + mantle: { strategy: '0xCaAF554900E33ae5DBc66ae9f8ADc3049B7D31dB', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xC1E0C8C30F251A07a894609616580ad2CEb547F2' }, +} + +Object.keys(config).forEach(chain => { + const { strategy, veToken, token, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const nftPositions = await api.call({ abi: 'erc20:balanceOf', target: veToken, params: strategy }) + const positionIds = await api.multiCall({ + abi: wildCreditABI.tokenOfOwnerByIndex, target: veToken, + calls: Array(Number(nftPositions)).fill(0).map((_, index) => ({ params: [strategy, index] })) + }) + const locked = await api.multiCall({ abi: 'function locked(uint256) view returns (uint256 amount, uint256 end)', calls: positionIds, target: veToken }) + locked.forEach(i => api.add(token, i.amount)) + } + } +}) \ No newline at end of file From 45d5c406ab75db9c84e9405f519255df897136ad Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:46:11 +0200 Subject: [PATCH 0140/1768] track euler-v2 #11413 --- projects/euler-v2/index.js | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 projects/euler-v2/index.js diff --git a/projects/euler-v2/index.js b/projects/euler-v2/index.js new file mode 100644 index 0000000000..fb32181c39 --- /dev/null +++ b/projects/euler-v2/index.js @@ -0,0 +1,39 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +module.exports = { + methodology: `TVL is supply balance minus borrows the euler contract.`, +} + +const config = { + ethereum: { factory: '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e', fromBlock: 20529225 } +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + + async function getVaults(api) { + const logs = await getLogs2({ + api, + factory, + eventAbi: 'event ProxyCreated(address indexed proxy, bool upgradeable, address implementation, bytes trailingData)', + fromBlock, + }) + + const vaults = logs.map(log => log.proxy) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + + return { vaults, tokens } + } + + module.exports[chain] = { + tvl: async (api) => { + const { vaults, tokens } = await getVaults(api) + return api.sumTokens({ tokensAndOwners2: [tokens, vaults] }) + }, + borrowed: async (api) => { + const { vaults, tokens } = await getVaults(api) + const borrows = await api.multiCall({ abi: 'uint256:totalBorrows', calls: vaults}) + api.add(tokens, borrows) + }, + } +}) From 8e8b048ba50ae5ff62e1266efcd052bd6e2c3fd0 Mon Sep 17 00:00:00 2001 From: usr-icon-foundation <111794534+usr-icon-foundation@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:47:58 +0200 Subject: [PATCH 0141/1768] Add Sui to Balanced Exchange + update methodology (#11412) --- projects/balanced/helper.js | 3 ++- projects/balanced/index.js | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/balanced/helper.js b/projects/balanced/helper.js index 68a9223e44..1f2e07b1de 100644 --- a/projects/balanced/helper.js +++ b/projects/balanced/helper.js @@ -41,7 +41,8 @@ const networkIdentifiers = { "archway-1": "archway", "injective-1/inj": "injective", "0xa4b1.arbitrum": "arbitrum", - "0x2105.base": "base" + "0x2105.base": "base", + "sui/0000000000000000000000000000000000000000000000000000000000000002::sui::SUI": "sui", } // Get decimals of cross-chain Balanced assets in balancedAssetManagerContract diff --git a/projects/balanced/index.js b/projects/balanced/index.js index bfa389909e..7ccfd8a3bc 100644 --- a/projects/balanced/index.js +++ b/projects/balanced/index.js @@ -19,7 +19,7 @@ async function tvl(api) { // https://github.com/balancednetwork/balanced-java-contracts/wiki/Contract-Addresses // https://github.com/DefiLlama/DefiLlama-Adapters/pull/9857#issuecomment-2060842344 module.exports = { - methodology: 'TVL consists of liquidity on the DEX, deposits made to the lending program and the stability fund. Data is pulled from the ICX API "https://ctz.solidwallet.io/api/v3" and Balanced stats API "https://balanced.sudoblock.io/api/v1/docs', + methodology: "TVL: The total liquidity held on the Balanced exchange and in the Stability Fund. Fees: Collected from traders", icon: { tvl }, @@ -41,4 +41,7 @@ module.exports = { arbitrum: { tvl: async () => await computeTVL("arbitrum"), }, + sui: { + tvl: async () => await computeTVL("sui"), + }, }; From f983f947198c09c1b0f0c14e45eed5c01d015b27 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:59:23 +0200 Subject: [PATCH 0142/1768] update euler-v2 --- projects/euler-v2/index.js | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/projects/euler-v2/index.js b/projects/euler-v2/index.js index fb32181c39..10ba888351 100644 --- a/projects/euler-v2/index.js +++ b/projects/euler-v2/index.js @@ -1,27 +1,17 @@ -const { getLogs2 } = require('../helper/cache/getLogs') - module.exports = { methodology: `TVL is supply balance minus borrows the euler contract.`, } const config = { - ethereum: { factory: '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e', fromBlock: 20529225 } + ethereum: { factory: '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e', } } Object.keys(config).forEach(chain => { - const { factory, fromBlock, } = config[chain] + const { factory, } = config[chain] async function getVaults(api) { - const logs = await getLogs2({ - api, - factory, - eventAbi: 'event ProxyCreated(address indexed proxy, bool upgradeable, address implementation, bytes trailingData)', - fromBlock, - }) - - const vaults = logs.map(log => log.proxy) - const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) - + const vaults = await api.fetchList({ lengthAbi: 'getProxyListLength', itemAbi: 'proxyList', target: factory }) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) return { vaults, tokens } } @@ -32,7 +22,7 @@ Object.keys(config).forEach(chain => { }, borrowed: async (api) => { const { vaults, tokens } = await getVaults(api) - const borrows = await api.multiCall({ abi: 'uint256:totalBorrows', calls: vaults}) + const borrows = await api.multiCall({ abi: 'uint256:totalBorrows', calls: vaults }) api.add(tokens, borrows) }, } From 9048342ac43cd0d9029a989fd0baa1b38d2e73ad Mon Sep 17 00:00:00 2001 From: Mihail Krukov Date: Mon, 26 Aug 2024 12:41:57 +0300 Subject: [PATCH 0143/1768] added new project IO Lend (#11414) Co-authored-by: crypto developer <166532177+developer01metlab@users.noreply.github.com> --- projects/iolend/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 projects/iolend/index.js diff --git a/projects/iolend/index.js b/projects/iolend/index.js new file mode 100644 index 0000000000..ea6d5126f4 --- /dev/null +++ b/projects/iolend/index.js @@ -0,0 +1,8 @@ +const { aaveExports, methodology } = require("../helper/aave"); + +module.exports = { + methodology, + iotaevm: { + ...aaveExports('iotaevm', '0xA9Bb7ebb4F51B0e0BbD0FaE640e32298a0Bcf4A5'), + }, +}; From 706e3c72d620723c47326b4bdd55bc04a5b9cae7 Mon Sep 17 00:00:00 2001 From: Ryan C Date: Mon, 26 Aug 2024 18:42:17 +0900 Subject: [PATCH 0144/1768] XY Finance: Add cronos config (#11406) --- projects/xy-finance/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/xy-finance/index.js b/projects/xy-finance/index.js index 7124d5d4d7..49ce033273 100644 --- a/projects/xy-finance/index.js +++ b/projects/xy-finance/index.js @@ -73,6 +73,9 @@ const config = { }, ox_chain: { chainId: '6699' + }, + cronos_zkevm: { + chainId: '388' } } @@ -500,6 +503,12 @@ const yPoolDepositContract = { // "contractAddress": "0xD95841e7eC6b61f708829B57a3433C3Fd24B2A8c", // "tokenAddress": "0x92073dE2706eB8f0265998bCf7B8F751e1349b8F" // } + }, + "388": { + "ETH": { + "contractAddress": "0xAa0b0654E79E17332d983E2351bD926cE336B9BD", + "tokenAddress": "0x271602A97027ee1dd03b1E6e5dB153eB659A80b1" + }, } } From acf236afc0809be6cf5f1f17a23d88ddcb56c5c5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:47:00 +0200 Subject: [PATCH 0145/1768] kayak: track scroll --- projects/kayak/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/kayak/index.js b/projects/kayak/index.js index 9227635cfa..30db6ae02f 100644 --- a/projects/kayak/index.js +++ b/projects/kayak/index.js @@ -1,9 +1,13 @@ const { getLogs2 } = require('../helper/cache/getLogs') +const { uniV3Export } = require('../helper/uniswapV3') const { sumTokens2 } = require('../helper/unwrapLPs') const config = { - avax: { factory: '0x4df3038C2C7e13F46F0d63eC3AF5728F75Be3775', fromBlock: 46950081, } + avax: { factory: '0x4df3038C2C7e13F46F0d63eC3AF5728F75Be3775', fromBlock: 46950081, }, } +module.exports = uniV3Export({ + scroll: { factory: '0x359d8BC3c4C70b8b73cf911aA5EfEC004146b663', fromBlock: 8564317, }, +}) Object.keys(config).forEach(chain => { const { factory, fromBlock, } = config[chain] From 8140c6a2b2cfa6593cfc1b873fbdc4dfe3d395be Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:02:58 +0200 Subject: [PATCH 0146/1768] update double2win: elcude memecoin --- projects/double2win/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/double2win/index.js b/projects/double2win/index.js index ebb95389ca..dea04d687b 100644 --- a/projects/double2win/index.js +++ b/projects/double2win/index.js @@ -55,7 +55,11 @@ Object.keys(config).forEach((chain) => { }) const { assets, v2Tokens } = await getTokens(chain) await sumTokens2({ resolveUniV3: true, api, owners: v3Vaults }) - await sumTokens2({ owners: assetVaults, tokens: assets, api }) + await sumTokens2({ + owners: assetVaults, tokens: assets, api, blacklistedTokens: [ + '0x13654df31871b5d01e5fba8e6c21a5d0344820f5' + ] + }) return sumTokens2({ owners: v2Vaults, tokens: v2Tokens, resolveLP: true, api }) } } From 397903313dbf0b6a6b4decd0ed73e2fea1f60bd8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:15:10 +0200 Subject: [PATCH 0147/1768] update tbtc --- projects/tbtc/index.js | 39 ++++++++++----------------------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/projects/tbtc/index.js b/projects/tbtc/index.js index fac1e605c8..37312c2ab0 100644 --- a/projects/tbtc/index.js +++ b/projects/tbtc/index.js @@ -1,36 +1,17 @@ -const sdk = require('@defillama/sdk'); -const { sumTokensExport } = require('../helper/sumTokens'); +const { sumTokens } = require('../helper/chain/bitcoin') +const { getConfig } = require('../helper/cache') -const owners = [ -'bc1ql6yu2xywnmslnameu6376wzut4nwnafdj483ez', -'bc1q7uf083n9rsn8zgds0eg9kyzugjcz7pe4sq2jzf', -'bc1ql54ftzuh6k76wcn7330vlwxahhth8lqjc55lkc', -'bc1qhq052tz9pvjp4x2vu6ndc4rlpxesc9dz37uqt5', -'bc1q3rtrkav9l6m0e5vxya77mtlvqh8rk0eyf74277', -'bc1qde4ggwj2jp5tetjztfml3peyvwzvpwtr9ng6we', -'bc1qrzk68h8l2kvkvky00l8xvwz45pr4mmtyfpf0j8', -'bc1qkza8dm07rr5pxedam5w5v5g627j0lrwwzncsvd', -'bc1qrw5tn47ea05seyetlywltrdk06rldpk746etc9', -'bc1qcwkzqwfyqc7frec2g0rmjlrsw3d8vdwxrksn62', -'bc1qpdrzltkxg742jk8tr0pe7hltkme5p25ezmllz6', -'bc1qpqrm609emjpl35v2fu3frq0r87d29vm8ffygkf', -'bc1qhqlyelhwffrwdz4xzfe5whqxxft8quzvdscc8g', -'bc1qpaz0dp264pakv6f6ljmg2f3x27xmsj6la33mhc', -'bc1q9alywjvrsxu024a2m25lltl6h070l6lqfya45c', -'bc1q8cwt90ck2uvzwqj7q3dwvwclnprz7rk4qzk05k', -'bc1q2xygt58u9r6hc32uxruh93ap8q9898rep04xdk', -'bc1q4rheadle4sgdgdatkeuqfm90qv3wpkd7q8yp0m', -'bc1qrflqxl5pwet9tgv4uex6a6srmh3u4cvefeq0h6', -'bc1qqu0nw5n5n6uvjw5m3hwh8zvzckd8cnth8nt80k', -'bc1q3las75huex5jjhunheqycegw2x8fvhc6y0q3nu', -] +async function tvl(api) { + const { wallets } = await getConfig('tbtc/wallets', 'https://api.threshold.network/tbtc/wallets/pof') + const owners = wallets.filter(i => +i.walletBitcoinBalance > 0).map(wallet => wallet.walletBitcoinAddress) + return sumTokens({ owners, }) +} module.exports = { + timetravel: false, methodology: "BTC on btc chain", - ethereum: {tvl: () => ({}) }, + ethereum: { tvl: () => ({}) }, bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), - ]), + tvl, }, }; From 5e7cdedcef00821cbaac26685993807dfeca4da5 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:50:24 +0100 Subject: [PATCH 0148/1768] add blofin adapter (#11416) --- projects/blofin-cex/index.js | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 projects/blofin-cex/index.js diff --git a/projects/blofin-cex/index.js b/projects/blofin-cex/index.js new file mode 100644 index 0000000000..89cc7840ac --- /dev/null +++ b/projects/blofin-cex/index.js @@ -0,0 +1,47 @@ +const { cexExports } = require("../helper/cex"); + +const config = { + bitcoin: { + owners: ["1PM8huQVFSirUT7eAwNm3rBBYTsDRzCaf3", "1Jw4meLNYAaDcNxJwQdMTRVw74hGPcuV8W"], + }, + bsc: { + owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], + }, + ethereum: { + owners: [ + "0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040", + "0xe5e6c3ced4670697b7cB27a53649a3ED321c18ee", + "0xdBdf80D997cFAaAC6150cD0cEC2C127fDaD7A823", + "0x88C984990573d385949deB571ed21eaD63301045", + ], + }, + solana: { + owners: [ + "94xmX5J92nZLanLvRstmxhgiS8kN8SVfFQ2zPKYB3Ynb", + "E3Gd8Hd1yKdkHTQnbenNVBgV2p1MrrenQnVU4SkJD4zx", + ], + }, + optimism: { + owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], + }, + arbitrum: { + owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], + }, + tron: { + owners: [ + "TDFHcjw2PiDLjoqxXedaSSEtA1osqu8J6c", + "TE4uQTkFMcjm7UVYeQCgTHuec1pFP5J4Ds", + "TDFHcjw2PiDLjoqxXedaSSEtA1osqu8J6c", + "TRzpEdrAwHXPQYWvXHJArpcac2WV3gXMr3", + "TVNRJgNsVMjDPethVVToz9aSvZq9SVgDXv", + ], + }, + polygon: { + owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], + }, + base: { + owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], + }, +}; + +module.exports = cexExports(config); From c541d0fd878a5ebfbc32e37987dfd6f9b1a785d8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:07:25 +0200 Subject: [PATCH 0149/1768] update kayak --- projects/kayak-uni-v3/index.js | 5 +++++ projects/kayak/index.js | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 projects/kayak-uni-v3/index.js diff --git a/projects/kayak-uni-v3/index.js b/projects/kayak-uni-v3/index.js new file mode 100644 index 0000000000..9ed424e05f --- /dev/null +++ b/projects/kayak-uni-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + scroll: { factory: '0x359d8BC3c4C70b8b73cf911aA5EfEC004146b663', fromBlock: 8564317, }, +}) diff --git a/projects/kayak/index.js b/projects/kayak/index.js index 30db6ae02f..3204e9d4f3 100644 --- a/projects/kayak/index.js +++ b/projects/kayak/index.js @@ -1,13 +1,10 @@ const { getLogs2 } = require('../helper/cache/getLogs') -const { uniV3Export } = require('../helper/uniswapV3') const { sumTokens2 } = require('../helper/unwrapLPs') const config = { avax: { factory: '0x4df3038C2C7e13F46F0d63eC3AF5728F75Be3775', fromBlock: 46950081, }, + scroll: { factory: '0xA218beD0C2b487599A3799Bc318428e5219A7978', fromBlock: 8563591, }, } -module.exports = uniV3Export({ - scroll: { factory: '0x359d8BC3c4C70b8b73cf911aA5EfEC004146b663', fromBlock: 8564317, }, -}) Object.keys(config).forEach(chain => { const { factory, fromBlock, } = config[chain] From e0caa46a6aeefef6e138518ea37e82eb85d3f950 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:57:51 +0200 Subject: [PATCH 0150/1768] track clip staking #11415 --- projects/clip-finance/index.js | 36 +++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/projects/clip-finance/index.js b/projects/clip-finance/index.js index 600bc2054b..e7289d0dea 100644 --- a/projects/clip-finance/index.js +++ b/projects/clip-finance/index.js @@ -6,6 +6,9 @@ const config = { }, linea: { vaultRegistry: "0x5A9B5E22be45d04c753863A916c4311f07bd4dF0", + clipTokenStaking: "0x8bbc8f21aabC8ecb5a566cE6013842E1F3c8fCC1", + clipToken: "0x4Ea77a86d6E70FfE8Bb947FC86D68a7F086f198a", + wClipToken: "0x54e4a172dbEaC5B239131a44B71C37113A8530F7", }, base: { vaultRegistry: "0x5A9B5E22be45d04c753863A916c4311f07bd4dF0", @@ -61,20 +64,20 @@ const tvl = async (api) => { api.add(ammToken1s[i], pool.total1); }); - // Aerodrom Vaults - const aerodromVaults = vaults.filter((i) => i.vaultType == VaultType.Aero).map((i) => i.vault); - const tokenAs = await api.multiCall({ abi: "address:tokenA", calls: aerodromVaults }); + // Aerodrome Vaults + const aerodromeVaults = vaults.filter((i) => i.vaultType == VaultType.Aero).map((i) => i.vault); + const tokenAs = await api.multiCall({ abi: "address:tokenA", calls: aerodromeVaults }); - const tokenBs = await api.multiCall({ abi: "address:tokenB", calls: aerodromVaults }); - const farms = await api.multiCall({ abi: "address:farm", calls: aerodromVaults }); + const tokenBs = await api.multiCall({ abi: "address:tokenB", calls: aerodromeVaults }); + const farms = await api.multiCall({ abi: "address:farm", calls: aerodromeVaults }); - const lpTokens = await api.multiCall({ abi: "address:lpToken", calls: aerodromVaults }); + const lpTokens = await api.multiCall({ abi: "address:lpToken", calls: aerodromeVaults }); const liquidities = await api.multiCall({ abi: abis.balanceOf, calls: farms.map((vault, i) => ({ target: vault, - params: aerodromVaults[i], + params: aerodromeVaults[i], })), }); @@ -98,7 +101,7 @@ const tvl = async (api) => { abi: abis.balanceOf, calls: tokenAs.map((tokenA, i) => ({ target: tokenA, - params: aerodromVaults[i], + params: aerodromeVaults[i], })), }); @@ -106,11 +109,11 @@ const tvl = async (api) => { abi: abis.balanceOf, calls: tokenBs.map((tokenB, i) => ({ target: tokenB, - params: aerodromVaults[i], + params: aerodromeVaults[i], })), }); - aerodromVaults.forEach((_, i) => { + aerodromeVaults.forEach((_, i) => { if (lpTotalSupplies > 0) { api.add(tokenAs[i], Math.floor((liquidities[i] * lpBalanceAs[i]) / lpTotalSupplies[i] + tokenABalances[i])); api.add(tokenBs[i], Math.floor((liquidities[i] * lpBalanceBs[i]) / lpTotalSupplies[i] + tokenBBalances[i])); @@ -139,15 +142,26 @@ module.exports = { }; Object.keys(config).forEach((chain) => { + const { clipTokenStaking, clipToken, wClipToken } = config[chain]; + module.exports[chain] = { tvl, }; + + if (clipTokenStaking && clipToken && wClipToken) + module.exports[chain].staking = async (api) => { + const totalStackedWClip = await api.call({ target: clipTokenStaking, abi: abis.getCumulativeStaked, params: wClipToken, }); + + // Add to TVL wCLIP (1 wCLIP = 1 CLIP always) staked in the Clip Token Staking contract + api.add(clipToken, totalStackedWClip); + } }); const abis = { - getTotalAmounts: "function getTotalAmounts() public view returns (uint256 total0, uint256 total1, uint128 liquidity)", + getTotalAmounts: "function getTotalAmounts() external view returns (uint256 total0, uint256 total1, uint128 liquidity)", depositToken: "address:depositToken", totalTokens: "uint256:totalTokens", getVaults: "function getVaults() view returns ((address vault, bytes data)[])", balanceOf: "function balanceOf(address) view returns (uint256)", + getCumulativeStaked: "function getCumulativeStaked(address stakedToken) external view returns (uint256)" }; From 99ed8f18446f55ab82831cc1420bebf5ef581803 Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 26 Aug 2024 21:49:53 +0800 Subject: [PATCH 0151/1768] added dSOL tvl adapter (#11417) --- projects/dSOL/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/dSOL/index.js diff --git a/projects/dSOL/index.js b/projects/dSOL/index.js new file mode 100644 index 0000000000..70f6e31dce --- /dev/null +++ b/projects/dSOL/index.js @@ -0,0 +1,13 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + // dSOL sanctum stake pool : https://solscan.io/account/9mhGNSPArRMHpLDMSmxAvuoizBqtBGqYdT8WGuqgxNdn + await getSolBalanceFromStakePool('9mhGNSPArRMHpLDMSmxAvuoizBqtBGqYdT8WGuqgxNdn', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file From 598b99d2fc6d2c8cfea40a9e618c41879ac8e829 Mon Sep 17 00:00:00 2001 From: Dry cake <174254844+dry-cake@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:50:28 +0200 Subject: [PATCH 0152/1768] fix: remove link from methodology (#11419) --- projects/aqua-network/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/aqua-network/index.js b/projects/aqua-network/index.js index 621f7abeac..edef3e25bf 100644 --- a/projects/aqua-network/index.js +++ b/projects/aqua-network/index.js @@ -35,6 +35,6 @@ module.exports = { start: 1719792000, misrepresentedTokens: true, methodology: - 'counts the liquidity of the Pools on AMM, data is pulled from the Aquarius API: "https://amm-api.aqua.network/api/external/v1/statistics/totals/".', + 'counts the liquidity of the Pools on AMM, data is pulled from the Aquarius API.', stellar: { tvl }, }; From addea3a21006e0908c9e2b8a5dc2f70510b4a825 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 26 Aug 2024 19:56:10 +0200 Subject: [PATCH 0153/1768] update package version --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5a77a06d7..030a5025e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -997,9 +997,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.78", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.78.tgz", - "integrity": "sha512-VnK7/9DeBjrEaN/CG6dNR6G9624ntVEPy8DRWSVDhaQ8FM4sMWfsYDQbM4o028BKT7CM3vxKku8SrI2iwcZsGQ==", + "version": "5.0.81", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.81.tgz", + "integrity": "sha512-8rViEUYV6rY5jc8BHvjBX7/ohT9A6K9yj4jsEpmveAhj9TVSxQWqW0SEiQ+ubAgQ/fGcC2wX0Trl2G5e4W2Tjw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From 52c1c925f267a6f5c3237e7e64836178f89f32c5 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 26 Aug 2024 18:59:04 +0100 Subject: [PATCH 0154/1768] flag misrepresented tokens --- projects/firefly/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/firefly/index.js b/projects/firefly/index.js index 144e22c91f..69da10bb5c 100644 --- a/projects/firefly/index.js +++ b/projects/firefly/index.js @@ -1,5 +1,6 @@ const { uniV3Export } = require("../helper/uniswapV3") +module.exports.misrepresentedTokens = true; module.exports = uniV3Export({ manta: { factory: "0x8666EF9DC0cA5336147f1B11f2C4fC2ecA809B95", fromBlock: 1776716, }, }) From fc69f14bea224efb2b57d09bee9a9be12833422c Mon Sep 17 00:00:00 2001 From: Kacper Bak <290936+kbak@users.noreply.github.com> Date: Tue, 27 Aug 2024 07:52:37 +0200 Subject: [PATCH 0155/1768] added FBTC to Zircuit (#11423) --- projects/zircuit/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index dc8ef0a2ae..57053708e0 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -26,7 +26,8 @@ const TOKEN_CONTRACTS = [ '0x84631c0d0081FDe56DeB72F6DE77abBbF6A9f93a', // Re7LRT '0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811', // pzETH '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC - '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88' // weETHs + '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', // weETHs + '0xC96dE26018A54D51c097160568752c4E3BD6C364' // FBTC ]; module.exports = { From d6f37f527d2cdc6da9a22212219b061ea27b0d02 Mon Sep 17 00:00:00 2001 From: Jessie Liu <50894289+Nicklaus6@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:59:52 +0800 Subject: [PATCH 0156/1768] Add deltatrade (#11421) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/deltatrade.js | 25 +++++++++++++++++++++++++ projects/helper/chain/near.js | 7 +++++++ 2 files changed, 32 insertions(+) create mode 100644 projects/deltatrade.js diff --git a/projects/deltatrade.js b/projects/deltatrade.js new file mode 100644 index 0000000000..66e62ee4da --- /dev/null +++ b/projects/deltatrade.js @@ -0,0 +1,25 @@ +const { sumTokens } = require('./helper/chain/near'); + +const GRID_CONTRACT_ID = 'grid.deltatrade.near'; +const DCA_CONTRACT_ID = 'dca.deltatrade.near'; + +const tokens = [ + 'wrap.near', + '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1', + 'token.v2.ref-finance.near', + 'token.burrow.near', + 'token.lonkingnearbackto2024.near', + 'blackdragon.tkn.near', + 'ftv2.nekotoken.near', + 'gear.enleap.near', + 'token.0xshitzu.near', + 'edge-fast.near', + '802d89b6e511b335f05024a65161bce7efc3f311.factory.bridge.near', +] + +module.exports = { + timetravel: false, + near: { + tvl: () => sumTokens({ tokens, owners: [GRID_CONTRACT_ID, DCA_CONTRACT_ID] }), + }, +} diff --git a/projects/helper/chain/near.js b/projects/helper/chain/near.js index 958ad675dc..a1540a0d47 100644 --- a/projects/helper/chain/near.js +++ b/projects/helper/chain/near.js @@ -43,6 +43,13 @@ const tokenMapping = { 'token.sweat': { name: 'sweatcoin', decimals: 18 }, 'v2-nearx.stader-labs.near': { name: 'stader-nearx', decimals: 24 }, '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1': { name: 'usd-coin', decimals: 6 }, + 'edge-fast.near': { name: 'edge-video-ai', decimals: 24 }, + '802d89b6e511b335f05024a65161bce7efc3f311.factory.bridge.near': { name: 'linear-protocol-lnr', decimals: 18 }, + 'ftv2.nekotoken.near': { name: 'neko', decimals: 24 }, + 'token.lonkingnearbackto2024.near': { name: 'lonk-on-near', decimals: 8 }, + 'blackdragon.tkn.near': { name: 'black-dragon', decimals: 24 }, + 'gear.enleap.near': { name: 'near-tinker-union-gear', decimals: 18 }, + 'token.0xshitzu.near': { name: 'shitzu', decimals: 18 }, } async function view_account(account_id) { From d3a35fe65cbe630f4e840f8e8d0fd1e3c5284f72 Mon Sep 17 00:00:00 2001 From: GiMa-Maya <128942712+GiMa-Maya@users.noreply.github.com> Date: Tue, 27 Aug 2024 08:00:24 +0200 Subject: [PATCH 0157/1768] Add Radix to Mayachain adapter (#11420) --- projects/mayachain/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/mayachain/index.js b/projects/mayachain/index.js index 4880587fd7..a4da73bb21 100644 --- a/projects/mayachain/index.js +++ b/projects/mayachain/index.js @@ -10,6 +10,7 @@ const chainMapping = { THOR: "thorchain", DASH: "dash", ARB: "arbitrum", + XRD: "radixdlt", }; const tokenGeckoMapping = { @@ -37,6 +38,7 @@ const tokenGeckoMapping = { "ARB.USDT": "tether", "ARB.WBTC": "wrapped-bitcoin", "ARB.WSTETH": "wrapped-steth", + "XRD.XRD": "radix", }; const tokenToDecimalMapping = { @@ -65,6 +67,7 @@ const tokenToDecimalMapping = { "ARB.USDT": 6, "ARB.WBTC": 8, "ARB.WSTETH": 18, + "XRD.XRD": 8, }; async function tvl(api) { From ed33ece13826aaa1eb3b0b6ece21f0e9f3fd0b5f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 27 Aug 2024 02:53:08 -0400 Subject: [PATCH 0158/1768] Add Echo Lending Adapter (#11426) Co-authored-by: Efrain9502 --- projects/cellana/index.js | 3 +- projects/echo-lending/index.js | 46 +++++++++++++++++++++++++++++++ projects/helper/chain/aptos.js | 2 +- projects/meso-finance/index.js | 6 ++-- projects/movegpt/index.js | 14 ++++------ projects/thala-lsd/index.js | 1 - projects/trufin-trustake/index.js | 2 +- projects/tsunami-fi/index.js | 3 +- 8 files changed, 59 insertions(+), 18 deletions(-) create mode 100644 projects/echo-lending/index.js diff --git a/projects/cellana/index.js b/projects/cellana/index.js index 04bc636c58..c4627078cd 100644 --- a/projects/cellana/index.js +++ b/projects/cellana/index.js @@ -13,8 +13,7 @@ const extractCoinAddress = (str) => str.slice(str.indexOf("<") + 1, str.lastInde const reserveContrainerFilter = (i) => i.type.includes("0x1::coin::CoinStore") async function getfungibleAssetBalances(api) { - const data = await _getPools('0x4bf51972879e3b95c4781a5cdcb9e1ee24ef483e7d22f2d903626f126df62bd1') - const poolsAddresses = data[0]; + const poolsAddresses = await _getPools('0x4bf51972879e3b95c4781a5cdcb9e1ee24ef483e7d22f2d903626f126df62bd1') for (const pool of poolsAddresses) { const fungibleAssetPoolStore = (await getResources(pool.inner)).find(i => i.type.includes('liquidity_pool::LiquidityPool'))?.data const fungibleAssetAddressToken1 = fungibleAssetPoolStore?.token_store_1?.inner diff --git a/projects/echo-lending/index.js b/projects/echo-lending/index.js new file mode 100644 index 0000000000..b88a1fe7ed --- /dev/null +++ b/projects/echo-lending/index.js @@ -0,0 +1,46 @@ +const sdk = require("@defillama/sdk"); +const { transformBalances } = require("../helper/portedTokens"); +const { function_view } = require("../helper/chain/aptos"); + +let _data + +const mapping = { + 'APT': "0x1::aptos_coin::AptosCoin", +} + +async function getData() { + if (!_data) + _data = _getData() + + return _data + + + async function _getData() { + const resources = await function_view({ functionStr: "0xeab7ea4d635b6b6add79d5045c4a45d8148d88287b1cfa1c3b6a4b56f46839ed::pool_data_provider::get_all_reserves_tokens", }) + const [uTokens, tokens] = await function_view({ functionStr: "0xeab7ea4d635b6b6add79d5045c4a45d8148d88287b1cfa1c3b6a4b56f46839ed::underlying_token_factory::get_coin_asset_pairs", }) + const mapping = {} + tokens.forEach((token, i) => mapping[token] = uTokens[i]) + + for (const item of resources) { + const token = item.token_address + item.uToken = mapping[token] + item.reserve = await function_view({ functionStr: "0xeab7ea4d635b6b6add79d5045c4a45d8148d88287b1cfa1c3b6a4b56f46839ed::pool_data_provider::get_reserve_data", args: [token] }) + item.debt = item.reserve[3] + item.balance = +item.reserve[2] - +item.debt + } + return resources.filter(i => i.uToken) + } +} + +module.exports = { + aptos: { + tvl: async (api) => { + const data = await getData() + api.add(data.map(i => i.uToken), data.map(i => i.balance)) + }, + borrowed: async (api) => { + const data = await getData() + api.add(data.map(i => i.uToken), data.map(i => i.debt)) + }, + }, +}; diff --git a/projects/helper/chain/aptos.js b/projects/helper/chain/aptos.js index 4fc5379249..da5bffe902 100644 --- a/projects/helper/chain/aptos.js +++ b/projects/helper/chain/aptos.js @@ -103,7 +103,7 @@ async function getTableData({ table, data }) { async function function_view({ functionStr, type_arguments = [], args = [] }) { const response = await http.post(`${endpoint()}/v1/view`, { "function": functionStr, "type_arguments": type_arguments, arguments: args }) - return response + return response.length === 1 ? response[0] : response } function hexToString(hexString) { diff --git a/projects/meso-finance/index.js b/projects/meso-finance/index.js index 1afc27b178..dcf145f8b0 100644 --- a/projects/meso-finance/index.js +++ b/projects/meso-finance/index.js @@ -20,12 +20,12 @@ function getPoolData() { async function getPoolAddresses() { const pools = await function_view({ functionStr: "0x68476f9d437e3f32fd262ba898b5e3ee0a23a1d586a6cf29a28add35f253f6f7::meso::pools" }) - return pools[0]['data'].map(obj => { return { coin: obj.key, poolAddress: obj.value.inner } }) + return pools['data'].map(obj => { return { coin: obj.key, poolAddress: obj.value.inner } }) } async function getPoolInfo(pool) { - const poolInfo = await function_view({ functionStr: "0x68476f9d437e3f32fd262ba898b5e3ee0a23a1d586a6cf29a28add35f253f6f7::lending_pool::pool_info", type_arguments: [], args: [pool.poolAddress] }) - return { coin: pool.coin, poolSupply: poolInfo[0].total_reserves, totalDebt: poolInfo[0].total_debt } + const [poolInfo] = await function_view({ functionStr: "0x68476f9d437e3f32fd262ba898b5e3ee0a23a1d586a6cf29a28add35f253f6f7::lending_pool::pool_info", args: [pool.poolAddress] }) + return { coin: pool.coin, poolSupply: poolInfo.total_reserves, totalDebt: poolInfo.total_debt } } } diff --git a/projects/movegpt/index.js b/projects/movegpt/index.js index 75d2ac6e69..26730dbc7c 100644 --- a/projects/movegpt/index.js +++ b/projects/movegpt/index.js @@ -5,14 +5,12 @@ const POOL_2 = "0x9141a7ebbf2c8ab9101d6b657321e1cc78314b71b8e8780508986119660ffe async function get_staking(api) { async function addBalance(pool) { - let [balance] = await function_view( - { - functionStr: - "0xccd92a8a4b4ee351190346bb04de9941b840bf42a2f003372ccec232d2b5bdcf::staking_fix_lock_duration::get_pool_staked_amount", - type_arguments: [MGPT_ADDRESS], - args: [pool] - } - ) + let balance = await function_view({ + functionStr: + "0xccd92a8a4b4ee351190346bb04de9941b840bf42a2f003372ccec232d2b5bdcf::staking_fix_lock_duration::get_pool_staked_amount", + type_arguments: [MGPT_ADDRESS], + args: [pool] + }) api.addCGToken('movegpt', balance / 1e8) } await Promise.all([POOL_1, POOL_2].map(addBalance)) diff --git a/projects/thala-lsd/index.js b/projects/thala-lsd/index.js index 5685d9aa7c..122d11eab8 100644 --- a/projects/thala-lsd/index.js +++ b/projects/thala-lsd/index.js @@ -13,7 +13,6 @@ module.exports = { const { data: { supply } } = await aQuery(`/v1/accounts/${LSD_ACCOUNT}/resource/0x1::coin::CoinInfo%3C${LSD_ACCOUNT}::staking::ThalaAPT%3E`); const [active, inactive, pending_active, pending_inactive] = await function_view({ functionStr: `0x1::delegation_pool::get_delegation_pool_stake`, - type_arguments: [], args: [THALA_VALIDATOR] }); const validator_apt = Number(active) + Number(inactive) + Number(pending_active) + Number(pending_inactive); diff --git a/projects/trufin-trustake/index.js b/projects/trufin-trustake/index.js index c9a9b38a22..0597bb4d0c 100644 --- a/projects/trufin-trustake/index.js +++ b/projects/trufin-trustake/index.js @@ -7,7 +7,7 @@ const FUNCTION = "total_staked" async function aptosTvl(api) { const totalStaked = await function_view({ functionStr: `${TRUSTAKE_APT_CONTRACT_ADDR}::${MODULE}::${FUNCTION}` }) - api.add(ADDRESSES.aptos.APT, totalStaked[0]) + api.add(ADDRESSES.aptos.APT, totalStaked) } const abi = { diff --git a/projects/tsunami-fi/index.js b/projects/tsunami-fi/index.js index e6eec999ca..98eac221aa 100644 --- a/projects/tsunami-fi/index.js +++ b/projects/tsunami-fi/index.js @@ -2,7 +2,7 @@ const { gmxExports } = require("../helper/gmx"); const { function_view, hexToString } = require("../helper/chain/aptos"); async function tvl(api) { - const [data] = await function_view({ + const data = await function_view({ functionStr: "0x1786191d0ce793debfdef9890868abdcdc7053f982ccdd102a72732b3082f31d::basket::get_all_basket_coins_by_basket", type_arguments: [ @@ -13,7 +13,6 @@ async function tvl(api) { ({ coin_type_info: { account_address, module_name, struct_name }, reserve_amount, - margin_occupied_amount, }) => { const token = `${account_address}::${hexToString( module_name From 2ef5f98d6b0c8135716c34a2e4733887b893221a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:15:04 +0200 Subject: [PATCH 0159/1768] echo lending: exclude ABTC --- projects/echo-lending/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/echo-lending/index.js b/projects/echo-lending/index.js index b88a1fe7ed..b50ced5300 100644 --- a/projects/echo-lending/index.js +++ b/projects/echo-lending/index.js @@ -28,7 +28,7 @@ async function getData() { item.debt = item.reserve[3] item.balance = +item.reserve[2] - +item.debt } - return resources.filter(i => i.uToken) + return resources.filter(i => i.uToken && i.uToken !== '0x4e1854f6d332c9525e258fb6e66f84b6af8aba687bbcb832a24768c4e175feec::abtc::ABTC') } } From ae61ae0f1a3c08d4359da41e0d45c97f8b8f9f83 Mon Sep 17 00:00:00 2001 From: 0xsign <99134502+0xsign@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:25:02 +0200 Subject: [PATCH 0160/1768] Mellow add urLRT vault (#11425) --- projects/mellow-protocol-v2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/mellow-protocol-v2/index.js b/projects/mellow-protocol-v2/index.js index 471e5df178..24a222d970 100644 --- a/projects/mellow-protocol-v2/index.js +++ b/projects/mellow-protocol-v2/index.js @@ -16,6 +16,7 @@ const config = { '0x3a828C183b3F382d030136C824844Ea30145b4c7', '0x64047dD3288276d70A4F8B5Df54668c8403f877F', '0x7b31F008c48EFb65da78eA0f255EE424af855249', + '0x4f3Cc6359364004b245ad5bE36E6ad4e805dC961', ], }, } From d046ef9f3e8f32dbc1f5eadba7887db97aa83047 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:25:13 +0200 Subject: [PATCH 0161/1768] feat:add Adapter Asteroneo (univ2 fork) (#11427) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/asteroneo/index.js | 5 +++++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 4 ++++ 4 files changed, 11 insertions(+) create mode 100644 projects/asteroneo/index.js diff --git a/projects/asteroneo/index.js b/projects/asteroneo/index.js new file mode 100644 index 0000000000..dcc2069e39 --- /dev/null +++ b/projects/asteroneo/index.js @@ -0,0 +1,5 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + neox: { tvl: getUniTVL({ factory: '0x1dAbb81D9Faeb1DF4a8c97A60C5269c7D45e66B0', useDefaultCoreAssets: true })} +} \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 9225969f62..29b631551a 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -209,6 +209,7 @@ "neo", "neo3", "neon_evm", + "neox", "neutron", "new", "nibiru", diff --git a/projects/helper/env.js b/projects/helper/env.js index 0779759b7b..f6f43d0e50 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -13,6 +13,7 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", CRONOS_ZKEVM_RPC_MULTICALL: '0x9b122BF7a96F24EFB7A2b5765c635909dB3458F7', + NEOX_RPC_MULTICALL: '0xD6010D102015fEa9cB3a9AbFBB51994c0Fd6E672', } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 46ff851fd1..6214ebc242 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -65,6 +65,10 @@ const fixBalancesTokens = { taiko: { '0x7d02A3E0180451B17e5D7f29eF78d06F8117106C': { coingeckoId: "dai", decimals: 18 }, }, + neox: { + [ADDRESSES.null]: { coingeckoId: "gas", decimals: 18 }, + '0x008cd7f573998cb841a5d82a857ed1f0ce03a653': { coingeckoId: "gas", decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From d9e9253bf78be8a6f990b8e53d15b286eeb08f39 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:21:17 +0100 Subject: [PATCH 0162/1768] add wallets binance (#11431) --- projects/binance/config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/binance/config.js b/projects/binance/config.js index c5499e6452..06842fe024 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -626,6 +626,9 @@ const assetList = [ ['MATIC', 'MATIC', '0x505e71695e9bc45943c58adec1650577bca68fd9'], ['USDT', 'MATIC', '0x505e71695e9bc45943c58adec1650577bca68fd9'], ['USDT', 'TRX', 'TRGCqsUXeynKTgynp2j9g3sg7Nux2KtB3u'], + // added on the 27/08/2024 + ['BTC', 'BTC', '3PXBET2GrTwCamkeDzKCx8DeGDyrbuGKoc'], + ['BTC', 'BTC', '3QK5vQ9hucSg8ZC8Vizq83qEWeHFLAWMud'], ] function getAddresses(chain) { From eb22e3c0f954ef63d736315fef4a6647327bd383 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:40:55 +0100 Subject: [PATCH 0163/1768] add bitunix cex (#11432) --- projects/bitunix-cex/index.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 projects/bitunix-cex/index.js diff --git a/projects/bitunix-cex/index.js b/projects/bitunix-cex/index.js new file mode 100644 index 0000000000..05d238c518 --- /dev/null +++ b/projects/bitunix-cex/index.js @@ -0,0 +1,34 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x76B0aB5067B3be922ef4698390Ca8bd5812A5080" + ], + }, + bitcoin: { + owners: [ + "bc1qxh9ruwejxz7ztzxejafd74tyxg4sgfeqxun42f", + "bc1qhjfnumgcsqsx6grxa7mfl7rr5g3u8xl4gtt7tr", + "bc1qkvrddql6hh00apslzsxnysl75hhnm5fpqdah37" + ], + }, + tron: { + owners: [ + "TJwMqVoy8kAtrC1GLqRuoDqPYCsbaxZzw4", + "TA2EWrSzZHsDBn3d8j4m9f2nbHds2cSNYb", + "TNuHnKVFW3kahz3Xe6EyHJiTm9GBtg2aGD", + "TMiru9N4RffN3e7oT1HGk8cN6WizmL4ijP", + "TDpDGvfxtEdq7EHyHThYtSuL9tAEZSnjv7", + "TPssYpQm3tFzQNvCSVkeTrx4cFft43Ln2J", + "TDzTcjvucTPgZqaVjTct65AyFxP7DnLEjY", + "TE9oPgFeo3qz3152e2GNfKEdEs3UF42jTF", + "TYVAHVXixkL2dnaPfyjZz6J7hF6J4WW3Qx", + "TCxBM3QPZCebzCuXtzzBA7Vet5mCcruHdN", + "TLnMjGrgWTZLadqNRzbQPTzDPWbH6Dc1HA", + "TRcvGsNpzkm8LdhLYmqBWESRrTUv7BPQ8t" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file From 89bd96c12e9d7bb657b149b2520f9b14176adfcc Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Tue, 27 Aug 2024 19:56:31 +0800 Subject: [PATCH 0164/1768] add JLP strategy and USDC lending program to TVL calculation (#11430) --- projects/vaultka/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/vaultka/index.js b/projects/vaultka/index.js index b314fd6ffe..4386ddf9a2 100644 --- a/projects/vaultka/index.js +++ b/projects/vaultka/index.js @@ -30,11 +30,19 @@ module.exports = { const jupSolProgram = "6j6Fwxf7UzfaXqQA2QraWGEAYUYzjjZP3t6ChzjzkmL9"; const jitoSolProgram = "6MAnq2z4ww8nnvfd8sec4sRMhTEdsdZXB1FLgqaYsg4d"; + const lendingUsdc = "DefkwTSvkHeZASCuaVJ8AxUWS6zvBCwrLFpW2FniLSWo"; //change it to token account + const usdc = ADDRESSES.solana.USDC; + const jlp = "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4" + const strategyJlp = "5852AnvCSV2GDzgpRVG4ZQ5cNn7abR7pPty5FaBxHLzW" + return sumTokens2({ owner: lendingSol, tokensAndOwners: [ [jupSol, jupSolProgram], [jitoSol, jitoSolProgram], + [jlp, strategyJlp], + [usdc, lendingUsdc], + ], solOwners: [lendingSol], }); From 869146a0653252399aaf07601a46312e06b19eb3 Mon Sep 17 00:00:00 2001 From: yash-trufin <113037107+yash-trufin@users.noreply.github.com> Date: Tue, 27 Aug 2024 17:26:43 +0530 Subject: [PATCH 0165/1768] refactor: Update methodology for TruFin's TruStake and Legacy vaults (#11429) --- projects/trufin-trustake/index.js | 2 +- projects/trufin/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/trufin-trustake/index.js b/projects/trufin-trustake/index.js index 0597bb4d0c..9773ee5467 100644 --- a/projects/trufin-trustake/index.js +++ b/projects/trufin-trustake/index.js @@ -28,7 +28,7 @@ async function tvl(api) { } module.exports = { - methodology: `Counts the TVL of MATIC tokens in TruFin's TruStake vault.`, + methodology: `Counts the TVL of native tokens across all TruStake vaults.`, ethereum: { tvl }, diff --git a/projects/trufin/index.js b/projects/trufin/index.js index ab7a53a3ab..c363ce56e1 100644 --- a/projects/trufin/index.js +++ b/projects/trufin/index.js @@ -13,7 +13,7 @@ async function tvl(api) { } module.exports = { - methodology: `Counts the TVL of MATIC tokens in TruFin's TruStake vault.`, + methodology: `Counts the TVL of MATIC tokens in TruFin's Legacy vaults.`, ethereum: { tvl } From 1538a398ed14f86c2d241552a18ca8343b4f7a4c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 27 Aug 2024 16:13:49 +0100 Subject: [PATCH 0166/1768] bridge --- projects/osmosis-ibc/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/osmosis-ibc/index.js diff --git a/projects/osmosis-ibc/index.js b/projects/osmosis-ibc/index.js new file mode 100644 index 0000000000..17df9eda62 --- /dev/null +++ b/projects/osmosis-ibc/index.js @@ -0,0 +1,21 @@ +const { get } = require('../helper/http') +const { PromisePool } = require('@supercharge/promise-pool') + +async function tvl(api) { + const res = await get( + `https://raw.githubusercontent.com/osmosis-labs/assetlists/main/osmosis-1/generated/chain_registry/assetlist.json` + ) + + await PromisePool.withConcurrency(10) + .for(res.assets) + .process(async (c) => { + const { base: address } = c; + if (!address.startsWith("ibc/")) return; + const res = await get(`https://lcd.osmosis.zone/cosmos/bank/v1beta1/supply/by_denom?denom=${address}`) + if (res && res.amount) api.add(address, res.amount.amount, { skipChain: true }) + }) +} + +module.exports = { + cosmos: { tvl } +} From 237d0b4ec56b345c7e1b7eb9fd3f4f2ed14e5d2c Mon Sep 17 00:00:00 2001 From: rohan9134 <149740230+rohan9134@users.noreply.github.com> Date: Wed, 28 Aug 2024 01:57:10 +0900 Subject: [PATCH 0167/1768] Carrot Swap Adapter (#11435) Co-authored-by: rohan9134 --- projects/carrotswap/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/carrotswap/index.js diff --git a/projects/carrotswap/index.js b/projects/carrotswap/index.js new file mode 100644 index 0000000000..4e1c4cce50 --- /dev/null +++ b/projects/carrotswap/index.js @@ -0,0 +1,5 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + neox: { tvl: getUniTVL({ factory: '0x753df473702cB31BB81a93966e658e1AA4f10DD8', useDefaultCoreAssets: true })} +} \ No newline at end of file From beda21b24fbbeab317b3d6795f3d1038d98520f7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:57:05 +0200 Subject: [PATCH 0168/1768] minor fix --- projects/helper/tokenMapping.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 6214ebc242..0cacbf762e 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -68,6 +68,7 @@ const fixBalancesTokens = { neox: { [ADDRESSES.null]: { coingeckoId: "gas", decimals: 18 }, '0x008cd7f573998cb841a5d82a857ed1f0ce03a653': { coingeckoId: "gas", decimals: 18 }, + '0xde41591ed1f8ed1484ac2cd8ca0876428de60eff': { coingeckoId: "gas", decimals: 18 }, } } From 1c617c92bb3ac30723aeb4fb72ccae60c506197a Mon Sep 17 00:00:00 2001 From: Rahul Sethuram Date: Tue, 27 Aug 2024 20:58:50 +0400 Subject: [PATCH 0169/1768] feat: new chains (#11434) --- projects/ionic/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/ionic/index.js b/projects/ionic/index.js index fd64d1f9e1..eeba8d7a39 100644 --- a/projects/ionic/index.js +++ b/projects/ionic/index.js @@ -6,4 +6,10 @@ module.exports = mergeExports([{ mode: compoundExports2({ comptroller: '0xfb3323e24743caf4add0fdccfb268565c0685556' }) }, { mode: compoundExports2({ comptroller: '0x8fb3d4a94d0aa5d6edaac3ed82b59a27f56d923a' }) + }, { + base: compoundExports2({ comptroller: '0x05c9C6417F246600f8f5f49fcA9Ee991bfF73D13' }) + }, { + bob: compoundExports2({ comptroller: '0x9cFEe81970AA10CC593B83fB96eAA9880a6DF715' }) + }, { + fraxtal: compoundExports2({ comptroller: '0xB5141403e811fFFE02f4d49Ea8d4a7B0b9590658' }) }]) \ No newline at end of file From 317a59bea9b85bd61ebe85fc1eb2662e8a97e13e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:59:06 -0400 Subject: [PATCH 0170/1768] Add modemax (#11440) Co-authored-by: gengbingbing --- projects/modemax-dex/index.js | 5 +++++ projects/modemax-perp/index.js | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 projects/modemax-dex/index.js create mode 100644 projects/modemax-perp/index.js diff --git a/projects/modemax-dex/index.js b/projects/modemax-dex/index.js new file mode 100644 index 0000000000..1fa244d491 --- /dev/null +++ b/projects/modemax-dex/index.js @@ -0,0 +1,5 @@ +const {uniTvlExports} = require('../helper/unknownTokens.js') + +module.exports = uniTvlExports({ + mode: '0x423A079C43e4eD7ca561Ef04765eDB796F0Ec6c6' +}) \ No newline at end of file diff --git a/projects/modemax-perp/index.js b/projects/modemax-perp/index.js new file mode 100644 index 0000000000..4c85a95ab3 --- /dev/null +++ b/projects/modemax-perp/index.js @@ -0,0 +1,7 @@ +const { gmxExportsV2 } = require('../helper/gmx.js') + +module.exports = { + mode: { + tvl: gmxExportsV2({ eventEmitter: '0xd63352120c45378682d705f42a9F085E79E3c888', fromBlock: 25655, }) + } +} From 32f295efe46c7b725d6211abde60abb5afeb3dc9 Mon Sep 17 00:00:00 2001 From: sgmntp <146187995+sgmntp@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:59:36 +0200 Subject: [PATCH 0171/1768] update (Segment Finance) Supported Blockchains - rootstock, core (#11438) --- projects/segment-finance/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/segment-finance/index.js b/projects/segment-finance/index.js index e2c25c3dad..0675098f73 100644 --- a/projects/segment-finance/index.js +++ b/projects/segment-finance/index.js @@ -17,5 +17,7 @@ module.exports = { "bsc", ), }, - bob: compoundExports2({ comptroller: "0xcD7C4F508652f33295F0aEd075936Cd95A4D2911", cether: '0xd7c6cc5aef7396182c5d7ebdac66ff674f3ddcf4' }) + bob: compoundExports2({ comptroller: "0xcD7C4F508652f33295F0aEd075936Cd95A4D2911", cether: '0xd7c6cc5aef7396182c5d7ebdac66ff674f3ddcf4' }), + rsk: compoundExports2({ comptroller: "0x2eea8fbA494d5008ba72f80E0091Cc74dB5f9926", cether: '0x8F9958ec0FeeccCf0feC871B7bBB3D8d0B7A4D3c' }), + core: compoundExports2({ comptroller: "0xaba65b87eBEdB2D753b37AeCECD1E168341eE0DD", cether: '0xb57A4b3ccE8d999A1e6B0357c0a31C3808401B42' }), }; From e9038c6e0eb1b31c5f5c9c48192747ba729698d7 Mon Sep 17 00:00:00 2001 From: Clonescody Date: Tue, 27 Aug 2024 10:10:13 -0700 Subject: [PATCH 0172/1768] fix(umami-finance): update vaults list for tvl and remove staking(deprecated) (#11436) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/umamifinance/index.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/projects/umamifinance/index.js b/projects/umamifinance/index.js index 7efb67a8d7..4e1f1da2fe 100644 --- a/projects/umamifinance/index.js +++ b/projects/umamifinance/index.js @@ -1,6 +1,5 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); -const abi = require("./abi.json"); +const { sumERC4626VaultsExport } = require("../helper/erc4626"); const UMAMI = "0x1622bf67e6e5747b81866fe0b85178a93c7f86e3"; // UMAMI staking for protocol revenue in WETH @@ -8,35 +7,37 @@ const mUMAMI = "0x2adabd6e8ce3e82f52d9998a7f64a90d294a92a4"; // UMAMI staking from when it was still ohm fork with rebasing mechanics. // There's still some staked tokens that are yet not unstaked and migrated. const OHM_STAKING_sUMAMI = "0xc9ecFeF2fac1E38b951B8C5f59294a8366Dfbd81"; -// glpUSDC vault is now deprecated -const glpUSDC = "0x2e2153fd13459eba1f277ab9acd624f045d676ce"; -const USDC = ADDRESSES.arbitrum.USDC; -const v2Vaults = [ +// glp vaults are now deprecated as well +const glpVaults = [ + "0x2e2153fd13459eba1f277ab9acd624f045d676ce", "0x727eD4eF04bB2a96Ec77e44C1a91dbB01B605e42", "0xbb84D79159D6bBE1DE148Dc82640CaA677e06126", "0x6a89FaF99587a12E6bB0351F2fA9006c6Cd12257", "0xe0A21a475f8DA0ee7FA5af8C1809D8AC5257607d", "0x37c0705A65948EA5e0Ae1aDd13552BCaD7711A23", +] + +const gmVaultsArbitrum = [ "0x959f3807f0Aa7921E18c78B00B2819ba91E52FeF", // gmUSDC "0x4bCA8D73561aaEee2D3a584b9F4665310de1dD69", // gmWETH "0x5f851F67D24419982EcD7b7765deFD64fBb50a97", // BTC gmUSDC "0xcd8011AaB161A75058eAb24e0965BAb0b918aF29", // gmWBTC ]; +const gmVaultsAvax = [ + "0x4f3274C3889e6cD54C9c739757Ab8EA4b246D76b", // WETH gmUSDC + "0xFCE0A462585A422Bac0ca443B102D0ac1Ff20f9e", // gmWETH +]; + module.exports = { doublecounted: true, start: 1657027865, // UMAMI deployment block ts arbitrum: { staking: stakings([mUMAMI, OHM_STAKING_sUMAMI], UMAMI), - tvl: async (api) => { - - const totalAssets = await api.call({ abi: abi.totalAssets, target: glpUSDC, }); - api.add(USDC, totalAssets); - - const assets = await api.multiCall({ abi: 'address:asset', calls: v2Vaults }); - const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: v2Vaults }); - api.add(assets, bals) - }, + tvl: sumERC4626VaultsExport({ vaults: glpVaults.concat(gmVaultsArbitrum), isOG4626: true }), }, -}; + avax: { + tvl: sumERC4626VaultsExport({ vaults:gmVaultsAvax, isOG4626: true }), + } +} From ef87051445c6ede661be83d7419e67c25946c8dc Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 27 Aug 2024 22:03:24 +0100 Subject: [PATCH 0173/1768] flag misrepresentedtokens --- projects/firefly/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/firefly/index.js b/projects/firefly/index.js index 69da10bb5c..e5b191d137 100644 --- a/projects/firefly/index.js +++ b/projects/firefly/index.js @@ -1,6 +1,7 @@ const { uniV3Export } = require("../helper/uniswapV3") -module.exports.misrepresentedTokens = true; + module.exports = uniV3Export({ manta: { factory: "0x8666EF9DC0cA5336147f1B11f2C4fC2ecA809B95", fromBlock: 1776716, }, }) +module.exports.misrepresentedTokens = true; \ No newline at end of file From c257d397a7e5032965a0f54bf72d590cbd91b0d9 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:28:40 +0100 Subject: [PATCH 0174/1768] add more bybit wallets (#11450) --- projects/bybit/index.js | 162 +++++++++++++++++++++++++++++----------- 1 file changed, 120 insertions(+), 42 deletions(-) diff --git a/projects/bybit/index.js b/projects/bybit/index.js index dfbdf54ffa..ab051ca4d0 100644 --- a/projects/bybit/index.js +++ b/projects/bybit/index.js @@ -1,75 +1,153 @@ -const { cexExports } = require('../helper/cex') +const { cexExports } = require("../helper/cex"); const config = { ethereum: { owners: [ - '0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4', - '0xA7A93fd0a276fc1C0197a5B5623eD117786eeD06', - '0xe1ab8c08294F8ee707D4eFa458eaB8BbEeB09215', - '0xee5B5B923fFcE93A870B3104b7CA09c3db80047A', - '0xf89d7b9c864f589bbF53a82105107622B35EaA40', // multiple chains + "0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4", + "0xA7A93fd0a276fc1C0197a5B5623eD117786eeD06", + "0xe1ab8c08294F8ee707D4eFa458eaB8BbEeB09215", + "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A", + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", // multiple chains + "0x88a1493366d48225fc3cefbdae9ebb23e323ade3", + "0x6Bd869be16359f9E26f0608A50497f6Ef122eE3E", + "0x922fa922da1b0b28d0af5aa274d7326eaa108c3d", + "0xbaed383ede0e5d9d72430661f3285daa77e9439f" ], }, bitcoin: { owners: [ - 'bc1q2qqqt87kh33s0er58akh7v9cwjgd83z5smh9rp', - 'bc1q9w4g79ndel72lygvwtqzem67z6uqv4yncvqjz3yn8my9swnwflxsutg4cx', - 'bc1qjysjfd9t9aspttpjqzv68k0ydpe7pvyd5vlyn37868473lell5tqkz456m', - '1GrwDkr33gT6LuumniYjKEGjTLhsL5kmqC', - 'bc1qs5vdqkusz4v7qac8ynx0vt9jrekwuupx2fl5udp9jql3sr03z3gsr2mf0f', - // added on the 15th of july 2024. - 'bc1qa2eu6p5rl9255e3xz7fcgm6snn4wl5kdfh7zpt05qp5fad9dmsys0qjg0e' - ] + "bc1q2qqqt87kh33s0er58akh7v9cwjgd83z5smh9rp", + "bc1q9w4g79ndel72lygvwtqzem67z6uqv4yncvqjz3yn8my9swnwflxsutg4cx", + "bc1qjysjfd9t9aspttpjqzv68k0ydpe7pvyd5vlyn37868473lell5tqkz456m", + "1GrwDkr33gT6LuumniYjKEGjTLhsL5kmqC", + "bc1qs5vdqkusz4v7qac8ynx0vt9jrekwuupx2fl5udp9jql3sr03z3gsr2mf0f", + // added on the 15th of july 2024. + "bc1qa2eu6p5rl9255e3xz7fcgm6snn4wl5kdfh7zpt05qp5fad9dmsys0qjg0e", + "16jVbMCcqq1deKrMB3esL2HPso7kvqUsec" + ], }, bsc: { owners: [ - '0xee5B5B923fFcE93A870B3104b7CA09c3db80047A', - '0xf89d7b9c864f589bbf53a82105107622b35eaa40', - ] + "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A", + "0xf89d7b9c864f589bbf53a82105107622b35eaa40", + "0x88a1493366d48225fc3cefbdae9ebb23e323ade3" + ], }, tron: { owners: [ - 'TB1WQmj63bHV9Qmuhp39WABzutphMAetSc', - 'TBpr1tQ5kvoKMv85XsCESVavYo4oZZdWpY', - 'TKFvdC4UC1vtCoHZgn8eviK34kormXaqJ7', - 'TQVxjVy2sYt4at45ezD7VG4H6nQZtsua5C', - 'TS9PDCB6vzLYDCPr5Nas2yzekdr7ot6dxn', - 'TU4vEruvZwLLkSfV9bNw12EJTPvNr7Pvaa', - 'TXRRpT4BZ3dB5ShUQew2HXv1iK3Gg4MM9j', - 'TYgFxMvvu2VHFJnxQf8fh1qVAeMfXZJZ3K', - ] + "TB1WQmj63bHV9Qmuhp39WABzutphMAetSc", + "TBpr1tQ5kvoKMv85XsCESVavYo4oZZdWpY", + "TKFvdC4UC1vtCoHZgn8eviK34kormXaqJ7", + "TQVxjVy2sYt4at45ezD7VG4H6nQZtsua5C", + "TS9PDCB6vzLYDCPr5Nas2yzekdr7ot6dxn", + "TU4vEruvZwLLkSfV9bNw12EJTPvNr7Pvaa", + "TXRRpT4BZ3dB5ShUQew2HXv1iK3Gg4MM9j", + "TYgFxMvvu2VHFJnxQf8fh1qVAeMfXZJZ3K", + "TB1cPNTPE2yKRbyd5C3hd9KMXgb8HqW1CM", + "TTH75Z9rfRgzCLNDDYBaR2WjUvuSDRtSMg" + ], }, polygon: { - owners: ['0xf89d7b9c864f589bbf53a82105107622b35eaa40'] + owners: ["0xf89d7b9c864f589bbf53a82105107622b35eaa40", "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A"], }, arbitrum: { - owners: ['0xf89d7b9c864f589bbF53a82105107622B35EaA40'] + owners: ["0xf89d7b9c864f589bbF53a82105107622B35EaA40", "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A"], }, avax: { - owners: ['0xf89d7b9c864f589bbF53a82105107622B35EaA40'] + owners: ["0xf89d7b9c864f589bbF53a82105107622B35EaA40", "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A"], }, ripple: { owners: [ - 'rMvCasZ9cohYrSZRNYPTZfoaaSUQMfgQ8G', - 'rwBHqnCgNRnk3Kyoc6zon6Wt4Wujj3HNGe', - 'raQxZLtqurEXvH5sgijrif7yXMNwvFRkJN' - ] + "rMvCasZ9cohYrSZRNYPTZfoaaSUQMfgQ8G", + "rwBHqnCgNRnk3Kyoc6zon6Wt4Wujj3HNGe", + "raQxZLtqurEXvH5sgijrif7yXMNwvFRkJN", + "raBWjPDjohBGc9dR6ti3DsP9Sn47jirTi3" + ], }, optimism: { - owners: ['0xf89d7b9c864f589bbF53a82105107622B35EaA40'] + owners: ["0xf89d7b9c864f589bbF53a82105107622B35EaA40", "0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4", "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A"], }, era: { - owners: ['0xf89d7b9c864f589bbF53a82105107622B35EaA40'] + owners: ["0xf89d7b9c864f589bbF53a82105107622B35EaA40", "0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4", "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A"], }, solana: { owners: [ - 'AC5RDfQFmDS1deWZos921JfqscXdByf8BKHs5ACWjtW2', - '42brAgAVNzMBP7aaktPvAmBSPEkehnFQejiZc53EpJFd' - ] + "AC5RDfQFmDS1deWZos921JfqscXdByf8BKHs5ACWjtW2", + "42brAgAVNzMBP7aaktPvAmBSPEkehnFQejiZc53EpJFd", + ], }, cardano: { - owners: ['addr1v8mn6dmk7tf9u26kr09a05lmvc9j4k9d940a88ta3hdczqgyt7whl'] - } -} + owners: ["addr1v8mn6dmk7tf9u26kr09a05lmvc9j4k9d940a88ta3hdczqgyt7whl"], + }, + aptos: { + owners: [ + "0x84b1675891d370d5de8f169031f9c3116d7add256ecf50a4bc71e3135ddba6e0", + ], + }, + taiko: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + ], + }, + celo: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + ], + }, + base: { + owners: [ + "0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4", + "0xbaed383ede0e5d9d72430661f3285daa77e9439f", + "0xee5B5B923fFcE93A870B3104b7CA09c3db80047A", + ], + }, + fantom: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + ], + }, + kava: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + ], + }, + linea: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + ], + }, + litecoin: { + owners: [ + "LKxNtynH2GxLc2oLxUGL6ryckK8JMdP5BR", + "ltc1qp7cnlxmz8wgc93g0m020ckru2s55t25y3wunf6" + ], + }, + manta: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + "0xa6a9f45518881a788e29f82a032f9d400177d2b6", + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + "0x588846213a30fd36244e0ae0ebb2374516da836c" + ], + }, + scroll: { + owners: [ + "0xf89d7b9c864f589bbF53a82105107622B35EaA40", + ], + }, + polkadot: { + owners: [ + "11yLs2qzU15AhxnH1d7Koqcf83AwutKkDaGbqsJJ6yDWQjc", + "12nr7GiDrYHzAYT9L8HdeXnMfWcBuYfAXpgfzf3upujeCciz" + ], + }, + eos: { + owners: [ + "coldcrazycat", + "eosdididada3", + "kcwo3rimcnqf" + ], + }, +}; -module.exports = cexExports(config) \ No newline at end of file +module.exports = cexExports(config); From 2b58d41e80942a9931e9ee956e99a9632bd17760 Mon Sep 17 00:00:00 2001 From: 0xmDreamy <124707942+0xmDreamy@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:53:11 +0200 Subject: [PATCH 0175/1768] feat(abracadabra): Add support for sdeusd cauldron on mainnet (#11451) --- projects/abracadabra/market.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/abracadabra/market.json b/projects/abracadabra/market.json index 8d045db778..af4f168f02 100644 --- a/projects/abracadabra/market.json +++ b/projects/abracadabra/market.json @@ -67,7 +67,8 @@ "0x1062eb452f8c7a94276437ec1f4aaca9b1495b72": "0x38EA452219524Bb87e18dE1C24D3bB59510BD783", "0x692887E8877C6Dd31593cda44c382DB5b289B684": "0xf35b31B941D94B249EaDED041DB1b05b7097fEb6", "0x406b89138782851d3a8C04C743b010CEb0374352": "0xdCD90C7f6324cfa40d7169ef80b12031770B4325", - "0x85f60D3ea4E86Af43c9D4E9CC9095281fC25c405": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599" + "0x85f60D3ea4E86Af43c9D4E9CC9095281fC25c405": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + "0x00380CB5858664078F2289180CC32F74440AC923": "0x5C5b196aBE0d54485975D1Ec29617D42D9198326" }, "fantom": { "0xed745b045f9495b8bfc7b58eea8e0d0597884e12": "0x0DEC85e74A92c52b7F708c4B10207D9560CEFaf0", From 404edcd4aa35cda9ba80f154a5c4924dc8161628 Mon Sep 17 00:00:00 2001 From: CronosLabsDev <106642922+CronosLabsDev@users.noreply.github.com> Date: Wed, 28 Aug 2024 20:53:27 +1000 Subject: [PATCH 0176/1768] feat: fulcrom cronos-zkevm tvl (#11449) --- projects/fulcrom/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/fulcrom/index.js b/projects/fulcrom/index.js index b31fd2f487..9f53c9cc65 100644 --- a/projects/fulcrom/index.js +++ b/projects/fulcrom/index.js @@ -2,6 +2,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const CRO_VAULT_ADDR = '0x8C7Ef34aa54210c76D6d5E475f43e0c11f876098'; const ZKSYNC_VAULT_ADDR = '0x7d5b0215EF203D0660BC37d5D09d964fd6b55a1E'; +const CRO_ZKEVM_VAULT_ADDR = '0xdDDf221d5293619572616574Ff46a2760f162075'; function fulExports({ vault, }) { return async (api) => { @@ -27,4 +28,7 @@ module.exports = { era: { tvl: fulExports({ vault: ZKSYNC_VAULT_ADDR, }), }, + cronos_zkevm: { + tvl: fulExports({ vault: CRO_ZKEVM_VAULT_ADDR, }), + }, } From 9d2f777efa68a47112f21564200d393363b8e9dc Mon Sep 17 00:00:00 2001 From: lyfmantle <161433628+lyfmantle@users.noreply.github.com> Date: Wed, 28 Aug 2024 18:57:50 +0800 Subject: [PATCH 0177/1768] add fbtc address (#11445) --- projects/fbtc/index.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/projects/fbtc/index.js b/projects/fbtc/index.js index 217c5c55e5..a8be5fda22 100644 --- a/projects/fbtc/index.js +++ b/projects/fbtc/index.js @@ -2,17 +2,21 @@ const { sumTokens } = require('../helper/chain/bitcoin') const sdk = require('@defillama/sdk') const staticAddresses = [ + // https://docs.fbtc.com/security/bitcoin-reserve-address + 'bc1q7jgulg69frc8zuzy0ng8d5208kae7t0twyfjwm', + 'bc1q6c3c0t3zvnphce37ufr4yz9veaqvew2wg0shwr', + '3HjNJWcn2ayFLikzmKRaFtcbLufYChQo3T', + '374vhN24WryvNWUUZR2uDAnL4oNP5EW4qR', + 'bc1qr5nz7n8ulcdz0w3s6fska80fawxhvqlh273qypm3rkjequ9wpmhs65ppw7', 'bc1qhu98nf6ddz6ja73rn72encdr8ezsyhexwpdzap0vcs7lg2wpmrnq5ygfsl', 'bc1qg6asmzjr7nr5f5upg3xqyrdxl2tq8ef58hha7t0s82mzzx6zjxesyccp4h', 'bc1qxe3md4lehg8gmrlx3e8xqju5mytt266l4hcy8khl6tm5mahghmeqtxlgqq', 'bc1qy48h0kuv0r3e330wjfs6r74sk49pkzumnm907t5mhqjxml22r3ss2ucuxc', + '32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', - // https://docs.fbtc.com/security/bitcoin-reserve-address - 'bc1q7jgulg69frc8zuzy0ng8d5208kae7t0twyfjwm', - 'bc1q6c3c0t3zvnphce37ufr4yz9veaqvew2wg0shwr', - '3HjNJWcn2ayFLikzmKRaFtcbLufYChQo3T', - '374vhN24WryvNWUUZR2uDAnL4oNP5EW4qR', + 'bc1qj9w5ee2kf4akvtzrj59p77yc6x02nqqg9m0tcd', + 'bc1q6w7dn3fkky587a2qwxp6swyhlwgueh2ew26zem', ] const abi = { getQualifiedUserInfo: "function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)", From 9e0f67c71057bdd7064c1583f1ec5ec6cf4b0394 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:50:22 +0200 Subject: [PATCH 0178/1768] ondo: track arb USDY #11424 --- projects/ondofinance/index.js | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/projects/ondofinance/index.js b/projects/ondofinance/index.js index 5db659f803..ba6b026d7c 100644 --- a/projects/ondofinance/index.js +++ b/projects/ondofinance/index.js @@ -32,6 +32,9 @@ const config = { noble: { USDY: "ausdy", }, + arbitrum: { + USDY: "0x35e050d3C0eC2d29D269a8EcEa763a183bDF9A9D", + }, }; async function getUSDYTotalSupplySUI() { @@ -75,22 +78,9 @@ Object.keys(config).forEach((chain) => { const res = await get(`https://noble-api.polkachu.com/cosmos/bank/v1beta1/supply/${config.noble.USDY}`); api.addTokens(config.ethereum.USDY, parseInt(res.amount.amount), { skipChain: true, }); } else { - supplies = await api.multiCall({ - abi: "erc20:totalSupply", - calls: fundAddresses, - }); - if (chain === "ethereum") { - const usdycIndex = fundAddresses.indexOf(config.ethereum.USDYc); - const usdyIndex = fundAddresses.indexOf(config.ethereum.USDY); - // add USDYc supply to USDY supply - supplies[usdyIndex] = - parseInt(supplies[usdyIndex]) + parseInt(supplies[usdycIndex]); - fundAddresses.splice(usdycIndex, 1); - supplies.splice(usdycIndex, 1); - } + supplies = await api.multiCall({ abi: "erc20:totalSupply", calls: fundAddresses, }) api.addTokens(fundAddresses, supplies); } - return api.getBalances(); }, }; }); From 7525d48a0028f86809062b442d572b17abc0f914 Mon Sep 17 00:00:00 2001 From: xieqiancaosissi Date: Wed, 28 Aug 2024 20:34:54 +0800 Subject: [PATCH 0179/1768] update ref finance tvl (#11444) --- projects/reffinance.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/projects/reffinance.js b/projects/reffinance.js index 1222b44a21..3142d1bf1e 100644 --- a/projects/reffinance.js +++ b/projects/reffinance.js @@ -1,14 +1,20 @@ +const { default: BigNumber } = require('bignumber.js') const { call, sumSingleBalance, } = require('./helper/chain/near') const PROJECT_CONTRACT = 'v2.ref-finance.near' - +const PROJECT_DCL_CONTRACT = 'dclv2.ref-labs.near' async function tvl() { const balances = {} let poolIndex = 0 const numberOfPools = await call(PROJECT_CONTRACT, 'get_number_of_pools', {}) - + const allDclPools = await call(PROJECT_DCL_CONTRACT, 'list_pools', {}); + allDclPools.forEach((dclPoolDetail) => { + const { token_x, token_y, total_order_x, total_order_y, total_x, total_y } = dclPoolDetail; + sumSingleBalance(balances, token_x, BigNumber(total_order_x).plus(total_x).toFixed()); + sumSingleBalance(balances, token_y, BigNumber(total_order_y).plus(total_y).toFixed()); + }) do { const pools = await call(PROJECT_CONTRACT, 'get_pools', { from_index: poolIndex, limit: 500 }) From a5c6fa099089413082d30ae7ff2fc6b81091bba1 Mon Sep 17 00:00:00 2001 From: bifkn <25141495+DJHellscream@users.noreply.github.com> Date: Wed, 28 Aug 2024 05:36:26 -0700 Subject: [PATCH 0180/1768] Add Apex DeFi TVL and staking (APEX token) (#11443) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/apexdefi/index.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 projects/apexdefi/index.js diff --git a/projects/apexdefi/index.js b/projects/apexdefi/index.js new file mode 100644 index 0000000000..f54d741c45 --- /dev/null +++ b/projects/apexdefi/index.js @@ -0,0 +1,29 @@ +const { staking } = require('../helper/staking') +const ADDRESSES = require('../helper/coreAssets.json'); + +const config = { + avax: { factory: "0x3D193de151F8e4e3cE1C4CB2977F806663106A87", }, + base: { factory: "0x4ccf7aa5736c5e8b6da5234d1014b5019f50cb56", }, + ethereum: { factory: "0x820c889D5749847217599B43ab86FcC91781019f", }, +} + +async function _staking(api) { + const poolInfoAbi = "function getPoolInfo(uint256 _poolId) public view returns (address _staketoken, uint256 _allocationPoints, uint256 _lastRewardTimestamp, uint256 _rewardTokenPerShare, uint256 _totalStaked, uint256 _bonusMultiplier, address _rewarder)" + + const poolInfo = await api.fetchList({ lengthAbi: 'poolLength', itemAbi: poolInfoAbi, target: '0x5995876c9C6e2C23C1C5fc902661127fF9ed38D3', }) + poolInfo.forEach(pool => api.add(pool._staketoken, pool._totalStaked)) +} + +module.exports.methodology = "The Apex DeFi factory contract address is used to obtain the balances held in each token contract as liquidity and the staking contract is used to get the staked APEX balance."; + +Object.keys(config).forEach(chain => { + const { factory, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const tokens = await api.call({ abi: 'address[]:getAllTokens', target: factory }) + return api.sumTokens({ owners: tokens, tokens: [ADDRESSES.null] }) + } + } +}) + +// module.exports.avax.staking = staking('0x5995876c9C6e2C23C1C5fc902661127fF9ed38D3','0x98B172A09102869adD73116FC92A0A60BFF4778F') \ No newline at end of file From 05358f42fb6859ba7d0560dfbe4b50e6e284d083 Mon Sep 17 00:00:00 2001 From: Victor Navarro Date: Wed, 28 Aug 2024 14:37:32 +0200 Subject: [PATCH 0181/1768] Add new reward contract for Crack & Stack (#11452) --- projects/crackandstack/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/crackandstack/index.js b/projects/crackandstack/index.js index 64377de46e..5207ad3835 100644 --- a/projects/crackandstack/index.js +++ b/projects/crackandstack/index.js @@ -3,13 +3,15 @@ const coreAssets = require("../helper/coreAssets.json"); const TAIKO_TOKEN = "0xA9d23408b9bA935c230493c40C73824Df71A0975"; +const CONTRACTS = ["0x2c301eBfB0bb42Af519377578099b63E921515B7", "0xD8F7cd7d919c5266777FB83542F956dD30E80187", "0x12689b6ddE632E69fBAA70d066f86aC9fDd33dd1"]; + // Crack & Stack // https://crackandstack.com/ module.exports = { methodology: `Crack & Stack TVL is the backed value of the Lanterns NFT.`, taiko: { tvl: sumTokensExport({ - owners: ["0x2c301eBfB0bb42Af519377578099b63E921515B7", "0xD8F7cd7d919c5266777FB83542F956dD30E80187"], + owners: CONTRACTS, tokens: [coreAssets.null, coreAssets.taiko.USDT, coreAssets.taiko.USDC_e, coreAssets.taiko.USDC, TAIKO_TOKEN] }), }, From 19e2d10638490cc794b28d39d809cd29850b2836 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:17:18 +0200 Subject: [PATCH 0182/1768] track halo trade univ3 --- package-lock.json | 7 ++++--- projects/halotrade-v3/index.js | 29 +++++++++++++++++++++++++++++ projects/helper/tokenMapping.js | 7 ++++++- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 projects/halotrade-v3/index.js diff --git a/package-lock.json b/package-lock.json index 030a5025e0..6e9e11e2cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -997,9 +997,10 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.81", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.81.tgz", - "integrity": "sha512-8rViEUYV6rY5jc8BHvjBX7/ohT9A6K9yj4jsEpmveAhj9TVSxQWqW0SEiQ+ubAgQ/fGcC2wX0Trl2G5e4W2Tjw==", + "version": "5.0.83", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.83.tgz", + "integrity": "sha512-JojVjzBR73GoVmyuC6gE7AfMgpWvHm2OEKEMIai53b7nkI91oFAVYu1PoX/YD+wTbOPhZwYWWhdVXR5hYPnNRQ==", + "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/halotrade-v3/index.js b/projects/halotrade-v3/index.js new file mode 100644 index 0000000000..7987242427 --- /dev/null +++ b/projects/halotrade-v3/index.js @@ -0,0 +1,29 @@ +const { getConfig } = require('../helper/cache') +const { get } = require('../helper/http') +const { sumTokens2 } = require('../helper/unwrapLPs') + +module.exports = { + aura: { tvl }, +} + +async function tvl(api) { + const pools = await getConfig('halo-trade/uni-v3-pools', undefined, { + fetcher: async () => { + let page = 0 + let size = 100 + let hasMore = true + const pools = [] + do { + const { data: { res: { results } } } = await get(`https://api.halotrade.zone/api/v1/evm/univ3/halo-pool/poolList?page=${page}&pageSize=${size}`) + page++ + hasMore = results.length === size + pools.push(...results.map(i => i.poolContractAddr)) + } while (hasMore) + return pools + } + }) + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) + const ownerTokens = pools.map((v, i) => [[token0s[i], token1s[i]], v]) + return sumTokens2({ api, ownerTokens }) +} \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 0cacbf762e..ed9204e530 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -69,7 +69,12 @@ const fixBalancesTokens = { [ADDRESSES.null]: { coingeckoId: "gas", decimals: 18 }, '0x008cd7f573998cb841a5d82a857ed1f0ce03a653': { coingeckoId: "gas", decimals: 18 }, '0xde41591ed1f8ed1484ac2cd8ca0876428de60eff': { coingeckoId: "gas", decimals: 18 }, - } + }, + aura: { + [ADDRESSES.null]: { coingeckoId: "aura-network", decimals: 18 }, + '0xDE47A655a5d9904BD3F7e1A536D8323fBD99993A': { coingeckoId: "aura-network", decimals: 18 }, + '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd': { coingeckoId: "tether", decimals: 6 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From a5dc6cc1abc620d6a414ad5bfc3996d8596b621a Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:08:20 +0200 Subject: [PATCH 0183/1768] track dragonswap v3 --- projects/dragonswap-sei-v3/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/dragonswap-sei-v3/index.js diff --git a/projects/dragonswap-sei-v3/index.js b/projects/dragonswap-sei-v3/index.js new file mode 100644 index 0000000000..b747f8211f --- /dev/null +++ b/projects/dragonswap-sei-v3/index.js @@ -0,0 +1,21 @@ +const { getConfig } = require('../helper/cache') +const { get } = require('../helper/http') +const { sumTokens2 } = require('../helper/unwrapLPs') + +module.exports = { + sei: { tvl }, +} + +async function tvl(api) { + const pools = await getConfig('dragonswap/uni-v3-pools', undefined, { + fetcher: async () => { + let { pools } = await get(`https://sei-api.dragonswap.app/api/v1/pools`) + pools = pools.filter(i => i.type === 'V3_POOL').map(i => i.pool_address) + return pools + } + }) + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) + const ownerTokens = pools.map((v, i) => [[token0s[i], token1s[i]], v]) + return sumTokens2({ api, ownerTokens }) +} \ No newline at end of file From 8df553364e58b97928c59e79dcf65c6ba5522b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Salgueirinho?= Date: Wed, 28 Aug 2024 15:15:40 +0100 Subject: [PATCH 0184/1768] Liqwid Finance V2 integration (#11433) --- projects/liqwid/index.js | 196 ++++++++++++++++++++++----------------- 1 file changed, 111 insertions(+), 85 deletions(-) diff --git a/projects/liqwid/index.js b/projects/liqwid/index.js index bfa1a678b1..bf61464582 100644 --- a/projects/liqwid/index.js +++ b/projects/liqwid/index.js @@ -11,67 +11,55 @@ module.exports = { } }; - -const endpoint = 'https://api.liqwid.finance/graphql' - -const queryAdaLoans = `query ($page: Int) { - Page (page: $page) { - pageInfo { - currentPage - hasNextPage - } - loan(marketId: "Ada") { - collaterals { - id - amount +const endpoint = 'https://v2.api.liqwid.finance/graphql' + +const queryAdaLoans = `query($input: LoansInput){ + liqwid { + data { + loans(input: $input) { + page + pagesCount + results { + collaterals { + qTokenAmount + market { + id + } + } + } } } } } ` -const query = `query ($page: Int) { - Page (page: $page) { - pageInfo { - currentPage - hasNextPage - } - market { - asset { - marketId - name - qTokenId - qTokenPolicyId - } - state { - totalSupply - utilization - } - marketId - decimals - info { - params { - underlyingClass { - value0 { - symbol - name - } - } - } - scripts { - actionToken { - script { - value0 { - value0 - } - } +const query = `query($input: MarketsInput) { + liqwid { + data { + markets(input: $input) { + page + pagesCount + results { + asset { + id + symbol + qTokenName + qTokenCurrencySymbol + currencySymbol + name + decimals } + supply + liquidity + borrow + utilization } } } } } ` + const tokenMapping = { ADA: 'lovelace', DJED: '8db269c3ec630e06ae29f74bc39edd1f87c819f1056206e879a1cd61446a65644d6963726f555344', @@ -79,31 +67,68 @@ const tokenMapping = { } -const getToken = market => tokenMapping[market.marketId.toUpperCase()] ?? market.info.params.underlyingClass.value0.symbol + toHex(market.info.params.underlyingClass.value0.name) +const getToken = (market) => tokenMapping[market.asset.symbol] ?? market.asset.currencySymbol + toHex(market.asset.name) const getOptimBondTVL = async () => { - const getLoans = async (pageIndex) => { - const { Page: { pageInfo, loan: loans } } = await graphQuery(endpoint, queryAdaLoans, { page: pageIndex }) - - if (!pageInfo.hasNextPage) { - return loans + const getLoans = async (pageIndex = 0, collectedLoans = []) => { + const { + liqwid: { + data: { loans }, + }, + } = await graphQuery(endpoint, queryAdaLoans, { + input: { + marketIds: 'Ada', + page: pageIndex, + }, + }) + + const allLoans = [...collectedLoans, ...loans.results] + + // Check if we've reached the last page + if (pageIndex < loans.pagesCount - 1) { + return await getLoans(pageIndex + 1, allLoans) } - return [...loans, ...(await getLoans(pageIndex + 1))] + + return allLoans } - const loans = await getLoans(0) - const relevantLoans = - loans.filter(l => (l.collaterals.filter(c => c.id === "OptimBond1")).length != 0) - const bonds = - relevantLoans.map(l => l.collaterals[0].amount).reduce((acc, amount) => - acc + Number(amount), 0) + const loans = await getLoans() + const relevantLoans = loans.filter((l) => + l.collaterals.some((c) => c.market.id === 'OptimBond1'), + ) + const bonds = relevantLoans + .flatMap((l) => l.collaterals) + .filter((c) => c.market.id === 'OptimBond1') + .reduce((acc, collateral) => acc + collateral.qTokenAmount, 0) return bonds } async function tvl(api) { - const { Page: { market: markets } } = await graphQuery(endpoint, query, { page: 0 }) + const getMarkets = async (pageIndex = 0, collectedMarkets = []) => { + const { + liqwid: { + data: { markets }, + }, + } = await graphQuery(endpoint, query, { + input: { + page: pageIndex, + }, + }) + + const allMarkets = [...collectedMarkets, ...markets.results] + + // Check if we've reached the last page + if (pageIndex < markets.pagesCount - 1) { + return await getMarkets(pageIndex + 1, allMarkets) + } - markets.forEach(market => add(api, market, market.state.totalSupply)) + return allMarkets + } + + const markets = await getMarkets() + markets.forEach((market) => + add(api, market, market.liquidity * 10 ** market.asset.decimals), + ) add(api, "OptimBond1", await getOptimBondTVL()) } @@ -117,30 +142,31 @@ function add(api, market, bal) { } async function borrowed(api) { - const { Page: { market: markets } } = await graphQuery(endpoint, query) - - markets.forEach(market => { - const utilization = market.state.utilization - const availability = 1 - utilization - const totalBorrowed = market.state.totalSupply * utilization / availability - add(api, market, totalBorrowed) - }) -} - -function base64ToHex(base64) { - return base64 - /* // Step 1: Decode the Base64 string to a byte array - const binaryData = atob(base64); + const getMarkets = async (pageIndex = 0, collectedMarkets = []) => { + const { + liqwid: { + data: { markets }, + }, + } = await graphQuery(endpoint, query, { + input: { + page: pageIndex, + }, + }) + + const allMarkets = [...collectedMarkets, ...markets.results] + + // Check if we've reached the last page + if (pageIndex < markets.pagesCount - 1) { + return await getMarkets(pageIndex + 1, allMarkets) + } - // Step 2: Convert each byte to its hexadecimal representation - const hexArray = []; - for (let i = 0; i < binaryData.length; i++) { - const byte = binaryData.charCodeAt(i).toString(16).padStart(2, '0'); - hexArray.push(byte); + return allMarkets } - // Step 3: Concatenate the hexadecimal values to form the final hexadecimal string - return hexArray.join(''); */ + const markets = await getMarkets() + markets.forEach((market) => { + add(api, market, market.borrow * 10 ** market.asset.decimals) + }) } function toHex(str) { @@ -149,4 +175,4 @@ function toHex(str) { hex += str.charCodeAt(i).toString(16); } return hex -} \ No newline at end of file +} From 2c8b1064d95e2c04e20c581925fba20d3b24431a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 28 Aug 2024 16:47:25 +0100 Subject: [PATCH 0185/1768] add dym dex --- projects/dymension-dex.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/dymension-dex.js diff --git a/projects/dymension-dex.js b/projects/dymension-dex.js new file mode 100644 index 0000000000..d62aa36098 --- /dev/null +++ b/projects/dymension-dex.js @@ -0,0 +1,18 @@ +async function tvl() { + const pools = await fetch("https://fetchnetworkdatarequest-xqbg2swtrq-uc.a.run.app/?networkId=dymension_1100-1&dataType=pools").then(r=>r.json()) + const dym = pools.reduce((sum, pool)=>{ + const dymAssets = pool.poolAssets.find(a=>a.token.denom === "adym").token.amount/1e18 + return sum+dymAssets + }, 0) + + return { + "coingecko:dymension": dym*2 + } +} + +module.exports = { + methodology: 'Liquidity in DEX', + dymension:{ + tvl + } +} From 34203a9e9f83355a57c0ffb9804153b973d5bbf1 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 28 Aug 2024 19:31:46 +0200 Subject: [PATCH 0186/1768] Fix adapter, Phuture outdated (7d) (#11446) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/phuture/index.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/projects/phuture/index.js b/projects/phuture/index.js index 59f633ace7..5fef08de28 100644 --- a/projects/phuture/index.js +++ b/projects/phuture/index.js @@ -71,19 +71,19 @@ const indexTvl = (chain) => async (timestamp, block, chainBlocks) => { const savingsVaultTvl = (chain) => async (api) => { const calls = networks[chain]["savingsVaults"] - const assets = await api.multiCall({ - abi: savingsVaultAbi.asset, calls, - }) - const totalAssets = await api.multiCall({ - abi: savingsVaultAbi.totalAssets, calls, - }) - const balances = {} + const [assets, totalAssets] = await Promise.all([ + api.multiCall({ abi: savingsVaultAbi.asset, calls }), + api.multiCall({ abi: savingsVaultAbi.totalAssets, calls, permitFailure: true }) + ]) - totalAssets.forEach((bal, i) => { - const token = assets[i] - if (!bal && calls[i].toLowerCase() === '0x6bad6a9bcfda3fd60da6834ace5f93b8cfed9598') return; - sdk.util.sumSingleBalance(balances, token, bal, chain) + const balances = {}; + calls.forEach((call, i) => { + const asset = assets[i] + const bal = totalAssets[i] + if(!bal) return; + sdk.util.sumSingleBalance(balances, asset, bal, chain) }) + return balances }; From 427f390e7d0295be04615cab58dccaec2534b685 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 28 Aug 2024 19:32:12 +0200 Subject: [PATCH 0187/1768] fix adapter: Toros outdated (9d) (#11447) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/toros/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/toros/index.js b/projects/toros/index.js index b8bbb5a362..2b41830817 100644 --- a/projects/toros/index.js +++ b/projects/toros/index.js @@ -11,11 +11,14 @@ async function tvl(api) { params: [torosMultisigManager], }); - const poolSummaries = await api.multiCall({ + const poolSummariesRes = await api.multiCall({ abi: TOROS_POOL_ABI, calls: pools, + permitFailure: true }); + const poolSummaries = poolSummariesRes.filter(i => i && i.totalFundValue !== null && i.totalFundValue !== undefined); + const totalValue = poolSummaries.reduce( (acc, i) => acc + +i.totalFundValue, 0 From 58377a7c1405b6393924e7b89d4c0058fdde5a0f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 28 Aug 2024 23:11:34 +0200 Subject: [PATCH 0188/1768] update apexdefi --- projects/apexdefi/index.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/projects/apexdefi/index.js b/projects/apexdefi/index.js index f54d741c45..4a0e49dc5b 100644 --- a/projects/apexdefi/index.js +++ b/projects/apexdefi/index.js @@ -2,8 +2,8 @@ const { staking } = require('../helper/staking') const ADDRESSES = require('../helper/coreAssets.json'); const config = { - avax: { factory: "0x3D193de151F8e4e3cE1C4CB2977F806663106A87", }, - base: { factory: "0x4ccf7aa5736c5e8b6da5234d1014b5019f50cb56", }, + avax: { factory: "0x3D193de151F8e4e3cE1C4CB2977F806663106A87", wrapperFactory: '0x39aB4aabAd7656f94E32ebD90547C3c4a183f4B4' }, + base: { factory: "0x4ccf7aa5736c5e8b6da5234d1014b5019f50cb56", wrapperFactory: '0xc9fbf1e865eeababe92d47ddb11d580f37ce4e00' }, ethereum: { factory: "0x820c889D5749847217599B43ab86FcC91781019f", }, } @@ -15,11 +15,20 @@ async function _staking(api) { } module.exports.methodology = "The Apex DeFi factory contract address is used to obtain the balances held in each token contract as liquidity and the staking contract is used to get the staked APEX balance."; +module.exports.misrepresentedTokens = true Object.keys(config).forEach(chain => { - const { factory, } = config[chain] + const { factory,wrapperFactory, } = config[chain] module.exports[chain] = { tvl: async (api) => { + // count the value of erc20 wrapped and deposited in the pools + if (wrapperFactory) { + const wrapperPools = await api.fetchList({ lengthAbi: 'allWrappersLength', itemAbi: 'allWrappers', target: wrapperFactory }) + const erc314Tokens = await api.multiCall({ abi: 'address:wrappedToken', calls: wrapperPools}) + // this is a hack, summing value of gas tokens in the contract and assuming it matches the value of wrapped tokens in the pools + await api.sumTokens({ owners:erc314Tokens, tokens: [ADDRESSES.null] }) + } + const tokens = await api.call({ abi: 'address[]:getAllTokens', target: factory }) return api.sumTokens({ owners: tokens, tokens: [ADDRESSES.null] }) } From 64b42706f4cd1487bde1b890dfe46983d0b1106d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 29 Aug 2024 00:14:15 +0200 Subject: [PATCH 0189/1768] update apexdefi --- projects/apexdefi/index.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/projects/apexdefi/index.js b/projects/apexdefi/index.js index 4a0e49dc5b..f55ec47840 100644 --- a/projects/apexdefi/index.js +++ b/projects/apexdefi/index.js @@ -15,18 +15,16 @@ async function _staking(api) { } module.exports.methodology = "The Apex DeFi factory contract address is used to obtain the balances held in each token contract as liquidity and the staking contract is used to get the staked APEX balance."; -module.exports.misrepresentedTokens = true Object.keys(config).forEach(chain => { - const { factory,wrapperFactory, } = config[chain] + const { factory, wrapperFactory, } = config[chain] module.exports[chain] = { tvl: async (api) => { // count the value of erc20 wrapped and deposited in the pools if (wrapperFactory) { - const wrapperPools = await api.fetchList({ lengthAbi: 'allWrappersLength', itemAbi: 'allWrappers', target: wrapperFactory }) - const erc314Tokens = await api.multiCall({ abi: 'address:wrappedToken', calls: wrapperPools}) - // this is a hack, summing value of gas tokens in the contract and assuming it matches the value of wrapped tokens in the pools - await api.sumTokens({ owners:erc314Tokens, tokens: [ADDRESSES.null] }) + const wrapperPools = await api.fetchList({ lengthAbi: 'allWrappersLength', itemAbi: 'allWrappers', target: wrapperFactory }) + const tokens = await api.multiCall({ abi: 'address:originalToken', calls: wrapperPools }) + await api.sumTokens({ tokensAndOwners2: [tokens, wrapperPools]}) } const tokens = await api.call({ abi: 'address[]:getAllTokens', target: factory }) From 2ae399eb4ea254bc388f920635ea8a0bd053b879 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:04:05 +0200 Subject: [PATCH 0190/1768] mark meow as dead #11463 --- projects/MeowProtocol/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/MeowProtocol/index.js b/projects/MeowProtocol/index.js index 73cb330368..2a1fd28619 100644 --- a/projects/MeowProtocol/index.js +++ b/projects/MeowProtocol/index.js @@ -19,4 +19,7 @@ Object.keys(config).forEach(chain => { return api.getBalances() } } -}) \ No newline at end of file +}) + + + module.exports.deadFrom = '2024-05-09' \ No newline at end of file From 113a2d6c1fff45bedc71d3051baa21465b1bcc27 Mon Sep 17 00:00:00 2001 From: yepp4you Date: Thu, 29 Aug 2024 13:10:34 +0400 Subject: [PATCH 0191/1768] add new TVL address to neopin-staking (#11462) --- projects/neopin-staking/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/neopin-staking/index.js b/projects/neopin-staking/index.js index 05ca376686..a2f9b78e1d 100644 --- a/projects/neopin-staking/index.js +++ b/projects/neopin-staking/index.js @@ -11,6 +11,7 @@ module.exports = { "0xf9d92BAd7b1410dfFB0a204B7aa418C9fd5A898F", "0xf20816C9bdcb25da3ba79b206e9b7107ae02ae10", "0x489d6d679F1CA4cFE6976C55B54427D1AaDb8057", + "0x184E039D35cce96511E32c1aF85907664fb0e646" ], tokens: [nullAddress], }), From 0e9f1bec977cbc653373accf0189382f91bf8082 Mon Sep 17 00:00:00 2001 From: 0xRusty <84294992+CryptoTrades20@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:10:54 +1000 Subject: [PATCH 0192/1768] Add polygon_zkevm TVL to Clipper (#11459) --- projects/clipper/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/clipper/index.js b/projects/clipper/index.js index dff254e4ab..1d5ea4ab63 100644 --- a/projects/clipper/index.js +++ b/projects/clipper/index.js @@ -14,6 +14,6 @@ module.exports = { methodology: `Counts the tokens in pool address in different chains` }; -['ethereum', 'polygon', 'moonbeam', 'arbitrum', 'optimism', 'mantle', 'base'].forEach(chain => { +['ethereum', 'polygon', 'moonbeam', 'arbitrum', 'optimism', 'mantle', 'base', 'polygon_zkevm'].forEach(chain => { module.exports[chain] = { tvl } }) From cdc97b184fdfec441f1679bdc15bf31bea0fcd80 Mon Sep 17 00:00:00 2001 From: IguanaDEX Date: Thu, 29 Aug 2024 10:20:29 +0100 Subject: [PATCH 0193/1768] IguanaDEX & IguanaDEX v2 (#11454) Co-authored-by: styliann-eth Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/uniswapV3.js | 6 ++++-- projects/iguana-v2/index.js | 4 ++++ projects/iguana-v3/index.js | 4 ++++ projects/umamifinance/abi.json | 3 --- projects/wagmi-com/index.js | 2 +- 5 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 projects/iguana-v2/index.js create mode 100644 projects/iguana-v3/index.js delete mode 100644 projects/umamifinance/abi.json diff --git a/projects/helper/uniswapV3.js b/projects/helper/uniswapV3.js index 726e43b289..64f03f3199 100644 --- a/projects/helper/uniswapV3.js +++ b/projects/helper/uniswapV3.js @@ -44,12 +44,14 @@ function uniV3Export(config) { return exports } -function uniV3GraphExport({ blacklistedTokens = [], graphURL, name, minTVLUSD = 10,}) { +function uniV3GraphExport({ blacklistedTokens = [], graphURL, name, minTVLUSD = 0,}) { return async (api) => { const size = 1000 // let lastId = '' // let pools + const minTvlFilter = minTVLUSD ? `totalValueLockedUSD_gt: ${minTVLUSD}` : '' + const graphQueryPagedWithBlock = ` query poolQuery($lastId: String, $block: Int) { pools(block: { number: $block } first:${size} where: {id_gt: $lastId totalValueLockedUSD_gt: ${minTVLUSD}}) { @@ -61,7 +63,7 @@ function uniV3GraphExport({ blacklistedTokens = [], graphURL, name, minTVLUSD = ` const graphQueryPagedWithoutBlock = ` query poolQuery($lastId: String) { - pools(first:${size} where: {id_gt: $lastId totalValueLockedUSD_gt: ${minTVLUSD}}) { + pools(first:${size} where: {id_gt: $lastId ${minTvlFilter}}) { id token0 { id } token1 { id } diff --git a/projects/iguana-v2/index.js b/projects/iguana-v2/index.js new file mode 100644 index 0000000000..15546e8e6d --- /dev/null +++ b/projects/iguana-v2/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'etlk': '0x3eebf549D2d8839E387B63796327eE2C8f64A0C4' +}) \ No newline at end of file diff --git a/projects/iguana-v3/index.js b/projects/iguana-v3/index.js new file mode 100644 index 0000000000..7c5a9ab7d8 --- /dev/null +++ b/projects/iguana-v3/index.js @@ -0,0 +1,4 @@ +const { uniV3GraphExport } = require("../helper/uniswapV3"); + + +module.exports.etlk = { tvl: uniV3GraphExport({ name: 'iguana-etlk', graphURL: 'https://api.studio.thegraph.com/query/86688/exchange-v3-etherlink/version/latest' }) } \ No newline at end of file diff --git a/projects/umamifinance/abi.json b/projects/umamifinance/abi.json deleted file mode 100644 index dda88359ca..0000000000 --- a/projects/umamifinance/abi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "totalAssets": "uint256:totalAssets" -} \ No newline at end of file diff --git a/projects/wagmi-com/index.js b/projects/wagmi-com/index.js index 7a61881ac4..ab0bfb6f1c 100644 --- a/projects/wagmi-com/index.js +++ b/projects/wagmi-com/index.js @@ -12,7 +12,7 @@ module.exports = uniV3Export({ base: { factory: '0x576A1301B42942537d38FB147895fE83fB418fD4', fromBlock: 14250787, }, }) -module.exports.kava = { tvl: uniV3GraphExport({ name: 'wagmi-kava', graphURL: 'https://kava.graph.wagmi.com/subgraphs/name/v3', minTVLUSD: 0 }) } +module.exports.kava = { tvl: uniV3GraphExport({ name: 'wagmi-kava', graphURL: 'https://kava.graph.wagmi.com/subgraphs/name/v3' }) } const stakingConfig = { metis: { swagmi: '0x5fb3983adc4dcc82a610a91d2e329f6401352558', wagmi: '0xaf20f5f19698f1d19351028cd7103b63d30de7d7', }, From 777101c3034197ab2bc11928156863350313f92f Mon Sep 17 00:00:00 2001 From: bergben Date: Thu, 29 Aug 2024 11:22:41 +0200 Subject: [PATCH 0194/1768] feat(fluid): support weETHs balance deposited to Zircuit (#11465) --- projects/fluid/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/projects/fluid/index.js b/projects/fluid/index.js index 1765f6eadb..6bbdee01b3 100644 --- a/projects/fluid/index.js +++ b/projects/fluid/index.js @@ -18,6 +18,7 @@ const config = { }, weETH: "0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee", zircuit: "0xF047ab4c75cebf0eB9ed34Ae2c186f3611aEAfa6", + weETHs: "0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88", }, arbitrum: { liquidityResolver: (block) => "0x46859d33E662d4bF18eEED88f74C36256E606e44", @@ -48,6 +49,15 @@ async function tvl(api) { params: [config.ethereum.weETH, config.liquidity], }) ); + // add WeETHs deployed to Zircuit + api.add( + config.ethereum.weETHs, + await api.call({ + target: config.ethereum.zircuit, + abi: "function balance(address, address) public view returns (uint256 balance)", + params: [config.ethereum.weETHs, config.liquidity], + }) + ); } return api.sumTokens({ From cae67c51521335c28c72ab7e36cb25ebe1244b64 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:58:00 +0200 Subject: [PATCH 0195/1768] Iziswap gravity (#11466) Co-authored-by: LpcAries <291482574@qq.com> --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 6 ++++++ projects/izumi-iziswap/index.js | 1 + 3 files changed, 8 insertions(+) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 29b631551a..2386ca916c 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -132,6 +132,7 @@ "godwoken", "godwoken_v1", "goerli", + "gravity", "gravitybridge", "grove", "harmony", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ed9204e530..d537852f98 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -75,6 +75,12 @@ const fixBalancesTokens = { '0xDE47A655a5d9904BD3F7e1A536D8323fBD99993A': { coingeckoId: "aura-network", decimals: 18 }, '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd': { coingeckoId: "tether", decimals: 6 }, }, + gravity: { + [ADDRESSES.null]: { coingeckoId: "g-token", decimals: 18 }, + '0xbb859e225ac8fb6be1c7e38d87b767e95fef0ebd': { coingeckoId: "g-token", decimals: 18 }, + '0xf6f832466Cd6C21967E0D954109403f36Bc8ceaA': { coingeckoId: "ethereum", decimals: 18 }, + '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': { coingeckoId: "usd-coin", decimals: 6 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/izumi-iziswap/index.js b/projects/izumi-iziswap/index.js index 256c2d5b2a..4e30464f95 100644 --- a/projects/izumi-iziswap/index.js +++ b/projects/izumi-iziswap/index.js @@ -35,6 +35,7 @@ const poolHelpers = { 'bob': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], 'taiko': ['0x33531bDBFE34fa6Fd5963D0423f7699775AacaaF'], 'core': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], + 'gravity': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], } // iziswap liquidityManager contracts const blacklistedTokens = [ From 186bda5fe018edcf05c6ac366a54ffbe861df99e Mon Sep 17 00:00:00 2001 From: Anton Klyr <90849526+antonklyr@users.noreply.github.com> Date: Thu, 29 Aug 2024 12:13:21 +0200 Subject: [PATCH 0196/1768] Add Z Protocol (#11456) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/zprotocol-dex/index.js | 4 ++++ projects/zprotocol-masterchef/index.js | 28 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 projects/zprotocol-dex/index.js create mode 100644 projects/zprotocol-masterchef/index.js diff --git a/projects/zprotocol-dex/index.js b/projects/zprotocol-dex/index.js new file mode 100644 index 0000000000..6f6cd62b5d --- /dev/null +++ b/projects/zprotocol-dex/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'scroll': '0xED93e976d43AF67Cc05aa9f6Ab3D2234358F0C81' +}) \ No newline at end of file diff --git a/projects/zprotocol-masterchef/index.js b/projects/zprotocol-masterchef/index.js new file mode 100644 index 0000000000..82c3eae486 --- /dev/null +++ b/projects/zprotocol-masterchef/index.js @@ -0,0 +1,28 @@ +// const {zProtocolScrollFarmingExports} = require("./scroll"); +const { staking, } = require('../helper/unknownTokens'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const FACTORY = "0xED93e976d43AF67Cc05aa9f6Ab3D2234358F0C81"; +const FARM_MASTER = "0x7a757614fEFA05f40456016Af74262Fe53546DBa"; +const ZP_TOKEN = "0x2147a89fb4608752807216D5070471c09A0DcE32"; +// const export1 = zProtocolScrollFarmingExports(FARM_MASTER, FACTORY, 'scroll', ZP_TOKEN); +const farmAbi = { + poolInfo: "function poolInfo(uint256) view returns (address token, uint256 catId, uint256 allocPoint, uint256 lastRewardTime, uint256 accZPPerShare, uint256 depositFeeBP, uint256 harvestInterval)", +} + +module.exports = { + methodology: "count value of staked tokens except of z-dex LP tokens", + misrepresentedTokens: true, + scroll: { + tvl, + staking: staking({ tokens: [ZP_TOKEN], owner: FARM_MASTER, useDefaultCoreAssets: true, lps: ['0xb74806780Ac59D0d7567bE66Ff23511400bD9cf8']}) + } +} + +async function tvl(api) { + let blacklistedTokens = await api.fetchList({ lengthAbi: 'allPairsLength', itemAbi: 'allPairs', target: FACTORY }) + blacklistedTokens.push(ZP_TOKEN) + const poolInfo = await api.fetchList({ lengthAbi: 'poolsLength', itemAbi: farmAbi.poolInfo, target: FARM_MASTER }) + await sumTokens2({ api, owner: FARM_MASTER, tokens: poolInfo.map(pool => pool.token), resolveLP: true, blacklistedTokens, }) + api.removeTokenBalance(ZP_TOKEN) +} \ No newline at end of file From 686982a1818a78620a1d96cc3b78438740491cac Mon Sep 17 00:00:00 2001 From: Dry cake <174254844+dry-cake@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:43:48 +0200 Subject: [PATCH 0197/1768] Fix historical TVL data calc (#11467) --- projects/aqua-network/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/aqua-network/index.js b/projects/aqua-network/index.js index edef3e25bf..86fb368bc1 100644 --- a/projects/aqua-network/index.js +++ b/projects/aqua-network/index.js @@ -9,7 +9,7 @@ async function getData() { const data = await _data const res = {} data.forEach((item) => { - res[item.date] = item.tvl / 1e8 + res[item.date] = item.tvl / 1e7 }) return res } From 03e119abad077d4e8b2661095f042e70f35d0375 Mon Sep 17 00:00:00 2001 From: David Cumps Date: Thu, 29 Aug 2024 15:00:48 +0200 Subject: [PATCH 0198/1768] Chainflip tvl (#11464) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/chainflip/index.js | 56 ++++++++++++++++++++++++++++----- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 10 ++++++ 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/projects/chainflip/index.js b/projects/chainflip/index.js index ba8ccc93fe..2d9c8d3ae2 100644 --- a/projects/chainflip/index.js +++ b/projects/chainflip/index.js @@ -1,13 +1,55 @@ -const { staking } = require('../helper/staking'); +const { staking } = require('../helper/staking') +const { graphQuery } = require('../helper/http'); +const { sumTokens2 } = require('../helper/unwrapLPs'); const STATE_CHAIN_GATEWAY_CONTRACT = '0x826180541412D574cf1336d22c0C0a287822678A'; const FLIP_TOKEN = '0x6995ab7c4d7f4b03f467cf4c8e920427d9621dbd' -module.exports = { - methodology: 'counts the number of FLIP tokens in the Chainflip State Chain Gateway Contract.', - start: 1700740800, // FLIP went live on 2023-11-23 12:00 UTC - ethereum: { - tvl: () => 0, - staking: staking(FLIP_TOKEN, STATE_CHAIN_GATEWAY_CONTRACT), +const poolsDataQuery = `{ + allPools { + nodes { + baseAsset + baseLiquidityAmount + quoteAsset + quoteLiquidityAmount + } + } + allBoostPools { + nodes { + asset + chain + feeTierPips + availableAmount + unavailableAmount + } } +}` + +const endpoint = 'https://cache-service.chainflip.io/graphql' + +async function tvl(api) { + // Call GraphQL and get tokens, add each to balance + const { allPools: { nodes }, allBoostPools: { nodes: bNodes } } = await graphQuery(endpoint, poolsDataQuery); + + nodes.forEach(i => { + api.add(i.baseAsset, i.baseLiquidityAmount) + api.add(i.quoteAsset, i.quoteLiquidityAmount) + }) + bNodes.forEach(i => { + api.add(i.asset, i.availableAmount) + api.add(i.asset, i.unavailableAmount) + }) + return sumTokens2({ api }) +} + +module.exports = { + methodology: 'The number of FLIP tokens in the Chainflip State Chain Gateway Contract, as well as the total deployed liquidity.', + start: 1700740800, // FLIP went live on 2023-11-23 12:00 UTC + ethereum: { + tvl: () => ({}), + staking: staking(FLIP_TOKEN, STATE_CHAIN_GATEWAY_CONTRACT), + }, + chainflip: { + tvl, + } }; diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 2386ca916c..8a5cea2450 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -56,6 +56,7 @@ "cardano", "celestia", "celo", + "chainflip", "chainx", "chihuahua", "chz", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index d537852f98..0129178bc6 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,6 +40,16 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + chainflip: { + Dot: { coingeckoId:'polkadot', decimals: 10 }, + Usdc: { coingeckoId:'usd-coin', decimals: 6 }, + Flip: { coingeckoId:'chainflip', decimals: 18 }, + Btc: { coingeckoId:'bitcoin', decimals: 8 }, + Eth: { coingeckoId:'ethereum', decimals: 18 }, + Usdt: { coingeckoId:'tether', decimals: 6 }, + ArbEth: { coingeckoId:'ethereum', decimals: 18 }, + ArbUsdc: { coingeckoId:'usd-coin', decimals: 6 }, + }, islm: { '0x0ce35b0d42608ca54eb7bcc8044f7087c18e7717': { coingeckoId: 'usd-coin', decimals: 6 }, }, From 663834ca75d5318df107ef3f339bf8ed059a796f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:40:49 +0200 Subject: [PATCH 0199/1768] track idex-v4 --- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 3 +++ projects/idex-v4/index.js | 7 +++++++ 4 files changed, 12 insertions(+) create mode 100644 projects/idex-v4/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 8a5cea2450..1f97df9fae 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -148,6 +148,7 @@ "hyperliquid", "icon", "icp", + "idex", "imx", "inevm", "injective", diff --git a/projects/helper/env.js b/projects/helper/env.js index f6f43d0e50..e60244b5c2 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -12,6 +12,7 @@ const DEFAULTS = { MULTIVERSX_RPC: 'https://api.multiversx.com', ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", + IDEX_RPC: "https://xchain-rpc.idex.io", CRONOS_ZKEVM_RPC_MULTICALL: '0x9b122BF7a96F24EFB7A2b5765c635909dB3458F7', NEOX_RPC_MULTICALL: '0xD6010D102015fEa9cB3a9AbFBB51994c0Fd6E672', } diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 0129178bc6..06e9abc3c5 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -91,6 +91,9 @@ const fixBalancesTokens = { '0xf6f832466Cd6C21967E0D954109403f36Bc8ceaA': { coingeckoId: "ethereum", decimals: 18 }, '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': { coingeckoId: "usd-coin", decimals: 6 }, }, + idex: { + '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': { coingeckoId: "usd-coin", decimals: 6 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/idex-v4/index.js b/projects/idex-v4/index.js new file mode 100644 index 0000000000..39f5f6ca45 --- /dev/null +++ b/projects/idex-v4/index.js @@ -0,0 +1,7 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + idex: { + tvl: sumTokensExport({ owner: '0xF0b08bd86f8479a96B78CfACeb619cfFeCc5FBb5', tokens: ['0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6']}), + } +} \ No newline at end of file From dff9771f00360912abb7399933d92b50297c7aae Mon Sep 17 00:00:00 2001 From: Endeavour-1 <50341461+Endeavour-Innovations-Inc@users.noreply.github.com> Date: Fri, 30 Aug 2024 01:29:49 -0400 Subject: [PATCH 0200/1768] Added adapter for BoomSwap (#11472) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/boomswap/index.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 projects/boomswap/index.js diff --git a/projects/boomswap/index.js b/projects/boomswap/index.js new file mode 100644 index 0000000000..66b711360d --- /dev/null +++ b/projects/boomswap/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'bsc': '0xB438dee6a8875AFAbB8a82e86ef56C4DEEe5D1b5' +}) \ No newline at end of file From 7a0cf09883755199f4741428c2bf0963bee531f0 Mon Sep 17 00:00:00 2001 From: pavelGotbit <156020554+pavelGotbit@users.noreply.github.com> Date: Fri, 30 Aug 2024 08:30:23 +0300 Subject: [PATCH 0201/1768] added univ2 adater for bahamut dex (#11471) --- projects/bahamut-dex/index.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 projects/bahamut-dex/index.js diff --git a/projects/bahamut-dex/index.js b/projects/bahamut-dex/index.js new file mode 100644 index 0000000000..7d68b7cf2f --- /dev/null +++ b/projects/bahamut-dex/index.js @@ -0,0 +1,3 @@ +const { uniTvlExport } = require('../helper/unknownTokens'); + +module.exports = uniTvlExport('ftn', '0x63D19A275fd468aA5A29FAc7B14697Ca0b5B3315') From fd11045bbe4de4d266f6ec8c64ebc544fdbd206e Mon Sep 17 00:00:00 2001 From: Mehmet Date: Fri, 30 Aug 2024 07:39:10 +0200 Subject: [PATCH 0202/1768] Add AsteriaFinance (#11469) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/asteria-finance/asteriaFinance.js | 26 ++++++++++++++++++++++ projects/asteria-finance/index.js | 5 +++++ 2 files changed, 31 insertions(+) create mode 100644 projects/asteria-finance/asteriaFinance.js create mode 100644 projects/asteria-finance/index.js diff --git a/projects/asteria-finance/asteriaFinance.js b/projects/asteria-finance/asteriaFinance.js new file mode 100644 index 0000000000..ef1389d254 --- /dev/null +++ b/projects/asteria-finance/asteriaFinance.js @@ -0,0 +1,26 @@ +function asteriaFinanceExport(config) { + const exports = { + methodology: 'We count the token balances in in different liquidity book contracts', + } + + Object.keys(config).forEach(chain => { + let { factory } = config[chain] + + exports[chain] = { + tvl: async (api) => { + const pools = await api.fetchList({ target: factory, itemAbi: 'getLBPairAtIndex', lengthAbi: 'getNumberOfLBPairs', }) + const tokenA = await api.multiCall({ abi: 'address:getTokenX', calls: pools, }) + const tokenB = await api.multiCall({ abi: 'address:getTokenY', calls: pools, }) + const tokensAndOwners2 = [tokenA.concat(tokenB), pools.concat(pools)] + return api.sumTokens({ tokensAndOwners2 }) + } + } + }) + + return exports +} + + +module.exports = { + asteriaFinanceExport, +} \ No newline at end of file diff --git a/projects/asteria-finance/index.js b/projects/asteria-finance/index.js new file mode 100644 index 0000000000..d582769ab3 --- /dev/null +++ b/projects/asteria-finance/index.js @@ -0,0 +1,5 @@ +const { asteriaFinanceExport } = require('./asteriaFinance') + +module.exports = asteriaFinanceExport({ + scroll: { factory: '0x77C99431b679e21C42464f1714221eAE94C1e3ed' }, +}) \ No newline at end of file From d72bf38cdbb6946e78af613c5a0dd20355c44eb1 Mon Sep 17 00:00:00 2001 From: Abel <72842607+Aliceonly@users.noreply.github.com> Date: Fri, 30 Aug 2024 13:40:02 +0800 Subject: [PATCH 0203/1768] feat: add beeBase tvl (#11468) --- projects/beeBase/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/beeBase/index.js diff --git a/projects/beeBase/index.js b/projects/beeBase/index.js new file mode 100644 index 0000000000..684b86cb84 --- /dev/null +++ b/projects/beeBase/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + base: { + tvl: sumTokensExport({ owners: + [ + "0xFD09F108D1728E6B6eD241ccd254775e322f1ed6", + "0x8a2fFD429d33FBfC6f5A91aa207e48bB095Db7d9" + ], tokens: [ + ADDRESSES.null, + ADDRESSES.base.USDC, + ADDRESSES.base.WETH, + ]}), + } +}; \ No newline at end of file From 34241ef1487f1567b58522eb109d3d08a530305d Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 30 Aug 2024 07:46:27 +0200 Subject: [PATCH 0204/1768] track bonsai treasury #11441 --- projects/treasury/bonsai.js | 54 +++++++++++++++++++++++++++++++ projects/treasury/umamifinance.js | 7 +++- projects/vendor-finance/index.js | 3 +- 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 projects/treasury/bonsai.js diff --git a/projects/treasury/bonsai.js b/projects/treasury/bonsai.js new file mode 100644 index 0000000000..89a86a5df9 --- /dev/null +++ b/projects/treasury/bonsai.js @@ -0,0 +1,54 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const arbitrumAddresses = [ + "0xb137d135Dc8482B633265c21191F50a4bA26145d", // Main treasury + "0x8E52cA5A7a9249431F03d60D79DDA5EAB4930178", // Arbitrum DAO delegate + "0xB0B4bd94D656353a30773Ac883591DDBaBC0c0bA", // Old ARBIs multisig + "0x4e5645bee4eD80C6FEe04DCC15D14A3AC956748A" // Multisig collecting vaults fees +]; +const ethAddresses = "0x9478D820E8d38Ca96610b7FCbE377822C2F60f2c" + +const ownTokens = [ + "0x79EaD7a012D97eD8DeEcE279f9bC39e264d7Eef9", // Bonsai +]; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, // ETH + ADDRESSES.arbitrum.fsGLP, + ADDRESSES.arbitrum.fGLP, + ADDRESSES.arbitrum.USDC, // USDC.e + "0xaf88d065e77c8cc2239327c5edb3a432268e5831", // USDC + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.GMX, + ADDRESSES.arbitrum.ARB, + ADDRESSES.arbitrum.WBTC, + "0xe4dddfe67e7164b0fe14e218d80dc4c08edc01cb", // KNC + "0xf97f4df75117a78c1a5a0dbb814af92458539fb4", // LINK + "0x56659245931cb6920e39c189d2a0e7dd0da2d57b", // IBEX + "0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0", // UNI + "0x55ff62567f09906a85183b866df84bf599a4bf70", // KROM + "0x3d9907f9a368ad0a51be60f7da3b97cf940982d8", // GRAIL + "0x3CAaE25Ee616f2C8E13C74dA0813402eae3F496b", // xGRAIL + "0x3e6648c5a70a150a88bce65f4ad4d506fe15d2af", // spell + "0x10010078a54396f62c96df8532dc2b4847d47ed3", // hnd + "0x32eb7902d4134bf98a28b963d26de779af92a212", // rpdx + "0xd4d42f0b6def4ce0383636770ef773390d85c61a", // sushi + "0x2cab3abfc1670d1a452df502e216a66883cdf079", // l2dao + "0x539bde0d7dbd336b79148aa742883198bbf60342", // magic + "0x6694340fc020c5e6b96567843da2df01b2ce1eb6", // stg + ], + owners: arbitrumAddresses, + ownTokens, + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, // usdc + ], + owners: [ethAddresses] + }, +}); diff --git a/projects/treasury/umamifinance.js b/projects/treasury/umamifinance.js index 31ad7cfa38..e42dd9e6ef 100644 --- a/projects/treasury/umamifinance.js +++ b/projects/treasury/umamifinance.js @@ -44,6 +44,11 @@ module.exports = treasuryExports({ ADDRESSES.ethereum.USDC,//usdc ], owners: [ethowners] - }, }); + +module.exports.deadFrom = '2024-08-30' +module.exports.ethereum.tvl = () => ({}) +module.exports.ethereum.ownTokens = () => ({}) +module.exports.arbitrum.tvl = () => ({}) +module.exports.arbitrum.ownTokens = () => ({}) diff --git a/projects/vendor-finance/index.js b/projects/vendor-finance/index.js index f33e6c54eb..6a649225e6 100644 --- a/projects/vendor-finance/index.js +++ b/projects/vendor-finance/index.js @@ -14,7 +14,7 @@ async function tvl(api) { const balances = {}; const tokensAndOwners = [] - for (const { args: { _poolAddress, _colToken, _lendToken, _expiry }} of logs) { + for (const { args: { _poolAddress, _colToken, _lendToken, _expiry } } of logs) { if (_expiry < api.timestamp) continue; tokensAndOwners.push([_colToken, _poolAddress]) tokensAndOwners.push([_lendToken, _poolAddress]) @@ -31,6 +31,7 @@ const config = { module.exports = { methodology: 'The sum of the balance of all listed collateral and lend tokens in all deployed pools.', start: 20274088, + deadFrom: '2024-08-30' }; Object.keys(config).forEach(chain => { From 648968a7c340d12fa54bc71428f0148fb1b26711 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 30 Aug 2024 08:09:42 +0200 Subject: [PATCH 0205/1768] track lucidly #11470 --- projects/lucidly/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/lucidly/index.js diff --git a/projects/lucidly/index.js b/projects/lucidly/index.js new file mode 100644 index 0000000000..1f8326f6de --- /dev/null +++ b/projects/lucidly/index.js @@ -0,0 +1,15 @@ +async function tvl(api) { + const pools = [ + '0x8dBE744F6558F36d34574a0a6eCA5A8dAa827235', + ] + const tokens = await api.fetchList({ lengthAbi: 'numTokens', itemAbi: 'tokens', calls:pools, groupedByInput: true, }) + console.log(tokens) + const ownerTokens = pools.map((v, i) => [tokens[i], v]) + return api.sumTokens({ ownerTokens }) +} + + +module.exports = { + start: 1693971707, + ethereum: { tvl } +}; From f7230e25382722b3f1ff47c3d93257ca712641c1 Mon Sep 17 00:00:00 2001 From: Dmitry Mpower Date: Sat, 31 Aug 2024 09:52:49 +0300 Subject: [PATCH 0206/1768] feat: update tvl and borrow (#11473) --- projects/daolama/borrowed.js | 17 ++++++++++------- projects/daolama/constants.js | 2 -- projects/daolama/tvl.js | 8 ++++---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/projects/daolama/borrowed.js b/projects/daolama/borrowed.js index cad75fd016..f18b21a407 100644 --- a/projects/daolama/borrowed.js +++ b/projects/daolama/borrowed.js @@ -1,14 +1,17 @@ -const sdk = require("@defillama/sdk"); -const { transformBalances } = require("../helper/portedTokens"); -const { get } = require('../helper/http'); +const sdk = require('@defillama/sdk'); +const { transformBalances } = require('../helper/portedTokens'); const ADDRESSES = require('../helper/coreAssets.json'); -const { BASE_API_URL } = require("./constants"); -const nullAddress = ADDRESSES.null; +const { call } = require('../helper/chain/ton'); +const { POOL_ADDRESS } = require('./constants'); async function borrowed(api) { const balances = {}; - const result = await get(`${BASE_API_URL}/api/v1/analytics/borrowed`); - sdk.util.sumSingleBalance(balances, nullAddress, result.value, api.chain); + const result = await call({ + target: POOL_ADDRESS, + abi: 'get_pool_data', + }); + const borrowedTon = result[2]; + sdk.util.sumSingleBalance(balances, ADDRESSES.ton.TON, borrowedTon, api.chain); return transformBalances(api.chain, balances); } diff --git a/projects/daolama/constants.js b/projects/daolama/constants.js index 476851f0dd..57a78813b3 100644 --- a/projects/daolama/constants.js +++ b/projects/daolama/constants.js @@ -1,5 +1,3 @@ module.exports = { - BASE_API_URL: 'https://api.daolama.co', - POOL_WALLET_ADDRESS: 'EQAwsDboFl_iGuaflNn5959HOamenkvQEQDwakO55CY2SGB8', POOL_ADDRESS: 'EQCkeTvOSTBwBtP06X2BX7THj_dlX67PhgYRGuKfjWtB9FVb' } diff --git a/projects/daolama/tvl.js b/projects/daolama/tvl.js index 01de78e2cb..ded130ec97 100644 --- a/projects/daolama/tvl.js +++ b/projects/daolama/tvl.js @@ -1,10 +1,10 @@ -const ADDRESSES = require("../helper/coreAssets.json"); -const { POOL_ADDRESS, POOL_WALLET_ADDRESS } = require("./constants"); -const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require('../helper/coreAssets.json'); +const { POOL_ADDRESS } = require('./constants'); +const { sumTokensExport } = require('../helper/chain/ton'); module.exports = { tvl: sumTokensExport({ - owners: [POOL_ADDRESS, POOL_WALLET_ADDRESS], + owners: [POOL_ADDRESS], tokens: [ADDRESSES.ton.TON, ADDRESSES.ton.USDT] }), } From 84c3147931ff1d8828181126d87e047682ace63d Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Sat, 31 Aug 2024 10:54:53 +0400 Subject: [PATCH 0207/1768] Adding settleton yield aggregator (#11475) --- projects/settleton/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/settleton/index.js diff --git a/projects/settleton/index.js b/projects/settleton/index.js new file mode 100644 index 0000000000..2411e2d8f4 --- /dev/null +++ b/projects/settleton/index.js @@ -0,0 +1,25 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { fetchURL } = require('../helper/utils'); + +async function fetchTvl(api) { + const response = await fetchURL("https://settleton.finance/apiV2/vaults") + for (const pool of response.data) { + api.add(ADDRESSES.ton.TON, pool.tvl * 1e9) + } +} + + +module.exports = { + methodology: ` + The methodology for calculating the total TVL is based on analyzing liquidity pool data and LP token balances. +For each Vaults we iterate through all LP tokens and calculate their price based on following onchain data: (reserve0, reserve1, total_lp_supply) +For each pool, a calculation is performed to determine the equivalent amount of TON based on the current pool reserves and the share of LP tokens held. +This calculation takes into account the reserve ratios and adjusts the token value to TON. +For multi-indices, the TVL of all pools is summed up, while for single indices, the value of the sole pool is used. The final TVL is represented in TON, and the index price is calculated by dividing the TVL by the total supply of the index. + `.trim(), + timetravel: false, + doublecounted: true, + ton: { + tvl: fetchTvl + } +} From 9330e0ec57ac77986b0f9f00ad7155a1bdc30da4 Mon Sep 17 00:00:00 2001 From: Mihailo Maksa Date: Sat, 31 Aug 2024 08:55:30 +0200 Subject: [PATCH 0208/1768] add Intuition TVL code (#11477) --- projects/intuition/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/intuition/index.js diff --git a/projects/intuition/index.js b/projects/intuition/index.js new file mode 100644 index 0000000000..e694ef0f70 --- /dev/null +++ b/projects/intuition/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const ETHMULTIVAULT = "0x430BbF52503Bd4801E51182f4cB9f8F534225DE5"; // Intuition's EthMultiVault contract address on Base mainnet + +async function tvl(api) { + await api.sumTokens({ owners: [ETHMULTIVAULT], tokens: [ADDRESSES.null] }) + const bal = api.getBalances() + return bal +} + +module.exports = { + methodology: "The TVL is calculated based on the current ETH balance held within Intuition's EthMultiVault contract on the Base mainnet.", + base: { + tvl + } +} From 29033156f7746983935321bd7ef2f54ea23d83a2 Mon Sep 17 00:00:00 2001 From: Linkie Link Date: Sat, 31 Aug 2024 08:58:36 +0200 Subject: [PATCH 0209/1768] Add Mars Protocol v2 TVL and Launch Date (#11480) --- projects/mars/index.js | 90 ++---------------------------------------- 1 file changed, 4 insertions(+), 86 deletions(-) diff --git a/projects/mars/index.js b/projects/mars/index.js index 166827d8bb..87ebb954c3 100644 --- a/projects/mars/index.js +++ b/projects/mars/index.js @@ -12,6 +12,8 @@ const addresses = { }, neutron: { redBank: 'neutron1n97wnm7q6d2hrcna3rqlnyqw2we6k0l8uqvmyqq6gsml92epdu7quugyph', + creditManager: 'neutron1qdzn3l4kn7gsjna2tfpg3g3mwd6kunx4p50lfya59k02846xas6qslgs3r', + params: 'neutron1x4rgd7ry23v2n49y7xdzje0743c5tgrnqrqsvwyya2h6m48tz4jqqex06x' } } @@ -22,100 +24,15 @@ async function osmosisTVL() { let balances = {}; await addRedBankTvl(balances, 'osmosis'); await addCreditManagerTvl(balances, 'osmosis'); - await osmosisSumVaultsTVL(balances); return balances; } -async function osmosisSumVaultsTVL(balances) { - let coins = []; - let vaultPagesRemaining = true; - let startAfter = null; - const pageLimit = 10; - const osmosisDenomTransform = await getChainTransform('osmosis'); - - while (vaultPagesRemaining) { - const roverVaultConfigs = await queryContract({ - contract: addresses.osmosis.params, - chain: 'osmosis', - data: { 'all_vault_configs': { limit: pageLimit, 'start_after': startAfter } } - }); - - if(roverVaultConfigs.length === pageLimit) { - startAfter = roverVaultConfigs[roverVaultConfigs.length - 1].vault; - vaultPagesRemaining = true - } else { - vaultPagesRemaining = false; - } - - await osmosisAddCoinsForVaultsInfoPage(coins, roverVaultConfigs); - } - - coins.forEach(coin => { - sdk.util.sumSingleBalance(balances, osmosisDenomTransform(coin.denom), coin.amount); - }) -} - -async function osmosisAddCoinsForVaultsInfoPage(coins, roverVaultConfigsPage) { - let vaultsMetadata = roverVaultConfigsPage.map(rvi => ({ fieldsVaultInfo: rvi })); - - // query the vault info for the vault contract itself to get the vault's - // base token - await Promise.all(vaultsMetadata.map(async vm => { - let vaultInfo = await queryContract({ - contract: vm.fieldsVaultInfo.addr, - chain: 'osmosis', - data: { 'info': {} } - }); - vm.vaultInfo = vaultInfo; - })); - - // get total vault shares owned by fields for each vault - await Promise.all(vaultsMetadata.map(async vm => { - let vaultShares = await cosmosDenomBalanceStr( - 'osmosis', - vm.vaultInfo.vault_token, - addresses.osmosis.creditManager - ); - vm.vaultShares = vaultShares; - })); - - // convert vault shares to vault base asset - await Promise.all(vaultsMetadata.map( async vm => { - let query = { - contract: vm.fieldsVaultInfo.addr, - chain: 'osmosis', - data: { 'convert_to_assets': { amount: vm.vaultShares } } - }; - let amount = await queryContract(query); - vm.baseTokenAmount = amount; - })); - - // Add coins to then be added to balances - // * For gamm lp tokens compute the share of underlying assets and add those - // * For other assets, add as is - await Promise.all(vaultsMetadata.map( async vm => { - const baseToken = vm.vaultInfo['base_token']; - if (baseToken.startsWith('gamm/pool/')) { - let poolId = baseToken.split('/')[2]; - const url = `osmosis/gamm/v1beta1/pools/${poolId}`; - const query = await cosmosLCDQuery(url, 'osmosis'); - const pool = query.pool; - pool['pool_assets'].forEach(asset => { - const denom = asset.token.denom; - const amount = asset.token.amount * vm.baseTokenAmount / pool['total_shares'].amount; - coins.push({denom, amount}); - }); - } else { - coins.push({denom: baseToken, amount: vm.baseTokenAmount}); - } - })); -} - // NEUTRON async function neutronTVL() { let balances = {}; await addRedBankTvl(balances, 'neutron'); + await addCreditManagerTvl(balances, 'neutron'); return balances; } @@ -163,5 +80,6 @@ module.exports = { [1675774800, 'Relaunch on Osmosis'], [1690945200, 'Red Bank launch on Neutron'], [1696906800, 'Mars V2 launch on Osmosis'], + [1724166000, 'Mars v2 Launch on Neutron'] ] }; From 422203e00609881d8b310a368f170bcf2ff50930 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 31 Aug 2024 09:11:49 +0200 Subject: [PATCH 0210/1768] minor refactor --- projects/intuition/index.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/projects/intuition/index.js b/projects/intuition/index.js index e694ef0f70..4c6e84d212 100644 --- a/projects/intuition/index.js +++ b/projects/intuition/index.js @@ -1,16 +1,10 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs'); const ETHMULTIVAULT = "0x430BbF52503Bd4801E51182f4cB9f8F534225DE5"; // Intuition's EthMultiVault contract address on Base mainnet -async function tvl(api) { - await api.sumTokens({ owners: [ETHMULTIVAULT], tokens: [ADDRESSES.null] }) - const bal = api.getBalances() - return bal -} - module.exports = { - methodology: "The TVL is calculated based on the current ETH balance held within Intuition's EthMultiVault contract on the Base mainnet.", - base: { - tvl - } + methodology: "The TVL is calculated based on the current ETH balance held within Intuition's EthMultiVault contract on the Base mainnet.", + base: { + tvl: sumTokensExport({ owner: ETHMULTIVAULT, tokens: [nullAddress] }), + } } From dfeaf5f3837e93ea19d97053d1f71f523226f0f7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 31 Aug 2024 10:07:31 +0200 Subject: [PATCH 0211/1768] fix vfat --- projects/vfat/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/vfat/index.js b/projects/vfat/index.js index 3f69a48338..3942aecaf8 100644 --- a/projects/vfat/index.js +++ b/projects/vfat/index.js @@ -211,6 +211,7 @@ async function tvlArbitrumLinea(api) { await fetchSickleNftPositions(api, sickles, config[api.chain].NonfungiblePositionManager); await fetchSickleNftPositions(api, sickles, config[api.chain].masterchefV3, true); + api.removeTokenBalance('0xe80772eaf6e2e18b651f160bc9158b2a5cafca65') return sumTokens2({ api, resolveLP: true }); } From 6317d0b58f71c376bde40b0196888b76fc5a1efb Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sat, 31 Aug 2024 16:22:17 +0700 Subject: [PATCH 0212/1768] update linea factory --- projects/dackieswap-v2/index.js | 1 + projects/dackieswap/index.js | 1 + 2 files changed, 2 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 5d17bd3771..d4f3c037f0 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -15,6 +15,7 @@ const config = { inevm: '0x507940c2469e6e3b33032f1d4ff8d123bdde2f5c', mode: '0x757cd583004400ee67e5cc3c7a60c6a62e3f6d30', base: '0x591f122D1df761E616c13d265006fcbf4c6d6551', + linea: '0x9790713770039CeFcf4FAaf076E2846c9B7a4630', } module.exports = { diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index d84e295906..934bc1cec1 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -8,4 +8,5 @@ module.exports = uniV3Export({ inevm: { factory: "0xf79A36F6f440392C63AD61252a64d5d3C43F860D", fromBlock: 291933 }, mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, xlayer: { factory: "0xc6f3966e5d08ced98ac30f8b65beab5882be54c7", fromBlock: 278971 }, + linea: { factory: "0xc6255ec7CDb11C890d02EBfE77825976457B2470", fromBlock: 8488016 }, }); \ No newline at end of file From 0f543443387aa982502ca4590a98def30594febb Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Sat, 31 Aug 2024 17:42:43 +0800 Subject: [PATCH 0213/1768] add projects solvbtc bitcion network (#11474) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solv-protocol-funds/index.js | 169 ++++---------------------- projects/solvbtc/index.js | 136 +++------------------ 2 files changed, 43 insertions(+), 262 deletions(-) diff --git a/projects/solv-protocol-funds/index.js b/projects/solv-protocol-funds/index.js index c086c8a4c7..c3347fc589 100644 --- a/projects/solv-protocol-funds/index.js +++ b/projects/solv-protocol-funds/index.js @@ -30,103 +30,24 @@ async function tvl(api) { await vaultBalance(api, graphData); await otherDeposit(api, address); await ceffuBalance(api, address, graphData); - - return api.getBalances(); } -async function borrowed(api) { - const network = api.chain; - - const graphData = await getGraphData(api.timestamp, network, api); - if (graphData.pools.length > 0) { - const poolLists = graphData.pools; - - let address = (await getConfig('solv-protocol/funds', addressUrl)); - const depositAddress = filterDepositAddress(network, address); - - let fofFundPoolId = []; - if (address[network] && address[network]["fofFund"]) { - fofFundPoolId = address[network]["fofFund"]; - } - - let pools = []; - for (const pool of poolLists) { - if (depositAddress.length == 0 && depositAddress.indexOf(pool.vault) == -1 && fofFundPoolId.indexOf(pool.poolId) == -1) { - pools.push(pool); - } - } - - const poolConcretes = await concrete(pools, api); - const nav = await api.multiCall({ - abi: abi.getSubscribeNav, - calls: pools.map((index) => ({ - target: index.navOracle, - params: [index.poolId, api.timestamp * 1000] - })), - }) - - const poolTotalValues = await api.multiCall({ - abi: abi.slotTotalValue, - calls: pools.map((index) => ({ - target: poolConcretes[index.contractAddress], - params: [index.openFundShareSlot] - })), - }) - - const poolBaseInfos = await api.multiCall({ - abi: abi.slotBaseInfo, - calls: pools.map((index) => ({ - target: poolConcretes[index.contractAddress], - params: [index.openFundShareSlot] - })), - }) - - const poolDecimalList = await api.multiCall({ - abi: abi.decimals, - calls: poolBaseInfos.map(i => i[1]), - }) - - let vaults = {}; - for (const key in pools) { - if (poolBaseInfos[key][1] && pools[key]["vault"]) { - vaults[`${pools[key]["vault"].toLowerCase()}-${poolBaseInfos[key][1].toLowerCase()}`] = [poolBaseInfos[key][1], pools[key]["vault"]] - } - } - - const symbols = await api.multiCall({ - abi: abi.symbol, - calls: poolBaseInfos.map((index) => ({ - target: index[1] - })), - }) - - const balances = await api.multiCall({ - abi: abi.balanceOf, - calls: Object.values(vaults).map((index) => ({ - target: index[0], - params: [index[1]] - })), - }) +const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; +async function getSolvBTCVAddresses(api) { + let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); - let vaultbalances = {}; - for (let i = 0; i < Object.keys(vaults).length; i++) { - vaultbalances[Object.keys(vaults)[i]] = balances[i]; - } - for (let i = 0; i < poolTotalValues.length; i++) { - const decimals = poolDecimalList[i]; - let balance = BigNumber(poolTotalValues[i]).div(BigNumber(10).pow(18 - decimals)).times(BigNumber(nav[i].nav_).div(BigNumber(10).pow(decimals))).toNumber(); - if (pools[i]['vault'] && poolBaseInfos[i][1] && vaultbalances[`${pools[i]['vault'].toLowerCase()}-${poolBaseInfos[i][1].toLowerCase()}`]) { - balance = BigNumber(balance).minus(vaultbalances[`${pools[i]['vault'].toLowerCase()}-${poolBaseInfos[i][1].toLowerCase()}`]).toNumber(); - vaultbalances[`${pools[i]['vault'].toLowerCase()}-${poolBaseInfos[i][1].toLowerCase()}`] = undefined - } - if (balance > 0) { - if (symbols[i] !== "SolvBTC") { - api.add(poolBaseInfos[i][1], balance) - } - } + const blacklisted = {} + if (!solvbtc[api.chain] || !solvbtc[api.chain]["otherDeposit"]) { + return blacklisted + } + let otherDeposit = solvbtc[api.chain]["otherDeposit"]; + for (const deposit of otherDeposit["depositAddress"]) { + for (const tokenAddress of otherDeposit["tokens"]) { + const key = `${tokenAddress}-${deposit}`.toLowerCase() + blacklisted[key] = true } } - return api.getBalances() + return blacklisted } async function otherDeposit(api, address) { @@ -328,27 +249,17 @@ async function vaultBalance(api, graphData) { vaults[`${poolBaseInfos[key][1].toLowerCase()}-${poolLists[key]["vault"].toLowerCase()}`] = [poolBaseInfos[key][1], poolLists[key]["vault"]] } } - - const symbols = await api.multiCall({ - abi: abi.symbol, - calls: Object.values(vaults).map((index) => ({ - target: index[0] - })), + const tokens = Object.values(vaults).map(([token]) => token) + + const symbols = await api.multiCall({ abi: abi.symbol, calls: tokens, }) + const blacklisted = await getSolvBTCVAddresses(api) + const blacklistedTokens = tokens.filter((token, i) => symbols[i].toLowerCase().includes('solvbtc')) + const tokensAndOwners = Object.values(vaults).filter(([token, owner]) => { + const key = `${token}-${owner}`.toLowerCase() + return !blacklisted[key] && !blacklistedTokens.includes(token) }) - - const balances = await api.multiCall({ - abi: abi.balanceOf, - calls: Object.values(vaults).map((index) => ({ - target: index[0], - params: [index[1]] - })), - }) - - for (const key in balances) { - if (symbols[key] !== "SolvBTC") { - api.add(Object.values(vaults)[key][0], balances[key]) - } - } + + return api.sumTokens({ tokensAndOwners, blacklistedTokens, }) } } @@ -357,7 +268,7 @@ async function ceffuBalance(api, address, graphData) { return; } let ceffuData = address[api.chain]["ceffu"]; - + let pools = []; for (const graph of graphData.pools) { if (graph['openFundShareSlot'] == ceffuData['slot']) { @@ -479,40 +390,10 @@ async function getGraphData(timestamp, chain, api) { }; } -function filterDepositAddress(network, address) { - let depositAddresses = []; - if (address[network]) { - if (address[network]["gm"]) { - for (let depositAddress of address[network]["gm"]["depositAddress"]) { - depositAddresses.push(depositAddress.toLowerCase()) - } - } - if (address[network]["mux"]) { - depositAddresses.push(address[network]["mux"]["account"].toLowerCase()) - } - if (address[network]["klp"]) { - for (let poolAddress of address[network]["klp"]["klpPool"]) { - depositAddresses.push(poolAddress.toLowerCase()) - } - } - if (address[network]["iziswap"]) { - for (let owner of address[network]["iziswap"]["owner"]) { - depositAddresses.push(owner.toLowerCase()) - } - } - if (address[network]["lendle"]) { - depositAddresses.push(address[network]["lendle"]["account"]["user"].toLowerCase()) - } - } - - return depositAddresses; -} - // node test.js projects/solv-protocol-funds ['ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin'].forEach(chain => { module.exports[chain] = { - tvl, - borrowed + tvl } }) diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index 1c35f29559..6ab7e9ac67 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -1,7 +1,9 @@ const abi = require("./abi.json"); +const sdk = require('@defillama/sdk'); const { getConfig } = require("../helper/cache"); const { cachedGraphQuery } = require("../helper/cache"); const { sumTokens2, } = require("../helper/unwrapLPs"); +const { sumTokensExport, } = require('../helper/sumTokens'); // The Graph const graphUrlList = { @@ -14,30 +16,15 @@ const graphUrlList = { const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; +const bitcionOwners = [ + 'bc1pjrxeuc9f3zqtx92s3mnf6202894jzufswur957l6s04rjns6dumsyh6u89', + 'bc1qdpwl80flfh3k6h6sumzwgws3ephkrmx307hk64' +] + async function tvl(api) { let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); - await gm(api, solvbtc) - await vaultBalance(api, solvbtc); await otherDeposit(api, solvbtc); - - return api.getBalances(); -} - -async function gm(api, solvbtc) { - if (!solvbtc[api.chain] || !solvbtc[api.chain]["gm"]) { - return; - } - let gm = solvbtc[api.chain]["gm"]; - - let tokens = [] - for (const pool of gm["depositAddress"]) { - for (const address of gm["gmTokens"]) { - tokens.push({ address, pool }) - } - } - - await sumTokens2({ api, tokensAndOwners: tokens.map(i => [i.address, i.pool]), permitFailure: true }); } async function otherDeposit(api, solvbtc) { @@ -46,112 +33,25 @@ async function otherDeposit(api, solvbtc) { } let otherDeposit = solvbtc[api.chain]["otherDeposit"]; - let tokens = [] + let tokensAndOwners = [] for (const deposit of otherDeposit["depositAddress"]) { for (const tokenAddress of otherDeposit["tokens"]) { - tokens.push({ tokenAddress, deposit }) + tokensAndOwners.push([tokenAddress, deposit]) } } - await sumTokens2({ api, tokensAndOwners: tokens.map(i => [i.tokenAddress, i.deposit]), permitFailure: true }); + await sumTokens2({ api, tokensAndOwners, permitFailure: true }); } -async function concrete(slots, api) { - var slotsList = []; - var only = {}; - for (var i = 0; i < slots.length; i++) { - if (!only[slots[i].contractAddress]) { - slotsList.push(slots[i]); - only[slots[i].contractAddress] = true; - } - } - - const concreteLists = await api.multiCall({ - calls: slotsList.map((index) => index.contractAddress), - abi: abi.concrete, - }) - - let concretes = {}; - for (var k = 0; k < concreteLists.length; k++) { - concretes[slotsList[k].contractAddress] = concreteLists[k]; - } - - return concretes; -} - -async function vaultBalance(api, solvbtc) { - if (!solvbtc[api.chain] || !solvbtc[api.chain]["slot"]) { - return; - } - let slot = solvbtc[api.chain]["slot"]; - - const graphData = await getGraphData(api.timestamp, api.chain, api, slot); - if (graphData.pools.length > 0) { - const poolLists = graphData.pools; - - const poolConcretes = await concrete(poolLists, api); - - const poolBaseInfos = await api.multiCall({ - abi: abi.slotBaseInfo, - calls: poolLists.map((index) => ({ - target: poolConcretes[index.contractAddress], - params: [index.openFundShareSlot] - })), - }) - - let vaults = {}; - for (const key in poolLists) { - if (poolBaseInfos[key][1] && poolLists[key]["vault"]) { - vaults[`${poolBaseInfos[key][1].toLowerCase()}-${poolLists[key]["vault"].toLowerCase()}`] = [poolBaseInfos[key][1], poolLists[key]["vault"]] - } +// node test.js projects/solvbtc +['bitcoin', 'ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin'].forEach(chain => { + if (chain == 'bitcoin') { + module.exports[chain] = { + tvl: sumTokensExport({ owners: bitcionOwners }), } - - const balances = await api.multiCall({ - abi: abi.balanceOf, - calls: Object.values(vaults).map((index) => ({ - target: index[0], - params: [index[1]] - })), - }) - - for (const key in balances) { - api.add(Object.values(vaults)[key][0], balances[key]) + } else { + module.exports[chain] = { + tvl } } -} - - -async function getGraphData(timestamp, chain, api, slot) { - - const slotDataQuery = `query PoolOrderInfos { - poolOrderInfos(first: 1000 where:{fundraisingEndTime_gt:${timestamp}, openFundShareSlot_in: ${JSON.stringify(slot)}}) { - marketContractAddress - contractAddress - navOracle - poolId - vault - openFundShareSlot - } - }`; - - let data; - if (graphUrlList[chain]) { - data = (await cachedGraphQuery(`solv-protocol/funds-graph-data/${chain}`, graphUrlList[chain], slotDataQuery, { api, })); - } - - let poolList = []; - if (data != undefined && data.poolOrderInfos != undefined) { - poolList = data.poolOrderInfos; - } - - return { - pools: poolList - }; -} - -// node test.js projects/solvbtc -['ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin'].forEach(chain => { - module.exports[chain] = { - tvl - } }) From 6bf562d245d15279b1f512cb20a6329031beb7f9 Mon Sep 17 00:00:00 2001 From: DackieSwap <132213730+DackieSwap@users.noreply.github.com> Date: Sat, 31 Aug 2024 16:43:49 +0700 Subject: [PATCH 0214/1768] [DackieSwap] V2 V3 update Linea Mainnet (#11481) Co-authored-by: andreapn.eth --- projects/dackieswap-v2/index.js | 1 + projects/dackieswap/index.js | 1 + 2 files changed, 2 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 5d17bd3771..d4f3c037f0 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -15,6 +15,7 @@ const config = { inevm: '0x507940c2469e6e3b33032f1d4ff8d123bdde2f5c', mode: '0x757cd583004400ee67e5cc3c7a60c6a62e3f6d30', base: '0x591f122D1df761E616c13d265006fcbf4c6d6551', + linea: '0x9790713770039CeFcf4FAaf076E2846c9B7a4630', } module.exports = { diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index d84e295906..934bc1cec1 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -8,4 +8,5 @@ module.exports = uniV3Export({ inevm: { factory: "0xf79A36F6f440392C63AD61252a64d5d3C43F860D", fromBlock: 291933 }, mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, xlayer: { factory: "0xc6f3966e5d08ced98ac30f8b65beab5882be54c7", fromBlock: 278971 }, + linea: { factory: "0xc6255ec7CDb11C890d02EBfE77825976457B2470", fromBlock: 8488016 }, }); \ No newline at end of file From fc64b58378bde24273a40831500205c0c78c58a8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 2 Sep 2024 08:37:46 +0200 Subject: [PATCH 0215/1768] track https://ethervista.app --- projects/ethervista/index.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 projects/ethervista/index.js diff --git a/projects/ethervista/index.js b/projects/ethervista/index.js new file mode 100644 index 0000000000..8f340e3d67 --- /dev/null +++ b/projects/ethervista/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'ethereum': '0x9a27cb5ae0B2cEe0bb71f9A85C0D60f3920757B4' +}) \ No newline at end of file From 113c288b7610a0e983ec28f102587ce2c7d7db7f Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 1 Sep 2024 23:41:28 -0700 Subject: [PATCH 0216/1768] feat: add base to dinari (#11493) --- projects/dinari/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/dinari/index.js b/projects/dinari/index.js index 829e3dbfcf..75778cabe4 100644 --- a/projects/dinari/index.js +++ b/projects/dinari/index.js @@ -13,6 +13,10 @@ const config = { kinto: { factory: "0xE4Daa69e99F48AD0C4D4843deF4447253248A906", usdplus: "0x6F086dB0f6A621a915bC90295175065c9e5d9b8c" + }, + base: { + factory: "0xBCE6410A175a1C9B1a25D38d7e1A900F8393BC4D", + usdplus: "0x98C6616F1CC0D3E938A16200830DD55663dd7DD3" } } From 1704094843c3167f782f5e9d5517d67dbf661db2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:39:56 +0200 Subject: [PATCH 0217/1768] Refactor oETH (#11497) --- projects/origindollar/index.js | 33 +++-------------- projects/originether/index.js | 68 +++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 58 deletions(-) diff --git a/projects/origindollar/index.js b/projects/origindollar/index.js index 17a994be45..71d75c6913 100644 --- a/projects/origindollar/index.js +++ b/projects/origindollar/index.js @@ -1,35 +1,12 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const { staking, stakings } = require("../helper/staking"); +const { stakings } = require("../helper/staking"); const vault = "0xE75D77B1865Ae93c7eaa3040B038D7aA7BC02F70"; -const ethTvl = async (timestamp, ethBlock) => { - const balances = {}; - - // Account DAI, USDT and USDC backing up the minted OUSD - const stablecoins = ( - await sdk.api.abi.call({ - abi: abi.getAllAssets, - target: vault, - block: ethBlock, - }) - ).output; - - for (let i = 0; i < stablecoins.length; i++) { - const balance_stablecoin = ( - await sdk.api.abi.call({ - abi: abi.checkBalance, - target: vault, - params: stablecoins[i], - block: ethBlock, - }) - ).output; - - sdk.util.sumSingleBalance(balances, stablecoins[i], balance_stablecoin); - } - - return balances; +const ethTvl = async (api) => { + const tokens = await api.call({ abi: abi.getAllAssets, target: vault}) + const bals = await api.multiCall({ abi: abi.checkBalance, calls: tokens, target: vault}) + api.add(tokens, bals) }; module.exports = { diff --git a/projects/originether/index.js b/projects/originether/index.js index ceea8da769..2bba3ade3d 100644 --- a/projects/originether/index.js +++ b/projects/originether/index.js @@ -1,38 +1,46 @@ -const sdk = require("@defillama/sdk"); +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("../origindollar/abi.json"); -const vault = "0x39254033945aa2e4809cc2977e7087bee48bd7ab"; - -const ethTvl = async (timestamp, ethBlock) => { - const balances = {}; - - // Account WETH, rETH, frxETH and stETH backing up the minted OUSD - const backingAssets = ( - await sdk.api.abi.call({ - abi: abi.getAllAssets, - target: vault, - block: ethBlock, - }) - ).output; - - for (let i = 0; i < backingAssets.length; i++) { - const backingAssetBalance = ( - await sdk.api.abi.call({ - abi: abi.checkBalance, - target: vault, - params: backingAssets[i], - block: ethBlock, - }) - ).output; - - sdk.util.sumSingleBalance(balances, backingAssets[i], backingAssetBalance); - } - - return balances; -}; + +const ethTvl = async (api) => { + const vault = "0x39254033945aa2e4809cc2977e7087bee48bd7ab"; + const nativeStaking = '0x34eDb2ee25751eE67F68A45813B22811687C0238' + const nativeStaking2 = '0x4685dB8bF2Df743c861d71E6cFb5347222992076' + const stakingBalance1 = await api.call({ abi: abi.checkBalance, target: nativeStaking, params: ADDRESSES.ethereum.WETH }) + api.add(ADDRESSES.ethereum.WETH, stakingBalance1) + const stakingBalance2 = await api.call({ abi: abi.checkBalance, target: nativeStaking2, params: ADDRESSES.ethereum.WETH }) + api.add(ADDRESSES.ethereum.WETH, stakingBalance2) + + // add ETH part of curve LP + const convexStrategy = '0x1827F9eA98E0bf96550b2FC20F7233277FcD7E63' + const lp = await api.call({ abi: 'address:curvePool', target: convexStrategy}) + const ethIndex = await api.call({ abi: 'uint128:ethCoinIndex', target: convexStrategy}) + const lpBalance = await api.call({ abi: abi.checkBalance, target: convexStrategy, params: ADDRESSES.ethereum.WETH}) + const lpSupply = await api.call({ abi: 'erc20:totalSupply', target: lp}) + const ethInPool = await api.call({ abi: 'function balances(uint256) view returns (uint256)', target: lp, params: ethIndex}) + const ethLPBalance = (lpBalance / lpSupply) * ethInPool + api.add(ADDRESSES.ethereum.WETH, ethLPBalance) + + + return api.sumTokens({ owner: vault, tokens: [ADDRESSES.ethereum.WETH] }) +} + +async function baseTvl(api) { + const vault = '0x98a0CbeF61bD2D21435f433bE4CD42B56B38CC93' + const aeroAMO = '0xF611cC500eEE7E4e4763A05FE623E2363c86d2Af' + const dripper = await api.call({ target: vault, abi: 'function dripper() view returns (address)' }) + const [amountWeth, _amountOETH] = await api.call({ abi: 'function getPositionPrincipal() view returns (uint256, uint256)', target: aeroAMO }) + api.add(ADDRESSES.base.WETH, amountWeth) + return api.sumTokens({ owners: [vault], tokens: [ADDRESSES.base.WETH] }) + +} + module.exports = { ethereum: { tvl: ethTvl, }, + base: { + tvl: baseTvl, + }, }; From 43881d59a457a6b86a78030bdaba1ce7eef460f7 Mon Sep 17 00:00:00 2001 From: alexflorence <89457550+alexflorence@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:41:19 +0200 Subject: [PATCH 0218/1768] feat(florence-finance): add borrowed for base (#11498) --- projects/florence-finance/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/florence-finance/index.js b/projects/florence-finance/index.js index 5858527103..59432e80bf 100644 --- a/projects/florence-finance/index.js +++ b/projects/florence-finance/index.js @@ -5,6 +5,9 @@ const ETH_EURS = "0xdb25f211ab05b1c97d595516f45794528a807ad8"; const ARB_FLR = "0x9b6226dd0191a77d032f56a6d383044ee99944c3"; const ARB_AGEUR = "0xfa5ed56a203466cbbc2430a43c66b9d8723528e7"; +const BASE_FLR = "0x4ee4bea687D5cE6245198db136D32aeC02806A83"; +const BASE_EURC = "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42"; + async function getTotalSupply(token, { api }) { const totalSupply = await api.call({ abi: "function totalSupply() external view returns (uint256)", @@ -30,9 +33,15 @@ async function getBorrowedOnArbitrum(api) { api.add(ARB_AGEUR, borrowed); //Decimals of FLR and agEUR are both 18. No conversion needed. } +async function getBorrowedOnBase(api) { + const borrowed = await getTotalSupply(BASE_FLR, { api }); //FLR on Base are not multi-chain so there is no need to subtract anything yet. + api.add(BASE_EURC, borrowed / 1e12); //12 decimals (FLR) -> 2 decimals (EURC) +} + module.exports = { methodology: "The Florin token (FLR) is minted whenever a new loan is funded and burned when a loan matures and is repaid. Since the Florin token is 1:1 redeemable for EUR the borrowed amount is denominated in the protocols treasuries EUR stablecoin of the respective chain. Consequently the total supply of Florin equals the amount borrowed through the protocol. To avoid double counting, the amount of FLR held in the bridge contract is subtracted from the total supply. ", ethereum: { start: 16077400, borrowed: getBorrowedOnEthereum, tvl: () => ({}) }, arbitrum: { start: 126183369, borrowed: getBorrowedOnArbitrum, tvl: () => ({}) }, + base: { start: 18941407, borrowed: getBorrowedOnBase, tvl: () => ({}) }, }; \ No newline at end of file From 2cc435cc9e1a6e668a2c0f0a343cde0a2e845085 Mon Sep 17 00:00:00 2001 From: George Ciubotaru Date: Mon, 2 Sep 2024 11:44:36 +0300 Subject: [PATCH 0219/1768] feat(clearpool): update factories list (#11496) Signed-off-by: Addis Belete Co-authored-by: Addis Belete Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- projects/clearpool/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/clearpool/index.js b/projects/clearpool/index.js index 1de97ee2fb..ad8721de64 100644 --- a/projects/clearpool/index.js +++ b/projects/clearpool/index.js @@ -69,6 +69,10 @@ const config = { factory: "0x44fEF0fAB3A96CA34b06d5142350Ef9223F65A7e", fromBlock: 226174706, }, + vaults: { + factory: "0xA8e8AccabCf29e7d8b33D086085D87F9F38a6Ed7", + fromBlock: 226193395 + } }, [CHAIN.MANTLE]: { dynamic: { @@ -78,6 +82,10 @@ const config = { vaults: { factory: "0xF041A2838794266d19f79709F416A2977F896A9B", fromBlock: 59594636 + }, + prime: { + factory: "0x29157e2B6A34Ae1787CDdD05Ad54DD4aa9783A5c", + fromBlock: 68483768 } }, [CHAIN.BASE]: { @@ -185,7 +193,7 @@ Object.keys(config).forEach((chain) => { await Promise.all(promiseArray) - return sumTokens2({ api, tokensAndOwners2: [allTokens, allPools], blacklistedTokens: blacklistedTokens[chain]}) + return sumTokens2({ api, tokensAndOwners2: [allTokens, allPools], blacklistedTokens: blacklistedTokens[chain] }) } const borrowed = async (api) => { @@ -210,7 +218,7 @@ Object.keys(config).forEach((chain) => { api.addTokens(allTokens, balances) if (blacklistedTokens[chain]) { - blacklistedTokens[chain].forEach((token) => api.removeTokenBalance(token)) + blacklistedTokens[chain].forEach((token) => api.removeTokenBalance(token)) } } module.exports[chain] = { tvl, borrowed } From 7ecc1a8bae38114cb682f8e89b5add0dc040e714 Mon Sep 17 00:00:00 2001 From: sofa-org <161308389+sofa-org@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:45:09 +0800 Subject: [PATCH 0220/1768] add new RCH vaults for sofa-org (#11495) --- projects/sofa-org/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sofa-org/index.js b/projects/sofa-org/index.js index 488e83224e..cbce75c057 100644 --- a/projects/sofa-org/index.js +++ b/projects/sofa-org/index.js @@ -104,4 +104,5 @@ module.exports.ethereum.staking = staking([ '0x94Fe821E8Adde08aB97530D432Ff34A724FD7830', '0x4a5B4049a4aFae31278d36768704872f73dA67D1', '0x08c57aE48a89b6876A76dC618972Ef1602da7ED8', + '0x2B9aeA129B85F51A468274e7271434A83c3BB6b4', // StRCH ], '0x57b96d4af698605563a4653d882635da59bf11af') From d565397611e52833c54c4c712e2447f32f9bb46f Mon Sep 17 00:00:00 2001 From: David Lee Date: Mon, 2 Sep 2024 17:49:24 +0900 Subject: [PATCH 0221/1768] Add Level (#11491) --- projects/level-money/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/level-money/index.js diff --git a/projects/level-money/index.js b/projects/level-money/index.js new file mode 100644 index 0000000000..b9166c984a --- /dev/null +++ b/projects/level-money/index.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const LEVEL_STAKING_CONTRACT = '0x7FDA203f6F77545548E984133be62693bCD61497'; + +const TOKEN_CONTRACTS = [ + ADDRESSES.ethereum.USDT, // USDT + ADDRESSES.ethereum.USDC, // USDC +]; + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owner: LEVEL_STAKING_CONTRACT, + tokens: TOKEN_CONTRACTS, + }), + } +}; From fdce6ea043cfeb45ec83e1baf02a73b1a4429083 Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 2 Sep 2024 01:49:56 -0700 Subject: [PATCH 0222/1768] Add ham chain to mint-club-v2 (#11490) --- projects/mint-club-v2/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/mint-club-v2/index.js b/projects/mint-club-v2/index.js index e9344c7e30..6a245f13c1 100644 --- a/projects/mint-club-v2/index.js +++ b/projects/mint-club-v2/index.js @@ -10,14 +10,15 @@ const V2_BOND_CONTRACTS = { blast: "0x621c335b4BD8f2165E120DC70d3AfcAfc6628681", degen: "0x3bc6B601196752497a68B2625DB4f2205C3b150b", zora: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27", - klaytn: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27" + klaytn: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27", + ham: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27" } const ownTokens = { bsc: ['0x1f3Af095CDa17d63cad238358837321e95FC5915'] } -const chains = ['avax', 'ethereum', 'optimism', 'arbitrum', 'polygon', 'bsc', 'base', 'blast', 'degen', 'zora', 'klaytn'] +const chains = ['avax', 'ethereum', 'optimism', 'arbitrum', 'polygon', 'bsc', 'base', 'blast', 'degen', 'zora', 'klaytn', 'ham'] chains.forEach(chain => { const BOND_CONTRACT = V2_BOND_CONTRACTS[chain] ?? '0xc5a076cad94176c2996B32d8466Be1cE757FAa27' From 4d9d263e0d33b7eb6028de5c40c625d465d98894 Mon Sep 17 00:00:00 2001 From: 0xyongyong Date: Mon, 2 Sep 2024 19:24:20 +0900 Subject: [PATCH 0223/1768] add LairFinance project (#11489) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/LairFinance/index.js | 13 +++++++++++++ projects/capybara-exchange/config.js | 2 ++ 2 files changed, 15 insertions(+) create mode 100644 projects/LairFinance/index.js diff --git a/projects/LairFinance/index.js b/projects/LairFinance/index.js new file mode 100644 index 0000000000..4a7818623e --- /dev/null +++ b/projects/LairFinance/index.js @@ -0,0 +1,13 @@ +const contracts = { + stKAIA: '0x42952B873ed6f7f0A7E4992E2a9818E3A9001995', + node: '0x7949597f453592B782EC9036Af27d63Ed9774b2d', +} + +async function tvl(api) { + const tvl = await api.call({ target: contracts.node, abi: "uint256:getTotalStakingAmount" }) + api.addGasToken(tvl) +} + +module.exports = { + klaytn: { tvl } +} \ No newline at end of file diff --git a/projects/capybara-exchange/config.js b/projects/capybara-exchange/config.js index f5272a6610..f563c219ab 100644 --- a/projects/capybara-exchange/config.js +++ b/projects/capybara-exchange/config.js @@ -3,6 +3,8 @@ module.exports = { pools: { mainPool: "0x540cce8ed7d210f71eeabb9e7ed7698ac745e077", volatilePool: "0x6389dbfa1427a3b0a89cddc7ea9bbda6e73dece7", + lstPool: "0x5CDE63386D78362267d9A3edC8DA204bB64D07D3", + stargatePool: "0x1dE1578476d9B4237F963eca5D37500Fc33DF3D1", }, }, }; From b8a2c50ba295bfa3e2973e11637cd27abd434284 Mon Sep 17 00:00:00 2001 From: Dmitriy Babenko <159453675+dmitriy-woof-software@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:26:24 +0200 Subject: [PATCH 0224/1768] Compound v3. Change ARB USDT market address to correct one (#11486) --- projects/compound-v3/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/compound-v3/index.js b/projects/compound-v3/index.js index dae13fed8e..b31c059606 100644 --- a/projects/compound-v3/index.js +++ b/projects/compound-v3/index.js @@ -13,14 +13,14 @@ module.exports = compoundV3Exports({ '0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA', // USDC.e Market '0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf', // USDC Market '0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486', // WETH Market - '0x5C58d4479A1E9b2d19EE052143FA73F0ee79A36e', // USDT Market + '0xd98Be00b5D27fc98112BdE293e487f8D4cA57d07', // USDT Market ], }, polygon: { markets: [ '0xF25212E676D1F7F89Cd72fFEe66158f541246445', // USDC.e Market '0xaeB318360f27748Acb200CE616E389A6C9409a07', // USDT Market - ], + ], }, base: { markets: [ From 61d214ec42d6bb68ceef4c0b14d2f8ecc38408e5 Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Mon, 2 Sep 2024 18:27:07 +0800 Subject: [PATCH 0225/1768] Add ailayer for Pell Network (#11485) --- projects/pell/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pell/index.js b/projects/pell/index.js index 5caac463b1..0ba4207b86 100644 --- a/projects/pell/index.js +++ b/projects/pell/index.js @@ -1,7 +1,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require('../helper/cache') -const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob'] +const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer'] chains.forEach(chain => { module.exports[chain] = { From f1dad0bc163941c0164c35c157a95a3dc1ca18f6 Mon Sep 17 00:00:00 2001 From: samweinberg23 Date: Mon, 2 Sep 2024 03:28:14 -0700 Subject: [PATCH 0226/1768] update goldlink avax tvl (#11483) --- projects/goldlink/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/goldlink/index.js b/projects/goldlink/index.js index d698d4a491..bfcf494ed2 100755 --- a/projects/goldlink/index.js +++ b/projects/goldlink/index.js @@ -7,4 +7,7 @@ module.exports = { arbitrum: { tvl: sumERC4626VaultsExport({ vaults: ['0xd8dd54df1a7d2ea022b983756d8a481eea2a382a',], isOG4626: true, }), }, + avax: { + tvl: sumERC4626VaultsExport({ vaults: ['0xbE6eB54D1e96CC59338BE9A281d840AcE82df095',], isOG4626: true, }), + } } \ No newline at end of file From 18eece70bfac3c88ae70f4260e0c1042f28fbebb Mon Sep 17 00:00:00 2001 From: tyler-tsai Date: Mon, 2 Sep 2024 07:51:49 -0400 Subject: [PATCH 0227/1768] feat: add collaterals (#11494) Co-authored-by: Tyler Tsai --- projects/helio-money/index.js | 113 +++++++++++++++++----------------- 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index a780961f14..a399cfbd56 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -2,65 +2,68 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { sumTokensExport } = require("../helper/unknownTokens"); module.exports = { - methodology: "The TVL is calculated by summing the values of tokens held in the specified vault addresses", - hallmarks: [ - [1669939200, "aBNBc exploit"], - //[1670544000,"aBNBc to AnkrBNB swap & HAY buyback"] - ], - bsc: { - tvl: sumTokensExport({ - tokensAndOwners: [ - // BNB - [ADDRESSES.null, "0x986b40C2618fF295a49AC442c5ec40febB26CC54"], + methodology: "The TVL is calculated by summing the values of tokens held in the specified vault addresses", + hallmarks: [ + [1669939200, "aBNBc exploit"], + //[1670544000,"aBNBc to AnkrBNB swap & HAY buyback"] + ], + bsc: { + tvl: sumTokensExport({ + tokensAndOwners: [ + // BNB + [ADDRESSES.null, "0x986b40C2618fF295a49AC442c5ec40febB26CC54"], - //slisBNB - [ - "0xB0b84D294e0C75A6abe60171b70edEb2EFd14A1B", - "0x6F28FeC449dbd2056b76ac666350Af8773E03873", - ], + //slisBNB + [ + "0xB0b84D294e0C75A6abe60171b70edEb2EFd14A1B", + "0x6F28FeC449dbd2056b76ac666350Af8773E03873", + ], - // slisBNB - [ - "0xB0b84D294e0C75A6abe60171b70edEb2EFd14A1B", - "0x91e49983598685DD5ACAc90CEb4061A772f6E5Ae", - ], + // slisBNB + [ + "0xB0b84D294e0C75A6abe60171b70edEb2EFd14A1B", + "0x91e49983598685DD5ACAc90CEb4061A772f6E5Ae", + ], - // eth - [ADDRESSES.bsc.ETH, "0xA230805C28121cc97B348f8209c79BEBEa3839C0"], + // eth + [ADDRESSES.bsc.ETH, "0xA230805C28121cc97B348f8209c79BEBEa3839C0"], - // eth => wBETH - [ - "0xa2E3356610840701BDf5611a53974510Ae27E2e1", - "0xf45C3b619Ee86F653805E007fE211B7e930E0b3B", - ], + // eth => wBETH + [ + "0xa2E3356610840701BDf5611a53974510Ae27E2e1", + "0xf45C3b619Ee86F653805E007fE211B7e930E0b3B", + ], - // wbeth - [ - "0xa2E3356610840701BDf5611a53974510Ae27E2e1", - "0xA230805C28121cc97B348f8209c79BEBEa3839C0", - ], + // wbeth + [ + "0xa2E3356610840701BDf5611a53974510Ae27E2e1", + "0xA230805C28121cc97B348f8209c79BEBEa3839C0", + ], - // BTCB - [ - ADDRESSES.bsc.BTCB, - "0xad9eAAe95617c39019aCC42301a1dCa4ea5b6f65", - ], - // ezETH - [ - ADDRESSES.blast.ezETH, - "0xd7E33948e2a43e7C1ec2F19937bf5bf8BbF9BaE8", - ], - // weETH - [ - ADDRESSES.blast.weETH, - "0x2367f2Da6fd39De6944218CC9EC706BCdc9a6918", - ], - // STONE - [ - ADDRESSES.scroll.STONE, - "0x876cd9a380Ee7712129b52f8293F6f06056c3104", - ], - ], - }), - }, + // BTCB + [ADDRESSES.bsc.BTCB, "0xad9eAAe95617c39019aCC42301a1dCa4ea5b6f65"], + // ezETH + [ADDRESSES.blast.ezETH, "0xd7E33948e2a43e7C1ec2F19937bf5bf8BbF9BaE8"], + // weETH + [ADDRESSES.blast.weETH, "0x2367f2Da6fd39De6944218CC9EC706BCdc9a6918"], + // STONE + [ADDRESSES.scroll.STONE, "0x876cd9a380Ee7712129b52f8293F6f06056c3104"], + // solvBTC + [ + "0x4aae823a6a0b376De6A78e74eCC5b079d38cBCf7", + "0xA94AA72e033b39AD7CD448f38Bc1eda5B52f7079", + ], + // BBTC + [ + "0xF5e11df1ebCf78b6b6D26E04FF19cD786a1e81dC", + "0x157c9a692ee99C39272856055957083a928cE299", + ], + // wstETH + [ + "0x26c5e01524d2E6280A48F2c50fF6De7e52E9611C", + "0xf8Ca8D2B59A97125751af1069d4a5C4F7eB7A677", + ], + ], + }), + }, }; From 693201357fea8334a13f5f275129e28dabb037ba Mon Sep 17 00:00:00 2001 From: Papparico Finance <161519435+PapparicoFinance@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:20:30 +0200 Subject: [PATCH 0228/1768] Papparico Finance adapter creation. (#11487) Co-authored-by: Jamesson Neves Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/papparico-finance/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/papparico-finance/index.js diff --git a/projects/papparico-finance/index.js b/projects/papparico-finance/index.js new file mode 100644 index 0000000000..e4242deb85 --- /dev/null +++ b/projects/papparico-finance/index.js @@ -0,0 +1,24 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const PPFT_TOKEN_CONTRACT = "0x59BAfb7168972EcCA5e395F7dA88e71eCe47a260"; +const PPFT_MAIN_LP = "0xb036145476Ad16782eC05C7EC340D7e3cE6D09b7"; + +const STAKING_CONTRACT = "0x535503d5c23bCA9896383003A46A8AD6c9CB2fe2"; +const SINGLE_STAKING_CONTRACT = "0xFc8d5d6B280BF5E8d8DB12d0fF8a0f7d1A6ECf78"; +const VAULTS_CONTRACT = "0x828CC5D75594e4d0D072566cC07F64E863A0d11E"; +const LP_MINING_CONTRACT = "0x3E35810A663c7eE28a0A6f6A0984146CbB163c6c"; + +module.exports = { + start: 13406569, + cronos: { + tvl: () => ({}), + staking: sumTokensExport({ + owners: [STAKING_CONTRACT, SINGLE_STAKING_CONTRACT, VAULTS_CONTRACT,], + token: PPFT_TOKEN_CONTRACT, + }), + pool2: sumTokensExport({ + tokensAndOwners: [[PPFT_MAIN_LP, LP_MINING_CONTRACT],], + resolveLP: true, + }), + } +}; \ No newline at end of file From b13f62f5e071aff521a29f7ecf60f66d279088b2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:22:49 +0200 Subject: [PATCH 0229/1768] track gaspump #11499 --- projects/gaspump/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/gaspump/index.js diff --git a/projects/gaspump/index.js b/projects/gaspump/index.js new file mode 100644 index 0000000000..1d0fccd90c --- /dev/null +++ b/projects/gaspump/index.js @@ -0,0 +1,21 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { fetchURL } = require('../helper/utils'); + +async function fetchTvl(api) { + const response = await fetchURL("https://api.gas111.com/api/v1/internal/tokens/balances-list") + for (const pool of response.data) { + api.add(ADDRESSES.ton.TON, pool.bonding_curve_balance/2) // we include only the TON part of the pool + } +} + + +module.exports = { + methodology: ` + Each token launched via gaspump has a bonding curve. The TVL is the sum of all bonding curve balances. + It is slightly different from the address balance, which is composed from curve balance + fees accumulated. + `.trim(), + timetravel: false, + ton: { + tvl: fetchTvl + } +} From d6c56052e350f5d9b7d9e2403900b8c13b4ab062 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:36:27 +0100 Subject: [PATCH 0230/1768] merlin-more-wal (#11500) --- projects/merlin-l2/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/merlin-l2/index.js b/projects/merlin-l2/index.js index e1958dd39a..d864c9a279 100644 --- a/projects/merlin-l2/index.js +++ b/projects/merlin-l2/index.js @@ -27,7 +27,12 @@ const owners = [ "36n825H7orW1u8yWmvR4zs2CWfmkY2rkpK", // add on 12/05/2024 "bc1p35l88j3ashhktg75tjctt6pacrgpyr93ldt7yw484dm4expq073qk4n0a0", // add on 12/05/2024 "bc1pahkqca39mfcfay7nueczyhn9v8wq96x7mp4pjxpsdpsnurxzuwuqnhsdg3", // this wallet was provide by merlin team chain on the 14/08/2024 - "1A7oMBdQir24ESgk8LDccM4MUKJx6d2mCw" // this wallet was provide by merlin team chain on the 14/08/2024 + "1A7oMBdQir24ESgk8LDccM4MUKJx6d2mCw", // this wallet was provide by merlin team chain on the 14/08/2024 + "bc1q0hgd38zjp2v2rahqverkmdaak4vc8fynyatqet", + "3BN9ECDCAjgxaQUmJCBCM7JtJZaCeB6rL6", + "17z6W1Eq1A7hWcWQiDxUcFTZBVCMsYrLye", + "1McbLy27nLVzJ4ubMnFm3jxnQ3nbq2mpr2", + "17vH7EX655n5L4iPAfVXPn3rVzZbrgKYBC" ] module.exports = { From 623004ac5951d20d2e97a47cf8c7b93c0ad63c0f Mon Sep 17 00:00:00 2001 From: 0xmDreamy <124707942+0xmDreamy@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:18:34 +0200 Subject: [PATCH 0231/1768] feat(mimswap): Add support for Mainnet (#11502) --- projects/mimswap/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/mimswap/index.js b/projects/mimswap/index.js index 2a11adf308..3aaae42c05 100644 --- a/projects/mimswap/index.js +++ b/projects/mimswap/index.js @@ -2,6 +2,7 @@ const { getLogs2 } = require('../helper/cache/getLogs') const config = { arbitrum: { factory: '0x8D0Cd3eEf1794F59F2B3a664Ef07fCAD401FEc73', fromBlock: 205217727 }, + ethereum: { factory: '0xDF46F6b1a5F794F21eaD4008C7De4E02Dc045297', fromBlock: 20537337 }, blast: { factory: '0x7E05363E225c1c8096b1cd233B59457104B84908', fromBlock: 1067907 }, kava: { factory: '0x7Ad0e580d8458BbeF71EC6A1755c59651E1EAaa7', fromBlock: 10023543 }, } From d0d7731a3be1766478201aa2952a1a4d03f5e6a6 Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Mon, 2 Sep 2024 11:18:56 -0700 Subject: [PATCH 0232/1768] Add Core (#11501) --- projects/visor/config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/visor/config.js b/projects/visor/config.js index 2135640455..336cd3e712 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -139,6 +139,10 @@ const HYPE_REGISTRY = { iotaevm: [ ["0xF44cECB1CF40ee12303E85Eb8651263c01812EaD", 223591], // wagmi ], + core: [ + ["0x32e27fF479454e32868ff67Ee9F06BAFDC1E908F", 17268275], // Glyph + ["0xFc13Ebe7FEB9595D70195E9168aA7F3acE153621", 17164390], // Glyph + ], }; Object.keys(HYPE_REGISTRY).forEach(chain => { From 373b442ef6090db1d9deb6fe81d9a10d5d0b1dd7 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Tue, 3 Sep 2024 08:22:45 +0700 Subject: [PATCH 0233/1768] update DackieSwap V3 on Blast factory --- projects/dackieswap/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 934bc1cec1..4ae6f29003 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -4,7 +4,7 @@ module.exports = uniV3Export({ base: { factory: "0x3D237AC6D2f425D2E890Cc99198818cc1FA48870", fromBlock: 2031627 }, optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 }, arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, - blast: { factory: "0xd1575B2e0C82fba9Eddc3de9c9AAF923AFA670cC", fromBlock: 286237 }, + blast: { factory: "0xCFC8BfD74422472277fB5Bc4Ec8851d98Ecb2976", fromBlock: 8239180 }, inevm: { factory: "0xf79A36F6f440392C63AD61252a64d5d3C43F860D", fromBlock: 291933 }, mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, xlayer: { factory: "0xc6f3966e5d08ced98ac30f8b65beab5882be54c7", fromBlock: 278971 }, From 2180c5e2268345d817e03a9cc42e5708fceea2a4 Mon Sep 17 00:00:00 2001 From: DackieSwap <132213730+DackieSwap@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:24:46 +0700 Subject: [PATCH 0234/1768] Update DackieSwap V3 on Blast factory (#11503) Co-authored-by: andreapn.eth --- projects/dackieswap/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 934bc1cec1..4ae6f29003 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -4,7 +4,7 @@ module.exports = uniV3Export({ base: { factory: "0x3D237AC6D2f425D2E890Cc99198818cc1FA48870", fromBlock: 2031627 }, optimism: { factory: "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B", fromBlock: 115172042 }, arbitrum: { factory: "0xaEdc38bD52b0380b2Af4980948925734fD54FbF4", fromBlock: 180722131 }, - blast: { factory: "0xd1575B2e0C82fba9Eddc3de9c9AAF923AFA670cC", fromBlock: 286237 }, + blast: { factory: "0xCFC8BfD74422472277fB5Bc4Ec8851d98Ecb2976", fromBlock: 8239180 }, inevm: { factory: "0xf79A36F6f440392C63AD61252a64d5d3C43F860D", fromBlock: 291933 }, mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, xlayer: { factory: "0xc6f3966e5d08ced98ac30f8b65beab5882be54c7", fromBlock: 278971 }, From 9a62948757f28ad8ad8c56c0d0bad143d253fe5f Mon Sep 17 00:00:00 2001 From: 0xyongyong Date: Tue, 3 Sep 2024 16:19:49 +0900 Subject: [PATCH 0235/1768] Update TVL Calculation to Exclude Unstaked Amounts (#11505) --- projects/LairFinance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/LairFinance/index.js b/projects/LairFinance/index.js index 4a7818623e..8e815ec5ce 100644 --- a/projects/LairFinance/index.js +++ b/projects/LairFinance/index.js @@ -4,7 +4,7 @@ const contracts = { } async function tvl(api) { - const tvl = await api.call({ target: contracts.node, abi: "uint256:getTotalStakingAmount" }) + const tvl = await api.call({ target: contracts.node, abi: "uint256:getTotalClaimable" }) api.addGasToken(tvl) } From 00b38f1fbd666ab59aec7e4391482c1d740335e2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:58:19 +0200 Subject: [PATCH 0236/1768] ether fi: track more vaults --- projects/etherfi-lrt/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index cb839dd703..caf312ede9 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -3,6 +3,8 @@ const vaults = [ '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', '0x7223442cad8e9cA474fC40109ab981608F8c4273', '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', + '0x352180974C71f84a934953Cf49C4E538a6F9c997', + '0xeDa663610638E6557c27e2f4e973D3393e844E70', ] module.exports = { From d19618df3aee5e24347d8f0c4b8a146620c2d782 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:13:19 +0100 Subject: [PATCH 0237/1768] add new wallet xlink (#11506) --- projects/xlink/index.js | 108 +++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 61 deletions(-) diff --git a/projects/xlink/index.js b/projects/xlink/index.js index ad6c513dc3..8f37a75f8c 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -1,67 +1,53 @@ -const { sumTokensExport } = require('../helper/sumTokens'); -const ADDRESSES = require('../helper/coreAssets.json'); +const ADDRESSES = require("../helper/coreAssets.json"); +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); -module.exports = { - methodology: "TVL of XLink is the sum of the tokens locked in its contracts", - timetravel: false, -}; +const owners = [ + "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", + "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", + "31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", + "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", + "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", + "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", + "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", + "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", + "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", + "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", + "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", + "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", + "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", + "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", + "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", +]; -const config = { +module.exports = { + methodology: "Staking tokens via AlexLab counts as TVL", bitcoin: { - owners: - [ - 'bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts', - '31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF', - 'bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp', - '32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS', - 'bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58', - '3MJ8mbu4sNseNeCprG85emwgG9G9SCort7', - 'bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft', - 'bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d', - '1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ', - '1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt', - ], + tvl: sdk.util.sumChainTvls([ + sumTokensExport({ owners }), + ]), }, - bsc: { - owners: - [ - '0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5', - // '0x5caeb9d58325044a1ad9d4abff2e0d525928812d' // is EOA - ], - tokens: - [ - ADDRESSES.bsc.USDT, - ADDRESSES.bsc.BTCB - ] + ethereum: { + tvl: sumTokensExport({ + owners: [ + "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", + "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", + "0x13b72A19e221275D3d18ed4D9235F8F859626673", + ], + tokens: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", ADDRESSES.null], + }), }, - ethereum: { - owners: - [ - '0x13b72A19e221275D3d18ed4D9235F8F859626673', - // '0x1bf78679b001c5efa20d80600e085ae52d25abc1' // is EOA - ], - tokens: - [ - ADDRESSES.ethereum.USDT, - ADDRESSES.ethereum.WBTC - ] + bsc: { + tvl: sumTokensExport({ + owners: [ + "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", + "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", + "0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5", + ], + tokens: [ + "0x55d398326f99059fF775485246999027B3197955", + "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + ], + }), }, - stacks: { - owners: - [ - 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.cross-bridge-registry-v2-01', - 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.btc-peg-out-endpoint-v2-01' - ], - blacklistedTokens: - [ - 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-abtc::bridged-btc', - 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex::alex', - ] - }, -} - -Object.keys(config).forEach(chain => { - module.exports[chain] = { - tvl: sumTokensExport(config[chain]) - } -}) \ No newline at end of file +}; From e6d69fd5403eeb107b2bf8330c37ce963fd961bd Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:52:32 +0100 Subject: [PATCH 0238/1768] Revert "add new wallet xlink" (#11507) --- projects/xlink/index.js | 108 +++++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 47 deletions(-) diff --git a/projects/xlink/index.js b/projects/xlink/index.js index 8f37a75f8c..ad6c513dc3 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -1,53 +1,67 @@ -const ADDRESSES = require("../helper/coreAssets.json"); -const sdk = require("@defillama/sdk"); -const { sumTokensExport } = require("../helper/sumTokens"); - -const owners = [ - "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", - "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", - "31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", - "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", - "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", - "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", - "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", - "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", - "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", - "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", - "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", - "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", - "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", - "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", - "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", -]; +const { sumTokensExport } = require('../helper/sumTokens'); +const ADDRESSES = require('../helper/coreAssets.json'); module.exports = { - methodology: "Staking tokens via AlexLab counts as TVL", + methodology: "TVL of XLink is the sum of the tokens locked in its contracts", + timetravel: false, +}; + +const config = { bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), - ]), - }, - ethereum: { - tvl: sumTokensExport({ - owners: [ - "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", - "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", - "0x13b72A19e221275D3d18ed4D9235F8F859626673", + owners: + [ + 'bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts', + '31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF', + 'bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp', + '32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS', + 'bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58', + '3MJ8mbu4sNseNeCprG85emwgG9G9SCort7', + 'bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft', + 'bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d', + '1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ', + '1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt', ], - tokens: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", ADDRESSES.null], - }), }, - bsc: { - tvl: sumTokensExport({ - owners: [ - "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", - "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", - "0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5", - ], - tokens: [ - "0x55d398326f99059fF775485246999027B3197955", - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", - ], - }), + bsc: { + owners: + [ + '0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5', + // '0x5caeb9d58325044a1ad9d4abff2e0d525928812d' // is EOA + ], + tokens: + [ + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BTCB + ] }, -}; + ethereum: { + owners: + [ + '0x13b72A19e221275D3d18ed4D9235F8F859626673', + // '0x1bf78679b001c5efa20d80600e085ae52d25abc1' // is EOA + ], + tokens: + [ + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.WBTC + ] + }, + stacks: { + owners: + [ + 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.cross-bridge-registry-v2-01', + 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.btc-peg-out-endpoint-v2-01' + ], + blacklistedTokens: + [ + 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-abtc::bridged-btc', + 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex::alex', + ] + }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport(config[chain]) + } +}) \ No newline at end of file From de72541440e63f81003f303af0ba9a7ac43270db Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:46:08 +0100 Subject: [PATCH 0239/1768] add aBTC adapter (#11508) --- projects/abtc/index.js | 53 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 projects/abtc/index.js diff --git a/projects/abtc/index.js b/projects/abtc/index.js new file mode 100644 index 0000000000..f3e36991dd --- /dev/null +++ b/projects/abtc/index.js @@ -0,0 +1,53 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); + +const owners = [ + "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", + // "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", tracked on xlink bridge + //"31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", tracked on xlink bridge + // "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", tracked on xlink bridge + // "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", tracked on xlink bridge + // "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", tracked on xlink bridge + // "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", tracked on xlink bridge + // "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", tracked on xlink bridge + // "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", tracked on xlink bridge + // "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", tracked on xlink bridge + // "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", tracked on xlink bridge + "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", + "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", + "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", + "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", +]; + +module.exports = { + methodology: "BTC wallets with aBTC collateral", + bitcoin: { + tvl: sdk.util.sumChainTvls([ + sumTokensExport({ owners }), + ]), + }, + ethereum: { + tvl: sumTokensExport({ + owners: [ + "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", + "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", + // "0x13b72A19e221275D3d18ed4D9235F8F859626673", tracked on xlink bridge + ], + tokens: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", ADDRESSES.null], + }), + }, + bsc: { + tvl: sumTokensExport({ + owners: [ + "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", + "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", + // "0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5", tracked on xlink bridge + ], + tokens: [ + "0x55d398326f99059fF775485246999027B3197955", + "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + ], + }), + }, +}; From cbc8d001e3928a11d2b42623162ad6912e42d046 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:13:21 +0200 Subject: [PATCH 0240/1768] track lista staking #11504 --- projects/helio-money/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index a399cfbd56..6dcb3134de 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -1,4 +1,5 @@ const ADDRESSES = require("../helper/coreAssets.json"); +const { staking } = require("../helper/staking"); const { sumTokensExport } = require("../helper/unknownTokens"); module.exports = { @@ -65,5 +66,6 @@ module.exports = { ], ], }), + staking: staking('0xd0C380D31DB43CD291E2bbE2Da2fD6dc877b87b3','0xFceB31A79F71AC9CBDCF853519c1b12D379EdC46') }, }; From fd716c3428322015378ac820ff3af904381e0ec2 Mon Sep 17 00:00:00 2001 From: David Cumps Date: Tue, 3 Sep 2024 13:50:10 +0200 Subject: [PATCH 0241/1768] Chainflip Missing TVL (#11479) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/chainflip/index.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/projects/chainflip/index.js b/projects/chainflip/index.js index 2d9c8d3ae2..975f0bb523 100644 --- a/projects/chainflip/index.js +++ b/projects/chainflip/index.js @@ -23,13 +23,25 @@ const poolsDataQuery = `{ unavailableAmount } } + allDepositBalances { + groupedAggregates(groupBy: ASSET) { + sum { + amount + } + keys + } + } }` const endpoint = 'https://cache-service.chainflip.io/graphql' async function tvl(api) { // Call GraphQL and get tokens, add each to balance - const { allPools: { nodes }, allBoostPools: { nodes: bNodes } } = await graphQuery(endpoint, poolsDataQuery); + const { + allPools: { nodes }, + allBoostPools: { nodes: bNodes }, + allDepositBalances: { groupedAggregates: uNodes } + } = await graphQuery(endpoint, poolsDataQuery); nodes.forEach(i => { api.add(i.baseAsset, i.baseLiquidityAmount) @@ -39,11 +51,14 @@ async function tvl(api) { api.add(i.asset, i.availableAmount) api.add(i.asset, i.unavailableAmount) }) + uNodes.forEach(i => { + api.add(i.keys[0], i.sum.amount) + }) return sumTokens2({ api }) } module.exports = { - methodology: 'The number of FLIP tokens in the Chainflip State Chain Gateway Contract, as well as the total deployed liquidity.', + methodology: 'The number of FLIP tokens in the Chainflip State Chain Gateway Contract, as well as the total liquidity.', start: 1700740800, // FLIP went live on 2023-11-23 12:00 UTC ethereum: { tvl: () => ({}), From e3a2a893e42a0281f9e5511afb42b7aab5ce2f32 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:52:45 +0100 Subject: [PATCH 0242/1768] fix xlink/abtc (#11512) --- projects/abtc/index.js | 53 ------------------ projects/xlink/index.js | 116 +++++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 113 deletions(-) delete mode 100644 projects/abtc/index.js diff --git a/projects/abtc/index.js b/projects/abtc/index.js deleted file mode 100644 index f3e36991dd..0000000000 --- a/projects/abtc/index.js +++ /dev/null @@ -1,53 +0,0 @@ -const ADDRESSES = require("../helper/coreAssets.json"); -const sdk = require("@defillama/sdk"); -const { sumTokensExport } = require("../helper/sumTokens"); - -const owners = [ - "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", - // "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", tracked on xlink bridge - //"31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", tracked on xlink bridge - // "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", tracked on xlink bridge - // "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", tracked on xlink bridge - // "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", tracked on xlink bridge - // "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", tracked on xlink bridge - // "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", tracked on xlink bridge - // "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", tracked on xlink bridge - // "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", tracked on xlink bridge - // "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", tracked on xlink bridge - "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", - "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", - "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", - "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", -]; - -module.exports = { - methodology: "BTC wallets with aBTC collateral", - bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), - ]), - }, - ethereum: { - tvl: sumTokensExport({ - owners: [ - "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", - "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", - // "0x13b72A19e221275D3d18ed4D9235F8F859626673", tracked on xlink bridge - ], - tokens: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", ADDRESSES.null], - }), - }, - bsc: { - tvl: sumTokensExport({ - owners: [ - "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", - "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", - // "0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5", tracked on xlink bridge - ], - tokens: [ - "0x55d398326f99059fF775485246999027B3197955", - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", - ], - }), - }, -}; diff --git a/projects/xlink/index.js b/projects/xlink/index.js index ad6c513dc3..d0b73e3033 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -1,67 +1,63 @@ -const { sumTokensExport } = require('../helper/sumTokens'); -const ADDRESSES = require('../helper/coreAssets.json'); +const ADDRESSES = require("../helper/coreAssets.json"); +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); -module.exports = { - methodology: "TVL of XLink is the sum of the tokens locked in its contracts", - timetravel: false, -}; +const owners = [ + "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", + "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", + "31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", + "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", + "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", + "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", + "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", + "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", + "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", + "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", + "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", + "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", + "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", + "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", + "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", +]; -const config = { +module.exports = { + methodology: "Staking tokens via AlexLab counts as TVL", bitcoin: { - owners: - [ - 'bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts', - '31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF', - 'bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp', - '32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS', - 'bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58', - '3MJ8mbu4sNseNeCprG85emwgG9G9SCort7', - 'bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft', - 'bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d', - '1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ', - '1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt', + tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), + }, + ethereum: { + tvl: sumTokensExport({ + owners: [ + "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", + "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", + "0x13b72A19e221275D3d18ed4D9235F8F859626673", ], + tokens: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", ADDRESSES.null], + }), }, - bsc: { - owners: - [ - '0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5', - // '0x5caeb9d58325044a1ad9d4abff2e0d525928812d' // is EOA - ], - tokens: - [ - ADDRESSES.bsc.USDT, - ADDRESSES.bsc.BTCB - ] + bsc: { + tvl: sumTokensExport({ + owners: [ + "0x7ceC01355aC0791dE5b887e80fd20e391BCB103a", + "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", + "0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5", + ], + tokens: [ + "0x55d398326f99059fF775485246999027B3197955", + "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + ], + }), }, - ethereum: { - owners: - [ - '0x13b72A19e221275D3d18ed4D9235F8F859626673', - // '0x1bf78679b001c5efa20d80600e085ae52d25abc1' // is EOA - ], - tokens: - [ - ADDRESSES.ethereum.USDT, - ADDRESSES.ethereum.WBTC - ] + stacks: { + tvl: sumTokensExport({ + owners: [ + "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.cross-bridge-registry-v2-01", + "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.btc-peg-out-endpoint-v2-01", + ], + blacklistedTokens: [ + "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-abtc::bridged-btc", + "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex::alex", + ], + }), }, - stacks: { - owners: - [ - 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.cross-bridge-registry-v2-01', - 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.btc-peg-out-endpoint-v2-01' - ], - blacklistedTokens: - [ - 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-abtc::bridged-btc', - 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex::alex', - ] - }, -} - -Object.keys(config).forEach(chain => { - module.exports[chain] = { - tvl: sumTokensExport(config[chain]) - } -}) \ No newline at end of file +}; From 317c4a75f7b80c2f06fed790dd411244ee2d4068 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:13:08 +0100 Subject: [PATCH 0243/1768] blofin wallets (#11516) --- projects/blofin-cex/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/blofin-cex/index.js b/projects/blofin-cex/index.js index 89cc7840ac..0a0580fc1b 100644 --- a/projects/blofin-cex/index.js +++ b/projects/blofin-cex/index.js @@ -2,7 +2,7 @@ const { cexExports } = require("../helper/cex"); const config = { bitcoin: { - owners: ["1PM8huQVFSirUT7eAwNm3rBBYTsDRzCaf3", "1Jw4meLNYAaDcNxJwQdMTRVw74hGPcuV8W"], + owners: ["1PM8huQVFSirUT7eAwNm3rBBYTsDRzCaf3", "1Jw4meLNYAaDcNxJwQdMTRVw74hGPcuV8W", "bc1q6377fdmkvkhgzpw8drgu76jxulsl5wmmgwtrxu"], }, bsc: { owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], @@ -13,12 +13,14 @@ const config = { "0xe5e6c3ced4670697b7cB27a53649a3ED321c18ee", "0xdBdf80D997cFAaAC6150cD0cEC2C127fDaD7A823", "0x88C984990573d385949deB571ed21eaD63301045", + "0xD775Ad8d9B9130B5D609Dc065BD548E46A6610b6" ], }, solana: { owners: [ "94xmX5J92nZLanLvRstmxhgiS8kN8SVfFQ2zPKYB3Ynb", "E3Gd8Hd1yKdkHTQnbenNVBgV2p1MrrenQnVU4SkJD4zx", + "3oWiTmU5QpTbSuTCVULybWsXc3DVxixdABxJPerLgTai" ], }, optimism: { @@ -31,9 +33,9 @@ const config = { owners: [ "TDFHcjw2PiDLjoqxXedaSSEtA1osqu8J6c", "TE4uQTkFMcjm7UVYeQCgTHuec1pFP5J4Ds", - "TDFHcjw2PiDLjoqxXedaSSEtA1osqu8J6c", "TRzpEdrAwHXPQYWvXHJArpcac2WV3gXMr3", "TVNRJgNsVMjDPethVVToz9aSvZq9SVgDXv", + "THTGgHWFXwgaZEDdaQmR6iuUEa7NKfCUtH" ], }, polygon: { From 1f97f5624bb0a6de4a9854c82fb3d262182eef12 Mon Sep 17 00:00:00 2001 From: George Bibilashvili Date: Tue, 3 Sep 2024 20:06:31 +0400 Subject: [PATCH 0244/1768] feat: add mode and wftm tokens (#11515) --- projects/lynx/index.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/projects/lynx/index.js b/projects/lynx/index.js index 84a8d36aee..f3216881ca 100644 --- a/projects/lynx/index.js +++ b/projects/lynx/index.js @@ -12,8 +12,24 @@ const config = { ], ], }, + mode: { + tokenAndOwnerPair: [ + [ + // MODE Token + "0xDfc7C877a950e49D2610114102175A06C2e3167a", + // OFTChipAdapter (owner) + "0x3b7ED1cDF0Fc64d95c0D0428b9Cc99b6A9a5CB94", + ], + ], + }, fantom: { tokenAndOwnerPair: [ + [ + // WFTM Token + "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + // OFTChipAdapter (owner) + "0x614aA983f54409D475aeC5D18120FECFD6320eF4" + ], [ // FTM Token "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -26,7 +42,7 @@ const config = { // OFTChipAdapter (owner) "0x194609ea1C1D77e66eaB28C48CE266A48f3bC30a", ], - [ + [ // FSONIC Token "0x05e31a691405d06708a355c029599c12d5da8b28", // OFTChipAdapter (owner) From 52507d96eb4cbb5ce3eb80f7d195a6dd426e988a Mon Sep 17 00:00:00 2001 From: WindowAzure Date: Wed, 4 Sep 2024 00:08:46 +0800 Subject: [PATCH 0245/1768] update hibt walllet (#11511) --- projects/hibt/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/hibt/index.js b/projects/hibt/index.js index f2544d5e6a..d8c8e2d9d7 100644 --- a/projects/hibt/index.js +++ b/projects/hibt/index.js @@ -13,7 +13,8 @@ const config = { }, tron: { owners: [ - 'TWVCro8i15sJjmwRKfV53gPnCsgz2ThQSc' + 'TWVCro8i15sJjmwRKfV53gPnCsgz2ThQSc', + 'TGoPfFBjoZ6wFFia1NAFio21Pi9Sc8KFw5' ] }, } From eaf7b215279de2eb4c5b75b9de4e71231d190929 Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:09:12 +0200 Subject: [PATCH 0246/1768] SwissBorg: Add new ETH wallet (#11510) --- projects/swissborg/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index 77d068e1ef..f326c54b1b 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -16,6 +16,7 @@ const config = { '0x11444C6389A26C8E41d7FD5CafBfCC511303b7d3', '0x67FE3293FC4e877F3CDc3F0ed93721a600f72BdE', '0x178Fb204c1ff2Ed7d0651C522A3a5B15480Eb76d', + '0xFbA64167e4f091Ca625FA79aa6f83665856f8Bf2', ], }, bitcoin: { From fcc1f27ac2d641207725370b04a99794ceff09fa Mon Sep 17 00:00:00 2001 From: "BT.Wood(Tang Bo Hao)" Date: Wed, 4 Sep 2024 00:09:49 +0800 Subject: [PATCH 0247/1768] update Fixes TVL (#11509) --- projects/fixes-frc20/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/projects/fixes-frc20/index.js b/projects/fixes-frc20/index.js index 588f1d23d8..a7ad4625df 100644 --- a/projects/fixes-frc20/index.js +++ b/projects/fixes-frc20/index.js @@ -6,6 +6,9 @@ import FRC20Indexer from 0xd2abb5dbf5e08666 import FGameLottery from 0xd2abb5dbf5e08666 import FGameLotteryRegistry from 0xd2abb5dbf5e08666 import FGameLotteryFactory from 0xd2abb5dbf5e08666 +import FRC20FTShared from 0xd2abb5dbf5e08666 +import FRC20Staking from 0xd2abb5dbf5e08666 +import FRC20AccountsPool from 0xd2abb5dbf5e08666 access(all) fun main(): UFix64 { @@ -17,6 +20,7 @@ fun main(): UFix64 { let balance = indexer.getPoolBalance(tick: tick) totalBalance = totalBalance + balance } + // FLOW lottery jackpot balance let registry = FGameLotteryRegistry.borrowRegistry() let flowLotteryPoolName = FGameLotteryFactory.getFIXESMintingLotteryPoolName() @@ -26,6 +30,18 @@ fun main(): UFix64 { totalBalance = totalBalance + jackpotBalance } } + + // Unclaimed FLOW Reward in the staking reward pool + let acctsPool = FRC20AccountsPool.borrowAccountsPool() + let platformStakingTick = FRC20FTShared.getPlatformStakingTickerName() + if let stakingPoolAddr = acctsPool.getFRC20StakingAddress(tick: platformStakingTick) { + if let stakingPool = FRC20Staking.borrowPool(stakingPoolAddr) { + if let detail = stakingPool.getRewardDetails("") { + totalBalance = totalBalance + detail.totalReward + } + } + } + return totalBalance } `; From adadf65707bcb7593d76f556151dabe9f5b2ae6b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:12:49 +0200 Subject: [PATCH 0248/1768] allstake track ethereum #11513 --- projects/allstake/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/allstake/index.js b/projects/allstake/index.js index a685108ede..bb58a5242c 100644 --- a/projects/allstake/index.js +++ b/projects/allstake/index.js @@ -1,12 +1,20 @@ const { getUniqueAddresses } = require('../helper/utils'); const { call, sumTokens } = require('../helper/chain/near'); const { sumTokens2, getProvider } = require('../helper/solana'); +const { sumTokens2: evmSumTokens2 } = require("../helper/unwrapLPs") const { Program } = require('@coral-xyz/anchor'); const { PublicKey } = require('@solana/web3.js'); const ALLSTAKE_NEAR_CONTRACT = 'allstake.near'; const ALLSTAKE_SOLANA_PROGRAM = new PublicKey('a11zL6Uxue6mYG3JD3APmnVhS4RVjGTJZbENY7L6ZfD'); const ALLSTAKE_SOLANA_PROGRAM_IDL = require('./idls/strategy_manager.json'); +const ALLSTAKE_ETHEREUM_STRATEGY_MANAGER_CONTRACT = '0x344F8B88357A710937f2b3db9d1B974B9a002afB'; + +async function ethereumTvl(api) { + const strategies = await api.fetchList({ lengthAbi: 'strategiesLen', itemAbi: 'strategies', target: ALLSTAKE_ETHEREUM_STRATEGY_MANAGER_CONTRACT}) + const tokens = await api.multiCall({ abi: 'address:underlying', calls: strategies }); + return evmSumTokens2({ api, tokensAndOwners2: [tokens, strategies] }); +} async function nearTvl() { const strategies = await call(ALLSTAKE_NEAR_CONTRACT, 'get_strategies', {}); @@ -51,6 +59,9 @@ module.exports = { solana: { tvl: solanaTvl, }, + ethereum: { + tvl: ethereumTvl, + }, timetravel: false, methodology: 'Summed up all the tokens deposited in the contract', } From 1acbf4addab0dce31e771b1d6a7c7299348fb880 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:25:59 +0200 Subject: [PATCH 0249/1768] update mars #11484 --- projects/mars/index.js | 126 +++++++++++++++++++++++------------------ 1 file changed, 71 insertions(+), 55 deletions(-) diff --git a/projects/mars/index.js b/projects/mars/index.js index 87ebb954c3..cf04cbedc0 100644 --- a/projects/mars/index.js +++ b/projects/mars/index.js @@ -1,85 +1,101 @@ -const sdk = require('@defillama/sdk'); -const { endPoints, queryContract, sumTokens} = require('../helper/chain/cosmos'); -const { getChainTransform } = require('../helper/portedTokens'); -const { get } = require('../helper/http'); +const { queryContract } = require('../helper/chain/cosmos'); -const addresses = { +const contractAddresses = { osmosis: { + params: 'osmo1nlmdxt9ctql2jr47qd4fpgzg84cjswxyw6q99u4y4u4q6c2f5ksq7ysent', redBank: 'osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg', - creditManager: 'osmo1f2m24wktq0sw3c0lexlg7fv4kngwyttvzws3a3r3al9ld2s2pvds87jqvf', - params: 'osmo1nlmdxt9ctql2jr47qd4fpgzg84cjswxyw6q99u4y4u4q6c2f5ksq7ysent' }, neutron: { + params: 'neutron1x4rgd7ry23v2n49y7xdzje0743c5tgrnqrqsvwyya2h6m48tz4jqqex06x', redBank: 'neutron1n97wnm7q6d2hrcna3rqlnyqw2we6k0l8uqvmyqq6gsml92epdu7quugyph', - creditManager: 'neutron1qdzn3l4kn7gsjna2tfpg3g3mwd6kunx4p50lfya59k02846xas6qslgs3r', - params: 'neutron1x4rgd7ry23v2n49y7xdzje0743c5tgrnqrqsvwyya2h6m48tz4jqqex06x' - } + }, } +async function tvl(api) { + const chain = api.chain + const { params, redBank } = contractAddresses[chain]; + let startAfter = null; + const pageLimit = 5; -// OSMOSIS + do { + const assetParams = await queryContract({ + contract: params, + chain, + data: { 'all_asset_params': { limit: pageLimit, 'start_after': startAfter } } + }); -async function osmosisTVL() { - let balances = {}; - await addRedBankTvl(balances, 'osmosis'); - await addCreditManagerTvl(balances, 'osmosis'); - return balances; -} + if (assetParams.length === pageLimit) + startAfter = assetParams[assetParams.length - 1].denom; + else + startAfter = null; -// NEUTRON -async function neutronTVL() { - let balances = {}; - await addRedBankTvl(balances, 'neutron'); - await addCreditManagerTvl(balances, 'neutron'); - return balances; -} + await addCoinsFromAssetParams(assetParams); + } while (startAfter) -// HELPERS -async function addRedBankTvl(balances, chain) { - await sumTokens({balances, owners: [addresses[chain].redBank], chain}); -} + do { + const markets = await queryContract({ + contract: contractAddresses[chain].redBank, + chain, + data: { 'markets': { limit: pageLimit, 'start_after': startAfter } } + }); -async function addCreditManagerTvl(balances, chain) { - await sumTokens({balances, owners: [addresses[chain].creditManager], chain}); -} + if (markets.length === pageLimit) + startAfter = markets[markets.length - 1].denom; + else + startAfter = null; -function getEndpoint(chain) { - if (!endPoints[chain]) throw new Error('Chain not found: ' + chain); - return endPoints[chain]; -} -async function cosmosLCDQuery(url, chain) { - let endpoint = `${getEndpoint(chain)}/${url}`; - let request = await get(endpoint); - return request; -} + await deductCoinsFromMarkets(markets); + } while (startAfter) + + async function addCoinsFromAssetParams(assetParams) { + const assetDenoms = assetParams.map(asset => asset.denom); -async function cosmosDenomBalanceStr(chain, denom, owner) { - let url = `cosmos/bank/v1beta1/balances/${owner}/by_denom?denom=${denom}`; - let balance = await cosmosLCDQuery(url, chain); - return balance.balance.amount; + // query the deposited amount for each asset and add it to the depositCoins array + await Promise.all(assetDenoms.map(async denom => { + let totalDepositInfo = await queryContract({ + contract: params, chain, + data: { 'total_deposit': { 'denom': denom, } } + }); + api.add(denom, totalDepositInfo.amount); + })); + } + + async function deductCoinsFromMarkets(markets) { + + // query the underlying debt amount from the debt_total_scaled + await Promise.all(markets.map(async market => { + let totalDebt = await queryContract({ + contract: redBank, chain, + data: { + 'underlying_debt_amount': { + 'denom': market.denom, + 'amount_scaled': market['debt_total_scaled'] + } + } + }); + api.add(market.denom, totalDebt * -1) + })); + } } + module.exports = { timetravel: false, - methodology: 'For each chain, sum token balances in Red Bank/Credit Manager smart contracts to approximate net deposits, plus vault underlying assets held in Rover', - osmosis: { - tvl: osmosisTVL, - }, - neutron: { - tvl: neutronTVL, - }, + methodology: 'For each chain, sum token balances by querying the total deposit amount for each asset in the chain\'s params contract.', + osmosis: { tvl, }, + neutron: { tvl, }, terra: { tvl: () => 0, }, - hallmarks:[ + hallmarks: [ [1651881600, 'UST depeg'], [1675774800, 'Relaunch on Osmosis'], - [1690945200, 'Red Bank launch on Neutron'], - [1696906800, 'Mars V2 launch on Osmosis'], - [1724166000, 'Mars v2 Launch on Neutron'] + [1690945200, 'Launch on Neutron'], + [1696906800, 'Mars v2 launch on Osmosis'], + [1724166000, 'Mars v2 launch on Neutron'] ] }; From 54b38a9b948f966d54be0e63ba55e3e45c235363 Mon Sep 17 00:00:00 2001 From: Daniel Schaffield <56415596+kiwi0401@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:33:10 -0700 Subject: [PATCH 0250/1768] add linea vault to affine (#11455) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/affine-defi-liquid/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/projects/affine-defi-liquid/index.js b/projects/affine-defi-liquid/index.js index 3399d44ae4..24ad3ae987 100644 --- a/projects/affine-defi-liquid/index.js +++ b/projects/affine-defi-liquid/index.js @@ -1,5 +1,19 @@ const { sumERC4626VaultsExport } = require('../helper/erc4626') +// LINEA +const LINEA_VAULT = "0xB838Eb4F224c2454F2529213721500faf732bf4d" + +async function addL2TVL(api, target) { + const tokens = await api.call({abi: 'erc20:totalSupply', target: target}) + const sharePrice = await api.call({abi: 'uint256:sharePrice', target: target}) + const decimals = await api.call({abi: 'uint256:decimals', target: target}) + + // Convert to human-readable format + const totalInEth = tokens * sharePrice / 10 ** decimals + + api.addGasToken(totalInEth) +} + module.exports = { doublecounted: true, ethereum: { @@ -11,4 +25,7 @@ module.exports = { isOG4626: true, }), }, + linea: { + tvl: async (api) => await addL2TVL(api, LINEA_VAULT) + }, } From 6b2b84e8b5be457709898066a018a21d582773fb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:44:53 +0200 Subject: [PATCH 0251/1768] refactor penpie --- projects/penpie/index.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/projects/penpie/index.js b/projects/penpie/index.js index 6a4d98f2f1..6c6d6534de 100644 --- a/projects/penpie/index.js +++ b/projects/penpie/index.js @@ -3,19 +3,17 @@ const config = require("./config"); const { staking } = require('../helper/staking') async function tvl(api) { - const { masterPenpie, vlPNP } = config[api.chain]; + const { masterPenpie, vlPNP, pendleStaking, mPENDLE, } = config[api.chain]; const poolTokens = await api.fetchList({ lengthAbi: MasterMagpieAbi.poolLength, itemAbi: MasterMagpieAbi.registeredToken, target: masterPenpie, }); - const poolInfos = await api.multiCall({ abi: 'function getPoolInfo(address) view returns ( uint256 emission, uint256 allocpoint, uint256 sizeOfPool, uint256 totalPoint)', calls: poolTokens, target: masterPenpie, }) - poolTokens.forEach((token, i) => { - api.add(token, poolInfos[i].sizeOfPool) - }) - if (vlPNP) - api.removeTokenBalance(vlPNP) + const blacklistedTokens = [] + if (vlPNP) blacklistedTokens.push(vlPNP) + if (mPENDLE && masterPenpie) await api.sumTokens({ tokens: [mPENDLE], owner: masterPenpie }) + return api.sumTokens({ tokens: poolTokens, owner: pendleStaking, blacklistedTokens }) } Object.keys(config).forEach((chain) => { From 82388d35337a067e3215806b8320271ef3f16b88 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 4 Sep 2024 05:37:14 +0100 Subject: [PATCH 0252/1768] temporarily disable bsc --- projects/vfat/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/vfat/config.js b/projects/vfat/config.js index 3a3692d452..3afb4e0028 100644 --- a/projects/vfat/config.js +++ b/projects/vfat/config.js @@ -72,10 +72,10 @@ module.exports = { fromBlockSickle: 62383980, moeMasterchef: '0xA756f7D419e1A5cbd656A438443011a7dE1955b5' }, - bsc: { + /*bsc: { factory: '0x53d9780DbD3831E3A797Fd215be4131636cD5FDf', chainName: 'bsc', masterchefV3: '0x556B9306565093C855AEA9AE92A594704c2Cd59e', fromBlockSickle: 37565801 - }, + },*/ } \ No newline at end of file From d1e9d294d4a2a476e1eeb339ced510c7f7594a69 Mon Sep 17 00:00:00 2001 From: idea2409 <60475612+idea2409@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:41:11 +0700 Subject: [PATCH 0253/1768] update fwx tvl (#11518) Co-authored-by: ideapacito Co-authored-by: ideapacito Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/fwx/index.js | 57 ++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/projects/fwx/index.js b/projects/fwx/index.js index 20fe4a4eaa..c5a59d4659 100644 --- a/projects/fwx/index.js +++ b/projects/fwx/index.js @@ -1,37 +1,54 @@ -const { getLogs2 } = require('../helper/cache/getLogs') const { getConfig } = require('../helper/cache') -const xliplessDex = "0x82E90fB94fd9a5C19Bf38648DD2C9639Bde67c74" - module.exports = { avax: { tvl, }, + base: { + tvl, + } +} + +const dexes = { + avax: [ + "0x82E90fB94fd9a5C19Bf38648DD2C9639Bde67c74", // xliplessDex + ], + base: [ + "0xaf5a41Ad65752B3CFA9c7F90a516a1f7b3ccCdeD" // perp + ] } async function tvl(api) { - const { assets } = await getConfig('fwx/'+api.chain, "https://app.fwx.finance/api/v2/assets?chain_id=43114") + + const { assets } = await getConfig('fwx/' + api.chain, "https://app.fwx.finance/api/v2/assets?chain_id=" + api.chainId) let tokensAndOwners = []; for (let i = 0; i < assets.length; i++) { const asset = assets[i] - tokensAndOwners.push( - [asset.token_address, asset.pool_address], - [asset.token_address, asset.core_address], - [asset.token_address, xliplessDex], - ); + const tokenAddr = asset.token_address + const poolAddr = asset.pool_address + const coreAddr = asset.core_address + const dexAddrs = dexes[api.chain] + + if (poolAddr != "") { + tokensAndOwners.push( + [tokenAddr, poolAddr], + ); + } + + if (coreAddr != "") { + tokensAndOwners.push( + [tokenAddr, coreAddr], + ); + } + + for (let i = 0; i < dexAddrs.length; i++) { + const dexAddr = dexAddrs[i] + tokensAndOwners.push( + [tokenAddr, dexAddr], + ); + } } - const FACTORY_SUB_MODULE_PROXY = '0x54b048eB204B7CbBb469901fdb5BbfB80d0F0CD1' - const logs = await getLogs2({ - api, - factory: FACTORY_SUB_MODULE_PROXY, - eventAbi: "event CreateMarket(address indexed creator, address core, address collateralPool, address collateralToken, address underlyingPool, address underlyingToken, bytes32 pairbytes)", - fromBlock: 46125548, - }) - logs.forEach(i => { - tokensAndOwners.push([i.collateralToken, i.collateralPool]) - tokensAndOwners.push([i.underlyingToken, i.underlyingPool]) - }) return api.sumTokens({ tokensAndOwners }) } From 7faa35286645bf47184f17a861044fca739854e1 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:45:58 +0200 Subject: [PATCH 0254/1768] track perfect pool #11517 --- projects/perfect-pool/index.js | 11 +++++++++++ projects/treasury/perfect-pool.js | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 projects/perfect-pool/index.js create mode 100644 projects/treasury/perfect-pool.js diff --git a/projects/perfect-pool/index.js b/projects/perfect-pool/index.js new file mode 100644 index 0000000000..dd2fe8827c --- /dev/null +++ b/projects/perfect-pool/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") +const ADDRESSES = require('../helper/coreAssets.json') + +const NFT_ACE8 = '0x21F3ea812734b6492D88D268622CF068e9E6D596' + +module.exports = { + start: 1725311445, + base: { + tvl: sumTokensExport({ owner: NFT_ACE8, token: ADDRESSES.base.USDC }), + } +} \ No newline at end of file diff --git a/projects/treasury/perfect-pool.js b/projects/treasury/perfect-pool.js new file mode 100644 index 0000000000..d902784660 --- /dev/null +++ b/projects/treasury/perfect-pool.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") +const ADDRESSES = require('../helper/coreAssets.json') + +const TREASURY = '0xFe4559392aF0E6988F2d7A4E6447a2E702Ff215d' + +module.exports = { + start: 1725311445, + base: { + tvl: sumTokensExport({ owner: TREASURY, token: ADDRESSES.base.USDC }), + } +} \ No newline at end of file From afd328a6e6e8ea23fddd6eb56f983c9d384c3026 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 4 Sep 2024 10:38:04 +0100 Subject: [PATCH 0255/1768] fix fake token --- projects/euler-v2/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/euler-v2/index.js b/projects/euler-v2/index.js index 10ba888351..b68875c0ab 100644 --- a/projects/euler-v2/index.js +++ b/projects/euler-v2/index.js @@ -1,3 +1,5 @@ +const { sumTokens2 } = require("../helper/unwrapLPs") + module.exports = { methodology: `TVL is supply balance minus borrows the euler contract.`, } @@ -18,7 +20,7 @@ Object.keys(config).forEach(chain => { module.exports[chain] = { tvl: async (api) => { const { vaults, tokens } = await getVaults(api) - return api.sumTokens({ tokensAndOwners2: [tokens, vaults] }) + return sumTokens2({ api, tokensAndOwners2: [tokens, vaults], permitFailure: true }) }, borrowed: async (api) => { const { vaults, tokens } = await getVaults(api) From a10c060250f40dec68abec63417441ba2015ec42 Mon Sep 17 00:00:00 2001 From: 0xton <0xton@proton.me> Date: Wed, 4 Sep 2024 18:27:23 +0800 Subject: [PATCH 0256/1768] Add Torch Finance - StableSwap and Weighted Pool on TON blockchain (#11520) Co-authored-by: grace0950 --- projects/torch/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/torch/index.js diff --git a/projects/torch/index.js b/projects/torch/index.js new file mode 100644 index 0000000000..a349c83aeb --- /dev/null +++ b/projects/torch/index.js @@ -0,0 +1,14 @@ +const ADDRESSES = require("../helper/coreAssets.json") +const { sumTokensExport } = require('../helper/chain/ton') + +const ROUTER = 'EQCaEOMOR2SRcXTVSolw--rY62ghCoCRjn4Is3bBdnqYwIVZ' + +module.exports = { + timetravel: false, + ton: { + tvl: sumTokensExport({ + owners: [ROUTER], + tokens: ADDRESSES.ton.TON, + }) + }, +} \ No newline at end of file From 7df5fa5a1caa31f6fc2f6ff4e7f6c500fb1554c7 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:30:10 +0200 Subject: [PATCH 0257/1768] minor fix --- projects/torch/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/torch/index.js b/projects/torch/index.js index a349c83aeb..27943f7b33 100644 --- a/projects/torch/index.js +++ b/projects/torch/index.js @@ -8,7 +8,7 @@ module.exports = { ton: { tvl: sumTokensExport({ owners: [ROUTER], - tokens: ADDRESSES.ton.TON, + tokens: [ADDRESSES.ton.TON], }) }, } \ No newline at end of file From 1878c28c3c9a6361207f9cd2e6017e4de15ce348 Mon Sep 17 00:00:00 2001 From: James Stevens Date: Wed, 4 Sep 2024 06:54:54 -0400 Subject: [PATCH 0258/1768] Adding Lombard (LBTC) (#11458) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lombard/index.js | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 projects/lombard/index.js diff --git a/projects/lombard/index.js b/projects/lombard/index.js new file mode 100644 index 0000000000..a5e6e41636 --- /dev/null +++ b/projects/lombard/index.js @@ -0,0 +1,42 @@ +const { getConfig } = require('../helper/cache') +const { sumTokens } = require('../helper/chain/bitcoin') +const { get } = require('../helper/http') +const sdk = require('@defillama/sdk') + +const API_URL = 'https://mainnet.prod.lombard.finance/api/v1/addresses' +const BATCH_SIZE = 1000 + +async function getAllAddresses() { + let allAddresses = [] + let offset = 0 + let hasMore = true + let batchNumber = 1 + + while (hasMore) { + const response = await get(`${API_URL}?limit=${BATCH_SIZE}&offset=${offset}`) + const data = response.addresses + + const newAddresses = data.map(a => a.btc_address) + allAddresses = allAddresses.concat(newAddresses) + + sdk.log(`Batch ${batchNumber} completed: ${newAddresses.length} addresses`) + + hasMore = response.has_more + offset += BATCH_SIZE + batchNumber++ + } + + return allAddresses +} + +async function tvl() { + const addresses = await getConfig('lombard', undefined, { fetcher: getAllAddresses}) + return sumTokens({ owners: addresses }) +} + +module.exports = { + timetravel: false, + bitcoin: { + tvl + } +} \ No newline at end of file From f65b8eb339e757442e9a07439fd6efe9b327edc4 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:44:03 +0200 Subject: [PATCH 0259/1768] fix gaspump #11499 --- projects/gaspump/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/gaspump/index.js b/projects/gaspump/index.js index 1d0fccd90c..364e279233 100644 --- a/projects/gaspump/index.js +++ b/projects/gaspump/index.js @@ -4,7 +4,7 @@ const { fetchURL } = require('../helper/utils'); async function fetchTvl(api) { const response = await fetchURL("https://api.gas111.com/api/v1/internal/tokens/balances-list") for (const pool of response.data) { - api.add(ADDRESSES.ton.TON, pool.bonding_curve_balance/2) // we include only the TON part of the pool + api.add(ADDRESSES.ton.TON, pool.bonding_curve_balance) } } From 08c06fe84004bbd527f2f72f36f4339178cb4f2b Mon Sep 17 00:00:00 2001 From: Kumar Nilay Date: Wed, 4 Sep 2024 18:52:44 +0530 Subject: [PATCH 0260/1768] adding LemonX to DefiLlama (#11522) --- projects/lemonX/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/lemonX/index.js diff --git a/projects/lemonX/index.js b/projects/lemonX/index.js new file mode 100644 index 0000000000..bc6051bb81 --- /dev/null +++ b/projects/lemonX/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + core: { + tvl: gmxExports({ vault: '0xC2acC8e5Be6613f53C71AE5E386D39a40a4761aA', }) + }, +} \ No newline at end of file From c50a4730b63442aed10cebe71448019198333ab0 Mon Sep 17 00:00:00 2001 From: Linkie Link Date: Wed, 4 Sep 2024 15:26:35 +0200 Subject: [PATCH 0261/1768] add underlying pool assets to TVL of Mars Protocol (#11523) --- projects/mars/index.js | 115 +++++++++++++++++++++++++---------------- 1 file changed, 70 insertions(+), 45 deletions(-) diff --git a/projects/mars/index.js b/projects/mars/index.js index cf04cbedc0..6894881fe6 100644 --- a/projects/mars/index.js +++ b/projects/mars/index.js @@ -1,5 +1,6 @@ - const { queryContract } = require('../helper/chain/cosmos'); +const axios = require('axios'); +const BigNumber = require('bignumber.js'); const contractAddresses = { osmosis: { @@ -10,10 +11,15 @@ const contractAddresses = { params: 'neutron1x4rgd7ry23v2n49y7xdzje0743c5tgrnqrqsvwyya2h6m48tz4jqqex06x', redBank: 'neutron1n97wnm7q6d2hrcna3rqlnyqw2we6k0l8uqvmyqq6gsml92epdu7quugyph', }, -} +}; + +const poolsApis = { + osmosis: 'https://api.astroport.fi/api/pools?chainId=osmosis-1', + neutron: 'https://api.astroport.fi/api/pools?chainId=neutron-1', +}; async function tvl(api) { - const chain = api.chain + const chain = api.chain; const { params, redBank } = contractAddresses[chain]; let startAfter = null; const pageLimit = 5; @@ -22,72 +28,91 @@ async function tvl(api) { const assetParams = await queryContract({ contract: params, chain, - data: { 'all_asset_params': { limit: pageLimit, 'start_after': startAfter } } + data: { all_asset_params: { limit: pageLimit, start_after: startAfter } }, }); - if (assetParams.length === pageLimit) - startAfter = assetParams[assetParams.length - 1].denom; - else - startAfter = null; - + if (assetParams.length === pageLimit) startAfter = assetParams[assetParams.length - 1].denom; + else startAfter = null; await addCoinsFromAssetParams(assetParams); - } while (startAfter) - + } while (startAfter); do { const markets = await queryContract({ contract: contractAddresses[chain].redBank, chain, - data: { 'markets': { limit: pageLimit, 'start_after': startAfter } } + data: { 'markets': { 'limit': pageLimit, 'start_after': startAfter } }, }); - if (markets.length === pageLimit) - startAfter = markets[markets.length - 1].denom; - else - startAfter = null; - + if (markets.length === pageLimit) startAfter = markets[markets.length - 1].denom; + else startAfter = null; await deductCoinsFromMarkets(markets); - } while (startAfter) + } while (startAfter); async function addCoinsFromAssetParams(assetParams) { - const assetDenoms = assetParams.map(asset => asset.denom); + const assetDenoms = assetParams.map((asset) => asset.denom); + + // fetch pool infos from the poolsApi based on chain + const poolInfos = await axios.get(poolsApis[chain]); // query the deposited amount for each asset and add it to the depositCoins array - await Promise.all(assetDenoms.map(async denom => { - let totalDepositInfo = await queryContract({ - contract: params, chain, - data: { 'total_deposit': { 'denom': denom, } } - }); - api.add(denom, totalDepositInfo.amount); - })); + await Promise.all( + assetDenoms.map(async (denom) => { + const totalDepositInfo = await queryContract({ + contract: params, + chain, + data: { 'total_deposit': { 'denom': denom } }, + }); + // check if the token is a liquidity pool share (deposited via farm) + // and find it in the api data + const poolInfo = poolInfos.data.find((pool) => pool.lpAddress === denom); + + if (poolInfo) { + // check for the underlying asset and calculate how much underlying assets a pool share holds + const totalShares = poolInfo.poolTotalShare; + const poolAssets = poolInfo.assets; + poolAssets.forEach((asset) => { + const amount = new BigNumber(asset.amount); + const amountPerShare = amount.div(totalShares); + + // add the underlying tokens to the api + api.add(asset.denom, amountPerShare.times(totalDepositInfo.amount).integerValue(BigNumber.ROUND_DOWN).toString()); + }); + } else { + // if the it's a token and not a liquidity pool share, add it to the api + api.add(denom, totalDepositInfo.amount); + } + }), + ); } async function deductCoinsFromMarkets(markets) { - // query the underlying debt amount from the debt_total_scaled - await Promise.all(markets.map(async market => { - let totalDebt = await queryContract({ - contract: redBank, chain, - data: { - 'underlying_debt_amount': { - 'denom': market.denom, - 'amount_scaled': market['debt_total_scaled'] - } - } - }); - api.add(market.denom, totalDebt * -1) - })); + await Promise.all( + markets.map(async (market) => { + const totalDebt = await queryContract({ + contract: redBank, + chain, + data: { + 'underlying_debt_amount': { + 'denom': market.denom, + 'amount_scaled': market['debt_total_scaled'], + }, + }, + }); + api.add(market.denom, totalDebt * -1); + }), + ); } } - module.exports = { timetravel: false, - methodology: 'For each chain, sum token balances by querying the total deposit amount for each asset in the chain\'s params contract.', - osmosis: { tvl, }, - neutron: { tvl, }, + methodology: + "For each chain, sum token balances by querying the total deposit amount for each asset in the chain's params contract.", + osmosis: { tvl }, + neutron: { tvl }, terra: { tvl: () => 0, }, @@ -96,6 +121,6 @@ module.exports = { [1675774800, 'Relaunch on Osmosis'], [1690945200, 'Launch on Neutron'], [1696906800, 'Mars v2 launch on Osmosis'], - [1724166000, 'Mars v2 launch on Neutron'] - ] + [1724166000, 'Mars v2 launch on Neutron'], + ], }; From b27382674f45358f90eeca49b8b5969a22f4db69 Mon Sep 17 00:00:00 2001 From: 0xjosaphat <120175614+0xjosaphat@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:26:56 +0200 Subject: [PATCH 0262/1768] Added Liquidity Book based on TraderJoe v2 (#11524) --- projects/swapline-lb-v2/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/swapline-lb-v2/index.js diff --git a/projects/swapline-lb-v2/index.js b/projects/swapline-lb-v2/index.js new file mode 100644 index 0000000000..7ae217039c --- /dev/null +++ b/projects/swapline-lb-v2/index.js @@ -0,0 +1,5 @@ +const { joeV2Export } = require('../helper/traderJoeV2') + +module.exports = joeV2Export({ + base: '0x20918F4BA70439C58d070D4746f3aA303a7595d8' +}) \ No newline at end of file From 0ed044844376fe72272d8d70b7d66b776ba239fd Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:41:07 +0200 Subject: [PATCH 0263/1768] small fix on morpho-blue (#11525) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/morpho-blue/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/projects/morpho-blue/index.js b/projects/morpho-blue/index.js index d6139ec2e2..03b0bac87b 100644 --- a/projects/morpho-blue/index.js +++ b/projects/morpho-blue/index.js @@ -12,12 +12,13 @@ const config = { }, base: { morphoBlue: "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb", + blackList: ['0x6ee1955afb64146b126162b4ff018db1eb8f08c3'], fromBlock: 13977148, }, }; -Object.keys(config).forEach((chain) => { - const { morphoBlue, fromBlock } = config[chain]; +Object.keys(config).forEach((chain) => { + const { morphoBlue, fromBlock, blackList = [] } = config[chain]; module.exports[chain] = { tvl: async (api) => { const marketIds = await getMarkets(api); @@ -30,7 +31,7 @@ Object.keys(config).forEach((chain) => { ) .map((i) => [i.collateralToken, i.loanToken]) .flat(); - return api.sumTokens({ owner: morphoBlue, tokens }); + return api.sumTokens({ owner: morphoBlue, tokens, blacklistedTokens: blackList }); }, borrowed: async (api) => { const marketIds = await getMarkets(api); From 3db7770333285413c3173a13c03dee169e0a287b Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Sep 2024 19:18:56 +0200 Subject: [PATCH 0264/1768] update lombard --- projects/lombard/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/lombard/index.js b/projects/lombard/index.js index a5e6e41636..4ca0729ebd 100644 --- a/projects/lombard/index.js +++ b/projects/lombard/index.js @@ -36,6 +36,7 @@ async function tvl() { module.exports = { timetravel: false, + isHeavyProtocol: true, bitcoin: { tvl } From 46d7bea7621d2eb14e25d449492e782f72765fa5 Mon Sep 17 00:00:00 2001 From: hamur dev <122794657+tpktpj@users.noreply.github.com> Date: Wed, 4 Sep 2024 17:02:14 -0400 Subject: [PATCH 0265/1768] Add: Avalon CeDeFi of Avalon Finance (#11301) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/avalon-finance-cedefi/index.js | 49 +++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 projects/avalon-finance-cedefi/index.js diff --git a/projects/avalon-finance-cedefi/index.js b/projects/avalon-finance-cedefi/index.js new file mode 100644 index 0000000000..6ae03bd1c4 --- /dev/null +++ b/projects/avalon-finance-cedefi/index.js @@ -0,0 +1,49 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk'); +const { sumTokensExport } = require('../helper/sumTokens'); + +const abi = { + "getPoolManagerReserveInformation": "function getPoolManagerReserveInformation() view returns (tuple(uint256 userAmount, uint256 collateral, uint256 debt, uint256 claimableUSDT, uint256 claimableBTC) poolManagerReserveInfor)" +} + +const config = { + ethereum: { poolAddress: "0x02feDCff97942fe28e8936Cdc3D7A480fdD248f0", lfbtcAddress: "0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9", usdtAddress: ADDRESSES.ethereum.USDT, }, +} + +// @dev btcOwnersOfCedefi: Bitcoin owners of the Avalon CeDefi pool contract. +const btcOwnersOfCedefi = [ +'32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', +'bc1qr5nz7n8ulcdz0w3s6fska80fawxhvqlh273qypm3rkjequ9wpmhs65ppw7', +'bc1qhu98nf6ddz6ja73rn72encdr8ezsyhexwpdzap0vcs7lg2wpmrnq5ygfsl', +'bc1qg6asmzjr7nr5f5upg3xqyrdxl2tq8ef58hha7t0s82mzzx6zjxesyccp4h', +'bc1qxe3md4lehg8gmrlx3e8xqju5mytt266l4hcy8khl6tm5mahghmeqtxlgqq', +'bc1qy48h0kuv0r3e330wjfs6r74sk49pkzumnm907t5mhqjxml22r3ss2ucuxc', +] + +// @dev getMetrics: call to get the collateral and debt of the Avalon CeDefi pool contract. +const getMetrics = async (api, borrowed) => { + const { poolAddress, lfbtcAddress, usdtAddress } = config[api.chain] + const marketData = await api.call({ abi: abi.getPoolManagerReserveInformation, target: poolAddress, }); + // @note: no more count collateral on Ethereum, count collateral on Bitcoin instead + // const balanceOfCollateral = marketData.collateral; + const balanceOfDebt = marketData.debt; + + if (borrowed) + api.add(usdtAddress, balanceOfDebt); + // else + // api.add(lfbtcAddress, balanceOfCollateral); +} + +module.exports = { + methodology: `lfbtc collateral, USDT debt of Avalon CeDefi pool contract and Bitcoin owners of the Avalon CeDefi pool contract`, + doublecounted: false, + ethereum: { + tvl: (api) => getMetrics(api, false), + borrowed: (api) => getMetrics(api, true), + }, + bitcoin: { + tvl: sdk.util.sumChainTvls([ + sumTokensExport({ owners: btcOwnersOfCedefi }), + ]), + }, +} From 4f478cbc2f6cf07c6f7969efda1ffc1e2c77c816 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Sep 2024 23:13:32 +0200 Subject: [PATCH 0266/1768] Ether-fi: track LBTC vault #11526 --- projects/etherfi-lrt/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index caf312ede9..58f80df8be 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -5,6 +5,7 @@ const vaults = [ '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', '0x352180974C71f84a934953Cf49C4E538a6F9c997', '0xeDa663610638E6557c27e2f4e973D3393e844E70', + '0x5401b8620E5FB570064CA9114fd1e135fd77D57c', ] module.exports = { @@ -12,6 +13,6 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owners: vaults, fetchCoValentTokens: true, tokenConfig: { onlyWhitelisted: false, - }}), + }, resolveUniV3: true, }), }, } \ No newline at end of file From d96d3aabc6c471b0fc68a20290665b773e23d0f7 Mon Sep 17 00:00:00 2001 From: skyge <1506186404li@gmail.com> Date: Thu, 5 Sep 2024 13:42:16 +0800 Subject: [PATCH 0267/1768] Add Vault Pool. (#11528) --- projects/dforce/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/dforce/index.js b/projects/dforce/index.js index 7041ab53d4..312cc30dc0 100644 --- a/projects/dforce/index.js +++ b/projects/dforce/index.js @@ -35,8 +35,10 @@ let allControllers = { ], arbitrum: [ "0x50210A88217d1dD9e7FBc3E4a927Cc55829a38eB", // dForce vault pool: USX/2CRV + "0xcfe6d1b2BE777f20AD6F98f1c12C6436652F2031", // dForce vault pool: iwstETH + "0xB5b3da79789dE012Fd75108138b2315E5645715A", // dForce vault pool: saETH ], - optimism: [], + optimism: ["0xdF0e115aA822443df9200Cc5d0260FA8E1aF06F5"], // dForce vault pool: iwstETH polygon: [], avax: ["0x078ad8d6faeD9DAeE55f5d446C80E0C81230DE6b"], kava: ["0xFBf64A8cAEA1D641affa185f850dbBF90d5c84dC"], From c2028bf4b37cc3d327700c95848da118cb899217 Mon Sep 17 00:00:00 2001 From: Shawn Muggle Date: Thu, 5 Sep 2024 13:43:54 +0800 Subject: [PATCH 0268/1768] Add MuggleLink (Web3 Freelancer Service) on TON blockchain (#11529) Co-authored-by: muggledev --- projects/mugglelink/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/mugglelink/index.js diff --git a/projects/mugglelink/index.js b/projects/mugglelink/index.js new file mode 100644 index 0000000000..ad522f4716 --- /dev/null +++ b/projects/mugglelink/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require("../helper/coreAssets.json"); + +const muglelinkAddr = "UQCSo48F-bJSIq-DLve3vVNfGFmmIR-qPlKPdZ2De8c_mPbE" + +module.exports = { + methodology: 'Counts MuggleLink address balance as TVL.', + ton: { + tvl: sumTokensExport({ owner: muglelinkAddr, tokens: [ADDRESSES.ton.TON, ADDRESSES.ton.USDT]}), + } +} From d9ed73ec9412e0c29a4f4ceeaf957851ad65d453 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:04:00 +0200 Subject: [PATCH 0269/1768] code refactor --- projects/0xDAO/erc20.json | 10 - projects/0xDAO/index.js | 243 ++++-------------- projects/0xDAO/oxLens.json | 4 - projects/0xDAO/sanitizeWeb3Response.js | 45 ---- projects/0xDAO/solidlyLens.json | 3 - projects/0xDAO/ve.json | 3 - projects/2pi/index.js | 35 +-- projects/aavegotchi/index.js | 66 ++--- projects/acoconut/abis/singlePlus.json | 4 - projects/acoconut/index.js | 28 +- projects/adamantfinance/abi.json | 10 - projects/adamantfinance/index.js | 147 +++-------- projects/amyfinance/index.js | 33 +-- projects/asgardfinance/index.js | 59 +---- projects/avaware/index.js | 56 +--- projects/axe/index.js | 35 +-- projects/brinc/index.js | 18 +- projects/btcst/index.js | 22 +- projects/composable/index.js | 60 ++--- projects/crafting/index.js | 45 +--- projects/cybertime/index.js | 51 +--- projects/empyrean/index.js | 29 +-- projects/enterdao/index.js | 21 +- projects/euphoria/index.js | 37 +-- projects/evmoswap/index.js | 25 +- projects/fantOHM/index.js | 43 +--- projects/fei/index.js | 42 ++- projects/fiatdao/index.js | 94 +++---- projects/metapool.js | 20 +- projects/sorbetfinance/abi.json | 7 - projects/sorbetfinance/index.js | 104 ++------ .../spartan-protocol/abis/PoolFactory.json | 4 - projects/spartan-protocol/index.js | 50 +--- projects/spherium/abi.json | 4 - projects/spherium/constants.js | 20 -- projects/spherium/index.js | 54 ++-- projects/squid-defi/index.js | 122 ++------- projects/stacker/index.js | 26 +- projects/stake-ly/index.js | 20 +- projects/stake1/abi.json | 4 - projects/stake1/contracts.json | 15 -- projects/stake1/index.js | 90 ++----- projects/steakbank/abis.json | 3 - projects/steakbank/index.js | 18 +- projects/summitdefi/abi.json | 8 - projects/summitdefi/index.js | 180 ++----------- projects/suter-shield/index.js | 142 ++-------- projects/svn/index.js | 118 ++------- projects/tomofinance.js | 25 +- projects/vortexdao/index.js | 11 - projects/wbtc.js | 7 +- projects/wonderland/index.js | 97 +++---- projects/wrappedfi.js | 135 ++-------- projects/xsigma/index.js | 18 +- projects/xusdmoney/index.js | 17 +- 55 files changed, 527 insertions(+), 2060 deletions(-) delete mode 100644 projects/0xDAO/erc20.json delete mode 100644 projects/0xDAO/oxLens.json delete mode 100644 projects/0xDAO/sanitizeWeb3Response.js delete mode 100644 projects/0xDAO/solidlyLens.json delete mode 100644 projects/0xDAO/ve.json delete mode 100644 projects/acoconut/abis/singlePlus.json delete mode 100644 projects/adamantfinance/abi.json delete mode 100644 projects/sorbetfinance/abi.json delete mode 100644 projects/spartan-protocol/abis/PoolFactory.json delete mode 100644 projects/spherium/abi.json delete mode 100644 projects/spherium/constants.js delete mode 100644 projects/stake1/abi.json delete mode 100644 projects/stake1/contracts.json delete mode 100644 projects/steakbank/abis.json delete mode 100644 projects/summitdefi/abi.json diff --git a/projects/0xDAO/erc20.json b/projects/0xDAO/erc20.json deleted file mode 100644 index fcb2bc0033..0000000000 --- a/projects/0xDAO/erc20.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "allowance": "function allowance(address owner, address spender) view returns (uint256)", - "balanceOf": "function balanceOf(address account) view returns (uint256)", - "decimals": "uint8:decimals", - "governance": "address:governance", - "minters": "function minters(address) view returns (bool)", - "name": "string:name", - "symbol": "string:symbol", - "totalSupply": "uint256:totalSupply" -} diff --git a/projects/0xDAO/index.js b/projects/0xDAO/index.js index 4da9614f57..a68d6856b1 100644 --- a/projects/0xDAO/index.js +++ b/projects/0xDAO/index.js @@ -1,209 +1,68 @@ -const oxLensAbi = require("./oxLens.json"); -const solidlyLensAbi = require("./solidlyLens.json"); -const veAbi = require("./ve.json"); +const oxLensAbi = { + "oxPoolsAddresses": "address[]:oxPoolsAddresses", + "oxPoolsData": "function oxPoolsData(address[] _oxPoolsAddresses) view returns (tuple(address id, address stakingAddress, uint256 stakedTotalSupply, uint256 totalSupply, tuple(address id, string symbol, bool stable, address token0Address, address token1Address, address gaugeAddress, address bribeAddress, address[] bribeTokensAddresses, address fees, uint256 totalSupply) poolData)[])" +} + +const veAbi = { + "locked": "function locked(uint256) view returns (int128 amount, uint256 end)" +} + const partnerRewardsPoolAddress = "0xDA006E87DB89e1C5213D4bfBa771e53c91D920aC"; const oxdV1RewardsPoolAddress = "0xDA000779663501df3C9Bc308E7cEc70cE6F04211"; const oxSolidRewardPoolAddress = "0xDA0067ec0925eBD6D583553139587522310Bec60"; -const vlOxdAddress = "0xDA00527EDAabCe6F97D89aDb10395f719E5559b9"; -const oxdAddress = "0xc5A9848b9d145965d821AaeC8fA32aaEE026492d"; const solidAddress = "0x888EF71766ca594DED1F0FA3AE64eD2941740A20"; const veAddress = "0xcBd8fEa77c2452255f59743f55A3Ea9d83b3c72b"; const oxSolidAddress = "0xDA0053F0bEfCbcaC208A3f867BB243716734D809"; -const sanitize = require("./sanitizeWeb3Response.js"); - -const { standardPoolInfoAbi, addFundsInMasterChef } = require('../helper/masterchef') -const sdk = require('@defillama/sdk') -const shareValue = "uint256:getShareValue" -const xSCREAM = "0xe3D17C7e840ec140a7A51ACA351a482231760824" -const xCREDIT = "0xd9e28749e80D867d5d14217416BFf0e668C10645" -const shareTarot = "function shareValuedAsUnderlying(uint256 _share) returns (uint256 underlyingAmount_)" -const xTAROT = "0x74D1D2A851e339B8cB953716445Be7E8aBdf92F4" - -const fBEET = "0xfcef8a994209d6916EB2C86cDD2AFD60Aa6F54b1" - -async function tvl(_, __, chainBlocks) { - // 0xDAO Master Chef - const balances = {} - const chain = 'fantom' - const block = chainBlocks[chain] - const calldata = { - chain, block +const { standardPoolInfoAbi } = require('../helper/masterchef') +const { sumTokens2 } = require("../helper/unwrapLPs.js"); + +async function tvl(api) { + const masterchef = "0xa7821c3e9fc1bf961e280510c471031120716c3d" + const oxd = "0xc165d941481e68696f43ee6e99bfb2b23e0e3114" + const tokens = (await api.fetchList({ lengthAbi: 'poolLength', itemAbi: standardPoolInfoAbi, target: masterchef })).map(i => i.lpToken) + await api.sumTokens({ owner: masterchef, tokens, blacklistedTokens: [oxd] }) + + // 0xDAO Core + const oxLensAddress = "0xDA00137c79B30bfE06d04733349d98Cf06320e69"; + + // Fetch pools addresses + const oxPoolsAddresses = await api.call({ target: oxLensAddress, abi: oxLensAbi.oxPoolsAddresses }) + const pageSize = 200; + let currentPage = 0; + + let addresses = [] + while (addresses) { + const start = currentPage * pageSize; + const end = start + pageSize; + addresses = oxPoolsAddresses.slice(start, end); + if (addresses.length === 0) { + break; } - const transform = addr => `fantom:${addr}` - await addFundsInMasterChef(balances, "0xa7821c3e9fc1bf961e280510c471031120716c3d", block, chain, - transform, standardPoolInfoAbi, [], true, true, "0xc165d941481e68696f43ee6e99bfb2b23e0e3114") - - const screamShare = await sdk.api.abi.call({ - ...calldata, - target: xSCREAM, - abi: shareValue - }) - sdk.util.sumSingleBalance(balances, transform("0xe0654C8e6fd4D733349ac7E09f6f23DA256bF475"), - screamShare.output *balances[transform(xSCREAM)] /1e18) - delete balances[transform(xSCREAM)] - - const creditShare = await sdk.api.abi.call({ - ...calldata, - target: xCREDIT, - abi: shareValue - }) - sdk.util.sumSingleBalance(balances, transform("0x77128dfdd0ac859b33f44050c6fa272f34872b5e"), - creditShare.output * balances[transform(xCREDIT)] / 1e18) - delete balances[transform(xCREDIT)] - - const tarotShare = await sdk.api.abi.call({ - ...calldata, - target: xTAROT, - abi: shareTarot, - params: sdk.util.convertToBigInt(balances[transform(xTAROT)]) - }) - sdk.util.sumSingleBalance(balances, transform("0xc5e2b037d30a390e62180970b3aa4e91868764cd"), - tarotShare.output) - delete balances[transform(xTAROT)] + currentPage += 1; - sdk.util.sumSingleBalance(balances, transform("0xf24bcf4d1e507740041c9cfd2dddb29585adce1e"), - balances[transform(fBEET)]) - delete balances[transform(fBEET)] + const poolsData = await api.call({ params: [addresses], target: oxLensAddress, abi: oxLensAbi.oxPoolsData }) + poolsData.forEach(pool => api.add(pool.poolData.id, pool.totalSupply)) + } - // 0xDAO Core - const oxLensAddress = "0xDA00137c79B30bfE06d04733349d98Cf06320e69"; - const solidlyLensAddress = "0xDA0024F99A9889E8F48930614c27Ba41DD447c45"; - // const oxd = new web3.eth.Contract(erc20Abi, oxdAddress); + // Add locked SOLID + const { amount: lockedSolidAmount } = await api.call({ target: veAddress, params: 2, abi: veAbi.locked }) + api.add(solidAddress, lockedSolidAmount); - // Fetch pools addresses - const { output: oxPoolsAddresses } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: oxLensAddress, - abi: oxLensAbi.oxPoolsAddresses - }) - const pageSize = 200; - const poolsMap = {}; - let currentPage = 0; + // Add staking pools TVL + const oxdV1RewardsPoolBalance = await api.call({ target: oxdV1RewardsPoolAddress, abi: 'erc20:totalSupply' }) + const oxSolidRewardsPoolBalance = await api.call({ target: oxSolidRewardPoolAddress, abi: 'erc20:totalSupply' }) + const partnerRewardsPoolBalance = await api.call({ target: partnerRewardsPoolAddress, abi: 'erc20:totalSupply' }) - // Add pools - const addPools = (pools, reservesData) => { - pools.forEach((pool) => { - const solidlyPoolAddress = pool.poolData.id; - const reserveData = reservesData.find( - (data) => data.id === solidlyPoolAddress - ); - const newPool = pool; - newPool.poolData = { - ...pool.poolData, - ...reserveData, - }; - const shareOfTotalSupply = newPool.totalSupply / newPool.poolData.totalSupply - newPool.shareOfTotalSupply = shareOfTotalSupply; - let token0Reserve = newPool.poolData.token0Reserve * shareOfTotalSupply - let token1Reserve = newPool.poolData.token1Reserve * shareOfTotalSupply - if (isNaN(token0Reserve)) { - token0Reserve = "0" - } - if (isNaN(token1Reserve)) { - token1Reserve = "0" - } - newPool.token0Reserve = token0Reserve; - newPool.token1Reserve = token1Reserve; - poolsMap[pool.id] = newPool; - }); - }; - let addresses = [] - while (addresses) { - const start = currentPage * pageSize; - const end = start + pageSize; - addresses = oxPoolsAddresses.slice(start, end); - if (addresses.length === 0) { - break; - } - currentPage += 1; + api.add(oxSolidAddress, oxdV1RewardsPoolBalance); + api.add(oxSolidAddress, partnerRewardsPoolBalance); + api.add(oxSolidAddress, oxSolidRewardsPoolBalance); - const { output: poolsData } = await sdk.api.abi.call({ - block, - chain: 'fantom', - params: [addresses], - target: oxLensAddress, - abi: oxLensAbi.oxPoolsData - }) - const solidlyPoolsAddresses = poolsData.map((pool) => pool.poolData.id); - const { output: reservesData } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: solidlyLensAddress, - params: [solidlyPoolsAddresses], - abi: solidlyLensAbi.poolsReservesInfo - }) - addPools( - sanitize(poolsData), - sanitize(reservesData) - ); - } - const pools = Object.values(poolsMap); - - // Add TVL from pools to balances - const addBalance = (tokenAddress, amount) => { - const fantomTokenAddress = `fantom:${tokenAddress}` - sdk.util.sumSingleBalance(balances, fantomTokenAddress, amount) - } - pools.forEach(pool => { - const token0 = pool.poolData.token0Address; - const token1 = pool.poolData.token1Address; - const amount0 = pool.token0Reserve; - const amount1 = pool.token1Reserve; - addBalance(token0, amount0); - addBalance(token1, amount1); - }); - - // Add locked SOLID - const { output: { amount: lockedSolidAmount } } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: veAddress, - params: 2, - abi: veAbi.locked - }) - addBalance(solidAddress, lockedSolidAmount); - - // Add staking pools TVL - const { output: oxdV1RewardsPoolBalance } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: oxdV1RewardsPoolAddress, - abi: 'erc20:totalSupply' - }) - const { output: oxSolidRewardsPoolBalance } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: oxSolidRewardPoolAddress, - abi: 'erc20:totalSupply' - }) - const { output: partnerRewardsPoolBalance } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: partnerRewardsPoolAddress, - abi: 'erc20:totalSupply' - }) - - addBalance(oxSolidAddress, oxdV1RewardsPoolBalance); - addBalance(oxSolidAddress, partnerRewardsPoolBalance); - addBalance(oxSolidAddress, oxSolidRewardsPoolBalance); - - // Add vote locked OXD - const { output: voteLockedOxdBalance } = await sdk.api.abi.call({ - block, - chain: 'fantom', - target: oxdAddress, - params: vlOxdAddress, - abi: 'erc20:balanceOf' - }) - addBalance(oxdAddress, voteLockedOxdBalance); - - return balances + return sumTokens2({ api, resolveLP: true, }) } module.exports = { - fantom: { - tvl - } + fantom: { + tvl + } } diff --git a/projects/0xDAO/oxLens.json b/projects/0xDAO/oxLens.json deleted file mode 100644 index ddad503067..0000000000 --- a/projects/0xDAO/oxLens.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "oxPoolsAddresses": "address[]:oxPoolsAddresses", - "oxPoolsData": "function oxPoolsData(address[] _oxPoolsAddresses) view returns (tuple(address id, address stakingAddress, uint256 stakedTotalSupply, uint256 totalSupply, tuple(address id, string symbol, bool stable, address token0Address, address token1Address, address gaugeAddress, address bribeAddress, address[] bribeTokensAddresses, address fees, uint256 totalSupply) poolData)[])" -} diff --git a/projects/0xDAO/sanitizeWeb3Response.js b/projects/0xDAO/sanitizeWeb3Response.js deleted file mode 100644 index 0fbe41de8a..0000000000 --- a/projects/0xDAO/sanitizeWeb3Response.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @notice Converts web3 tuple into javascript object recursively - * @author 0xDAO - */ -const sanitize = (data) => { - let dataKeys = {}; - let object = {}; - let array = []; - - // Find all keys (Object.keys will not work here, first we must iterate) - Object.entries(data).forEach(([key]) => { - dataKeys[key] = true; - }); - dataKeys = Object.keys(dataKeys); - const keysLength = dataKeys.length; - - // Detect whether the item is an object or an array - const isObject = keysLength > data.length; - if (isObject) { - dataKeys = dataKeys.slice(dataKeys.length / 2, dataKeys.length); - dataKeys.forEach((key) => { - let dataValue = data[key]; - if (Array.isArray(dataValue)) { - // Recursively sanitize - dataValue = sanitize(dataValue); - } - object[key] = dataValue; - }); - return object; - } else { - // Detect whether the item is an array of objects or an array of values - if (Array.isArray(data)) { - dataKeys.forEach((key) => { - // Recursively sanitize - array.push(sanitize(data[key])); - }); - } else { - return data; - } - return array; - } - }; - - module.exports = sanitize; - \ No newline at end of file diff --git a/projects/0xDAO/solidlyLens.json b/projects/0xDAO/solidlyLens.json deleted file mode 100644 index 5bb2f7d901..0000000000 --- a/projects/0xDAO/solidlyLens.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "poolsReservesInfo": "function poolsReservesInfo(address[] _poolsAddresses) view returns (tuple(address id, address token0Address, address token1Address, uint256 token0Reserve, uint256 token1Reserve, uint8 token0Decimals, uint8 token1Decimals)[])" -} diff --git a/projects/0xDAO/ve.json b/projects/0xDAO/ve.json deleted file mode 100644 index 3600933cc8..0000000000 --- a/projects/0xDAO/ve.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "locked": "function locked(uint256) view returns (int128 amount, uint256 end)" -} diff --git a/projects/2pi/index.js b/projects/2pi/index.js index 5bc419332f..81f8967c28 100644 --- a/projects/2pi/index.js +++ b/projects/2pi/index.js @@ -15,23 +15,24 @@ const fetchChainAddresses = async chain => { return getUniqueAddresses(archimedes) } -const fetchTvl = chain => { - return async (api) => { - const addresses = await fetchChainAddresses(chains[chain]) - let pools = await Promise.all(addresses.map(i => api.fetchList({ withMetadata: true, target: i, lengthAbi: archimedesAbi['poolLength'], itemAbi: archimedesAbi['poolInfo'] }))) - pools = pools.flat() - const wantTokens = pools.map(i => i.output.want) - const calls = pools.map(i => i.input) - const bal = await api.multiCall({ abi: archimedesAbi.balance, calls, }) - api.add(wantTokens, bal) +const tvl = async (api) => { + const addresses = await fetchChainAddresses(chains[api.chain]) + const res = await api.fetchList({ lengthAbi: 'poolLength', itemAbi: archimedesAbi['poolInfo'], calls: addresses, groupedByInput: true }) + const calls = [] + const tokens = [] + for (let i = 0; i < res.length; i++) { + const pool = addresses[i] + for (let j = 0; j < res[i].length; j++) { + calls.push({ target: pool, params: j }) + tokens.push(res[i][j].want) + } } + console.log(res, api.chain) + const bals = await api.multiCall({ abi: archimedesAbi.balance, calls}) + api.add(tokens, bals) } -module.exports = { - timetravel: false, - ...Object.fromEntries( - Object.keys(chains).map(chain => [ - chain, { tvl: fetchTvl(chain) } - ]) - ) -} + +Object.keys(chains).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/aavegotchi/index.js b/projects/aavegotchi/index.js index 912aa44ba8..ba5ebf7e23 100644 --- a/projects/aavegotchi/index.js +++ b/projects/aavegotchi/index.js @@ -1,7 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { request, gql } = require("graphql-request"); const { getBlock } = require('../helper/http') @@ -19,24 +17,14 @@ const vaultContractsPolygon = [ const GHST_Polygon = "0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7"; const stkGHST_QUICKContract = "0xA02d547512Bb90002807499F05495Fe9C4C3943f"; const GHST_pools2 = [ - "0xccb9d2100037f1253e6c1682adf7dc9944498aff", // WETH_GHST_UNIV2 - "0x8B1Fd78ad67c7da09B682c5392b65CA7CaA101B9", // GHST_QUICK_UNIV2 - "0x096C5CCb33cFc5732Bcd1f3195C13dBeFC4c82f4" // GHST_USDC_UNIV2 + "0xccb9d2100037f1253e6c1682adf7dc9944498aff", // WETH_GHST_UNIV2 + "0x8B1Fd78ad67c7da09B682c5392b65CA7CaA101B9", // GHST_QUICK_UNIV2 + "0x096C5CCb33cFc5732Bcd1f3195C13dBeFC4c82f4" // GHST_USDC_UNIV2 ] -const ethTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - for (const token of tokensETH) { - await sumTokensAndLPsSharedOwners( - balances, - [[token, false]], - [vaultContractETH] - ); - } - - return balances; -}; +const ethTvl = async (api) => { + return api.sumTokens({ owner: vaultContractETH, tokens: tokensETH }) +} const graphUrl = 'https://subgraph.satsuma-prod.com/tWYl5n5y04oz/aavegotchi/aavegotchi-core-matic/api' @@ -58,14 +46,14 @@ query GET_SUMMONED_GOTCHIS ($minGotchiId: Int, $block: Int) { stakedAmount } }` -async function getGotchisCollateral(timestamp, block) { +async function getGotchisCollateral(timestamp, block, api) { const allGotchis = []; let minGotchiId = 0; while (minGotchiId !== -1) { const { aavegotchis } = await request( graphUrl, - graphQuery, - {minGotchiId, block} + graphQuery, + { minGotchiId, block } ); if (aavegotchis && aavegotchis.length > 0) { minGotchiId = parseInt(aavegotchis[aavegotchis.length - 1].gotchiId); @@ -74,42 +62,18 @@ async function getGotchisCollateral(timestamp, block) { minGotchiId = -1; } } - const gotchisBalances = { - output: allGotchis.map(g => ({ - input: {target: g.collateral}, - success: true, - output: g.stakedAmount - })) - }; - - const balances = {}; - sdk.util.sumMultiBalanceOf(balances, gotchisBalances, true, x => 'polygon:' + x); - return gotchisBalances; + allGotchis.map(i => api.add(i.collateral, i.stakedAmount)); } -const polygonTvl = async (_, _block, chainBlocks) => { - const balances = {}; - const block = await getBlock(_, 'polygon', chainBlocks) - 500 - - let transformAddress = i => `polygon:${i}`; - - await sumTokensAndLPsSharedOwners( - balances, - [[GHST_Polygon, false]], - vaultContractsPolygon, - block, - "polygon", - transformAddress - ); - - const gotchisBalances = await getGotchisCollateral(_, block); - sdk.util.sumMultiBalanceOf(balances, gotchisBalances, true, x => 'polygon:' + x); +const polygonTvl = async (api) => { + const block = await getBlock(api.timestamp, 'polygon', { polygon: api.block }) - 500 - return balances; + await api.sumTokens({ owners: vaultContractsPolygon, tokens: [GHST_Polygon] }) + await getGotchisCollateral(api.timestamp, block, api); }; module.exports = { - ethereum: { + ethereum: { tvl: ethTvl, }, polygon: { diff --git a/projects/acoconut/abis/singlePlus.json b/projects/acoconut/abis/singlePlus.json deleted file mode 100644 index 7936ebcea1..0000000000 --- a/projects/acoconut/abis/singlePlus.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "totalUnderlying": "uint256:totalUnderlying", - "token": "address:token" -} \ No newline at end of file diff --git a/projects/acoconut/index.js b/projects/acoconut/index.js index 65fdc8aeac..ec15ad39c6 100644 --- a/projects/acoconut/index.js +++ b/projects/acoconut/index.js @@ -1,7 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); -const singlePlusAbi = require('./abis/singlePlus'); -const { sumTokens2 } = require('../helper/unwrapLPs') const tokensInacBTC = [ ADDRESSES.ethereum.WBTC, @@ -19,28 +16,13 @@ const bscSingleTokens = [ const btcb = 'bsc:' + ADDRESSES.bsc.BTCB -async function eth(timestamp, block) { - return sumTokens2({ block, owner: acBTCTokenHolder, tokens: tokensInacBTC}) +async function eth(api) { + return api.sumTokens({ owner: acBTCTokenHolder, tokens: tokensInacBTC}) } -async function bsc(timestamp, _, {bsc: block}) { - const balances = {}; - - const totalUnderlyingResults = await sdk.api.abi.multiCall({ - block, - calls: bscSingleTokens.map((address) => ({ - target: address - })), - abi: singlePlusAbi["totalUnderlying"], - chain: 'bsc' - }); - - totalUnderlyingResults.output.forEach((tokenBalanceResult) => { - const valueInToken = tokenBalanceResult.output; - sdk.util.sumSingleBalance(balances, btcb, valueInToken) - }); - - return balances; +async function bsc(api) { + const tokens = await api.multiCall({ abi: 'address:token', calls: bscSingleTokens}) + return api.sumTokens({ tokensAndOwners2: [tokens, bscSingleTokens]}) } module.exports = { diff --git a/projects/adamantfinance/abi.json b/projects/adamantfinance/abi.json deleted file mode 100644 index dea346007a..0000000000 --- a/projects/adamantfinance/abi.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "balance": "uint256:balance", - "balanceOfVault": "uint256:balanceOf", - "balanceOf": "function balanceOf(address arg0) view returns (uint256)", - "minter": "address:minter", - "totalSupply": "uint256:totalSupply", - "coins": "function coins(uint256 arg0) view returns (address)", - "lp_token": "address:lp_token", - "decimals": "uint8:decimals" -} \ No newline at end of file diff --git a/projects/adamantfinance/index.js b/projects/adamantfinance/index.js index 8ef3d10fba..d36fbf527d 100644 --- a/projects/adamantfinance/index.js +++ b/projects/adamantfinance/index.js @@ -1,12 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); const { stakings } = require("../helper/staking"); const { getConfig } = require('../helper/cache') -const { unwrapLPsAuto, sumTokens2, } = require("../helper/unwrapLPs"); -const { - getChainTransform, -} = require("../helper/portedTokens"); +const { sumTokens2, } = require("../helper/unwrapLPs"); const { staking: stakingUnknown, } = require("../helper/unknownTokens"); const vaultsUrl = { @@ -22,15 +17,6 @@ const vaultsUrl = { const allVaultsUrl = "https://raw.githubusercontent.com/eepdev/vaults/main/current_vaults_all_chains.json"; -const NetworkID = { - ETH_MAINNET: 1, - POLYGON: 137, - ARBITRUM: 42161, - CRONOS: 25, - FRAXTAL: 252, - OPTIMISM: 10 -}; - /*** Polygon Addresses ***/ const stakingContracts_polygon = [ "0x920f22E1e5da04504b765F8110ab96A20E6408Bd", @@ -50,7 +36,6 @@ const stakingContracts_Arbitrum = [ "0x9d5d0cb1B1210d4bf0e0FdCC6aCA1583fA48f0fD", ]; -const lpAddresses_arbitrum = []; const ARBY = ADDRESSES.arbitrum.ARBY /*** Cronos Addresses ***/ @@ -61,11 +46,6 @@ const stakingContracts_cronos = [ ]; const CADDY = ADDRESSES.arbitrum.ARBY; -const vaultAddresses_cronos = [ - "0x3a9645ee664DCE6529Af678aaB4fE3AD9d68323f", - "0x6681EDBf50C0758C719F3024C282de1694807CcB", -]; - const lpAddresses_cronos = [ "0x332937463df26f46a1a715a41205765774beef80", //CADDY-WCRO Cronos "0x2a008ef8ec3ef6b03eff10811054e989aad1cf71", //CADDY-WCRO Cronos @@ -73,119 +53,60 @@ const lpAddresses_cronos = [ async function pool2Polygon(api) { - const bals = await api.multiCall({ abi: 'erc20:totalSupply', calls: vaultAddresses_polygon}) - const tokens = await api.multiCall({ abi: 'address:stakingToken', calls: vaultAddresses_polygon}) + const bals = await api.multiCall({ abi: 'erc20:totalSupply', calls: vaultAddresses_polygon }) + const tokens = await api.multiCall({ abi: 'address:stakingToken', calls: vaultAddresses_polygon }) api.addTokens(tokens, bals) return sumTokens2({ api, resolveLP: true }) } -async function polygonTvl(timestamp, block, chainBlocks) { - return await tvl2(timestamp, "polygon", NetworkID.POLYGON, chainBlocks, lpAddresses_polygon); -} - -async function arbitrumTvl(timestamp, block, chainBlocks) { - return await tvl(timestamp, "arbitrum", chainBlocks, lpAddresses_arbitrum); -} - -async function cronosTvl(timestamp, block, chainBlocks) { - return await tvl2(timestamp, "cronos", NetworkID.CRONOS, chainBlocks, lpAddresses_cronos); -} - -async function fraxtalTvl(timestamp, block, chainBlocks) { - return await tvl2(timestamp, "fraxtal", NetworkID.FRAXTAL, chainBlocks, []); //no Adamant platform token on Fraxtal -} - -async function uniTvl(balances, chain, block, uniVaults, lpAddressesIgnored, transformAddress = (a) => a) { - const vault_balances = ( - await sdk.api.abi.multiCall({ - chain: chain, - block: block, - calls: uniVaults.map((vault) => ({ - target: vault.vaultAddress, - })), - abi: abi.balance, - }) - ).output.map((val) => val.output); - - uniVaults.forEach((v, idx) => { - if ( - !lpAddressesIgnored.some( - (addr) => addr.toLowerCase() === v.lpAddress.toLowerCase() - ) - ) { - sdk.util.sumSingleBalance(balances, chain + ':' + v.lpAddress, vault_balances[idx]) - } - }); - await unwrapLPsAuto({ balances, block, chain, }); - return balances; -} - -const tvl = async (timestamp, chain, chainBlocks, lpAddressesIgnored) => { - - const block = chainBlocks[chain]; - const transformAddress = await getChainTransform(chain) - let balances = {}; - - let resp = await getConfig('adamant-fi/'+chain, vaultsUrl[chain]); - - let uniVaults = resp - .filter( - (vault) => - vault.vaultAddress !== adMESH && - vault.platform !== "dodo" - ) - .map((vault) => ({ - vaultAddress: vault.vaultAddress, - lpAddress: vault.lpAddress, - })); - balances = await uniTvl(balances, chain, block, uniVaults, lpAddressesIgnored, transformAddress); +const blacklistedTokens = [ + ...lpAddresses_polygon, + ...lpAddresses_cronos, +] - return balances; -}; - -const tvl2 = async (timestamp, chain, chainId, chainBlocks, lpAddressesIgnored) => { - - const block = chainBlocks[chain]; - const transformAddress = await getChainTransform(chain) - let balances = {}; +const blacklistedOwners = new Set([ + adMESH, + "0x01d2833e6d86D5Ad8380044DEb2cA520fc60D326", //adMESH related token/deposit + "0xbe6aa0AF32984fE3f65a73071DECC09Ab607e310", //adMESH related token/deposit +].map(i => i.toLowerCase())) - let resp = await getConfig('adamant-fi/'+chain, allVaultsUrl); +const tvl = async (api) => { + let info = await getConfig('adamant-fi/allVaults', allVaultsUrl) + if (api.chain === 'arbitrum') { + info = await getConfig('adamant-fi/arbitrumVaults', vaultsUrl.arbitrum) - let uniVaults = resp - .filter( - (vault) => - vault.vaultAddress !== adMESH && - vault.vaultAddress !== "0x01d2833e6d86D5Ad8380044DEb2cA520fc60D326" && //adMESH related token/deposit - vault.vaultAddress !== "0xbe6aa0AF32984fE3f65a73071DECC09Ab607e310" && //adMESH related token/deposit - vault.platform !== "dodo" && - vault.chainId == chainId + info = info.filter((vault) => vault.platform !== "dodo" && !blacklistedOwners.has(vault.lpAddress.toLowerCase()) ) - .map((vault) => ({ - vaultAddress: vault.vaultAddress, - lpAddress: vault.lpAddress, - })); - - balances = await uniTvl(balances, chain, block, uniVaults, lpAddressesIgnored, transformAddress); - return balances; + } else { + info = info + .filter((vault) => vault.platform !== "dodo" && vault.chainId == api.chainId && !blacklistedOwners.has(vault.lpAddress.toLowerCase())) + } + + + const tokens = info.map(i => i.lpAddress) + const vaults = info.map(i => i.vaultAddress) + const bals = await api.multiCall({ abi: "uint256:balance", calls: vaults, permitFailure: true, }) + api.addTokens(tokens, bals.map(i => i ?? 0)) + for (const token of blacklistedTokens) + api.removeTokenBalance(token) + return sumTokens2({ api, resolveLP: true }) }; module.exports = { polygon: { staking: stakings(stakingContracts_polygon, ADDY), pool2: pool2Polygon, - tvl: polygonTvl, + tvl, }, arbitrum: { staking: stakings(stakingContracts_Arbitrum, ARBY), - tvl: arbitrumTvl, + tvl, }, cronos: { staking: stakingUnknown({ owners: stakingContracts_cronos, tokens: [CADDY], chain: 'cronos', lps: lpAddresses_cronos, useDefaultCoreAssets: true }), - tvl: cronosTvl, - }, - fraxtal: { - tvl: fraxtalTvl, + tvl, }, + fraxtal: { tvl, }, methodology: "The current vaults on Adamant Finance are found on the Github. Once we have the vaults, we filter out the LP addresses of each vault and unwrap the LPs so that each token can be accounted for. Coingecko is used to price the tokens and the sum of all tokens is provided as the TVL", }; diff --git a/projects/amyfinance/index.js b/projects/amyfinance/index.js index a3d082e495..b8d2e5fdb8 100644 --- a/projects/amyfinance/index.js +++ b/projects/amyfinance/index.js @@ -1,16 +1,16 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs'); +const { sumTokensExport } = require('../helper/unwrapLPs'); const tokens = [ - [ADDRESSES.arbitrum.USDC, false], //USDC - [ADDRESSES.arbitrum.USDT, false], //USDT - [ADDRESSES.optimism.DAI, false], //DAI - [ADDRESSES.arbitrum.WBTC, false], //WBTC - [ADDRESSES.arbitrum.WETH, false], //WETH - ["0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0", false], //UNI - [ADDRESSES.arbitrum.LINK, false], //LINK - [ADDRESSES.arbitrum.MIM, false], //MIM - ["0xd4d42F0b6DEF4CE0383636770eF773390d85c61A", false], //SUSHI + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.optimism.DAI, + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.WETH, + "0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0", + ADDRESSES.arbitrum.LINK, + ADDRESSES.arbitrum.MIM, + "0xd4d42F0b6DEF4CE0383636770eF773390d85c61A", ]; const aibContracts = [ "0xe76a422C30B09f8d20ad5d8A9D21206835F6c692", //aibUSDC @@ -22,18 +22,9 @@ const aibContracts = [ "0x9Dd192fca6A1E7c8a3C014a35087dE3fb9Da14E5", //aibLINK "0x381F8482ee0a12202F2A3735370859f5709B12d2", //aibMIM "0x52444Aa321dfD7b24aA263Af6F7DCC26565f3629", //aibSUSHI -]; - -async function tvl(timestamp, ethBlock, {arbitrum: block}) { - let balances = {}; - const transformAdress = i => `arbitrum:${i}` - - await sumTokensAndLPsSharedOwners(balances, tokens, aibContracts, - block, "arbitrum", transformAdress); - return balances; -} +] module.exports = { - arbitrum: { tvl, }, + arbitrum: { tvl: sumTokensExport({ owners: aibContracts, tokens }), }, deadFrom: '2022-10-23' } diff --git a/projects/asgardfinance/index.js b/projects/asgardfinance/index.js index bf5323aaa8..537325ed1b 100644 --- a/projects/asgardfinance/index.js +++ b/projects/asgardfinance/index.js @@ -1,68 +1,17 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { staking } = require('../helper/staking'); const AsgardStaking = "0x4EA2bb6Df87F66cbea70818aE92f3A48F98EBC93"; const ASG = "0x0DC5189Ec8CDe5732a01F0F592e927B304370551"; -const AsgardTreasury = "0x9D5818af130705F95444d78A55B4F3d85cBfCC13"; - -const DAI = ADDRESSES.ethereum.DAI; -const ASG_DAI_SLP = "0x024cc95611d478dd367240e72c82662d9e390a6a"; -const FRAX = ADDRESSES.ethereum.FRAX; -const ASG_FRAX_SLP = "0x5696cd9054ce11625141f5ee2c65fc4d57c2a5ca"; -const WUST = "0xa47c8bf37f92abed4a126bda807a7b7498661acd"; -const ASG_UST_SLP = "0x5a1abc007f031aa58238f45941d965ce6892fdff"; - -/*** Staking of native token (ASG) TVL Portion ***/ -const staking = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const stakingBalance = ( - await sdk.api.abi.call({ - abi: 'erc20:balanceOf', - target: ASG, - params: AsgardStaking, - block: ethBlock, - }) - ).output; - - sdk.util.sumSingleBalance(balances, ASG, stakingBalance); - - return balances; -}; - -/*** Bonds TVL Portion (Treasury) *** - * Treasury TVL consists of DAI, UST and FRAX balances + Sushi SLPs balance - ***/ -async function ethTvl(timestamp, block) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [DAI, false], - [FRAX, false], - [WUST, false], - [ASG_DAI_SLP, true], - [ASG_FRAX_SLP, true], - [ASG_UST_SLP, true], - ], - [AsgardTreasury], - block - ); - - return balances; -} - module.exports = { hallmarks: [ [1643155200, "Token mint exploit"] ], ethereum: { - staking, - tvl: ethTvl, + staking: staking(AsgardStaking, ASG), + tvl: () => ({}), }, + deadFrom: '2021-08-28', methodology: "Counts DAI, DAI SLP (ASG-DAI), FRAX, FRAX SLP (ASG-FRAX), UST, UST SLP (ASG-UST) on the treasury", }; diff --git a/projects/avaware/index.js b/projects/avaware/index.js index 6dc0119e34..ffc0651d38 100644 --- a/projects/avaware/index.js +++ b/projects/avaware/index.js @@ -1,43 +1,17 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens2 } = require("../helper/unwrapLPs"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { staking } = require('../helper/staking'); const FarmPoolManager = "0x7ec4AeaeB57EcD237F35088D11C59525f7D631FE"; const treasuryAddress = "0x9300736E333233F515E585c26A5b868772392709"; const AVE = "0x78ea17559B3D2CF85a7F9C2C704eda119Db5E6dE"; -/*** Staking of native token AVE TVL Portion ***/ -const staking = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const transformAddress = addr => 'avax:'+addr; - - await sumTokensAndLPsSharedOwners( - balances, - [[AVE, false]], - [treasuryAddress], - chainBlocks["avax"], - "avax", - transformAddress - ); - - return balances; -}; - /*** farms TVL portion ***/ -const avaxTvl = async (timestamp, ethBlock, chainBlocks) => { +const avaxTvl = async (api) => { const chain = 'avax' - const block = chainBlocks[chain] - const CountOfPools = ( - await sdk.api.abi.call({ - abi: abi.poolCount, - target: FarmPoolManager, - chain, block, - }) - ).output; + const CountOfPools = await api.call({ abi: abi.poolCount, target: FarmPoolManager, }) const indices = [] @@ -48,28 +22,14 @@ const avaxTvl = async (timestamp, ethBlock, chainBlocks) => { indices.push(index) } - const { output: poolsRes } = await sdk.api.abi.multiCall({ - target: FarmPoolManager, - abi: abi.getPool, - calls: indices.map(i => ({ params: i })), - chain, block, - }) - const pools = poolsRes.map(i => i.output.pool) - - const { output: tokens } = await sdk.api.abi.multiCall({ - target: FarmPoolManager, - abi: abi.stakingToken, - calls: pools.map(i => ({ target: i })), - chain, block, - }) - const toa = [] - tokens.forEach(({ output, input: { target } }) => toa.push([output, target])) - return sumTokens2({ tokensAndOwners: toa, chain, block, }) + const pools = (await api.multiCall({ target: FarmPoolManager, abi: abi.getPool, calls: indices, })).map(i => i.pool) + const tokens = await api.multiCall({ abi: abi.stakingToken, calls: pools, }) + return sumTokens2({ api, tokensAndOwners2: [tokens, pools], resolveLP: true, }) }; module.exports = { - avax:{ - staking, + avax: { + staking: staking(treasuryAddress, AVE), tvl: avaxTvl, }, methodology: `We count TVL that is on the Farms threw FarmPoolManager contract diff --git a/projects/axe/index.js b/projects/axe/index.js index e3cab00080..b1d62850bc 100644 --- a/projects/axe/index.js +++ b/projects/axe/index.js @@ -1,34 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); -const { staking } = require("../helper/staking.js"); - -const treasuryAddresses = ["0xa2039621Cc042567092fAaee89B03Ef959F89712"]; -const DAI = ADDRESSES.ethereum.DAI; -const USDC = ADDRESSES.ethereum.USDC; -const AXEStaking = "0x7f4d186b76a39a2da32804a8c35b3d04e0e174fd"; -const AXE = "0x30AC8317DfB0ab4263CD8dB1C4F10749911B126C"; - -const AXE_DAI_POOL = "0xd34d3b648db688bee383022dd26a9027592b82d5"; -/*** Bonds TVL Portion (Treasury) *** - * Treasury TVL consists of DAI and UNI-V2 balances - ***/ - async function ethTvl(timestamp, block) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [DAI, false], - [USDC, false], - [AXE_DAI_POOL, true] - ], - treasuryAddresses, - block - ); - - return balances; -} - module.exports = { hallmarks: [ [1648765747, "Rug Pull"] @@ -36,8 +5,8 @@ module.exports = { deadFrom: 1648765747, start: 1637036516, // 16 Nov 2021 ethereum: { - tvl: ethTvl, - staking: staking(AXEStaking, AXE), + tvl: () => ({}), + staking: () => ({}), }, methodology: "Counts DAI, USDC and DAI SLP (AXE-DAI) on the treasury", diff --git a/projects/brinc/index.js b/projects/brinc/index.js index f707a7bd22..48c496bcdb 100644 --- a/projects/brinc/index.js +++ b/projects/brinc/index.js @@ -1,26 +1,16 @@ const ADDRESSES = require('../helper/coreAssets.json') -const {sumTokensAndLPsSharedOwners} = require('../helper/unwrapLPs') +const { sumTokensExport } = require('../helper/unwrapLPs') const treasury = "0xB5de3f06aF62D8428a8BF7b4400Ea42aD2E0bc53" -async function tvl(time, ethBlock, chainBlocks){ - const balances = {}; - const transformAddress = i => `arbitrum:${i}` - await sumTokensAndLPsSharedOwners(balances, [ - [ADDRESSES.optimism.DAI, false], //dai - - ], [treasury], chainBlocks.arbitrum, "arbitrum", transformAddress) - return balances -} - -module.exports={ +module.exports = { hallmarks: [ [1639440000, "Brinc hack due to private key compromise"], [1644019200, "Relaunch on Arbitrum"] ], methodology: `DAI reserves in the bonding curve `, - arbitrum:{ - tvl, + arbitrum: { + tvl: sumTokensExport({ owners: [treasury], tokens: [ADDRESSES.optimism.DAI], }), //staking: stakingPricedLP("0xE5Df6583eE8DAe9F532e65D7D2C30A961c442f8a", "0x5fE5E1d5D86BDD4a7D84B4cAfac1E599c180488f", "ethereum", "0xe4f157c7ca54f435fcc3bb0b4452f98d3a48f303", "dai", true ) } } \ No newline at end of file diff --git a/projects/btcst/index.js b/projects/btcst/index.js index 19563fa439..492c6f1b23 100644 --- a/projects/btcst/index.js +++ b/projects/btcst/index.js @@ -1,6 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const BTCST = "0x78650B139471520656b9E7aA7A5e9276814a38e9"; @@ -30,29 +29,10 @@ const listOfTokens = [ "0xba2ae424d960c26247dd6c32edc70b295c744c43", ]; -async function bscTvl(chainBlocks) { - const balances = {}; - - const transformAddress = i => `bsc:${i}`; - for (const token of listOfTokens) { - await sumTokensAndLPsSharedOwners( - balances, - [[token, false]], - vaultContracts, - chainBlocks["bsc"], - "bsc", - transformAddress - ); - } - - return balances; -} - module.exports = { - misrepresentedTokens: true, bsc: { staking: stakings(vaultContracts, BTCST), - tvl: bscTvl, + tvl: stakings(vaultContracts, listOfTokens), }, methodology: "Counts liquidty on all the Vaults through their Contracts", }; diff --git a/projects/composable/index.js b/projects/composable/index.js index 46e9157045..a3629501f1 100644 --- a/projects/composable/index.js +++ b/projects/composable/index.js @@ -1,53 +1,39 @@ const ADDRESSES = require('../helper/coreAssets.json') const { chainExports } = require('../helper/exports') -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') -const sdk = require('@defillama/sdk') const networks = { - 'ethereum': ['0xef4439f0fae7db0b5ce88c155fc6af50f1b38728', [ - ADDRESSES.ethereum.USDC, //usdc - ADDRESSES.ethereum.WETH, // eth - '0xca3d75ac011bf5ad07a98d02f18225f9bd9a6bdf', // tricrypto - ]], - 'arbitrum': ['0xEba8C2Bf0d1C9413543188fc42D7323690AED051', [ - ADDRESSES.arbitrum.USDC, //usdc - ADDRESSES.arbitrum.WETH //eth - ]], - 'polygon': ['0xcd8e7322dc2659b1ec447e5d52fdd9c67e8c3c01', [ - ADDRESSES.polygon.USDC, //usdc - ADDRESSES.polygon.WETH_1 //eth - ]] + 'ethereum': ['0xef4439f0fae7db0b5ce88c155fc6af50f1b38728', [ + ADDRESSES.ethereum.USDC, //usdc + ADDRESSES.ethereum.WETH, // eth + '0xca3d75ac011bf5ad07a98d02f18225f9bd9a6bdf', // tricrypto + ]], + 'arbitrum': ['0xEba8C2Bf0d1C9413543188fc42D7323690AED051', [ + ADDRESSES.arbitrum.USDC, //usdc + ADDRESSES.arbitrum.WETH //eth + ]], + 'polygon': ['0xcd8e7322dc2659b1ec447e5d52fdd9c67e8c3c01', [ + ADDRESSES.polygon.USDC, //usdc + ADDRESSES.polygon.WETH_1 //eth + ]] } const abi = { - token: "address:token", - totalToken: "uint256:totalToken", + token: "address:token", + totalToken: "uint256:totalToken", } const rugPools = ['0x4a03ea61e543ec7141a3f90128b0c0c9514f8737', '0xf12da8470e2643ccb39a157e8577d9aa586a488f', '0x1941441d31809e9E1828Da0cE6d44175F657E215'] function chainTvl(chain) { - return async (_time, ethBlock, chainBlocks) => { - const balances = {} - const [owner, tokens] = networks[chain] - await sumTokensAndLPsSharedOwners(balances, tokens.map(t => [t, false]), [owner], chainBlocks[chain], chain, addr => `${chain}:${addr}`) - if (chain === "ethereum") { - for (const pool of rugPools) { - const token = await sdk.api.abi.call({ - target: pool, - abi: abi.token, - block: ethBlock - }) - const bal = await sdk.api.abi.call({ - target: pool, - abi: abi.totalToken, - block: ethBlock - }) - sdk.util.sumSingleBalance(balances, token.output, bal.output) - } - } - return balances + return async (api) => { + const [owner, tokens] = networks[chain] + await api.sumTokens({ owner, tokens }) + if (chain === "ethereum") { + const tokens = await api.multiCall({ abi: abi.token, calls: rugPools }) + const balances = await api.multiCall({ abi: abi.totalToken, calls: rugPools }) + api.add(tokens, balances) } + } } module.exports = chainExports(chainTvl, Object.keys(networks)) \ No newline at end of file diff --git a/projects/crafting/index.js b/projects/crafting/index.js index de35652d11..4ee4ec79c8 100644 --- a/projects/crafting/index.js +++ b/projects/crafting/index.js @@ -1,11 +1,9 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const contractStakingETH = "0x9353177049757A21f19a28C3055c03871e6428cf"; -const ETH = ADDRESSES.null; const contractAddresses = [ + contractStakingETH, //Staking Contract wbtc "0xF70A76AfFD4c368eD16a2593C4D9FAee3562a4Ba", //Staking Contract usdt @@ -15,6 +13,7 @@ const contractAddresses = [ ]; const tokens = [ + ADDRESSES.null, ADDRESSES.ethereum.WBTC, ADDRESSES.ethereum.USDT, "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", @@ -32,44 +31,12 @@ const tokens_aurora = [ ADDRESSES.aurora.NEAR, ]; -async function ethTvl(timestamp, block) { - const balances = {}; - - for (let i = 0; i < tokens.length; i++) { - await sumTokensAndLPsSharedOwners( - balances, - [[tokens[i], false]], - [contractAddresses[i]] - ); - } - - const ethBal = ( - await sdk.api.eth.getBalance({ - target: contractStakingETH, - block - }) - ).output; - - sdk.util.sumSingleBalance(balances, ETH, ethBal); - - return balances; +async function ethTvl(api) { + await api.sumTokens({owners: contractAddresses, tokens: tokens}) } -async function auroraTvl(timestamp, block, chainBlocks) { - const balances = {}; - - for (let i = 0; i < tokens_aurora.length; i++) { - await sumTokensAndLPsSharedOwners( - balances, - [[tokens_aurora[i], false]], - [contractAddresses_aurora[i]], - chainBlocks["aurora"], - "aurora", - (addr) => `aurora:${addr}` - ); - } - - return balances; +async function auroraTvl(api) { + return api.sumTokens({owners: contractAddresses_aurora, tokens: tokens_aurora}) } module.exports = { diff --git a/projects/cybertime/index.js b/projects/cybertime/index.js index 96bc09744d..89599fa158 100644 --- a/projects/cybertime/index.js +++ b/projects/cybertime/index.js @@ -1,7 +1,7 @@ const abi = require("./abi.json"); const { pool2s } = require("../helper/pool2"); -const { addFundsInMasterChef } = require("../helper/masterchef"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); +const { staking } = require("../helper/staking"); const pool2FarmContracts = [ //CTFFarmV1 @@ -53,53 +53,20 @@ const farms = [ "0xCE997537498793d25dAb0F289e161DB26914275A", ]; -const Staking = async (chainBlocks) => { - const balances = {}; - - let transformAddress = i => `bsc:${i}`; - await sumTokensAndLPsSharedOwners( - balances, - [ - [NFTL_V1, false], - [CTF_V1, false], - [NFTL_V2, false], - [CTF_V2, false], - [CTF_V3, false], - ], - farms, - chainBlocks["bsc"], - "bsc", - transformAddress - ); - - return balances; -}; const bscTvl = async (api) => { - const balances = {}; - - let transformAddress = i => `bsc:${i}`; + const blacklistedTokens = [CTF_V3, CTF_V2] + const ownerTokens = [] for (const farm of farms) { - await addFundsInMasterChef( - balances, - farm, - api.bsc, - "bsc", - transformAddress, - abi.poolInfo, - [CTF_V2], - true, - true, - CTF_V3 - ); + const poolInfos = await api.fetchList({ lengthAbi: 'poolLength', itemAbi: abi.poolInfo, target: farm }) + ownerTokens.push([poolInfos.map(pool => pool.lpToken), farm]) } - - return balances; + return sumTokens2({ api, ownerTokens, blacklistedTokens, resolveLP: true, }) }; module.exports = { - bsc: { - staking: Staking, + bsc: { + staking: staking(farms, [NFTL_V1, CTF_V1, NFTL_V2, CTF_V2, CTF_V3,]), pool2: pool2s(pool2FarmContracts, lpPool2), tvl: bscTvl, }, diff --git a/projects/empyrean/index.js b/projects/empyrean/index.js index fd1a0dd0ca..7946f41140 100644 --- a/projects/empyrean/index.js +++ b/projects/empyrean/index.js @@ -1,40 +1,13 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const empyreanStaking = "0xD080CBc2885c64510923Ac6F5c8896011f86a6aF"; const EMPYR = "0xE9F226a228Eb58d408FdB94c3ED5A18AF6968fE1"; -const treasuryAddress = "0x4606f4e6D43d501b86Fc583f44ae27097A1F9EA7"; -const USDC = ADDRESSES.aurora.USDC_e; -const EMPYR_USDC_TLP = "0x6e46c69FE35eF5BB78D7f35d92645C74245a6567"; - -/*** Bonds TVL Portion (Treasury) *** - * Treasury TVL consists of USDC and Trisolaris TLP balances - ***/ -async function auroraTvl(timestamp, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [USDC, false], - [EMPYR_USDC_TLP, true], - ], - [treasuryAddress], - chainBlocks["aurora"], - "aurora", - (addr) => `aurora:${addr}` - ); - - return balances; -} - module.exports = { misrepresentedTokens: true, aurora: { staking: staking(empyreanStaking, EMPYR), - tvl: auroraTvl, + tvl: () => ({}), }, methodology: "Counts USDC and TLP (EMPYR-USDC) on the treasury", diff --git a/projects/enterdao/index.js b/projects/enterdao/index.js index 0be631aa3c..0e41471565 100644 --- a/projects/enterdao/index.js +++ b/projects/enterdao/index.js @@ -1,9 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require("../helper/unwrapLPs"); const StakingContract = "0x3F148612315AaE2514AC630D6FAf0D94B8Cd8E33"; -const USDC_ENTR_SUSHI_LP = "0x83b546e10917432a722444672504f0d459472171"; const yieldFarms = [ ADDRESSES.ethereum.SUSHI, //SUSHI "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b", //AXS @@ -15,26 +13,11 @@ const yieldFarms = [ "0x83b546e10917432a722444672504f0d459472171", //SUSHI-LP ]; -const ethTvl = async () => { - const balances = {}; - - for (const yieldFarm of yieldFarms) { - await sumTokensAndLPsSharedOwners( - balances, - yieldFarm == USDC_ENTR_SUSHI_LP - ? [[yieldFarm, true]] - : [[yieldFarm, false]], - [StakingContract] - ); - } - - return balances; -}; module.exports = { misrepresentedTokens: true, ethereum: { - tvl: ethTvl, + tvl: sumTokensExport({ owner: StakingContract, tokens: yieldFarms, resolveLP: true, }), }, methodology: "We count as TVL all the Yield Farms through Staking Contract", }; diff --git a/projects/euphoria/index.js b/projects/euphoria/index.js index 77a2cc1358..32bf250bf1 100644 --- a/projects/euphoria/index.js +++ b/projects/euphoria/index.js @@ -1,6 +1,5 @@ const { staking } = require('../helper/staking'); -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs'); -const { getChainTransform } = require('../helper/portedTokens'); +const { sumTokensExport } = require('../helper/unwrapLPs'); const wagmiAddresses = { staking: '0x95066025af40F7f7832f61422802cD1e13C23753', @@ -22,33 +21,17 @@ const wagmiReserves = { }, }; -async function tvl(time, ethBlock, {harmony: block}) { - const balances = {}; - const transform = await getChainTransform('harmony'); - - await sumTokensAndLPsSharedOwners( - balances, - [ - [wagmiReserves.single.dai, false], - [wagmiReserves.lp.wagmiDai, true], - [wagmiReserves.single.ust, false], - [wagmiReserves.lp.wagmiUst, true], - [wagmiReserves.single.usdc, false], - [wagmiReserves.single.busd, false], - [wagmiReserves.lp.wagmiOne, true], - ], - [wagmiAddresses.treasury], - block, - 'harmony', - transform - ); - - return balances; -} - module.exports = { harmony: { - tvl, + tvl: sumTokensExport({owners: [wagmiAddresses.treasury], tokens: [ + wagmiReserves.single.dai, + wagmiReserves.lp.wagmiDai, + wagmiReserves.single.ust, + wagmiReserves.lp.wagmiUst, + wagmiReserves.single.usdc, + wagmiReserves.single.busd, + wagmiReserves.lp.wagmiOne, + ], resolveLP: true,}), staking: staking(wagmiAddresses.staking, wagmiAddresses.wagmi), }, methodology: diff --git a/projects/evmoswap/index.js b/projects/evmoswap/index.js index 9977c6b241..6b6d3fb9d8 100644 --- a/projects/evmoswap/index.js +++ b/projects/evmoswap/index.js @@ -1,14 +1,10 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); -const { getChainTransform} = require("../helper/portedTokens") const { getUniTVL } = require('../helper/unknownTokens') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const madDAI = ADDRESSES.evmos.DAI const madUSDC = ADDRESSES.evmos.USDC const madUSDT = ADDRESSES.evmos.USDT -const madWETH = ADDRESSES.evmos.WETH -const madWBTC = ADDRESSES.evmos.WBTC //////////////////////////// UNI AMM //////////////////////////////////// const evmoswapTvl = getUniTVL({ factory: '0xF24E36e53628C3086493B9EfA785ab9DD85232EB', useDefaultCoreAssets: true }) @@ -18,25 +14,10 @@ const poolAddressesEvmos = [ "0xf0a5b0fa1531C94754241911A2E6D94506336321", // 3pool ]; -async function stableAMMTvl(timestamp, chainBlocks) { - const balances = {}; - const transformAddress = await getChainTransform("evmos"); - await sumTokensAndLPsSharedOwners( - balances, - [ - [madDAI, false], - [madUSDC, false], - [madUSDT, false], - ], - poolAddressesEvmos, - chainBlocks["evmos"], - "evmos", - transformAddress - ); - return balances; +async function stableAMMTvl(api) { + return api.sumTokens({owners: poolAddressesEvmos, tokens: [madDAI, madUSDC, madUSDT]}) } - module.exports = { misrepresentedTokens: true, methodology: @@ -44,4 +25,4 @@ module.exports = { evmos: { tvl: sdk.util.sumChainTvls([evmoswapTvl, stableAMMTvl]), }, -}; // node test.js projects/evmoswap/index.js +} diff --git a/projects/fantOHM/index.js b/projects/fantOHM/index.js index 4ef7e40e40..469bc847c0 100644 --- a/projects/fantOHM/index.js +++ b/projects/fantOHM/index.js @@ -1,8 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const {staking} = require("../helper/staking"); -const {sumTokensAndLPsSharedOwners} = require("../helper/unwrapLPs"); -const index = require('./index.json') +const { sumTokens2} = require("../helper/unwrapLPs"); const MasterChefBeets = require('./MasterChefBeets.json') const BalancerVaultBeets = require('./BalancerVaultBeets.json') const BalancerWeightedPoolBeets = require('./BalancerWeightedPoolBeets.json') @@ -29,41 +28,13 @@ const ftmTradfi3mContract = "0xEFbe7fe9E8b407a3F0C0451E7669E70cDD0C4C77"; const ftmTradfi6mContract = "0xB1c77436BC180009709Be00C9e852246476321A3"; const masterChefContract = "0x4897EB3257A5391d80B2f73FB0748CCd4150b586"; -// -// Moonriver TVL should consist of - treasury value and investments on gnosis safe -// -const movr_transforms = { - "0x748134b5f553f2bcbd78c6826de99a70274bdeb3": "ethereum:" + ADDRESSES.ethereum.USDC, // USDC - "0xe936caa7f6d9f5c9e907111fcaf7c351c184cda7": "ethereum:" + ADDRESSES.ethereum.USDT, // USDT - "0xfa1fbb8ef55a4855e5688c0ee13ac3f202486286": "fantom:0xfa1FBb8Ef55A4855E5688C0eE13aC3f202486286", // FHM -} - -async function moonriverTvl(timestamp, block, chainBlocks) { - let balances = {}; - block = chainBlocks.moonriver - // treasury value - await sumTokensAndLPsSharedOwners(balances, [ - ["0x748134b5f553f2bcbd78c6826de99a70274bdeb3", false], // USDC.m - ["0xE936CAA7f6d9F5C9e907111FCAf7c351c184CDA7", false], // USDT.m - ["0x0b6116bb2926d996cdeba9e1a79e44324b0401c9", true], // HB LP - ], [moonriverTreasuryContract], block, "moonriver", - addr => (movr_transforms[addr.toLowerCase()] ? movr_transforms[addr.toLowerCase()] : `moonriver:${addr}`)); - - // investments - await Promise.all([ - balanceOf(moonriverGnosisContract, "0x98878B06940aE243284CA214f92Bb71a2b032B8A", "moonriver:0x98878B06940aE243284CA214f92Bb71a2b032B8A", balances, chainBlocks.moonriver, "moonriver"), // wMOVR - ]); - - return balances; -} - -// -// Fantom TVL should consist of - treasury value and investments on gnosis safe -// -const fantom_transforms = { - [ADDRESSES.fantom.DAI]: ADDRESSES.ethereum.DAI, // DAI - [ADDRESSES.fantom.USDC]: ADDRESSES.ethereum.USDC, // USDC +async function moonriverTvl(api) { + return sumTokens2({api, owner: moonriverTreasuryContract, tokens: [ + "0x748134b5f553f2bcbd78c6826de99a70274bdeb3", + "0xE936CAA7f6d9F5C9e907111FCAf7c351c184CDA7", + "0x0b6116bb2926d996cdeba9e1a79e44324b0401c9", + ], resolveLP: true }) } async function fantomTvl(timestamp, _, {fantom: block}) { diff --git a/projects/fei/index.js b/projects/fei/index.js index 1c8b547d12..4586ef9f08 100644 --- a/projects/fei/index.js +++ b/projects/fei/index.js @@ -1,11 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') +const { nullAddress, sumTokens2 } = require('../helper/unwrapLPs'); -const weth = ADDRESSES.ethereum.WETH - -async function tvl(timestamp, block) { - const balances = {} +async function tvl(api) { const owners = [ '0xBFfB152b9392e38CdDc275D818a3Db7FE364596b', // GenesisGroup.sol [OLD] '0xa08A721dFB595753FFf335636674D76C455B275C', // EthReserveStabilizer.sol [OLD] @@ -46,26 +42,20 @@ async function tvl(timestamp, block) { // Holders of DPI in Fuse pool 19 '0x3dD3d945C4253bAc5B4Cc326a001B7d3f9C4DD66', // DpiFusePcvDeposit.sol ] - await sumTokensAndLPsSharedOwners(balances, [ - ['0x94b0a3d511b6ecdb17ebf877278ab030acb0a878', true], // FEI-ETH Uni V2 LP (NOTE: this counts both FEI and ETH, but only the FEI doesn't count as PCV) - [ADDRESSES.ethereum.STETH, false], // stETH - ['0x030ba81f1c18d280636f32af80b9aad02cf0854e', false], // aWETH - ['0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5', false], // cETH - ['0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', false], // cDAI - ['0x0954906da0Bf32d5479e25f46056d22f08464cab', false], // INDEX - ['0xc9BC48c72154ef3e5425641a3c747242112a46AF', false], // aRAI - ['0x752F119bD4Ee2342CE35E2351648d21962c7CAfE', false], // RAI in Fuse pool 9 - ['0x8775aE5e83BC5D926b6277579c2B0d40c7D9b528', true], // FEI-DPI Sushi LP (NOTE: this counts both the FEI and the DPI, but only the FEI doesn't count as PCV) - ['0xF06f65a6b7D2c401FcB8B3273d036D21Fe2a5963', false], // DPI in Fuse pool 19 - ], owners, block) - const directETH = await sdk.api.eth.getBalances({ - targets: owners, - block - }) - directETH.output.forEach(eth => { - sdk.util.sumSingleBalance(balances, weth, eth.balance) - }) - return balances + const tokens = [ + '0x94b0a3d511b6ecdb17ebf877278ab030acb0a878', // FEI-ETH Uni V2 LP (NOTE: this counts both FEI and ETH, but only the FEI doesn't count as PCV) + ADDRESSES.ethereum.STETH, // stETH + '0x030ba81f1c18d280636f32af80b9aad02cf0854e', // aWETH + '0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5', // cETH + '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', // cDAI + '0x0954906da0Bf32d5479e25f46056d22f08464cab', // INDEX + '0xc9BC48c72154ef3e5425641a3c747242112a46AF', // aRAI + '0x752F119bD4Ee2342CE35E2351648d21962c7CAfE', // RAI in Fuse pool 9 + '0x8775aE5e83BC5D926b6277579c2B0d40c7D9b528', // FEI-DPI Sushi LP (NOTE: this counts both the FEI and the DPI, but only the FEI doesn't count as PCV) + '0xF06f65a6b7D2c401FcB8B3273d036D21Fe2a5963', // DPI in Fuse pool 19 + nullAddress + ] + return sumTokens2({ api, owners, tokens,}) } module.exports = { diff --git a/projects/fiatdao/index.js b/projects/fiatdao/index.js index 8c9c9e7e6f..d50accceba 100644 --- a/projects/fiatdao/index.js +++ b/projects/fiatdao/index.js @@ -1,9 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk") -const { default: BigNumber } = require("bignumber.js") const abi = require('./abi.json') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs") +const { sumTokens2, } = require("../helper/unwrapLPs") const { getConfig } = require('../helper/cache') @@ -14,76 +12,42 @@ const YFI = ADDRESSES.ethereum.YFI const MKR = ADDRESSES.ethereum.MKR const BOND = "0x0391D2021f89DC339F60Fff84546EA23E337750f" const UMA = "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828" -const GOHM = "0x0ab87046fbb341d058f17cbc4c1133f25a20a52f" const WSOHM = "0xca76543cf381ebbb277be79574059e32108e3e65" const WSOHM_FDT_SLP = "0x2e30e758b3950dd9afed2e21f5ab82156fbdbbba" const FDT_GOHM = "0x75b02b9889536B617d57D08c1Ccb929c523945C1" -const LUSD = ADDRESSES.ethereum.LUSD -const LUSD3CRV = '0xEd279fDD11cA84bEef15AF5D39BB4d4bEE23F0cA' - -function resolveUnderlier(underlier) { - if (underlier == LUSD3CRV) return LUSD - return underlier -} - -// Launch Ceremony -async function launchCeremonyTVL(timestamp, block) { - const balances = {} - - await sumTokensAndLPsSharedOwners( - balances, - [ - [WSOHM, false], - [RGT, false], - [YFI, false], - [MKR, false], - [BOND, false], - [UMA, false], - [WSOHM_FDT_SLP, true], - [FDT_GOHM, true], - ], - [STAKING_CONTRACT, STAKING_NFT], - block, - "ethereum", - (addr) => { - if (addr.toLowerCase() === WSOHM.toLowerCase()) return GOHM - return addr - } - ) - - return balances -} - // Protocol TVL -async function tvl(timestamp, block) { - if (block && block < 14928955 ) return {}; - const balances = {}; +async function tvl(api) { + + // Launch Ceremony + await sumTokens2({ api, owners: [STAKING_CONTRACT, STAKING_NFT], tokens: [RGT, YFI, MKR, BOND, UMA, WSOHM_FDT_SLP, FDT_GOHM,], resolveLP: true }) + const wsOHMBal = await api.call({ abi: 'erc20:balanceOf', target: WSOHM, params: STAKING_CONTRACT }) + api.add('0x0ab87046fbb341d058f17cbc4c1133f25a20a52f', wsOHMBal) const metadata = (await getConfig('fiatdao', 'https://raw.githubusercontent.com/fiatdao/changelog/main/metadata/metadata-mainnet.json')) const allVaults = Object.keys(metadata) - const { output: tokensAll } = await sdk.api.abi.multiCall({ abi: abi.token, calls: allVaults.map(i => ({ target: i })), block, }) + const tokensAll = await api.multiCall({ abi: abi.token, calls: allVaults, }) const tokens = [] const vaults = [] - tokensAll.forEach(({ output, input: { target } }) => { + tokensAll.forEach((output, i) => { if (output !== ADDRESSES.null) { - vaults.push(target) + vaults.push(allVaults[i]) tokens.push(output) } }) - const vaultCalls = vaults.map(i => ({ target: i })) - const { output: tokenScales } = await sdk.api.abi.multiCall({ abi: abi.tokenScale, calls: vaultCalls, block, }) - const { output: underliers } = await sdk.api.abi.multiCall({ abi: abi.underlierToken, calls: vaultCalls, block, }) - const { output: underlierScales } = await sdk.api.abi.multiCall({ abi: abi.underlierScale, calls: vaultCalls, block, }) + const tokenScales = await api.multiCall({ abi: abi.tokenScale, calls: vaults, }) + const underliers = await api.multiCall({ abi: abi.underlierToken, calls: vaults, }) + const underlierScales = await api.multiCall({ abi: abi.underlierScale, calls: vaults, }) const erc20Metadata = [] const erc1155Metadata = [] - underliers.forEach(({ output: token, input: { target: vault } }, i) => { - const underlier = resolveUnderlier(token) - const scale = BigNumber(underlierScales[i].output / (tokenScales[i].output * 1e18)) + underliers.forEach((token, i) => { + const underlier = token + const vault = vaults[i] + const scale = underlierScales[i] / (tokenScales[i] * 1e18) metadata[vault].tokenIds.forEach(id => { if (id === '0') { erc20Metadata.push({ vault, scale, underlier, tokenCall: { target: tokens[i], params: vault }, priceCall: { target: vault, params: [0, false, false] } }) @@ -93,27 +57,29 @@ async function tvl(timestamp, block) { }) }) - const { output: erc20Balances } = await sdk.api.abi.multiCall({ abi: 'erc20:balanceOf', calls: erc20Metadata.map(i => i.tokenCall), block, }) - const { output: erc20Prices } = await sdk.api.abi.multiCall({ abi: abi.fairPrice, calls: erc20Metadata.map(i => i.priceCall), block, }) - const { output: erc1155Balances } = await sdk.api.abi.multiCall({ abi: abi.balanceOf, calls: erc1155Metadata.map(i => i.tokenCall), block, }) - const { output: erc1155Prices } = await sdk.api.abi.multiCall({ abi: abi.fairPrice, calls: erc1155Metadata.map(i => i.priceCall), block, }) + const erc20Balances = await api.multiCall({ abi: 'erc20:balanceOf', calls: erc20Metadata.map(i => i.tokenCall), }) + const erc20Prices = await api.multiCall({ abi: abi.fairPrice, calls: erc20Metadata.map(i => i.priceCall), }) + const erc1155Balances = await api.multiCall({ abi: abi.balanceOf, calls: erc1155Metadata.map(i => i.tokenCall), permitFailure: true}) + const erc1155Prices = await api.multiCall({ abi: abi.fairPrice, calls: erc1155Metadata.map(i => i.priceCall), permitFailure: true }) - erc20Balances.forEach(({ output, }, i) => { - sdk.util.sumSingleBalance(balances, erc20Metadata[i].underlier, erc20Metadata[i].scale.times(output).times(erc20Prices[i].output).toFixed(0)) + erc20Balances.forEach((output, i) => { + api.add(erc20Metadata[i].underlier, erc20Metadata[i].scale * output * erc20Prices[i]) }) - erc1155Balances.forEach(({ output, }, i) => { - sdk.util.sumSingleBalance(balances, erc1155Metadata[i].underlier, erc1155Metadata[i].scale.times(output).times(erc1155Prices[i].output).toFixed(0)) + erc1155Balances.forEach((output, i) => { + if (!output || !erc1155Prices[i]) { + return; + } + api.add(erc1155Metadata[i].underlier, erc1155Metadata[i].scale * output * erc1155Prices[i]) }) - return balances } module.exports = { misrepresentedTokens: true, methodology: 'TVL includes fair value of collateral backing outstanding $FIAT and the initial FDT Jubilee event', - ethereum: { tvl: sdk.util.sumChainTvls([tvl, launchCeremonyTVL]) }, - hallmarks:[ + ethereum: { tvl }, + hallmarks: [ [1635959960, "FDT Jubilee starts"], [1639380013, "FDT Jubilee ends"], [1649604096, "Protocol Launch"] diff --git a/projects/metapool.js b/projects/metapool.js index 92d45bdc3e..6a4680ac69 100644 --- a/projects/metapool.js +++ b/projects/metapool.js @@ -1,9 +1,8 @@ -const utils = require('./helper/utils'); +const utils = require('./helper/utils') const ADDRESSES = require('./helper/coreAssets.json') -const sdk = require("@defillama/sdk") async function tvl() { - const totalTvl = await utils.fetchURL('http://validators.narwallets.com:7000/metrics_json') + const totalTvl = await utils.fetchURL('http://validators.narwallets.com:7000/metrics_json') return { near: totalTvl.data.tvl @@ -11,11 +10,12 @@ async function tvl() { } module.exports = { - methodology: 'TVL counts the NEAR tokens that are staked.', - near: { tvl, }, - aurora: { - tvl: async (_, block, chainBlocks) => ({ - ["aurora:" + ADDRESSES.aurora.AURORA]: (await sdk.api.erc20.totalSupply({ target: "0xb01d35D469703c6dc5B369A1fDfD7D6009cA397F", chain:"aurora", block: chainBlocks.aurora})).output - }) + methodology: 'TVL counts the NEAR tokens that are staked.', + near: { tvl, }, + aurora: { + tvl: async (api) => { + const totalSupply = await api.call({ abi: 'erc20:totalSupply', target: '0xb01d35D469703c6dc5B369A1fDfD7D6009cA397F' }) + api.add(ADDRESSES.aurora.AURORA ,totalSupply) } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/projects/sorbetfinance/abi.json b/projects/sorbetfinance/abi.json deleted file mode 100644 index a3f879f2f9..0000000000 --- a/projects/sorbetfinance/abi.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "getDeployers": "address[]:getDeployers", - "getPools": "function getPools(address deployer) view returns (address[])", - "token0": "address:token0", - "token1": "address:token1", - "getUnderlyingBalances": "function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)" -} \ No newline at end of file diff --git a/projects/sorbetfinance/index.js b/projects/sorbetfinance/index.js index a6e0f7ee33..cfe8a07a34 100644 --- a/projects/sorbetfinance/index.js +++ b/projects/sorbetfinance/index.js @@ -1,85 +1,16 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); +const abi = { + "getPools": "function getPools(address deployer) view returns (address[])", + "getUnderlyingBalances": "function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)" +} -const chainTvl = (chain, G_UNI_Factory) => async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - const block = chainBlocks[chain] - - const getAllDeplores = ( - await sdk.api.abi.call({ - abi: abi.getDeployers, - target: G_UNI_Factory, - block, - chain, - }) - ).output; - - const getAllPools = ( - await sdk.api.abi.multiCall({ - abi: abi.getPools, - calls: getAllDeplores.map((deployer) => ({ - target: G_UNI_Factory, - params: deployer, - })), - block, - chain, - }) - ).output.map((pool) => pool.output); - - const allGelatoPools = [].concat.apply([], getAllPools); - - const token0 = ( - await sdk.api.abi.multiCall({ - abi: abi.token0, - calls: allGelatoPools.map((pool) => ({ - target: pool, - })), - block, - chain - }) - ).output.map((t0) => t0.output); - - const token1 = ( - await sdk.api.abi.multiCall({ - abi: abi.token1, - calls: allGelatoPools.map((pool) => ({ - target: pool, - })), - block, - chain, - }) - ).output.map((t1) => t1.output); - - const balanceOfPools = ( - await sdk.api.abi.multiCall({ - abi: abi.getUnderlyingBalances, - calls: allGelatoPools.map((pool) => ({ - target: pool, - })), - block, - chain - }) - ).output.map((bal) => bal.output); - - for (let i = 0; i < allGelatoPools.length; i++) { - sdk.util.sumSingleBalance(balances, `${chain}:${token0[i]}`, balanceOfPools[i].amount0Current); - sdk.util.sumSingleBalance(balances, `${chain}:${token1[i]}`, balanceOfPools[i].amount1Current); - } - - return balances; -}; +const config = { + ethereum: '0xEA1aFf9dbFfD1580F6b81A3ad3589E66652dB7D9', + optimism: '0x2845c6929d621e32B7596520C8a1E5a37e616F09', + polygon: '0x37265A834e95D11c36527451c7844eF346dC342a' +} module.exports = { doublecounted: true, - ethereum: { - tvl: chainTvl("ethereum", "0xEA1aFf9dbFfD1580F6b81A3ad3589E66652dB7D9"), - }, - optimism: { - tvl: chainTvl("optimism", "0x2845c6929d621e32B7596520C8a1E5a37e616F09"), - }, - polygon: { - tvl: chainTvl("polygon", "0x37265A834e95D11c36527451c7844eF346dC342a") - }, methodology: "Counts TVL that's on all the Pools through G-UNI Factory Contract", hallmarks:[ @@ -87,3 +18,20 @@ module.exports = { [1643056020, "Maker GUNI Cap to 500M"], ], }; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const G_UNI_Factory = config[chain] + const deployers = await api.call({ abi: "address[]:getDeployers", target: G_UNI_Factory}) + const pools = (await api.multiCall({ abi: abi.getPools, calls: deployers, target: G_UNI_Factory})).flat() + const token0s = await api.multiCall({ abi: "address:token0", calls: pools }) + const token1s = await api.multiCall({ abi: "address:token1", calls: pools }) + const bals = await api.multiCall({ abi: abi.getUnderlyingBalances, calls: pools }) + bals.forEach((bal, i) => { + api.add(token0s[i], bal.amount0Current) + api.add(token1s[i], bal.amount1Current) + }) + } + } +}) \ No newline at end of file diff --git a/projects/spartan-protocol/abis/PoolFactory.json b/projects/spartan-protocol/abis/PoolFactory.json deleted file mode 100644 index 6e638c83f7..0000000000 --- a/projects/spartan-protocol/abis/PoolFactory.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "getPool": "function getPool(address token) view returns (address pool)", - "getTokenAssets": "address[]:getTokenAssets" -} \ No newline at end of file diff --git a/projects/spartan-protocol/index.js b/projects/spartan-protocol/index.js index 05c0ee3a4e..104cf4f6db 100644 --- a/projects/spartan-protocol/index.js +++ b/projects/spartan-protocol/index.js @@ -1,48 +1,16 @@ -const sdk = require("@defillama/sdk"); - -const factoryAbi = require("./abis/PoolFactory.json"); +const factoryAbi = { + "getPool": "function getPool(address token) view returns (address pool)", + "getTokenAssets": "address[]:getTokenAssets" +} const factory = "0x2C577706579E08A88bd30df0Fd7A5778A707c3AD"; const sparta = "0x3910db0600eA925F63C36DdB1351aB6E2c6eb102"; -async function tvl(timestamp, ethBlock, chainBlocks) { - let tokens = await sdk.api.abi.call({ - target: factory, - abi: factoryAbi["getTokenAssets"], - block: chainBlocks.bsc, - params: [], - chain: "bsc", - }); // Get listed token array - tokens = tokens.output; - - let balances = {}; // Setup the balances object - for (let i = 0; i < tokens.length; i++) { - const poolAddress = sdk.api.abi.call({ - target: factory, - abi: factoryAbi["getPool"], - block: chainBlocks.bsc, - params: [tokens[i]], - chain: "bsc", - }); // PoolFactory.getPool(tokenAddr) - - const tokenBal = sdk.api.erc20.balanceOf({ - target: tokens[i], - owner: (await poolAddress).output, - chain: "bsc", - block: chainBlocks.bsc, - }); // Pool's token balance - const spartaBal = sdk.api.erc20.balanceOf({ - target: sparta, - owner: (await poolAddress).output, - chain: "bsc", - block: chainBlocks.bsc, - }); // Pool's sparta balance - - sdk.util.sumSingleBalance(balances, `bsc:${tokens[i]}`, (await tokenBal).output) - sdk.util.sumSingleBalance(balances, `bsc:${sparta}`, (await spartaBal).output) - } - - return balances; +async function tvl(api) { + let tokens = await api.call({ target: factory, abi: factoryAbi["getTokenAssets"], }) + const pools = await api.multiCall({ abi: factoryAbi.getPool, target: factory, calls: tokens }) + const ownerTokens = pools.map((pool, i) => [[tokens[i], sparta], pool]) + return api.sumTokens({ ownerTokens }) } module.exports = { diff --git a/projects/spherium/abi.json b/projects/spherium/abi.json deleted file mode 100644 index 8c892f3b37..0000000000 --- a/projects/spherium/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "getAllWhitelistedTokenNames": "string[]:getAllWhitelistedTokenNames", - "whitelistedTokenAddress": "function whitelistedTokenAddress(string) view returns (address)" -} \ No newline at end of file diff --git a/projects/spherium/constants.js b/projects/spherium/constants.js deleted file mode 100644 index 93e1e20f38..0000000000 --- a/projects/spherium/constants.js +++ /dev/null @@ -1,20 +0,0 @@ -const bridgeAddr = "0x0b8c93c6aaeabfdf7845786188727aa04100cb61"; -const supportedChains = [ - "ethereum", - "bsc", - "polygon", - "avax", - "fantom", - "arbitrum", - "cronos", - "moonriver", - "moonbeam", - "optimism", - "aurora", - "okexchain", - "kcc", -]; -module.exports = { - bridgeAddr, - supportedChains, -}; diff --git a/projects/spherium/index.js b/projects/spherium/index.js index 770a55c88b..629630b861 100644 --- a/projects/spherium/index.js +++ b/projects/spherium/index.js @@ -1,35 +1,33 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const { supportedChains, bridgeAddr } = require("./constants"); -const { sumTokens2 } = require('../helper/unwrapLPs') +const abi = { + "getAllWhitelistedTokenNames": "string[]:getAllWhitelistedTokenNames", + "whitelistedTokenAddress": "function whitelistedTokenAddress(string) view returns (address)" +} +const bridgeAddr = "0x0b8c93c6aaeabfdf7845786188727aa04100cb61"; +const supportedChains = [ + "ethereum", + "bsc", + "polygon", + "avax", + "fantom", + "arbitrum", + "cronos", + "moonriver", + "moonbeam", + "optimism", + "aurora", + "okexchain", + "kcc", +]; const blackList = new Set(["SPHRI"]); -function chainTvl(chain) { - return async (_timestamp, _block, {[chain]: block}) => { - const tokens = await getTokens(chain, block) - return sumTokens2({ chain, block, owner: bridgeAddr, tokens, }) - }; -} - -async function getTokens(chain, block) { - let { output: tokenNames } = await sdk.api.abi.call({ - target: bridgeAddr, - abi: abi.getAllWhitelistedTokenNames, - chain, block, - }) +const tvl = async (api) => { + let tokenNames = await api.call({ target: bridgeAddr, abi: abi.getAllWhitelistedTokenNames, }) tokenNames = tokenNames.filter(i => !blackList.has(i)) - const { output: tokens } = await sdk.api.abi.multiCall({ - target: bridgeAddr, - abi: abi.whitelistedTokenAddress, - calls: tokenNames.map(i => ({ params: i})), - chain, block, - }) - return tokens.map(i => i.output) -} - -module.exports = {} + const tokens = await api.multiCall({ target: bridgeAddr, abi: abi.whitelistedTokenAddress, calls: tokenNames }) + return api.sumTokens({ owner: bridgeAddr, tokens, }) +}; supportedChains.forEach((chain) => { - module.exports[chain] = { tvl: chainTvl(chain) }; + module.exports[chain] = { tvl }; }); \ No newline at end of file diff --git a/projects/squid-defi/index.js b/projects/squid-defi/index.js index 35a500bfef..d05e6a3752 100644 --- a/projects/squid-defi/index.js +++ b/projects/squid-defi/index.js @@ -1,118 +1,28 @@ -const sdk = require("@defillama/sdk"); const abi = require("../helper/abis/masterchef.json"); -const {unwrapUniswapLPs} = require("../helper/unwrapLPs.js"); +const { sumTokens2 } = require("../helper/unwrapLPs.js"); +const { pool2 } = require('../helper/pool2') +const { staking } = require('../helper/staking') const token = "0xd86Be84feC60Fedf263059BB1581e00d2168e19D"; const masterchef = "0x1610374513e989Fc263A5741A053fa023A6f212A"; const pool2LPs = [ - "0xeA3998615d2Bfe793E84318d5fE9D3Aa3d0F2F3f", - "0x628C669511C4be30DA1c3C7Da4725eCD074c1c8B", - "0x961C853477cAc8B9cfef953312331a2bE0C31C67", - "0x7815A02bf54aa25039cC40Ac63daA84D876D130C" + "0xeA3998615d2Bfe793E84318d5fE9D3Aa3d0F2F3f", + "0x628C669511C4be30DA1c3C7Da4725eCD074c1c8B", + "0x961C853477cAc8B9cfef953312331a2bE0C31C67", + "0x7815A02bf54aa25039cC40Ac63daA84D876D130C" ] -async function tvl(timestamp, block, chainBlocks) { - let balances = {}; - - let { output: poolLength } = await sdk.api.abi.call({ - target: masterchef, - abi: abi["poolLength"], - block: chainBlocks.fantom, - chain: "fantom" - }); - - let { output: poolInfo } = await sdk.api.abi.multiCall({ - calls: Array.from({length: Number(poolLength)}, (v, k) => ({ - target: masterchef, - params: k - })), - abi: abi["poolInfo"], - block: chainBlocks.fantom, - chain: "fantom" - }); - - let { output: symbols } = await sdk.api.abi.multiCall({ - calls: poolInfo.map(pool => ({ - target: pool.output.lpToken - })), - abi: "erc20:symbol", - block: chainBlocks.fantom, - chain: "fantom" - }); - - let {output: balance } = await sdk.api.abi.multiCall({ - calls: poolInfo.map(pool => ({ - target: pool.output.lpToken, - params: masterchef - })), - abi: "erc20:balanceOf", - block: chainBlocks.fantom, - chain: "fantom" - }); - - let lpPositions = []; - for (let i = 0; i < Number(poolLength); i++) { - if (balance[i].output === null || poolInfo[i].output.lpToken === token) { - continue; - } - if (symbols[i].output.endsWith("LP")) { - lpPositions.push({ - balance: balance[i].output, - token: poolInfo[i].output.lpToken - }) - } else { - sdk.util.sumSingleBalance(balances, `fantom:${poolInfo[i].output.lpToken}`, balance[i].output); - } - } - - await unwrapUniswapLPs(balances, lpPositions, chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`, [token]); - - return balances; -} - -async function pool2(timestamp, block, chainBlocks) { - let balances = {}; - - let {output: balance} = await sdk.api.abi.multiCall({ - calls: pool2LPs.map(pool => ({ - target: pool, - params: masterchef - })), - abi: "erc20:balanceOf", - block: chainBlocks.fantom, - chain: "fantom" - }); - - let lpPositions = Array.from({length: pool2LPs.length}, (v, k) => ({ - balance: balance[k].output, - token: pool2LPs[k] - })); - - await unwrapUniswapLPs(balances, lpPositions, chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`); - - return balances; -} - -async function staking(timestamp, block, chainBlocks) { - let balances = {} - - let {output: balance} = await sdk.api.erc20.balanceOf({ - target: token, - owner: masterchef, - block: chainBlocks.fantom, - chain: "fantom" - }); - - sdk.util.sumSingleBalance(balances, token, balance); - - return balances; +async function tvl(api) { + const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: masterchef }) + const tokens = poolInfos.map(pool => pool.lpToken) + return sumTokens2({ api, owner: masterchef, tokens, blacklistedTokens: [...pool2LPs, token], resolveLP: true }) } module.exports = { - fantom: { - tvl, - pool2, - staking - }, + fantom: { + tvl, + pool2: pool2(masterchef, pool2LPs), + staking: staking(masterchef, token) + }, } \ No newline at end of file diff --git a/projects/stacker/index.js b/projects/stacker/index.js index b882d291df..3174e77fed 100644 --- a/projects/stacker/index.js +++ b/projects/stacker/index.js @@ -1,27 +1,17 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); - const vaults = [ - // farm, token used - ['0x067b9FE006E16f52BBf647aB6799f87566480D2c', ADDRESSES.ethereum.USDC], // USDC - ['0x70e51DFc7A9FC391995C2B2f027BC49D4fe01577', ADDRESSES.ethereum.WETH], // WETH - ['0x17E9ed51feD2F190D50f5bd4f1a8C9CbCd36162A', ADDRESSES.ethereum.WBTC], // WBTC + '0x067b9FE006E16f52BBf647aB6799f87566480D2c', + '0x70e51DFc7A9FC391995C2B2f027BC49D4fe01577', + '0x17E9ed51feD2F190D50f5bd4f1a8C9CbCd36162A', ] -async function tvl(timestamp, block, chainBlocks) { - const balances = {} - await Promise.all(vaults.map(async vault=>{ - const supply = await sdk.api.erc20.totalSupply({ - target: vault[0], - block - }) - sdk.util.sumSingleBalance(balances, vault[1], supply.output) - })) - return balances +async function tvl(api) { + const tokens = await api.multiCall({ abi: 'address:underlyingContract', calls: vaults}) + const bals = await api.multiCall({ abi: 'uint256:totalUnderlying', calls: vaults}) + api.add(tokens, bals) } module.exports = { - ethereum:{ + ethereum: { tvl, }, } \ No newline at end of file diff --git a/projects/stake-ly/index.js b/projects/stake-ly/index.js index 6f0f46927c..cb3098ab7b 100644 --- a/projects/stake-ly/index.js +++ b/projects/stake-ly/index.js @@ -1,23 +1,11 @@ -const sdk = require("@defillama/sdk"); - -async function tvl(timestamp, _ethBlock, {klaytn: block}) { - const chain = "klaytn"; +async function tvl(api) { const stKlayAddress = "0xF80F2b22932fCEC6189b9153aA18662b15CC9C00" - - const pooledKlay = await sdk.api.abi.call({ - block, - chain, - target: stKlayAddress, - abi: "uint256:totalStaking", - }); - - return { - "klay-token": Number(pooledKlay.output) / 1e18, - }; + const pooledKlay = await api.call({ abi: 'uint256:totalStaking', target: stKlayAddress }) + api.addGasToken(pooledKlay) } module.exports = { - methodology: + methodology: "TVL is KLAY staked by the users and rewards accrued from node staking", start: 1663585837, klaytn: { diff --git a/projects/stake1/abi.json b/projects/stake1/abi.json deleted file mode 100644 index 02e2ecaf6f..0000000000 --- a/projects/stake1/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "see_s1ftm_circ": "uint256:see_s1ftm_circ", - "see_s1tomb_circ": "uint256:see_s1tomb_circ" -} \ No newline at end of file diff --git a/projects/stake1/contracts.json b/projects/stake1/contracts.json deleted file mode 100644 index cd3fd57c28..0000000000 --- a/projects/stake1/contracts.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "ftmVault": "0x3d2fa78f5e1aa2e7f29c965d0e22b32b8d5f14a9", - "tombVault": "0xA222fb9D2A811FAb3B334a5a9FA573C11fee73c1", - "avaxVault": "0x1689D5C5866909569a98B35da6A24090e4931C17", - "ethVault": "0xf9448f9a932474B5cAd9F05b86EA12376f2Fd770", - "Collateral": "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", - "FTM": "fantom:0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", - "AVAX": "fantom:0x511D35c52a3C244E7b8bd92c0C297755FbD89212", - "TOMB": "fantom:0x6c021ae822bea943b2e66552bde1d2696a53fbb7", - "WETH": "fantom:0x74b23882a30290451A17c44f4F05243b6b58C76d", - "DAI": "fantom:0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", - "pool2": "0x56995c729296c634cA367F8F3e5E5dEFF30D4511", - "daiPool2": "0x629670EAA62952990dd5b0658Ab6c6296fE2111b", - "ftmPool2": "0x4bd9B32677821939937FaDaEb30858806578339c" -} diff --git a/projects/stake1/index.js b/projects/stake1/index.js index e2dff31978..57d2b22512 100644 --- a/projects/stake1/index.js +++ b/projects/stake1/index.js @@ -1,70 +1,29 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const contracts = require("./contracts.json"); -const { staking } = require("../helper/staking"); - -async function vaultTvl(balances, block, abi, target, coin) { - const ftmStaked = ((await sdk.api.abi.call({ - chain: 'fantom', - block, - target, - abi, - })).output); - - sdk.util.sumSingleBalance(balances, coin, ftmStaked); +const ADDRESSES = require('../helper/coreAssets.json') +const contracts = { + "ftmVault": "0x3d2fa78f5e1aa2e7f29c965d0e22b32b8d5f14a9", + "tombVault": "0xA222fb9D2A811FAb3B334a5a9FA573C11fee73c1", + "avaxVault": "0x1689D5C5866909569a98B35da6A24090e4931C17", + "ethVault": "0xf9448f9a932474B5cAd9F05b86EA12376f2Fd770", + "pool2": "0x56995c729296c634cA367F8F3e5E5dEFF30D4511", + "daiPool2": "0x629670EAA62952990dd5b0658Ab6c6296fE2111b", + "ftmPool2": "0x4bd9B32677821939937FaDaEb30858806578339c" } -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - await vaultTvl( - balances, - chainBlocks.fantom, - abi.see_s1ftm_circ, - contracts.ftmVault, - contracts.FTM - ); - await vaultTvl( - balances, - chainBlocks.fantom, - abi.see_s1ftm_circ, - contracts.ethVault, - contracts.WETH - ); - await vaultTvl( - balances, - chainBlocks.fantom, - abi.see_s1tomb_circ, - contracts.avaxVault, - contracts.AVAX - ); - await vaultTvl( - balances, - chainBlocks.fantom, - abi.see_s1tomb_circ, - contracts.tombVault, - contracts.TOMB - ); - - const daiBalances = (await sdk.api.abi.multiCall({ - chain: 'fantom', - block: chainBlocks.fantom, - calls: [ - contracts.ftmVault, - contracts.ethVault, - contracts.avaxVault, - contracts.tombVault - ].map((v) => ({ - target: contracts.Collateral, - params: [v], - })), - abi: 'erc20:balanceOf' - })).output - .map(b => b.output) - .reduce((acc, el) => Number(acc) + Number(el), 0); - - sdk.util.sumSingleBalance(balances, contracts.DAI, daiBalances); +const { staking } = require("../helper/staking"); - return balances; +async function tvl(api) { + return api.sumTokens({ + tokensAndOwners: [ + [ADDRESSES.fantom.WFTM, contracts.ftmVault], + ['0x74b23882a30290451A17c44f4F05243b6b58C76d', contracts.ethVault], + ['0x511D35c52a3C244E7b8bd92c0C297755FbD89212', contracts.avaxVault], + ['0x6c021ae822bea943b2e66552bde1d2696a53fbb7', contracts.tombVault], + [ADDRESSES.fantom.DAI, contracts.ftmVault], + [ADDRESSES.fantom.DAI, contracts.ethVault], + [ADDRESSES.fantom.DAI, contracts.avaxVault], + [ADDRESSES.fantom.DAI, contracts.tombVault], + ] + }) } module.exports = { @@ -72,9 +31,8 @@ module.exports = { tvl, // hitting pool2 staking contract twice while stake1 isnt on coingecko pool2: staking( - [contracts.pool2, contracts.pool2], + [contracts.pool2], [contracts.daiPool2, contracts.ftmPool2], - 'fantom' ) } }; // node test.js projects/stake1/index.js diff --git a/projects/steakbank/abis.json b/projects/steakbank/abis.json deleted file mode 100644 index 7396c21e80..0000000000 --- a/projects/steakbank/abis.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lbnbMarketCapacityCountByBNB": "uint256:lbnbMarketCapacityCountByBNB" -} \ No newline at end of file diff --git a/projects/steakbank/index.js b/projects/steakbank/index.js index 9a4f7c52c8..c7a004d2cd 100644 --- a/projects/steakbank/index.js +++ b/projects/steakbank/index.js @@ -1,20 +1,8 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk') -const abis = require('./abis.json') - const stakingContract = "0x79DB0dAa012F4b98F332A9D45c80A1A3FFaa6f9a" -const wbnb = "bsc:" + ADDRESSES.bsc.WBNB -async function tvl(timestamp, ethBlock, chainBlocks){ - const stakedBNB = await sdk.api.abi.call({ - target: stakingContract, - abi: abis.lbnbMarketCapacityCountByBNB, - block: chainBlocks['bsc'], - chain: 'bsc' - }) - return { - [wbnb]:stakedBNB.output - } +async function tvl(api){ + const staked = await api.call({ abi: "uint256:lbnbMarketCapacityCountByBNB", target: stakingContract}) + api.addGasToken(staked) } module.exports = { diff --git a/projects/summitdefi/abi.json b/projects/summitdefi/abi.json deleted file mode 100644 index 8c164f4dfb..0000000000 --- a/projects/summitdefi/abi.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "getPools": "address[]:getPools", - "tokensWithAllocation": "address[]:tokensWithAllocation", - "supply": "function supply(address _token) view returns (uint256)", - "getVault": "address:getVault", - "getPoolId": "function getPoolId() view returns (bytes32)", - "getPoolTokens": "function getPoolTokens(bytes32 poolId) view returns (address[] tokens, uint256[] balances, uint256 lastChangeBlock)" -} \ No newline at end of file diff --git a/projects/summitdefi/index.js b/projects/summitdefi/index.js index 2d3b40002b..e9aa08a5c2 100644 --- a/projects/summitdefi/index.js +++ b/projects/summitdefi/index.js @@ -1,8 +1,13 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); -const abi = require("./abi.json"); -const { BigNumber } = require("bignumber.js"); +const abi = { + "getPools": "address[]:getPools", + "tokensWithAllocation": "address[]:tokensWithAllocation", + "supply": "function supply(address _token) view returns (uint256)", + "getVault": "address:getVault", + "getPoolId": "function getPoolId() view returns (bytes32)", + "getPoolTokens": "function getPoolTokens(bytes32 poolId) view returns (address[] tokens, uint256[] balances, uint256 lastChangeBlock)" +} +const { staking } = require('../helper/staking'); +const { sumTokens2 } = require('../helper/unwrapLPs'); const summit = "0x0ddb88e14494546d07fcd94c3f0ef6d3296b1cd7"; const everest = "0xc687806cfd11b5330d7c3ae6f18b18dc71e1083e"; @@ -11,157 +16,28 @@ const cartplains = "0x1805922e7f82fc9dbad8e2435c146ba605c4a25d"; const cartmesa = "0x64f8a1dbc20f132159605ad8d7111e75ea702358"; const cartsummit = "0x93af6a3882aaf4112fc404e30277b39452f44cf6"; -const beethovenAddresses = [ - "0xcde5a11a4acb4ee4c805352cec57e236bdbc3837", - "0xd47d2791d3b46f9452709fa41855a045304d6f9d", - "0xcdf68a4d525ba2e90fe959c74330430a5a6b8226", - "0x9af1f0e9ac9c844a4a4439d446c1437807183075" -] - -async function getCarttvl(balances, block, cart) { - const chain = "fantom"; - cart = cart.toLowerCase(); - - const getPools = (await sdk.api.abi.call({ - target: cart, - abi: abi["getPools"], - block, - chain - })).output; - - const symbols = (await sdk.api.abi.multiCall({ - calls: getPools.map(p => ({ - target: p - })), - abi: "erc20:symbol", - block, - chain - })).output; - - const poolSupply = (await sdk.api.abi.multiCall({ - calls: getPools.map(p => ({ - target: cart, - params: p - })), - abi: abi["supply"], - block, - chain - })).output; - - let lps = []; - let beethovenBals = []; - - for (let i = 0; i < getPools.length; i++) { - const token = getPools[i].toLowerCase(); - const symbol = symbols[i].output; - const balance = poolSupply[i].output; - if (token === summit || token === everest) continue; - if (beethovenAddresses.includes(token)) { - beethovenBals.push(balance); - continue; - } - if (symbol.endsWith("LP")) { - lps.push({ - token, - balance - }); - continue; - } - sdk.util.sumSingleBalance(balances, `fantom:${token}`, balance); - } - - await unwrapUniswapLPs(balances, lps, block, chain, addr=>`fantom:${addr}`); - - const beetTotalSupply = (await sdk.api.abi.multiCall({ - calls: beethovenAddresses.map(p => ({ - target: p - })), - abi: "erc20:totalSupply", - block, - chain - })).output; - - const beetVaults = (await sdk.api.abi.multiCall({ - calls: beethovenAddresses.map(p => ({ - target: p - })), - abi: abi["getVault"], - block, - chain - })).output; - - const beetIds = (await sdk.api.abi.multiCall({ - calls: beethovenAddresses.map(p => ({ - target:p - })), - abi: abi["getPoolId"], - block, - chain - })).output; - - let poolTokenCall = []; - for (let i = 0; i < beetVaults.length; i++) { - poolTokenCall.push({ - target: beetVaults[i].output, - params: beetIds[i].output - }); - } - - const beetPoolTokens = (await sdk.api.abi.multiCall({ - calls: poolTokenCall, - abi: abi["getPoolTokens"], - block, - chain - })).output; - - for (let i = 0; i < beetPoolTokens.length; i++) { - const tokens = beetPoolTokens[i].output.tokens; - const bals = beetPoolTokens[i].output.balances; - const ratio = Number(beethovenBals[i]) / beetTotalSupply[i].output; - for (let j = 0; j < tokens.length; j++) { - sdk.util.sumSingleBalance(balances, `fantom:${tokens[j]}`, BigNumber(bals[j]).times(ratio).toFixed(0)); - } - } +async function getCarttvl(api, cart) { + const tokens = await api.call({ abi: abi.getPools, target: cart }) + const bals = await api.multiCall({ abi: abi.supply, calls: tokens, target: cart }) + api.add(tokens, bals) } -async function tvl(timestamp, block, chainBlocks) { - let balances = {}; - block = chainBlocks.fantom; - await getCarttvl(balances, block, cartoasis); - await getCarttvl(balances, block, cartplains); - await getCarttvl(balances, block, cartmesa); - await getCarttvl(balances, block, cartsummit); - return balances; +async function tvl(api) { + await getCarttvl(api, cartoasis) + await getCarttvl(api, cartplains) + await getCarttvl(api, cartmesa) + await getCarttvl(api, cartsummit) + await sumTokens2({ api, resolveLP: true}) + api.removeTokenBalance(summit) + api.removeTokenBalance(everest) } -async function staking(timestamp, block, chainBlocks) { - let balances = {}; - block = chainBlocks.fantom; - const chain = "fantom"; - const getPoolTokens = (await sdk.api.abi.call({ - target: "0x20dd72ed959b6147912c2e529f0a0c651c33c9ce", - params: "0x1577eb091d3933a89be62130484e090bb8bd0e5800010000000000000000020f", - abi: abi["getPoolTokens"], - block, - chain - })).output; - const valueOfSummitInUSDCInPool = (Number(getPoolTokens.balances[0]) * 3) * 1e12; - const summitValueInUSDC = valueOfSummitInUSDCInPool/ Number(getPoolTokens.balances[1]); - const summitInEverest = (await sdk.api.erc20.balanceOf({ - target: summit, - owner: everest, - block, - chain - })).output; - sdk.util.sumSingleBalance(balances, "fantom:" + ADDRESSES.fantom.DAI, BigNumber(summitInEverest).times(summitValueInUSDC).toFixed(0)); - return balances; -} module.exports = { - methodology: "TVL is from deposits into the cartographer contracts. Staking TVL is from SUMMIT deposited into EVEREST contract", - fantom: { - misrepresentedTokens: true, - tvl, - staking - } + methodology: "TVL is from deposits into the cartographer contracts. Staking TVL is from SUMMIT deposited into EVEREST contract", + fantom: { + misrepresentedTokens: true, + tvl, + staking: staking(everest, summit) + } } \ No newline at end of file diff --git a/projects/suter-shield/index.js b/projects/suter-shield/index.js index f47367ef18..dd2d096282 100644 --- a/projects/suter-shield/index.js +++ b/projects/suter-shield/index.js @@ -1,122 +1,28 @@ +const { sumTokensExport, } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); -const BigNumber = require("bignumber.js") - -// ETH -const ETH_COIN = ADDRESSES.null; -const SUTER_ETH_V1 = '0x02b4E089E96a0A672dE0a0d93E2869B899b15a44'; -const SUTER_ETH_V2 = '0x934cc5704165711296207b5AFc87933AE0685a4C'; - -const USDT_COIN = ADDRESSES.ethereum.USDT; -const SUTER_USDT_V1 = '0x29abf1a011cdfb9548dc8faa6d19b1b39808bf58'; -const SUTER_USDT_V2 = '0xB8fcF79EAd34E98e45fc21E5dB1C5C561d906371'; - -const DAI_COIN = ADDRESSES.ethereum.DAI; -const SUTER_DAI_V1 = '0x54A8e0C76Eec21DD30842FbbcA2D336669102b77'; -const SUTER_DAI_V2 = '0xbdf418486D438e44F5aAC6aF86330dA638ea70AD'; - -const SUTER_COIN = '0xAA2ce7Ae64066175E0B90497CE7d9c190c315DB4'; -const SUTER_SUTER_V1 = '0xab4e72599e2cec5dcc8249657833b3408905900e'; - -// BSC -// const BNB_COIN = ADDRESSES.null; -// WBNB -const BNB_COIN = ADDRESSES.bsc.WBNB; -const SUTER_BNB_V1 = '0x2A00d7d2de1E147a3BCAa122B4EC5D6f9F0c1147'; -const SUTER_BNB_V2 = '0x5bb6eE37a6503fe381207c3BAC0Aa6d7B33590Fa'; - -const BUSD_COIN = ADDRESSES.bsc.BUSD; -const SUTER_BUSD_V1 = '0xe557c77Ed24df7cDF21ED55a8C56Ea36CeBD5BD2'; -const SUTER_BUSD_V2 = '0x382926Ba4D92E5d7652A85Aa7085Ffb15b6b6C89'; - -const CAKE_COIN = '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82'; -const SUTER_CAKE_V1 = '0x8cc4c8529c0D8bb9B9FA197530d656cCBcB88DeB'; -const SUTER_CAKE_V2 = '0xa19e53Af2381F34AEcA80cDcEBF6c4a3F37037a2'; - -const BAKE_COIN = '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5'; -const SUTER_BAKE_V1 = '0x9D529c70fD8e072786b721190f6E6B30e433690a'; -const SUTER_BAKE_V2 = '0x6F3Ad49e287c2dC12aA5f0bD9e8173C57d1AdECa'; - -const BSC_SUTER_COIN = '0x4cfbbdfbd5bf0814472ff35c72717bd095ada055'; -const BSC_SUTER_SUTER_V1 = '0x617edfadeC530aE747088672831EaC5B1A6A5220'; -const BSC_SUTER_SUTER_V2 = '0x1E02013eF23C1784b3c2E2c08b1e4c253ABa2b85'; - -const XSUTER_COIN = '0x822d04d22f962d6132f53b0fa6b9409097d12550'; -const BSC_SUTER_XSUTER_V1 = '0x4de5cB2EB81A37DD768fc58fe0ca7b811C997c35'; -const BSC_SUTER_XSUTER_V2 = '0x41690D4E1E20B0cBB1fb6004CA80e67bdFa6BA02'; - -async function eth_tvl(timestamp, block) { - let balances = {}; - let total_eth_tvl = 0; - let pools = {[ETH_COIN]: [SUTER_ETH_V1, SUTER_ETH_V2], [USDT_COIN]: [SUTER_USDT_V1, SUTER_USDT_V2], [DAI_COIN]: [SUTER_DAI_V1, SUTER_DAI_V2], [SUTER_COIN]: [SUTER_SUTER_V1]}; - for(var coin in pools){ - for(var pool of pools[coin]) { - if(coin !== ETH_COIN){ - let erc20_tvl = await sdk.api.erc20.balanceOf({ - target: coin, - owner: pool, - block: block, - chain: 'ethereum' - }); - if(balances[coin] === undefined){ - balances[coin] = erc20_tvl.output; - }else{ - balances[coin] = new BigNumber(balances[coin]).plus(new BigNumber(erc20_tvl.output)); - } - } - let eth_tvl = await sdk.api.eth.getBalance({ - target: pool, - block, - chain: 'ethereum' - }); - total_eth_tvl = new BigNumber(eth_tvl.output).plus(new BigNumber(total_eth_tvl)); - } - } - - balances[ETH_COIN] = total_eth_tvl.toString(); - return balances; +const { nullAddress } = require('../helper/tokenMapping') +const config = { + ethereum: [ + [ADDRESSES.null, '0x02b4E089E96a0A672dE0a0d93E2869B899b15a44'], + [nullAddress, '0x934cc5704165711296207b5AFc87933AE0685a4C'], + [ADDRESSES.ethereum.USDT, '0x29abf1a011cdfb9548dc8faa6d19b1b39808bf58'], + [ADDRESSES.ethereum.USDT, '0xB8fcF79EAd34E98e45fc21E5dB1C5C561d906371'], + [ADDRESSES.ethereum.DAI, '0x54A8e0C76Eec21DD30842FbbcA2D336669102b77'], + [ADDRESSES.ethereum.DAI, '0xbdf418486D438e44F5aAC6aF86330dA638ea70AD'], + ], bsc: [ + [ADDRESSES.null, '0x2A00d7d2de1E147a3BCAa122B4EC5D6f9F0c1147'], + [ADDRESSES.null, '0x5bb6eE37a6503fe381207c3BAC0Aa6d7B33590Fa'], + [ADDRESSES.bsc.BUSD, '0xe557c77Ed24df7cDF21ED55a8C56Ea36CeBD5BD2'], + [ADDRESSES.bsc.BUSD, '0x382926Ba4D92E5d7652A85Aa7085Ffb15b6b6C89'], + ['0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82', '0x8cc4c8529c0D8bb9B9FA197530d656cCBcB88DeB'], + ['0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82', '0xa19e53Af2381F34AEcA80cDcEBF6c4a3F37037a2'], + ['0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5', '0x9D529c70fD8e072786b721190f6E6B30e433690a'], + ['0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5', '0x6F3Ad49e287c2dC12aA5f0bD9e8173C57d1AdECa'], + ] } -async function bsc_tvl(timestamp, ethBlock, chainBlocks) { - const block = chainBlocks.bsc; - let balances = {}; - let total_bnb_tvl = 0; - let pools = {[BNB_COIN]: [SUTER_BNB_V1, SUTER_BNB_V2], [BUSD_COIN]: [SUTER_BUSD_V1, SUTER_BUSD_V2], [CAKE_COIN]: [SUTER_CAKE_V1, SUTER_CAKE_V2], [BAKE_COIN]: [SUTER_BAKE_V1, SUTER_BAKE_V2], [BSC_SUTER_COIN]: [BSC_SUTER_SUTER_V1, BSC_SUTER_SUTER_V2], [XSUTER_COIN]: [BSC_SUTER_XSUTER_V1, BSC_SUTER_XSUTER_V2]}; - for(var coin in pools){ - for(var pool of pools[coin]) { - if(coin !== BNB_COIN){ - let erc20_tvl = await sdk.api.erc20.balanceOf({ - target: coin, - owner: pool, - block: block, - chain: 'bsc' - }); - if(balances[`bsc:${coin}`] === undefined){ - balances[`bsc:${coin}`] = erc20_tvl.output; - }else{ - balances[`bsc:${coin}`] = new BigNumber(balances[`bsc:${coin}`]).plus(new BigNumber(erc20_tvl.output)); - } - } - let bnb_tvl = await sdk.api.eth.getBalance({ - target: pool, - //block, - chain: 'bsc' - }); - total_bnb_tvl = new BigNumber(bnb_tvl.output).plus(new BigNumber(total_bnb_tvl)); - } +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport({ tokensAndOwners: config[chain], }) } - - balances[`bsc:${BNB_COIN}`] = total_bnb_tvl.toString(); - return balances; -} - - -module.exports = { - timetravel: false, - ethereum:{ - tvl: eth_tvl, - }, - bsc: { - tvl: bsc_tvl, - }, -}; \ No newline at end of file +}) diff --git a/projects/svn/index.js b/projects/svn/index.js index d0d8cf77d5..be0a5d1d63 100644 --- a/projects/svn/index.js +++ b/projects/svn/index.js @@ -1,107 +1,33 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { stakingPricedLP } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); -const token0Abi = 'address:token0' -const token1Abi = 'address:token1' -const { default: BigNumber } = require("bignumber.js"); +const { sumTokens2 } = require("../helper/unwrapLPs"); +const { pool2 } = require('../helper/pool2') +const { staking } = require('../helper/staking') -let token = ADDRESSES.cronos.SVN; let share = "0xf8b9facB7B4410F5703Eb29093302f2933D6E1Aa"; const rewardPool = "0xA51054BDf0910E3cE9B233e6B5BdDc0931b2E2ED"; const masonry = "0x2CcbFD9598116cdF9B94fF734ece9dCaF4c9d471"; const pool2LPs = [ - "0xB6E1705BfAFcf1efEE83C135C0F0210653bAB8F0", - "0xc924da29d37f3b8C62c4c3e4e6958bF2b5ebF677", + "0xB6E1705BfAFcf1efEE83C135C0F0210653bAB8F0", + "0xc924da29d37f3b8C62c4c3e4e6958bF2b5ebF677", ] -async function pool2(timestamp, block, chainBlocks) { - block = chainBlocks.cronos; - const chain = 'cronos'; - let balances = {}; - token = token.toLowerCase(); - share = share.toLowerCase(); - block = chainBlocks[chain]; - const pool2Balances = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p, - params: rewardPool - })), - abi: "erc20:balanceOf", - block, - chain - })).output; - const supplies = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p - })), - abi: "erc20:totalSupply", - block, - chain - })).output; - const pool2Token0 = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p - })), - abi: token0Abi, - block, - chain - })).output; - const pool2Token1 = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p - })), - abi: token1Abi, - block, - chain - })).output; - - for (let i = 0; i < pool2LPs.length; i++) { - let listedToken; - const token0 = pool2Token0[i].output.toLowerCase(); - const token1 = pool2Token1[i].output.toLowerCase(); - if (token0 === token || token0 === share) { - listedToken = token1; - } - else if (token1 === token || token1 === share) { - listedToken = token0; - } - const listedTokenBalance = (await sdk.api.erc20.balanceOf({ - target: listedToken, - owner: pool2LPs[i], - block, - chain - })).output; - const balance = BigNumber(pool2Balances[i].output).times(listedTokenBalance).div(supplies[i].output).times(2).toFixed(0); - sdk.util.sumSingleBalance(balances, `cronos:${listedToken}`, balance); - } - return balances -} -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - await sumTokensAndLPsSharedOwners( - balances, - [ - ["0xB6E1705BfAFcf1efEE83C135C0F0210653bAB8F0", true], - ["0xc924da29d37f3b8C62c4c3e4e6958bF2b5ebF677", true], - ["0x97749c9B61F878a880DfE312d2594AE07AEd7656", false], - ["0x50c0C5bda591bc7e89A342A3eD672FB59b3C46a7", false], - ["0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", false], - ["0x2D03bECE6747ADC00E1a131BBA1469C15fD11e03", false], - ], - ["0x3827CAa33557304e1CA5D89c2f85919Da171C44D"], - chainBlocks.cronos, - "cronos", - (addr) => `cronos:${addr}` - ); - delete balances['cronos:' + ADDRESSES.cronos.SVN]; - - return balances; +async function tvl(api) { + await sumTokens2({ + api, tokens: [ + "0xB6E1705BfAFcf1efEE83C135C0F0210653bAB8F0", + "0xc924da29d37f3b8C62c4c3e4e6958bF2b5ebF677", + "0x97749c9B61F878a880DfE312d2594AE07AEd7656", + "0x50c0C5bda591bc7e89A342A3eD672FB59b3C46a7", + "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", + "0x2D03bECE6747ADC00E1a131BBA1469C15fD11e03", + ], owner: '0x3827CAa33557304e1CA5D89c2f85919Da171C44D', resolveLP: true + }) + api.removeTokenBalance(ADDRESSES.cronos.SVN) } module.exports = { - cronos : { - tvl, - pool2, - staking: stakingPricedLP(masonry, share, 'cronos', pool2LPs[1], 'mmfinance', true), - } + cronos: { + tvl, + pool2: pool2(rewardPool, pool2LPs), + staking: staking(masonry, share), + } }; \ No newline at end of file diff --git a/projects/tomofinance.js b/projects/tomofinance.js index 21ed2dd93f..76c5c65a8a 100644 --- a/projects/tomofinance.js +++ b/projects/tomofinance.js @@ -1,21 +1,6 @@ -const sdk = require('@defillama/sdk'); - -async function taiSupply(timestamp, ethBlock, {tomochain: block}) { - const taiContract = '0x4d04315e6BABD038d15ea0E240A88B292d2Add41'; - - const supply = (await sdk.api.erc20.totalSupply({ - target: taiContract, - block: block, - chain: 'tomochain', - decimals: 18 - })).output; - - return { 'usd-coin': supply }; -} - module.exports = { - misrepresentedTokens: true, - tomochain: { - tvl: taiSupply - } -}; + tomochain: { + tvl: () => ({}), + }, + deadFrom: '2021-05-22' +} diff --git a/projects/vortexdao/index.js b/projects/vortexdao/index.js index 716c8d4015..875588d419 100644 --- a/projects/vortexdao/index.js +++ b/projects/vortexdao/index.js @@ -1,17 +1,6 @@ -const sdk = require("@defillama/sdk"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - const space = "0x353af195c0d82820c59427BFbD318A49971AAe1a"; const stakingV1 = "0x910F038C9E74dF8baEd886a22f75C69FaE8a6792"; const stakingV2 = "0x073d3F4Ed6cb32Bd7f6F7B6da4C25672ee76c95B"; -const treasury = "0xE05CEc7Ed93C2d3E106Df88B8d7B963Ce3618f46"; -const mim = "0x130966628846bfd36ff31a822705796e8cb8c18d"; -const avai = "0x346a59146b9b4a77100d369a3d18e8007a9f46a6"; -const spaceMimJLP = "0x5087706DD31962938c57a0fB3A3107ed3794c996"; - -async function tvl(api) { - return api.sumTokens({ owners: [treasury], tokens: [spaceMimJLP, avai, mim, ] }) -} async function staking(api) { return api.sumTokens({ tokens: [space], owners: [stakingV1, stakingV2, ] }) diff --git a/projects/wbtc.js b/projects/wbtc.js index d806eb7234..7413a97659 100644 --- a/projects/wbtc.js +++ b/projects/wbtc.js @@ -391,13 +391,12 @@ const owners = [ "bc1qzm3t8m5fcnz8t22kf2lyr97u2wret0pkjvzngldnqq5su434tsrqxjncvj", ]; -async function tvl(api, block){ +async function tvl(api){ if(api.timestamp > Date.now()/1e3 - 3600){ return sumTokens({ owners, api }) } else { - return { - [ADDRESSES.ethereum.WBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.WBTC, block:block })).output - } + const supply = await api.call({ target: ADDRESSES.ethereum.WBTC, abi: 'erc20:totalSupply', }) + api.add(ADDRESSES.ethereum.WBTC, supply) } } diff --git a/projects/wonderland/index.js b/projects/wonderland/index.js index 023a1f9903..47173b354f 100644 --- a/projects/wonderland/index.js +++ b/projects/wonderland/index.js @@ -1,6 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const TimeStaking = "0x4456B87Af11e87E329AB7d7C7A246ed1aC2168B9"; const RevenueSharingFarm = "0xC172c84587bEa6d593269bFE08632bf2Da2Bc0f6"; @@ -10,67 +9,45 @@ const wMEMO = "0x0da67235dd5787d67955420c84ca1cecd4e5bb3b"; const Treasury_Eth = "0x355D72Fb52AD4591B2066E43e89A7A38CF5cb341"; const Treasury_Avax = "0x88bbE6dE858B179841c8f49a56b99fb0522a263a"; -async function avaxTvl(timestamp, ethBlock, chainBlocks) { - const balances = {}; - const transform = (addr) => - addr.toLowerCase() === ADDRESSES.avax.USDt - ? [ADDRESSES.ethereum.USDT]: `avax:${addr}`; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [ADDRESSES.avax.USDt, false], - [ADDRESSES.avax.USDC_e, false], - ["0x39fC9e94Caeacb435842FADeDeCB783589F50f5f", false], // KNC - ["0x63682bDC5f875e9bF69E201550658492C9763F89", false], // BSGG - ["0x0da67235dd5787d67955420c84ca1cecd4e5bb3b", false], //wMEMO - ], - [Treasury_Avax], - chainBlocks.avax, - "avax", - transform - ); - - const wmemoAddress = transform(wMEMO); - delete balances[wmemoAddress]; - - return balances; +async function avaxTvl(api) { + await api.sumTokens({ + owner: Treasury_Avax, tokens: [ADDRESSES.avax.USDt, + ADDRESSES.avax.USDC_e, + "0x39fC9e94Caeacb435842FADeDeCB783589F50f5f", // KNC + "0x63682bDC5f875e9bF69E201550658492C9763F89", // BSGG + "0x0da67235dd5787d67955420c84ca1cecd4e5bb3b", //wMEMO + ] + }) + api.removeTokenBalance(wMEMO) } -async function ethTvl(timestamp, ethBlock, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [ADDRESSES.ethereum.LUSD, false], - [ADDRESSES.ethereum.FXS, false], // FRAX - [ADDRESSES.ethereum.CVX, false], - [ADDRESSES.ethereum.cvxCRV, false], - ["0x55C08ca52497e2f1534B59E2917BF524D4765257", false], // UwU - ["0x69570f3E84f51Ea70b7B68055c8d667e77735a25", false], // BSGG - ["0x04906695D6D12CF5459975d7C3C03356E4Ccd460", false], // sOHM - ["0x29127fE04ffa4c32AcAC0fFe17280ABD74eAC313", false], // sifu - [ADDRESSES.ethereum.TUSD, false], - ["0x66761Fa41377003622aEE3c7675Fc7b5c1C2FaC5", false], // CPOOL - ["0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF", false], // ALCX - ["0xdB25f211AB05b1c97D595516F45794528a807ad8", false], // EURS - [ADDRESSES.ethereum.GNO, false], // GNO - ["0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68", false], // INV - ["0xE80C0cd204D654CEbe8dd64A4857cAb6Be8345a3", false], // JPEG - ["0x0C10bF8FcB7Bf5412187A595ab97a3609160b5c6", false], // USDD - ["0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6", false], // STG - ["0x6243d8CEA23066d098a15582d81a598b4e8391F4", false], // FLX - [ADDRESSES.ethereum.SNX, false], - [ADDRESSES.ethereum.USDT, false], - [ADDRESSES.ethereum.DAI, false], - ], - [Treasury_Eth], - ethBlock, - "ethereum" - ); - - return balances; +async function ethTvl(api) { + return api.sumTokens({ + owner: Treasury_Eth, tokens: [ + ADDRESSES.ethereum.LUSD, + ADDRESSES.ethereum.FXS, // FRAX + ADDRESSES.ethereum.CVX, + ADDRESSES.ethereum.cvxCRV, + "0x55C08ca52497e2f1534B59E2917BF524D4765257", // UwU + "0x69570f3E84f51Ea70b7B68055c8d667e77735a25", // BSGG + "0x04906695D6D12CF5459975d7C3C03356E4Ccd460", // sOHM + "0x29127fE04ffa4c32AcAC0fFe17280ABD74eAC313", // sifu + ADDRESSES.ethereum.TUSD, + "0x66761Fa41377003622aEE3c7675Fc7b5c1C2FaC5", // CPOOL + "0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF", // ALCX + "0xdB25f211AB05b1c97D595516F45794528a807ad8", // EURS + ADDRESSES.ethereum.GNO, // GNO + "0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68", // INV + "0xE80C0cd204D654CEbe8dd64A4857cAb6Be8345a3", // JPEG + "0x0C10bF8FcB7Bf5412187A595ab97a3609160b5c6", // USDD + "0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6", // STG + "0x6243d8CEA23066d098a15582d81a598b4e8391F4", // FLX + ADDRESSES.ethereum.SNX, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, + + ] + }) } module.exports = { diff --git a/projects/wrappedfi.js b/projects/wrappedfi.js index 8e9ca0d4b3..dbfb35f467 100644 --- a/projects/wrappedfi.js +++ b/projects/wrappedfi.js @@ -1,122 +1,21 @@ -const sdk = require("@defillama/sdk"); - -const ethContracts = [ - /** - * WCELO - * - * coingecko: wrapped-celo - * coinmarketcap: wrapped-celo - */ - '0xE452E6Ea2dDeB012e20dB73bf5d3863A3Ac8d77a', - - /** - * WCUSD - * - * coingecko: wrapped-celo-dollar - * coinmarketcap: wrapped-celo-dollar - */ - '0xad3E3Fc59dff318BecEaAb7D00EB4F68b1EcF195', - - /** - * WFIL - * - * coingecko: wrapped-filecoin - * coinmarketcap: wrapped-filecoin - */ - '0x6e1A19F235bE7ED8E3369eF73b196C07257494DE', - - /** - * WFLOW - * - * coingecko: wrapped-flow - */ - '0x5c147e74d63b1d31aa3fd78eb229b65161983b2b', - - /** - * WKDA - * - * coingecko: wrapped-kadena - */ - '0x85d7bdfc9c3426b33a684241eeee70385bc42820', - - /** - * WLTC - * - * no price available - */ - '0x53c4871322Bb47e7A24136fce291a6dcC832a294', - - /** - * WXRP - * - * coingecko: wrapped-xrp - */ - '0x39fBBABf11738317a448031930706cd3e612e1B9', - - /** - * WZEC - * - * coingecko: wrapped-zcash - * coinmarketcap: wrapped-zec - */ - '0x4A64515E5E1d1073e83f30cB97BEd20400b66E10' -]; - -const celoContracts = [ - /** - * CBTC or WBTC - * - * no identifiers for coingecko or coinmarketcap - */ - '0xD629eb00dEced2a080B7EC630eF6aC117e614f1b', - - /** - * CETH - * - * no identifiers for coingecko or coinmarketcap - */ - '0x2def4285787d58a2f811af24755a8150622f4361', // ceth -]; - -const ethTvls = ethContracts.map((contractAddress) => { - return async (timestamp, block) => { - if (contractAddress == '0x53c4871322Bb47e7A24136fce291a6dcC832a294') { - return { - litecoin: ( - await sdk.api.erc20.totalSupply({ - block, - target: contractAddress, - }) - ).output / 10 ** 18, - } - } - return { - [contractAddress]: ( - await sdk.api.erc20.totalSupply({ - block, - target: contractAddress, - }) - ).output, - }; - }; -}); - -const celoTvls = celoContracts.map((contractAddress) => { - return async (timestamp, ethBlock, { celo: block }) => { - return { - [`celo:${contractAddress}`]: ( - await sdk.api.erc20.totalSupply({ - block, - target: contractAddress, - chain: "celo", - }) - ).output, - }; - }; -}); +const { cexExports } = require('./helper/cex') +const ADDRESSES = require('./helper/coreAssets.json') module.exports = { - ethereum: { tvl: sdk.util.sumChainTvls(ethTvls), }, - celo: { tvl: sdk.util.sumChainTvls(celoTvls), }, + ...cexExports({ + ripple: { + owners: ['r4Pr9aBnqN84hbkmJo4HwUtLj63E5vGFyE'] + }, + celo: { + tokensAndOwners: [ + [ADDRESSES.null, '0x84d9dcAc2f00F2Cd903E340b5241EB6e5c198572'] + ] + }, + ethereum: { + tokensAndOwners: [ + [ADDRESSES.null, '0xD6873b9592AB601E6cE6a6A781799d54961942F3'] + ] + }, + }), methodology: 'The TVL consists of the underlying capital held in custody.' }; \ No newline at end of file diff --git a/projects/xsigma/index.js b/projects/xsigma/index.js index 03f7066428..349a39da19 100644 --- a/projects/xsigma/index.js +++ b/projects/xsigma/index.js @@ -1,8 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const SigThreePoolContract = "0x3333333ACdEdBbC9Ad7bda0876e60714195681c5"; const USDC = ADDRESSES.ethereum.USDC; @@ -13,20 +11,8 @@ const sigMasterchefContract = "0x98C32b59a0AC00Cd33750427b1A317eBcf84D0F7"; const SIG = "0x7777777777697cfeecf846a76326da79cc606517"; const SIG_ETH_UNIV2 = "0x23b7e6932cb873b8696afba077c4a2486b1c862e"; -async function ethTvl() { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [USDC, false], - [DAI, false], - [USDT, false], - ], - [SigThreePoolContract] - ); - - return balances; +async function ethTvl(api) { + return api.sumTokens({ owner: SigThreePoolContract, tokens: [USDC, DAI, USDT] }); } module.exports = { diff --git a/projects/xusdmoney/index.js b/projects/xusdmoney/index.js index 9a08db546e..cce6aed046 100644 --- a/projects/xusdmoney/index.js +++ b/projects/xusdmoney/index.js @@ -1,7 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { pool2s } = require("../helper/pool2"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const collateralPoolContracts = [ // WETH Pool @@ -43,20 +42,8 @@ const lpPairAddresses = [ "0x88d9bE8D3DFe82eF3b09641284467f1Ee5E98343", ]; -async function ethTvl(chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [WETH, false], - [DAI, false], - [USDC, false], - ], - collateralPoolContracts - ); - - return balances; +async function ethTvl(api) { + return api.sumTokens({ owners: collateralPoolContracts, tokens: [WETH, DAI, USDC] }); } module.exports = { From 37b22cd6d1b0d7f6efbafeee0e00ae3a43c7a29d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Sep 2024 13:19:40 +0200 Subject: [PATCH 0270/1768] code refactor --- projects/photon-protocol/index.js | 19 +--- projects/piggybankdao/index.js | 18 +--- projects/purefi/index.js | 21 +--- projects/redacted/index.js | 155 +++++++++++------------------- projects/retrodefi/index.js | 155 +++--------------------------- projects/sashimidao/index.js | 31 +----- projects/shibui/index.js | 45 +-------- projects/standcash/index.js | 29 +----- projects/tidalfinance/abi.json | 4 - projects/tidalfinance/index.js | 58 +---------- projects/timewarp/index.js | 100 ++----------------- projects/treasury/galaxygoogle.js | 37 ++----- projects/treasury/newland.js | 10 +- projects/treasury/shibui.js | 56 ++--------- projects/volta-dao/index.js | 51 ++-------- 15 files changed, 130 insertions(+), 659 deletions(-) delete mode 100644 projects/tidalfinance/abi.json diff --git a/projects/photon-protocol/index.js b/projects/photon-protocol/index.js index 0028dd3dab..c5d25c1aea 100644 --- a/projects/photon-protocol/index.js +++ b/projects/photon-protocol/index.js @@ -1,24 +1,15 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakingUnknownPricedLP } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require("../helper/unwrapLPs"); const photon = "0x2F1305F0619ADa14688A4291953bd7d284f9C2a5"; const stakingContract = "0x81177472Ce36A9b1AB573804CD215C72cEb76F36"; const photonbusd = "0xEBAa17dA7D5C616441290669E9D2c982c8B1Da25"; //PHOTON-BUSD const treasury = "0x0f90591b01DE6F832e8B8E4ec3525efD423BCaD1"; -const treasuryTokens = [ - [ADDRESSES.bsc.BUSD, false], // BUSD -]; - -async function tvl (timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, treasuryTokens, [treasury], chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`); - return balances; -} module.exports = { - bsc: { - tvl, - staking: stakingUnknownPricedLP(stakingContract, photon, "bsc", photonbusd, addr=>`bsc:${addr}`) - } + bsc: { + tvl: sumTokensExport({ tokens: [ADDRESSES.bsc.BUSD], owner: treasury }), + staking: stakingUnknownPricedLP(stakingContract, photon, "bsc", photonbusd, addr => `bsc:${addr}`) + } } \ No newline at end of file diff --git a/projects/piggybankdao/index.js b/projects/piggybankdao/index.js index 35ae276032..fa5a36a6a6 100644 --- a/projects/piggybankdao/index.js +++ b/projects/piggybankdao/index.js @@ -1,33 +1,17 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {sumTokensAndLPsSharedOwners, sumLPWithOnlyOneToken} = require('../helper/unwrapLPs') const { stakingPricedLP } = require('../helper/staking') -const treasury = "0x6687379035822ee15e2164f9C1280fBEAd0D7627"; const PB_TOKEN = "0x0E75CDb914DdCcA683357dD94d26Caa39BC14B16" const LP_TOKEN = "0xd3a6eebbe6f6d9197a7fc2aaaf94d8b0ec51f8a8"; const STAKING_ADDRESS = "0xE4738791690AF507C8C7Bf5981ef541568C7C312" const COREASSETNAME = "magic-internet-money"; const CHAIN = "avax"; -const MIM = "0x130966628846bfd36ff31a822705796e8cb8c18d" - - -async function avaxTvl(time, ethBlock, chainBlocks){ - const balances = {} - const transform = addr => 'avax:'+addr - await sumLPWithOnlyOneToken(balances, "0xd3a6eebbe6f6d9197a7fc2aaaf94d8b0ec51f8a8", treasury, MIM, chainBlocks.avax, "avax", transform) - await sumTokensAndLPsSharedOwners(balances, [ - [MIM, false], - [ADDRESSES.avax.WBTC_e, false] - ], [treasury], chainBlocks.avax, "avax", transform) - return balances -} module.exports={ deadFrom: 1648765747, misrepresentedTokens: true, avax:{ - tvl: avaxTvl, + tvl: () => ({}), staking: stakingPricedLP(STAKING_ADDRESS, PB_TOKEN, CHAIN, LP_TOKEN, COREASSETNAME, true), } } diff --git a/projects/purefi/index.js b/projects/purefi/index.js index 39cf6f11ba..d5d9fd7cd1 100644 --- a/projects/purefi/index.js +++ b/projects/purefi/index.js @@ -1,5 +1,4 @@ const { staking, stakings } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); /*** Ethereum Addresses ***/ const UFI = "0xcDa4e840411C00a614aD9205CAEC807c7458a0E3"; @@ -51,23 +50,8 @@ const farmingStakingContracts_polygon = [ "0xF1a44C75E4D92f4DA737485f96b0c2a1327d91b2", ]; -const polygonTvl = async (chainBlocks) => { - const balances = {}; - - let transformAddress = i => `polygon:${i}`; - await sumTokensAndLPsSharedOwners( - balances, - [ - [SAFLE_polygon, false], - [SCA_polygon, false], - ], - farmingStakingContracts_polygon, - chainBlocks["polygon"], - "polygon", - transformAddress - ); - - return balances; +const polygonTvl = async (api) => { + return api.sumTokens({ owners: farmingStakingContracts_polygon, tokens: [SAFLE_polygon, SCA_polygon,] }); }; module.exports = { @@ -82,6 +66,5 @@ module.exports = { staking: stakings(farmingStakingContracts_polygon, UFI_polygon), tvl: polygonTvl, }, - //tvl: (tvl) => ({}), methodology: "Counts tvl of the assets staked on the Farming seccion thgough Farming Contracts", }; diff --git a/projects/redacted/index.js b/projects/redacted/index.js index fdb21318ca..58c73dfb67 100644 --- a/projects/redacted/index.js +++ b/projects/redacted/index.js @@ -1,6 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners, sumTokens2, genericUnwrapCvx } = require('../helper/unwrapLPs') -const sdk = require('@defillama/sdk') +const { sumTokens2, genericUnwrapCvx } = require('../helper/unwrapLPs') const treasuries = ["0xa52fd396891e7a74b641a2cb1a6999fcf56b077e", "0x086c98855df3c78c6b481b6e1d47bef42e9ac36b"] @@ -20,110 +19,72 @@ const BTRFLYV2 = '0xc55126051B22eBb829D00368f4B12Bde432de5Da' const cvxCRVPool = '0x0392321e86F42C2F94FBb0c6853052487db521F0' const rlBTRFLYAbi = { - lockedSupply: "uint256:lockedSupply", -} - -async function tvl(timestamp, block, chainBlocks){ - const balances = {} - - //Add tokens/curve LPs in wallet - await sumTokensAndLPsSharedOwners(balances, [ - [CVX, false], - [cvxCRV, false], - [FXS, false], - [CRV, false], - [AURA, false], - // BTRFLY/ETH Curve LP - ['0x7483Dd57f6488b0e194A151C57Df6Ec85C00aCE9', false], - [ADDRESSES.ethereum.USDC, false], - [ADDRESSES.ethereum.FRAX, false], - ], treasuries, block) - - //Add UniswapV3 LPs - await sumTokens2({ balances, owners: treasuries, block, resolveUniV3: true, }) - - //Add convex deposited curve LPs - await genericUnwrapCvx(balances, treasuries[0], cvxCRVPool, block, 'ethereum') - - //This causes an error and not sure why - //await genericUnwrapCvx(balances, treasuries[0], cvxFXSPool, block, 'ethereum') - - //Add vlCVX as CVX - const vlCVXBalance = await sdk.api.erc20.balanceOf({ - target: ADDRESSES.ethereum.vlCVX, - owner: treasuries[0], - chain: 'ethereum', - block: chainBlocks['ethereum'] - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, CVX, vlCVXBalance) + lockedSupply: "uint256:lockedSupply", +} - //Add vlAURA as AURA - const vlAURABalance = await sdk.api.erc20.balanceOf({ - target: AURALocker, - owner: treasuries[0], - chain: 'ethereum', - block: chainBlocks['ethereum'] - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, AURA, vlAURABalance) +async function tvl(api) { + const block = api.block + const balances = api.getBalances() + const tokens = [ + CVX, + cvxCRV, + FXS, + CRV, + AURA, + // BTRFLY/ETH Curve LP + '0x7483Dd57f6488b0e194A151C57Df6Ec85C00aCE9', + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.FRAX, + ] - //Add staked cvxCRV as cvxCRV - const cvxCRVStakedBalance = await sdk.api.erc20.balanceOf({ - target: cvxCRVStaking, - owner: treasuries[0], - chain: 'ethereum', - block: chainBlocks['ethereum'] - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, cvxCRV, cvxCRVStakedBalance) + //Add tokens/curve LPs in wallet + await api.sumTokens({ owners: treasuries, tokens }) - //Add veFXS as 1/4 FXS since locked for 4 years - const veFXSBalance = await sdk.api.erc20.balanceOf({ - target: veFXS, - owner: treasuries[0], - chain: 'ethereum', - block: chainBlocks['ethereum'] - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, FXS, veFXSBalance/4) + //Add UniswapV3 LPs + await sumTokens2({ api, owners: treasuries, resolveUniV3: true, }) - //Add veCRV as 1 CRV since locked for 4 years - const veCRVBalance = await sdk.api.erc20.balanceOf({ - target: veCRV, - owner: treasuries[0], - chain: 'ethereum', - block: chainBlocks['ethereum'] - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, CRV, veCRVBalance) + //Add convex deposited curve LPs + await genericUnwrapCvx(balances, treasuries[0], cvxCRVPool, block) - //Add sOHM as OHM since 1:1 - const sOHMBalance = await sdk.api.erc20.balanceOf({ - target: sOHM, - owner: treasuries[1], - chain: 'ethereum', - block: chainBlocks['ethereum'] - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, OHM, sOHMBalance) + //This causes an error and not sure why + //await genericUnwrapCvx(balances, treasuries[0], cvxFXSPool, block, 'ethereum') - return balances + //Add vlCVX as CVX + const [vlCVXBalance, vlAURABalance, cvxCRVStakedBalance, veFXSBalance, veCRVBalance, sOHMBalance] = await api.multiCall({ + abi: 'erc20:balanceOf', + calls: [ + { target: ADDRESSES.ethereum.vlCVX, params: treasuries[0] }, + { target: AURALocker, params: treasuries[0] }, + { target: cvxCRVStaking, params: treasuries[0] }, + { target: veFXS, params: treasuries[0] }, + { target: veCRV, params: treasuries[0] }, + { target: sOHM, params: treasuries[1] }, + ] + }) + api.add(CVX, vlCVXBalance) + api.add(AURA, vlAURABalance) + api.add(cvxCRV, cvxCRVStakedBalance) + api.add(CRV, veCRVBalance) + api.add(OHM, sOHMBalance) + api.add(FXS, veFXSBalance / 4) + //Add vlAURA as AURA + //Add staked cvxCRV as cvxCRV + //Add veFXS as 1/4 FXS since locked for 4 years + //Add veCRV as 1 CRV since locked for 4 years + //Add sOHM as OHM since 1:1 } -async function staking(timestamp, block, chainBlocks) { - const balances = {} - - //Adding locked BTRFLY - const lockedBTRFLY = await sdk.api.abi.call({ - abi: rlBTRFLYAbi.lockedSupply, - target: rlBTRFLY, - chain: 'ethereum', - block: chainBlocks['ethereum'], - }).then(result => result.output) - sdk.util.sumSingleBalance(balances, BTRFLYV2, lockedBTRFLY) - - return balances +async function staking(api) { + + //Adding locked BTRFLY + const lockedBTRFLY = await api.call({ abi: rlBTRFLYAbi.lockedSupply, target: rlBTRFLY, }) + api.add(BTRFLYV2, lockedBTRFLY) } module.exports = { - methodology: "tvl = Treasury assets (bonding). staking = rlBTRFLY (locked tokens)", - ethereum:{ - tvl, - staking - }, + methodology: "tvl = Treasury assets (bonding). staking = rlBTRFLY (locked tokens)", + ethereum: { + tvl, + staking + }, } \ No newline at end of file diff --git a/projects/retrodefi/index.js b/projects/retrodefi/index.js index 46b98b9e7d..92f5bb7852 100644 --- a/projects/retrodefi/index.js +++ b/projects/retrodefi/index.js @@ -1,9 +1,7 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { staking } = require("../helper/staking"); const { pool2s } = require("../helper/pool2"); -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); // --- BSC Addresses --- const masterChefContractBsc = "0x738600B15B2b6845d7Fe5B6C7Cb911332Fb89949"; @@ -57,153 +55,24 @@ const pool2StratsPolygon = ["0xB045Ea272229f9c0c94ca36C1e805226c9C8c034"]; const excludePool2Polygon = ["0x312D2eAb1c01C0c3d74f41a3B7Dd5772aD9F3Ca2"]; -const calcTvl = async ( - balances, - chain, - block, - masterchef, - transformAddress, - excludePool2 -) => { - const poolLength = ( - await sdk.api.abi.call({ - abi: abi.poolLength, - target: masterchef, - chain, - block, - }) - ).output; - - const lpPositions = []; - - for (let index = 0; index < poolLength; index++) { - const strat = ( - await sdk.api.abi.call({ - abi: abi.poolInfo, - target: masterchef, - params: index, - chain, - block, - }) - ).output.strat; - - const want = ( - await sdk.api.abi.call({ - abi: abi.poolInfo, - target: masterchef, - params: index, - chain, - block, - }) - ).output.want; - - const strat_bal = ( - await sdk.api.abi.call({ - abi: 'erc20:balanceOf', - target: want, - params: strat, - chain, - block, - }) - ).output; - - const symbol = ( - await sdk.api.abi.call({ - abi: abi.symbol, - target: want, - chain, - block, - }) - ).output; - - if ( - excludePool2.some((addr) => addr.toLowerCase() === want.toLowerCase()) || - symbol.includes("RCUBE") || - symbol.includes("QBERT") || - symbol.includes("pQBERT") - ) { - continue - } else if (symbol.includes("LP")) { - lpPositions.push({ - token: want, - balance: strat_bal, - }); - } else { - sdk.util.sumSingleBalance(balances, `${chain}:${want}`, strat_bal); - } - } - - await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAddress); -}; - -const bscStaking = async (chainBlocks) => { - const balances = {}; - - const transformAddress = i => `bsc:${i}`; - for (const token of stakingTokensBsc) { - await sumTokensAndLPsSharedOwners( - balances, - [[token, false]], - retroStakingsBsc, - chainBlocks["bsc"], - "bsc", - transformAddress - ); - } - - return balances; -}; - -const polygonStaking = async (...params) => { - for (const stakingContract of retroStakingsPolygon) { - return staking(stakingContract, pQBERT)(...params); - } -}; - -const bscTvl = async (chainBlocks) => { - const balances = {}; - - const transformAddress = i => `bsc:${i}`; - - await calcTvl( - balances, - "bsc", - chainBlocks["bsc"], - masterChefContractBsc, - transformAddress, - excludePool2Bsc - ); - - return balances; -}; - -const polygonTvl = async (chainBlocks) => { - const balances = {}; - - const transformAddress = i => `polygon:${i}`; - - await calcTvl( - balances, - "polygon", - chainBlocks["polygon"], - masterChefContractPolygon, - transformAddress, - excludePool2Polygon - ); - - return balances; -}; +async function tvl(api) { + const masterchef = api.chain === "bsc" ? masterChefContractBsc : masterChefContractPolygon; + const blacklistedTokens = excludePool2Bsc.concat(excludePool2Polygon).concat([pQBERT]) + const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength , itemAbi: abi.poolInfo, target: masterchef}) + const tokensAndOwners = poolInfos.map(poolInfo => [poolInfo.want, poolInfo.strat]) + return sumTokens2({ api, tokensAndOwners, blacklistedTokens, }) +} module.exports = { misrepresentedTokens: true, bsc: { - tvl: bscTvl, - staking: bscStaking, + tvl, + staking: staking(retroStakingsBsc, stakingTokensBsc), pool2: pool2s(pool2StratsBsc, excludePool2Bsc), }, polygon: { - tvl: polygonTvl, - staking: polygonStaking, + tvl, + staking: staking(retroStakingsPolygon, pQBERT), pool2: pool2s(pool2StratsPolygon, excludePool2Polygon), }, methodology: diff --git a/projects/sashimidao/index.js b/projects/sashimidao/index.js index 4c9606bee1..36e3949a2a 100644 --- a/projects/sashimidao/index.js +++ b/projects/sashimidao/index.js @@ -1,6 +1,5 @@ const { stakings } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const sashimidaoStakings = [ "0x7dCb04c9e60B52E23f0F46FE2E5D00B234402dAA", @@ -8,41 +7,15 @@ const sashimidaoStakings = [ ]; const SASHI = "0xb88e3edb378ed7ddef10b86962d97fa0b8defb6d"; // SASHI is not on coingecko yet!!! -const treasuryAddress = "0xD4a23b563019cd148Dc148e69a84535cf8368282"; -const MIM = "0x130966628846bfd36ff31a822705796e8cb8c18d"; -const SASHI_MIM_JLP = "0x71f8DF8A958D5a09694312a79355655F44310084"; - -/*** Bonds TVL Portion (Treasury) *** - * Treasury TVL consists of MIM and Trisolaris JLP balances - ***/ -async function avaxTvl(timestamp, chainBlocks) { - const balances = {}; - - let transformAddress = addr => 'avax:'+addr - - await sumTokensAndLPsSharedOwners( - balances, - [ - [MIM, false], - [SASHI_MIM_JLP, true], - ], - [treasuryAddress], - chainBlocks["avax"], - "avax", - transformAddress - ); - - return balances; -} - module.exports = { hallmarks: [ [1642464000, "Rug Pull"] ], + deadFrom: 1642464000, misrepresentedTokens: true, avax: { staking: stakings(sashimidaoStakings, SASHI), - tvl: avaxTvl, + tvl: () => ({}), }, methodology: "Counts MIM and TLP (SASHI-MIM) on the treasury", }; diff --git a/projects/shibui/index.js b/projects/shibui/index.js index 5f2242bb84..f3f16e929c 100644 --- a/projects/shibui/index.js +++ b/projects/shibui/index.js @@ -1,58 +1,21 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); const { pool2s } = require("../helper/pool2"); -const CHAINS = ["boba"]; const Boba_SHIBUI = "0xf08ad7c3f6b1c6843ba027ad54ed8ddb6d71169b"; -const Boba_BOBA = ADDRESSES.boba.BOBA; -const Boba_USDT = ADDRESSES.boba.USDT; -const Boba_SHIBUI_WETH = "0xcE9F38532B3d1e00a88e1f3347601dBC632E7a82"; const Boba_SHIBUI_USDT = "0x3f714fe1380ee2204ca499d1d8a171cbdfc39eaa"; -const Boba_4Koyo = "0xDAb3Fc342A242AdD09504bea790f9b026Aa1e709"; -const CHAIN_ORGANISED_DATA = { - boba: () => { - return [ - { - treasuryTokens: [ - [Boba_BOBA, false], - [Boba_USDT, false], - [Boba_SHIBUI_WETH, true], - [Boba_SHIBUI_USDT, true], - ], - treasuryKoyoTokens: [Boba_4Koyo], - treasuryAddresses: [ - "0x9596E01Ad72d2B0fF13fe473cfcc48D3e4BB0f70", // Hot treasury - ], - gaugeTokens: [Boba_SHIBUI_USDT], - gaugeAddresses: [ - "0x6b8f4Fa6E44e923f5A995A87e4d79B3Bb9f8aaa3", // SHIBUI-USDT<>WAGMIv3 - ], - }, - true, - ]; - }, -}; module.exports = { start: 394825, boba: { tvl: () => ({}), - pool2: (() => { - const chain = CHAINS[0]; - const [data] = CHAIN_ORGANISED_DATA[chain](); - - return pool2s(data.gaugeAddresses, data.gaugeTokens, chain); - })(), - staking: staking( - "0xabAF0A59Bd6E937F852aC38264fda35EC239De82", - Boba_SHIBUI, - CHAINS[0] - ), + pool2: pool2s([ + "0x6b8f4Fa6E44e923f5A995A87e4d79B3Bb9f8aaa3", // SHIBUI-USDT<>WAGMIv3 + ], [Boba_SHIBUI_USDT]), + staking: staking("0xabAF0A59Bd6E937F852aC38264fda35EC239De82", Boba_SHIBUI), }, } diff --git a/projects/standcash/index.js b/projects/standcash/index.js index 62665eeb70..d152d50ce0 100644 --- a/projects/standcash/index.js +++ b/projects/standcash/index.js @@ -1,6 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const boardroomContracts = "0x7F28D5a90b3A0BE2e34accDEF255eC13cf695b1e"; const SAS = "0x4c38d0e726b6c86f64c1b281348e725973542043"; @@ -52,29 +52,8 @@ const tokenAddresses = [ "0xE95A203B1a91a908F9B9CE46459d101078c2c3cb", ]; -async function pool2() { - const balances = {}; - - for (let i = 0; i < lpStakingContracts.length; i++) { - await sumTokensAndLPsSharedOwners( - balances, - [[lpAddresses[i], true]], - [lpStakingContracts[i]] - ); - } - - for (let i = 0; i < poolContracts.length; i++) { - await sumTokensAndLPsSharedOwners( - balances, - [ - [tokenAddresses[i], false], - [SAC, false], - ], - [poolContracts[i]] - ); - } - - return balances; +async function pool2(api) { + return sumTokens2({ api, owners: poolContracts.concat(lpStakingContracts), tokens: [...tokenAddresses, SAC, ...lpAddresses], resolveLP: true }) } module.exports = { @@ -82,7 +61,7 @@ module.exports = { ethereum: { staking: stakings(stakingContracts, SAS), pool2: pool2, - tvl: (tvl) => ({}), + tvl: () => ({}), }, methodology: "Counts liquidty on the Staking and Pool2 Only", }; diff --git a/projects/tidalfinance/abi.json b/projects/tidalfinance/abi.json deleted file mode 100644 index 2689ba630e..0000000000 --- a/projects/tidalfinance/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "getAssetLength": "uint256:getAssetLength", - "assetBalance": "function assetBalance(uint16) view returns (uint256)" -} \ No newline at end of file diff --git a/projects/tidalfinance/index.js b/projects/tidalfinance/index.js index a84081065a..2a8b03890e 100644 --- a/projects/tidalfinance/index.js +++ b/projects/tidalfinance/index.js @@ -1,69 +1,19 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { staking } = require('../helper/staking'); -// Contracts -const assetManager = "0xA2b6eC586F989cf1C055B7C9D16fDdA80FDD679b"; const sellerContract = "0xc73C6C3e80C28dBc55F65bBdC895E828bb98C72d"; const stakingContract = "0x21edB57A75ee69BCe0Fe3D0EfC5674bcF1D5BF93"; -// Tokens -const USDC = ADDRESSES.polygon.USDC; const TIDAL = "0xB41EC2c036f8a42DA384DDE6ADA79884F8b84b26"; -/*** Staking of native token (TIDAL) TVL portion ***/ -const staking = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - const transformAddress = i => `polygon:${i}`; - - await sumTokensAndLPsSharedOwners( - balances, - [[TIDAL, false]], - [stakingContract], - chainBlocks["polygon"], - "polygon", - transformAddress - ); - - return balances; -}; - -/*** Polygon TVL Portions ***/ -const polygonTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const lengthOfAssets = ( - await sdk.api.abi.call({ - abi: abi.getAssetLength, - target: assetManager, - chain: "polygon", - block: chainBlocks["polygon"], - }) - ).output; - - for (let i = 0; i < lengthOfAssets; i++) { - const BalanceOfAsset = ( - await sdk.api.abi.call({ - abi: abi.assetBalance, - target: sellerContract, - params: i, - chain: "polygon", - block: chainBlocks["polygon"], - }) - ).output; - - sdk.util.sumSingleBalance(balances, `polygon:${USDC}`, BalanceOfAsset); - } - - return balances; +const polygonTvl = async (api) => { + return api.sumTokens({ owner: sellerContract, tokens: [ADDRESSES.polygon.USDC] }) }; module.exports = { - misrepresentedTokens: true, polygon: { - staking, + staking: staking(stakingContract, TIDAL,), tvl: polygonTvl, }, methodology: diff --git a/projects/timewarp/index.js b/projects/timewarp/index.js index 33eafdae0c..53857f026a 100644 --- a/projects/timewarp/index.js +++ b/projects/timewarp/index.js @@ -1,102 +1,22 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); +const { staking } = require('../helper/staking') +const { pool2 } = require('../helper/pool2') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - -const TimeWarpPool_LP_UNISWAP_ETH = - "0x55c825983783c984890bA89F7d7C9575814D83F2"; -const TimeWarpPool_LP_PANCAKE_BSC = - "0xC48467BA55cF0B777978F19701329c87949EFD3C"; +const TimeWarpPool_LP_UNISWAP_ETH = "0x55c825983783c984890bA89F7d7C9575814D83F2"; +const TimeWarpPool_LP_PANCAKE_BSC = "0xC48467BA55cF0B777978F19701329c87949EFD3C"; const TimeWarpPool_TIME_ETH = "0xa106dd3Bc6C42B3f28616FfAB615c7d494Eb629D"; const TimeWarpPool_TIME_BSC = "0x59f2757Ae3a1BAa21e4f397a28985Ceb431c676b"; -const calcTvl = async (balances, chain, block, TimeWarpPool) => { - const erc20TokenOrLp = ( - await sdk.api.abi.call({ - abi: abi.erc20Deposit, - target: TimeWarpPool, - chain, - block, - }) - ).output; - - const transformAddress = i => `bsc:${i}`; - - await sumTokensAndLPsSharedOwners( - balances, - TimeWarpPool == TimeWarpPool_TIME_ETH || - TimeWarpPool == TimeWarpPool_TIME_BSC - ? [[erc20TokenOrLp, false]] - : [[erc20TokenOrLp, true]], - [TimeWarpPool], - block, - chain, - chain == "bsc" ? transformAddress : (addr) => addr - ); -}; - -/*** Staking of native token (TIME) on Ethereum and Binance TVL portion ***/ -const stakingETH = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - // --- Staking of native token TIME on Ethereum --- - await calcTvl( - balances, - "ethereum", - chainBlocks["ethereum"], - TimeWarpPool_TIME_ETH - ); - - return balances; -}; - -const stakingBSC = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - // --- Staking of native token TIME on Binance --- - await calcTvl(balances, "bsc", chainBlocks["bsc"], TimeWarpPool_TIME_BSC); - - return balances; -}; - -/*** Ethereum TVL Portion ***/ -const ethTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - await calcTvl( - balances, - "ethereum", - chainBlocks["ethereum"], - TimeWarpPool_LP_UNISWAP_ETH - ); - - return balances; -}; - -/*** Binance TVL Portion ***/ -const bscTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - await calcTvl( - balances, - "bsc", - chainBlocks["bsc"], - TimeWarpPool_LP_PANCAKE_BSC - ); - - return balances; -}; - module.exports = { - misrepresentedTokens: true, ethereum: { - tvl: ethTvl, - staking: stakingETH + tvl: () => ({}), + pool2: pool2(TimeWarpPool_LP_UNISWAP_ETH, '0x1d474d4B4A62b0Ad0C819841eB2C74d1c5050524'), + staking: staking(TimeWarpPool_TIME_ETH, '0x485d17A6f1B8780392d53D64751824253011A260'), }, bsc: { - tvl: bscTvl, - staking: stakingBSC + tvl: () => ({}), + pool2: pool2(TimeWarpPool_LP_PANCAKE_BSC, '0xa5ebD19961CF4B8aF06a9d9D2B91d73B48744867'), + staking: staking(TimeWarpPool_TIME_BSC, '0x3b198e26E473b8faB2085b37978e36c9DE5D7f68'), }, methodology: `We count as TVL the staking Lps on Ethereum (TIME-ETH Sushiswap LP) and Binance (TIME-BNB Pancake LP) networks threw their TimeWarpPool contracts; and diff --git a/projects/treasury/galaxygoogle.js b/projects/treasury/galaxygoogle.js index fcc803f7d1..b9ee1dad47 100644 --- a/projects/treasury/galaxygoogle.js +++ b/projects/treasury/galaxygoogle.js @@ -1,7 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - -const gg = "0xF2F7CE610a091B94d41D69f4fF1129434a82E2f0" // https://app.galaxygoggle.money/#/bonds const treasury = "0xD5F922e23693e552793fE0431F9a95ba67A60A23" @@ -10,42 +7,22 @@ const mim = "0x130966628846BFd36ff31a822705796e8cb8C18D" const wavax = ADDRESSES.avax.WAVAX const joe = ADDRESSES.avax.JOE -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [mim, false], - [wavax, false], - [joe, false], - ["0xe9E8d6b6ce6D94Fc9d724711e80784Ec096949Fc", true], // mim-gg - ], - [treasury, dao], - chainBlocks.avax, - 'avax', - addr=>`avax:${addr}` - ); - - return balances; +async function tvl(api) { + return api.sumTokens({ owners: [treasury, dao], tokens: [mim, wavax, joe, "0xe9E8d6b6ce6D94Fc9d724711e80784Ec096949Fc",] }); } const bscTreasury = "0xF76C9753507B3Df0867EB02D86d07C6fFcEecaf1"; const treasuryTokensBSC = [ - [ADDRESSES.bsc.BUSD, false], // BUSD - ["0x13Cf29b3F58f777dDeD38278F7d938401f6b260c", true] // GG-BUSD + ADDRESSES.bsc.BUSD, // BUSD + "0x13Cf29b3F58f777dDeD38278F7d938401f6b260c", // GG-BUSD ] -async function bscTvl(timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, treasuryTokensBSC, [bscTreasury], chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`); - balances[`avax:${gg}`] = balances["bsc:0xcaf23964ca8db16d816eb314a56789f58fe0e10e"] || 0; - delete balances["bsc:0xcaf23964ca8db16d816eb314a56789f58fe0e10e"]; - return balances; +async function bscTvl(api) { + return api.sumTokens({ owners: [bscTreasury], tokens: treasuryTokensBSC }); } module.exports = { - avax:{ + avax: { tvl, }, bsc: { diff --git a/projects/treasury/newland.js b/projects/treasury/newland.js index e815cd3cc7..0d5aeedc43 100644 --- a/projects/treasury/newland.js +++ b/projects/treasury/newland.js @@ -1,6 +1,3 @@ -const { getChainTransform } = require("../helper/portedTokens"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - const treasuryAddress = "0xB3FC6B9be3AD6b2917d304d4F5645a311bCFd0A8"; const erc20Tokens = [ //MDX @@ -10,11 +7,8 @@ const erc20Tokens = [ ]; /*** Treasury ***/ -const Treasury = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - let transformAddress = await getChainTransform('heco') - await sumTokensAndLPsSharedOwners(balances, erc20Tokens.map(t => [t, false]), [treasuryAddress], chainBlocks["heco"], "heco", transformAddress); - return balances; +const Treasury = async (api) => { + return api.sumTokens({ owner: treasuryAddress, tokens: erc20Tokens }); }; module.exports = { diff --git a/projects/treasury/shibui.js b/projects/treasury/shibui.js index 851bc8f5d4..d12d8955f9 100644 --- a/projects/treasury/shibui.js +++ b/projects/treasury/shibui.js @@ -1,61 +1,23 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - -const CHAINS = ["boba"]; - -const Boba_SHIBUI = "0xf08ad7c3f6b1c6843ba027ad54ed8ddb6d71169b"; const Boba_BOBA = ADDRESSES.boba.BOBA; const Boba_USDT = ADDRESSES.boba.USDT; const Boba_SHIBUI_WETH = "0xcE9F38532B3d1e00a88e1f3347601dBC632E7a82"; const Boba_SHIBUI_USDT = "0x3f714fe1380ee2204ca499d1d8a171cbdfc39eaa"; -const Boba_4Koyo = "0xDAb3Fc342A242AdD09504bea790f9b026Aa1e709"; - -const CHAIN_ORGANISED_DATA = { - boba: () => { - - return [ - { - treasuryTokens: [ - [Boba_BOBA, false], - [Boba_USDT, false], - [Boba_SHIBUI_WETH, true], - [Boba_SHIBUI_USDT, true], - ], - treasuryKoyoTokens: [Boba_4Koyo], - treasuryAddresses: [ - "0x9596E01Ad72d2B0fF13fe473cfcc48D3e4BB0f70", // Hot treasury - ], - gaugeTokens: [Boba_SHIBUI_USDT], - gaugeAddresses: [ - "0x6b8f4Fa6E44e923f5A995A87e4d79B3Bb9f8aaa3", // SHIBUI-USDT<>WAGMIv3 - ], - }, - true, - ]; - }, -}; module.exports = { start: 394825, boba: { - tvl: async (timestamp, _ethBlock, chainBlocks) => { - const chain = CHAINS[0]; - const [data, koyoAssets] = CHAIN_ORGANISED_DATA[chain](); - - const balances = {}; - const block = chainBlocks[chain]; - - await sumTokensAndLPsSharedOwners( - balances, - data.treasuryTokens, - data.treasuryAddresses, - block, - chain - ); - - return balances; + tvl: async (api) => { + return api.sumTokens({ owners: [ + "0x9596E01Ad72d2B0fF13fe473cfcc48D3e4BB0f70", // Hot treasury + ], tokens: [ + Boba_BOBA, + Boba_USDT, + Boba_SHIBUI_WETH, + Boba_SHIBUI_USDT, + ] }); }, }, } diff --git a/projects/volta-dao/index.js b/projects/volta-dao/index.js index 07edfae28e..273288ddf1 100644 --- a/projects/volta-dao/index.js +++ b/projects/volta-dao/index.js @@ -1,60 +1,29 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakingUnknownPricedLP } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); -const sdk = require("@defillama/sdk"); -const { BigNumber } = require("bignumber.js"); +const { sumTokens2 } = require('../helper/unwrapLPs'); const ftmToken = "0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"; const ftmStaking = "0xc6a54adddf7463f73a4c5a8e3e480bc798cf8a09"; const ftmTreasury = "0x05ab17e4dfa87ef4ac487ed20cfcc2ae75c2a792"; const ftmTokens = [ - [ADDRESSES.fantom.DAI, false], - ["0x78b51a1fd7524186982c2cb8982df312b1e896a8", true] + ADDRESSES.fantom.DAI, + "0x78b51a1fd7524186982c2cb8982df312b1e896a8" ]; const avaxToken = "0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"; const avaxStaking = "0xfae672012b90cfb6bf245ac072a3aca374604b17"; const avaxTreasury = "0x05ab17e4dfa87ef4ac487ed20cfcc2ae75c2a792"; const avaxTokens = [ - [ADDRESSES.avax.DAI, false], - ["0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8", true] + ADDRESSES.avax.DAI, + "0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8" ] -async function tokenPrice(block, chain, lp, unlisted, listed) { - const tokensInLP = (await sdk.api.abi.multiCall({ - calls: [ - { - target: unlisted, - params: lp - }, - { - target: listed, - params: lp - } - ], - abi: "erc20:balanceOf", - block, - chain - })).output; - return Number(tokensInLP[1].output) / Number(tokensInLP[0].output); +async function ftmTvl(api) { + return sumTokens2({ api, owner: ftmTreasury, tokens: ftmTokens, resolveLP: true }) } -async function ftmTvl (timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, ftmTokens, [ftmTreasury], chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`); - const ratio = await tokenPrice(chainBlocks.fantom, "fantom", "0x78b51a1fd7524186982c2cb8982df312b1e896a8", ftmToken, ADDRESSES.fantom.DAI); - sdk.util.sumSingleBalance(balances, "fantom:" + ADDRESSES.fantom.DAI, BigNumber(balances["fantom:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]).times(ratio).toFixed(0)); - delete balances["fantom:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]; - return balances; -} - -async function avaxTvl (timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, avaxTokens, [avaxTreasury], chainBlocks.avax, "avax", addr=>`avax:${addr}`); - const ratio = await tokenPrice(chainBlocks.avax,"avax", "0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8", avaxToken, ADDRESSES.avax.DAI); - sdk.util.sumSingleBalance(balances, "avax:" + ADDRESSES.avax.DAI, BigNumber(balances["avax:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]).times(ratio).toFixed(0)); - delete balances["avax:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]; - return balances; +async function avaxTvl(api) { + return sumTokens2({ api, owner: avaxTreasury, tokens: avaxTokens, resolveLP: true }) } module.exports = { @@ -63,7 +32,7 @@ module.exports = { tvl: ftmTvl, staking: stakingUnknownPricedLP(ftmStaking, ftmToken, "fantom", "0x78b51a1fd7524186982c2cb8982df312b1e896a8") }, - avax:{ + avax: { tvl: avaxTvl, staking: stakingUnknownPricedLP(avaxStaking, avaxToken, "avax", "0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8") } From 1df2968c0a4cdbcd46d634edb47f3a615e101c3b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Sep 2024 13:39:10 +0200 Subject: [PATCH 0271/1768] track https://trade.renegade.fi --- projects/renegade-fi/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/renegade-fi/index.js diff --git a/projects/renegade-fi/index.js b/projects/renegade-fi/index.js new file mode 100644 index 0000000000..5b3503635a --- /dev/null +++ b/projects/renegade-fi/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") + +const config = { + arbitrum: { owners: ['0x30bD8eAb29181F790D7e495786d4B96d7AfDC518']} +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport({ ...config[chain], fetchCoValentTokens: true}) + } +}) \ No newline at end of file From 411253cf0581ee9a762a20df308f0624a1b9a759 Mon Sep 17 00:00:00 2001 From: dunglv-smartosc <108668260+dunglv-smartosc@users.noreply.github.com> Date: Thu, 5 Sep 2024 19:49:49 +0700 Subject: [PATCH 0272/1768] Update: D2Finance (#11530) --- projects/d2finance/index.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/projects/d2finance/index.js b/projects/d2finance/index.js index 975a89d36b..568107dde8 100644 --- a/projects/d2finance/index.js +++ b/projects/d2finance/index.js @@ -1,22 +1,38 @@ const { sumERC4626VaultsExport } = require("../helper/erc4626"); -const vaultTvl = sumERC4626VaultsExport({ +const vaultTvlOnArbitrum = sumERC4626VaultsExport({ vaults: [ "0x27D22Eb71f00495Eccc89Bb02c2B68E6988C6A42", "0x183424d5ae5ec9fd486634bc566d0f75ad9c9109", - "0x80c403807b1032d7cb19b6d612ce23f05a213d36", "0x5b49d7fae00de64779ddcd6b067c8eb046bd9a0b", "0x291344FBaaC4fE14632061E4c336Fe3B94c52320", "0xEd80C858D43a1D043E86Cf1F20384e189cf23BDA", "0x4ada76cc8755f62508a2df65d7fafa4fd26e76c6", "0x1c17a39B156189BF40905425170a3Ff62fb650DA", "0x7348925D3C63e4E61e9F5308eEec0f06EaA3bB7b", + "0xD1D64dAeED7504Ef3Eb056aa2D973bD064843A84", + "0xB0730AA7d6e880F901B5d71A971096dB56895a0f", + "0x5f44A7DD0a016A5Ec9682df36899A781442CAa43", + "0x0215EdEecdABE3DfC5EC8D59337eC9b26d359088", + "0x36b1939ADf539a4AC94b57DBAd32FaEcd5bcF4d0", + "0x34F0FdD80A51dfd8bA42343c20F89217280d760E", + "0x57f467C9c4639B066F5A4D676Cd8Ed7D87C1791b", + "0x7348925D3C63e4E61e9F5308eEec0f06EaA3bB7b", + "0xCFBBea43Fd99126E4c0eF53e2344609D513f72b3" ], isOG4626: true, }); +const vaultTvlOnAvalanche = sumERC4626VaultsExport({ + vaults: ["0x17Fd8C3d1e0379Cf6B1Dace21750E624EB9573C2"], + isOG4626: true, +}) + module.exports = { arbitrum: { - tvl: vaultTvl, + tvl: vaultTvlOnArbitrum, }, + avax: { + tvl: vaultTvlOnAvalanche, + } }; From 56b21f0a5cecbae266a2d883e248e8fa2a28880a Mon Sep 17 00:00:00 2001 From: bo-cyber Date: Thu, 5 Sep 2024 21:17:37 +0800 Subject: [PATCH 0273/1768] Add TonStable (#11531) --- projects/TonStable/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/TonStable/index.js diff --git a/projects/TonStable/index.js b/projects/TonStable/index.js new file mode 100644 index 0000000000..2cffea41c3 --- /dev/null +++ b/projects/TonStable/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require("../helper/coreAssets.json"); + +const tonStableAddr = "EQDQ-x5TqoSiObbMqh28R1HzJwhrhiw6Oqhe9rT8DoKiRzlH"; + +module.exports = { + methodology: "TonStable's TVL includes all deposited supported assets", + ton: { + tvl: sumTokensExport({ owner: tonStableAddr, tokens: [ADDRESSES.null] }), + }, +}; From 2eaf45dbded2f5dee320a193f30636bd9d0a1e21 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:29:47 +0200 Subject: [PATCH 0274/1768] fix lint --- projects/fantOHM/index.js | 27 ++++++++-------------- projects/fei/index.js | 4 ++-- projects/gamblefi/index.js | 47 +++++++------------------------------- projects/grave/index.js | 28 ++++++----------------- 4 files changed, 26 insertions(+), 80 deletions(-) diff --git a/projects/fantOHM/index.js b/projects/fantOHM/index.js index 469bc847c0..390b2b42fd 100644 --- a/projects/fantOHM/index.js +++ b/projects/fantOHM/index.js @@ -13,19 +13,13 @@ const fantomTreasuryContract = "0xA3b52d5A6d2f8932a5cD921e09DA840092349D71"; const moonriverFhm = "0xfa1FBb8Ef55A4855E5688C0eE13aC3f202486286"; const moonriverStaking = "0xF5C7D63C5Fc0aD4b7Cef7d8904239860725Ebc87"; const moonriverTreasuryContract = "0x5E983ff70DE345de15DbDCf0529640F14446cDfa"; -const ethTreasuryContract = "0x9042E869BedCD2BB3EEa241aC0032cadAE8DF006"; // addreses of gnosis safe's according to: https://fantohm.com/#security const fantomGnosisContract = "0x34F93b12cA2e13C6E64f45cFA36EABADD0bA30fC"; -const moonriverGnosisContract = "0xE3CD5475f18a97D3563307B4e1A6467470237927"; const ethGnosisContract = "0x66a98CfCd5A0dCB4E578089E1D89134A3124F0b1"; const bscGnosisContract = "0x3538Acb37Cf5a92eBE7091714975b2f8dDd5c6C1"; const fantohmDaoDeployerWallet = "0x3381e86306145b062cEd14790b01AC5384D23D82"; -const ethTradfi3mContract = "0xCD8A46dC7EE4488b441Ae1CD3b5BCa48d5389C12"; -const ethTradfi6mContract = "0xD9fDd86ecc03e34DAf9c645C40DF670406836816"; -const ftmTradfi3mContract = "0xEFbe7fe9E8b407a3F0C0451E7669E70cDD0C4C77"; -const ftmTradfi6mContract = "0xB1c77436BC180009709Be00C9e852246476321A3"; const masterChefContract = "0x4897EB3257A5391d80B2f73FB0748CCd4150b586"; @@ -37,18 +31,15 @@ async function moonriverTvl(api) { ], resolveLP: true }) } -async function fantomTvl(timestamp, _, {fantom: block}) { - let balances = {}; - - // treasury value - await sumTokensAndLPsSharedOwners(balances, [ - [ADDRESSES.fantom.DAI, false], // DAI - [ADDRESSES.fantom.WFTM, false], // wFTM - // ["0x6fc9383486c163fa48becdec79d6058f984f62ca", false], // USDB - [ADDRESSES.fantom.USDC, false], // USDC - ["0xd77fc9c4074b56ecf80009744391942fbfddd88b", true], // DAI/FHM - ], [fantomTreasuryContract], block, "fantom", - addr => (fantom_transforms[addr.toLowerCase()] ? fantom_transforms[addr.toLowerCase()] : `fantom:${addr}`)) +async function fantomTvl(api) { + let balances = api.getBalances() + const block = api.block + await sumTokens2({ api, owner: fantomTreasuryContract, tokens: [ + ADDRESSES.fantom.DAI, + ADDRESSES.fantom.WFTM, + ADDRESSES.fantom.USDC, + "0xd77fc9c4074b56ecf80009744391942fbfddd88b", + ], resolveLP: true }) // treasury values await Promise.all([ diff --git a/projects/fei/index.js b/projects/fei/index.js index 4586ef9f08..7eb9e75f94 100644 --- a/projects/fei/index.js +++ b/projects/fei/index.js @@ -55,11 +55,11 @@ async function tvl(api) { '0xF06f65a6b7D2c401FcB8B3273d036D21Fe2a5963', // DPI in Fuse pool 19 nullAddress ] - return sumTokens2({ api, owners, tokens,}) + return sumTokens2({ api, owners, tokens, }) } module.exports = { - ethereum: { tvl }, + ethereum: { tvl }, }; module.exports.hallmarks = [ [1651325520, "Exploit $80M FEI"], diff --git a/projects/gamblefi/index.js b/projects/gamblefi/index.js index 9e6513d038..d5f42cb54b 100644 --- a/projects/gamblefi/index.js +++ b/projects/gamblefi/index.js @@ -1,50 +1,19 @@ -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); -const sdk = require("@defillama/sdk"); const betifystaking = "0x335CAC92af7015BE7802170B62Ebc4C74900484d"; const betify = "0xD465b6B4937D768075414D413e981Af0b49349Cc"; const treasury = "0x596a6DFf0CF36fABf75EDeB6aA2992C950Ff14bA"; const dao = "0xEe376093ccDB3D81f226C2290868219687226845"; -const wBETSLIP = "0x3e7dfdd82965515e9b6398d91b991f5d4c830ef6"; const revenueShare = "0x40822C8E1389dE62980691bF0AFBd5B8D1D56cB7"; -async function tvl(timestamp, ethBlock, chainBlocks) { - const balances = {}; - const transform = (addr) => - addr.toLowerCase() === "0xF2001B145b43032AAF5Ee2884e456CCd805F677D" - ? "0xF2001B145b43032AAF5Ee2884e456CCd805F677D" - : `cronos:${addr}`; - - await sumTokensAndLPsSharedOwners( - balances, - [ - // [usdc, false] - ["0xf2001b145b43032aaf5ee2884e456ccd805f677d", false], // DAI - ["0x76f0adfff61fd9a542a36a98b96909ec7d3a8c53", true], // BETIFY-DAI - ["0xe2c5275d86D2fB860F19a2CbBED9967d39AA73e8", true], // BETIFY-MMF - ["0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", false], // WCRO - ["0x3e7dfdd82965515e9b6398d91b991f5d4c830ef6", false], // wBETSLIP - ], - [treasury, dao, revenueShare], - chainBlocks.metis, - "cronos", - transform - ); - - const wbetslipAddress = transform(wBETSLIP); - - const betslip = await sdk.api.abi.call({ - target: wBETSLIP, - abi: 'function wBTSToBTS(uint256 _amount) view returns (uint256)', - chain: "cronos", - block: chainBlocks.cronos, - params: [sdk.util.convertToBigInt(balances[wbetslipAddress])], - }); - balances[transform(betify)] = betslip.output; - delete balances[wbetslipAddress]; - - return balances; +async function tvl(api) { + return api.sumTokens({ owners: [treasury, dao, revenueShare], tokens: [ + "0xf2001b145b43032aaf5ee2884e456ccd805f677d", + "0x76f0adfff61fd9a542a36a98b96909ec7d3a8c53", + "0xe2c5275d86D2fB860F19a2CbBED9967d39AA73e8", + "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", + "0x3e7dfdd82965515e9b6398d91b991f5d4c830ef6", + ] }) } module.exports = { cronos: { diff --git a/projects/grave/index.js b/projects/grave/index.js index 559c5d3f71..2e2e123fda 100644 --- a/projects/grave/index.js +++ b/projects/grave/index.js @@ -1,6 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakingPricedLP } = require("../helper/staking"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { pool2Exports } = require("../helper/pool2"); const GRAVE = "0x3700a92dd231F0CaC37D31dBcF4c0f5cCb1db6Ca" @@ -13,26 +12,13 @@ const graveAvaxLp = "0x10e882acfae3cf63e96741fabc41c19025e7be2a" const gShareAvaxLp = "0xae427ad7a54f5490ef76b3bde3663b0e45c7a102" -async function atvl(timestamp, block, chainBlocks) { - const balances = {}; - const transform = addr => 'avax:'+addr; - await sumTokensAndLPsSharedOwners( - balances, - [ - [ADDRESSES.avax.WAVAX, false], - [ADDRESSES.avax.USDC_e, false], - [ADDRESSES.avax.JOE, false], - ["0x070092b3A985f9E5424351D68730c9A318ad96eb", false], - - ], - [GenMasterchef], - chainBlocks.avax, - "avax", - transform, - ); - - - return balances; +async function atvl(api) { + return api.sumTokens({ owner: GenMasterchef, tokens: [ + ADDRESSES.avax.WAVAX, + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.JOE, + "0x070092b3A985f9E5424351D68730c9A318ad96eb", + ]}) } const pool2LPs = [ From 9e427e1fb142fb72aeea3cb57e6472591e118cb6 Mon Sep 17 00:00:00 2001 From: "Kay ( Andrew )" Date: Thu, 5 Sep 2024 20:30:51 +0700 Subject: [PATCH 0275/1768] Add adrastea project (#11533) --- projects/adrastea/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/adrastea/index.js diff --git a/projects/adrastea/index.js b/projects/adrastea/index.js new file mode 100644 index 0000000000..ff48a69156 --- /dev/null +++ b/projects/adrastea/index.js @@ -0,0 +1,6 @@ +const { sumTokensExport } = require('../helper/solana') +module.exports = { + solana: { + tvl: sumTokensExport({ owners: ['Ec5tJ1H24iVSM2L8Yd7SHf7bjtD7FUWDiYSeESpFYynM'] }) + } +} From eff52a94a187b0ddb2d5c9dd550bdde874c15678 Mon Sep 17 00:00:00 2001 From: Octopus-Finance Date: Thu, 5 Sep 2024 22:45:05 +0800 Subject: [PATCH 0276/1768] Add Octopus-Finance in Arbitrum (#11535) --- projects/octopus-finance/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/octopus-finance/index.js diff --git a/projects/octopus-finance/index.js b/projects/octopus-finance/index.js new file mode 100644 index 0000000000..c7e73156ba --- /dev/null +++ b/projects/octopus-finance/index.js @@ -0,0 +1,16 @@ +const { yieldHelper, } = require("../helper/yieldHelper") +const { mergeExports } = require("../helper/utils") +const vault = '0xf561349868e5E8b633cfA524796150085Be1950A' +const oc = '0x057153eb8ad87BD483Ff9EC4E411B8C3BcE90FF0' +const abis = { + poolInfo: 'function poolInfo(uint256) view returns (address want, uint256, uint256, uint256, uint256, uint256, uint256, uint256 amount, uint256, address strat)', + poolLength: 'function poolLength() view returns (uint256)', +} +const octopus = yieldHelper({ + project: 'octopus-finance', + chain: 'arbitrum', + masterchef: vault, + nativeToken: oc, + abis, +}) +module.exports = mergeExports([octopus]) From 350968902ba711871770767c29efa8cdd2cfc862 Mon Sep 17 00:00:00 2001 From: Levana Talented Dragon <162980484+lvn-talented-dragon@users.noreply.github.com> Date: Thu, 5 Sep 2024 16:45:26 +0200 Subject: [PATCH 0277/1768] [Levana] Add neutron to adapter setting (#11534) Co-authored-by: lvn-savvy-dragon Co-authored-by: Levana Rusty Dragon Co-authored-by: lvn-ryu --- projects/levana/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/levana/index.js b/projects/levana/index.js index 15aa1fa68b..41ddd123cb 100644 --- a/projects/levana/index.js +++ b/projects/levana/index.js @@ -56,6 +56,7 @@ const config = { osmosis: { factory: 'osmo1ssw6x553kzqher0earlkwlxasfm2stnl3ms3ma2zz4tnajxyyaaqlucd45' }, sei: { factory: 'sei18rdj3asllguwr6lnyu2sw8p8nut0shuj3sme27ndvvw4gakjnjqqper95h' }, injective: { factory: 'inj1vdu3s39dl8t5l88tyqwuhzklsx9587adv8cnn9' }, + neutron: { factory: 'neutron1an8ls6d57c4qcvjq0jmm27jtrpk65twewfjqzdn7annefv7gadqsjs7uc3' } } From 64d370c8cb7fd90aaf346ffc48b646768bf04684 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Thu, 5 Sep 2024 18:58:00 +0100 Subject: [PATCH 0278/1768] adding abcnuri to Abacus --- projects/abacus/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/abacus/index.js b/projects/abacus/index.js index 08c6fd4eb8..6930c4ab56 100644 --- a/projects/abacus/index.js +++ b/projects/abacus/index.js @@ -1,6 +1,7 @@ const wildCreditABI = require('../wildcredit/abi.json'); const config = { + scroll: { strategy: '0xDDFc6B230656010f314F2F659eC8ff33FaB7A9Db', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xAAAE8378809bb8815c08D3C59Eb0c7D1529aD769' }, arbitrum: { strategy: '0xB4E291f443f51D80186dd3EE0Af7F4a4E6e90804', veToken: '0xAAA343032aA79eE9a6897Dab03bef967c3289a06', token: '0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418' }, avax: { strategy: '0xedEd6a22bf714d4B19b7e7bC1CA0BCF88956751c', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xaaab9d12a30504559b0c5a9a5977fee4a6081c6b' }, bsc: { strategy: '0x37e46C030e0d843b39F692c9108E54945F4CCCf7', veToken: '0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D', token: '0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11' }, From be10b870b28d58c14417062cd0905edb6abd0d0b Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Thu, 5 Sep 2024 18:59:09 +0100 Subject: [PATCH 0279/1768] adding abcnuri to Abacus --- projects/abacus/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/abacus/index.js b/projects/abacus/index.js index 6930c4ab56..cd42e3ee9f 100644 --- a/projects/abacus/index.js +++ b/projects/abacus/index.js @@ -1,12 +1,12 @@ const wildCreditABI = require('../wildcredit/abi.json'); const config = { - scroll: { strategy: '0xDDFc6B230656010f314F2F659eC8ff33FaB7A9Db', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xAAAE8378809bb8815c08D3C59Eb0c7D1529aD769' }, arbitrum: { strategy: '0xB4E291f443f51D80186dd3EE0Af7F4a4E6e90804', veToken: '0xAAA343032aA79eE9a6897Dab03bef967c3289a06', token: '0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418' }, avax: { strategy: '0xedEd6a22bf714d4B19b7e7bC1CA0BCF88956751c', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xaaab9d12a30504559b0c5a9a5977fee4a6081c6b' }, bsc: { strategy: '0x37e46C030e0d843b39F692c9108E54945F4CCCf7', veToken: '0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D', token: '0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11' }, polygon: { strategy: '0x32dAc1B8AD93b53F549D6555e01c35dCC50b6229', veToken: '0xB419cE2ea99f356BaE0caC47282B9409E38200fa', token: '0xBFA35599c7AEbb0dAcE9b5aa3ca5f2a79624D8Eb' }, mantle: { strategy: '0xCaAF554900E33ae5DBc66ae9f8ADc3049B7D31dB', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xC1E0C8C30F251A07a894609616580ad2CEb547F2' }, + scroll: { strategy: '0xDDFc6B230656010f314F2F659eC8ff33FaB7A9Db', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xAAAE8378809bb8815c08D3C59Eb0c7D1529aD769' }, } Object.keys(config).forEach(chain => { From 21f0fa85b7cacd1e81ec8fdc3f4bee6ce8cd1bf5 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 5 Sep 2024 16:14:04 -0400 Subject: [PATCH 0280/1768] Superstate: update methodology text (#11536) --- projects/superstate/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/superstate/index.js b/projects/superstate/index.js index f5bea3e236..662cf7600e 100644 --- a/projects/superstate/index.js +++ b/projects/superstate/index.js @@ -2,7 +2,7 @@ const USTB = "0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e"; const USCC = "0x14d60e7fdc0d71d8611742720e4c50e7a974020c"; module.exports = { - methodology: "TVL corresponds to the total amount of USTB & USCC minted", + methodology: "TVL corresponds to the total amount of USTB & USCC minted onchain, does not include Superstate book-entry AUM", ethereum: { tvl: async (api) => { const totalSupplies = await api.multiCall({ From c156e5dfbd9cccf39f0cc4d7ae811f4a9489b02e Mon Sep 17 00:00:00 2001 From: 0xShad0w <44497716+0xShad0w@users.noreply.github.com> Date: Thu, 5 Sep 2024 21:14:24 +0100 Subject: [PATCH 0281/1768] add abcnuri to Abacus (#11539) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/abacus/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/abacus/index.js b/projects/abacus/index.js index 08c6fd4eb8..cd42e3ee9f 100644 --- a/projects/abacus/index.js +++ b/projects/abacus/index.js @@ -6,6 +6,7 @@ const config = { bsc: { strategy: '0x37e46C030e0d843b39F692c9108E54945F4CCCf7', veToken: '0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D', token: '0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11' }, polygon: { strategy: '0x32dAc1B8AD93b53F549D6555e01c35dCC50b6229', veToken: '0xB419cE2ea99f356BaE0caC47282B9409E38200fa', token: '0xBFA35599c7AEbb0dAcE9b5aa3ca5f2a79624D8Eb' }, mantle: { strategy: '0xCaAF554900E33ae5DBc66ae9f8ADc3049B7D31dB', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xC1E0C8C30F251A07a894609616580ad2CEb547F2' }, + scroll: { strategy: '0xDDFc6B230656010f314F2F659eC8ff33FaB7A9Db', veToken: '0xAAAEa1fB9f3DE3F70E89f37B69Ab11B47eb9Ce6F', token: '0xAAAE8378809bb8815c08D3C59Eb0c7D1529aD769' }, } Object.keys(config).forEach(chain => { From 8252b5b54b275679c453640c12ad9d9f53e3ca4c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 6 Sep 2024 10:05:23 +0200 Subject: [PATCH 0282/1768] ether-fi blacklist own token --- projects/etherfi-lrt/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index 58f80df8be..79213ef8c8 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -13,6 +13,8 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owners: vaults, fetchCoValentTokens: true, tokenConfig: { onlyWhitelisted: false, - }, resolveUniV3: true, }), + }, resolveUniV3: true, blacklistedTokens: [ + '0x657e8c867d8b37dcc18fa4caead9c45eb088c642', // eBTC + ] }), }, } \ No newline at end of file From aef2984351148b561e857010b9045248c6f8ab0c Mon Sep 17 00:00:00 2001 From: bo-cyber Date: Fri, 6 Sep 2024 19:11:55 +0800 Subject: [PATCH 0283/1768] update TonStable contract addr (#11547) --- projects/TonStable/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/TonStable/index.js b/projects/TonStable/index.js index 2cffea41c3..6f0a12dad5 100644 --- a/projects/TonStable/index.js +++ b/projects/TonStable/index.js @@ -1,7 +1,7 @@ const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const tonStableAddr = "EQDQ-x5TqoSiObbMqh28R1HzJwhrhiw6Oqhe9rT8DoKiRzlH"; +const tonStableAddr = "EQC2Bt4vwcSgCwABlOfgl75GbGuC0GpRU2GsZKqqMHu-T0gk"; module.exports = { methodology: "TonStable's TVL includes all deposited supported assets", From e3300eac4617732f93811d0d9d720b9681081e25 Mon Sep 17 00:00:00 2001 From: Trisome-Bedrock <151131601+Trisome-Bedrock@users.noreply.github.com> Date: Fri, 6 Sep 2024 19:16:51 +0800 Subject: [PATCH 0284/1768] add tokens: BoB(WBTC), Zeta(zBTC), BSC(BTCB, FBTC) (#11549) Co-authored-by: Trisome-Bedrock --- projects/unibtc/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/unibtc/index.js b/projects/unibtc/index.js index 1696cbbf24..467cf04db4 100644 --- a/projects/unibtc/index.js +++ b/projects/unibtc/index.js @@ -17,6 +17,18 @@ const config = { vault: defaultVault, tokens: [fbtc0, fbtc1] }, + bob: { + vault: '0x2ac98DB41Cbd3172CB7B8FD8A8Ab3b91cFe45dCf', + tokens: [ADDRESSES['bob'].WBTC] + }, + zeta: { + vault: '0x84E5C854A7fF9F49c888d69DECa578D406C26800', + tokens: [ADDRESSES['zeta'].BTC] + }, + bsc: { + vault: '0x84E5C854A7fF9F49c888d69DECa578D406C26800', + tokens: [fbtc0, ADDRESSES['bsc'].BTCB] + }, bsquared: { vault: defaultVault, tokens: [ADDRESSES.null,ADDRESSES['bsquared'].WBTC] From 8bf270d419f4941ceb828d5b5a1f54678f37bfcf Mon Sep 17 00:00:00 2001 From: frost-ostrich <127277105+frost-ostrich@users.noreply.github.com> Date: Fri, 6 Sep 2024 06:17:16 -0500 Subject: [PATCH 0285/1768] Update subgraph url to fix current stale tlv numbers (#11540) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/origami/index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/projects/origami/index.js b/projects/origami/index.js index 22e1c67a61..4dff78b006 100644 --- a/projects/origami/index.js +++ b/projects/origami/index.js @@ -2,8 +2,8 @@ const sdk = require("@defillama/sdk"); const { cachedGraphQuery } = require('../helper/cache') const GRAPH_URLS = { - ethereum: sdk.graph.modifyEndpoint('GGN8RoYQBiw2Ui6wUeaKcHsBBSrQzQoryYi2feoTKwPX'), // ethereum - arbitrum: sdk.graph.modifyEndpoint('AHT1ffJhw7NWdeH3XYbWzMmy5USbB22K3ecVDu8azGuF'), // arbitrum + ethereum: sdk.graph.modifyEndpoint('https://subgraph.satsuma-prod.com/a912521dd162/templedao/origami-mainnet/api'), // ethereum + arbitrum: sdk.graph.modifyEndpoint('https://subgraph.satsuma-prod.com/a912521dd162/templedao/origami-arbitrum/api'), // arbitrum } module.exports = { @@ -15,17 +15,15 @@ Object.keys(GRAPH_URLS).forEach(chain => { module.exports[chain] = { tvl: async (api) => { const { metrics: [{ investmentVaults }] } = await cachedGraphQuery('origami/' + chain, endpoint, '{ metrics { investmentVaults { id } } }') - console.log(investmentVaults) const vaults = investmentVaults.map(vault => vault.id) let tokens = await api.multiCall({ abi: 'address:reserveToken', calls: vaults }) - if (chain === 'arbitrum') + if (chain === 'arbitrum') tokens = await api.multiCall({ abi: 'address:baseToken', calls: tokens }) const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: vaults }) const supplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: vaults }) const reserves = await api.multiCall({ abi: 'uint256:reservesPerShare', calls: vaults }) const bals = reserves.map((reserve, i) => reserve * supplies[i] / 10 ** decimals[i]) - console.log(tokens, bals, vaults, api.chain) api.add(tokens, bals) } } From ef280d108757b6cbfa6033b78fb2c03eda860d51 Mon Sep 17 00:00:00 2001 From: AmplyFinance-Defi Date: Fri, 6 Sep 2024 07:44:55 -0400 Subject: [PATCH 0286/1768] Add Amply Finance zkCronos (#11543) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/amply-finance/index.js | 7 +++++++ projects/helper/tokenMapping.js | 2 ++ 2 files changed, 9 insertions(+) create mode 100644 projects/amply-finance/index.js diff --git a/projects/amply-finance/index.js b/projects/amply-finance/index.js new file mode 100644 index 0000000000..5874c27456 --- /dev/null +++ b/projects/amply-finance/index.js @@ -0,0 +1,7 @@ +const { aaveExports } = require('../helper/aave'); +const methodologies = require('../helper/methodologies'); + +module.exports = { + methodology: methodologies.lendingMarket, + cronos_zkevm: aaveExports(undefined, undefined, undefined, ['0x47656eb2A31094b348EBF458Eccb942d471324eD'], { v3: true, }) +} \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 06e9abc3c5..efdde4966b 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -55,6 +55,7 @@ const fixBalancesTokens = { }, cronos_zkevm: { '0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d': { coingeckoId: 'crypto-com-chain', decimals: 18 }, + '0x898b3560affd6d955b1574d87ee09e46669c60ea': { coingeckoId: 'ethereum', decimals: 18 }, }, lac: { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, @@ -94,6 +95,7 @@ const fixBalancesTokens = { idex: { '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': { coingeckoId: "usd-coin", decimals: 6 }, }, + } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 7457663a226457341a82f37a84bad05be32d02ff Mon Sep 17 00:00:00 2001 From: kris-ipor <98769272+kris-ipor@users.noreply.github.com> Date: Fri, 6 Sep 2024 14:29:23 +0200 Subject: [PATCH 0287/1768] IPOR protocol update for arbitrum chain (#11550) --- projects/ipor/abi.js | 1 + projects/ipor/index.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/projects/ipor/abi.js b/projects/ipor/abi.js index ec952bd711..b206dea50a 100644 --- a/projects/ipor/abi.js +++ b/projects/ipor/abi.js @@ -2,6 +2,7 @@ module.exports = { abi: { getAccruedBalance: "function getAccruedBalance() view returns (uint256 totalCollateralPayFixed, uint256 totalCollateralReceiveFixed, uint256 liquidityPool, uint256 vault)", getAmmBalance: "function getAmmBalance(address asset) view returns (uint256 totalCollateralPayFixed, uint256 totalCollateralReceiveFixed, uint256 liquidityPool, uint256 vault)", + getBalancesForOpenSwap: " function getBalancesForOpenSwap(address asset) external view returns (uint256 totalCollateralPayFixed, uint256 totalNotionalPayFixed, uint256 totalCollateralReceiveFixed, uint256 totalNotionalReceiveFixed, uint256 liquidityPool)", getAsset: "address:getAsset", } }; diff --git a/projects/ipor/index.js b/projects/ipor/index.js index 8b3c6f9505..f4e7758c56 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -16,7 +16,24 @@ async function tvlEthereum(api) { } async function tvlArbitrum(_, block, _1, {api}) { const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); + + const assets = [ + ADDRESSES.arbitrum.USDC_CIRCLE, // USDC + ] + + const output = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: addresses.arbitrum.IporProtocolRouter }) + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) + + output.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { + const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool + const decimal = 18 - decimals[i] + api.add(assets[i], balance / (10 ** decimal)) + }); + for (const pool of addresses.arbitrum.pools) { + if (assets.includes(pool.asset)) { + continue; + } await api.sumTokens({owner: pool.AmmTreasury, tokens: [pool.asset]}); } return api.getBalances(); @@ -41,6 +58,9 @@ async function calculateTvlForV2(api) { }); for (const pool of addresses.ethereum.pools) { + if (assets.includes(pool.asset)) { + continue; + } await api.sumTokens({owner: pool.AmmTreasury, tokens: [pool.asset]}); } From fd3aea2d933b7e124f09aa7e5b4b0840a64c06ba Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 6 Sep 2024 14:40:10 +0200 Subject: [PATCH 0288/1768] track biconomy cex #11542 --- projects/biconomy-cex/index.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 projects/biconomy-cex/index.js diff --git a/projects/biconomy-cex/index.js b/projects/biconomy-cex/index.js new file mode 100644 index 0000000000..4eb80765fb --- /dev/null +++ b/projects/biconomy-cex/index.js @@ -0,0 +1,26 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + '0xb03eDB668008459B3c6D948ab5Ab305581DbF69c' + ], + }, + bitcoin: { + owners: [ + 'bc1qx70fn2550vhjetc748wmg4lzv5gy7t56ns92v8' + ] + }, + polygon: { + owners: [ + '0x366ba28Ec89113454EA6e82bB606426e8cA22780' + ], + }, + tron: { + owners: [ + 'TEi2hVWDRMo61PAoi1Dwbn8hNXufkwEVyp' + ] + }, +} + +module.exports = cexExports(config) From 48520b2400ff5720917249c3003682ec83d7fc6f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 7 Sep 2024 02:43:54 +0100 Subject: [PATCH 0289/1768] add dough finance --- projects/dough-finance.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/dough-finance.js diff --git a/projects/dough-finance.js b/projects/dough-finance.js new file mode 100644 index 0000000000..925be98a65 --- /dev/null +++ b/projects/dough-finance.js @@ -0,0 +1,17 @@ +const { sumTokens2 } = require("./helper/unwrapLPs") + +async function getVaults(api) { + const vaults = await api.fetchList({ lengthAbi: 'dsaCounter', itemAbi: 'getDsaByID', target: "0x5390724ca3b0880242c7b1ef08eb9b1abe698c0e" }) + const tokens = ["0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c", "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8", + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"] + return { vaults, tokens } +} + +module.exports = { + ethereum: { + tvl: async (api) => { + const { vaults, tokens } = await getVaults(api) + return sumTokens2({ api, tokensAndOwners2: [tokens, vaults]}) + }, + } +} From 02081551290a13ad023193736f59628b982f31e3 Mon Sep 17 00:00:00 2001 From: Kacper Bak <290936+kbak@users.noreply.github.com> Date: Sat, 7 Sep 2024 18:48:32 +0200 Subject: [PATCH 0290/1768] added LBTC to Zircuit (#11551) --- projects/zircuit/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index 57053708e0..a6239dcc4a 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -27,7 +27,8 @@ const TOKEN_CONTRACTS = [ '0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811', // pzETH '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', // weETHs - '0xC96dE26018A54D51c097160568752c4E3BD6C364' // FBTC + '0xC96dE26018A54D51c097160568752c4E3BD6C364', // FBTC + '0x8236a87084f8b84306f72007f36f2618a5634494' // LBTC ]; module.exports = { From df871c3b4722810ec03c4a1021392d24c578094c Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 9 Sep 2024 03:38:07 +0100 Subject: [PATCH 0291/1768] fix --- projects/dough-finance.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/projects/dough-finance.js b/projects/dough-finance.js index 925be98a65..dbbd6fe8e6 100644 --- a/projects/dough-finance.js +++ b/projects/dough-finance.js @@ -2,8 +2,14 @@ const { sumTokens2 } = require("./helper/unwrapLPs") async function getVaults(api) { const vaults = await api.fetchList({ lengthAbi: 'dsaCounter', itemAbi: 'getDsaByID', target: "0x5390724ca3b0880242c7b1ef08eb9b1abe698c0e" }) - const tokens = ["0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c", "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8", - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"] + const tokens = [ + "0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c", + "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8", + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // usdc + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // eth + "0x72e95b8931767c79ba4eee721354d6e99a61d004", // debt usdc + "0xea51d7853eefb32b6ee06b1c12e6dcca88be0ffe", // debt weth + ] return { vaults, tokens } } @@ -11,7 +17,7 @@ module.exports = { ethereum: { tvl: async (api) => { const { vaults, tokens } = await getVaults(api) - return sumTokens2({ api, tokensAndOwners2: [tokens, vaults]}) + return sumTokens2({ api, tokens, owners: vaults }) }, } } From deecf7271f6a29d4d26bcab7fcae314bf136ad7a Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 9 Sep 2024 04:27:02 +0100 Subject: [PATCH 0292/1768] add hallmark --- projects/dough-finance.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/dough-finance.js b/projects/dough-finance.js index dbbd6fe8e6..b94d941186 100644 --- a/projects/dough-finance.js +++ b/projects/dough-finance.js @@ -14,6 +14,9 @@ async function getVaults(api) { } module.exports = { + hallmarks: [ + [1720742400, "Protocol Exploit"] + ], ethereum: { tvl: async (api) => { const { vaults, tokens } = await getVaults(api) From 7ef4740b8507418253e99d1f6634ad7fdd477c5b Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Sep 2024 09:54:18 +0200 Subject: [PATCH 0293/1768] feat:Adapter, Fodl (outdated) -> deadFrom (#11557) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/fodl/index.js | 97 ++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/projects/fodl/index.js b/projects/fodl/index.js index 7065b1bf11..49b7a76d45 100644 --- a/projects/fodl/index.js +++ b/projects/fodl/index.js @@ -2,53 +2,68 @@ const abi = require('./abi.json') const { sumTokensExport } = require('../helper/unwrapLPs'); const { sliceIntoChunks } = require('../helper/utils'); -// taken from https://app.fodl.finance/config.json -const config = { +module.exports = { ethereum: { - position_nft: '0x70febba7d45cfe6d99847ba4ccc393373b1ea8aa', - lens_contract: '0x080155C42b0854C3A718B610cC5183e963851Afb', - pool2: [ - ['0xa5c475167f03b1556c054e0da78192cd2779087f', '0xf958a023d5b1e28c32373547bdde001cad17e9b4'], - ['0xce7e98d4da6ebda6af474ea618c6b175729cd366', '0xa7453338ccc29e4541e6c6b0546a99cc6b9eb09a'], - ], - staking: [ - ['0x4c2e59d098df7b6cbae0848d66de2f8a4889b9c3', '0x7e05540A61b531793742fde0514e6c136b5fbAfE'], - ], + tvl: () => ({}), }, polygon: { - position_nft: '0x7243c51c24b302b01094785f3c826f9311525613', - lens_contract: '0xbfE6971Fc6F195bcacB72beE3427f5b4d8C3dc07', - pool2: [ - ['0x2fc4dfcee8c331d54341f5668a6d9bcdd86f8e2f', '0xea7336c408ec8012e6b97368198512597e49c88a'], - ], + tvl: () => ({}), }, bsc: { - position_nft: '0x4c2e59d098df7b6cbae0848d66de2f8a4889b9c3', - lens_contract: '0x6032035731c9F0b2E53Da63ca15444375E946559', - }, + tvl: () => ({}), + } } -module.exports = { - methodology: "FODL leverages users positions on Aave and Compound. The fodl lens contract is used to get the positions metadata, especially supplyAmount and supplyTokenAddress, which counts as the TVL of the position of the user. Pool2 TVL are the tokens locked in the SUSHI pools", -}; - -Object.keys(config).forEach(chain => { - const { position_nft, lens_contract, pool2, staking, } = config[chain] - module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }, { api }) => { - const allPositions = await api.fetchList({ lengthAbi: 'erc20:totalSupply', itemAbi: abi.tokenByIndex, target: position_nft, }) - for (const positions of sliceIntoChunks(allPositions, 50)) { - const data = await api.multiCall({ abi: abi.getPositionsMetadata, calls: sliceIntoChunks(positions, 10).map(i => ({ params: [i] })), target: lens_contract, }) - data.forEach(j => { - j.forEach(i => api.add(i.supplyTokenAddress, i.supplyAmount)) - }) - } - } - } +module.exports.deadFrom = '2023-01-01' + +// taken from https://app.fodl.finance/config.json +// const config = { +// ethereum: { +// position_nft: '0x70febba7d45cfe6d99847ba4ccc393373b1ea8aa', +// lens_contract: '0x080155C42b0854C3A718B610cC5183e963851Afb', +// pool2: [ +// ['0xa5c475167f03b1556c054e0da78192cd2779087f', '0xf958a023d5b1e28c32373547bdde001cad17e9b4'], +// ['0xce7e98d4da6ebda6af474ea618c6b175729cd366', '0xa7453338ccc29e4541e6c6b0546a99cc6b9eb09a'], +// ], +// staking: [ +// ['0x4c2e59d098df7b6cbae0848d66de2f8a4889b9c3', '0x7e05540A61b531793742fde0514e6c136b5fbAfE'], +// ], +// }, +// polygon: { +// position_nft: '0x7243c51c24b302b01094785f3c826f9311525613', +// lens_contract: '0xbfE6971Fc6F195bcacB72beE3427f5b4d8C3dc07', +// pool2: [ +// ['0x2fc4dfcee8c331d54341f5668a6d9bcdd86f8e2f', '0xea7336c408ec8012e6b97368198512597e49c88a'], +// ], +// }, +// bsc: { +// position_nft: '0x4c2e59d098df7b6cbae0848d66de2f8a4889b9c3', +// lens_contract: '0x6032035731c9F0b2E53Da63ca15444375E946559', +// }, +// } + +// module.exports = { +// methodology: "FODL leverages users positions on Aave and Compound. The fodl lens contract is used to get the positions metadata, especially supplyAmount and supplyTokenAddress, which counts as the TVL of the position of the user. Pool2 TVL are the tokens locked in the SUSHI pools", +// }; + +// Object.keys(config).forEach(chain => { +// const { position_nft, lens_contract, pool2, staking, } = config[chain] +// module.exports[chain] = { +// tvl: async (_, _b, { [chain]: block }, { api }) => { +// const allPositions = await api.fetchList({ lengthAbi: 'erc20:totalSupply', itemAbi: abi.tokenByIndex, target: position_nft, }) +// for (const positions of sliceIntoChunks(allPositions, 50)) { +// const data = await api.multiCall({ abi: abi.getPositionsMetadata, calls: sliceIntoChunks(positions, 10).map(i => ({ params: [i] })), target: lens_contract, }) +// data.forEach(j => { +// j.forEach(i => api.add(i.supplyTokenAddress, i.supplyAmount)) +// }) +// } +// } +// } + +// if (pool2) +// module.exports[chain].pool2 = sumTokensExport({ tokensAndOwners: pool2, chain, }) - if (pool2) - module.exports[chain].pool2 = sumTokensExport({ tokensAndOwners: pool2, chain, }) +// if (staking) +// module.exports[chain].staking = sumTokensExport({ tokensAndOwners: staking, chain, }) +// }) - if (staking) - module.exports[chain].staking = sumTokensExport({ tokensAndOwners: staking, chain, }) -}) From cabbc06e4b8a5c8113326eb81b60bbb74fd55751 Mon Sep 17 00:00:00 2001 From: fightingm <417300459@qq.com> Date: Mon, 9 Sep 2024 15:55:04 +0800 Subject: [PATCH 0294/1768] feat: add pionex cex (#11548) Co-authored-by: KaiMing Xu --- projects/pionex-cex/index.js | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 projects/pionex-cex/index.js diff --git a/projects/pionex-cex/index.js b/projects/pionex-cex/index.js new file mode 100644 index 0000000000..2c75620788 --- /dev/null +++ b/projects/pionex-cex/index.js @@ -0,0 +1,53 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xf6d4e5a7c5215f91f59a95065190cca24bf64554", + "0x2a8a276019d3ec549ae657c945ef60aab4e33c9b", + "0xa008dc1281aa6bff98b2c253ee8fd759ba918103", + "0x28410a70acc5f01e4efe892bcc38b70f3bcf014b", + "0x4608fbf5fd78879ba0a75c6c0b0f5e53e188d3e2", + "0x5e483d7803a8b39f0d6792a0431176a91fde6e31", + "0x7175a01564ac4a83dd396e288a2707dee86caf63", + "0x4998cb57364531560f4048213ba9b529ec27f14f", + "0x02104cae462af17739cc4315ef9ac710a9ed22a7" + ], + }, + bitcoin: { + owners: [ + "1D2Pds2XyiDe7CknDumKkdSECuepGsBCSR", + "bc1qs0jdyydyd4kv7fwqre4suhz33mcuy3838xdsla", + "1JkmFSbqijbrv6JdyVx2hNwyE8nzEy3Cs5", + "bc1qctq0v0vecjxp4de66znkh0dcczkvuqjwwt0za4", + "1KH7cEFwFvKfnx7KjMaQUescVSigz3FMaJ", + "bc1qeplx7cy5xx37m9mtrh9qefeuswansr0c9mvewa", + "1BgvqcFm2cYRg8HCrd4qWnC7iA6tQqoeme", + "bc1qw5lxcrk7l2xsy2wx5mapdz58g29xde4x56le3s", + "1A4Ag6y473avEbjVm5N4HAqiVCE6NxLRCS", + "bc1qvdf8f85dn69csyka5tzjezsl66hdhmmfgwgfzz", + "1PDgKsiQo8hkA5pxYBwS1ooXv9jFNJCFh5", + "bc1q7wufvquhtmmd7eepjdu76lumj6efmfl2p6sgch", + "1CNEXYtt6WYZuMwJF7AjNYr39nxbrUTRoh", + "bc1q0jkkjr2qr4wl3v399algvsjuk8g7vlm3yaqufu", + "17UcdCaVWpmgpuZsKfKdWRUUViAzoQFY3H", + "bc1qguymjgurnywqac3rrplr2nmkl26cf5jyyq3vkv", + "1D9YPYQevtEsk26exBjCY2pKfhDsXTxJEE" + ], + }, + tron: { + owners: [ + "TYULGbfdheMSQBv7skFxNbgo7mbNjsWSrF", + "TDr8tDBgYLtrfPmC4erXp7eRgvVNM32EKp", + "TQZPjLBwG8JW7J8LJ3vBbXU6UxAyxH1367", + "TDe3wqxhTSPimeQkJVKNBkCjRnUj839MKj", + "TGMX4ipWLrjqZq7yM4cGVNr124BFrRYtWz", + "TJZj4RS6v6U3HCpTSJ7CwNycRcoi7BREGx", + "TLK8GVBqJNmcyaN5mpSPSzQfTjsSxb7sC9", + "TGgMNPxdyUgdYwMSbMkpTPvaSkrRakKqcK", + "TAA7sxJ259JgstGPjanb5sB6ZJuCPtCobs" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file From 88197c58a59966e8796788485ead872d5c88e361 Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Mon, 9 Sep 2024 15:55:48 +0800 Subject: [PATCH 0295/1768] add tokens (#11556) --- projects/kiloex/index.js | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index d2980aad50..2f26628606 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -11,17 +11,44 @@ const bsquared_owners = ["0xA2E2F3726DF754C1848C8fd1CbeA6aAFF84FC5B2", "0x1EbEd4 module.exports = { start: 1690971144, - bsc: { tvl: sumTokensExport({ owners, tokens: [ADDRESSES.bsc.USDT, ADDRESSES.ethereum.FDUSD, ADDRESSES.scroll.STONE], }) }, + bsc: { tvl: sumTokensExport({ owners, tokens: [ + ADDRESSES.bsc.USDT, ADDRESSES.ethereum.FDUSD, ADDRESSES.scroll.STONE, + '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', //WBNB + '0xba2ae424d960c26247dd6c32edc70b295c744c43', //DOGE + '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', //BTCB + '0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b',//slisBNB + '0x0782b6d8c4551b9760e74c0545a9bcd90bdc41e5',//lisUSD + '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', //usdc + + ], }) }, op_bnb: { - tvl: sumTokensExport({ owners: opbnb_owners, tokens: [ADDRESSES.op_bnb.USDT, ADDRESSES.base.DAI,ADDRESSES.optimism.WETH_1] }) + tvl: sumTokensExport({ owners: opbnb_owners, tokens: [ + ADDRESSES.op_bnb.USDT, + ADDRESSES.base.DAI, //FDUSD + ADDRESSES.optimism.WETH_1, //WBNB + '0x7c6b91d9be155a6db01f749217d76ff02a7227f2', //BTCB + '0xe7798f023fc62146e8aa1b36da45fb70855a77ea', //ETH + ] }) }, manta: { - tvl: sumTokensExport({ owners: manta_owners, tokens: [ADDRESSES.manta.USDT, manta_stone_token, manat_manta_token] }) + tvl: sumTokensExport({ owners: manta_owners, tokens: [ + ADDRESSES.manta.USDT, manta_stone_token, manat_manta_token, + '0x7746ef546d562b443ae4b4145541a3b1a3d75717', //vMANTA + '0xb73603c5d87fa094b7314c74ace2e64d165016fb', //USDC + ] }) }, taiko: { - tvl: sumTokensExport({ owners: taiko_owners, tokens: [ADDRESSES.taiko.USDC] }) + tvl: sumTokensExport({ owners: taiko_owners, tokens: [ + ADDRESSES.taiko.USDC, + '0x19e26b0638bf63aa9fa4d14c6baf8d52ebe86c5c', //USDC.e + ] }) }, bsquared: { - tvl: sumTokensExport({ owners: bsquared_owners, tokens: [ADDRESSES.bsquared.USDT] }) + tvl: sumTokensExport({ owners: bsquared_owners, tokens: [ + ADDRESSES.bsquared.USDT, + '0xe544e8a38add9b1abf21922090445ba93f74b9e5', //USDC + '0x7537c1f80c9e157ed7afd93a494be3e1f04f1462', //BSTONE + '0x796e4d53067ff374b89b2ac101ce0c1f72ccaac2',//uBTC + ] }) }, }; From 4a23915507ea7275776eb187a30589de7077ee17 Mon Sep 17 00:00:00 2001 From: CobaltSato <44801013+CobaltSato@users.noreply.github.com> Date: Mon, 9 Sep 2024 17:01:37 +0900 Subject: [PATCH 0296/1768] add oas-jumbo project (#11555) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/oas-jumbo/index.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 projects/oas-jumbo/index.js diff --git a/projects/oas-jumbo/index.js b/projects/oas-jumbo/index.js new file mode 100644 index 0000000000..960c51ec36 --- /dev/null +++ b/projects/oas-jumbo/index.js @@ -0,0 +1,28 @@ +const CONTRACT_ADDRESSES = { + environmentContract: "0x0000000000000000000000000000000000001000", // Environment contract address + stakesManagerContract: "0x0000000000000000000000000000000000001001", // Stakes manager contract address + oasJumboStaking: "0x7e6347ddC55dF19B94C9FE893bf551CFc8C2208b", // OAS Jumbo staking contract address +}; + +const contractAbis = { + getStakerStakes: { + abi: "function getStakerStakes(address staker, uint256 epoch, uint256 cursor,uint256 howMany) returns (address[] memory validators, uint256[] memory oasStakes, uint256[] memory woasStakes, uint256[] memory soasStakes, uint256 newCursor)", + }, +}; + +module.exports = { + oas: { + tvl: async (api) => { + // Fetch current epoch + const epoch = await api.call({ abi: 'uint256:epoch', target: CONTRACT_ADDRESSES.environmentContract, }); + + // Fetch staker stakes + const { oasStakes } = await api.call({ + abi: contractAbis.getStakerStakes.abi, + target: CONTRACT_ADDRESSES.stakesManagerContract, + params: [CONTRACT_ADDRESSES.oasJumboStaking, epoch, 12, 1], + }); + api.addGasToken(oasStakes) + } + }, +}; From 8bfd4ad451c298fca0d6210e6bbded57bea60f2d Mon Sep 17 00:00:00 2001 From: lemonpac <144460286+lemonpac@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:06:44 +0200 Subject: [PATCH 0297/1768] Subgraph upgrades for IntentX (#11552) --- projects/intentx.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/projects/intentx.js b/projects/intentx.js index 9b82e7597d..06c4e3000a 100644 --- a/projects/intentx.js +++ b/projects/intentx.js @@ -3,9 +3,9 @@ const { request, } = require("graphql-request"); const config = { - blast: { token: ADDRESSES.blast.USDB, start: 1710115200, graphUrl: "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest", accountSource: '0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015'}, - base: { token: ADDRESSES.base.USDbC, start: 1700006400, graphUrl: "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest", accountSource: '0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86'}, - mantle: { token: ADDRESSES.mantle.USDC, start: 1712966400, graphUrl: "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082", accountSource: '0xECbd0788bB5a72f9dFDAc1FFeAAF9B7c2B26E456' }, + blast: { token: ADDRESSES.blast.USDB, start: 1710115200, graphUrl: "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-blast-analytics-083/latest/gn", accountSource: '0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015'}, + base: { token: ADDRESSES.base.USDbC, start: 1700006400, graphUrl: "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-083/latest/gn", accountSource: '0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86'}, + mantle: { token: ADDRESSES.mantle.USDC, start: 1712966400, graphUrl: "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-mantle-analytics-083/latest/gn", accountSource: '0xECbd0788bB5a72f9dFDAc1FFeAAF9B7c2B26E456' }, } async function tvl(api) { @@ -46,9 +46,10 @@ module.exports = { [1704200400, "0.8.2 Migration"], [config.blast.start, "Blast Deploy"], [config.mantle.start, "Mantle Deploy"], + [1725753600, "0.8.3 Migration"] ], } Object.keys(config).forEach(chain => { module.exports[chain] = { tvl } -}) \ No newline at end of file +}) From 04329f9633080b7e84ac6af188021d119590f66c Mon Sep 17 00:00:00 2001 From: Anastasiia Kondaurova <31795791+KStasi@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:13:15 +0200 Subject: [PATCH 0298/1768] Add Parraton (#11554) --- projects/parraton/index.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 projects/parraton/index.js diff --git a/projects/parraton/index.js b/projects/parraton/index.js new file mode 100644 index 0000000000..56b7d866a5 --- /dev/null +++ b/projects/parraton/index.js @@ -0,0 +1,28 @@ +const { get } = require('../helper/http') +const ADDRESSES = require("../helper/coreAssets.json"); + +async function tvl(api) { + const vaults = await get('https://api.parraton.com/v1/vaults') + const tvl =vaults.reduce((acc, vault) => { + acc += Number(vault.tvlUsd) + return acc + }, 0) + api.add(ADDRESSES.ton.USDT, tvl * 1e6) +} + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + methodology: ` +The methodology for calculating TVL includes both the TON balance and LP token +data for each vault. We convert the TON balance to its USD equivalent and add it +to the value of DeDust LP tokens, which is calculated using on-chain data +(reserve0, reserve1, total LP supply). The value of LP tokens is determined by +their share of pool reserves, adjusted to USD. The total TVL is the sum of these +values across all vaults. The calculation is performed on the Parraton API side. + `.trim(), + + ton: { + tvl + } +} \ No newline at end of file From e200002a024c94c3bc735454cb8de574a5151f12 Mon Sep 17 00:00:00 2001 From: liberhex <140998619+liberhex@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:24:49 +0800 Subject: [PATCH 0299/1768] add owner balance for alphax (#11546) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphaX-protocol/index.js | 31 +++++++++------------------- projects/treasury/alphaX-protocol.js | 7 +++++++ 2 files changed, 17 insertions(+), 21 deletions(-) create mode 100644 projects/treasury/alphaX-protocol.js diff --git a/projects/alphaX-protocol/index.js b/projects/alphaX-protocol/index.js index 0eb194a9a8..8eac5b407b 100644 --- a/projects/alphaX-protocol/index.js +++ b/projects/alphaX-protocol/index.js @@ -1,29 +1,18 @@ -const ADDRESSES = require('../helper/coreAssets.json'); -const { sumTokensExport } = require('../helper/unwrapLPs'); - -const tokens = [ - ADDRESSES.ethereum.USDT, -]; +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') const walletAddresses = { - ethereum: ['0xA61a6E696B7C566DA42B80dA27d96e7104bcec99'], - arbitrum: ['0x552E7A55802f3350C707a243E402aa50Eda9D286'] - -}; + ethereum: ['0xA61a6E696B7C566DA42B80dA27d96e7104bcec99'], + arbitrum: ['0x552E7A55802f3350C707a243E402aa50Eda9D286'] +} const tokenAddress = { ethereum: [ADDRESSES.ethereum.USDT], arbitrum: [ADDRESSES.arbitrum.USDT], - - } -module.exports = { - ethereum: { - tvl: sumTokensExport({ owners: walletAddresses.ethereum, tokens: tokenAddress.ethereum }), - }, - arbitrum: { - tvl: sumTokensExport({ owners: walletAddresses.arbitrum, tokens: tokenAddress.arbitrum }), - }, - -}; +Object.keys(walletAddresses).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport({ owners: walletAddresses[chain], tokens: tokenAddress[chain], }) + } +}) \ No newline at end of file diff --git a/projects/treasury/alphaX-protocol.js b/projects/treasury/alphaX-protocol.js new file mode 100644 index 0000000000..a1f9fc51c8 --- /dev/null +++ b/projects/treasury/alphaX-protocol.js @@ -0,0 +1,7 @@ +const { treasuryExports } = require("../helper/treasury"); + +module.exports = treasuryExports({ + ethereum: { + owners: ['0x95e2A6458419b7A38193CB853F45fD7329443A90'], + }, +}) From d983125ab235819c5711712b3f7fc6380e85ed77 Mon Sep 17 00:00:00 2001 From: nuhbye Date: Mon, 9 Sep 2024 13:55:40 +0530 Subject: [PATCH 0300/1768] Add TonPools (#11545) --- projects/tonpools/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/tonpools/index.js diff --git a/projects/tonpools/index.js b/projects/tonpools/index.js new file mode 100644 index 0000000000..3b616676e7 --- /dev/null +++ b/projects/tonpools/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require('../helper/chain/ton') +const ADDRESSES = require("../helper/coreAssets.json"); + +const tonpoolsContractAddress = "EQA7y9QkiP4xtX_BhOpY4xgVlLM7LPcYUA4QhBHhFZeL4fTa"; + +module.exports = { + methodology: "Ton Pools's TVL includes all deposited supported assets", + ton: { + tvl: sumTokensExport({ owner: tonpoolsContractAddress, tokens: [ADDRESSES.null] }), + }, +} From dfbc8913e8bbb94fec06ae01743dfdbe0243126e Mon Sep 17 00:00:00 2001 From: Wenching <103871930+amching@users.noreply.github.com> Date: Mon, 9 Sep 2024 18:19:47 +0800 Subject: [PATCH 0301/1768] feat: add pixelswap TVL on Ton chain (#11561) Co-authored-by: lina --- projects/pixel-swap/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/pixel-swap/index.js diff --git a/projects/pixel-swap/index.js b/projects/pixel-swap/index.js new file mode 100644 index 0000000000..a8cb5deee9 --- /dev/null +++ b/projects/pixel-swap/index.js @@ -0,0 +1,15 @@ +const { get } = require('../helper/http') + +async function tvl(api) { + const res = await get("https://api.pixelswap.io/apis/tokens"); + const tokens = res.data.tokens.map(i => i.address); + const balances = res.data.tokens.map(i => i.tokenBalance); + + api.addTokens(tokens, balances); + } + + module.exports = { + ton: { + tvl, + } + }; From 7c2728938a78ec538e284ae9696ad91bb1d76076 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:29:26 +0200 Subject: [PATCH 0302/1768] code refactor --- projects/abc-pool/index.js | 1 + projects/apex-omni/index.js | 2 +- projects/binance/config.js | 60 ++++++++++++++++----------------- projects/bitparty/index.js | 2 +- projects/bitsmiley-io/index.js | 3 +- projects/deltatrade.js | 3 +- projects/demodyfi/index.js | 3 +- projects/dough-finance.js | 5 +-- projects/echo-lending/index.js | 3 +- projects/enzo/index.js | 3 +- projects/helper/coreAssets.json | 4 +-- projects/helper/tokenMapping.js | 8 ++--- projects/idex-v4/index.js | 3 +- projects/kalax/index.js | 7 ++-- projects/kiloex/index.js | 20 +++++------ projects/lynx/index.js | 2 +- projects/oas-jumbo/index.js | 3 +- projects/okex/index.js | 1 + projects/ondofinance/index.js | 3 +- projects/pearl-v2/index.js | 3 +- projects/real-veRWA/index.js | 3 +- projects/satori/index.js | 2 +- projects/sigmao/index.js | 1 + projects/sigmausd/index.js | 1 + projects/sparkswap/index.js | 3 +- projects/treasury/bonsai.js | 4 +-- projects/treasury/dexfinance.js | 2 +- projects/wanbridge.js | 3 +- projects/xlink/index.js | 6 ++-- projects/xrpl-dex/app.js | 3 +- projects/xrpl-dex/index.js | 1 + 31 files changed, 94 insertions(+), 74 deletions(-) diff --git a/projects/abc-pool/index.js b/projects/abc-pool/index.js index e358ef7546..7f61095bd7 100644 --- a/projects/abc-pool/index.js +++ b/projects/abc-pool/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const PoSPoolProxy1967_core = "cfx:type.contract:accpx9uxky39pg1hzav757vdej95w1kbcp13d0hvm7"; const PoSPoolProxy1967_espace = "0xb6eb7aa86f3886b6edc0fc1c826221b1fb26e437"; const core_rpc = "https://main.confluxrpc.com"; diff --git a/projects/apex-omni/index.js b/projects/apex-omni/index.js index 5c109418ef..b17cac8f80 100644 --- a/projects/apex-omni/index.js +++ b/projects/apex-omni/index.js @@ -18,7 +18,7 @@ const walletAddresses = { const tokenAddress = { bsc: [ADDRESSES.bsc.USDT], arbitrum: [ADDRESSES.arbitrum.USDT], - base: ['0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2'], + base: [ADDRESSES.base.USDT], mantle: [ADDRESSES.mantle.USDT] } diff --git a/projects/binance/config.js b/projects/binance/config.js index 06842fe024..cda29f2f6a 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -573,35 +573,35 @@ const assetList = [ ['WRX', 'ETH', '0x28c6c06298d514db089934071355e5743bf21d60'], ['WRX', 'ETH', '0xdfd5293d8e347dfe59e90efd55b2956a1343963d'], ['WRX', 'ETH', '0xf977814e90da44bfa03b6295a0616a897441acec'], - ['XRP', 'BEP2', 'bnb1fnd0k5l4p3ck2j9x9dp36chk059w977pszdgdz'], - ['XRP', 'BEP2', 'bnb1u2agwjat20494fmc6jnuau0ls937cfjn4pjwtn'], - ['XRP', 'BEP20', '0x0e4158c85ff724526233c1aeb4ff6f0c46827fbe'], - ['XRP', 'BEP20', '0x5a52e96bacdabb82fd05763e25335261b270efcb'], - ['XRP', 'BEP20', '0x8894e0a0c962cb723c1976a4421c95949be2d4e3'], - ['XRP', 'BEP20', '0xbd612a3f30dca67bf60a39fd0d35e39b7ab80774'], - ['XRP', 'BEP20', '0xd3a22590f8243f8e83ac230d1842c9af0404c4a1'], - ['XRP', 'BEP20', '0xe2fc31f816a9b94326492132018c3aecc4a93ae1'], - ['XRP', 'BEP20', '0xeb2d2f1b8c558a40207669291fda468e50c8a0bb'], - ['XRP', 'BEP20', '0xf977814e90da44bfa03b6295a0616a897441acec'], - ['XRP', 'ETH', '0x21a31ee1afc51d94c2efccaa2092ad1028285549'], - ['XRP', 'ETH', '0x28c6c06298d514db089934071355e5743bf21d60'], - ['XRP', 'ETH', '0xdfd5293d8e347dfe59e90efd55b2956a1343963d'], - ['XRP', 'ETH', '0xf977814e90da44bfa03b6295a0616a897441acec'], - ['XRP', 'XRP', 'rBtttd61FExHC68vsZ8dqmS3DfjFEceA1A'], - ['XRP', 'XRP', 'rDAE53VfMvftPB4ogpWGWvzkQxfht6JPxr'], - ['XRP', 'XRP', 'rDecw8UhrZZUiaWc91e571b3TL41MUioh7'], - ['XRP', 'XRP', 'rEy8TFcrAPvhpKrwyrscNYyqBGUkE9hKaJ'], - ['XRP', 'XRP', 'rNU4eAowPuixS5ZCWaRL72UUeKgxcKExpK'], - ['XRP', 'XRP', 'rP3mUZyCDzZkTSd1VHoBbFt8HGm8fyq8qV'], - ['XRP', 'XRP', 'rPJ5GFpyDLv7gqeB1uZVUBwDwi41kaXN5A'], - ['XRP', 'XRP', 'rPz2qA93PeRCyHyFCqyNggnyycJR1N4iNf'], - ['XRP', 'XRP', 'rarG6FaeYhnzSKSS5EEPofo4gFsPn2bZKk'], - ['XRP', 'XRP', 'rfQ9EcLkU6WnNmkS3EwUkFeXeN47Rk8Cvi'], - ['XRP', 'XRP', 'rhWj9gaovwu2hZxYW7p388P8GRbuXFLQkK'], - ['XRP', 'XRP', 'rpmxpWis42eYV4oMhyxJNSzrLRdacJVooa'], - ['XRP', 'XRP', 'rs8ZPbYqgecRcDzQpJYAMhSxSi5htsjnza'], + [ADDRESSES.ripple.XRP, 'BEP2', 'bnb1fnd0k5l4p3ck2j9x9dp36chk059w977pszdgdz'], + [ADDRESSES.ripple.XRP, 'BEP2', 'bnb1u2agwjat20494fmc6jnuau0ls937cfjn4pjwtn'], + [ADDRESSES.ripple.XRP, 'BEP20', '0x0e4158c85ff724526233c1aeb4ff6f0c46827fbe'], + [ADDRESSES.ripple.XRP, 'BEP20', '0x5a52e96bacdabb82fd05763e25335261b270efcb'], + [ADDRESSES.ripple.XRP, 'BEP20', '0x8894e0a0c962cb723c1976a4421c95949be2d4e3'], + [ADDRESSES.ripple.XRP, 'BEP20', '0xbd612a3f30dca67bf60a39fd0d35e39b7ab80774'], + [ADDRESSES.ripple.XRP, 'BEP20', '0xd3a22590f8243f8e83ac230d1842c9af0404c4a1'], + [ADDRESSES.ripple.XRP, 'BEP20', '0xe2fc31f816a9b94326492132018c3aecc4a93ae1'], + [ADDRESSES.ripple.XRP, 'BEP20', '0xeb2d2f1b8c558a40207669291fda468e50c8a0bb'], + [ADDRESSES.ripple.XRP, 'BEP20', '0xf977814e90da44bfa03b6295a0616a897441acec'], + [ADDRESSES.ripple.XRP, 'ETH', '0x21a31ee1afc51d94c2efccaa2092ad1028285549'], + [ADDRESSES.ripple.XRP, 'ETH', '0x28c6c06298d514db089934071355e5743bf21d60'], + [ADDRESSES.ripple.XRP, 'ETH', '0xdfd5293d8e347dfe59e90efd55b2956a1343963d'], + [ADDRESSES.ripple.XRP, 'ETH', '0xf977814e90da44bfa03b6295a0616a897441acec'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rBtttd61FExHC68vsZ8dqmS3DfjFEceA1A'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rDAE53VfMvftPB4ogpWGWvzkQxfht6JPxr'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rDecw8UhrZZUiaWc91e571b3TL41MUioh7'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rEy8TFcrAPvhpKrwyrscNYyqBGUkE9hKaJ'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rNU4eAowPuixS5ZCWaRL72UUeKgxcKExpK'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rP3mUZyCDzZkTSd1VHoBbFt8HGm8fyq8qV'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rPJ5GFpyDLv7gqeB1uZVUBwDwi41kaXN5A'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rPz2qA93PeRCyHyFCqyNggnyycJR1N4iNf'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rarG6FaeYhnzSKSS5EEPofo4gFsPn2bZKk'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rfQ9EcLkU6WnNmkS3EwUkFeXeN47Rk8Cvi'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rhWj9gaovwu2hZxYW7p388P8GRbuXFLQkK'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rpmxpWis42eYV4oMhyxJNSzrLRdacJVooa'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rs8ZPbYqgecRcDzQpJYAMhSxSi5htsjnza'], // added on 31/07/2024 - ['XRP', 'XRP', 'rwkbXMJQLQhVhcjZnnHV4zu39N7WcQXQKX'], + [ADDRESSES.ripple.XRP, ADDRESSES.ripple.XRP, 'rwkbXMJQLQhVhcjZnnHV4zu39N7WcQXQKX'], ['USDT', 'ETH', '0x835678a611b28684005a5e2233695fb6cbbb0007'], ['ETH', 'ETH', '0x835678a611b28684005a5e2233695fb6cbbb0007'], ['ETH', 'ARB', '0xf92402bb795fd7cd08fb83839689db79099c8c9c'], @@ -635,7 +635,7 @@ function getAddresses(chain) { return assetList.filter(i => i[1] === chain).map(i => i[2]) } function getOwners(chain) { - const isCaseSensitive = ['BTC', 'TRX', 'SOL', 'XRP', 'LTC', 'DOT', 'ALGO', 'DOGE'].includes(chain) + const isCaseSensitive = ['BTC', 'TRX', 'SOL', ADDRESSES.ripple.XRP, 'LTC', 'DOT', 'ALGO', 'DOGE'].includes(chain) return getUniqueAddresses(assetList.filter(i => i[1] === chain).map(i => i[2]), isCaseSensitive) } @@ -680,7 +680,7 @@ module.exports = { owners: getOwners('OP') }, ripple: { - owners: getOwners('XRP') + owners: getOwners(ADDRESSES.ripple.XRP) }, solana: { owners: getOwners('SOL') diff --git a/projects/bitparty/index.js b/projects/bitparty/index.js index c5a0a6e70a..404bc0eff9 100644 --- a/projects/bitparty/index.js +++ b/projects/bitparty/index.js @@ -10,7 +10,7 @@ module.exports = { ADDRESSES.btr.ETH, '0xfe9f969faf8ad72a83b761138bf25de87eff9dd2', '0x9827431e8b77e87c9894bd50b055d6be56be0030', - '0xfF204e2681A6fA0e2C3FaDe68a1B28fb90E4Fc5F', + ADDRESSES.btr.WBTC, '0x07373d112edc4570b46996ad1187bc4ac9fb5ed0', '0x2729868df87d062020e4a4867ff507fb52ee697c', '0x68879ca2af24941fc3b6eb89fdb26a98aa001fc1', diff --git a/projects/bitsmiley-io/index.js b/projects/bitsmiley-io/index.js index 462e12db1b..086d6c57cb 100644 --- a/projects/bitsmiley-io/index.js +++ b/projects/bitsmiley-io/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require('../helper/unwrapLPs') async function tvl(api) { return sumTokens2({ owners: [ '0x37fc73b4dda9f7263926590838e32e05e4e051e9', - ], tokens: ['0xff204e2681a6fa0e2c3fade68a1b28fb90e4fc5f', '0xfe9f969faf8ad72a83b761138bf25de87eff9dd2'], api, }) //wbtc and usdt + ], tokens: [ADDRESSES.btr.WBTC, '0xfe9f969faf8ad72a83b761138bf25de87eff9dd2'], api, }) //wbtc and usdt } module.exports = { diff --git a/projects/deltatrade.js b/projects/deltatrade.js index 66e62ee4da..ee27b8d882 100644 --- a/projects/deltatrade.js +++ b/projects/deltatrade.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('helper/coreAssets.json') const { sumTokens } = require('./helper/chain/near'); const GRID_CONTRACT_ID = 'grid.deltatrade.near'; @@ -7,7 +8,7 @@ const tokens = [ 'wrap.near', '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1', 'token.v2.ref-finance.near', - 'token.burrow.near', + ADDRESSES.near.BURROW, 'token.lonkingnearbackto2024.near', 'blackdragon.tkn.near', 'ftv2.nekotoken.near', diff --git a/projects/demodyfi/index.js b/projects/demodyfi/index.js index 56664c44bd..4d2e07f3ae 100644 --- a/projects/demodyfi/index.js +++ b/projects/demodyfi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { staking } = require('../helper/staking') const { pool2 } = require('../helper/pool2') @@ -5,7 +6,7 @@ const { pool2 } = require('../helper/pool2') module.exports = { misrepresentedTokens: true, ethereum: { - staking: staking('0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683', '0x5f6c5C2fB289dB2228d159C69621215e354218d7'), + staking: staking('0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683', ADDRESSES.moonbeam.WGLMR), pool2: pool2('0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683', '0xD5B1Cd8D245A93E0697707AEe82497388508b132'), }, bsc: { diff --git a/projects/dough-finance.js b/projects/dough-finance.js index b94d941186..2c3c8e3929 100644 --- a/projects/dough-finance.js +++ b/projects/dough-finance.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('helper/coreAssets.json') const { sumTokens2 } = require("./helper/unwrapLPs") async function getVaults(api) { @@ -5,8 +6,8 @@ async function getVaults(api) { const tokens = [ "0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c", "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8", - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // usdc - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // eth + ADDRESSES.ethereum.USDC, // usdc + ADDRESSES.ethereum.WETH, // eth "0x72e95b8931767c79ba4eee721354d6e99a61d004", // debt usdc "0xea51d7853eefb32b6ee06b1c12e6dcca88be0ffe", // debt weth ] diff --git a/projects/echo-lending/index.js b/projects/echo-lending/index.js index b50ced5300..bbdb7b9563 100644 --- a/projects/echo-lending/index.js +++ b/projects/echo-lending/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { transformBalances } = require("../helper/portedTokens"); const { function_view } = require("../helper/chain/aptos"); @@ -5,7 +6,7 @@ const { function_view } = require("../helper/chain/aptos"); let _data const mapping = { - 'APT': "0x1::aptos_coin::AptosCoin", + 'APT': ADDRESSES.aptos.APT, } async function getData() { diff --git a/projects/enzo/index.js b/projects/enzo/index.js index e4fd5e32ba..e454bcb795 100644 --- a/projects/enzo/index.js +++ b/projects/enzo/index.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports2 } = require("../helper/compound"); module.exports = { - btr: compoundExports2({ cether: '0xe277Aed3fF3Eb9824EdC52Fe7703DF0c5ED8B313', comptroller: '0xe688a4a94AD1D32CD52A01306fc0a9552749F322', cetheEquivalent: '0xfF204e2681A6fA0e2C3FaDe68a1B28fb90E4Fc5F' }) + btr: compoundExports2({ cether: '0xe277Aed3fF3Eb9824EdC52Fe7703DF0c5ED8B313', comptroller: '0xe688a4a94AD1D32CD52A01306fc0a9552749F322', cetheEquivalent: ADDRESSES.btr.WBTC }) }; \ No newline at end of file diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index d4971e537c..1e2cccbd83 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1870,14 +1870,14 @@ }, "rari": { "WETH": "0xf037540e51d71b2d2b1120e8432ba49f29edfbd0", - "USDC.e": "0xfbda5f676cb37624f28265a144a48b0d6e87d3b6" + "USDC_e": "0xfbda5f676cb37624f28265a144a48b0d6e87d3b6" }, "real": { "RWA": "0x4644066f535ead0cde82d209df78d94572fcbf14" }, "saakuru": { "WOAS": "0x557a526472372f1F222EcC6af8818C1e6e78A85f", - "USDC.e": "0x739222D8A9179fE05129C77a8fa354049c088CaA" + "USDC_e": "0x739222D8A9179fE05129C77a8fa354049c088CaA" }, "bouncebit": { "wstBBTC": "0x8f083eafcbba2e126ad9757639c3a1e25a061a08" diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index efdde4966b..e32be7725f 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -59,7 +59,7 @@ const fixBalancesTokens = { }, lac: { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, - '0x2911a1AB18546cb501628Be8625C7503a2A7DB54': { coingeckoId: "la-coin", decimals: 18 }, + [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, '0x42c8c9c0f0a98720dacdaeac0c319cb272b00d7e': { coingeckoId: "ethereum", decimals: 18 }, '0xf54b8cb8eeee3823a55dddf5540ceaddf9724626': { coingeckoId: "wrapped-bitcoin", decimals: 8 }, }, @@ -84,16 +84,16 @@ const fixBalancesTokens = { aura: { [ADDRESSES.null]: { coingeckoId: "aura-network", decimals: 18 }, '0xDE47A655a5d9904BD3F7e1A536D8323fBD99993A': { coingeckoId: "aura-network", decimals: 18 }, - '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd': { coingeckoId: "tether", decimals: 6 }, + [ADDRESSES.functionx.WFX]: { coingeckoId: "tether", decimals: 6 }, }, gravity: { [ADDRESSES.null]: { coingeckoId: "g-token", decimals: 18 }, '0xbb859e225ac8fb6be1c7e38d87b767e95fef0ebd': { coingeckoId: "g-token", decimals: 18 }, '0xf6f832466Cd6C21967E0D954109403f36Bc8ceaA': { coingeckoId: "ethereum", decimals: 18 }, - '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': { coingeckoId: "usd-coin", decimals: 6 }, + [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, }, idex: { - '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': { coingeckoId: "usd-coin", decimals: 6 }, + [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, }, } diff --git a/projects/idex-v4/index.js b/projects/idex-v4/index.js index 39f5f6ca45..d515e069e2 100644 --- a/projects/idex-v4/index.js +++ b/projects/idex-v4/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { idex: { - tvl: sumTokensExport({ owner: '0xF0b08bd86f8479a96B78CfACeb619cfFeCc5FBb5', tokens: ['0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6']}), + tvl: sumTokensExport({ owner: '0xF0b08bd86f8479a96B78CfACeb619cfFeCc5FBb5', tokens: [ADDRESSES.rari.USDC_e]}), } } \ No newline at end of file diff --git a/projects/kalax/index.js b/projects/kalax/index.js index 49a4905a40..c6c22515cc 100644 --- a/projects/kalax/index.js +++ b/projects/kalax/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs") const blastKalax = "0x2F67F59b3629Bf24962290DB9edE0CD4127e606D" @@ -18,8 +19,8 @@ async function tvl(api) { pools .filter((i) => i.assets !== kalax) .forEach((i)=>{ - if(i.assets === '0x0000000000000000000000000000000000000001'){ - i.assets ='0x0000000000000000000000000000000000000000' + if(i.assets === ADDRESSES.linea.WETH_1){ + i.assets =ADDRESSES.null } api.add(i.assets, i.tvl) }) @@ -29,7 +30,7 @@ async function tvl(api) { } -const usdt = "0xf55BEC9cafDbE8730f096Aa55dad6D22d44099Df" +const usdt = ADDRESSES.scroll.USDT const scrollKalaLp = "0x4fc09BE6eB49764CcAE4e95Bd2B93f67a34c0188" async function staking(api) { let farms = api.chain === 'blast'?blastfarms:scrollFarms diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index 2f26628606..5aeb75e0c6 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -13,12 +13,12 @@ module.exports = { start: 1690971144, bsc: { tvl: sumTokensExport({ owners, tokens: [ ADDRESSES.bsc.USDT, ADDRESSES.ethereum.FDUSD, ADDRESSES.scroll.STONE, - '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', //WBNB + ADDRESSES.bsc.WBNB, //WBNB '0xba2ae424d960c26247dd6c32edc70b295c744c43', //DOGE - '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', //BTCB + ADDRESSES.bsc.BTCB, //BTCB '0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b',//slisBNB '0x0782b6d8c4551b9760e74c0545a9bcd90bdc41e5',//lisUSD - '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', //usdc + ADDRESSES.bsc.USDC, //usdc ], }) }, op_bnb: { @@ -26,29 +26,29 @@ module.exports = { ADDRESSES.op_bnb.USDT, ADDRESSES.base.DAI, //FDUSD ADDRESSES.optimism.WETH_1, //WBNB - '0x7c6b91d9be155a6db01f749217d76ff02a7227f2', //BTCB - '0xe7798f023fc62146e8aa1b36da45fb70855a77ea', //ETH + ADDRESSES.defiverse.USDC, //BTCB + ADDRESSES.defiverse.ETH, //ETH ] }) }, manta: { tvl: sumTokensExport({ owners: manta_owners, tokens: [ ADDRESSES.manta.USDT, manta_stone_token, manat_manta_token, '0x7746ef546d562b443ae4b4145541a3b1a3d75717', //vMANTA - '0xb73603c5d87fa094b7314c74ace2e64d165016fb', //USDC + ADDRESSES.manta.USDC, //USDC ] }) }, taiko: { tvl: sumTokensExport({ owners: taiko_owners, tokens: [ ADDRESSES.taiko.USDC, - '0x19e26b0638bf63aa9fa4d14c6baf8d52ebe86c5c', //USDC.e + ADDRESSES.taiko.USDC_e, //USDC.e ] }) }, bsquared: { tvl: sumTokensExport({ owners: bsquared_owners, tokens: [ ADDRESSES.bsquared.USDT, - '0xe544e8a38add9b1abf21922090445ba93f74b9e5', //USDC - '0x7537c1f80c9e157ed7afd93a494be3e1f04f1462', //BSTONE - '0x796e4d53067ff374b89b2ac101ce0c1f72ccaac2',//uBTC + ADDRESSES.bsquared.USDC, //USDC + ADDRESSES.bsquared.BSTONE, //BSTONE + ADDRESSES.bsquared.UBTC,//uBTC ] }) }, }; diff --git a/projects/lynx/index.js b/projects/lynx/index.js index f3216881ca..b1234d9e1e 100644 --- a/projects/lynx/index.js +++ b/projects/lynx/index.js @@ -26,7 +26,7 @@ const config = { tokenAndOwnerPair: [ [ // WFTM Token - "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + ADDRESSES.fantom.WFTM, // OFTChipAdapter (owner) "0x614aA983f54409D475aeC5D18120FECFD6320eF4" ], diff --git a/projects/oas-jumbo/index.js b/projects/oas-jumbo/index.js index 960c51ec36..7dc07a7ae8 100644 --- a/projects/oas-jumbo/index.js +++ b/projects/oas-jumbo/index.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const CONTRACT_ADDRESSES = { - environmentContract: "0x0000000000000000000000000000000000001000", // Environment contract address + environmentContract: ADDRESSES.findora.FRA, // Environment contract address stakesManagerContract: "0x0000000000000000000000000000000000001001", // Stakes manager contract address oasJumboStaking: "0x7e6347ddC55dF19B94C9FE893bf551CFc8C2208b", // OAS Jumbo staking contract address }; diff --git a/projects/okex/index.js b/projects/okex/index.js index 0c715e9c57..6ce916b78a 100644 --- a/projects/okex/index.js +++ b/projects/okex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { cexExports } = require('../helper/cex') const config = { diff --git a/projects/ondofinance/index.js b/projects/ondofinance/index.js index ba6b026d7c..62f1c3ce36 100644 --- a/projects/ondofinance/index.js +++ b/projects/ondofinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getTokenSupply } = require("../helper/solana"); const sui = require("../helper/chain/sui"); const { aQuery } = require("../helper/chain/aptos"); @@ -30,7 +31,7 @@ const config = { USDY: "0xcfea864b32833f157f042618bd845145256b1bf4c0da34a7013b76e42daa53cc", }, noble: { - USDY: "ausdy", + USDY: ADDRESSES.noble.USDY, }, arbitrum: { USDY: "0x35e050d3C0eC2d29D269a8EcEa763a183bDF9A9D", diff --git a/projects/pearl-v2/index.js b/projects/pearl-v2/index.js index cb27a24cc6..5119a191f7 100644 --- a/projects/pearl-v2/index.js +++ b/projects/pearl-v2/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { uniV3Export } = require('../helper/uniswapV3') const ownTokens = [ '0xaec9e50e3397f9ddc635c6c429c8c7eca418a143', - '0x4644066f535ead0cde82d209df78d94572fcbf14', + ADDRESSES.real.RWA, '0x25ea98ac87a38142561ea70143fd44c4772a16b6', ] diff --git a/projects/real-veRWA/index.js b/projects/real-veRWA/index.js index e86393a001..a7e76b780e 100644 --- a/projects/real-veRWA/index.js +++ b/projects/real-veRWA/index.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') -const RWAToken = '0x4644066f535Ead0cde82D209dF78d94572fCbf14' +const RWAToken = ADDRESSES.real.RWA const veRWA = '0xa7B4E29BdFf073641991b44B283FD77be9D7c0F4' module.exports = { diff --git a/projects/satori/index.js b/projects/satori/index.js index 585ac7c448..1181426e80 100644 --- a/projects/satori/index.js +++ b/projects/satori/index.js @@ -4,7 +4,7 @@ const { sumTokensExport } = require("../helper/unwrapLPs"); const USDT_TOKEN_CONTRACT = ADDRESSES.astarzk.USDT; const EZETH_BASE = ADDRESSES.blast.ezETH; const EZETH_LINEA = ADDRESSES.blast.ezETH; -const ZK = "0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E"; +const ZK = ADDRESSES.era.ZK; const WALLET_ADDR = [ "0x62e724cB4d6C6C7317e2FADe4A03001Fe7856940", "0xA59a2365D555b24491B19A5093D3c99b119c2aBb", diff --git a/projects/sigmao/index.js b/projects/sigmao/index.js index 01cf185e77..ac0acd04b5 100644 --- a/projects/sigmao/index.js +++ b/projects/sigmao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/sumTokens') module.exports = { diff --git a/projects/sigmausd/index.js b/projects/sigmausd/index.js index 81e46d3f51..e191e5297d 100644 --- a/projects/sigmausd/index.js +++ b/projects/sigmausd/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require('../helper/tokenMapping') const { sumTokensExport } = require('../helper/chain/ergo') diff --git a/projects/sparkswap/index.js b/projects/sparkswap/index.js index 154c1ac9e5..f1aa9de984 100644 --- a/projects/sparkswap/index.js +++ b/projects/sparkswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require("../helper/unknownTokens"); const { sumTokensExport, @@ -10,7 +11,7 @@ const pendleAbi = require("../pendle/abi.json"); const FACTORY = "0x955219A87eB0C6754fd247266af970F7d16906CD"; const SPARK_TOKEN = "0x6386704cD6f7A584EA9D23cccA66aF7EBA5a727e"; const SPARK_LP = "0x33208439e1B28B1d6fCfbB6334e9950027Ee3B52"; -const SDAI_TOKEN = "0x30FCB23A906493371b1721C8feb8815804808D74"; +const SDAI_TOKEN = ADDRESSES.pulse.sDAI; const SDAI_DAI_LP = "0xf32B9398a7277609772F328Fc2005D7DA5420E77"; const SDAI_SPARK_LP = "0x9095D464A29Abd1B840C1C5205FB602ae5b011FF"; const MASTERCHEF = "0x63c2a0083861F8C496A0A29BD8BA223E1180664e"; diff --git a/projects/treasury/bonsai.js b/projects/treasury/bonsai.js index 89a86a5df9..af5e372c30 100644 --- a/projects/treasury/bonsai.js +++ b/projects/treasury/bonsai.js @@ -20,14 +20,14 @@ module.exports = treasuryExports({ ADDRESSES.arbitrum.fsGLP, ADDRESSES.arbitrum.fGLP, ADDRESSES.arbitrum.USDC, // USDC.e - "0xaf88d065e77c8cc2239327c5edb3a432268e5831", // USDC + ADDRESSES.arbitrum.USDC_CIRCLE, // USDC ADDRESSES.arbitrum.USDT, ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.GMX, ADDRESSES.arbitrum.ARB, ADDRESSES.arbitrum.WBTC, "0xe4dddfe67e7164b0fe14e218d80dc4c08edc01cb", // KNC - "0xf97f4df75117a78c1a5a0dbb814af92458539fb4", // LINK + ADDRESSES.arbitrum.LINK, // LINK "0x56659245931cb6920e39c189d2a0e7dd0da2d57b", // IBEX "0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0", // UNI "0x55ff62567f09906a85183b866df84bf599a4bf70", // KROM diff --git a/projects/treasury/dexfinance.js b/projects/treasury/dexfinance.js index db92c5584a..91864983c8 100644 --- a/projects/treasury/dexfinance.js +++ b/projects/treasury/dexfinance.js @@ -56,7 +56,7 @@ module.exports = treasuryExports({ // tokens: [ // ADDRESSES.pulse.WETH, // ADDRESSES.ethereum.USDC, //usdc(fork) - // '0x30fcb23a906493371b1721c8feb8815804808d74', //sdai + // ADDRESSES.pulse.sDAI, //sdai // '0xaa2c47a35c1298795b5271490971ec4874c8e53d', //usdex // '0x6386704cd6f7a584ea9d23ccca66af7eba5a727e', //spark // ] diff --git a/projects/wanbridge.js b/projects/wanbridge.js index 7e116b6220..bd8235998a 100644 --- a/projects/wanbridge.js +++ b/projects/wanbridge.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('helper/coreAssets.json') const { get } = require("./helper/http"); let ret; async function getTvl() { @@ -28,7 +29,7 @@ const chainsMap = { tron: "tron", wan: "wanchain", xdc: "xdc", - ripple: "xrp", + ripple: ADDRESSES.ripple.XRP, // clover: "clover", // telos: "telos", }; diff --git a/projects/xlink/index.js b/projects/xlink/index.js index d0b73e3033..60d365746a 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -32,7 +32,7 @@ module.exports = { "0xcD0cb6AA811E1c8cD9A55EcB9Cc83f6a50Bed311", "0x13b72A19e221275D3d18ed4D9235F8F859626673", ], - tokens: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", ADDRESSES.null], + tokens: [ADDRESSES.ethereum.WBTC, ADDRESSES.null], }), }, bsc: { @@ -43,8 +43,8 @@ module.exports = { "0xFFda60ed91039Dd4dE20492934bC163e0F61e7f5", ], tokens: [ - "0x55d398326f99059fF775485246999027B3197955", - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BTCB, ], }), }, diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js index 6f6870d2dd..069894e46b 100644 --- a/projects/xrpl-dex/app.js +++ b/projects/xrpl-dex/app.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const rippleCodec = require("ripple-binary-codec"); const { PromisePool } = require("@supercharge/promise-pool"); const { getCache, setCache } = require("../helper/cache"); @@ -92,7 +93,7 @@ const parseReserve = (reserveData) => { if (!reserveData) return null; const reserveIsXrp = typeof reserveData === "string"; return { - currency: reserveIsXrp ? "XRP" : reserveData.currency, + currency: reserveIsXrp ? [ADDRESSES.ripple.XRP]: reserveData.currency, issuer: reserveIsXrp ? null : reserveData.issuer, amount: reserveIsXrp ? reserveData : reserveData.value, }; diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index e49f337192..b21905ccdb 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getCache, } = require("../helper/cache"); From 59337485bb74bb976a7425b8cb881b1a9014e7e7 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 9 Sep 2024 13:25:42 +0100 Subject: [PATCH 0303/1768] fix wanbridge (#11564) --- projects/wanbridge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/wanbridge.js b/projects/wanbridge.js index bd8235998a..352af11631 100644 --- a/projects/wanbridge.js +++ b/projects/wanbridge.js @@ -1,4 +1,4 @@ -const ADDRESSES = require('helper/coreAssets.json') +const ADDRESSES = require('./helper/coreAssets.json') const { get } = require("./helper/http"); let ret; async function getTvl() { From 4e123b7282b3b41117c5029c20b9963ab07a1d01 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:28:55 +0200 Subject: [PATCH 0304/1768] bugfix --- projects/deltatrade.js | 2 +- projects/dough-finance.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/deltatrade.js b/projects/deltatrade.js index ee27b8d882..bea7ad2566 100644 --- a/projects/deltatrade.js +++ b/projects/deltatrade.js @@ -1,4 +1,4 @@ -const ADDRESSES = require('helper/coreAssets.json') +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require('./helper/chain/near'); const GRID_CONTRACT_ID = 'grid.deltatrade.near'; diff --git a/projects/dough-finance.js b/projects/dough-finance.js index 2c3c8e3929..c2df644f5e 100644 --- a/projects/dough-finance.js +++ b/projects/dough-finance.js @@ -1,4 +1,4 @@ -const ADDRESSES = require('helper/coreAssets.json') +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens2 } = require("./helper/unwrapLPs") async function getVaults(api) { From 7a62f65c3bf143688e04d18cc3483de87e53c1c1 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:32:23 +0200 Subject: [PATCH 0305/1768] fix: Outdated SNS adapter (#11563) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/sns/index.js | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/projects/sns/index.js b/projects/sns/index.js index 345445aaaa..5cc53a5c9f 100644 --- a/projects/sns/index.js +++ b/projects/sns/index.js @@ -1,35 +1,19 @@ -const { get } = require('../helper/http') +const axios = require ("axios") -const SNS_URL = "https://sns-api.internetcomputer.org/api/v1/snses/" -const ICP_URL = "https://ledger-api.internetcomputer.org/accounts/" +const SNS_URL = "https://sns-api.internetcomputer.org/api/v1/snses" +const ICP_URL = "https://ledger-api.internetcomputer.org/accounts" async function tvl(api) { - let offset = 0; - const limit = 100; - var icp_balance = 0; - const a = true - while (a) { - let data = await get(SNS_URL + `?offset=${offset}&limit=${limit}&sort_by=name`); - let snses = data.data; - if (snses.length == undefined || snses.length == 0) { - break; - } + const { data } = await axios.get(SNS_URL) - for (let i = 0; i < snses.length; i++) { - let sns = snses[i]; - let root_canister_id = sns.root_canister_id; - let root_canister = await get( - SNS_URL + `${root_canister_id}`); - - let icp_ledger_treasury_accountidentifier = root_canister.icp_treasury_account; - let icp_ledger = await get( - ICP_URL + `${icp_ledger_treasury_accountidentifier}`); - icp_balance += parseInt(icp_ledger.balance); - } - offset += limit; + for (const sns of data.data) { + const root_canister_id = sns.root_canister_id + const root_canister = await axios.get(SNS_URL + `/${root_canister_id}`) + const icp_ledger_treasury_accountidentifier = root_canister.data.icp_treasury_account + const icp_ledger = await axios.get(ICP_URL + `/${icp_ledger_treasury_accountidentifier}`) + const icp_balance = parseInt(icp_ledger.data.balance) + api.addCGToken('internet-computer', icp_balance / 1e8) } - - api.addCGToken('internet-computer', icp_balance / 1e8) } module.exports = { From 59c7f155e37fbc03b124049c76a2752420d96657 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:36:45 +0200 Subject: [PATCH 0306/1768] feat: Adapter, ElectrikFinance (outdated) -> deadFrom (#11562) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/electrikfinance/index.js | 44 ++++++++++++++++++------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/projects/electrikfinance/index.js b/projects/electrikfinance/index.js index fbe4d16121..1af6ddc8ed 100644 --- a/projects/electrikfinance/index.js +++ b/projects/electrikfinance/index.js @@ -1,23 +1,31 @@ const { sumUnknownTokens } = require("../helper/unknownTokens"); const { getConfig } = require('../helper/cache') -const chain = "klaytn"; -const tokenAPI = "address:want" - module.exports = { - [chain]: { - tvl: async (api) => { - let { result: { pools } } = await getConfig('elektrik-finance', 'https://api.electrik.finance/api/status/pools'); - pools = Object.values(pools) - const vaults = []; - const tokens = []; - for (var i = 0; i < pools.length; i++) { - vaults.push(pools[i].earnedTokenAddress); - tokens.push(pools[i].tokenAddress); - } - const bals = await api.multiCall({ abi: 'uint256:balance', calls: vaults }) - api.addTokens(tokens, bals) - return sumUnknownTokens({ api, useDefaultCoreAssets: true, resolveLP: true, lps: tokens }) - } + klaytn: { + tvl: () => ({}) } -} \ No newline at end of file +} + +module.exports.deadFrom = '2023-01-01' + +// const chain = "klaytn"; +// const tokenAPI = "address:want" + +// module.exports = { +// [chain]: { +// tvl: async (api) => { +// let { result: { pools } } = await getConfig('elektrik-finance', 'https://api.electrik.finance/api/status/pools'); +// pools = Object.values(pools) +// const vaults = []; +// const tokens = []; +// for (var i = 0; i < pools.length; i++) { +// vaults.push(pools[i].earnedTokenAddress); +// tokens.push(pools[i].tokenAddress); +// } +// const bals = await api.multiCall({ abi: 'uint256:balance', calls: vaults }) +// api.addTokens(tokens, bals) +// return sumUnknownTokens({ api, useDefaultCoreAssets: true, resolveLP: true, lps: tokens }) +// } +// } +// } \ No newline at end of file From 8599f3932f4978b6b7945c950a62735de20eb5d8 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:37:12 +0200 Subject: [PATCH 0307/1768] Fix: Minswap Treasury (#11565) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/treasury/minswap.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/projects/treasury/minswap.js b/projects/treasury/minswap.js index ee314246df..4b8300c6f3 100644 --- a/projects/treasury/minswap.js +++ b/projects/treasury/minswap.js @@ -1,13 +1,15 @@ -const { get } = require('../helper/http'); +// https://minswap.org/analytics/dao-treasury +const { sumTokensExport} = require("../helper/chain/cardano"); + +const min_dao = 'addr1z9wdv59sq7zzy2l6gchq3247lz7ssfsxs45nj4njhwsp5uzj2c79gy9l76sdg0xwhd7r0c0kna0tycz4y5s6mlenh8pqzygnta' +const min_dao_hot = 'addr1q8zntywq3fldecrqk4vl593sznvj7483ejcajnavvh2qpsvftaax5f3wasl5m49rtjw5pen938vr7863w0lfz94h0lfqldx3pu' +const min_fee_dao = 'addr1qxymvaeg3306xyp6yk3mjdj7usp40x2e5cecsh75xw5tsczj2c79gy9l76sdg0xwhd7r0c0kna0tycz4y5s6mlenh8pqjx0th5' +const min_pol = 'addr1q9gxe8vx0kvv5g6gv4n5wmsxexjqsjftc599qqcp2vkmmwh7snv5yhw2qqvdev3c7wn6s3xhrnx25eg6zcqjxj9vrv2s0e38ze' +const min_ada_min_pol = 'addr1qx54hjkagnc7zanqkfjearg8nk2w303pgdyl2qm4hs2x8saxg62nrp8kp2mukmrr4pfyt4fpdyjp7dx8jxffs4gf2xcsx6uj7a' module.exports = { cardano: { tvl: () => ({}), - ownTokens: async () => { - const pol = await get("https://api-mainnet-prod.minswap.org/landing-page/pol-details"); - return { - "coingecko:cardano": parseInt(pol[0]["totalPOL"]["totalAdaWorth"]), - } - } - }, -}; + ownTokens: sumTokensExport({ owners: [min_dao, min_dao_hot, min_fee_dao, min_pol, min_ada_min_pol] }) + } +} From f43e9fe1788b0aa8ab266d5cef55ad19e0d37707 Mon Sep 17 00:00:00 2001 From: Bryan Cuccioli <842035+bcuccioli@users.noreply.github.com> Date: Mon, 9 Sep 2024 09:08:38 -0400 Subject: [PATCH 0308/1768] Add superstate-uscc adapter (#11538) Co-authored-by: Bryan Cuccioli Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/superstate-uscc/index.js | 14 ++++++++++++++ projects/superstate/index.js | 5 ++--- 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 projects/superstate-uscc/index.js diff --git a/projects/superstate-uscc/index.js b/projects/superstate-uscc/index.js new file mode 100644 index 0000000000..0fcfa509d6 --- /dev/null +++ b/projects/superstate-uscc/index.js @@ -0,0 +1,14 @@ +const USCC = "0x14d60e7fdc0d71d8611742720e4c50e7a974020c"; + +module.exports = { + methodology: "TVL corresponds to the total amount of USCC minted onchain, does not include Superstate book-entry AUM", + ethereum: { + tvl: async (api) => { + const totalSupplies = await api.multiCall({ + calls: [USCC], + abi: "erc20:totalSupply", + }); + api.addTokens([USCC], totalSupplies); + }, + }, +}; diff --git a/projects/superstate/index.js b/projects/superstate/index.js index 662cf7600e..d97ed45dc5 100644 --- a/projects/superstate/index.js +++ b/projects/superstate/index.js @@ -1,15 +1,14 @@ const USTB = "0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e"; -const USCC = "0x14d60e7fdc0d71d8611742720e4c50e7a974020c"; module.exports = { methodology: "TVL corresponds to the total amount of USTB & USCC minted onchain, does not include Superstate book-entry AUM", ethereum: { tvl: async (api) => { const totalSupplies = await api.multiCall({ - calls: [USTB, USCC], + calls: [USTB], abi: "erc20:totalSupply", }); - api.addTokens([USTB, USCC], totalSupplies); + api.addTokens([USTB], totalSupplies); }, }, }; From 8acf5f42ed1399c4a16be97e5814a775e7486753 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Sep 2024 21:43:07 +0200 Subject: [PATCH 0309/1768] update rebalance #11566 --- projects/rebalance/index.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/projects/rebalance/index.js b/projects/rebalance/index.js index e3a7ab1ac1..e3a1da99e3 100644 --- a/projects/rebalance/index.js +++ b/projects/rebalance/index.js @@ -1,13 +1,14 @@ -const { sumERC4626VaultsExport } = require('../helper/erc4626') +const { sumERC4626VaultsExport } = require('../helper/erc4626'); const config = { arbitrum: [ - '0x4DdbCB86FCa5B4678Bd132085C818b07cd5716D1', // rUSDT - '0xD430e22c3a0F8Ebd6813411084a5cb26937f6661', // rUSDC.e - '0x46cbC1397710e177810B84028F4bf6F8B75B6F71', // rWETH - '0x52952120EAd486EC7cdd4CA93EA13f2abA44cC20', // rFRAX - '0xD77B4AdfF67108f7Ea3155ce1fB67c5345ee89C8', // rDAI - ] -} + '0xCF86c768E5b8bcc823aC1D825F56f37c533d32F9', // rUSDT + '0x6eAFd6Ae0B766BAd90e9226627285685b2d702aB', // rUSDC + '0xa8aae282ab2e57B8E39ad2e70DA3566d315348A9', // rUSDC.e + '0xcd5357A4F48823ebC86D17205C12B0B268d292a7', // rWETH + '0x5A0F7b7Ea13eDee7AD76744c5A6b92163e51a99a', // rDAI + '0x3BCa6513BF284026b4237880b4e4D60cC94F686c', // rFRAX + ], +}; module.exports = { methodology: @@ -16,6 +17,8 @@ module.exports = { hallmarks: [[1712143874, 'Profitable vaults deployment']], }; -Object.keys(config).forEach(chain => { - module.exports[chain] = { tvl: sumERC4626VaultsExport({ vaults: config[chain], isOG4626: true, }) } -}) \ No newline at end of file +Object.keys(config).forEach((chain) => { + module.exports[chain] = { + tvl: sumERC4626VaultsExport({ vaults: config[chain], isOG4626: true }), + }; +}); \ No newline at end of file From a8853ea3d325c9387e04abfd60b264522f06c1f0 Mon Sep 17 00:00:00 2001 From: Akira <156126180+akiraonstarknet@users.noreply.github.com> Date: Tue, 10 Sep 2024 01:13:45 +0530 Subject: [PATCH 0310/1768] Update STRKFarm: Add ETH vault, Add Audit report (#11567) --- projects/strkfarm/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index e2f767cd6b..4468fef29b 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -24,6 +24,10 @@ const STRATEGIES = { address: "0x04937b58e05a3a2477402d1f74e66686f58a61a5070fcc6f694fb9a0b3bae422", token: ADDRESSES.starknet.USDC, // USDC Sensei zToken: '0x047ad51726d891f972e74e4ad858a261b43869f7126ce7436ee0b2529a98f486' + }, { + address: "0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250", + token: ADDRESSES.starknet.ETH, // ETH Sensei + zToken: '0x1b5bd713e72fdc5d63ffd83762f81297f6175a5e0a4771cdadbc1dd5fe72cb1' }] } From 841a3310c7aac1b8d5d165675f767b98917eb67b Mon Sep 17 00:00:00 2001 From: alec <75048567+ahorner2@users.noreply.github.com> Date: Mon, 9 Sep 2024 15:38:48 -0500 Subject: [PATCH 0311/1768] mTBILL price/TVL update (#11569) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/midas/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/midas/index.js b/projects/midas/index.js index bf220ae80c..69f0421fb7 100644 --- a/projects/midas/index.js +++ b/projects/midas/index.js @@ -1,12 +1,12 @@ async function tvl(api) { const MTBILL_TOKEN_CONTRACT = "0xDD629E5241CbC5919847783e6C96B2De4754e438"; - const mtbillSupply = await await api.call({ abi: "erc20:totalSupply", target: MTBILL_TOKEN_CONTRACT, }); + const mtbillSupply = await await api.call({ abi: "erc20:totalSupply", target: MTBILL_TOKEN_CONTRACT, }) const rate = await api.call({ target: "0x32d1463EB53b73C095625719Afa544D5426354cB", // IB01/USD abi: "function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)", }); - api.addCGToken('tether', (mtbillSupply / 1e18) * (rate.answer / 1e8)) + api.addCGToken("tether", (mtbillSupply / 1e18) * ((rate.answer / 1e8) / 100)) } const chains = ["ethereum"]; From 3c767bd16c513c21656a5ce12a76bc3785b3fb2a Mon Sep 17 00:00:00 2001 From: void <162591301+void-restack@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:13:17 +0530 Subject: [PATCH 0312/1768] Add Joule Finance Adapter (#11571) --- projects/joule/index.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 projects/joule/index.js diff --git a/projects/joule/index.js b/projects/joule/index.js new file mode 100644 index 0000000000..222310b285 --- /dev/null +++ b/projects/joule/index.js @@ -0,0 +1,35 @@ +const { getResource } = require("../helper/chain/aptos") + +const CONTRACT_ADDRESS = "0x2fe576faa841347a9b1b32c869685deb75a15e3f62dfe37cbd6d52cc403a16f6" + +async function getPoolsData() { + const res = await getResource("0x7f83b020b8ab60dbdc4208029fa6aa0804bf5a71eeaca63382d24622b9e6f647", `${CONTRACT_ADDRESS}::pool::PoolConfigsMap`) + + const poolConfigsMap = res.pool_configs_map.data; + + return poolConfigsMap.map(item => ({ + coin: item.key, + total_lend: item.value.total_lend, + total_borrow: item.value.total_borrow + })); +} + +module.exports = { + timetravel: false, + methodology: + "Aggregates TVL for all markets in Joule.", + aptos: { + tvl: async (api) => { + const marketsData = await getPoolsData() + marketsData.forEach(({coin, total_lend}) => { + api.add(coin, total_lend) + }) + }, + borrowed: async (api) => { + const marketsData = await getPoolsData() + marketsData.forEach(({coin, total_borrow}) => { + api.add(coin, total_borrow) + }) + }, + } +}; From 0ee9cf92d2e980338de1fa1ebc779910396c0570 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:23:24 +0200 Subject: [PATCH 0313/1768] track https://predict.fun tvl --- projects/predict-fun/index.js | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 projects/predict-fun/index.js diff --git a/projects/predict-fun/index.js b/projects/predict-fun/index.js new file mode 100644 index 0000000000..4568154ef3 --- /dev/null +++ b/projects/predict-fun/index.js @@ -0,0 +1,55 @@ +const { graphQuery } = require('../helper/http') +const ADDRESSES = require('../helper/coreAssets.json') + +const config = { + blast: 'https://graphql.predict.fun/graphql' +} + + +const query = (after) => `query { + categories (pagination: { + first: 100 + ${after ? `after: "${after}"` : ''} + }) { + totalCount + pageInfo { + hasNextPage + startCursor + endCursor + } + edges { + node { + id + slug + title + statistics { + liquidityValueUsd + volume24hUsd + volumeTotalUsd + } + } + } + } +} +` + +Object.keys(config).forEach(chain => { + const endpoint = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const categories = [] + let after = null + do { + const data = await graphQuery(endpoint, query(after)) + categories.push(...data.categories.edges) + if (data.categories.pageInfo.hasNextPage) { + after = data.pageInfo.endCursor + } + } while (after) + const usd = categories.reduce((tvl, category) => tvl + category.node.statistics.liquidityValueUsd, 0) + api.add(ADDRESSES.blast.USDB, usd * 1e18) + } + } +}) + +module.exports.timetravel = false \ No newline at end of file From 832e064fa62236df802c9e403368f8d184816b1d Mon Sep 17 00:00:00 2001 From: Aniket Sharma Date: Tue, 10 Sep 2024 14:27:42 +0530 Subject: [PATCH 0314/1768] feat: polynomial bridge tvl (#11573) --- projects/polynomial-bridge/index.js | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 projects/polynomial-bridge/index.js diff --git a/projects/polynomial-bridge/index.js b/projects/polynomial-bridge/index.js new file mode 100644 index 0000000000..4108f499df --- /dev/null +++ b/projects/polynomial-bridge/index.js @@ -0,0 +1,48 @@ +const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0xDE1617Ddb7C8A250A409D986930001985cfad76F", // usdc vault + "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", // sdai vault + "0xC6cfb996A7CFEB89813A68CD13942CD75553032b", // susde vault + "0x034cbb620d1e0e4C2E29845229bEAc57083b04eC" // eth bridge + ], + tokens: [ADDRESSES.ethereum.USDC, ADDRESSES.ethereum.SDAI, ADDRESSES.ethereum.sUSDe, nullAddress], + }), + }, + optimism: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0xc374967634133F5Ed1DF5050276e5B33986625D3", // usdc vault + ], + tokens: [ADDRESSES.optimism.USDC_CIRCLE], + }), + }, + base: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0x038bc0f438C6b46FaCc5C83475925F4Dc111d79F", // usdc vault + ], + tokens: [ADDRESSES.base.USDC], + }), + }, + arbitrum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", // usdc vault + ], + tokens: [ADDRESSES.arbitrum.USDC_CIRCLE], + }), + }, +}; From 3eccc959ebdd3f91d9d32a51fc299eebbb943ac7 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Sep 2024 11:08:07 +0200 Subject: [PATCH 0315/1768] track https://www.treehouse.finance #11572 --- projects/treehouse/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/treehouse/index.js diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js new file mode 100644 index 0000000000..3379c86c8c --- /dev/null +++ b/projects/treehouse/index.js @@ -0,0 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM + ethereum: { + tvl: sumTokensExport({ owner: '0x551d155760ae96050439AD24Ae98A96c765d761B', tokens: [ADDRESSES.ethereum.WSTETH], }), + } +} \ No newline at end of file From 1354f5978e258311d199a2ffde92f2a72bf32907 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 10 Sep 2024 13:46:25 +0100 Subject: [PATCH 0316/1768] wanbridge --- projects/wanbridge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/wanbridge.js b/projects/wanbridge.js index 352af11631..893855b6eb 100644 --- a/projects/wanbridge.js +++ b/projects/wanbridge.js @@ -38,7 +38,7 @@ Object.keys(chainsMap).map((chain) => { module.exports[chain] = { tvl: async () => { let ret = await getTvl(); - return { tether: ret[chainsMap[chain]] } + return { tether: ret[chainsMap[chain]] ?? 0 } }, }; }); From 1f47f7289fc0a2ce6fd6a15f2ed827301faf9c47 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:15:17 +0200 Subject: [PATCH 0317/1768] Compound forks refactor (#11582) --- projects/Astra/index.js | 2 +- projects/BroSwap/index.js | 2 +- projects/Chocoinu/{index.ts => index.js} | 2 +- projects/CirclePacific/index.js | 2 +- projects/DegenDex/index.js | 2 +- projects/Dexland/index.js | 2 +- projects/FirepotSwap/index.js | 2 +- projects/FlashLiquidity/index.js | 2 +- projects/FlitSwap/index.js | 1 - projects/Fountain-Protocol/index.js | 27 +- projects/HyperBlast/index.js | 1 - projects/Infernoswap/index.js | 3 +- projects/Inufair/index.js | 2 +- projects/LemonBlast/index.js | 2 +- projects/LuigiSwap/index.js | 2 - projects/OCP/index.js | 2 +- projects/Omnidrome/index.js | 2 +- projects/OpankeSwap/index.js | 1 - projects/OreSwap/index.js | 2 +- projects/PattieSwap/index.js | 2 +- projects/PoorExchange/index.js | 2 +- projects/Produs/index.js | 2 +- projects/PyreSwap/index.js | 2 +- projects/Scale/index.js | 2 +- projects/XDX/index.js | 1 - projects/agile/index.js | 2 +- projects/agora/index.js | 40 +-- projects/agus/index.js | 4 +- projects/akronswap/index.js | 2 +- projects/annex.js | 6 +- projects/antihero-fi/index.js | 3 +- projects/apeswap-lending/index.js | 20 +- projects/atlantisloans/index.js | 14 - projects/aurigami.js | 13 +- projects/bao-markets/index.js | 2 +- projects/baseswap/index.js | 2 +- projects/basilisk/index.js | 1 - projects/bastion/index.js | 20 +- projects/bearnfi/index.js | 71 +---- projects/bencu/index.js | 11 +- projects/benqi/index.js | 8 +- projects/biokript/index.js | 2 +- projects/bluemeteor/index.js | 2 +- projects/bodhfinance/index.js | 2 +- projects/bonedex/index.js | 2 +- projects/brainiac/index.js | 2 +- projects/bunicorn/index.js | 2 +- projects/bwswap/index.js | 2 +- projects/canto-lending/index.js | 3 +- projects/cashcow/index.js | 1 - projects/ceto-swap/index.js | 2 +- projects/channels/index.js | 10 +- projects/chee-finance/index.js | 10 +- projects/chiliswap/index.js | 2 +- projects/chilizswap/index.js | 1 - projects/chimeradex/index.js | 1 - projects/citadelswap/index.js | 2 +- projects/coffeefi/index.js | 2 +- projects/coincollect/index.js | 2 +- projects/colony/index.js | 1 - projects/compound-onchain/index.js | 138 +-------- projects/compound-v1/index.js | 62 +--- projects/cookiebase/index.js | 2 +- projects/coslend/index.js | 12 +- projects/cozy/index.js | 16 +- projects/cream/index.js | 9 +- projects/creamswap/abi.json | 7 - projects/creamswap/index.js | 189 +----------- projects/creditum/abi.json | 3 - projects/creditum/helper.js | 51 ---- projects/creditum/index.js | 42 ++- projects/crolend/index.js | 5 +- projects/cuanswap/index.js | 2 +- projects/cubiswap/index.js | 2 +- projects/cyberblast-v2/index.js | 2 +- projects/dalmatiandex/index.js | 2 +- projects/damm-finance/index.js | 14 +- projects/darkauto/abi.json | 5 - projects/darkauto/index.js | 40 ++- projects/darkauto/utils.js | 125 -------- projects/direct-exchange/index.js | 2 +- projects/dogswap/index.js | 2 +- projects/donaswap-v2/index.js | 2 +- projects/drachma/index.js | 5 +- projects/dynastyswap-xyz/index.js | 2 +- projects/dyson/index.js | 1 + projects/echodex/index.js | 2 +- projects/energondex/index.js | 2 +- projects/esper-finance/index.js | 2 +- projects/ezkalibur/index.js | 2 +- projects/fedex/index.js | 1 - projects/fenrirfinance/index.js | 12 +- projects/filda/abi.json | 9 - projects/filda/index.js | 150 +--------- projects/flashpulse/index.js | 2 +- projects/fluxfinance/index.js | 2 +- projects/fortress-lending/index.js | 3 +- projects/fourdex/index.js | 1 - projects/fusefi-lending/index.js | 24 +- projects/galador-io/index.js | 2 +- projects/ghost-ex/index.js | 1 - projects/goldbank/index.js | 2 +- projects/helper/cache/compound.js | 10 +- projects/helper/compound.js | 352 +++-------------------- projects/helper/tokenMapping.js | 21 +- projects/helper/utils.js | 3 +- projects/hexaswap/index.js | 1 - projects/hope-swap/index.js | 2 +- projects/huckleberry-lending/index.js | 15 +- projects/hundredfinance/index.js | 80 +----- projects/iceswap/index.js | 2 +- projects/infusion/index.js | 2 +- projects/ironbank/index.js | 19 +- projects/ironfinance/index.js | 16 +- projects/issuaa/index.js | 2 +- projects/ixswap/index.js | 2 +- projects/jadeswap/index.js | 1 - projects/jetfuelfinance/index.js | 2 +- projects/jiblend/index.js | 1 - projects/jumpdefi/index.js | 2 +- projects/kapinus/index.js | 1 - projects/kewl/index.js | 1 - projects/kinetix-v2/index.js | 2 - projects/klend/index.js | 94 +++--- projects/knightdex/index.js | 2 +- projects/kokomo/index.js | 7 +- projects/lendexe/index.js | 3 +- projects/lendoraprotocol/index.js | 1 - projects/lineabank/index.js | 4 +- projects/linehub-v2/index.js | 1 - projects/manxswap/index.js | 1 - projects/mare-finance-v2/index.js | 2 +- projects/mare-finance/index.js | 2 +- projects/midas-capital/index.js | 41 +-- projects/milkyway/index.js | 2 +- projects/mimas-finance/index.js | 2 - projects/mindgames/index.js | 2 +- projects/mobydex/index.js | 1 - projects/moonswap/index.js | 2 +- projects/moonswap/onchain.js | 112 -------- projects/moonwell-apollo/index.js | 18 +- projects/moonwell/index.js | 33 +-- projects/mversex/index.js | 2 +- projects/nanoswap/index.js | 2 - projects/neku/index.js | 11 +- projects/nexon/index.js | 9 +- projects/novation/index.js | 2 +- projects/olafinance/index.js | 14 +- projects/onsenswap/index.js | 1 - projects/opbanana/index.js | 2 +- projects/orbiter-one/index.js | 1 - projects/paperdao/index.js | 2 +- projects/papyrusswap/index.js | 2 +- projects/paxo-finance/index.js | 8 +- projects/pepedex/index.js | 1 - projects/percent/index.js | 28 +- projects/pheasantswap/index.js | 2 +- projects/pixelswap/index.js | 3 +- projects/planet-green/index.js | 7 - projects/plantbaseswap/index.js | 2 +- projects/pulserate/index.js | 1 - projects/pyswap/index.js | 2 +- projects/quantoswap/index.js | 2 +- projects/quickswap-lending/index.js | 2 +- projects/quillswap/index.js | 2 +- projects/ram.js | 10 +- projects/rari/api.js | 11 - projects/rari/index.js | 180 ++---------- projects/rikkei-finance/index.js | 13 +- projects/rockswap/index.js | 2 +- projects/sanctuary/index.js | 2 +- projects/scream/index.js | 18 +- projects/scribeswap/index.js | 2 +- projects/scrollswap/index.js | 2 +- projects/scrollswapfinance/index.js | 2 +- projects/sharelock/index.js | 2 +- projects/sharkswap-finance/index.js | 2 +- projects/shekelswap/index.js | 2 +- projects/shibbex/index.js | 2 +- projects/sohei/index.js | 3 +- projects/solidblast/index.js | 1 - projects/sparkdex-v2/index.js | 1 - projects/spiritswap-lending/index.js | 16 +- projects/strike/index.js | 7 +- projects/swirllend/index.js | 3 +- projects/tachyswap/index.js | 1 - projects/taffy/index.js | 2 +- projects/tashi/index.js | 3 +- projects/tender-finance/index.js | 4 +- projects/torches/index.js | 5 +- projects/traderjoe-lend/index.js | 27 +- projects/tranquil/index.js | 132 +-------- projects/treasury/benqi.js | 21 +- projects/tropicalswap/index.js | 2 +- projects/tropykus/index.js | 4 +- projects/unclesam.js | 7 +- projects/unfederalreserve/index.js | 6 +- projects/usdfi-lending/index.js | 2 +- projects/vee-finance/index.js | 48 ++-- projects/venus-isolated-pools/index.js | 4 +- projects/venus.js | 13 +- projects/vivacity/index.js | 2 +- projects/welnance/index.js | 11 +- projects/wemix-lend/index.js | 4 +- projects/zkfairswap/index.js | 2 +- projects/zkfinance/index.js | 1 - 206 files changed, 538 insertions(+), 2320 deletions(-) rename projects/Chocoinu/{index.ts => index.js} (70%) delete mode 100644 projects/creamswap/abi.json delete mode 100644 projects/creditum/abi.json delete mode 100644 projects/creditum/helper.js delete mode 100644 projects/darkauto/abi.json delete mode 100644 projects/darkauto/utils.js delete mode 100644 projects/filda/abi.json delete mode 100644 projects/moonswap/onchain.js delete mode 100644 projects/rari/api.js diff --git a/projects/Astra/index.js b/projects/Astra/index.js index 49a217f9d9..27d31e093f 100644 --- a/projects/Astra/index.js +++ b/projects/Astra/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const FACTORY = "0x2b6852CeDEF193ece9814Ee99BE4A4Df7F463557" // This factory is on AirDAO Mainnet (Chain Id: 16718) -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true, }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, }) module.exports = { misrepresentedTokens: true, diff --git a/projects/BroSwap/index.js b/projects/BroSwap/index.js index d2d87c88ec..347f9bc190 100644 --- a/projects/BroSwap/index.js +++ b/projects/BroSwap/index.js @@ -3,6 +3,6 @@ const { getUniTVL, } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, core: { - tvl: getUniTVL({ factory: '0x8edF7B8411b2e5dB740dbbf949E011e59fc7980a', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x8edF7B8411b2e5dB740dbbf949E011e59fc7980a', useDefaultCoreAssets: true, }), }, }; diff --git a/projects/Chocoinu/index.ts b/projects/Chocoinu/index.js similarity index 70% rename from projects/Chocoinu/index.ts rename to projects/Chocoinu/index.js index 67d71cfa09..ee0967d634 100644 --- a/projects/Chocoinu/index.ts +++ b/projects/Chocoinu/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - avax: { tvl: getUniTVL({ factory: '0x49a5044268A54467a94905d1458A88413695afc1', useDefaultCoreAssets: true, fetchBalances: true, }), }, + avax: { tvl: getUniTVL({ factory: '0x49a5044268A54467a94905d1458A88413695afc1', useDefaultCoreAssets: true,}), }, } diff --git a/projects/CirclePacific/index.js b/projects/CirclePacific/index.js index be017a1214..b27a255fac 100644 --- a/projects/CirclePacific/index.js +++ b/projects/CirclePacific/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - manta: { tvl: getUniTVL({ factory: '0xD8c3DBE9C3953Fda5e4573533e662C58A37E1455', useDefaultCoreAssets: true, fetchBalances: true, }), }, + manta: { tvl: getUniTVL({ factory: '0xD8c3DBE9C3953Fda5e4573533e662C58A37E1455', useDefaultCoreAssets: true, }), }, } diff --git a/projects/DegenDex/index.js b/projects/DegenDex/index.js index 7cb423ed3c..03afaec1d9 100644 --- a/projects/DegenDex/index.js +++ b/projects/DegenDex/index.js @@ -10,6 +10,6 @@ module.exports = { Object.keys(config).forEach(chain => { module.exports[chain] = { - tvl: getUniTVL({ factory: config[chain], useDefaultCoreAssets: true, fetchBalances: true, }) + tvl: getUniTVL({ factory: config[chain], useDefaultCoreAssets: true,}) } }) diff --git a/projects/Dexland/index.js b/projects/Dexland/index.js index 0446297126..ac7e28d9f1 100644 --- a/projects/Dexland/index.js +++ b/projects/Dexland/index.js @@ -3,6 +3,6 @@ const { getUniTVL, } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, core: { - tvl: getUniTVL({ factory: '0x3D6Cb82318f8c5DAAA9498a379D047a369c1E4aA', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x3D6Cb82318f8c5DAAA9498a379D047a369c1E4aA', useDefaultCoreAssets: true, }), }, }; diff --git a/projects/FirepotSwap/index.js b/projects/FirepotSwap/index.js index 1a845539f4..185f18a3c3 100644 --- a/projects/FirepotSwap/index.js +++ b/projects/FirepotSwap/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const FACTORY = "0xe63Cf585Dae8273A5e37AfF6da2f823FBf3Eb5BE" // This factory is on AirDAO Mainnet (Chain Id: 16718) -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true, }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, }) module.exports = { misrepresentedTokens: true, diff --git a/projects/FlashLiquidity/index.js b/projects/FlashLiquidity/index.js index 54711fd727..c2094aa267 100644 --- a/projects/FlashLiquidity/index.js +++ b/projects/FlashLiquidity/index.js @@ -1,7 +1,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); const factory = "0x6e553d5f028bD747a27E138FA3109570081A23aE" -const tvl = getUniTVL({ factory, useDefaultCoreAssets: true, fetchBalances: true, }) +const tvl = getUniTVL({ factory, useDefaultCoreAssets: true, }) module.exports = { misrepresentedTokens: true, diff --git a/projects/FlitSwap/index.js b/projects/FlitSwap/index.js index f72478cc59..dc0b84a270 100644 --- a/projects/FlitSwap/index.js +++ b/projects/FlitSwap/index.js @@ -4,7 +4,6 @@ module.exports = { misrepresentedTokens: true, op_bnb: { tvl: getUniTVL({ - fetchBalances: true, useDefaultCoreAssets: true, factory: '0x243f0218EF4cB8FC922ddd6d44e2DdE5b95DCa89', }) diff --git a/projects/Fountain-Protocol/index.js b/projects/Fountain-Protocol/index.js index 391f1c2ba9..7c44d2f60c 100644 --- a/projects/Fountain-Protocol/index.js +++ b/projects/Fountain-Protocol/index.js @@ -1,23 +1,14 @@ -const {usdCompoundExports} = require('../helper/compound'); -const sdk = require("@defillama/sdk"); +const {compoundExports2} = require('../helper/compound'); +const { mergeExports } = require('../helper/utils'); const unitroller_classic_oasis = '0xA7684aE7e07Dac91113900342b3ef25B9Fd1D841'; -const ftoken_classic_oasis = '0xD7d588bAbFb99E82Cd6dd0cA7677A5599AA678B5'; - const unitroller_usd_oasis = '0x1C0C30795802Bf2B3232a824f41629BbBCF63127'; -const ftoken_usd_oasis ='0x2552707D66C102c12b0f8284824F80e1299cB6B7'; - const unitroller_lpt_oasis = '0x7c4d0c834701C6E7F57b8c1424d30aDC46eA0840'; -const ftoken_lpt_oasis ='0x63f1Fe2E1da490611FC16E4a5d92b7ec7d0911a9'; - -const classic_lending = usdCompoundExports(unitroller_classic_oasis, "oasis", ftoken_classic_oasis) -const stable_lending = usdCompoundExports(unitroller_usd_oasis, "oasis", ftoken_usd_oasis) -const lpt_lending = usdCompoundExports(unitroller_lpt_oasis, "oasis", ftoken_lpt_oasis) -module.exports={ - oasis:{ - tvl: sdk.util.sumChainTvls([classic_lending.tvl, stable_lending.tvl, lpt_lending.tvl]), - borrowed: sdk.util.sumChainTvls([classic_lending.borrowed, stable_lending.borrowed, lpt_lending.borrowed]) - }, - methodology: "TVL is comprised of tokens deposited to the protocol as collateral from serveral pools, similar to Compound Finance and the borrowed tokens are not counted as TVL. ", -}; +module.exports= mergeExports([ + [unitroller_classic_oasis, '0xd7d588babfb99e82cd6dd0ca7677a5599aa678b5'], + [unitroller_usd_oasis], + [unitroller_lpt_oasis, '0x63f1fe2e1da490611fc16e4a5d92b7ec7d0911a9'], +].map( ([comptroller, cether]) => ({ + oasis: compoundExports2({ comptroller, cether, }), +}))) \ No newline at end of file diff --git a/projects/HyperBlast/index.js b/projects/HyperBlast/index.js index be608acd72..0a8d4b1656 100644 --- a/projects/HyperBlast/index.js +++ b/projects/HyperBlast/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: '0xD97fFc2041a8aB8f6bc4aeE7eE8ECA485381D088', useDefaultCoreAssets: true, - fetchBalances: true, }), }, } \ No newline at end of file diff --git a/projects/Infernoswap/index.js b/projects/Infernoswap/index.js index 7150a5b11a..27c48287e2 100644 --- a/projects/Infernoswap/index.js +++ b/projects/Infernoswap/index.js @@ -1,4 +1,5 @@ const { uniTvlExport } = require('../helper/unknownTokens'); module.exports.hallmarks = [[1703808000, "Rug Pull"]] -module.exports = uniTvlExport('beam', '0x671235E91df0A21F319260F9e93Fc459519E163C', { fetchBalances: true}) \ No newline at end of file +module.exports = uniTvlExport('beam', '0x671235E91df0A21F319260F9e93Fc459519E163C', { fetchBalances: true}) // lies about token balance +module.exports.deadFrom = 1703808000 \ No newline at end of file diff --git a/projects/Inufair/index.js b/projects/Inufair/index.js index d598957130..24c851862e 100644 --- a/projects/Inufair/index.js +++ b/projects/Inufair/index.js @@ -1,4 +1,4 @@ const { uniTvlExport } = require('../helper/unknownTokens'); module.exports.hallmarks=[[1705708800,"Rug Pull"]]; -module.exports = uniTvlExport('zkfair', '0x3582Ccde3F786229CE6Dbd88c5aDb86bF64DAA31', { fetchBalances: true, }) +module.exports = uniTvlExport('zkfair', '0x3582Ccde3F786229CE6Dbd88c5aDb86bF64DAA31') diff --git a/projects/LemonBlast/index.js b/projects/LemonBlast/index.js index 018a1e7110..937330fcee 100644 --- a/projects/LemonBlast/index.js +++ b/projects/LemonBlast/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - blast: { tvl: getUniTVL({ factory: '0x31329BcDC90faD4d65764ccf91f833ec1d5fB5A4', useDefaultCoreAssets: true, fetchBalances: true, }), }, + blast: { tvl: getUniTVL({ factory: '0x31329BcDC90faD4d65764ccf91f833ec1d5fB5A4', useDefaultCoreAssets: true,}), }, } diff --git a/projects/LuigiSwap/index.js b/projects/LuigiSwap/index.js index e510d69846..cbe4b40e00 100644 --- a/projects/LuigiSwap/index.js +++ b/projects/LuigiSwap/index.js @@ -6,14 +6,12 @@ module.exports = { tvl: getUniTVL({ factory: "0x0dAe6d22182c20AB9150a4DCB3160591Dc41027a", useDefaultCoreAssets: true, - fetchBalances: true, }), }, scroll: { tvl: getUniTVL({ factory: "0x0dAe6d22182c20AB9150a4DCB3160591Dc41027a", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/OCP/index.js b/projects/OCP/index.js index 745ef6b4d6..4bde384bb6 100644 --- a/projects/OCP/index.js +++ b/projects/OCP/index.js @@ -1,7 +1,7 @@ const { compoundExports } = require('../helper/compound') module.exports = { - bsc: compoundExports('0xc001c415b7e78ea4a3edf165d8f44b70391f8c3c', 'bsc', undefined, undefined, undefined, undefined, { blacklistedTokens: ['0x3c70260eee0a2bfc4b375feb810325801f289fbd', '0x5801d0e1c7d977d78e4890880b8e579eb4943276']}), + bsc: compoundExports('0xc001c415b7e78ea4a3edf165d8f44b70391f8c3c', undefined, undefined, { blacklistedTokens: ['0x3c70260eee0a2bfc4b375feb810325801f289fbd', '0x5801d0e1c7d977d78e4890880b8e579eb4943276']}), hallmarks: [ [Math.floor(new Date('2022-02-14')/1e3), 'Project abandoned by the team'], ], diff --git a/projects/Omnidrome/index.js b/projects/Omnidrome/index.js index f5fc988682..79149493ce 100644 --- a/projects/Omnidrome/index.js +++ b/projects/Omnidrome/index.js @@ -6,6 +6,6 @@ module.exports = { tvl: uniTvlExport("0x769d1BcB5FDf30F5a9D19f1ab8A3cF8b60a6e855", undefined, undefined, { allPairsLength: 'uint256:allPoolsLength', allPairs: 'function allPools(uint256) view returns (address)', - }, { fetchBalances: true, useDefaultCoreAssets: true, hasStablePools: true, }), + }, { useDefaultCoreAssets: true, hasStablePools: true, }), }, } diff --git a/projects/OpankeSwap/index.js b/projects/OpankeSwap/index.js index a523d98fdf..5c73708b24 100644 --- a/projects/OpankeSwap/index.js +++ b/projects/OpankeSwap/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: "0x4523A7f5414bAc9BfbDfc6eF0932Bf580C3cf9f1", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/OreSwap/index.js b/projects/OreSwap/index.js index f2bd8b4d59..ddf01264a4 100644 --- a/projects/OreSwap/index.js +++ b/projects/OreSwap/index.js @@ -3,6 +3,6 @@ const { getUniTVL, } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, core: { - tvl: getUniTVL({ factory: '0xbA862e0B955c612EEd514E722c84F1E70962457e', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0xbA862e0B955c612EEd514E722c84F1E70962457e', useDefaultCoreAssets: true, }), }, }; diff --git a/projects/PattieSwap/index.js b/projects/PattieSwap/index.js index c5c5a6d69e..118acef1dd 100644 --- a/projects/PattieSwap/index.js +++ b/projects/PattieSwap/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - bsc: { tvl: getUniTVL({ factory: '0x71f6a913b317d2BF0Bf51Fd48d90e4cC6e62C4Dd', useDefaultCoreAssets: true, fetchBalances: true, }), }, + bsc: { tvl: getUniTVL({ factory: '0x71f6a913b317d2BF0Bf51Fd48d90e4cC6e62C4Dd', useDefaultCoreAssets: true, }), }, } diff --git a/projects/PoorExchange/index.js b/projects/PoorExchange/index.js index 2a8e7f52a3..e9140ed148 100644 --- a/projects/PoorExchange/index.js +++ b/projects/PoorExchange/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('arbitrum', '0x9fA0988D9e4b6362e0aaA02D1A09196a78c177e1', { fetchBalances: true, }) +module.exports = uniTvlExport('arbitrum', '0x9fA0988D9e4b6362e0aaA02D1A09196a78c177e1') diff --git a/projects/Produs/index.js b/projects/Produs/index.js index be8684fb5c..ab90dd59a9 100644 --- a/projects/Produs/index.js +++ b/projects/Produs/index.js @@ -3,6 +3,6 @@ const { getUniTVL, } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, bsc: { - tvl: getUniTVL({ factory: '0x8ae5527706446943cBA8589313EC217a4a7288a4', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x8ae5527706446943cBA8589313EC217a4a7288a4', useDefaultCoreAssets: true, }), }, }; diff --git a/projects/PyreSwap/index.js b/projects/PyreSwap/index.js index bd1797bd0e..3fb46e898b 100644 --- a/projects/PyreSwap/index.js +++ b/projects/PyreSwap/index.js @@ -6,6 +6,6 @@ module.exports = { ['fantom', 'bsc', 'avax'].forEach(chain => { module.exports[chain] = { - tvl: getUniTVL({ factory: '0x045d720873f0260e23da812501a7c5930e510aa4', useDefaultCoreAssets: true, fetchBalances: true, }) + tvl: getUniTVL({ factory: '0x045d720873f0260e23da812501a7c5930e510aa4', useDefaultCoreAssets: true, }) } }) \ No newline at end of file diff --git a/projects/Scale/index.js b/projects/Scale/index.js index 2b179553ea..ff0a304401 100644 --- a/projects/Scale/index.js +++ b/projects/Scale/index.js @@ -4,7 +4,7 @@ const { staking } = require('../helper/staking') module.exports = { misrepresentedTokens: true, base:{ - tvl: uniTvlExport("0xEd8db60aCc29e14bC867a497D94ca6e3CeB5eC04", "base", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: uniTvlExport("0xEd8db60aCc29e14bC867a497D94ca6e3CeB5eC04", "base", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: true, }), staking: staking("0x28c9c71c776a1203000b56c0cca48bef1cd51c53", "0x54016a4848a38f257b6e96331f7404073fd9c32c"), }, } diff --git a/projects/XDX/index.js b/projects/XDX/index.js index 388e2f70dd..5bcc175f7e 100644 --- a/projects/XDX/index.js +++ b/projects/XDX/index.js @@ -4,7 +4,6 @@ module.exports = { misrepresentedTokens: true, blast: { tvl: getUniTVL({ - fetchBalances: true, useDefaultCoreAssets: true, factory: '0xF55dE36072beCebF162d2d54C49964f3b0683711', }) diff --git a/projects/agile/index.js b/projects/agile/index.js index 49d534e3ce..b23fdb056f 100644 --- a/projects/agile/index.js +++ b/projects/agile/index.js @@ -4,7 +4,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); const unitroller = '0x643dc7C5105d1a3147Bd9524DFC3c5831a373F1e' -const lendingMarket = compoundExports(unitroller, "cronos", "0x2e909694B362c2FcA3C8168613bd47842245504B", "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", undefined, undefined, { +const lendingMarket = compoundExports(unitroller, "0x2e909694B362c2FcA3C8168613bd47842245504B", "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", { blacklistedTokens: [ '0xa4434afeae0decb9820d906bf01b13291d00651a', ] diff --git a/projects/agora/index.js b/projects/agora/index.js index 60c8624464..5a5a0e902b 100644 --- a/projects/agora/index.js +++ b/projects/agora/index.js @@ -1,43 +1,13 @@ -const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { compoundExports, methodology, } = require("../helper/compound"); const { getUniTVL } = require('../helper/unknownTokens') const factory = '0x3c4063B964B1b3bF229315fCc4df61a694B0aE84' -const metis = ADDRESSES.metis.Metis -const agora = '0x0Ed0Ca6872073E02cd3aE005BaF04bA43BE947fA' -const { tvl: agoraTvl, } = compoundExports( - "0x3fe29D7412aCDade27e21f55a65a7ddcCE23d9B3", - "metis", - "0xcFd482DcE13cA1d27834D381AF1b570E9E6C6810", - metis, -); - -const { tvl: agoraPlusTvl, } = compoundExports( - "0x92DcecEaF4c0fDA373899FEea00032E8E8Da58Da", - "metis", - "0xE85A1ae1A2A21135c49ADEd398D3FD5Ed032B28e", - metis, - undefined, - symbol => symbol.indexOf('appuffNetswap') > -1 -); - -const { tvl: agoraStakeTvl, } = compoundExports( - "0xb36DF0773AbD23081516F54f9dbB9a99Ec27dbB0", - "metis", - "0xc3034143816398d37Ec9447c9CA17c407e96Dc12", - metis, - undefined, -); - -const { tvl: agoraFarmTvl, } = compoundExports( - "0xEC1A06f320E6e295Ab6892BB4e0f9e29c712F11F", - "metis", - "0x13Cb104a1D94A89a260b27DfAAB07C862da622E5", - metis, - undefined, -); +const { tvl: agoraTvl, } = compoundExports("0x3fe29D7412aCDade27e21f55a65a7ddcCE23d9B3", "0xcFd482DcE13cA1d27834D381AF1b570E9E6C6810",); +const { tvl: agoraPlusTvl, } = compoundExports("0x92DcecEaF4c0fDA373899FEea00032E8E8Da58Da", "0xE85A1ae1A2A21135c49ADEd398D3FD5Ed032B28e",); +const { tvl: agoraStakeTvl, } = compoundExports("0xb36DF0773AbD23081516F54f9dbB9a99Ec27dbB0", "0xc3034143816398d37Ec9447c9CA17c407e96Dc12",); +const { tvl: agoraFarmTvl, } = compoundExports("0xEC1A06f320E6e295Ab6892BB4e0f9e29c712F11F", "0x13Cb104a1D94A89a260b27DfAAB07C862da622E5",); const chainTvl = getUniTVL({ factory, useDefaultCoreAssets: true, }) @@ -49,6 +19,6 @@ module.exports = { misrepresentedTokens: true, metis: { tvl: sdk.util.sumChainTvls([chainTvl, agoraTvl, agoraPlusTvl, agoraFarmTvl, agoraStakeTvl]), - borrowed: ()=>({}), + borrowed: () => ({}), }, }; diff --git a/projects/agus/index.js b/projects/agus/index.js index 66d9c57c49..dfb8d1e49a 100644 --- a/projects/agus/index.js +++ b/projects/agus/index.js @@ -3,9 +3,9 @@ const { getUniTVL, } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, bsc: { - tvl: getUniTVL({ factory: '0x1aEa6414e7F7A9581Ce53385b2902c59b34D4a94', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x1aEa6414e7F7A9581Ce53385b2902c59b34D4a94', useDefaultCoreAssets: true,}), }, core: { - tvl: getUniTVL({ factory: '0x1aEa6414e7F7A9581Ce53385b2902c59b34D4a94', useDefaultCoreAssets: true, fetchBalances: true, }) + tvl: getUniTVL({ factory: '0x1aEa6414e7F7A9581Ce53385b2902c59b34D4a94', useDefaultCoreAssets: true,}) }, }; diff --git a/projects/akronswap/index.js b/projects/akronswap/index.js index ed0555999c..b309ff8589 100644 --- a/projects/akronswap/index.js +++ b/projects/akronswap/index.js @@ -1,6 +1,6 @@ const { getUniTVL } = require('../helper/unknownTokens'); -const tvl = getUniTVL({ factory: '0xAf39606bec181887951Ab6912Ac7EA216Bd6E4B4', useDefaultCoreAssets: true, fetchBalances: true, }) +const tvl = getUniTVL({ factory: '0xAf39606bec181887951Ab6912Ac7EA216Bd6E4B4', useDefaultCoreAssets: true, }) module.exports = { misrepresentedTokens: true, diff --git a/projects/annex.js b/projects/annex.js index 140683c71b..3732be7160 100644 --- a/projects/annex.js +++ b/projects/annex.js @@ -12,7 +12,7 @@ const cKAVA = "0x5642Aa2fC7028a203C689Bf21c1a92861D8C449B"; module.exports = { methodology: 'TVL is comprised of tokens deposited to the protocol as collateral, similar to Compound Finance and other lending protocols the borrowed tokens are not counted as TVL. Data is pull from the Annex API "https://api.annex.finance/api/v1/governance/annex".', - bsc: compoundExports("0xb13026db8aafa2fd6d23355533dccccbd4442f4c", "bsc", cBNB, wBNB,), - cronos: compoundExports("0xbC1f72e751DE303Ff545D2E348fef2E84D493645", "cronos", cCRO, wCRO,), - kava: compoundExports("0xFb6FE7d66E55831b7e108B77D11b8e4d479c2986", "kava", cKAVA, wKAVA,), + bsc: compoundExports("0xb13026db8aafa2fd6d23355533dccccbd4442f4c", cBNB,), + cronos: compoundExports("0xbC1f72e751DE303Ff545D2E348fef2E84D493645", cCRO,), + kava: compoundExports("0xFb6FE7d66E55831b7e108B77D11b8e4d479c2986", cKAVA,), }; // node test.js projects/annex.js \ No newline at end of file diff --git a/projects/antihero-fi/index.js b/projects/antihero-fi/index.js index 1973a1222c..6ea44c6fcd 100644 --- a/projects/antihero-fi/index.js +++ b/projects/antihero-fi/index.js @@ -7,7 +7,7 @@ module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", arbitrum: { - ...compoundExports(unitroller, "arbitrum"), + ...compoundExports(unitroller), staking: staking( [ "0x2117E6449b3C50B70705bF1566383b1a94bd5192", @@ -15,4 +15,5 @@ module.exports = { "0x9d15bb4351E95A3FE213E48B410BA1aB7CF8Ce45" ), }, + deadFrom: "2023-08-27" }; \ No newline at end of file diff --git a/projects/apeswap-lending/index.js b/projects/apeswap-lending/index.js index 788cafed4b..c89796e5a8 100644 --- a/projects/apeswap-lending/index.js +++ b/projects/apeswap-lending/index.js @@ -1,21 +1,7 @@ -const {usdCompoundExports} = require('../helper/compound'); -const methodologies = require('../helper/methodologies'); - -const unitroller_bsc = "0xad48b2c9dc6709a560018c678e918253a65df86e" - -const abis = { - oracle: "address:getRegistry", - underlyingPrice: "function getPriceForUnderling(address cToken) view returns (uint256)", -} - -const lendingMarket = usdCompoundExports(unitroller_bsc, "bsc", "0x34878F6a484005AA90E7188a546Ea9E52b538F6f", abis) - +const { compoundExports2 } = require('../helper/compound') +const methodologies = require('../helper/methodologies') module.exports = { - misrepresentedTokens: true, - bsc:{ - tvl: lendingMarket.tvl, - borrowed: lendingMarket.borrowed - }, + bsc: compoundExports2({ comptroller: '0xad48b2c9dc6709a560018c678e918253a65df86e' }), methodology: methodologies.lendingMarket, } \ No newline at end of file diff --git a/projects/atlantisloans/index.js b/projects/atlantisloans/index.js index 7acc9bff00..ae1eeac8bd 100644 --- a/projects/atlantisloans/index.js +++ b/projects/atlantisloans/index.js @@ -3,8 +3,6 @@ const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); const { compoundExports } = require("../helper/compound"); -const comptroller = "0xE7E304F136c054Ee71199Efa6E26E8b0DAe242F3"; -const polygonComptroller = "0x8f85ee1c0a96734cb76870106dd9c016db6de09a" const avaxComptroller = "0x8f85ee1c0a96734cb76870106dd9c016db6de09a" const dcComptroller = "0xA65722af4957CeF481Edb4cB255f804DD36E8aDc" @@ -19,28 +17,16 @@ module.exports = { bsc: { pool2: pool2(lpVaultStakingContract_BNB, ALT_BUSD_CakeLP_BNB), staking: staking(vaultStakingContract_BNB, ATL), - // ...compoundExports(comptroller, - // "bsc", - // "0x5A9A90983A369b6bB8F062f0AFe6219Ac01caF63", - // ADDRESSES.bsc.WBNB - // ), tvl: async () => ({}), }, - // polygon: compoundExports(polygonComptroller, - // "polygon", - // "0xa65722af4957cef481edb4cb255f804dd36e8adc", - // ADDRESSES.polygon.WMATIC_2 - // ), polygon: { tvl: async () => ({}), }, avax: compoundExports(avaxComptroller, - "avax", "0x6bd2154fbc086cb43411966e0e72584196ccd065", ADDRESSES.avax.WAVAX ), dogechain: compoundExports(dcComptroller, - "dogechain", "0xbc46Dc817ce983CfD1B36cBc599031aCBEc2FDfe", ADDRESSES.dogechain.WWDOGE ), diff --git a/projects/aurigami.js b/projects/aurigami.js index 6df91e0837..1fea9e6c36 100644 --- a/projects/aurigami.js +++ b/projects/aurigami.js @@ -1,12 +1,9 @@ const { compoundExports } = require("./helper/compound"); module.exports = { - aurora: { - ...compoundExports( - '0x817af6cfAF35BdC1A634d6cC94eE9e4c68369Aeb', - 'aurora', - '0xca9511B610bA5fc7E311FDeF9cE16050eE4449E9', - '0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb' - ) - } + aurora: compoundExports( + '0x817af6cfAF35BdC1A634d6cC94eE9e4c68369Aeb', + '0xca9511B610bA5fc7E311FDeF9cE16050eE4449E9', + '0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb' + ) }; \ No newline at end of file diff --git a/projects/bao-markets/index.js b/projects/bao-markets/index.js index d92caa764f..8d30950c58 100644 --- a/projects/bao-markets/index.js +++ b/projects/bao-markets/index.js @@ -4,7 +4,7 @@ const { compoundExports } = require("../helper/compound"); // BaoMarkets const comptroller = "0x0Be1fdC1E87127c4fe7C05bAE6437e3cf90Bf8d8"; -const compoundTvl = compoundExports(comptroller, undefined, '0xf635fdf9b36b557bd281aa02fdfaebec04cd084a', nullAddress, undefined, undefined, { blacklistedTokens: ['0xe7a52262c1934951207c5fc7a944a82d283c83e5', '0xc0601094C0C88264Ba285fEf0a1b00eF13e79347', ]}) +const compoundTvl = compoundExports(comptroller, '0xf635fdf9b36b557bd281aa02fdfaebec04cd084a', nullAddress, { blacklistedTokens: ['0xe7a52262c1934951207c5fc7a944a82d283c83e5', '0xc0601094C0C88264Ba285fEf0a1b00eF13e79347', ]}) module.exports = { ethereum: compoundTvl diff --git a/projects/baseswap/index.js b/projects/baseswap/index.js index 233217ac68..aad434ca44 100644 --- a/projects/baseswap/index.js +++ b/projects/baseswap/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const BSWAP = "0x78a087d713Be963Bf307b18F2Ff8122EF9A63ae9"; const FACTORY = "0xFDa619b6d20975be80A10332cD39b9a4b0FAa8BB" -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true, permitFailure: true }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, permitFailure: true }) module.exports = { diff --git a/projects/basilisk/index.js b/projects/basilisk/index.js index 2dd0f26c6e..37f4698f7f 100644 --- a/projects/basilisk/index.js +++ b/projects/basilisk/index.js @@ -4,6 +4,5 @@ module.exports = { era: compoundExports2({ comptroller: '0x4085f99720e699106bc483dAb6CAED171EdA8D15', cether: '0x1e8F1099a3fe6D2c1A960528394F4fEB8f8A288D', - fetchBalances: true, }) }; \ No newline at end of file diff --git a/projects/bastion/index.js b/projects/bastion/index.js index 3436be4a57..a90c0019cf 100644 --- a/projects/bastion/index.js +++ b/projects/bastion/index.js @@ -3,25 +3,13 @@ const sdk = require('@defillama/sdk') const mainHubExport = compoundExports( "0x6De54724e128274520606f038591A00C5E94a1F6", - "aurora", "0x4E8fE8fd314cFC09BDb0942c5adCC37431abDCD0", "0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb" ); -const auroraRealmExport = compoundExports( - "0xA195b3d7AA34E47Fb2D2e5A682DF2d9EFA2daF06", - "aurora" -); - -const multiChainRealmExport = compoundExports( - "0xe1cf09BDa2e089c63330F0Ffe3F6D6b790835973", - "aurora" -); - -const stakedNearRealmExport = compoundExports( - "0xE550A886716241AFB7ee276e647207D7667e1E79", - "aurora" -); +const auroraRealmExport = compoundExports("0xA195b3d7AA34E47Fb2D2e5A682DF2d9EFA2daF06",); +const multiChainRealmExport = compoundExports("0xe1cf09BDa2e089c63330F0Ffe3F6D6b790835973",); +const stakedNearRealmExport = compoundExports("0xE550A886716241AFB7ee276e647207D7667e1E79",); const bastion = [ mainHubExport, @@ -31,7 +19,7 @@ const bastion = [ ]; module.exports = { - aurora: { + aurora: { tvl: async (...args) => { let balances = {}; const tvls = await Promise.all(bastion.map(realm => realm.tvl(...args))) diff --git a/projects/bearnfi/index.js b/projects/bearnfi/index.js index 19af898bba..d0e7fde02f 100644 --- a/projects/bearnfi/index.js +++ b/projects/bearnfi/index.js @@ -4,10 +4,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const { compoundExports } = require('../helper/compound') const { getConfig } = require('../helper/cache') -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); -const { getChainTransform } = require("../helper/portedTokens"); - -const abi = require("./abi.json"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const url = "https://api.bdollar.fi/api/bvault/get-vaults"; @@ -15,76 +12,28 @@ const BDEX_FACTORY = "0x2C358A7C62cdb9D554A65A86EEa034bc55D1E715"; const COMPTROLLER = "0xEEea0D4aAd990c4ede8e064A8Cb0A627B432EDa0"; const wBNB = ADDRESSES.bsc.WBNB; const cBNB = "0xa3948b027f94ca195eac645746435aaa7eb555a7"; -const chain = 'bsc' - -async function yieldTVL(timestamp, chainBlocks) { - let balances = {}; +async function yieldTVL(api) { // --- bVaults & bDollar TVL section, all contract addresses grab from endpoint --- // --- Sections of boardroom is not considered in TVL (bDollar Shares related) --- let vaultsInfo = (await getConfig('bearn-fi', url)).data.vaultInfos; const keys = Object.keys(vaultsInfo); - const strategies = []; + const strategies = [] keys.forEach((key) => { - strategies.push({ - address: vaultsInfo[key].strategy, - token: vaultsInfo[key].token, - }); - }); - - let wantedLocked = ( - await sdk.api.abi.multiCall({ - block: chainBlocks["bsc"], - calls: strategies.map((strategy) => ({ target: strategy.address })), - abi: abi.wantLockedTotal, - chain: "bsc", - }) - ).output.map((el) => el.output); - - let wantedAddresses = ( - await sdk.api.abi.multiCall({ - block: chainBlocks["bsc"], - calls: strategies.map((strategy) => ({ target: strategy.address })), - abi: abi.wantAddress, - chain: "bsc", - }) - ).output.map((el) => el.output); - - const transformAdress = await getChainTransform(chain); - - const lpPositions = []; - - strategies.map((strategy, idx) => { - if ( - strategy.token.includes("CakeLP") || - strategy.token.includes("CLP") || - strategy.token.includes("vBSWAP") || - strategy.token.includes("VLP") && strategy.token !== "VLP_BDO_VDOLLAR" - ) { - lpPositions.push({ - token: wantedAddresses[idx], - balance: wantedLocked[idx], - }); - } else { - // apparently this strategy in the endpoint states 0 tvl, so it is filter out - if (!strategy.token.includes("ibBUSD")) { - sdk.util.sumSingleBalance( - balances, - `bsc:${wantedAddresses[idx]}`, - wantedLocked[idx] - ); - } - } + if (vaultsInfo[key].token !== "ibBUSD") + strategies.push(vaultsInfo[key].strategy) }); + const bals = await api.multiCall({ abi: "uint256:wantLockedTotal", calls: strategies }) + const tokens = await api.multiCall({ abi: "address:wantAddress", calls: strategies }) - await unwrapUniswapLPs(balances, lpPositions, chainBlocks["bsc"], "bsc", transformAdress); - return balances; + api.add(tokens, bals) + return sumTokens2({ api, resolveLP: true }) } -const cExports = compoundExports(COMPTROLLER, chain, cBNB, wBNB,) +const cExports = compoundExports(COMPTROLLER, cBNB, wBNB,) const dexTVL = getUniTVL({ factory: BDEX_FACTORY, diff --git a/projects/bencu/index.js b/projects/bencu/index.js index f73e5f5145..21c5cb1904 100644 --- a/projects/bencu/index.js +++ b/projects/bencu/index.js @@ -1,8 +1,7 @@ -const {usdCompoundExports} = require("../helper/compound") +const { compoundExports2 } = require("../helper/compound") -module.exports={ - misrepresentedTokens: true, - metis:usdCompoundExports("0xC5986Df018D1ff8ecA79fd3f266428616617cDF3", "metis", undefined, undefined, { - blacklist: ['0x718F2e019F8166d81523d959F720Ad4A6e379209'.toLowerCase()] - }) +module.exports = { + metis: compoundExports2({ + comptroller: '0xC5986Df018D1ff8ecA79fd3f266428616617cDF3', + }) } \ No newline at end of file diff --git a/projects/benqi/index.js b/projects/benqi/index.js index 91882701b7..65656996c3 100644 --- a/projects/benqi/index.js +++ b/projects/benqi/index.js @@ -6,12 +6,12 @@ module.exports = { methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets", avax: { tvl: sdk.util.sumChainTvls([ - compoundExports("0x486af39519b4dc9a7fccd318217352830e8ad9b4", "avax").tvl, - compoundExports("0xD7c4006d33DA2A0A8525791ed212bbCD7Aca763F", "avax").tvl, + compoundExports("0x486af39519b4dc9a7fccd318217352830e8ad9b4", "0x5C0401e81Bc07Ca70fAD469b451682c0d747Ef1c").tvl, + compoundExports("0xD7c4006d33DA2A0A8525791ed212bbCD7Aca763F").tvl, ]), borrowed: sdk.util.sumChainTvls([ - compoundExports("0x486af39519b4dc9a7fccd318217352830e8ad9b4", "avax").borrowed, - compoundExports("0xD7c4006d33DA2A0A8525791ed212bbCD7Aca763F", "avax").borrowed, + compoundExports("0x486af39519b4dc9a7fccd318217352830e8ad9b4", '0x5C0401e81Bc07Ca70fAD469b451682c0d747Ef1c').borrowed, + compoundExports("0xD7c4006d33DA2A0A8525791ed212bbCD7Aca763F").borrowed, ]), pool2: pool2("0x784da19e61cf348a8c54547531795ecfee2affd1", "0xe530dc2095ef5653205cf5ea79f8979a7028065c") } diff --git a/projects/biokript/index.js b/projects/biokript/index.js index 1b61c9b4fc..844050762c 100644 --- a/projects/biokript/index.js +++ b/projects/biokript/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('bsc', '0x795802cb01a7be4be2f7f114b232a83b3adce64a', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('bsc', '0x795802cb01a7be4be2f7f114b232a83b3adce64a') \ No newline at end of file diff --git a/projects/bluemeteor/index.js b/projects/bluemeteor/index.js index caec2d3a8f..567eeb03f2 100644 --- a/projects/bluemeteor/index.js +++ b/projects/bluemeteor/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - pulse: { tvl: getUniTVL({ factory: '0x2c68d8942fD4B5eC45a671fA230fb3dEBF224176', useDefaultCoreAssets: true, fetchBalances: true, }), }, + pulse: { tvl: getUniTVL({ factory: '0x2c68d8942fD4B5eC45a671fA230fb3dEBF224176', useDefaultCoreAssets: true, }), }, } \ No newline at end of file diff --git a/projects/bodhfinance/index.js b/projects/bodhfinance/index.js index f2f06ea70f..851d441203 100644 --- a/projects/bodhfinance/index.js +++ b/projects/bodhfinance/index.js @@ -6,7 +6,7 @@ const bETH = "0xe970c37243F3d0B2AeB041b855Ef6466CB140BcA" const unitroller = "0x97b491744587d05ca33e84bB18B61Df9B3986DcE" const { tvl, borrowed } = compoundExports( - unitroller, "boba", bETH, WETH, ); + unitroller, bETH, ); module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", diff --git a/projects/bonedex/index.js b/projects/bonedex/index.js index 725585ed9d..71b35aad74 100644 --- a/projects/bonedex/index.js +++ b/projects/bonedex/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('shibarium', '0x907599886DeBF90CCB1e9B446b31D52bDD25926D', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('shibarium', '0x907599886DeBF90CCB1e9B446b31D52bDD25926D') \ No newline at end of file diff --git a/projects/brainiac/index.js b/projects/brainiac/index.js index 5ef9ecfb14..41fb35a1be 100644 --- a/projects/brainiac/index.js +++ b/projects/brainiac/index.js @@ -20,7 +20,7 @@ const BRAINIAC_CKB_LP = '0xaa0f41e50dbfd8247fb397b1fffea1fea9f4e6d4' // params = comptroller , chain , brCKB , CKB module.exports = { - [chain]: compoundExports("0x5c68BDBba7151c486faCB66dc39b891030e46725", chain, "0x352d09567dE5A02415670723D09E006F623fE62e", ADDRESSES.godwoken_v1.pCKB) + [chain]: compoundExports("0x5c68BDBba7151c486faCB66dc39b891030e46725", "0x352d09567dE5A02415670723D09E006F623fE62e", ADDRESSES.godwoken_v1.pCKB) } module.exports[chain].staking = staking({ chain, useDefaultCoreAssets: true, owners: farms, tokens: [BRAINIAC], lps: [BRAINIAC_CKB_LP], }) diff --git a/projects/bunicorn/index.js b/projects/bunicorn/index.js index 7ab2ca1e54..737e953316 100644 --- a/projects/bunicorn/index.js +++ b/projects/bunicorn/index.js @@ -18,7 +18,7 @@ module.exports = { allPairsLength: 'uint256:allPoolsLength', allPairs: 'function allPools(uint256) view returns (address)', }, - fetchBalances: true, + fetchBalances: true, // get reserves call fails }).bsc.tvl]), staking, }, diff --git a/projects/bwswap/index.js b/projects/bwswap/index.js index c3e0bd3f48..ea2470e9f6 100644 --- a/projects/bwswap/index.js +++ b/projects/bwswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('base', '0x67233C258BAeE28b2a7d42ec19fBD0b750a77Cd1', { fetchBalances: true }) \ No newline at end of file +module.exports = uniTvlExport('base', '0x67233C258BAeE28b2a7d42ec19fBD0b750a77Cd1') \ No newline at end of file diff --git a/projects/canto-lending/index.js b/projects/canto-lending/index.js index c7e02a89e3..a8f26b9abb 100644 --- a/projects/canto-lending/index.js +++ b/projects/canto-lending/index.js @@ -25,8 +25,7 @@ const addresses = { } const chain = 'canto' -const checkForLPTokens = i => /vAMM/.test(i) -const compoundData = compoundExports(addresses.Comptroller, chain, addresses.CCANTO, addresses.WCANTO, undefined, checkForLPTokens, { blacklistedTokens:[ +const compoundData = compoundExports(addresses.Comptroller, addresses.CCANTO, addresses.WCANTO, { blacklistedTokens:[ addresses.Note, addresses.NOTE_WCANTO, addresses.ETH_WCANTO, diff --git a/projects/cashcow/index.js b/projects/cashcow/index.js index c59fa600be..b919f5f0b9 100644 --- a/projects/cashcow/index.js +++ b/projects/cashcow/index.js @@ -29,7 +29,6 @@ module.exports = { bsc: { staking: stakingPools, ...compoundExports(comptroller, - "bsc", cBNB, WBNBEquivalent) }, diff --git a/projects/ceto-swap/index.js b/projects/ceto-swap/index.js index 65de715ab2..bd9840a688 100644 --- a/projects/ceto-swap/index.js +++ b/projects/ceto-swap/index.js @@ -4,6 +4,6 @@ const factory = '0xf50c8e257ccf3e2b58651f78e3c2dc83446d9c47'; module.exports = { manta: { - tvl: getUniTVL({ factory, useDefaultCoreAssets: true, fetchBalances: true }), + tvl: getUniTVL({ factory, useDefaultCoreAssets: true, }), }, }; diff --git a/projects/channels/index.js b/projects/channels/index.js index 63f235ca88..c939e79695 100644 --- a/projects/channels/index.js +++ b/projects/channels/index.js @@ -1,5 +1,4 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { compoundExports } = require('../helper/compound'); +const { compoundExports2 } = require('../helper/compound'); const comptroller = { heco: "0x8955aeC67f06875Ee98d69e6fe5BDEA7B60e9770", @@ -12,14 +11,9 @@ const ceth = { heco: "0x397c6D1723360CC1c317CdC9B2E926Ae29626Ff3", } -const native = { - bsc: ADDRESSES.bsc.WBNB, - heco: ADDRESSES.heco.WHT, -} - module.exports = { ...Object.keys(comptroller).reduce((exp, chain) => { - exp[chain] = compoundExports(comptroller[chain], chain, ceth[chain], native[chain], undefined, symbol => ["MLP", "CLP", "SLP"].some(c => symbol.includes(c))) + exp[chain] = compoundExports2({ comptroller: comptroller[chain], cether: ceth[chain]}) return exp }, {}) } diff --git a/projects/chee-finance/index.js b/projects/chee-finance/index.js index afd6c95ed4..45fb430358 100644 --- a/projects/chee-finance/index.js +++ b/projects/chee-finance/index.js @@ -1,10 +1,10 @@ const ADDRESSES = require('../helper/coreAssets.json') -const {compoundExports } = require('../helper/compound') +const { compoundExports } = require('../helper/compound') -module.exports={ +module.exports = { hallmarks: [ ], - celo:compoundExports("0x9BD4Fd10b531ae07437676dfE3FA6f505032CB64", "celo", "0x9de4171EDc1F69EAD07f7595bD3beD62d9215532", ADDRESSES.celo.CELO), - meter:compoundExports("0xcc0BfaD4e684023B18e0adfEcaEDd800D91dc8B5", "meter", "0xbF5cffE28d3CbA3376Cd02fF12eBECa43Bc3f14A", ADDRESSES.meter.WMTR), - bsc:compoundExports("0x0E00Ae24B84148ee93Ce2Cf4F52dE277C91B0B72", "bsc", "0x9437Ea5b08AC7f9dc553861dfE1AA77EE0F2aE69", ADDRESSES.bsc.WBNB), + celo: compoundExports("0x9BD4Fd10b531ae07437676dfE3FA6f505032CB64", "0x9de4171EDc1F69EAD07f7595bD3beD62d9215532", ADDRESSES.celo.CELO), + meter: compoundExports("0xcc0BfaD4e684023B18e0adfEcaEDd800D91dc8B5", "0xbF5cffE28d3CbA3376Cd02fF12eBECa43Bc3f14A", ADDRESSES.meter.WMTR), + bsc: compoundExports("0x0E00Ae24B84148ee93Ce2Cf4F52dE277C91B0B72", "0x9437Ea5b08AC7f9dc553861dfE1AA77EE0F2aE69", ADDRESSES.bsc.WBNB), } \ No newline at end of file diff --git a/projects/chiliswap/index.js b/projects/chiliswap/index.js index cde14c6c62..3b5d590688 100644 --- a/projects/chiliswap/index.js +++ b/projects/chiliswap/index.js @@ -4,6 +4,6 @@ module.exports = { misrepresentedTokens: true, methodology: 'TVL accounts for the liquidity on all AMM pools', scroll: { - tvl: getUniTVL({ fetchBalances: true, factory: "0x2627161e60fFa589f8bD3798F0947d572A7EdF68", useDefaultCoreAssets: true }) + tvl: getUniTVL({ factory: "0x2627161e60fFa589f8bD3798F0947d572A7EdF68", useDefaultCoreAssets: true }) } } \ No newline at end of file diff --git a/projects/chilizswap/index.js b/projects/chilizswap/index.js index 2fa4d4c077..8b5da67de5 100644 --- a/projects/chilizswap/index.js +++ b/projects/chilizswap/index.js @@ -7,7 +7,6 @@ module.exports = { tvl: getUniTVL({ factory: "0xcF4A2be8Fe92fEe8e350AD8D876274749Ae0CBb1", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; \ No newline at end of file diff --git a/projects/chimeradex/index.js b/projects/chimeradex/index.js index 63181160ec..25e9dbec3d 100644 --- a/projects/chimeradex/index.js +++ b/projects/chimeradex/index.js @@ -1,6 +1,5 @@ const { getUniTVL } = require('../helper/unknownTokens'); const tvl = getUniTVL({ - fetchBalances: true, useDefaultCoreAssets: true, factory: '0x661B92cc18a8d73209dBa1394aE56fca2F9DDb4D', }) diff --git a/projects/citadelswap/index.js b/projects/citadelswap/index.js index f1d363e607..9005a9908e 100644 --- a/projects/citadelswap/index.js +++ b/projects/citadelswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('base', '0xbe720274c24b5ec773559b8c7e28c2503dac7645', { fetchBalances: true, }) +module.exports = uniTvlExport('base', '0xbe720274c24b5ec773559b8c7e28c2503dac7645') diff --git a/projects/coffeefi/index.js b/projects/coffeefi/index.js index 84400df1da..a8da5aeff6 100644 --- a/projects/coffeefi/index.js +++ b/projects/coffeefi/index.js @@ -11,6 +11,6 @@ module.exports = { Object.keys(config).forEach(chain => { module.exports[chain] = { - tvl: getUniTVL({ factory: config[chain], useDefaultCoreAssets: true, hasStablePools: true, fetchBalances: true, }) + tvl: getUniTVL({ factory: config[chain], useDefaultCoreAssets: true, hasStablePools: true, }) } }) \ No newline at end of file diff --git a/projects/coincollect/index.js b/projects/coincollect/index.js index 505e00c21f..f750ac0d35 100644 --- a/projects/coincollect/index.js +++ b/projects/coincollect/index.js @@ -7,7 +7,7 @@ module.exports = { methodology: `Uses factory(0x2bc17223A99B6e2857796a5F64A1ED91067b5657) address to count liquidity in pools as TVL.`, misrepresentedTokens: true, polygon: { - tvl: getUniTVL({ factory: '0x2bc17223A99B6e2857796a5F64A1ED91067b5657', useDefaultCoreAssets: true, fetchBalances: true }), + tvl: getUniTVL({ factory: '0x2bc17223A99B6e2857796a5F64A1ED91067b5657', useDefaultCoreAssets: true, }), staking: sumTokensExport({owner: MasterChefContract, tokens: [COLLECT], lps: ['0x0cCc84b6506003487AEC687085e82C2f912E607B'], useDefaultCoreAssets: true, }), } }; diff --git a/projects/colony/index.js b/projects/colony/index.js index df42f66861..3bc233767b 100644 --- a/projects/colony/index.js +++ b/projects/colony/index.js @@ -29,7 +29,6 @@ function _tvl() { const colonyDexTVL = getUniTVL({ factory: colonyDexFactory, - fetchBalances: true, useDefaultCoreAssets: true }) diff --git a/projects/compound-onchain/index.js b/projects/compound-onchain/index.js index 50130ca42f..bc62fe4e4d 100644 --- a/projects/compound-onchain/index.js +++ b/projects/compound-onchain/index.js @@ -1,143 +1,11 @@ -const ADDRESSES = require('../helper/coreAssets.json') - -const sdk = require('@defillama/sdk'); -const abi = require('./abi.json'); -const BigNumber = require('bignumber.js'); -const { lendingMarket } = require('../helper/methodologies') - -// cache some data -const markets = [ - { - underlying: ADDRESSES.ethereum.BAT, - symbol: 'BAT', - decimals: 18, - cToken: '0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E', - }, - { - underlying: ADDRESSES.ethereum.DAI, - symbol: 'DAI', - decimals: 18, - cToken: '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', - }, - { - underlying: ADDRESSES.ethereum.WETH, - symbol: 'WETH', - decimals: 18, - cToken: '0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5', - }, //cETH => WETH - { - underlying: '0x1985365e9f78359a9B6AD760e32412f4a445E862', - symbol: 'REP', - decimals: 18, - cToken: '0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1', - }, - { - underlying: ADDRESSES.ethereum.USDC, - symbol: 'USDC', - decimals: 6, - cToken: '0x39AA39c021dfbaE8faC545936693aC917d5E7563', - }, - { - underlying: ADDRESSES.ethereum.USDT, - symbol: 'USDT', - decimals: 6, - cToken: '0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9', - }, - { - underlying: ADDRESSES.ethereum.WBTC, - symbol: 'WBTC', - decimals: 8, - cToken: '0xC11b1268C1A384e55C48c2391d8d480264A3A7F4',//cWBTC - legacy - }, - { - underlying: '0xE41d2489571d322189246DaFA5ebDe1F4699F498', - symbol: 'ZRX', - decimals: 18, - cToken: '0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407', - }, - { - underlying: ADDRESSES.ethereum.SAI, - symbol: 'SAI', - decimals: 18, - cToken: '0xF5DCe57282A584D2746FaF1593d3121Fcac444dC', - }, -]; - -// ask comptroller for all markets array -async function getAllCTokens(block) { - return (await sdk.api.abi.call({ - block, - target: '0x3d9819210a31b4961b30ef54be2aed79b9c9cd3b', - params: [], - abi: abi['getAllMarkets'], - })).output; -} - -const CTOKEN_WETH = '0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5'.toLowerCase() - -// returns {[underlying]: {cToken, decimals, symbol}} -async function getMarkets(block) { - if (block < 10271924) { - // the allMarkets getter was only added in this block. - return markets; - } else { - const markets = [{ - cToken: CTOKEN_WETH, - underlying: ADDRESSES.ethereum.WETH, //cETH => WETH - }] - - const allCTokens = await getAllCTokens(block) - const calls = allCTokens.filter(i => i.toLowerCase() !== CTOKEN_WETH).map(i => ({ target: i })) - const { output } = await sdk.api.abi.multiCall({ - abi: abi['underlying'], calls, block, - }) - output.forEach(({ input: { target: cToken }, output: underlying}) => markets.push({ cToken, underlying, })) - return markets; - } -} - -async function v2Tvl(balances, block, borrowed) { - let markets = await getMarkets(block); - - // Get V2 tokens locked - let v2Locked = await sdk.api.abi.multiCall({ - block, - calls: markets.map((market) => ({ - target: market.cToken, - })), - abi: borrowed ? abi.totalBorrows : abi['getCash'], - }); - - markets.forEach((market) => { - let getCash = v2Locked.output.find((result) => result.input.target === market.cToken); - balances[market.underlying] = BigNumber(balances[market.underlying] || 0) - .plus(getCash.output) - .toFixed(); - }); - return balances; -} - -async function borrowed(timestamp, block) { - const balances = {}; - await v2Tvl(balances, block, true) - return balances -} - -async function tvl(timestamp, block) { - let balances = {}; - - await v2Tvl(balances, block, false) - return balances; -} +const { lendingMarket } = require('../helper/methodologies'); +const { compoundExports2 } = require('../helper/compound'); module.exports = { hallmarks: [ [1632873600, "Comptroller vulnerability exploit"], [1592226000, "COMP distribution begins"] ], - ethereum: { - tvl, - borrowed - }, + ethereum: compoundExports2({ comptroller: '0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B', cether: '0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5' }), methodology: `${lendingMarket}. TVL is calculated by getting the market addresses from comptroller and calling the getCash() on-chain method to get the amount of tokens locked in each of these addresses, then we get the price of each token from coingecko.`, }; diff --git a/projects/compound-v1/index.js b/projects/compound-v1/index.js index f42bbd12eb..dfbe6c48b1 100644 --- a/projects/compound-v1/index.js +++ b/projects/compound-v1/index.js @@ -1,59 +1,21 @@ const v1abi = require('./v1Abi.json'); -const sdk = require('@defillama/sdk'); -const BigNumber = require('bignumber.js'); const v1Contract = '0x3FDA67f7583380E67ef93072294a7fAc882FD7E7' -async function v1Tvl(balances, block, borrowed) { - const marketsLength = await sdk.api.abi.call({ - target: v1Contract, - block, - abi: v1abi.getCollateralMarketsLength - }); - const underlyings = await sdk.api.abi.multiCall({ - calls: Array(Number(marketsLength.output)).fill().map((n, i) => ({ - target: v1Contract, - params: [i] - })), - block, - abi: v1abi.collateralMarkets - }); - const markets = await sdk.api.abi.multiCall({ - calls: underlyings.output.map(m => ({ - target: v1Contract, - params: [m.output] - })), - block, - abi: v1abi.markets - }); - markets.output.forEach(m => { - const token = m.input.params[0] - let amount - if (borrowed) { - amount = m.output.totalBorrows - } else { - amount = BigNumber(m.output.totalSupply).minus(m.output.totalBorrows).toFixed(0) - } - sdk.util.sumSingleBalance(balances, token, amount) - }) +async function tvl(api) { + const tokens = await api.fetchList({ lengthAbi: v1abi.getCollateralMarketsLength, itemAbi: v1abi.collateralMarkets, target: v1Contract }) + return api.sumTokens({ owner: v1Contract, tokens }) } -async function borrowed(timestamp, block) { - const balances = {}; - await v1Tvl(balances, block, true) - return balances -} - -async function tvl(timestamp, block) { - let balances = {}; - - await v1Tvl(balances, block, false) - return balances; +async function borrowed(api) { + const tokens = await api.fetchList({ lengthAbi: v1abi.getCollateralMarketsLength, itemAbi: v1abi.collateralMarkets, target: v1Contract }) + const markets = await api.multiCall({ abi: v1abi.markets, calls: tokens, target: v1Contract }) + const bals = markets.map(m => m.totalBorrows) + api.add(tokens, bals) } module.exports = { - ethereum: { - tvl, - borrowed - }, + ethereum: { + tvl, + borrowed + }, }; - \ No newline at end of file diff --git a/projects/cookiebase/index.js b/projects/cookiebase/index.js index a864a15c24..a10ad9d8b3 100644 --- a/projects/cookiebase/index.js +++ b/projects/cookiebase/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - base: { tvl: getUniTVL({ factory: '0x05b00D63DbC67874ad44d039213b7DAfB999d184', useDefaultCoreAssets: true, fetchBalances: true, }), }, + base: { tvl: getUniTVL({ factory: '0x05b00D63DbC67874ad44d039213b7DAfB999d184', useDefaultCoreAssets: true, }), }, } \ No newline at end of file diff --git a/projects/coslend/index.js b/projects/coslend/index.js index a75948a2d1..68f8b21fe9 100644 --- a/projects/coslend/index.js +++ b/projects/coslend/index.js @@ -1,10 +1,4 @@ -const { usdCompoundExports } = require("../helper/compound"); +const { compoundExports2 } = require("../helper/compound") module.exports = { - evmos: usdCompoundExports( - "0x5b32B588Af5F99F4e5c4038dDE6BDD991024F650", - "evmos", - undefined, - undefined, - {} - ), -}; + evmos: compoundExports2({ comptroller: "0x5b32B588Af5F99F4e5c4038dDE6BDD991024F650" }), +} diff --git a/projects/cozy/index.js b/projects/cozy/index.js index fd1662199d..431e97eda7 100644 --- a/projects/cozy/index.js +++ b/projects/cozy/index.js @@ -1,14 +1,6 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {compoundExports} = require('../helper/compound') +const { compoundExports } = require('../helper/compound') -const transform = addr=>{ - if(addr==="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"){ - return ADDRESSES.ethereum.WETH - } - return addr -} - -module.exports={ - methodology: "Count tokens the same way we count for compound", - ethereum: compoundExports('0x895879b2c1fbb6ccfcd101f2d3f3c76363664f92', "ethereum", undefined, undefined, transform) +module.exports = { + methodology: "Count tokens the same way we count for compound", + ethereum: compoundExports('0x895879b2c1fbb6ccfcd101f2d3f3c76363664f92') } \ No newline at end of file diff --git a/projects/cream/index.js b/projects/cream/index.js index 3f60a31e7b..04b706225e 100644 --- a/projects/cream/index.js +++ b/projects/cream/index.js @@ -5,14 +5,13 @@ module.exports = { hallmarks: [[1635292800, "Flashloan exploit"]], timetravel: false, // bsc and fantom api's for staked coins can't be queried at historical points start: 1599552000, // 09/08/2020 @ 8:00am (UTC) - ethereum: compoundExports("0xbdC857eae1D15ad171E11af6FC3e99413Ed57Ec4", "ethereum"), + ethereum: compoundExports("0xbdC857eae1D15ad171E11af6FC3e99413Ed57Ec4"), bsc: compoundExports( "0x589DE0F0Ccf905477646599bb3E5C622C84cC0BA", - "bsc", "0x1Ffe17B99b439bE0aFC831239dDECda2A790fF3A", ADDRESSES.bsc.WBNB ), - polygon: compoundExports("0x20ca53e2395fa571798623f1cfbd11fe2c114c24", "polygon"), - arbitrum: compoundExports("0xbadaC56c9aca307079e8B8FC699987AAc89813ee", "arbitrum"), - base: compoundExports("0x94d31f92a7f85b51F0B628467B3E660BA3e8D799", "base"), + polygon: compoundExports("0x20ca53e2395fa571798623f1cfbd11fe2c114c24"), + arbitrum: compoundExports("0xbadaC56c9aca307079e8B8FC699987AAc89813ee"), + base: compoundExports("0x94d31f92a7f85b51F0B628467B3E660BA3e8D799"), }; diff --git a/projects/creamswap/abi.json b/projects/creamswap/abi.json deleted file mode 100644 index 5b5c9fc806..0000000000 --- a/projects/creamswap/abi.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "getCurrentTokens": "address[]:getCurrentTokens", - "get_virtual_price": "uint256:get_virtual_price", - "getPricePerFullShare": "uint256:getPricePerFullShare", - "balanceOfUnderlying": "function balanceOfUnderlying(address owner) returns (uint256)", - "underlying": "address:underlying" -} \ No newline at end of file diff --git a/projects/creamswap/index.js b/projects/creamswap/index.js index 7c8d5f64de..fb8efca0c7 100644 --- a/projects/creamswap/index.js +++ b/projects/creamswap/index.js @@ -1,189 +1,20 @@ -const ADDRESSES = require('../helper/coreAssets.json') -/*================================================== - Modules - ==================================================*/ - - -const sdk = require('@defillama/sdk'); -const abi = require('./abi.json'); -const BigNumber = require('bignumber.js'); -const { getLogs } = require('../helper/cache/getLogs') - -/*================================================== -Settings -==================================================*/ - -const wETH = ADDRESSES.ethereum.WETH; -const usdt = ADDRESSES.ethereum.USDT; -const yyCrv = '0x5dbcF33D8c2E976c6b560249878e6F1491Bca25c'; -const yETH = '0xe1237aA7f535b0CC33Fd973D66cBf830354D16c7'; -const crYFI = '0xCbaE0A83f4f9926997c8339545fb8eE32eDc6b76'; -const crCREAM = '0x892B14321a4FCba80669aE30Bd0cd99a7ECF6aC0'; -const cryUSD = '0x4EE15f44c6F0d8d1136c83EfD2e8E4AC768954c6'; -const CRETH2 = '0xcBc1065255cBc3aB41a6868c22d1f1C573AB89fd'; - -/*================================================== - TVL - ==================================================*/ - -function isCrToken(address) { - const crTokens = [crYFI, crCREAM, cryUSD]; - return crTokens.includes(address); -} +const { getLogs } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); async function tvl(api) { - const block = api.block - let balances = { - [ADDRESSES.null]: '0', // ETH - }; - let poolLogs = (await Promise.all([ - getLogs({ - api, - target: '0xf8062Eedf80D8D2527cE89435f670cb996aB4e54', - topic: 'LOG_NEW_POOL(address,address)', - fromBlock: 10815298, - }), - - block >= 11053389 ? - getLogs({ - api, - target: '0x136d6F80Bb3A853D151686BFED2c9309Aea6dDec', - topic: 'LOG_NEW_POOL(address,address)', - fromBlock: 11053389, - }) : Promise.resolve( []), - - block >= 11099537 ? - getLogs({ - api, - target: '0x0d3303Ffaf107cD732396570Bf07b2dbd79B619f', - topic: 'LOG_NEW_POOL(address,address)', - fromBlock: 11099537, - }) : Promise.resolve([]) - ])).reduce((pools, subPools) => { - pools.push(...subPools); - return pools; - }, []) - - let poolCalls = []; - - let pools = poolLogs.map((poolLog) => { - return `0x${poolLog.topics[2].slice(26)}` - }); + getLogs({ api, target: '0xf8062Eedf80D8D2527cE89435f670cb996aB4e54', topic: 'LOG_NEW_POOL(address,address)', fromBlock: 10815298, }), + getLogs({ api, target: '0x136d6F80Bb3A853D151686BFED2c9309Aea6dDec', topic: 'LOG_NEW_POOL(address,address)', fromBlock: 11053389, }), + getLogs({ api, target: '0x0d3303Ffaf107cD732396570Bf07b2dbd79B619f', topic: 'LOG_NEW_POOL(address,address)', fromBlock: 11099537, }) + ])).flat() - const poolTokenData = (await sdk.api.abi.multiCall({ - calls: pools.map((poolAddress) => ({ target: poolAddress })), - abi: abi.getCurrentTokens, - })).output; + let pools = poolLogs.map((poolLog) => `0x${poolLog.topics[2].slice(26)}`) - poolTokenData.forEach((poolToken) => { - let poolTokens = poolToken.output; - let poolAddress = poolToken.input.target; - - poolTokens.forEach((token) => { - poolCalls.push({ - target: token, - params: poolAddress, - }); - }) - }); - - let poolBalances = (await sdk.api.abi.multiCall({ - block, - calls: poolCalls, - abi: 'erc20:balanceOf' - })).output; - - poolBalances.forEach((balanceOf) => { - let balance = balanceOf.output; - let address = balanceOf.input.target; - - if (BigNumber(balance).toNumber() <= 0) { - return; - } - - balances[address] = BigNumber(balances[address] || 0).plus(balance).toFixed(); - }); - - let underlyingBalanceCalls = []; - let underlyingAddressCalls = []; - poolBalances.filter((poolBalance) => isCrToken(poolBalance.input.target)).forEach(pooBalance => { - underlyingBalanceCalls.push({ - target: pooBalance.input.target, - params: pooBalance.input.params, - }); - underlyingAddressCalls.push({ - target: pooBalance.input.target, - params: [], - }) - }) - - let [underlyingBalances, underlyingAddress, yVaultPrices, yCrvPrice] = await Promise.all([ - sdk.api.abi.multiCall({ - block, - calls: underlyingBalanceCalls, - abi: abi['balanceOfUnderlying'], - permitFailure: true, - }), - sdk.api.abi.multiCall({ - block, - calls: underlyingAddressCalls, - abi: abi['underlying'] - }), - sdk.api.abi.multiCall({ - block, - calls: [{ target: yETH }, { target: yyCrv }], - abi: abi['getPricePerFullShare'], - }), - sdk.api.abi.call({ - block, - target: '0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51', - params: [], - abi: abi['get_virtual_price'] - }) - ]); - - underlyingBalances = underlyingBalances.output; - underlyingAddress = underlyingAddress.output; - yVaultPrices = yVaultPrices.output; - yCrvPrice = yCrvPrice.output; - - // convert cTokens into underlying tokens - underlyingBalances.forEach((underlying, i) => { - let balance = underlying.output; - let address = underlyingAddress[i].output; - let cAddress = underlying.input.target; - balances[address] = balance; - delete balances[cAddress]; - }) - - // convert vault tokens into underlying values - poolBalances.forEach((balanceOf, i) => { - let balance = balanceOf.output; - let address = balanceOf.input.target; - - if (BigNumber(balance).toNumber() <= 0) { - return; - } - // assume CRETH2:ETH = 1:1 - if (address === CRETH2) { - balances[wETH] = BigNumber(balances[wETH] || 0).plus(balances[CRETH2]).toFixed(); - delete balances[CRETH2]; - } else if (address === yyCrv) { - const yyCrvCash = BigNumber(balance).multipliedBy(yCrvPrice).div(1e18).div(1e12).multipliedBy(yVaultPrices[1].output).div(1e18).integerValue(); - balances[usdt] = BigNumber(balances[usdt] || 0).plus(yyCrvCash).toFixed(); - delete balances[yyCrv]; - } else { - balances[address] = BigNumber(balances[address] || 0).plus(balance).toFixed(); - } - }); - return balances; + const poolTokenData = await api.multiCall({ calls: pools, abi: "address[]:getCurrentTokens", }) + const ownerTokens = poolTokenData.map((v, i) => [v, pools[i]]) + return sumTokens2({ ownerTokens, api }) } -/*================================================== - Exports - ==================================================*/ - module.exports = { start: 1599552000, // 09/08/2020 @ 8:00am (UTC) ethereum: { tvl } diff --git a/projects/creditum/abi.json b/projects/creditum/abi.json deleted file mode 100644 index 7c1d075b55..0000000000 --- a/projects/creditum/abi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "token": "address:token" -} \ No newline at end of file diff --git a/projects/creditum/helper.js b/projects/creditum/helper.js deleted file mode 100644 index 3e70d309c5..0000000000 --- a/projects/creditum/helper.js +++ /dev/null @@ -1,51 +0,0 @@ -const abi = require('./abi.json') -const sdk = require('@defillama/sdk') -const BigNumber = require('bignumber.js'); - -async function handleYearnTokens(balances, tokens, owner, block, chain, transform) { - let balance = ( - await sdk.api.abi.multiCall({ - calls: tokens.map((p) => ({ - target: p, - params: owner, - })), - abi: "erc20:balanceOf", - block, - chain, - }) - ).output; - let pricePerShare = ( - await sdk.api.abi.multiCall({ - calls: tokens.map((p) => ({ - target: p, - })), - abi: "uint256:pricePerShare", - block, - chain, - }) - ).output; - let underlyingTokens = ( - await sdk.api.abi.multiCall({ - calls: tokens.map((p) => ({ - target: p, - })), - abi: abi.token, - block, - chain, - }) - ).output; - for (let i = 0; i < balance.length; i++) { - let addr = transform(underlyingTokens[i].output.toLowerCase()); - const price = pricePerShare[i].output - sdk.util.sumSingleBalance( - balances, - addr, - BigNumber(balance[i].output) - .times(price).div(10**Math.log10(price)) - .toFixed(0) - ); - } - } -module.exports = { - handleYearnTokens -} \ No newline at end of file diff --git a/projects/creditum/index.js b/projects/creditum/index.js index b428aeba56..07d58fc878 100644 --- a/projects/creditum/index.js +++ b/projects/creditum/index.js @@ -1,35 +1,25 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakingPricedLP } = require("../helper/staking"); -const { sumTokensSharedOwners } = require("../helper/unwrapLPs"); const { pool2 } = require("../helper/pool2"); -const { handleYearnTokens } = require("./helper.js"); const lending = "0x04D2C91A8BDf61b11A526ABea2e2d8d778d4A534" -async function tvl(time, ethBlock, chainBlocks){ - const chain = 'fantom' - const block = chainBlocks[chain] - const balances = {} - const transform = addr=> addr===ADDRESSES.fantom.DAI?[ADDRESSES.ethereum.DAI]:`${chain}:${addr}` - await sumTokensSharedOwners(balances, [ - ADDRESSES.fantom.USDC, - ADDRESSES.fantom.WFTM, - ADDRESSES.fantom.DAI, - "0x321162Cd933E2Be498Cd2267a90534A804051b11", - "0x74b23882a30290451A17c44f4F05243b6b58C76d" - ], [lending], block, chain, transform) - await handleYearnTokens(balances, [ - "0x637ec617c86d24e421328e6caea1d92114892439", - "0xef0210eb96c7eb36af8ed1c20306462764935607", - "0x0dec85e74a92c52b7f708c4b10207d9560cefaf0" - ], lending, block, chain, transform) - return balances +async function tvl(api) { + return api.sumTokens({ + owner: lending, tokens: [ + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.WFTM, + ADDRESSES.fantom.DAI, + "0x321162Cd933E2Be498Cd2267a90534A804051b11", + "0x74b23882a30290451A17c44f4F05243b6b58C76d" + ] + }) } -module.exports={ - fantom:{ - tvl, - staking: stakingPricedLP("0xd9e28749e80D867d5d14217416BFf0e668C10645", "0x77128dfdd0ac859b33f44050c6fa272f34872b5e", "fantom", "0x06F3Cb227781A836feFAEa7E686Bdc857e80eAa7", "wrapped-fantom"), - pool2: pool2("0xe0c43105235c1f18ea15fdb60bb6d54814299938", "0x06f3cb227781a836fefaea7e686bdc857e80eaa7"), - }, +module.exports = { + fantom: { + tvl, + staking: stakingPricedLP("0xd9e28749e80D867d5d14217416BFf0e668C10645", "0x77128dfdd0ac859b33f44050c6fa272f34872b5e", "fantom", "0x06F3Cb227781A836feFAEa7E686Bdc857e80eAa7", "wrapped-fantom"), + pool2: pool2("0xe0c43105235c1f18ea15fdb60bb6d54814299938", "0x06f3cb227781a836fefaea7e686bdc857e80eaa7"), + }, } \ No newline at end of file diff --git a/projects/crolend/index.js b/projects/crolend/index.js index 27fb8cb7c0..096c50e7d1 100644 --- a/projects/crolend/index.js +++ b/projects/crolend/index.js @@ -1,11 +1,10 @@ -const { getCompoundV2Tvl } = require('../helper/compound') - module.exports = { hallmarks: [ [1670004805, "Project rugged"] ], + deadFrom: 1670004805, cronos: { - tvl: getCompoundV2Tvl("0x30dF4C58ADaf1FcF388B7Bf775840DEc086dcB98", "cronos"), + tvl: ()=>({}), borrowed: ()=>({}) } } \ No newline at end of file diff --git a/projects/cuanswap/index.js b/projects/cuanswap/index.js index 9ec53b7b1a..519e6e011b 100644 --- a/projects/cuanswap/index.js +++ b/projects/cuanswap/index.js @@ -3,6 +3,6 @@ const { getUniTVL, } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, core: { - tvl: getUniTVL({ factory: '0x23556027Ad3C3e76160AcA51e8098C395a6d815C', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x23556027Ad3C3e76160AcA51e8098C395a6d815C', useDefaultCoreAssets: true, }), }, }; diff --git a/projects/cubiswap/index.js b/projects/cubiswap/index.js index 1426bdeb66..51750a173e 100644 --- a/projects/cubiswap/index.js +++ b/projects/cubiswap/index.js @@ -1,7 +1,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const FACTORY = "0xE6c8488a3078f474D0B75E4ac06a369e3Fb39d76" // This factory is on opBNB Mainnet (Chain Id: 204) -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true, permitFailure: true }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, permitFailure: true }) module.exports = { diff --git a/projects/cyberblast-v2/index.js b/projects/cyberblast-v2/index.js index 4981fbf840..4697179eda 100644 --- a/projects/cyberblast-v2/index.js +++ b/projects/cyberblast-v2/index.js @@ -7,6 +7,6 @@ module.exports = { misrepresentedTokens: true, methodology: `Uses Uniswap-style factory address to find and price liquidity pairs.`, blast: { - tvl: getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true }), + tvl: getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, }), } }; \ No newline at end of file diff --git a/projects/dalmatiandex/index.js b/projects/dalmatiandex/index.js index ec70804526..9ee62afc08 100644 --- a/projects/dalmatiandex/index.js +++ b/projects/dalmatiandex/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('shibarium', '0x80108b858e04d5a35EF7dA7A67Cf45eeD18abf27', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('shibarium', '0x80108b858e04d5a35EF7dA7A67Cf45eeD18abf27') \ No newline at end of file diff --git a/projects/damm-finance/index.js b/projects/damm-finance/index.js index 5274ec161d..7814fb9b58 100644 --- a/projects/damm-finance/index.js +++ b/projects/damm-finance/index.js @@ -1,17 +1,15 @@ const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound') -const WETH = ADDRESSES.ethereum.WETH const bETH = "0xe970c37243F3d0B2AeB041b855Ef6466CB140BcA" const unitroller = "0x4F96AB61520a6636331a48A11eaFBA8FB51f74e4" -const { tvl, borrowed } = compoundExports( - unitroller, "ethereum", bETH, WETH, ); +const { tvl, borrowed } = compoundExports(unitroller, bETH,); module.exports = { - methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", - ethereum: { tvl, borrowed }, - hallmarks:[ - [1664974802, "Liquidity Bonding Start"] - ], + methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", + ethereum: { tvl, borrowed }, + hallmarks: [ + [1664974802, "Liquidity Bonding Start"] + ], } diff --git a/projects/darkauto/abi.json b/projects/darkauto/abi.json deleted file mode 100644 index cc4d761525..0000000000 --- a/projects/darkauto/abi.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "poolLength": "uint256:poolLength", - "wantLockedTotal": "uint256:wantLockedTotal", - "poolInfo": "function poolInfo(uint256) view returns (address want, uint256 allocPoint, uint256 lastRewardTime, address strategy, uint256 earlyWithdrawFee, uint256 earlyWithdrawTime)" -} \ No newline at end of file diff --git a/projects/darkauto/index.js b/projects/darkauto/index.js index a8580e1641..e28e2ad790 100644 --- a/projects/darkauto/index.js +++ b/projects/darkauto/index.js @@ -1,21 +1,31 @@ -const vaultUtils = require("./utils") +const { sumUnknownTokens } = require("../helper/unknownTokens") -async function cronosTVL(timestamp, block, chainBlocks){ - const vaultAddress = "0x66D586eae9B30CD730155Cb7fb361e79D372eA2a" - return await vaultUtils.tvl(chainBlocks.cronos, 'cronos', vaultAddress) +module.exports = { + doublecounted: true, + misrepresentedTokens: true, } -async function dogechainTVL(timestamp, block, chainBlocks){ - const vaultAddress = "0xf5e5271432089254288F47d6F2CFcfE066377900" - return await vaultUtils.tvl(chainBlocks.dogechain, 'dogechain', vaultAddress) + +const config = { + cronos: '0x66D586eae9B30CD730155Cb7fb361e79D372eA2a', + dogechain: '0xf5e5271432089254288F47d6F2CFcfE066377900', } -module.exports = { - doublecounted: true, - cronos: { - tvl: cronosTVL, - }, - dogechain: { - tvl: dogechainTVL, +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: config[chain] }) + const lps = poolInfos.map(pool => pool.want) + const strategies = poolInfos.map(pool => pool.strategy) + const bals = await api.multiCall({ abi: abi.wantLockedTotal, calls: strategies }) + api.add(lps, bals) + return sumUnknownTokens({ api, lps, resolveLP: true }) + } } -}; +}) + +const abi = { + "poolLength": "uint256:poolLength", + "wantLockedTotal": "uint256:wantLockedTotal", + "poolInfo": "function poolInfo(uint256) view returns (address want, uint256 allocPoint, uint256 lastRewardTime, address strategy, uint256 earlyWithdrawFee, uint256 earlyWithdrawTime)" +} \ No newline at end of file diff --git a/projects/darkauto/utils.js b/projects/darkauto/utils.js deleted file mode 100644 index 2e318248ba..0000000000 --- a/projects/darkauto/utils.js +++ /dev/null @@ -1,125 +0,0 @@ -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); -const abi = require("./abi.json"); -const { getLPData, getTokenPrices, } = require('../helper/unknownTokens'); - -const farmLPBalance = async ( - chain, - block, - lpToken, - lpLocked, - token0, - token1, -) => { - const balances = ( - await sdk.api.abi.multiCall({ - abi: "erc20:balanceOf", - calls: [ - { - target: token0, - params: [lpToken], - }, - { - target: token1, - params: [lpToken], - } - ], - block, - chain: chain, - }) - ).output; - - const lpTotalSuply = ( - await sdk.api.abi.call({ - target: lpToken, - abi: "erc20:totalSupply", - chain: chain, - block, - }) - ).output; - const token0Locked = (lpLocked * balances[0].output) / lpTotalSuply; - const token1Locked = (lpLocked * balances[1].output) / lpTotalSuply; - - return [ - { token: `${chain}:${token0}`, locked: token0Locked }, - { token: `${chain}:${token1}`, locked: token1Locked }, - ]; -}; - - - -const tvl = async (block, chain, vaultAddress) => { - const balances = {}; - const { output: poolLength } = await sdk.api.abi.call({ - abi: abi["poolLength"], - target: vaultAddress, - chain, - }) - let calls = [] - for (let i = 0; i < poolLength; i++) { - calls.push({ - target: vaultAddress, - params: [i] - }) - } - let poolInfos = - await sdk.api.abi.multiCall({ - abi: abi["poolInfo"], - calls, - block, - chain: chain, - }) - .then(d => d.output).then(d => d.map(poolInfo => poolInfo.output)); - - const lps = poolInfos.map(pool =>{ - return pool.want - }) - - const tokenInfos = await getLPData({block, chain, lps, allLps: false}) - - let wanLockedTotals = - await sdk.api.abi.multiCall({ - abi: abi["wantLockedTotal"], - calls: poolInfos.map(poolInfo => { - return { - target: poolInfo.strategy, - params: [] - } - }), - block, - chain: chain, - }) - .then(d => d.output).then(d => d.map(lock => lock.output)); - - let requests = []; - calls.map((item, idx) => { - const lpAddress = poolInfos[idx].want.toLowerCase(); - if(!tokenInfos[lpAddress]) - return null; - - requests.push(farmLPBalance( - chain, - block, - lpAddress, - wanLockedTotals[idx], - tokenInfos[lpAddress].token0Address, - tokenInfos[lpAddress].token1Address - )); - }); - const data = await Promise.all(requests); - - data.forEach((farm) => { - farm.forEach((item) => { - balances[item.token] = new BigNumber(balances[item.token] || 0) - .plus(item.locked || 0) - .toFixed(0); - }); - }); - - const { updateBalances, prices} = await getTokenPrices({ chain, block, lps, useDefaultCoreAssets: true}) - await updateBalances(balances) - return balances; -}; -module.exports = { - tvl, -}; diff --git a/projects/direct-exchange/index.js b/projects/direct-exchange/index.js index f0ee996735..e96546d2ab 100644 --- a/projects/direct-exchange/index.js +++ b/projects/direct-exchange/index.js @@ -2,6 +2,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, kava: { - tvl: getUniTVL({ factory: '0xcE08c3d20Ff00a9Cf0D28922768bD606592B5D4C', fetchBalances: true, useDefaultCoreAssets: true, }) + tvl: getUniTVL({ factory: '0xcE08c3d20Ff00a9Cf0D28922768bD606592B5D4C', useDefaultCoreAssets: true, }) }, } diff --git a/projects/dogswap/index.js b/projects/dogswap/index.js index b7fcd411e6..f286a9b83d 100644 --- a/projects/dogswap/index.js +++ b/projects/dogswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('shibarium', '0xA780FcBFF7c5232FDbEF4fc67313bEcFfdf64172', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('shibarium', '0xA780FcBFF7c5232FDbEF4fc67313bEcFfdf64172') \ No newline at end of file diff --git a/projects/donaswap-v2/index.js b/projects/donaswap-v2/index.js index 4861efb4b7..ddd20b512c 100644 --- a/projects/donaswap-v2/index.js +++ b/projects/donaswap-v2/index.js @@ -1,7 +1,7 @@ const { getUniTVL } = require("../helper/unknownTokens.js"); const V2_FACTORY = "0x8e5dff1c121F661971d02950698f8c5EFc3DfA78"; -const tvl = getUniTVL({ factory: V2_FACTORY, useDefaultCoreAssets: true, fetchBalances: true }); +const tvl = getUniTVL({ factory: V2_FACTORY, useDefaultCoreAssets: true }); const chains = ['arbitrum', 'astar', 'aurora', 'avax', 'base', 'bsc', 'celo', 'cmp', 'conflux', 'core', 'dogechain', 'ethereum', 'fantom', 'flare', 'fuse', 'fusion', 'heco', 'kcc', 'kardia', 'kava', 'linea', 'metis', 'moonbeam', 'moonriver', 'optimism', 'palm', 'polygon', 'polygon_zkevm', 'thundercore'] diff --git a/projects/drachma/index.js b/projects/drachma/index.js index fb70373e02..7fe6cf8708 100644 --- a/projects/drachma/index.js +++ b/projects/drachma/index.js @@ -6,10 +6,7 @@ const { compoundExports } = require("../helper/compound"); const comptroller = "0xB6ef08Ffbbb0691a3D9E6c41db4b1d2F97D8D49a"; //tvl for drachma farm -const { tvl: drachmaTvl, borrowed: drachmaBorrowed } = compoundExports( - comptroller, - "metis" -); +const { tvl: drachmaTvl, borrowed: drachmaBorrowed } = compoundExports(comptroller,); //tvl for drachma app function tvl(chain) { diff --git a/projects/dynastyswap-xyz/index.js b/projects/dynastyswap-xyz/index.js index 448503aa1b..067434d2e3 100644 --- a/projects/dynastyswap-xyz/index.js +++ b/projects/dynastyswap-xyz/index.js @@ -3,6 +3,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, pulse: { - tvl: getUniTVL({ factory: '0x7abcEc2e35505aF1720431A6c414067717342B1F', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x7abcEc2e35505aF1720431A6c414067717342B1F', useDefaultCoreAssets: true, }), }, }; // node test.js projects/pulsex/index.js \ No newline at end of file diff --git a/projects/dyson/index.js b/projects/dyson/index.js index 1bb23112fa..b9b85e6846 100644 --- a/projects/dyson/index.js +++ b/projects/dyson/index.js @@ -12,6 +12,7 @@ module.exports = { Object.keys(config).forEach(chain => { module.exports[chain] = { + // get reserves call fails tvl: getUniTVL({ factory: config[chain], fetchBalances: true, useDefaultCoreAssets: true }) } }) diff --git a/projects/echodex/index.js b/projects/echodex/index.js index 47eec9b7c3..0d6c339510 100644 --- a/projects/echodex/index.js +++ b/projects/echodex/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - linea: { tvl: getUniTVL({ factory: '0x6D1063F2187442Cc9adbFAD2f55A96B846FCB399', useDefaultCoreAssets: true, fetchBalances: true }), }, + linea: { tvl: getUniTVL({ factory: '0x6D1063F2187442Cc9adbFAD2f55A96B846FCB399', useDefaultCoreAssets: true, }), }, } diff --git a/projects/energondex/index.js b/projects/energondex/index.js index c296374609..e5e45cec6e 100644 --- a/projects/energondex/index.js +++ b/projects/energondex/index.js @@ -1,7 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') const sdk = require('@defillama/sdk') -const uniTvl = getUniTVL({ factory: '0xBfAe4f07C099798F23f5aC6773532fB637B68Ad7', useDefaultCoreAssets: true, fetchBalances: true, }) +const uniTvl = getUniTVL({ factory: '0xBfAe4f07C099798F23f5aC6773532fB637B68Ad7', useDefaultCoreAssets: true, }) const masterchef = '0x9A40F8374cf840cb1d76DD085E250D86641FB6a3' const egd = '0xF8F85beB4121fDAa9229141e5D5e4B782d8819D8' const weth = ADDRESSES.base.WETH diff --git a/projects/esper-finance/index.js b/projects/esper-finance/index.js index e7bf0db602..eecb132f39 100644 --- a/projects/esper-finance/index.js +++ b/projects/esper-finance/index.js @@ -4,6 +4,6 @@ module.exports = { misrepresentedTokens: true, start: 4781359, mantle: { - tvl: getUniTVL({ factory: '0x69C4515C926ac3db7A547044145495240961a7B5', useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x69C4515C926ac3db7A547044145495240961a7B5', useDefaultCoreAssets: true, }), }, }; diff --git a/projects/ezkalibur/index.js b/projects/ezkalibur/index.js index 2b61648181..59d927171a 100644 --- a/projects/ezkalibur/index.js +++ b/projects/ezkalibur/index.js @@ -9,7 +9,7 @@ module.exports = { misrepresentedTokens: true, start: 1686309181, era: { - tvl: getUniTVL({ factory: '0x15C664A62086c06D43E75BB3fddED93008B8cE63', useDefaultCoreAssets: true,fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x15C664A62086c06D43E75BB3fddED93008B8cE63', useDefaultCoreAssets: true, }), staking: stakingPricedLP(xSWORD,SWORD_TOKEN,'era',SWORD_WETH_LP,'weth') }, }; \ No newline at end of file diff --git a/projects/fedex/index.js b/projects/fedex/index.js index b32d4f1ec2..f66baf6dcb 100644 --- a/projects/fedex/index.js +++ b/projects/fedex/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: "0xfb3AD00B272449AF3ea44e5C6ADbdfaB1655A046", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/fenrirfinance/index.js b/projects/fenrirfinance/index.js index c4b9cbd318..fe038d5f56 100644 --- a/projects/fenrirfinance/index.js +++ b/projects/fenrirfinance/index.js @@ -1,11 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {fullCoumpoundExports} = require('../helper/compound'); +const { compoundExports2 } = require('../helper/compound'); -const replace = { - [ADDRESSES.bsc.BETH]: ADDRESSES.ethereum.WETH, // beth->weth - "0xfb6115445bff7b52feb98650c87f44907e58f802": ADDRESSES.ethereum.AAVE, // aave -} - -module.exports = fullCoumpoundExports("0x56b4B49f31517be8DacC2ED471BCc20508A0e29D", "bsc", "0x444ADC2D487090A660ebFdDd934d0E962410d8Cc", ADDRESSES.bsc.WBNB, addr=>{ - return replace[addr.toLowerCase()] || `bsc:${addr}` -}) +module.exports.bsc = compoundExports2({ comptroller: '0x56b4B49f31517be8DacC2ED471BCc20508A0e29D' }) diff --git a/projects/filda/abi.json b/projects/filda/abi.json deleted file mode 100644 index 5181f2371d..0000000000 --- a/projects/filda/abi.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "markets": "function markets(address) view returns (bool isSupported, uint256 blockNumber, address interestRateModel, uint256 totalSupply, uint256 supplyRateMantissa, uint256 supplyIndex, uint256 totalBorrows, uint256 borrowRateMantissa, uint256 borrowIndex)", - "totalBorrows": "uint256:totalBorrows", - "borrowRatePerBlock": "uint256:borrowRatePerBlock", - "supplyRatePerBlock": "uint256:supplyRatePerBlock", - "underlying": "address:underlying", - "getCash": "uint256:getCash", - "getAllMarkets": "address[]:getAllMarkets" -} \ No newline at end of file diff --git a/projects/filda/index.js b/projects/filda/index.js index ce4e00009b..d23a4c8960 100644 --- a/projects/filda/index.js +++ b/projects/filda/index.js @@ -1,145 +1,15 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const { compoundExports2 } = require('../helper/compound'); -const sdk = require('@defillama/sdk'); -const abi = require('./abi.json'); -const { unwrapUniswapLPs } = require('../helper/unwrapLPs') -const { compoundExportsWithDifferentBase, compoundExports, usdCompoundExports } = require('../helper/compound'); - -const comptroller = "0xb74633f2022452f377403B638167b0A135DB096d" - -// ask comptroller for all markets array -async function getAllCTokens(block) { - return (await sdk.api.abi.call({ - block, - chain: 'heco', - target: comptroller, - params: [], - abi: abi['getAllMarkets'], - })).output; -} - -async function getUnderlying(block, cToken) { - if (cToken === '0x824151251B38056d54A15E56B73c54ba44811aF8') { - return '0x6f259637dcd74c767781e37bc6133cd6a68aa161';//cHT => HT - } else { - const token = (await sdk.api.abi.call({ - block, - chain: 'heco', - target: cToken, - abi: abi['underlying'], - })).output; - return token - } -} - -function transformAddress(token) { - if (token === '0x6f259637dcd74c767781e37bc6133cd6a68aa161') { - return token - } else if (token === ADDRESSES.heco.DAI_HECO) { - return ADDRESSES.ethereum.DAI;//DAI => DAI - } else if (token === ADDRESSES.heco.USDC_HECO) { - return ADDRESSES.ethereum.USDC;//USDC => USDC - } else if (token === ADDRESSES.heco.TUSD) { - return ADDRESSES.ethereum.TUSD //TUSD - } else { - return 'heco:' + token - } -} - -// returns {[underlying]: {cToken, decimals, symbol}} -async function getMarkets(block) { - let allCTokens = await getAllCTokens(block); - const markets = [] - await ( - Promise.all(allCTokens.map(async (cToken) => { - let underlying = await getUnderlying(block, cToken); - markets.push({ underlying, cToken }) - })) - ); - - return markets; -} - -const replacements = { - "0xc2CB6B5357CcCE1B99Cd22232942D9A225Ea4eb1": { - coingecko: "bitcoin-cash-sv", - decimals: 1e18 - }, - //"heco:0x581EdD7eAb23896513360D7EE8DfE07A5Cad2aBd": "tether", - "0x6514a5Ebff7944099591Ae3e8A5c0979C83B2571": { - coingecko: "neo", - decimals: 1e8 - }, - "0x45e97daD828AD735af1dF0473fc2735F0Fd5330c": { - coingecko: "tezos", - decimals: 1e18, - } -} -function lending(borrowed) { - return async (timestamp, ethBlock, {heco: block}) => { - let balances = {}; - let markets = await getMarkets(block); - - let v2Locked = await sdk.api.abi.multiCall({ - block, - calls: markets.map((market) => ({ - target: market.cToken, - })), - chain: 'heco', - abi: borrowed ? abi.totalBorrows : abi['getCash'], - }); - - const symbols = await sdk.api.abi.multiCall({ - block, - calls: markets.map((market) => ({ - target: market.cToken, - })), - chain: 'heco', - abi: "erc20:symbol", - }); - - const lps = [] - markets.forEach((market, idx) => { - let getCash = v2Locked.output.find((result) => result.input.target === market.cToken); - const symbol = symbols.output.find((result) => result.input.target === market.cToken); - if (getCash.output === null) { - throw new Error("getCash failed") - } - if (symbol.output.endsWith("LP")) { - lps.push({ - token: market.underlying, - balance: getCash.output - }) - } else { - const replacement = replacements[market.underlying] - if (replacement === undefined) { - sdk.util.sumSingleBalance(balances, transformAddress(market.underlying), getCash.output) - } else { - sdk.util.sumSingleBalance(balances, replacement.coingecko, Number(getCash.output) / replacement.decimals) - } - } - }); - - await unwrapUniswapLPs(balances, lps, block, "heco", transformAddress) - return balances; - } -} - -// DANGER!! Oracles are not priced against USD but against other base tokens, such as IOTX module.exports = { - timetravel: true, // Impossible because getBlock will rug tho - heco: { - tvl: lending(false), - borrowed: lending(true) - }, - iotex: compoundExportsWithDifferentBase("0x55E5F6E48FD4715e1c05b9dAfa5CfD0B387425Ee", "iotex", "iotex"), - bsc: compoundExports("0xF0700A310Cb14615a67EEc1A8dAd5791859f65f1", "bsc"), - rei: compoundExportsWithDifferentBase("0xEc1e6e331e990a0D8e40AC51f773e9c998ec7BC3", "rei", "rei-network"), - polygon: compoundExports("0xfBE0f3A3d1405257Bd69691406Eafa73f5095723", "polygon"), - arbitrum: compoundExports("0xF67EF5E77B350A81DcbA5430Bc8bE876eDa8D591", "arbitrum"), - elastos: compoundExportsWithDifferentBase("0xE52792E024697A6be770e5d6F1C455550265B2CD", "elastos", "elastos"), - kava: compoundExportsWithDifferentBase("0xD2CBE89a36df2546eebc71766264e0F306d38196", "kava", "kava"), - bittorrent: compoundExportsWithDifferentBase("0xE52792E024697A6be770e5d6F1C455550265B2CD", "bittorrent", "bittorrent"), + heco: compoundExports2({ comptroller: '0xb74633f2022452f377403B638167b0A135DB096d', cether: '0x824151251b38056d54a15e56b73c54ba44811af8'}), + iotex: compoundExports2({ comptroller: '0x55E5F6E48FD4715e1c05b9dAfa5CfD0B387425Ee',}), + bsc: compoundExports2({ comptroller: '0xF0700A310Cb14615a67EEc1A8dAd5791859f65f1',}), + rei: compoundExports2({ comptroller: '0xEc1e6e331e990a0D8e40AC51f773e9c998ec7BC3',}), + polygon: compoundExports2({ comptroller: '0xfBE0f3A3d1405257Bd69691406Eafa73f5095723',}), + arbitrum: compoundExports2({ comptroller: '0xF67EF5E77B350A81DcbA5430Bc8bE876eDa8D591',}), + elastos: compoundExports2({ comptroller: '0xE52792E024697A6be770e5d6F1C455550265B2CD',}), + kava: compoundExports2({ comptroller: '0xD2CBE89a36df2546eebc71766264e0F306d38196',}), + bittorrent: compoundExports2({ comptroller: '0xE52792E024697A6be770e5d6F1C455550265B2CD',}), hallmarks: [ [Math.floor(new Date('2023-04-24')/1e3), 'Protocol was hacked'], ], diff --git a/projects/flashpulse/index.js b/projects/flashpulse/index.js index 3b4834e09e..46da0dcaec 100644 --- a/projects/flashpulse/index.js +++ b/projects/flashpulse/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - pulse: { tvl: getUniTVL({ factory: '0xD2871d0d39A9cb0cB0505309A5C1F521df25a987', useDefaultCoreAssets: true, fetchBalances: true, }), }, + pulse: { tvl: getUniTVL({ factory: '0xD2871d0d39A9cb0cB0505309A5C1F521df25a987', useDefaultCoreAssets: true, }), }, } \ No newline at end of file diff --git a/projects/fluxfinance/index.js b/projects/fluxfinance/index.js index d8c8cfbc06..e63ad31fea 100644 --- a/projects/fluxfinance/index.js +++ b/projects/fluxfinance/index.js @@ -5,5 +5,5 @@ const comptroller = "0x95Af143a021DF745bc78e845b54591C53a8B3A51"; module.exports = { methodology: `${lendingMarket}. TVL is calculated by getting the market addresses from comptroller and calling the getCash() on-chain method to get the amount of tokens locked in each of these addresses, then we get the price of each token from coingecko.`, - ethereum: compoundExports(comptroller, "ethereum"), + ethereum: compoundExports(comptroller), }; diff --git a/projects/fortress-lending/index.js b/projects/fortress-lending/index.js index a3b0cc4754..dfdd343c60 100644 --- a/projects/fortress-lending/index.js +++ b/projects/fortress-lending/index.js @@ -1,8 +1,7 @@ -const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { compoundExports } = require("../helper/compound"); -const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "bsc", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", ADDRESSES.bsc.WBNB) +const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491") module.exports = { bsc: { diff --git a/projects/fourdex/index.js b/projects/fourdex/index.js index b4e580a8d3..6972d08087 100644 --- a/projects/fourdex/index.js +++ b/projects/fourdex/index.js @@ -5,7 +5,6 @@ module.exports = { tvl: getUniTVL({ factory: "0x0f93649C2BA0F64fA939eCe899f1afD0b15C7Bd2", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/fusefi-lending/index.js b/projects/fusefi-lending/index.js index dacc669eb4..a3e80b5e52 100644 --- a/projects/fusefi-lending/index.js +++ b/projects/fusefi-lending/index.js @@ -1,24 +1,10 @@ -const { usdCompoundExports } = require('../helper/compound'); +const { compoundExports2 } = require('../helper/compound'); -const unitroller_fuse = "0x26a562B713648d7F3D1E1031DCc0860A4F3Fa340" - -const abis = { - oracle: "address:getRegistry", - underlyingPrice: "function getPriceForUnderling(address cToken) view returns (uint256)", -} - -const olalending = usdCompoundExports(unitroller_fuse, "fuse", "0x025B0ff0920298e087308F3b2de0CF6399685909", abis) module.exports = { - fuse:{ - tvl: olalending.tvl, - borrowed: async function(api){ - if(api.timestamp >= 1648684800){ - return {} - } - return olalending.borrowed(api) - } - }, + fuse: compoundExports2({ comptroller: '0x26a562B713648d7F3D1E1031DCc0860A4F3Fa340'}), hallmarks: [ [1648684800, "Ola Finance exploit"] ] -} \ No newline at end of file +} + +module.exports.fuse.borrowed = () => ({}) \ No newline at end of file diff --git a/projects/galador-io/index.js b/projects/galador-io/index.js index 8d3f6eb064..6e98786ece 100644 --- a/projects/galador-io/index.js +++ b/projects/galador-io/index.js @@ -3,6 +3,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, mantle: { - tvl: getUniTVL({ factory: '0x6F602b6F11F174c627813262fA713F334ca20aA6', fetchBalances: true, useDefaultCoreAssets: true }), + tvl: getUniTVL({ factory: '0x6F602b6F11F174c627813262fA713F334ca20aA6', useDefaultCoreAssets: true }), }, }; \ No newline at end of file diff --git a/projects/ghost-ex/index.js b/projects/ghost-ex/index.js index 6185e9a65b..40a6fac188 100644 --- a/projects/ghost-ex/index.js +++ b/projects/ghost-ex/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: "0xbf246e99a848d9bf592c216118973204162d9650", useDefaultCoreAssets: true, - fetchBalances: true, }), }, } diff --git a/projects/goldbank/index.js b/projects/goldbank/index.js index bc8ad24489..00d01f7023 100644 --- a/projects/goldbank/index.js +++ b/projects/goldbank/index.js @@ -8,6 +8,6 @@ module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", arbitrum: { - ...compoundExports(unitroller, "arbitrum"), + ...compoundExports(unitroller), }, }; \ No newline at end of file diff --git a/projects/helper/cache/compound.js b/projects/helper/cache/compound.js index 7eec645fc9..5aef7b0d52 100644 --- a/projects/helper/cache/compound.js +++ b/projects/helper/cache/compound.js @@ -1,17 +1,11 @@ const sdk = require('@defillama/sdk'); const abi = require('../abis/compound.json'); -const { nullAddress, unwrapLPsAuto } = require('../unwrapLPs'); -const { requery } = require("../requery"); -const { getCache, setCache } = require("../cache"); +const { nullAddress, } = require('../unwrapLPs'); const { getChainTransform, getFixBalancesSync, } = require('../portedTokens'); -const { usdtAddress } = require('../balances'); -const agoraAbi = require("../../agora/abi.json"); -const project = 'compound' -const getKey = (chain, addr) => `${chain}/${addr}` -function compoundExports(comptroller, { blacklistedTokens = [], resolveLps = false, transformAdress, abis = {}} = {}) { +function compoundExports(comptroller, { blacklistedTokens = [], transformAdress, abis = {}} = {}) { let response abis = { ...abi, ...abis } diff --git a/projects/helper/compound.js b/projects/helper/compound.js index 1431b9681c..eee33c2a43 100644 --- a/projects/helper/compound.js +++ b/projects/helper/compound.js @@ -1,342 +1,60 @@ -const ADDRESSES = require('./coreAssets.json') - -const sdk = require('@defillama/sdk'); const abi = require('./abis/compound.json'); -const { unwrapUniswapLPs } = require('./unwrapLPs'); -const { requery } = require("./requery"); -const { getChainTransform, transformBalances } = require('./portedTokens'); -const { usdtAddress } = require('./balances'); -const agoraAbi = require("./../agora/abi.json"); -const { sumTokens2, nullAddress, unwrapLPsAuto, } = require('./unwrapLPs') +const { sumTokens2, nullAddress, } = require('./unwrapLPs') const methodologies = require('./methodologies'); -// ask comptroller for all markets array -async function getAllCTokens(comptroller, block, chain, allMarketsAbi = abi['getAllMarkets']) { - return (await sdk.api.abi.call({ - block, - target: comptroller, - params: [], - abi: allMarketsAbi, - chain - })).output; -} - // returns [{cToken, underlying}] -async function getMarkets(comptroller, block, chain, cether, cetheEquivalent, blacklist = [], abis = {}) { - const marketKey = `${chain}:${comptroller}:${block}` - - if (!marketsCache[marketKey]) marketsCache[marketKey] = _getMarkets() - return marketsCache[marketKey] - - async function _getMarkets() { - let allCTokens = await getAllCTokens(comptroller, block, chain, abis.getAllMarkets); - const markets = [] - const calls = [] - allCTokens.forEach(cToken => { - cToken = cToken.toLowerCase() - if (blacklist.includes(cToken)) return; - if (cether && (cToken === cether.toLowerCase?.() || cether.includes(cToken))) { - markets.push({ underlying: cetheEquivalent, cToken }) - return; - } - if (cToken === '0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5'.toLowerCase()) { - markets.push({ underlying: ADDRESSES.ethereum.WETH, cToken }) //cETH => WETH - return; - } - if (cToken === '0x5C0401e81Bc07Ca70fAD469b451682c0d747Ef1c'.toLowerCase() && chain === 'avax') { - markets.push({ underlying: ADDRESSES.avax.WAVAX, cToken }) - return; - } - if (['0xd2ec53e8dd00d204d3d9313af5474eb9f5188ef6', '0x0aeadb9d4c6a80462a47e87e76e487fa8b9a37d7'].includes(cToken) && chain === 'rsk') { - markets.push({ underlying: ADDRESSES.rsk.WRBTC1, cToken }) - return; - } - - calls.push({ target: cToken }) - }) - - const underlyings = await sdk.api.abi.multiCall({ - abi: abi['underlying'], - calls, - chain, block, - }) - - await requery(underlyings, chain, block, abi) - - const isCeth = underlyings.output.find(i => !i.output) - if (isCeth) - throw new Error(`${isCeth.input.target} market rugged, is that market CETH?`) - - underlyings.output.forEach(({ output, input: { target } }) => markets.push({ cToken: target, underlying: output })) - - return markets; - } -} -async function unwrapPuffTokens(balances, lpPositions, block) { - const pricePerShare = (await sdk.api.abi.multiCall({ - block, - abi: agoraAbi.getPricePerFullShare, - calls: lpPositions.map(p => ({ - target: p.token - })), - chain: 'metis' - })).output; - const underlying = (await sdk.api.abi.multiCall({ - block, - abi: agoraAbi.want, - calls: lpPositions.map(p => ({ - target: p.token - })), - chain: 'metis' - })).output; - - const newLpPositions = []; - for (let i = 0; i < lpPositions.length; i++) { - newLpPositions.push({ balance: lpPositions[i].balance * pricePerShare[i].output / 10 ** 18, token: underlying[i].output }) - } - - await unwrapUniswapLPs( - balances, - newLpPositions, - block, - 'metis' - ); +async function getMarkets(comptroller, api, cether, cetheEquivalent = nullAddress, blacklist = [], abis = {}) { + + if (cether) { + if (!Array.isArray(cether)) cether = [cether] + cether = new Set(cether.map(i => i.toLowerCase())) + } + const blacklistSet = new Set([...blacklist].map(i => i.toLowerCase())) + const cTokens = (await api.call({ abi: abis.getAllMarkets, target: comptroller })).map(i => i.toLowerCase()) + const underlyings = await api.multiCall({ abi: abi.underlying, calls: cTokens, permitFailure: true }) + + const markets = [] + underlyings.forEach((underlying, i) => { + const cToken = cTokens[i] + if (cether?.has(cToken)) underlying = cetheEquivalent + if (blacklistSet.has(cToken)) return; + if (underlying) markets.push({ cToken, underlying }) + else throw new Error(`Market rugged, is that market CETH? ${cToken}`) + }) + return markets; } -let marketsCache = {} - -function getCompoundV2Tvl(comptroller, chain, transformAdress, - cether = "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", cetheEquivalent = ADDRESSES.ethereum.WETH, - borrowed = false, checkForLPTokens = undefined, - { - fetchBalances = false, - blacklistedTokens = [], - abis = {}, - resolveLPs = true, - } = {}) { +function _getCompoundV2Tvl(comptroller, cether, cetheEquivalent, borrowed = false, { blacklistedTokens = [], abis = {}, } = {}) { abis = { ...abi, ...abis } - blacklistedTokens = blacklistedTokens.map(i => i.toLowerCase()) return async (api) => { - if (!api) { - api = new sdk.ChainApi({ chain, }) - } - chain = api.chain - const block = api.block - if (!transformAdress) transformAdress = await getChainTransform(chain) - let balances = {}; - let markets = await getMarkets(comptroller, block, chain, cether, cetheEquivalent, blacklistedTokens, abis) - if (!borrowed && fetchBalances) { - return sumTokens2({ api, tokensAndOwners: markets.map(i => [i.underlying, i.cToken]), blacklistedTokens, }) - } - const cTokenCalls = markets.map(market => ({ - target: market.cToken, - })) - // Get V2 tokens locked - let v2Locked = await sdk.api.abi.multiCall({ - block, - chain, - calls: cTokenCalls, - abi: borrowed ? abis.totalBorrows : abis.getCash, - }); - - let symbols; - if (checkForLPTokens !== undefined) { - symbols = await sdk.api.abi.multiCall({ - block, - chain, - calls: cTokenCalls, - abi: "erc20:symbol", - }); - } - - const lpPositions = [] - markets.forEach((market, idx) => { - const underlying = market.underlying.toLowerCase() - if (blacklistedTokens.includes(underlying)) return; - let getCash = v2Locked.output.find((result) => result.input.target === market.cToken); - if (checkForLPTokens !== undefined && checkForLPTokens(symbols.output[idx].output)) { - lpPositions.push({ - token: underlying, - balance: getCash.output - }) - } else { - sdk.util.sumSingleBalance(balances, transformAdress(underlying), getCash.output) - } - }); - - if (comptroller == "0x92DcecEaF4c0fDA373899FEea00032E8E8Da58Da") { - await unwrapPuffTokens(balances, lpPositions, block) - } else if (lpPositions.length > 0) { - await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAdress) - } - - if (resolveLPs) await unwrapLPsAuto({ balances, block, chain, abis}) - - return transformBalances(chain, balances); - } -} - -const BigNumber = require('bignumber.js').default; -const { toUSDTBalances } = require('./balances'); - -// ask comptroller for oracle -async function getOracle(block, chain, comptroller, oracleAbi) { - const { output: oracle } = await sdk.api.abi.call({ - target: comptroller, - abi: oracleAbi, - block, - chain: chain, - }); - return oracle; -} - -async function getUnderlyingDecimalsMultiple(block, chain, marketData, cether) { - marketData = marketData.filter(i => i.underlying) - const response = {} - const calls = marketData.map(i => ({ target: i.underlying })) - const { output: decimals } = await sdk.api.abi.multiCall({ - calls, - abi: "erc20:decimals", - block, - chain, - permitFailure: true, - }) - - decimals.forEach(({ output }, i) => { - if (output !== null) - response[marketData[i].cToken] = output - }) - - return response -} - -async function getCashMultiple(block, chain, tokens, borrowed) { - const calls = tokens.map(t => ({ target: t })) - const { output: cash } = await sdk.api.abi.multiCall({ - calls, - abi: borrowed ? abi.totalBorrows : abi['getCash'], - block, - chain, - }); - const response = {} - cash.forEach(({ input, output }) => response[input.target] = output) - return response; -} + let markets = await getMarkets(comptroller, api, cether, cetheEquivalent, blacklistedTokens, abis) + const cTokens = markets.map(market => market.cToken) + const tokens = markets.map(market => market.underlying) + if (!borrowed) + return sumTokens2({ api, tokensAndOwners2: [tokens, cTokens], blacklistedTokens, resolveLP: true, }) -async function getUnderlyingPriceMultiple(block, chain, oracle, tokens, methodAbi) { - const calls = tokens.map(t => ({ params: [t] })) - const { output: underlyingPrice } = await sdk.api.abi.multiCall({ - target: oracle, - abi: methodAbi, - block, - chain, - calls, - }); - const response = {} - underlyingPrice.forEach(({ input, output }) => response[input.params[0]] = output) - return response; -} + let v2Locked = await api.multiCall({ calls: cTokens, abi: borrowed ? abis.totalBorrows : abis.getCash, }) + api.add(tokens, v2Locked) + blacklistedTokens.forEach(token => api.removeTokenBalance(token)) -function getCompoundUsdTvl(comptroller, chain, cether, borrowed, abis = { - oracle: abi['oracle'], - underlyingPrice: abi['getUnderlyingPrice'], - getAllMarkets: abi['getAllMarkets'] -}, { - blacklist = [], - cetheEquivalent = undefined, -} = {}) { - return async (timestamp, ethBlock, { [chain]: block }) => { - let tvl = new BigNumber('0'); - blacklist = blacklist.map(i => i.toLowerCase()) - const marketData = await getMarkets(comptroller, block, chain, cether, cetheEquivalent, blacklist, abis) - let allMarkets = marketData.map(i => i.cToken); - // allMarkets = allMarkets.filter(token => !blacklist.includes(token.toLowerCase())) // taken care of by getMarkets - let oracle = await getOracle(block, chain, comptroller, abis.oracle); - const amounts = await getCashMultiple(block, chain, allMarkets, borrowed) - const decimalsAll = await getUnderlyingDecimalsMultiple(block, chain, marketData, cether) - const underlyingPrices = await getUnderlyingPriceMultiple(block, chain, oracle, allMarkets, abis.underlyingPrice) - - allMarkets.forEach(token => { - let amount = new BigNumber(amounts[token]); - let decimals = decimalsAll[token] ?? 0; - let locked = amount.div(10 ** decimals); - let underlyingPrice = new BigNumber(underlyingPrices[token]).div(10 ** (18 + 18 - decimals)) - tvl = tvl.plus(locked.times(underlyingPrice)); - }) - return toUSDTBalances(tvl.toNumber()); + return sumTokens2({ api, resolveLP: true, }); } } -function compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens = [], fetchBalances, abis = {}, resolveLPs=true } = {}) { - if (cether !== undefined && cetheEquivalent === undefined) { - throw new Error("You need to define the underlying for native cAsset") - } - return { - tvl: getCompoundV2Tvl(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, false, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }), - borrowed: getCompoundV2Tvl(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, true, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }) - } -} - -function compoundExportsWithAsyncTransform(comptroller, chain, cether, cetheEquivalent, options) { - return { - tvl: async (...args) => { - const transformAddress = await getChainTransform(chain) - return getCompoundV2Tvl(comptroller, chain, transformAddress, cether, cetheEquivalent, false, undefined, options)(...args) - }, - borrowed: async (...args) => { - const transformAddress = await getChainTransform(chain) - return getCompoundV2Tvl(comptroller, chain, transformAddress, cether, cetheEquivalent, true, undefined, options)(...args) - }, - } -} - -function fullCoumpoundExports(comptroller, chain, cether, cetheEquivalent, transformAdress) { - return { - [chain]: compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdress) - } -} - -function usdCompoundExports(comptroller, chain, cether, abis, options = {}) { - return { - tvl: getCompoundUsdTvl(comptroller, chain, cether, false, abis, options,), - borrowed: getCompoundUsdTvl(comptroller, chain, cether, true, abis, options,) - } -} - -function compoundExportsWithDifferentBase(comptroller, chain, token) { - const raw = usdCompoundExports(comptroller, chain) - async function tvl(...params) { - const tvl = await raw.tvl(...params) - return { - [token]: Number(tvl[usdtAddress]) / 1e6 - } - } - - async function borrowed(...params) { - const tvl = await raw.borrowed(...params) - return { - [token]: Number(tvl[usdtAddress]) / 1e6 - } - } +function compoundExports(comptroller, cether, cetheEquivalent = nullAddress, { blacklistedTokens = [], abis = {}, } = {}) { return { - tvl, - borrowed + tvl: _getCompoundV2Tvl(comptroller, cether, cetheEquivalent, false, { blacklistedTokens, abis, }), + borrowed: _getCompoundV2Tvl(comptroller, cether, cetheEquivalent, true, { blacklistedTokens, abis, }) } } -function compoundExports2({ comptroller, chain, cether, cetheEquivalent = nullAddress, transformAdressRaw, checkForLPTokens, blacklistedTokens = [], fetchBalances = true, abis = {} }) { - return compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, }) +function compoundExports2({ comptroller, cether, cetheEquivalent = nullAddress, blacklistedTokens = [], abis = {}, }) { + return compoundExports(comptroller, cether, cetheEquivalent, { blacklistedTokens, abis, }) } module.exports = { methodology: methodologies.lendingMarket, - getCompoundV2Tvl, compoundExports, compoundExports2, - getCompoundUsdTvl, - compoundExportsWithAsyncTransform, - fullCoumpoundExports, - usdCompoundExports, - compoundExportsWithDifferentBase }; diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index e32be7725f..9241e924e5 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -1,4 +1,3 @@ -const { decimals } = require('@defillama/sdk/build/erc20') let coreAssets = require('./coreAssets.json') const ADDRESSES = coreAssets const nullAddress = ADDRESSES.null @@ -50,6 +49,26 @@ const fixBalancesTokens = { ArbEth: { coingeckoId:'ethereum', decimals: 18 }, ArbUsdc: { coingeckoId:'usd-coin', decimals: 6 }, }, + thundercore: { + '0xc3c857a9e5be042c8acf4f2827aa053e93b5d039': { coingeckoId: 'thunder-token', decimals: 18 }, + }, + oasis: { + '0x0000000000000000000000000000000000000000': { coingeckoId: 'oasis-network', decimals: 18 }, + }, + base: { + '0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c': { coingeckoId: 'rocket-pool-eth', decimals: 18 }, + }, + op_bnb: { + '0x7c6b91d9be155a6db01f749217d76ff02a7227f2': { coingeckoId: 'binance-bitcoin', decimals: 18 }, + '0xe7798f023fc62146e8aa1b36da45fb70855a77ea': { coingeckoId: 'ethereum', decimals: 18 }, + '0x50c5725949a6f0c72e6c4a641f24049a917db0cb': { coingeckoId: 'first-digital-usd', decimals: 18 }, + }, + optimism: { + '0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff': { coingeckoId: 'wrapped-eeth', decimals: 18 }, + }, + moonriver: { + '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c': { coingeckoId: 'ethereum', decimals: 18 }, + }, islm: { '0x0ce35b0d42608ca54eb7bcc8044f7087c18e7717': { coingeckoId: 'usd-coin', decimals: 6 }, }, diff --git a/projects/helper/utils.js b/projects/helper/utils.js index c588d76acb..cbda36f2ed 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -68,7 +68,8 @@ function isLP(symbol, token, chain) { if (chain === 'moonriver' && ['HBLP'].includes(symbol)) return true if (chain === 'ethpow' && ['LFG_LP'].includes(symbol)) return true if (chain === 'aurora' && ['wLP'].includes(symbol)) return true - if (chain === 'oasis' && ['LPT'].includes(symbol)) return true + if (chain === 'oasis' && ['LPT', 'GLP'].includes(symbol)) return true + if (chain === 'iotex' && ['MIMO-LP'].includes(symbol)) return true if (chain === 'base' && ['RCKT-V2'].includes(symbol)) return true if (chain === 'wan' && ['WSLP'].includes(symbol)) return true if (chain === 'telos' && ['zLP'].includes(symbol)) return true diff --git a/projects/hexaswap/index.js b/projects/hexaswap/index.js index 4feae8d0c7..583e1cd8c0 100644 --- a/projects/hexaswap/index.js +++ b/projects/hexaswap/index.js @@ -4,7 +4,6 @@ module.exports = { misrepresentedTokens: true, telos: { tvl: getUniTVL({ - fetchBalances: true, useDefaultCoreAssets: true, factory: '0x7853cDd20592aaff59D6e89B59bF67499564C525', }) diff --git a/projects/hope-swap/index.js b/projects/hope-swap/index.js index 1c8fabe0c4..00c5071ad3 100644 --- a/projects/hope-swap/index.js +++ b/projects/hope-swap/index.js @@ -3,6 +3,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, ethereum: { - tvl: getUniTVL({ factory: '0x26F53fbADeEb777fb2A122dC703433d79241b64e', useDefaultCoreAssets: true, fetchBalances: true }), + tvl: getUniTVL({ factory: '0x26F53fbADeEb777fb2A122dC703433d79241b64e', useDefaultCoreAssets: true, }), }, }; \ No newline at end of file diff --git a/projects/huckleberry-lending/index.js b/projects/huckleberry-lending/index.js index 0316dbf678..3d8df54037 100644 --- a/projects/huckleberry-lending/index.js +++ b/projects/huckleberry-lending/index.js @@ -1,18 +1,7 @@ -const { usdCompoundExports } = require('../helper/compound') -const sdk = require('@defillama/sdk') - +const { compoundExports2 } = require('../helper/compound') const unitroller = '0xcffef313b69d83cb9ba35d9c0f882b027b846ddc' -const lendingMarket = usdCompoundExports(unitroller, "moonriver", "0x455D0c83623215095849AbCF7Cc046f78E3EDAe0") - - - module.exports = { - methodology: "Liquidity on DEX and supplied and borrowed amounts found using the comptroller address(0xcffef313b69d83cb9ba35d9c0f882b027b846ddc)", - misrepresentedTokens: true, - moonriver: { - tvl: lendingMarket.tvl, - borrowed: lendingMarket.borrowed - } + moonriver: compoundExports2({ comptroller: unitroller, cether: '0x455d0c83623215095849abcf7cc046f78e3edae0' }), } \ No newline at end of file diff --git a/projects/hundredfinance/index.js b/projects/hundredfinance/index.js index 54510aaca7..09e4115b04 100644 --- a/projects/hundredfinance/index.js +++ b/projects/hundredfinance/index.js @@ -1,76 +1,20 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {compoundExports, compoundExportsWithAsyncTransform} = require('../helper/compound') -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); +const { compoundExports2 } = require('../helper/compound') const comptroller = "0x0f390559f258eb8591c8e31cf0905e97cf36ace2" -const usdcEth = ADDRESSES.ethereum.USDC -const usdcFantom = ADDRESSES.fantom.USDC -const usdcArbitrum = ADDRESSES.arbitrum.USDC - -const daiEth = ADDRESSES.ethereum.DAI -const daiFantom = ADDRESSES.fantom.DAI - -const usdtEth = ADDRESSES.ethereum.USDT -const usdtArbitrum = ADDRESSES.arbitrum.USDT - -const usdcFantomBAMM = "0xEDC7905a491fF335685e2F2F1552541705138A3D" -const daiFantomBAMM = "0x6d62d6Af9b82CDfA3A7d16601DDbCF8970634d22" -const usdcArbitrumBAMM = "0x04208f296039f482810B550ae0d68c3E1A5EB719" -const usdtArbitrumBAMM = "0x24099000AE45558Ce4D049ad46DDaaf71429b168" - - -const bamms = { - "fantom" : [ - {"bamm" : usdcFantomBAMM, "underlying" : usdcFantom, "underlyingEth" : usdcEth }, - { "bamm" : daiFantomBAMM, "underlying" : daiFantom, "underlyingEth" : daiEth } - ], - "arbitrum" : [ - {"bamm" : usdcArbitrumBAMM, "underlying" : usdcArbitrum, "underlyingEth" : usdcEth }, - { "bamm" : usdtArbitrumBAMM, "underlying" : usdtArbitrum, "underlyingEth" : usdtEth } - ] -} - -async function bammTvlFunc(chain, retTvl, unixTimestamp, ethBlock, chainBlocks) { - const block = chainBlocks[chain] - - const balances = await retTvl(unixTimestamp, ethBlock, chainBlocks) - - for(let bamm of bamms[chain]) { - const bammBalance = ( - await sdk.api.erc20.balanceOf({ - target: bamm["underlying"], - owner: bamm["bamm"], - block: block, - chain: chain, - }) - ).output; - - const ethToken = bamm["underlyingEth"] - sdk.util.sumSingleBalance(balances, ethToken, bammBalance) - } - - return balances -} - -function tvlWithBamm() { - const chain = arguments[1] - const retVal = compoundExportsWithAsyncTransform(...arguments) - return {tvl: async(...args)=> bammTvlFunc(chain, retVal.tvl, ...args), borrowed: retVal.borrowed} -} - -module.exports={ +module.exports = { hallmarks: [ [1647302400, "Reentrancy attack"], [1681541920, "Protocol hacked (oc Optimism)"], ], - ethereum:compoundExports(comptroller, "ethereum", "0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D", ADDRESSES.ethereum.WETH), - arbitrum:tvlWithBamm(comptroller, "arbitrum", "0x8e15a22853A0A60a0FBB0d875055A8E66cff0235", ADDRESSES.arbitrum.WETH), - fantom:tvlWithBamm(comptroller, "fantom", "0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D", ADDRESSES.fantom.WFTM), - harmony:compoundExportsWithAsyncTransform(comptroller, "harmony", "0xbb93C7F378B9b531216f9aD7b5748be189A55807", ADDRESSES.harmony.WONE), - moonriver:compoundExportsWithAsyncTransform("0x7d166777bd19a916c2edf5f1fc1ec138b37e7391", "moonriver", "0xd6fcBCcfC375c2C61d7eE2952B329DcEbA2D4e10", "0x98878b06940ae243284ca214f92bb71a2b032b8a"), - xdai:compoundExportsWithAsyncTransform("0x6bb6ebCf3aC808E26545d59EA60F27A202cE8586", "xdai", "0x6eDCB931168C9F7C20144f201537c0243b19dCA4", ADDRESSES.xdai.WXDAI), - polygon:compoundExportsWithAsyncTransform("0xedba32185baf7fef9a26ca567bc4a6cbe426e499", "polygon", "0xEbd7f3349AbA8bB15b897e03D6c1a4Ba95B55e31", ADDRESSES.polygon.WMATIC_2), - optimism:compoundExportsWithAsyncTransform("0x5a5755E1916F547D04eF43176d4cbe0de4503d5d", "optimism", "0x1A61A72F5Cf5e857f15ee502210b81f8B3a66263", ADDRESSES.tombchain.FTM), + ethereum: compoundExports2({ comptroller, cether: '0xfcd8570ad81e6c77b8d252bebeba62ed980bd64d' }), + arbitrum: compoundExports2({ comptroller, cether: '0x8e15a22853a0a60a0fbb0d875055a8e66cff0235' }), + fantom: compoundExports2({ comptroller, cether: '0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D' }), + harmony: compoundExports2({ comptroller, cether: '0xbb93c7f378b9b531216f9ad7b5748be189a55807' }), + moonriver: compoundExports2({ comptroller: "0x7d166777bd19a916c2edf5f1fc1ec138b37e7391", cether: '0xd6fcbccfc375c2c61d7ee2952b329dceba2d4e10' }), + xdai: compoundExports2({ comptroller: "0x6bb6ebCf3aC808E26545d59EA60F27A202cE8586", cether: '0x6edcb931168c9f7c20144f201537c0243b19dca4' }), + polygon: compoundExports2({ comptroller: "0xedba32185baf7fef9a26ca567bc4a6cbe426e499", cether: '0xEbd7f3349AbA8bB15b897e03D6c1a4Ba95B55e31' }), + optimism: compoundExports2({ comptroller: "0x5a5755E1916F547D04eF43176d4cbe0de4503d5d", cether: '0x1A61A72F5Cf5e857f15ee502210b81f8B3a66263' }), } + +module.exports.optimism.borrowed = () => ({}) diff --git a/projects/iceswap/index.js b/projects/iceswap/index.js index eb2acf7e1d..26fcdd3422 100644 --- a/projects/iceswap/index.js +++ b/projects/iceswap/index.js @@ -1,7 +1,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); const FACTORY = "0x79b8F15a3bEEcd5014B748499Ec89692665ea368"; -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true, }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, }) module.exports = { misrepresentedTokens: true, diff --git a/projects/infusion/index.js b/projects/infusion/index.js index 65c9f6f5d9..4b751f0c0a 100644 --- a/projects/infusion/index.js +++ b/projects/infusion/index.js @@ -3,6 +3,6 @@ const { getUniTVL } = require('../helper/unknownTokens.js') module.exports = { misrepresentedTokens: true, base: { - tvl: getUniTVL({ factory: '0x2D9A3a2bd6400eE28d770c7254cA840c82faf23f', hasStablePools: true, useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: '0x2D9A3a2bd6400eE28d770c7254cA840c82faf23f', hasStablePools: true, useDefaultCoreAssets: true, }), }, } diff --git a/projects/ironbank/index.js b/projects/ironbank/index.js index 0f55648591..d1c485f53a 100644 --- a/projects/ironbank/index.js +++ b/projects/ironbank/index.js @@ -1,11 +1,9 @@ -const { getCompoundV2Tvl, compoundExports, usdCompoundExports } = require("../helper/compound"); +const { compoundExports2 } = require("../helper/compound"); - - -const ftmSFIreplace = addr=> addr==="0x924828a9Fb17d47D0eb64b57271D10706699Ff11" ? "0xb753428af26e81097e7fd17f40c88aaa3e04902c":`fantom:${addr}` module.exports = { start: 1599552000, // 09/08/2020 @ 8:00am (UTC) - ethereum: compoundExports("0xAB1c342C7bf5Ec5F02ADEA1c2270670bCa144CbB", "ethereum",undefined,undefined,undefined,undefined,{ + ethereum: compoundExports2({ + comptroller: '0xAB1c342C7bf5Ec5F02ADEA1c2270670bCa144CbB', blacklistedTokens: [ '0x96E61422b6A9bA0e068B6c5ADd4fFaBC6a4aae27', //ibEUR '0x95dfdc8161832e4ff7816ac4b6367ce201538253', //ibKRW @@ -17,10 +15,7 @@ module.exports = { '0x4e3a36A633f63aee0aB57b5054EC78867CB3C0b8', //old hacked sUSD cream market ] }), - fantom: { - tvl: getCompoundV2Tvl("0x4250a6d3bd57455d7c6821eecb6206f507576cd2", "fantom", ftmSFIreplace, undefined, undefined, false), - borrowed: getCompoundV2Tvl("0x4250a6d3bd57455d7c6821eecb6206f507576cd2", "fantom", ftmSFIreplace, undefined, undefined, true) - }, - avax:compoundExports("0x2eE80614Ccbc5e28654324a66A396458Fa5cD7Cc", "avax"), - optimism: compoundExports("0xE0B57FEEd45e7D908f2d0DaCd26F113Cf26715BF", "optimism") -}; + fantom: compoundExports2({ comptroller: '0x4250a6d3bd57455d7c6821eecb6206f507576cd2' }), + avax: compoundExports2({ comptroller: '0x2eE80614Ccbc5e28654324a66A396458Fa5cD7Cc' }), + optimism: compoundExports2({ comptroller: '0xE0B57FEEd45e7D908f2d0DaCd26F113Cf26715BF' }), +} diff --git a/projects/ironfinance/index.js b/projects/ironfinance/index.js index cbf7041091..574f4a1346 100644 --- a/projects/ironfinance/index.js +++ b/projects/ironfinance/index.js @@ -128,24 +128,24 @@ const fantomTvl = async (timestamp, ethBlock, chainBlocks) => { return tvl; }; -const {tvl: polygonLending, borrowed: polygonBorrowed} = - compoundExports(Contracts.polygon.lend.ironController, "polygon", "0xCa0F37f73174a28a64552D426590d3eD601ecCa1", Contracts.polygon.wrappedNative) -const {tvl: fantomLending, borrowed: fantomBorrowed} = - compoundExports(Contracts.fantom.lend.ironController, "fantom", "0xdfce3E14a8c77D32fe2455a9E56424F149E2F271", Contracts.fantom.wrappedNative) +const { tvl: polygonLending, borrowed: polygonBorrowed } = + compoundExports(Contracts.polygon.lend.ironController, "0xCa0F37f73174a28a64552D426590d3eD601ecCa1", Contracts.polygon.wrappedNative) +const { tvl: fantomLending, borrowed: fantomBorrowed } = + compoundExports(Contracts.fantom.lend.ironController, "0xdfce3E14a8c77D32fe2455a9E56424F149E2F271", Contracts.fantom.wrappedNative) module.exports = { - polygon: { + polygon: { tvl: sdk.util.sumChainTvls([polygonTvl, polygonLending]), borrowed: polygonBorrowed }, - avax:{ + avax: { tvl: avaxTvl, }, fantom: { - tvl: sdk.util.sumChainTvls([fantomTvl, fantomLending]), + tvl: sdk.util.sumChainTvls([fantomTvl, fantomLending]), borrowed: fantomBorrowed }, hallmarks: [ - [1652270400,"Re-entrancy Exploit"] + [1652270400, "Re-entrancy Exploit"] ], }; diff --git a/projects/issuaa/index.js b/projects/issuaa/index.js index 54a0b8406a..b6b40250bd 100644 --- a/projects/issuaa/index.js +++ b/projects/issuaa/index.js @@ -11,7 +11,7 @@ module.exports = { factory: '0xC7e06CAF7880421cD21E98656B4755B3Df61537b', useDefaultCoreAssets: true, hasStablePools: true, - fetchBalances: true, + fetchBalances: true, // get reserves call fails }) } } \ No newline at end of file diff --git a/projects/ixswap/index.js b/projects/ixswap/index.js index 31154e2017..e0bdaeac3a 100644 --- a/projects/ixswap/index.js +++ b/projects/ixswap/index.js @@ -8,7 +8,7 @@ const STAKING_CONTRACTS = [ module.exports = { polygon:{ - tvl: getUniTVL({ factory: '0xc2D0e0bc81494adB71Ce9Aa350cC875DaE12D81D', fetchBalances: true, blacklistedTokens: [IXS_POLYGON] }), + tvl: getUniTVL({ factory: '0xc2D0e0bc81494adB71Ce9Aa350cC875DaE12D81D', blacklistedTokens: [IXS_POLYGON] }), staking: staking(STAKING_CONTRACTS, IXS_POLYGON), }, } \ No newline at end of file diff --git a/projects/jadeswap/index.js b/projects/jadeswap/index.js index a1dde66f40..e6f0213094 100644 --- a/projects/jadeswap/index.js +++ b/projects/jadeswap/index.js @@ -4,7 +4,6 @@ const sdk = require("@defillama/sdk"); const uniTvl = getUniTVL({ factory: "0xb20a6389cA872d094f3c7A8180fE5BAb431BD794", useDefaultCoreAssets: true, - fetchBalances: true, }); const masterchef = "0xcC507803A4b832684154C4E395D92A6EDbEAfE52"; const jade = "0x7c70229F108D3d506Cff8Ea243FFA57344Fc4cE1"; diff --git a/projects/jetfuelfinance/index.js b/projects/jetfuelfinance/index.js index ff15a4a38a..4988a81dad 100644 --- a/projects/jetfuelfinance/index.js +++ b/projects/jetfuelfinance/index.js @@ -109,7 +109,7 @@ const bscTvl = async (timestamp, block, chainBlocks) => { return balances; }; -const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "bsc", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", ADDRESSES.bsc.WBNB) +const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", ADDRESSES.bsc.WBNB) module.exports = { bsc: { diff --git a/projects/jiblend/index.js b/projects/jiblend/index.js index 77e2bef40c..849fc5eb67 100644 --- a/projects/jiblend/index.js +++ b/projects/jiblend/index.js @@ -4,6 +4,5 @@ module.exports = { jbc: compoundExports2({ comptroller: '0x603122Cdd36abCD164e448e1f3fbd33730edf35a', cether: '0xAc3e5aD93DDeac9B32772c8A864B5E73820c5d16', - fetchBalances: true, }) }; \ No newline at end of file diff --git a/projects/jumpdefi/index.js b/projects/jumpdefi/index.js index b75f250f77..ead26216fd 100644 --- a/projects/jumpdefi/index.js +++ b/projects/jumpdefi/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require("../helper/unknownTokens"); -module.exports = uniTvlExport("telos", "0xff59EBFf3e3F72E8162eA2aB0a0d1C9258692dF5", { fetchBalances: true }); +module.exports = uniTvlExport("telos", "0xff59EBFf3e3F72E8162eA2aB0a0d1C9258692dF5"); diff --git a/projects/kapinus/index.js b/projects/kapinus/index.js index 601109737a..6a2d5369ca 100644 --- a/projects/kapinus/index.js +++ b/projects/kapinus/index.js @@ -7,7 +7,6 @@ module.exports = { factory: '0x70e881fa43a7124e36639b54162395451cef1922', abi: 'uint256:allPairs', useDefaultCoreAssets: true, - fetchBalances: true, }) }, }; diff --git a/projects/kewl/index.js b/projects/kewl/index.js index 90684e4225..2a18513e60 100644 --- a/projects/kewl/index.js +++ b/projects/kewl/index.js @@ -9,7 +9,6 @@ module.exports = { tvl: getUniTVL({ factory: "0xA0BB8f9865f732C277d0C162249A4F6c157ae9D0", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/kinetix-v2/index.js b/projects/kinetix-v2/index.js index b8c1fa524f..e954dd1f36 100644 --- a/projects/kinetix-v2/index.js +++ b/projects/kinetix-v2/index.js @@ -6,14 +6,12 @@ module.exports = { tvl: getUniTVL({ factory: "0xE8E917BC80A26CDacc9aA42C0F4965d2E1Fa52da", useDefaultCoreAssets: true, - fetchBalances: true, }), }, base: { tvl: getUniTVL({ factory: "0x8aD3d3e6B1b7B65138bD508E48330B544539b2C3", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/klend/index.js b/projects/klend/index.js index 1cc6f5d58f..b8f20192f4 100644 --- a/projects/klend/index.js +++ b/projects/klend/index.js @@ -1,19 +1,19 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); -const {compoundExports} = require('../helper/compound'); -const {unwrapUniswapLPs} = require('../helper/unwrapLPs'); +const { compoundExports } = require('../helper/compound'); +const { unwrapUniswapLPs } = require('../helper/unwrapLPs'); // BSC const unitroller = "0xA6bEd5B7320941eA185A315D1292492F7Fdd1e5c"; const kBnb = "0x2C334c6cBC0547e759084bD8D469f933B17Ff481"; const wbnb = ADDRESSES.bsc.WBNB const bscPools = [ - "0xf1D447656692d51d4DB7057104Ac6E97029A7790", - "0x95D4D2D88C96cE96c97A912Aa7122715716013D4" + "0xf1D447656692d51d4DB7057104Ac6E97029A7790", + "0x95D4D2D88C96cE96c97A912Aa7122715716013D4" ]; const okexPools = [ - "0x2404c9F6Ba2d4D5c73d86b3E3b9D7F6c70ba3448", - "0x5A74de8e3D0c46c106AB769d50bf9CAF8681D30d" + "0x2404c9F6Ba2d4D5c73d86b3E3b9D7F6c70ba3448", + "0x5A74de8e3D0c46c106AB769d50bf9CAF8681D30d" ]; const lpAbi = 'address:lp' // OKEX @@ -23,60 +23,56 @@ const wokt = ADDRESSES.okexchain.WOKT async function pool2Tvl(balances, chainBlocks, chain, pools) { - let lpofPools = (await sdk.api.abi.multiCall({ - calls: pools.map(p => ({ - target: p - })), - abi: lpAbi, - block: chainBlocks, - chain: chain - })).output; + let lpofPools = (await sdk.api.abi.multiCall({ + calls: pools.map(p => ({ + target: p + })), + abi: lpAbi, + block: chainBlocks, + chain: chain + })).output; - let lpBalances = (await sdk.api.abi.multiCall({ - calls: lpofPools.map(p => ({ - target: p.output, - params: p.input.target - })), - abi: "erc20:balanceOf", - block: chainBlocks, - chain: chain - })).output; + let lpBalances = (await sdk.api.abi.multiCall({ + calls: lpofPools.map(p => ({ + target: p.output, + params: p.input.target + })), + abi: "erc20:balanceOf", + block: chainBlocks, + chain: chain + })).output; - let lpPositions = []; - for (let i in lpBalances) { - lpPositions.push({ - balance: lpBalances[i].output, - token: lpBalances[i].input.target - }); - } + let lpPositions = []; + for (let i in lpBalances) { + lpPositions.push({ + balance: lpBalances[i].output, + token: lpBalances[i].input.target + }); + } - await unwrapUniswapLPs(balances, lpPositions, chainBlocks, chain, addr=>`${chain}:${addr}`); + await unwrapUniswapLPs(balances, lpPositions, chainBlocks, chain, addr => `${chain}:${addr}`); } async function bscPool2(timestamp, block, chainBlocks) { - let balances = {}; - - await pool2Tvl(balances, chainBlocks.bsc, "bsc", bscPools); - - return balances; + let balances = {}; + await pool2Tvl(balances, chainBlocks.bsc, "bsc", bscPools); + return balances; } async function okexPool2(timestamp, block, chainBlocks) { - let balances = {}; - - await pool2Tvl(balances, chainBlocks.okexchain, "okexchain", okexPools); - - return balances; + let balances = {}; + await pool2Tvl(balances, chainBlocks.okexchain, "okexchain", okexPools); + return balances; } module.exports = { - bsc: { - ...compoundExports(unitroller, "bsc", kBnb, wbnb), - pool2: bscPool2 - }, - okexchain: { - ...compoundExports(okexUnitroller, "okexchain", kOkt, wokt), - pool2: okexPool2 - } + bsc: { + ...compoundExports(unitroller, kBnb, wbnb), + pool2: bscPool2 + }, + okexchain: { + ...compoundExports(okexUnitroller, kOkt, wokt), + pool2: okexPool2 + } } \ No newline at end of file diff --git a/projects/knightdex/index.js b/projects/knightdex/index.js index dade05359c..4baf3d7120 100644 --- a/projects/knightdex/index.js +++ b/projects/knightdex/index.js @@ -2,6 +2,6 @@ const {getUniTVL} = require("../helper/unknownTokens"); module.exports = { op_bnb: { - tvl: getUniTVL({factory: "0xAe9F4488CC751637b18070c5453a3b7Acc137a3b", useDefaultCoreAssets: true, fetchBalances: true, }) + tvl: getUniTVL({factory: "0xAe9F4488CC751637b18070c5453a3b7Acc137a3b", useDefaultCoreAssets: true, }) }, } diff --git a/projects/kokomo/index.js b/projects/kokomo/index.js index 3a95257d7a..da8909d969 100644 --- a/projects/kokomo/index.js +++ b/projects/kokomo/index.js @@ -4,6 +4,9 @@ module.exports = { hallmarks: [ [1680264000,"Rug Pull"] ], - optimism: compoundExports('0x91c471053bA4697B13d62De1E850Cc89EbE23633', 'optimism'), - arbitrum: compoundExports('0x91c471053bA4697B13d62De1E850Cc89EbE23633', 'arbitrum'), + optimism: compoundExports('0x91c471053bA4697B13d62De1E850Cc89EbE23633'), + arbitrum: compoundExports('0x91c471053bA4697B13d62De1E850Cc89EbE23633'), } + +module.exports.optimism.borrowed = () => ({}) +module.exports.deadFrom = 1680264000 \ No newline at end of file diff --git a/projects/lendexe/index.js b/projects/lendexe/index.js index 376990d3fb..b4b942c905 100644 --- a/projects/lendexe/index.js +++ b/projects/lendexe/index.js @@ -4,8 +4,7 @@ const { nullAddress } = require('../helper/tokenMapping') const { lendingMarket } = require("../helper/methodologies"); -const u = undefined -const { tvl, borrowed } = compoundExports('0x2c7b7A776b5c3517B77D05B9313f4699Fb38a8d3',u,'0x36e66547e27a5953f6ca3d46cc2663d9d6bdc59e', nullAddress, undefined, undefined, { fetchBalances: true, blacklistedTokens: ['0x53011e93f21ec7a74cdfbb7e6548f1abce306833'] }) +const { tvl, borrowed } = compoundExports('0x2c7b7A776b5c3517B77D05B9313f4699Fb38a8d3','0x36e66547e27a5953f6ca3d46cc2663d9d6bdc59e', nullAddress, { blacklistedTokens: ['0x53011e93f21ec7a74cdfbb7e6548f1abce306833'] }) const mapping = { [ADDRESSES.ethereum.USDC]: 6, diff --git a/projects/lendoraprotocol/index.js b/projects/lendoraprotocol/index.js index 0f1065f74c..7ed7230e5a 100644 --- a/projects/lendoraprotocol/index.js +++ b/projects/lendoraprotocol/index.js @@ -4,7 +4,6 @@ const { staking } = require('../helper/staking') module.exports = { scroll: compoundExports2({ comptroller: '0xA27CDE1F3dcaaF653624049Fc3b1a720eC1D4e91', - fetchBalances: true, cether: '0xBC7fA7C2dF265d073Be6D1c88468AEB5c06ba07c', }), }; diff --git a/projects/lineabank/index.js b/projects/lineabank/index.js index 876dc1ede3..39cb80e2b0 100644 --- a/projects/lineabank/index.js +++ b/projects/lineabank/index.js @@ -19,9 +19,9 @@ const abis = { Object.keys(config).forEach(chain => { const comptroller = config[chain] - module.exports[chain] = compoundExports2({ comptroller, fetchBalances: true, abis, }) + module.exports[chain] = compoundExports2({ comptroller, abis, }) }) module.exports = mergeExports([module.exports, { - linea: compoundExports2({ comptroller: '0x43Eac5BFEa14531B8DE0B334E123eA98325de866', fetchBalances: true, abis, }), + linea: compoundExports2({ comptroller: '0x43Eac5BFEa14531B8DE0B334E123eA98325de866', abis, }), }]) \ No newline at end of file diff --git a/projects/linehub-v2/index.js b/projects/linehub-v2/index.js index 28159d8de6..4bd21a19cd 100644 --- a/projects/linehub-v2/index.js +++ b/projects/linehub-v2/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: "0x7811DeF28977060784cC509641f2DD23584b7671", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/manxswap/index.js b/projects/manxswap/index.js index d64fbeb8c7..6366c787fd 100644 --- a/projects/manxswap/index.js +++ b/projects/manxswap/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: "0xFF073cEd2867F7085eC058f5C5Bd6Cf0d9B1Af8f", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/mare-finance-v2/index.js b/projects/mare-finance-v2/index.js index c4848883fe..a6807bbd88 100644 --- a/projects/mare-finance-v2/index.js +++ b/projects/mare-finance-v2/index.js @@ -6,6 +6,6 @@ const unitroller = "0xFcD7D41D5cfF03C7f6D573c9732B0506C72f5C72"; module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", kava: { - ...compoundExports(unitroller, "kava"), + ...compoundExports(unitroller), }, } \ No newline at end of file diff --git a/projects/mare-finance/index.js b/projects/mare-finance/index.js index 3239fb0971..05e2d49942 100644 --- a/projects/mare-finance/index.js +++ b/projects/mare-finance/index.js @@ -6,7 +6,7 @@ const unitroller = "0x4804357AcE69330524ceb18F2A647c3c162E1F95"; module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", kava: { - ...compoundExports(unitroller, "kava"), + ...compoundExports(unitroller), staking: staking(['0x2c4A1f47c3E15F468399A87c4B41ec0d19297772', '0x194AAd54F363D28aDEaE53A7957d63B9BCf8a6b2'], '0xd86C8d4279CCaFbec840c782BcC50D201f277419') }, } \ No newline at end of file diff --git a/projects/midas-capital/index.js b/projects/midas-capital/index.js index eb015c39e4..817abd45a0 100644 --- a/projects/midas-capital/index.js +++ b/projects/midas-capital/index.js @@ -1,10 +1,10 @@ const sdk = require("@defillama/sdk"); -const { compoundExportsWithAsyncTransform } = require("../helper/compound"); +const { compoundExports2 } = require("../helper/compound"); module.exports = { hallmarks: [ - [Math.floor(new Date('2023-06-17')/1e3), 'Protocol was exploited for $600k'], + [Math.floor(new Date('2023-06-17') / 1e3), 'Protocol was exploited for $600k'], ] } @@ -55,39 +55,10 @@ const pools = { function getTvl(chain) { const config = pools[chain] ?? { pools: [] }; - const tvls = config.pools.map((pool) => - compoundExportsWithAsyncTransform(pool, chain, undefined, undefined, { resolveLPs: true }) - ); - let _tvl = sdk.util.sumChainTvls(tvls.map((t) => t.tvl)) - let _borrowed = sdk.util.sumChainTvls(tvls.map((t) => t.borrowed)) - let tvl = _tvl - let borrowed = _borrowed - if (chain === "bsc") { - tvl = resolveHypervisor(_tvl) - borrowed = resolveHypervisor(_borrowed) - } - return { tvl, borrowed }; + const tvls = config.pools.map((comptroller) => compoundExports2({ comptroller })); + let tvl = sdk.util.sumChainTvls(tvls.map((t) => t.tvl)) + let borrowed = sdk.util.sumChainTvls(tvls.map((t) => t.borrowed)) + return { tvl, borrowed } } Object.keys(pools).forEach(chain => module.exports[chain] = getTvl(chain)) - -function resolveHypervisor(tvlFunc) { - return async (...args) => { - const { api } = args[3] - const balances = await tvlFunc(...args) - let bscTokens = Object.keys(balances).filter(t => t.startsWith('bsc:')).map(t => t.slice(4)) - const res = await api.multiCall({ abi: 'function getTotalAmounts() view returns (uint256,uint256)', calls: bscTokens, permitFailure: true }) - const hyperVisorTokens = bscTokens.filter((t, i) => res[i]) - const totalAmounts = res.filter(i => i) - const token0s = await api.multiCall({ abi: 'address:token0', calls: hyperVisorTokens, }) - const token1s = await api.multiCall({ abi: 'address:token1', calls: hyperVisorTokens, }) - const totalSupplies = await api.multiCall({ abi: 'function totalSupply() returns (uint256)', calls: hyperVisorTokens, }) - hyperVisorTokens.forEach((token, i) => { - const bal = balances[`bsc:${token}`] / totalSupplies[i] - delete balances[`bsc:${token}`] - sdk.util.sumSingleBalance(balances, token0s[i], totalAmounts[i][0] * bal, api.chain) - sdk.util.sumSingleBalance(balances, token1s[i], totalAmounts[i][1] * bal, api.chain) - }) - return balances - } -} \ No newline at end of file diff --git a/projects/milkyway/index.js b/projects/milkyway/index.js index 369279adf4..70175f76be 100644 --- a/projects/milkyway/index.js +++ b/projects/milkyway/index.js @@ -3,5 +3,5 @@ const { compoundExports } = require("../helper/compound"); module.exports = { timetravel: false, // milkomeda api's for staked coins can't be queried at historical points start: 1599552000, // 09/08/2020 @ 8:00am (UTC) - milkomeda: compoundExports("0x0Dd4E2B7E0E8a2Cd1258a9023D3a5062381554Cf", "milkomeda"), + milkomeda: compoundExports("0x0Dd4E2B7E0E8a2Cd1258a9023D3a5062381554Cf"), }; diff --git a/projects/mimas-finance/index.js b/projects/mimas-finance/index.js index f4463ff27d..ab440df421 100644 --- a/projects/mimas-finance/index.js +++ b/projects/mimas-finance/index.js @@ -11,10 +11,8 @@ module.exports = { cronos: { ...compoundExports( "0xdD8c94211dD19155EFFbd57EAb6D4e0DE31A3b9E", - "cronos", mmCRO, wCRO, - addr => `cronos:${addr}`, ), staking: stakingUnknownPricedLP(stakingContract, token, "cronos", "0xf56FDfeeF0Ba3de23DaB13a85602bd7BF135E80f", addr=>`cronos:${addr}`) } diff --git a/projects/mindgames/index.js b/projects/mindgames/index.js index baa654776e..875588edae 100644 --- a/projects/mindgames/index.js +++ b/projects/mindgames/index.js @@ -4,7 +4,7 @@ const xCRX = "0x35AfE95662fdf442762a11E4eD5172C81fBceF7e"; const CRX = "0xb21Be1Caf592A5DC1e75e418704d1B6d50B0d083"; const factory = "0x7C7F1c8E2b38d4C06218565BC4C9D8231b0628c0"; -const tvl = getUniTVL({ factory, useDefaultCoreAssets: true, fetchBalances: true }) +const tvl = getUniTVL({ factory, useDefaultCoreAssets: true, }) module.exports = { misrepresentedTokens: true, diff --git a/projects/mobydex/index.js b/projects/mobydex/index.js index 5aac8a274a..adc3beace9 100644 --- a/projects/mobydex/index.js +++ b/projects/mobydex/index.js @@ -5,7 +5,6 @@ module.exports = { tvl: getUniTVL({ factory: "0x9864C78acCe7837Ad1DA8f9BbECcf2dbE562e698", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/moonswap/index.js b/projects/moonswap/index.js index ba0db0ebce..b23e9ce2bc 100644 --- a/projects/moonswap/index.js +++ b/projects/moonswap/index.js @@ -11,4 +11,4 @@ module.exports = { }) }, misrepresentedTokens: true, -} // node test.js projects/moonswap/index.js \ No newline at end of file +} \ No newline at end of file diff --git a/projects/moonswap/onchain.js b/projects/moonswap/onchain.js deleted file mode 100644 index bc5bace50e..0000000000 --- a/projects/moonswap/onchain.js +++ /dev/null @@ -1,112 +0,0 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const factoryAbi = require("../helper/abis/factory.json"); -const token0 = 'address:token0' -const token1 = 'address:token1' -const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)' - -async function tvl(timestamp, ethBlock, chainBlocks) { - let balances = {}; - let factoryAddress = '0x056973F631A5533470143bB7010C9229C19C04d2' - - // GET NUMBER OF POOLS FROM FACTORY - const pairLength = Number(( - await sdk.api.abi.call({ - target: factoryAddress, - abi: factoryAbi.allPairsLength, - chain: 'moonriver', - block: chainBlocks['moonriver'], - }) - ).output); - const allPairNums = Array.from(Array(pairLength).keys()); - - // GET POOL ADDRESSES - const pairs = await sdk.api.abi.multiCall({ - abi: factoryAbi.allPairs, - chain: 'moonriver', - calls: allPairNums.map((num) => ({ - target: factoryAddress, - params: [num], - })), - }); - const pairAddresses = pairs.output.map(r => r.output.toLowerCase()) - - // FIND TOKEN BALANCES - const [token0Addresses, token1Addresses, reserves] = await Promise.all([ - sdk.api.abi - .multiCall({ - abi: token0, - chain: 'moonriver', - calls: pairAddresses.map((pairAddress) => ({ - target: pairAddress, - })), - block: chainBlocks['moonriver'], - }) - .then(({ output }) => output), - sdk.api.abi - .multiCall({ - abi: token1, - chain: 'moonriver', - calls: pairAddresses.map((pairAddress) => ({ - target: pairAddress, - })), - block: chainBlocks['moonriver'], - }) - .then(({ output }) => output), - sdk.api.abi - .multiCall({ - abi: getReserves, - chain: 'moonriver', - calls: pairAddresses.map((pairAddress) => ({ - target: pairAddress, - })), - block: chainBlocks['moonriver'], - }) - .then(({ output }) => output), - ]); - - // CALCULATE VALUE OF POOLS WRT TOKENS OF KNOWN VALUE - for (let n = 0; n < pairLength; n++) { - const tokenIds = [ - getTokenId(token0Addresses[n].output.toLowerCase()), - getTokenId(token1Addresses[n].output.toLowerCase()) - ]; - - const tokenId = tokenIds[0] ? tokenIds[0] : tokenIds[1]; - const side = tokenIds[0] ? 0 : 1; - - if (!tokenId) { - continue; - } else if (balances[tokenId[0]]) { - balances[tokenId[0]] = Number(balances[tokenId[0]]) - + Number(reserves[n].output[side]) * 2 / 10**tokenId[1]; - } else { - balances[tokenId[0]] = - reserves[n].output[side] * 2 / 10**tokenId[1]; - } - } - return balances; -} - -function getTokenId(address) { - switch(address) { - case '0x98878b06940ae243284ca214f92bb71a2b032b8a': - return ['moonriver', 18] - case [ADDRESSES.moonriver.USDC]: - return ['usd-coin', 6] - case [ADDRESSES.moonriver.USDT]: - return ['tether', 6] - case [ADDRESSES.moonriver.ETH]: - return ['ethereum', 18] - case '0x5d9ab5522c64e1f6ef5e3627eccc093f56167818': - return ['binance-usd', 18] - default: - return false; - } -} -// node test.js projects/moonswap/index.js -module.exports = { - misrepresentedTokens: true, - tvl, - methodology: 'tvl is calculated by summing the value of moonswap pools that contain at least one of MOVR, USDC, USDT, ETH and BUSD. This is read from the blockchain, accounts for most of the value locked in the AMM, and was done because these tokens can be valued on CoinGecko. Currently, staking is not counted due to most moonriver tokens being difficult to value in USD.' - }; \ No newline at end of file diff --git a/projects/moonwell-apollo/index.js b/projects/moonwell-apollo/index.js index ef0aec3475..76e813457d 100644 --- a/projects/moonwell-apollo/index.js +++ b/projects/moonwell-apollo/index.js @@ -1,28 +1,16 @@ -const { usdCompoundExports } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') const { staking } = require('../helper/staking') const moonriverConfig = { comptroller: '0x0b7a0EAA884849c6Af7a129e899536dDDcA4905E', - chain: 'moonriver', nativeTokenMarket: '0x6a1A771C7826596652daDC9145fEAaE62b1cd07f', stakingContract: '0xCd76e63f3AbFA864c53b4B98F57c1aA6539FDa3a', stakingTokenAddress: '0xBb8d88bcD9749636BC4D2bE22aaC4Bb3B01A58F1' } -// Moonriver -const moonriverTVL = usdCompoundExports( - moonriverConfig.comptroller, - moonriverConfig.chain, - moonriverConfig.nativeTokenMarket -) - -const moonriverStaking = staking( - moonriverConfig.stakingContract, - moonriverConfig.stakingTokenAddress, - 'moonriver' -) +const moonriverStaking = staking(moonriverConfig.stakingContract, moonriverConfig.stakingTokenAddress) module.exports = { - moonriver: { ...moonriverTVL, staking: moonriverStaking } + moonriver: { ...compoundExports2({ comptroller: moonriverConfig.comptroller, cether: '0x6a1a771c7826596652dadc9145feaae62b1cd07f' }), staking: moonriverStaking } } diff --git a/projects/moonwell/index.js b/projects/moonwell/index.js index 7424e20795..8d1c764eb7 100644 --- a/projects/moonwell/index.js +++ b/projects/moonwell/index.js @@ -1,47 +1,28 @@ -const { usdCompoundExports } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') const { staking } = require('../helper/staking'); const moonbeamConfig = { comptroller: '0x8E00D5e02E65A19337Cdba98bbA9F84d4186a180', - chain: 'moonbeam', nativeTokenMarket: '0x091608f4e4a15335145be0A279483C0f8E4c7955', - stakingContract: '0x8568A675384d761f36eC269D695d6Ce4423cfaB1', stakingTokenAddress: '0x511aB53F793683763E5a8829738301368a2411E3' } -// Moonbeam -const moonbeamTVL = usdCompoundExports( - moonbeamConfig.comptroller, - moonbeamConfig.chain, - moonbeamConfig.nativeTokenMarket -) - -const moonbeamStaking = staking( - moonbeamConfig.stakingContract, - moonbeamConfig.stakingTokenAddress, - 'moonbeam' -) +const moonbeamStaking = staking( moonbeamConfig.stakingContract, moonbeamConfig.stakingTokenAddress,) const baseConfig = { comptroller: '0xfBb21d0380beE3312B33c4353c8936a0F13EF26C', - chain: 'base' } -// Moonbeam -const baseTVL = usdCompoundExports(baseConfig.comptroller, baseConfig.chain) - -// Optimism const optimismConfig = { comptroller: '0xCa889f40aae37FFf165BccF69aeF1E82b5C511B9', - chain: 'optimism' } -const optimismTVL = usdCompoundExports(optimismConfig.comptroller, optimismConfig.chain) - module.exports = { - moonbeam: { ...moonbeamTVL, staking: moonbeamStaking }, - base: { ...baseTVL }, - optimism: { ...optimismTVL }, + moonbeam: compoundExports2({ comptroller: moonbeamConfig.comptroller, cether: '0x091608f4e4a15335145be0a279483c0f8e4c7955' }), + base: compoundExports2({ comptroller: baseConfig.comptroller, }), + optimism: compoundExports2({ comptroller: optimismConfig.comptroller, }), hallmarks: [[1659312000, 'Nomad Bridge Exploit']] } + +module.exports.moonbeam.staking = moonbeamStaking \ No newline at end of file diff --git a/projects/mversex/index.js b/projects/mversex/index.js index 7dc4f3812b..64f498af32 100644 --- a/projects/mversex/index.js +++ b/projects/mversex/index.js @@ -2,6 +2,6 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { misrepresentedTokens: true, kava: { - tvl: getUniTVL({ factory: "0x266F951c525130a4E230bB40F0e3525C6C99B9c5", useDefaultCoreAssets: true, fetchBalances: true, }), + tvl: getUniTVL({ factory: "0x266F951c525130a4E230bB40F0e3525C6C99B9c5", useDefaultCoreAssets: true, }), }, }; diff --git a/projects/nanoswap/index.js b/projects/nanoswap/index.js index 71ed6df848..8abc026ab4 100644 --- a/projects/nanoswap/index.js +++ b/projects/nanoswap/index.js @@ -1,12 +1,10 @@ const { getUniTVL } = require('../helper/unknownTokens') -const NANO = "0x28f45eA79c50d3ED9e1FA8A41dC8595F636eC34D"; const FACTORY = "0x41726eb94341fD27D5103DF3Cd6C387560c75B70" const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, - fetchBalances: true, }) diff --git a/projects/neku/index.js b/projects/neku/index.js index d53cb04b92..481b15c1bc 100644 --- a/projects/neku/index.js +++ b/projects/neku/index.js @@ -1,9 +1,8 @@ -const { usdCompoundExports } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') -const unitroller = "0xD5B649c7d27C13a2b80425daEe8Cb6023015Dc6B" -// node test.js projects/neku/index.js +const comptroller = "0xD5B649c7d27C13a2b80425daEe8Cb6023015Dc6B" module.exports = { - arbitrum:usdCompoundExports(unitroller, "arbitrum", "0xBC4a19345c598D73939b62371cF9891128ecCB8B"), - moonriver:usdCompoundExports(unitroller, "moonriver", "0xBC4a19345c598D73939b62371cF9891128ecCB8B"), - bsc: usdCompoundExports(unitroller, "bsc", "0xBC4a19345c598D73939b62371cF9891128ecCB8B"), + arbitrum: compoundExports2({ comptroller, cether: '0xbc4a19345c598d73939b62371cf9891128eccb8b' }), + moonriver: compoundExports2({ comptroller, cether: '0xbc4a19345c598d73939b62371cf9891128eccb8b' }), + bsc: compoundExports2({ comptroller, cether: '0xbc4a19345c598d73939b62371cf9891128eccb8b' }), } \ No newline at end of file diff --git a/projects/nexon/index.js b/projects/nexon/index.js index 58dc85629c..243ef0fd37 100644 --- a/projects/nexon/index.js +++ b/projects/nexon/index.js @@ -1,16 +1,9 @@ const sdk = require('@defillama/sdk') const { compoundExports, compoundExports2 } = require('../helper/compound'); -const { nullAddress } = require('../helper/tokenMapping'); const comptroller = "0x0171cA5b372eb510245F5FA214F5582911934b3D" -const abis = { - getReservesABI: 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)' -} - -const lendingMarket = compoundExports(comptroller, 'era', '0x1BbD33384869b30A323e15868Ce46013C82B86FB', nullAddress, undefined, undefined, { - resolveLPs: true, abis -}) +const lendingMarket = compoundExports(comptroller, '0x1BbD33384869b30A323e15868Ce46013C82B86FB') const lendingMarket2 = compoundExports2({ comptroller: '0xc955d5fa053d88e7338317cc6589635cd5b2cf09', cether: '0x22d8b71599e14f20a49a397b88c1c878c86f5579', blacklistedTokens: [ '0x247b1891c1d04d5972658824dcfbab71b0e9ca1d', diff --git a/projects/novation/index.js b/projects/novation/index.js index aeb46c5239..43c94998ca 100644 --- a/projects/novation/index.js +++ b/projects/novation/index.js @@ -6,7 +6,7 @@ const config = { Object.keys(config).forEach(chain => { const comptroller = config[chain] module.exports[chain] = compoundExports2({ - comptroller, fetchBalances: true, abis: { + comptroller, abis: { getAllMarkets: "address[]:allMarkets", totalBorrows: "uint256:totalBorrow", }, diff --git a/projects/olafinance/index.js b/projects/olafinance/index.js index 4b62fa2992..d4246edb8d 100644 --- a/projects/olafinance/index.js +++ b/projects/olafinance/index.js @@ -1,13 +1,5 @@ -const {usdCompoundExports} = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') -const unitroller_fantom = "0x892701d128d63c9856A9Eb5d967982F78FD3F2AE" - -const abis = { - oracle: "address:getRegistry", - underlyingPrice: "function getPriceForUnderling(address cToken) view returns (uint256)", - } - - -module.exports={ - fantom:usdCompoundExports(unitroller_fantom, "fantom", "0xed8F2C964b47D4d607a429D4eeA972B186E6f111", abis) +module.exports = { + fantom: compoundExports2({ comptroller: '0x892701d128d63c9856A9Eb5d967982F78FD3F2AE'}) } \ No newline at end of file diff --git a/projects/onsenswap/index.js b/projects/onsenswap/index.js index a5ca229177..2e76f4eeae 100644 --- a/projects/onsenswap/index.js +++ b/projects/onsenswap/index.js @@ -7,7 +7,6 @@ module.exports = { tvl: getUniTVL({ factory: "0x0E15a1a03bD356B17F576c50d23BF7FC00305590", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/opbanana/index.js b/projects/opbanana/index.js index a6cadaa2b9..e4b677f9e5 100644 --- a/projects/opbanana/index.js +++ b/projects/opbanana/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - op_bnb: { tvl: getUniTVL({ factory: '0xdF9161aa1D60f129E185D43e2862BD4826E88Aa8', useDefaultCoreAssets: true, fetchBalances: true, }), }, + op_bnb: { tvl: getUniTVL({ factory: '0xdF9161aa1D60f129E185D43e2862BD4826E88Aa8', useDefaultCoreAssets: true, }), }, } \ No newline at end of file diff --git a/projects/orbiter-one/index.js b/projects/orbiter-one/index.js index e142370c62..2aa7a99264 100644 --- a/projects/orbiter-one/index.js +++ b/projects/orbiter-one/index.js @@ -3,7 +3,6 @@ const { compoundExports2 } = require('../helper/compound') const moonbeamConfig = { comptroller: "0x27DC3DAdBfb40ADc677A2D5ef192d40aD7c4c97D", cether: "0xCc444ca6bba3764Fc55BeEFe4FFA27435cF6c259", - fetchBalances: true, } module.exports = { diff --git a/projects/paperdao/index.js b/projects/paperdao/index.js index b3ef80894e..013e90e408 100644 --- a/projects/paperdao/index.js +++ b/projects/paperdao/index.js @@ -11,5 +11,5 @@ const blacklist = [ module.exports = { methodology, - ethpow: compoundExports("0x5e496e7F241B13c514A78B7E840bc3cC744D7215", "ethpow", "0xb9e008f2C039fB994C8adD806F8aF709899aA95e", ADDRESSES.ethereum.WETH, undefined, undefined, { blacklistedTokens: blacklist }) + ethpow: compoundExports("0x5e496e7F241B13c514A78B7E840bc3cC744D7215", "0xb9e008f2C039fB994C8adD806F8aF709899aA95e", ADDRESSES.ethereum.WETH, { blacklistedTokens: blacklist }) } \ No newline at end of file diff --git a/projects/papyrusswap/index.js b/projects/papyrusswap/index.js index 6edf5fb367..988ab5d123 100644 --- a/projects/papyrusswap/index.js +++ b/projects/papyrusswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('scroll', '0xD5f3D3fb72210bfe71a59c05e0b8D72973baa2a6', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('scroll', '0xD5f3D3fb72210bfe71a59c05e0b8D72973baa2a6') \ No newline at end of file diff --git a/projects/paxo-finance/index.js b/projects/paxo-finance/index.js index 099a49b8c1..c7a7964b2b 100644 --- a/projects/paxo-finance/index.js +++ b/projects/paxo-finance/index.js @@ -3,10 +3,10 @@ const { lendingMarket } = require('../helper/methodologies') const { staking } = require("../helper/staking"); module.exports = { - polygon: compoundExports('0x1eDf64B621F17dc45c82a65E1312E8df988A94D3', 'polygon'), - xdc: compoundExports('0x301C76e7b60e9824E32991B8F29e1c4a03B4F65b', 'xdc'), - linea: compoundExports('0x301C76e7b60e9824E32991B8F29e1c4a03B4F65b', 'linea'), - boba: compoundExports('0x301C76e7b60e9824E32991B8F29e1c4a03B4F65b', 'boba'), + polygon: compoundExports('0x1eDf64B621F17dc45c82a65E1312E8df988A94D3'), + xdc: compoundExports('0x301C76e7b60e9824E32991B8F29e1c4a03B4F65b'), + linea: compoundExports('0x301C76e7b60e9824E32991B8F29e1c4a03B4F65b'), + boba: compoundExports('0x301C76e7b60e9824E32991B8F29e1c4a03B4F65b'), methodology: `${lendingMarket}. TVL is calculated by getting the market addresses from comptroller and calling the getCash() on-chain method to get the amount of tokens locked in each of these addresses.`, } diff --git a/projects/pepedex/index.js b/projects/pepedex/index.js index ef089cbf8f..6e4f3674ca 100644 --- a/projects/pepedex/index.js +++ b/projects/pepedex/index.js @@ -4,7 +4,6 @@ module.exports = { misrepresentedTokens: true, ethereum: { tvl: getUniTVL({ - fetchBalances: true, useDefaultCoreAssets: true, factory: '0x460b2005b3318982feADA99f7ebF13e1D6f6eFfE', }) diff --git a/projects/percent/index.js b/projects/percent/index.js index 47443768f6..02fa8ec81b 100644 --- a/projects/percent/index.js +++ b/projects/percent/index.js @@ -1,12 +1,9 @@ -const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { stakings } = require("../helper/staking"); -const { getCompoundV2Tvl } = require("../helper/compound"); +const { compoundExports2 } = require("../helper/compound"); const comptroller = "0xf47dD16553A934064509C40DC5466BBfB999528B"; -const pETH = "0x45F157b3d3d7C415a0e40012D64465e3a0402C64"; -const pETHEquivalent = ADDRESSES.ethereum.WETH; const pool2Contract = "0x23b53026187626Ed8488e119767ACB2Fe5F8de4e"; const lpOfPool2 = "0xEB85B2E12320a123d447Ca0dA26B49E666b799dB"; @@ -69,26 +66,11 @@ module.exports = { ethereum: { staking: stakings(stakingContracts, PCT), pool2: pool2, - borrowed: getCompoundV2Tvl( - comptroller, - "ethereum", - (addr) => addr, - pETH, - pETHEquivalent, - true - ), - tvl: sdk.util.sumChainTvls([ - getCompoundV2Tvl( - comptroller, - "ethereum", - (addr) => addr, - pETH, - pETHEquivalent - ), - ethTvl, - ]), - }, + ...compoundExports2({ comptroller, cether: '0x45f157b3d3d7c415a0e40012d64465e3a0402c64' }), + }, methodology: "Same as compound, we get all the liquidity and the borrowed part on the lending markets", }; + +module.exports.ethereum.tvl = sdk.util.sumChainTvls([module.exports.ethereum.tvl, ethTvl]) \ No newline at end of file diff --git a/projects/pheasantswap/index.js b/projects/pheasantswap/index.js index 4941297bcf..0b83580755 100644 --- a/projects/pheasantswap/index.js +++ b/projects/pheasantswap/index.js @@ -1,5 +1,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { - enuls: { tvl: getUniTVL({ factory: '0x7bf960B15Cbd9976042257Be3F6Bb2361E107384', useDefaultCoreAssets: true, fetchBalances: true }), }, + enuls: { tvl: getUniTVL({ factory: '0x7bf960B15Cbd9976042257Be3F6Bb2361E107384', useDefaultCoreAssets: true,}), }, } diff --git a/projects/pixelswap/index.js b/projects/pixelswap/index.js index c193fcdc75..f974b5fa5b 100644 --- a/projects/pixelswap/index.js +++ b/projects/pixelswap/index.js @@ -1,7 +1,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const FACTORY = "0xD07739a9E9C46D3DedeD97c0edC49cea8BAB1Bb9" const ZKSYNC_FACTORY = "0x8435bd22e705DCeFCf6EF8b921E6dB534a4E9902" -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true, }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true,}) module.exports = { misrepresentedTokens: true, @@ -22,7 +22,6 @@ module.exports = { tvl: getUniTVL({ factory: ZKSYNC_FACTORY, useDefaultCoreAssets: true, - fetchBalances: true, }) }, scroll: { diff --git a/projects/planet-green/index.js b/projects/planet-green/index.js index a03e367105..af9a019760 100644 --- a/projects/planet-green/index.js +++ b/projects/planet-green/index.js @@ -1,21 +1,14 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports, methodology, } = require("../helper/compound"); const { mergeExports } = require("../helper/utils"); - - const compoundTVL1 = compoundExports( '0xF54f9e7070A1584532572A6F640F09c606bb9A83', - 'bsc', '0x24664791B015659fcb71aB2c9C0d56996462082F', - ADDRESSES.bsc.WBNB ) const compoundTVL2 = compoundExports( '0x1e0C9D09F9995B95Ec4175aaA18b49f49f6165A3', - 'bsc', '0x190354707Ad8221bE30bF5f097fa51C9b1EbdB29', - ADDRESSES.bsc.WBNB ) // node test.js projects/planet-green/index.js diff --git a/projects/plantbaseswap/index.js b/projects/plantbaseswap/index.js index 86bf38a600..390f6a6c65 100644 --- a/projects/plantbaseswap/index.js +++ b/projects/plantbaseswap/index.js @@ -3,7 +3,7 @@ const PLANT = "0x23082Dd85355b51BAe42248C961E7F83486e7694"; const FACTORY = "0xA081Ce40F079A381b59893b4Dc0abf8B1817af70" -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, }) module.exports = { diff --git a/projects/pulserate/index.js b/projects/pulserate/index.js index feca6b1e78..aa0ade5215 100644 --- a/projects/pulserate/index.js +++ b/projects/pulserate/index.js @@ -8,7 +8,6 @@ module.exports = { tvl: getUniTVL({ factory: "0xE2332E5297b18a21DcE0E6ac461e821C353A00cA", useDefaultCoreAssets: true, - fetchBalances: true, }), staking: sumTokensExport({ owners: ["0xD7A2F5A72079654E7997C615cC07A1b92D850b32"], diff --git a/projects/pyswap/index.js b/projects/pyswap/index.js index 3f98df1283..f0198fb439 100644 --- a/projects/pyswap/index.js +++ b/projects/pyswap/index.js @@ -15,7 +15,7 @@ const assets = [ let owners = [native_staking_contract_pool1, native_staking_contract_pool2, pys_staking_contract] let TVL_STAKING = sumTokensExport({ owners, tokens: assets }) -let TVL_AMM_DEX = getUniTVL({factory: "0x1434575AbB43103cFb40fd8147FB1e0B2ec3e2A1", useDefaultCoreAssets: true, fetchBalances: true,}) +let TVL_AMM_DEX = getUniTVL({factory: "0x1434575AbB43103cFb40fd8147FB1e0B2ec3e2A1", useDefaultCoreAssets: true,}) module.exports = { op_bnb: { diff --git a/projects/quantoswap/index.js b/projects/quantoswap/index.js index d8d0f06721..e8083dc529 100644 --- a/projects/quantoswap/index.js +++ b/projects/quantoswap/index.js @@ -11,6 +11,6 @@ module.exports = { misrepresentedTokens: true, ethereum: { staking: stakings(pools, QNS,), - tvl: getUniTVL({ useDefaultCoreAssets: true, factory, fetchBalances: true }) + tvl: getUniTVL({ useDefaultCoreAssets: true, factory}) }, }; \ No newline at end of file diff --git a/projects/quickswap-lending/index.js b/projects/quickswap-lending/index.js index cccbdb19a3..8e0b872df9 100644 --- a/projects/quickswap-lending/index.js +++ b/projects/quickswap-lending/index.js @@ -11,7 +11,7 @@ const unitroller2 = "0x627742AaFe82EB5129DD33D237FF318eF5F76CBC" const unitroller3 = "0x1eD65DbBE52553A02b4bb4bF70aCD99e29af09f8" const cExports = [unitroller1, unitroller2, unitroller3, ].map(i => ({ - polygon: compoundExports(i, 'polygon') + polygon: compoundExports(i) })) module.exports = mergeExports([{ diff --git a/projects/quillswap/index.js b/projects/quillswap/index.js index 53b450e1c0..df73f2b7f4 100644 --- a/projects/quillswap/index.js +++ b/projects/quillswap/index.js @@ -1,6 +1,6 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('scroll', '0xab8aEfe85faD683A6bDE16EeD04C3420C713324b', { fetchBalances: true, }) +module.exports = uniTvlExport('scroll', '0xab8aEfe85faD683A6bDE16EeD04C3420C713324b') module.exports.hallmarks = [ [1698144638,"Liquidity Removed"], ] \ No newline at end of file diff --git a/projects/ram.js b/projects/ram.js index d6f67cd28f..f458c05fb4 100644 --- a/projects/ram.js +++ b/projects/ram.js @@ -1,9 +1,5 @@ -const ADDRESSES = require('./helper/coreAssets.json') -const {usdCompoundExports} = require("./helper/compound"); - -const controllerAddress = "0x0d4fe8832857Bb557d8CFCf3737cbFc8aE784106"; +const { compoundExports2 } = require("./helper/compound"); module.exports = { - timetravel: true, // but we don't have a thundercore archive node atm - thundercore: usdCompoundExports(controllerAddress, "thundercore", "0xeF5A0CE54a519B1Db3F350EB902C4cFbf7671D88", undefined, { cetheEquivalent: ADDRESSES.thundercore.WTT }) -}; + thundercore: compoundExports2({ comptroller: '0x0d4fe8832857Bb557d8CFCf3737cbFc8aE784106', cether: '0xef5a0ce54a519b1db3f350eb902c4cfbf7671d88' }) +} \ No newline at end of file diff --git a/projects/rari/api.js b/projects/rari/api.js deleted file mode 100644 index 9b4d078af5..0000000000 --- a/projects/rari/api.js +++ /dev/null @@ -1,11 +0,0 @@ -const { get } = require("../helper/http"); - -async function fetch() { - const { tvl } = await get("https://app.rari.capital/api/stats") - - return parseFloat(tvl); -} - -module.exports = { - fetch, -}; diff --git a/projects/rari/index.js b/projects/rari/index.js index 09a0a1f054..38e025c3e7 100644 --- a/projects/rari/index.js +++ b/projects/rari/index.js @@ -1,12 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { requery } = require("../helper/requery"); const abi = require("./abi"); -const { default: BigNumber } = require("bignumber.js"); -const { getCompoundV2Tvl } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') const { pool2 } = require('../helper/pool2'); -const { getBlock } = require("../helper/http"); -const { sliceIntoChunks } = require("../helper/utils"); const { sumTokens2 } = require("../helper/unwrapLPs"); const earnETHPoolFundControllerAddressesIncludingLegacy = [ @@ -16,23 +11,13 @@ const earnETHPoolFundControllerAddressesIncludingLegacy = [ ] const earnDAIPoolControllerAddressesIncludingLegacy = [ '0x7C332FeA58056D1EF6aB2B2016ce4900773DC399', - // '0x3F579F097F2CE8696Ae8C417582CfAFdE9Ec9966' ] const earnStablePoolAddressesIncludingLegacy = [ '0x4a785fa6fcd2e0845a24847beb7bddd26f996d4d', - // '0x27C4E34163b5FD2122cE43a40e3eaa4d58eEbeaF', - // '0x318cfd99b60a63d265d2291a4ab982073fbf245d', - // '0xb6b79D857858004BF475e4A57D4A446DA4884866', - // '0xD4be7E211680e12c08bbE9054F0dA0D646c45228', - // '0xB202cAd3965997f2F5E67B349B2C5df036b9792e', - // '0xe4deE94233dd4d7c2504744eE6d34f3875b3B439' ] -const fusePoolLensAddress = '0x8dA38681826f4ABBe089643D2B3fE4C6e4730493' const fusePoolDirectoryAddress = '0x835482FE0532f169024d5E9410199369aAD5C77E' const rariGovernanceTokenUniswapDistributorAddress = '0x1FA69a416bCF8572577d3949b742fBB0a9CD98c7' const RGTETHSushiLPTokenAddress = '0x18a797c7c70c1bf22fdee1c09062aba709cacf04' -const ETHAddress = ADDRESSES.null -const bigNumZero = BigNumber('0') const tokenMapWithKeysAsSymbol = { 'DAI': ADDRESSES.ethereum.DAI, @@ -44,144 +29,25 @@ const tokenMapWithKeysAsSymbol = { 'MUSD': '0xe2f2a5c287993345a840db3b0845fbc70f5935a5' } -const fusePoolData = {} -async function getFusePoolData(pools, block) { - const data = { output: [] } - const chunks = sliceIntoChunks(pools.map(i => ({ params: i.comptroller })), 25) - for (const chunk of chunks) { - const items = await sdk.api2.abi.multiCall({ - target: fusePoolLensAddress, - abi: abi['getPoolSummary'], - block, - calls: chunk - }) - data.output.push(...items.output) - } - return data -} - -async function getFusePools(timestamp, block, balances, borrowed) { - const fusePoolsAll = (await sdk.api.abi.call({ - target: fusePoolDirectoryAddress, - block, - abi: abi['getPublicPools'] - })) - - const fusePools = fusePoolsAll.output['1'] - - if (!fusePoolData[block]) - fusePoolData[block] = getFusePoolData(fusePools, block) - - const poolSummaries = await fusePoolData[block] - - for (let summaryResult of poolSummaries.output) { - if (summaryResult.success) { - const summary = summaryResult.output - // https://docs.rari.capital/fuse/#get-pools-by-account-with-data - let amount; - if (borrowed) { - amount = BigNumber(summary['1']) - } else { - amount = BigNumber(summary['0']).minus(summary['1']) - } - sdk.util.sumSingleBalance(balances, ETHAddress, amount.toFixed(0)) - } else { - const newBalances = await getCompoundV2Tvl(summaryResult.input.params[0], 'ethereum', id => id, undefined, undefined, borrowed)(timestamp, block, { ethereum: block }) - Object.entries(newBalances).forEach(entry => sdk.util.sumSingleBalance(balances, entry[0], entry[1])) - } - } -} - -async function borrowed(timestamp, block) { - if (block > 14684686) { - return {} // after fei hack - } - const balances = {} - await getFusePools(timestamp, block, balances, true) - return balances -} - -async function tvl(timestamp, block) { - const balances = {} - block = await getBlock(timestamp, 'ethereum', { ethereum: block }) - - const getEarnYieldProxyAddressAsArray = (block) => { - if (block <= 11306334) { - return ['0x35DDEFa2a30474E64314aAA7370abE14c042C6e8'] - } else if (block > 11306334 && block <= 11252873) { - return ['0x6dd8e1Df9F366e6494c2601e515813e0f9219A88'] - } else { - return ['0x35DDEFa2a30474E64314aAA7370abE14c042C6e8'] - } - } +async function tvl(api) { - const updateBalance = (token, amount) => { - token = token.toLowerCase() - sdk.util.sumSingleBalance(balances, token, amount.toFixed(0)) - } const getBalancesFromEarnPool = async (addresses) => { - const earnPoolData = (await sdk.api.abi.multiCall({ - calls: addresses.map((address) => ({ - target: address - })), - block, - abi: abi['getRawFundBalancesAndPrices'] - })).output.map((resp) => resp.output) - for (let j = 0; j < earnPoolData.length; j++) { - const poolData = earnPoolData[j] && earnPoolData[j]['0'] - for (let i = 0; poolData && i < poolData.length; i++) { - const tokenSymbol = poolData[i].toUpperCase() - const tokenContractAddress = tokenMapWithKeysAsSymbol[tokenSymbol] - if (tokenContractAddress) { - const tokenAmount = BigNumber(earnPoolData[j]['1'][i]) - if (tokenAmount.isGreaterThan(bigNumZero)) { - updateBalance(tokenContractAddress, tokenAmount) - } - const pools = earnPoolData[j]['2'][i] - const poolBalances = earnPoolData[j]['3'][i] - if (pools && poolBalances && pools.length === poolBalances.length) { - for (let k = 0; k < pools.length; k++) { - const poolBalance = BigNumber(poolBalances[k]) - if (poolBalance.isGreaterThan(bigNumZero)) { - updateBalance(tokenContractAddress, poolBalance) - } - } - } - } - } - } + const earnPoolData = (await api.multiCall({ calls: addresses, abi: abi['getRawFundBalancesAndPrices'], permitFailure: true, })) + earnPoolData.filter(i => i).forEach(([tokens, bals] = []) => { + tokens.forEach((token, i) => { + const mapped = tokenMapWithKeysAsSymbol[token.toUpperCase()] + if (mapped) api.add(mapped, bals[i]) + else console.log('unmapped', token, bals[i]) + }) + }) } // Earn yield pool - const earnYieldProxyAddress = getEarnYieldProxyAddressAsArray(block) + const earnYieldProxyAddress = ['0x35DDEFa2a30474E64314aAA7370abE14c042C6e8'].concat(earnETHPoolFundControllerAddressesIncludingLegacy).concat(earnDAIPoolControllerAddressesIncludingLegacy).concat(earnStablePoolAddressesIncludingLegacy) await getBalancesFromEarnPool(earnYieldProxyAddress) - //Earn ETH pool - const ethPoolData = (await sdk.api.abi.multiCall({ - block, - abi: abi['getRawFundBalances'], - calls: earnETHPoolFundControllerAddressesIncludingLegacy.map((address) => ({ - target: address - })) - })).output.map((resp) => resp.output).flat() - for (let i = 0; i < ethPoolData.length; i++) { - const ethAmount = BigNumber(ethPoolData[i]['0']) - if (ethAmount.isGreaterThan(bigNumZero)) { - updateBalance(ETHAddress, ethAmount) - } - } - - // Earn DAI pool - await getBalancesFromEarnPool(earnDAIPoolControllerAddressesIncludingLegacy) - - // Earn stable pool - await getBalancesFromEarnPool(earnStablePoolAddressesIncludingLegacy) - - // Fuse - // await getFusePools(timestamp, block, balances, false) - - return balances + await fuseTvl(api) } async function fuseTvl(api) { @@ -191,30 +57,15 @@ async function fuseTvl(api) { const tokens = await api.multiCall({ abi: 'address:underlying', calls: markets }) return sumTokens2({api , tokensAndOwners2: [tokens, markets]}) } -async function fuseBorrowed(api) { - - const [_, pools] = (await api.call({ target: fusePoolDirectoryAddress, abi: abi['getPublicPools'] })) - const markets = (await api.multiCall({ abi: 'address[]:getAllMarkets', calls: pools.map(i => i.comptroller) })).flat() - const tokens = await api.multiCall({ abi: 'address:underlying', calls: markets }) - const bals = await api.multiCall({ abi: 'uint256:totalBorrows', calls: markets }) - api.addTokens(tokens, bals) - return api.getBalances() -} module.exports = { - misrepresentedTokens: true, doublecounted: true, start: 1596236058, // July 14, 2020 ethereum: { - tvl: sdk.util.sumChainTvls([tvl, fuseTvl]), + tvl, pool2: pool2(rariGovernanceTokenUniswapDistributorAddress, RGTETHSushiLPTokenAddress), - borrowed, - }, - arbitrum: { - // Borrowing is disabled, and Tetranode's locker is the only pool with significant tvl, so counting only that - tvl: getCompoundV2Tvl('0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716', 'arbitrum', undefined, undefined, undefined, false), - borrowed: getCompoundV2Tvl('0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716', 'arbitrum', undefined, undefined, undefined, true), }, + arbitrum: compoundExports2({ comptroller: '0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716' }), hallmarks: [ [1651276800, "FEI hack"], [1649548800, "ICHI sell-off"], @@ -222,3 +73,6 @@ module.exports = { [1654905600, "Bhavnani's announcement"] ] } + +module.exports.arbitrum.borrowed = () => ({}) +module.exports.ethereum.borrowed = () => ({}) diff --git a/projects/rikkei-finance/index.js b/projects/rikkei-finance/index.js index 9ce99e76ab..f7438f7513 100644 --- a/projects/rikkei-finance/index.js +++ b/projects/rikkei-finance/index.js @@ -2,12 +2,9 @@ const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require("../helper/compound"); module.exports = { - bsc: { - ...compoundExports( - '0x4f3e801Bd57dC3D641E72f2774280b21d31F64e4', - 'bsc', - '0x157822aC5fa0Efe98daa4b0A55450f4a182C10cA', - ADDRESSES.bsc.WBNB - ) - } + bsc: compoundExports( + '0x4f3e801Bd57dC3D641E72f2774280b21d31F64e4', + '0x157822aC5fa0Efe98daa4b0A55450f4a182C10cA', + ADDRESSES.bsc.WBNB + ) }; \ No newline at end of file diff --git a/projects/rockswap/index.js b/projects/rockswap/index.js index 07a9daa14e..dd9f3edd99 100644 --- a/projects/rockswap/index.js +++ b/projects/rockswap/index.js @@ -2,6 +2,6 @@ const { getUniTVL } = require('../helper/unknownTokens'); module.exports = { bitrock: { - tvl: getUniTVL({ factory: '0x02c73ecb9B82e545E32665eDc42Ae903F8AA86a9', useDefaultCoreAssets: true, fetchBalances: true }), + tvl: getUniTVL({ factory: '0x02c73ecb9B82e545E32665eDc42Ae903F8AA86a9', useDefaultCoreAssets: true}), } } diff --git a/projects/sanctuary/index.js b/projects/sanctuary/index.js index b65ad97b15..112bb98823 100644 --- a/projects/sanctuary/index.js +++ b/projects/sanctuary/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('scroll', '0xAD71e466d6E9c5CbAC804dBF60dE2543d58B4b5B', { fetchBalances: true, }) +module.exports = uniTvlExport('scroll', '0xAD71e466d6E9c5CbAC804dBF60dE2543d58B4b5B', { }) diff --git a/projects/scream/index.js b/projects/scream/index.js index 7ad0fd5a1b..7a683d429c 100644 --- a/projects/scream/index.js +++ b/projects/scream/index.js @@ -1,19 +1,6 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { getCompoundV2Tvl } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') const { staking } = require('../helper/staking') -function lending(borrowed) { - return async (...params) => { - const transformAdress = i => `fantom:${i}` - const balances = await getCompoundV2Tvl("0x260e596dabe3afc463e75b6cc05d8c46acacfb09", "fantom", addr => { - if (addr === "0xAd84341756Bf337f5a0164515b1f6F993D194E1f") { - return ADDRESSES.ethereum.TUSD - } - return transformAdress(addr) - }, undefined, undefined, borrowed)(...params) - return Object.fromEntries(Object.entries(balances).filter(b => Number(b[1]) > 1)) - } -} module.exports = { hallmarks: [ @@ -22,7 +9,6 @@ module.exports = { methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets. fUSD is returned as TUSD", fantom: { staking: staking("0xe3d17c7e840ec140a7a51aca351a482231760824", "0xe0654C8e6fd4D733349ac7E09f6f23DA256bF475"), - tvl: lending(false), - borrowed: lending(true), + ...compoundExports2({ comptroller: "0x260e596dabe3afc463e75b6cc05d8c46acacfb09", }), } } diff --git a/projects/scribeswap/index.js b/projects/scribeswap/index.js index 8310f4499a..7278fc49fd 100644 --- a/projects/scribeswap/index.js +++ b/projects/scribeswap/index.js @@ -2,5 +2,5 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - scroll: { tvl: getUniTVL({ factory: '0xb11826635f9253Bae9C426862b0f100950a71f8f', useDefaultCoreAssets: true, fetchBalances: true, }), }, + scroll: { tvl: getUniTVL({ factory: '0xb11826635f9253Bae9C426862b0f100950a71f8f', useDefaultCoreAssets: true, }), }, } \ No newline at end of file diff --git a/projects/scrollswap/index.js b/projects/scrollswap/index.js index 524ceeeb69..acb846de39 100644 --- a/projects/scrollswap/index.js +++ b/projects/scrollswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('scroll', '0x0082123Cf29a85f48Cd977D3000aec145A3B452F', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('scroll', '0x0082123Cf29a85f48Cd977D3000aec145A3B452F', { }) \ No newline at end of file diff --git a/projects/scrollswapfinance/index.js b/projects/scrollswapfinance/index.js index ad28d8a552..5a0d316356 100644 --- a/projects/scrollswapfinance/index.js +++ b/projects/scrollswapfinance/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('scroll', '0xaA4b3b63B0A828dc28b2De7Be6115198B080De09', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('scroll', '0xaA4b3b63B0A828dc28b2De7Be6115198B080De09') \ No newline at end of file diff --git a/projects/sharelock/index.js b/projects/sharelock/index.js index d3810ed4ab..2e200275fd 100644 --- a/projects/sharelock/index.js +++ b/projects/sharelock/index.js @@ -2,6 +2,6 @@ const { getUniTVL} = require("../helper/unknownTokens") module.exports = { era: { - tvl: getUniTVL({ factory: '0xea51CE8A1f9C1Cbbf5B89D9B1dA4A94fB1557866', fetchBalances: true, }) + tvl: getUniTVL({ factory: '0xea51CE8A1f9C1Cbbf5B89D9B1dA4A94fB1557866', }) }, } diff --git a/projects/sharkswap-finance/index.js b/projects/sharkswap-finance/index.js index 50caca0357..5389b3231d 100644 --- a/projects/sharkswap-finance/index.js +++ b/projects/sharkswap-finance/index.js @@ -1,7 +1,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const FACTORY = "0x57592D44eb60011500961EF177BFf8D8691D5a8B" -const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, fetchBalances: true }) +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true }) module.exports = { misrepresentedTokens: true, diff --git a/projects/shekelswap/index.js b/projects/shekelswap/index.js index 90ba666ee6..eaede3fee1 100644 --- a/projects/shekelswap/index.js +++ b/projects/shekelswap/index.js @@ -1,2 +1,2 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('arbitrum', '0xd78BA83aD495695940E97889E7191F717AfaC8E0', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('arbitrum', '0xd78BA83aD495695940E97889E7191F717AfaC8E0', { }) \ No newline at end of file diff --git a/projects/shibbex/index.js b/projects/shibbex/index.js index 1550053513..d93bb5ae4d 100644 --- a/projects/shibbex/index.js +++ b/projects/shibbex/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('shibarium', '0x6369e8dFaD8DB8378179D74C187f1D5DEa47Fa9F', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('shibarium', '0x6369e8dFaD8DB8378179D74C187f1D5DEa47Fa9F', { }) \ No newline at end of file diff --git a/projects/sohei/index.js b/projects/sohei/index.js index 4882d9f116..d2816dff15 100644 --- a/projects/sohei/index.js +++ b/projects/sohei/index.js @@ -2,11 +2,10 @@ const {compoundExports} = require('../helper/compound'); const { nullAddress } = require('../helper/tokenMapping'); const ceth = "0x685d1f1a83ff64e75fe882e7818e4ad9173342ca"; -const chain = "arbitrum"; module.exports = { hallmarks: [ [1680480000, "Team out of funds announced"] ], - arbitrum: compoundExports('0x9f750cf10034f3d7a18221aec0bddab7fc6f32ba', chain, ceth, nullAddress, undefined, undefined, { blacklistedTokens: ['0x6e002cb9bf8c17409eeb6c593ef6548faddd2985']}), + arbitrum: compoundExports('0x9f750cf10034f3d7a18221aec0bddab7fc6f32ba', ceth, nullAddress, { blacklistedTokens: ['0x6e002cb9bf8c17409eeb6c593ef6548faddd2985']}), }; \ No newline at end of file diff --git a/projects/solidblast/index.js b/projects/solidblast/index.js index c8d28e993a..a2a1b9960b 100644 --- a/projects/solidblast/index.js +++ b/projects/solidblast/index.js @@ -6,7 +6,6 @@ module.exports = { blast: { tvl: getUniTVL({ factory: "0x5a79cC04Ad1494A8Ec04cE5C1E25bB50A10111eA", - fetchBalances: true, useDefaultCoreAssets: true, }), }, diff --git a/projects/sparkdex-v2/index.js b/projects/sparkdex-v2/index.js index 15b857585c..1427df73c2 100644 --- a/projects/sparkdex-v2/index.js +++ b/projects/sparkdex-v2/index.js @@ -6,7 +6,6 @@ module.exports = { tvl: getUniTVL({ factory: "0x16b619B04c961E8f4F06C10B42FDAbb328980A89", useDefaultCoreAssets: true, - fetchBalances: true, }), }, }; diff --git a/projects/spiritswap-lending/index.js b/projects/spiritswap-lending/index.js index d2d37e7143..c1471d9c59 100644 --- a/projects/spiritswap-lending/index.js +++ b/projects/spiritswap-lending/index.js @@ -1,20 +1,8 @@ -const {usdCompoundExports} = require('../helper/compound') - -const abis = { - oracle: "address:getRegistry", - underlyingPrice: "function getPriceForUnderling(address cToken) view returns (uint256)", -} - -const unitroller_fantom = "0x892701d128d63c9856A9Eb5d967982F78FD3F2AE" - -const olalending = usdCompoundExports(unitroller_fantom, "fantom", "0xed8F2C964b47D4d607a429D4eeA972B186E6f111", abis) +const { compoundExports2 } = require('../helper/compound') module.exports = { hallmarks: [ [1693526400, "Lending Network deprecated"] ], - fantom:{ - tvl: olalending.tvl, - borrowed: olalending.borrowed - }, + fantom: compoundExports2({ comptroller: '0x892701d128d63c9856A9Eb5d967982F78FD3F2AE' }), } \ No newline at end of file diff --git a/projects/strike/index.js b/projects/strike/index.js index 40f8308780..680fd0ef71 100644 --- a/projects/strike/index.js +++ b/projects/strike/index.js @@ -1,6 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {fullCoumpoundExports} = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound'); -const comptroller = "0xe2e17b2CBbf48211FA7eB8A875360e5e39bA2602" - -module.exports=fullCoumpoundExports(comptroller, "ethereum", "0xbEe9Cf658702527b0AcB2719c1FAA29EdC006a92", ADDRESSES.ethereum.WETH) \ No newline at end of file +module.exports.ethereum = compoundExports2({ comptroller: '0xe2e17b2CBbf48211FA7eB8A875360e5e39bA2602', cether: '0xbee9cf658702527b0acb2719c1faa29edc006a92' }) diff --git a/projects/swirllend/index.js b/projects/swirllend/index.js index ec5925e93e..a9727b1352 100644 --- a/projects/swirllend/index.js +++ b/projects/swirllend/index.js @@ -3,19 +3,18 @@ const { compoundExports2 } = require("../helper/compound"); module.exports = { linea: compoundExports2({ comptroller: "0xcAABf6Ffb76634183254B0a4a3D5fb36180FdAE4", - fetchBalances: true, cether: '0x91067b912f89dfca50c3f5529dbeb78b63c6a2e5', }), base: compoundExports2({ comptroller: "0xcAABf6Ffb76634183254B0a4a3D5fb36180FdAE4", - fetchBalances: true, cether: '0x91067b912f89dfca50c3f5529dbeb78b63c6a2e5', }), hallmarks: [ [Math.floor(new Date('2023-08-16')/1e3), 'Project Rugged!'], ], + deadFrom: '2023-08-16' }; module.exports.base.borrowed = () => ({}) diff --git a/projects/tachyswap/index.js b/projects/tachyswap/index.js index 582afc546d..c6e7a20ea0 100644 --- a/projects/tachyswap/index.js +++ b/projects/tachyswap/index.js @@ -4,7 +4,6 @@ module.exports = { misrepresentedTokens: true, etlk: { tvl: getUniTVL({ - fetchBalances: true, useDefaultCoreAssets: true, factory: '0x033eff22bC5Bd30c597e1fdE8Ca6fB1C1274C688', }) diff --git a/projects/taffy/index.js b/projects/taffy/index.js index 30cf64f9ab..bcdb9ee1b2 100644 --- a/projects/taffy/index.js +++ b/projects/taffy/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens'); -module.exports = uniTvlExport('saakuru', '0xb9FFd4f89A86a989069CAcaE90e9ce824D0c4971', { fetchBalances: true, }) \ No newline at end of file +module.exports = uniTvlExport('saakuru', '0xb9FFd4f89A86a989069CAcaE90e9ce824D0c4971') \ No newline at end of file diff --git a/projects/tashi/index.js b/projects/tashi/index.js index e08d509c35..b7dd8ec1e0 100644 --- a/projects/tashi/index.js +++ b/projects/tashi/index.js @@ -1,7 +1,6 @@ const { compoundExports } = require('../helper/compound') -const ADDRESSES = require('../helper/coreAssets.json') module.exports = { methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets", - evmos: compoundExports("0x053841Bd1D291380726a007eA834Ecd296923260", "evmos", "0x1cd248D72248A0618932F77093Dc4ceC9757759d", ADDRESSES.null, undefined, undefined, { fetchBalances: true, }) + evmos: compoundExports("0x053841Bd1D291380726a007eA834Ecd296923260", "0x1cd248D72248A0618932F77093Dc4ceC9757759d") } diff --git a/projects/tender-finance/index.js b/projects/tender-finance/index.js index bc9ca25784..d14494d520 100644 --- a/projects/tender-finance/index.js +++ b/projects/tender-finance/index.js @@ -3,8 +3,8 @@ const { compoundExports } = require("../helper/compound"); module.exports = { hallmarks: [ - [1678190400,"Oracle Exploit"] + [1678190400, "Oracle Exploit"] ], methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets.", - arbitrum: compoundExports('0xeed247Ba513A8D6f78BE9318399f5eD1a4808F8e', 'arbitrum', '0x0706905b2b21574DEFcF00B5fc48068995FCdCdf', ADDRESSES.arbitrum.WETH) + arbitrum: compoundExports('0xeed247Ba513A8D6f78BE9318399f5eD1a4808F8e', '0x0706905b2b21574DEFcF00B5fc48068995FCdCdf', ADDRESSES.arbitrum.WETH) }; diff --git a/projects/torches/index.js b/projects/torches/index.js index 96b4757da5..8de85bc134 100644 --- a/projects/torches/index.js +++ b/projects/torches/index.js @@ -1,6 +1,5 @@ -const { compoundExports } = require("../helper/compound"); +const { compoundExports2 } = require("../helper/compound"); -const checkForLPTokens = i => /-LP/.test(i) module.exports = { - kcc: compoundExports("0xfbAFd34A4644DC4f7c5b2Ae150279162Eb2B0dF6", "kcc", undefined, undefined, undefined, checkForLPTokens) + kcc: compoundExports2({ comptroller: '0xfbAFd34A4644DC4f7c5b2Ae150279162Eb2B0dF6'}) } \ No newline at end of file diff --git a/projects/traderjoe-lend/index.js b/projects/traderjoe-lend/index.js index aeb05ccf43..e72efed541 100644 --- a/projects/traderjoe-lend/index.js +++ b/projects/traderjoe-lend/index.js @@ -1,27 +1,6 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); -const { getCompoundV2Tvl } = require('../helper/compound'); - -const comptroller = "0xdc13687554205E5b89Ac783db14bb5bba4A1eDaC"; +const { compoundExports2 } = require('../helper/compound'); module.exports = { - methodology: 'We count liquidity on the pairs and we get that information from the "traderjoe-xyz/exchange" subgraph. The staking portion of TVL includes the JoeTokens within the JoeBar contract.', - avax:{ - tvl: getCompoundV2Tvl( - comptroller, - "avax", - addr => `avax:${addr}`, - "0xC22F01ddc8010Ee05574028528614634684EC29e", - ADDRESSES.avax.WAVAX, - false - ), - borrowed: getCompoundV2Tvl( - comptroller, - "avax", - addr => `avax:${addr}`, - "0xC22F01ddc8010Ee05574028528614634684EC29e", - ADDRESSES.avax.WAVAX, - true - ), - } + methodology: 'We count liquidity on the pairs and we get that information from the "traderjoe-xyz/exchange" subgraph. The staking portion of TVL includes the JoeTokens within the JoeBar contract.', + avax: compoundExports2({ comptroller: '0xdc13687554205E5b89Ac783db14bb5bba4A1eDaC', cether: '0xC22F01ddc8010Ee05574028528614634684EC29e' }), }; diff --git a/projects/tranquil/index.js b/projects/tranquil/index.js index 8c578c5c7c..8cbbef2a5c 100644 --- a/projects/tranquil/index.js +++ b/projects/tranquil/index.js @@ -1,140 +1,36 @@ -const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); -const { BigNumber } = require("bignumber.js"); -const { getCompoundV2Tvl} = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') const { uniTvlExport } = require('../helper/calculateUniTvl.js'); +const { staking } = require('../helper/staking') -const tqOne = "0x34B9aa82D89AE04f0f546Ca5eC9C93eFE1288940"; // tqONE -const wOne = ADDRESSES.harmony.WONE; const stONEAddr = "0x22D62b19b7039333ad773b7185BB61294F3AdC19"; // stONE ERC20 contract -const tranqToken = "0xcf1709ad76a79d5a60210f23e81ce2460542a836"; +const { tvl: _tvl, borrowed } = compoundExports2({ comptroller: '0x6a82A17B48EF6be278BBC56138F35d04594587E3', cether: '0x34b9aa82d89ae04f0f546ca5ec9c93efe1288940' }) -const tranqWONESushiLP = "0x643f94fc0a804ea13adb88b9e17244bf94022a25"; -const stoneWONESushiLP = "0x6b53ca1ed597ed7ccd5664ec9e03329992c2ba87"; - -async function tranqWONE_pool2(balances, timestamp, chain, chainBlocks) { - let { output: balance } = await sdk.api.abi.multiCall({ - calls: [ - { - target: tranqToken, - params: tranqWONESushiLP, - }, - { - target: wOne, - params: tranqWONESushiLP, - }, - ], - abi: "erc20:balanceOf", - block: chainBlocks.harmony, - chain: "harmony", - }); - - let oneBalance = BigNumber(balance[1].output) - .div(10 ** 18) - .toFixed(0); - - sdk.util.sumSingleBalance( - balances, - `harmony:${tranqToken}`, - balance[0].output - ); - sdk.util.sumSingleBalance(balances, ["wrapped-one"], oneBalance); -} - -async function stoneWONE_pool2(balances, timestamp, chain, chainBlocks) { - let { output: balance } = await sdk.api.abi.multiCall({ - calls: [ - { - target: stONEAddr, - params: stoneWONESushiLP, - }, - { - target: wOne, - params: stoneWONESushiLP, - }, - ], - abi: "erc20:balanceOf", - block: chainBlocks.harmony, - chain: "harmony", - }); - - let oneBalance = BigNumber(balance[1].output) - .div(10 ** 18) - .toFixed(0); - - sdk.util.sumSingleBalance( - balances, - `harmony:${stONEAddr}`, - balance[0].output - ); - sdk.util.sumSingleBalance(balances, ["wrapped-one"], oneBalance); -} - -async function pool2(timestamp, chain, chainBlocks) { - let balances = {}; - await tranqWONE_pool2(balances, timestamp, chain, chainBlocks); - await stoneWONE_pool2(balances, timestamp, chain, chainBlocks); - - - return balances; +async function tvl(api) { + // Add ONE amount locked in Liquid Staking + // https://docs.tranquil.finance/liquid-staking-stone/tranquil-stone + const stoneBalance = await api.call({ target: stONEAddr, abi: 'erc20:totalSupply', }) + api.add(stONEAddr, stoneBalance) + return api.getBalances() } -async function tvl(timestamp, chain, chainBlocks) { - const transformAddress = addr=>`harmony:${addr}`; - const lendingMarketTvlFn = getCompoundV2Tvl("0x6a82A17B48EF6be278BBC56138F35d04594587E3", "harmony", transformAddress, tqOne, wOne, false); - let balances = await lendingMarketTvlFn(timestamp, chain, chainBlocks); - - // Add ONE amount locked in Liquid Staking - // https://docs.tranquil.finance/liquid-staking-stone/tranquil-stone - const stoneBalance = (await sdk.api.abi.call({ - block: chainBlocks.harmony, - target: stONEAddr, - abi: 'erc20:totalSupply', - chain: 'harmony' - })).output; - balances[`harmony:${stONEAddr}`]= stoneBalance; - - return balances; -} - -async function borrowed(timestamp, chain, chainBlocks) { - const transformAddress = addr=>`harmony:${addr}`; - const lendingMarketTvlFn = getCompoundV2Tvl("0x6a82A17B48EF6be278BBC56138F35d04594587E3", "harmony", transformAddress, tqOne, wOne, true); - return await lendingMarketTvlFn(timestamp, chain, chainBlocks); -} - - const xtranqToken = "0xb4aa8c8e555b3a2f1bfd04234ff803c011760e59"; const stakingContract = "0x59a4d6b2a944e8acabbd5d2571e731388918669f"; -async function staking(timestamp, chain, chainBlocks) { - let balances = {}; - - let { output: balance } = await sdk.api.erc20.balanceOf({ - target: xtranqToken, - owner: stakingContract, - block: chainBlocks.harmony, - chain: "harmony", - }); - - sdk.util.sumSingleBalance(balances, `harmony:${tranqToken}`, balance); - - return balances; -} - module.exports = { methodology: "TVL includes values locked into TqTokens. Pool2 are the liquidity in the TRANQ-WONE SUSHI LPs. Staking TVL are the xTRANQ tokens locked into the staking contract.", harmony: { tvl: sdk.util.sumChainTvls([ + _tvl, tvl, uniTvlExport('0xF166939E9130b03f721B0aE5352CCCa690a7726a', 'harmony', true), ]), - borrowed: borrowed, - pool2: pool2, - staking: staking, + borrowed: borrowed, + pool2: () => ({}), + staking: staking(stakingContract, xtranqToken), }, - hallmarks:[ + hallmarks: [ [1655991120, "Horizon bridge Hack $100m"], ], }; diff --git a/projects/treasury/benqi.js b/projects/treasury/benqi.js index f4f236745e..e74e28e272 100644 --- a/projects/treasury/benqi.js +++ b/projects/treasury/benqi.js @@ -1,4 +1,3 @@ -const { getCompoundV2Tvl } = require("../helper/compound"); const { stakings } = require("../helper/staking"); const { sumTokens } = require("../helper/sumTokens"); const { nullAddress } = require("../helper/treasury"); @@ -8,22 +7,16 @@ const treasury2 = "0x9d6ef2445fcc41b0d08865f0a7839490cc58a7b7"; const owners = [treasury, treasury2] const qi = "0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5"; -async function tvl(api){ - const balances = await getCompoundV2Tvl("0x486af39519b4dc9a7fccd318217352830e8ad9b4", "avax", undefined, undefined, undefined, false, undefined, { - abis:{ - getCash: {"constant":true,"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"} - } - })() - return sumTokens({ - balances, - api, - owners, - tokens: [nullAddress] - }) +async function tvl(api) { + const markets = await api.call({ abi: "address[]:getAllMarkets", target: '0x486af39519b4dc9a7fccd318217352830e8ad9b4'}) + const underlyings = (await api.multiCall({ abi: 'address:underlying', calls: markets, permitFailure: true })).map(i => i ?? nullAddress) + const bals = await api.multiCall({ abi: 'uint256:totalReserves', calls: markets}) + api.add(underlyings, bals) + return sumTokens({ api, owners, tokens: [nullAddress] }) } module.exports = { - avax:{ + avax: { ownTokens: stakings(owners, qi), tvl } diff --git a/projects/tropicalswap/index.js b/projects/tropicalswap/index.js index 04f8e98638..317fad7850 100644 --- a/projects/tropicalswap/index.js +++ b/projects/tropicalswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens'); -module.exports = uniTvlExport('mantle', '0x5B54d3610ec3f7FB1d5B42Ccf4DF0fB4e136f249', { fetchBalances: true, }) +module.exports = uniTvlExport('mantle', '0x5B54d3610ec3f7FB1d5B42Ccf4DF0fB4e136f249') diff --git a/projects/tropykus/index.js b/projects/tropykus/index.js index f0bb4e9dbd..10b7cf5e96 100644 --- a/projects/tropykus/index.js +++ b/projects/tropykus/index.js @@ -1,5 +1,5 @@ -const { usdCompoundExports } = require('../helper/compound') +const { compoundExports2 } = require('../helper/compound') module.exports = { - rsk: usdCompoundExports("0x962308fEf8edFaDD705384840e7701F8f39eD0c0", "rsk"), + rsk: compoundExports2({ comptroller: "0x962308fEf8edFaDD705384840e7701F8f39eD0c0", cether: '0x0aEaDb9d4C6a80462a47E87e76e487fa8b9A37d7', blacklistedTokens: ['0xd2ec53e8dd00d204d3d9313af5474eb9f5188ef6']}), } \ No newline at end of file diff --git a/projects/unclesam.js b/projects/unclesam.js index 2be1b9b90f..cb4459ddeb 100644 --- a/projects/unclesam.js +++ b/projects/unclesam.js @@ -2,9 +2,6 @@ const { compoundExports } = require("./helper/compound"); const unitroller = "0x0cDD860ca594982443E737AC7A0B84f18C477E05"; module.exports = { - methodology: - "Same as Compound Finance", - base: { - ...compoundExports(unitroller, "base"), - }, + base: compoundExports(unitroller), + deadFrom: "2023-08-27" }; diff --git a/projects/unfederalreserve/index.js b/projects/unfederalreserve/index.js index baf5f92b33..aaf6d0f9cd 100644 --- a/projects/unfederalreserve/index.js +++ b/projects/unfederalreserve/index.js @@ -1,4 +1,2 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {fullCoumpoundExports} = require('../helper/compound') - -module.exports=fullCoumpoundExports("0x3105D328c66d8d55092358cF595d54608178E9B5", "ethereum", "0xFaCecE87e14B50eafc85C44C01702F5f485CA460", ADDRESSES.ethereum.WETH) \ No newline at end of file +const { compoundExports2 } = require('../helper/compound'); +module.exports.ethereum = compoundExports2({ comptroller: '0x3105D328c66d8d55092358cF595d54608178E9B5', cether: '0xFaCecE87e14B50eafc85C44C01702F5f485CA460' }) \ No newline at end of file diff --git a/projects/usdfi-lending/index.js b/projects/usdfi-lending/index.js index 18a3724573..622c857d60 100644 --- a/projects/usdfi-lending/index.js +++ b/projects/usdfi-lending/index.js @@ -1,5 +1,5 @@ const { compoundExports } = require("../helper/compound"); module.exports = { - bsc: compoundExports('0x87363D74CD88A6220926Cf64bDEFd23ae63BE115', 'bsc',) + bsc: compoundExports('0x87363D74CD88A6220926Cf64bDEFd23ae63BE115') }; diff --git a/projects/vee-finance/index.js b/projects/vee-finance/index.js index c145a9c610..cc7de2d88e 100644 --- a/projects/vee-finance/index.js +++ b/projects/vee-finance/index.js @@ -1,23 +1,35 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {getCompoundV2Tvl, methodology} = require('../helper/compound') -const sdk = require('@defillama/sdk') +const sdk = require("@defillama/sdk"); +const { compoundExports2, methodology } = require('../helper/compound') -module.exports={ +module.exports = { methodology, - avax:{ - tvl: sdk.util.sumChainTvls([ - //V1&V2 on Avalanche - getCompoundV2Tvl("0xA67DFeD73025b0d61F2515c531dd8D25D4Cfd0Db", "avax", addr=>`avax:${addr}`), - getCompoundV2Tvl("0x43AAd7d8Bc661dfA70120865239529ED92Faa054", "avax", addr=>`avax:${addr}`, "0x6481490DBb6Bd0e8b7CB7E1317470f6d08aDa5A2", ADDRESSES.avax.WAVAX), - getCompoundV2Tvl("0xAF7f6F7a1295dEDF52a01F5c3f04Ad1b502CdA6a", "avax", addr=>`avax:${addr}`), - getCompoundV2Tvl("0xeEf69Cab52480D2BD2D4A3f3E8F5CcfF2923f6eF", "avax", addr=>`avax:${addr}`, "0x125605c515e3f75CAd62d3613c97A76F13d73A64", ADDRESSES.avax.WAVAX), - ]) +} + +const pools = { + avax: { + pools: [ + ['0xA67DFeD73025b0d61F2515c531dd8D25D4Cfd0Db'], + ['0xAF7f6F7a1295dEDF52a01F5c3f04Ad1b502CdA6a'], + ['0x43AAd7d8Bc661dfA70120865239529ED92Faa054', '0x6481490DBb6Bd0e8b7CB7E1317470f6d08aDa5A2'], + ['0xeEf69Cab52480D2BD2D4A3f3E8F5CcfF2923f6eF', '0x125605c515e3f75CAd62d3613c97A76F13d73A64'], + ], }, heco: { - tvl: sdk.util.sumChainTvls([ - //V1 on Heco - getCompoundV2Tvl("0x484C6e804cD4Cc27fCFbCf06748d6b4BCA47db84", "heco", addr=>`heco:${addr}`), - getCompoundV2Tvl("0x2a144ACaef8fb9258e4f2c2018945a76fE7342E2", "heco", addr=>`heco:${addr}`, "0x0F75aBfef98dAaa7A8170ddA97c8100a65ABA3cC", ADDRESSES.heco.WHT), - ]) - } + pools: [ + ['0x484C6e804cD4Cc27fCFbCf06748d6b4BCA47db84'], + ['0x2a144ACaef8fb9258e4f2c2018945a76fE7342E2', '0x0F75aBfef98dAaa7A8170ddA97c8100a65ABA3cC'], + ], + }, } + +function getTvl(chain) { + const config = pools[chain] ?? { pools: [] }; + const tvls = config.pools.map(([comptroller, cether]) => compoundExports2({ comptroller, cether })); + let tvl = sdk.util.sumChainTvls(tvls.map((t) => t.tvl)) + let borrowed = sdk.util.sumChainTvls(tvls.map((t) => t.borrowed)) + return { tvl, borrowed } +} + +Object.keys(pools).forEach(chain => module.exports[chain] = getTvl(chain)) + +module.exports.avax.borrowed = () => ({}) \ No newline at end of file diff --git a/projects/venus-isolated-pools/index.js b/projects/venus-isolated-pools/index.js index d4585e82f7..db1229667d 100644 --- a/projects/venus-isolated-pools/index.js +++ b/projects/venus-isolated-pools/index.js @@ -30,13 +30,13 @@ async function getPools(api) { async function tvl(...args) { const [api] = args const pools = await getPools(api) - const tvls = pools.map(i => compoundExports2({ comptroller: i, fetchBalances: true, })) + const tvls = pools.map(i => compoundExports2({ comptroller: i})) return sdk.util.sumChainTvls(tvls.map(i => i.tvl))(...args) } async function borrowed(...args) { const [api] = args const pools = await getPools(api) - const tvls = pools.map(i => compoundExports2({ comptroller: i, fetchBalances: true, })) + const tvls = pools.map(i => compoundExports2({ comptroller: i})) return sdk.util.sumChainTvls(tvls.map(i => i.borrowed))(...args) } diff --git a/projects/venus.js b/projects/venus.js index 6f552d30a8..cb52954cca 100644 --- a/projects/venus.js +++ b/projects/venus.js @@ -1,15 +1,6 @@ -const ADDRESSES = require('./helper/coreAssets.json') -const {fullCoumpoundExports, compoundExports2} = require('./helper/compound'); - -const replace = { - [ADDRESSES.bsc.BETH]: ADDRESSES.ethereum.WETH, // beth->weth - "0xfb6115445bff7b52feb98650c87f44907e58f802": ADDRESSES.ethereum.AAVE, // aave -} - -module.exports = fullCoumpoundExports("0xfd36e2c2a6789db23113685031d7f16329158384", "bsc", "0xA07c5b74C9B40447a954e1466938b865b6BBea36", ADDRESSES.bsc.WBNB, addr=>{ - return replace[addr.toLowerCase()] || `bsc:${addr}` -}) +const { compoundExports2} = require('./helper/compound'); +module.exports.bsc = compoundExports2({ comptroller: '0xfd36e2c2a6789db23113685031d7f16329158384', cether: '0xA07c5b74C9B40447a954e1466938b865b6BBea36'}) module.exports.ethereum = compoundExports2({ comptroller: '0x67aA3eCc5831a65A5Ba7be76BED3B5dc7DB60796'}) module.exports.op_bnb = compoundExports2({ comptroller: '0xd6e3e2a1d8d95cae355d15b3b9f8e5c2511874dd'}) module.exports.arbitrum = compoundExports2({ comptroller: '0x317c1A5739F39046E20b08ac9BeEa3f10fD43326'}) \ No newline at end of file diff --git a/projects/vivacity/index.js b/projects/vivacity/index.js index 8c250221ad..4f7630e462 100644 --- a/projects/vivacity/index.js +++ b/projects/vivacity/index.js @@ -1,6 +1,6 @@ const { compoundExports } = require('../helper/compound') -const compoundData = compoundExports("0xe49627059Dd2A0fba4A81528207231C508d276CB", "canto") +const compoundData = compoundExports("0xe49627059Dd2A0fba4A81528207231C508d276CB") module.exports = { canto: compoundData diff --git a/projects/welnance/index.js b/projects/welnance/index.js index 4dd3ede56f..b5fd292628 100644 --- a/projects/welnance/index.js +++ b/projects/welnance/index.js @@ -1,16 +1,11 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require("../helper/compound"); const comptroller = "0xdc21c1dAF3277f07fFA6EB09fCD3E07EDc36DC0A"; module.exports = { - bsc: { - ...compoundExports( comptroller, - "bsc", - "0x38e22c429e62530cbB59B90bF14a71346C727752", - ADDRESSES.bsc.WBNB - ), - }, + bsc: compoundExports(comptroller, + "0x38e22c429e62530cbB59B90bF14a71346C727752", + ), methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets", }; diff --git a/projects/wemix-lend/index.js b/projects/wemix-lend/index.js index 94298ddd35..ea92a8e390 100644 --- a/projects/wemix-lend/index.js +++ b/projects/wemix-lend/index.js @@ -1,10 +1,8 @@ const {compoundExports} = require('../helper/compound'); -const { nullAddress } = require('../helper/tokenMapping'); const compound = "0x929620a759a564e3C273e8a4efCDa5806da168F2"; const cETH = "0x34b9B18fDBE2aBC6DfB41A7f6d39B5E511ce3e23"; -const chain = "wemix"; module.exports = { - wemix: compoundExports(compound, chain, cETH, nullAddress), + wemix: compoundExports(compound,cETH), }; \ No newline at end of file diff --git a/projects/zkfairswap/index.js b/projects/zkfairswap/index.js index c9145bae53..856b5a4056 100644 --- a/projects/zkfairswap/index.js +++ b/projects/zkfairswap/index.js @@ -1,3 +1,3 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport( "zkfair", "0xeA70460a5B0E3A94EC05b1AaFCe9e6Eb11C334A0", { fetchBalances: true } ); +module.exports = uniTvlExport( "zkfair", "0xeA70460a5B0E3A94EC05b1AaFCe9e6Eb11C334A0" ); diff --git a/projects/zkfinance/index.js b/projects/zkfinance/index.js index 1ba6e29c4e..a5f3d04b8a 100644 --- a/projects/zkfinance/index.js +++ b/projects/zkfinance/index.js @@ -6,6 +6,5 @@ module.exports = { era: compoundExports2({ comptroller: zksyncComptroller, cether: zkEther, - fetchBalances: true, }), }; From d8e9cd9bc31db774ed8941558f319347d3125704 Mon Sep 17 00:00:00 2001 From: plonkai <167075793+plonkai@users.noreply.github.com> Date: Wed, 11 Sep 2024 02:59:34 +0800 Subject: [PATCH 0318/1768] tradoor add v2 (#11576) --- projects/tradoor/index.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/projects/tradoor/index.js b/projects/tradoor/index.js index ebe0c7c6bd..6c06183ac5 100644 --- a/projects/tradoor/index.js +++ b/projects/tradoor/index.js @@ -1,11 +1,15 @@ const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const evaaScAddr = "EQBPAMNu5Eud9AEvplOjNlRhxI4EkuJEhEMAmxh9erxmImKs" - module.exports = { methodology: 'Counts Tradoor smartcontract balance as TVL.', ton: { - tvl: sumTokensExport({ owner: evaaScAddr, tokens: [ADDRESSES.null]}), + tvl: sumTokensExport({ + owners: [ + "EQBPAMNu5Eud9AEvplOjNlRhxI4EkuJEhEMAmxh9erxmImKs", // v1 + "EQD_EzjJ9u0fpMJkoZBSv_ZNEMitAoYo9SsuD0s1ehIifnnn", // v2 + ], + tokens: [ADDRESSES.null] + }), } } From eb00d7c089a1f450034c956d58671c5b54372827 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Wed, 11 Sep 2024 03:00:45 +0800 Subject: [PATCH 0319/1768] Update fx-Protocol tvl (#11575) Co-authored-by: markone --- projects/fx-Protocol/index.js | 52 +++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/projects/fx-Protocol/index.js b/projects/fx-Protocol/index.js index a4f998796b..fd2c856a9b 100644 --- a/projects/fx-Protocol/index.js +++ b/projects/fx-Protocol/index.js @@ -1,13 +1,16 @@ const treasuries = [ - "0x0e5CAA5c889Bdf053c9A76395f62267E653AFbb0", - "0xED803540037B0ae069c93420F89Cd653B6e3Df1f", - "0xcfEEfF214b256063110d3236ea12Db49d2dF2359", - "0x781BA968d5cc0b40EB592D5c8a9a3A4000063885", - "0x38965311507D4E54973F81475a149c09376e241e", - "0x63Fe55B3fe3f74B42840788cFbe6229869590f83", - "0xdFac83173A96b06C5D6176638124d028269cfCd2" + "0x0e5CAA5c889Bdf053c9A76395f62267E653AFbb0", + "0xED803540037B0ae069c93420F89Cd653B6e3Df1f", + "0xcfEEfF214b256063110d3236ea12Db49d2dF2359", + "0x781BA968d5cc0b40EB592D5c8a9a3A4000063885", + "0x38965311507D4E54973F81475a149c09376e241e", + "0x63Fe55B3fe3f74B42840788cFbe6229869590f83", + "0xdFac83173A96b06C5D6176638124d028269cfCd2" ]; - +const cvxAddress = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; +const aCVX = "0xb0903Ab70a7467eE5756074b31ac88aEBb8fB777"; +const uniBTC = "0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568"; +const uniBTC_Genesis_Gauge = "0x1D20671A21112E85b03B00F94Fd760DE0Bef37Ba" module.exports = { doublecounted: true, ethereum: { @@ -15,9 +18,40 @@ module.exports = { }, }; +async function getACRVInfo(api) { + const totalAssets = await api.api.call( + { + target: aCVX, + abi: 'uint256:totalAssets', + }) + const totalSupply = await api.api.call( + { + target: aCVX, + abi: 'uint256:totalSupply', + }) + return totalAssets / totalSupply +} + +async function getUniBTCTvl(api) { + const totalSupply = await api.api.call( + { + target: uniBTC_Genesis_Gauge, + abi: 'uint256:totalSupply', + }) + return totalSupply +} async function tvl(api) { + const aCvxRate = await getACRVInfo(api) const tokens = await api.multiCall({ abi: 'address:baseToken', calls: treasuries }) const bals = await api.multiCall({ abi: 'uint256:totalBaseToken', calls: treasuries }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) - bals.forEach((bal, i) => api.add(tokens[i], bal / 10 ** (18 - decimals[i]))) + const uniBTCTvl = await getUniBTCTvl(api) + bals.forEach((bal, i) => { + if (tokens[i].toLowerCase() === aCVX.toLowerCase()) { + api.add(cvxAddress, bal*aCvxRate / 10 ** (18 - decimals[i])) + } else { + api.add(tokens[i], bal / 10 ** (18 - decimals[i])) + } + }) + api.add(uniBTC, uniBTCTvl) } \ No newline at end of file From 7463da2c2b2dc583ae4488d56d5b93f4b4a628e2 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 01:27:47 +0100 Subject: [PATCH 0320/1768] add deadFrom export --- projects/Magnate/index.js | 1 + projects/atlas-fi/index.js | 3 ++- projects/cells/index.js | 1 + projects/froggy-protocol/index.js | 1 + projects/merlin/index.js | 1 + projects/racoon/index.js | 1 + projects/zks-miner/index.js | 1 + 7 files changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/Magnate/index.js b/projects/Magnate/index.js index 707b662419..4f66a7b269 100644 --- a/projects/Magnate/index.js +++ b/projects/Magnate/index.js @@ -8,4 +8,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-08-25')/1e3), 'Project Rugged'], ], + deadFrom: Math.floor(new Date('2023-08-25')/1e3) }; diff --git a/projects/atlas-fi/index.js b/projects/atlas-fi/index.js index f3c59e9c9f..7bf2132ff7 100644 --- a/projects/atlas-fi/index.js +++ b/projects/atlas-fi/index.js @@ -30,5 +30,6 @@ module.exports = { tvl, pool2: sumTokensExport({ useDefaultCoreAssets: true, owner: FARM_PROXY, tokens: ['0x4edaa03fc13f8f13c3290c3728f587760b12e381'], lps: ['0x4edaa03fc13f8f13c3290c3728f587760b12e381'] }), staking: sumTokensExport({ useDefaultCoreAssets: true, owner: FARM_PROXY, tokens: ['0x296A0b8847BD4ED9af71a9ef238fa5Be0778B611'], lps: ['0x4edaa03fc13f8f13c3290c3728f587760b12e381'] }), - } + }, + deadFrom: 1681776000 } diff --git a/projects/cells/index.js b/projects/cells/index.js index 6cc7ec3d6d..ec2506fb2a 100644 --- a/projects/cells/index.js +++ b/projects/cells/index.js @@ -4,4 +4,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-06-11') / 1e3), 'Project rugged'], ], + deadFrom: Math.floor(new Date('2023-06-11') / 1e3) } \ No newline at end of file diff --git a/projects/froggy-protocol/index.js b/projects/froggy-protocol/index.js index c902b2be3c..378ef0e03c 100644 --- a/projects/froggy-protocol/index.js +++ b/projects/froggy-protocol/index.js @@ -23,4 +23,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-06-15')/1e3), 'Rug Pull ?'], ], + deadFrom: Math.floor(new Date('2023-06-15')/1e3) } \ No newline at end of file diff --git a/projects/merlin/index.js b/projects/merlin/index.js index 26f8863233..d668ed0d98 100644 --- a/projects/merlin/index.js +++ b/projects/merlin/index.js @@ -6,4 +6,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-04-26')/1e3), 'Project Rugged!'], ], + deadFrom: Math.floor(new Date('2023-04-26')/1e3) }; diff --git a/projects/racoon/index.js b/projects/racoon/index.js index e72eb0711e..969e3c014f 100644 --- a/projects/racoon/index.js +++ b/projects/racoon/index.js @@ -1,5 +1,6 @@ module.exports = { base: { tvl: () => ({}) }, + deadFrom: 1693180800, hallmarks: [ [1693180800, "Rug Pull"] ] diff --git a/projects/zks-miner/index.js b/projects/zks-miner/index.js index 9591eaf13e..8677befd7b 100644 --- a/projects/zks-miner/index.js +++ b/projects/zks-miner/index.js @@ -13,4 +13,5 @@ module.exports = { era: { tvl: sumTokensExport({ owners: [SILVER_MINER, DIAMOND_MINER, GOLD_MINER,], tokens: [nullAddress] }) }, + deadFrom: 1682726400 } From a6bce25e869b543a79c18fcc48b99eb3bf93cd1d Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 01:36:58 +0100 Subject: [PATCH 0321/1768] add deadfrom export --- projects/corgi/index.js | 4 +++- projects/doglands-swap/index.js | 2 ++ projects/echswap/index.js | 2 ++ projects/manifesto/index.js | 2 ++ projects/mosquitos-finance/index.js | 1 + projects/ohmw/index.js | 3 +++ projects/polyo-exchange/index.js | 6 ++++-- projects/y2b-finance/index.js | 2 ++ projects/zootopia-finance/index.js | 4 +++- 9 files changed, 22 insertions(+), 4 deletions(-) diff --git a/projects/corgi/index.js b/projects/corgi/index.js index 7b91d612e4..ca2948a7ed 100644 --- a/projects/corgi/index.js +++ b/projects/corgi/index.js @@ -1,3 +1,4 @@ +const { deadFrom } = require("../mosquitos-finance"); module.exports = { dogechain: { @@ -5,5 +6,6 @@ module.exports = { }, hallmarks: [ [1662859935, "Rug pull"], - ] + ], + deadFrom: 1662859935 } \ No newline at end of file diff --git a/projects/doglands-swap/index.js b/projects/doglands-swap/index.js index 3882cc3fe9..95b6d77e68 100644 --- a/projects/doglands-swap/index.js +++ b/projects/doglands-swap/index.js @@ -1,3 +1,4 @@ +const { deadFrom } = require("../mosquitos-finance"); module.exports = { methodology: "Count TVL as liquidity on the dex", @@ -8,4 +9,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-01-20')/1e3), 'Project rugged'], ], + deadFrom: Math.floor(new Date('2023-01-20')/1e3) } \ No newline at end of file diff --git a/projects/echswap/index.js b/projects/echswap/index.js index 751dcffd94..61e7a731d4 100644 --- a/projects/echswap/index.js +++ b/projects/echswap/index.js @@ -1,10 +1,12 @@ const { getUniTVL } = require('../helper/unknownTokens') +const { deadFrom } = require('../mosquitos-finance') module.exports = { misrepresentedTokens: true, hallmarks: [ [1671062400, "Rug Pull"] ], + deadFrom: 1671062400, echelon: { tvl: () => ({}), } diff --git a/projects/manifesto/index.js b/projects/manifesto/index.js index 41468a3c68..a5817ea198 100644 --- a/projects/manifesto/index.js +++ b/projects/manifesto/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unknownTokens"); +const { deadFrom } = require('../mosquitos-finance'); const lps = [ '0xF65af1E61D7aC87d73E347D17E369Dc2118E9517', ] @@ -8,6 +9,7 @@ module.exports = { hallmarks: [ [1676332800, "Rug Pull"] ], + deadFrom: 1676332800, misrepresentedTokens: true, canto: { tvl: sumTokensExport({ diff --git a/projects/mosquitos-finance/index.js b/projects/mosquitos-finance/index.js index a5c8a930b5..740d316074 100644 --- a/projects/mosquitos-finance/index.js +++ b/projects/mosquitos-finance/index.js @@ -141,6 +141,7 @@ module.exports = { [1678320000, "Rug Pull"] ], timetravel: false, + deadFrom: 1678320000, aptos: { tvl, staking diff --git a/projects/ohmw/index.js b/projects/ohmw/index.js index 15fa36da81..e25c32f5dc 100644 --- a/projects/ohmw/index.js +++ b/projects/ohmw/index.js @@ -1,7 +1,10 @@ +const { deadFrom } = require("../mosquitos-finance"); + module.exports= { hallmarks: [ [1670457600, "Rug Pull"] ], + deadFrom: 1670457600, ethpow: { tvl: () => ({}), } diff --git a/projects/polyo-exchange/index.js b/projects/polyo-exchange/index.js index 3d98b3c4fc..88ef0ce628 100644 --- a/projects/polyo-exchange/index.js +++ b/projects/polyo-exchange/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens2 } = require('../helper/unwrapLPs') +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { deadFrom } = require('../mosquitos-finance'); // polyo Asset Address const Asset_P01_BUSD = "0xC72e6f8041183EaD6f85839bD463F7aD0f14A40D"; @@ -31,5 +32,6 @@ module.exports = { }, hallmarks: [ [1662842254, "Rug pull"], - ] + ], + deadFrom: 1662842254 }; diff --git a/projects/y2b-finance/index.js b/projects/y2b-finance/index.js index d61e36d21e..bd0b88b5be 100644 --- a/projects/y2b-finance/index.js +++ b/projects/y2b-finance/index.js @@ -1,5 +1,6 @@ const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') const { getLogs } = require('../helper/cache/getLogs') +const { deadFrom } = require('../mosquitos-finance') async function tvl(api) { const logs = await getLogs({ @@ -25,6 +26,7 @@ module.exports = { hallmarks: [ [1673913600, "Rug Pull"] ], + deadFrom: 1673913600, ethereum: { tvl, // staking: sumTokensExport({ owners: [], tokens: ['0xF9C12B27cE5058ab98ce11BD53900f84E18C0650']}) diff --git a/projects/zootopia-finance/index.js b/projects/zootopia-finance/index.js index 19ae5d2884..56d56b92be 100644 --- a/projects/zootopia-finance/index.js +++ b/projects/zootopia-finance/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens2 } = require('../helper/unwrapLPs') +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { deadFrom } = require('../mosquitos-finance'); // ztp swap address const SWAP_ADDR = "0xCdD4396527b6681775173839002E6af201885CB8"; @@ -18,6 +19,7 @@ module.exports = { hallmarks: [ [1667174400, "Rug Pull"] ], + deadFrom: 1667174400, bsc: { tvl, }, From d7fa9d72710f649ea57e73761d4ae976cdf65aeb Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 01:55:09 +0100 Subject: [PATCH 0322/1768] add deadFrom export --- projects/2doge/index.js | 3 ++- projects/CthulhuFinance/index.js | 1 + projects/KyborgExchange/index.js | 1 + projects/adaxPro/index.js | 1 + projects/blur-finance/index.js | 1 + projects/dinosaur-finance/index.js | 1 + projects/fundex/index.js | 3 ++- projects/klaylend/index.js | 3 ++- projects/laari-fi/index.js | 3 ++- projects/stabledoin/index.js | 1 + projects/strategyx-finance/index.js | 1 + projects/trapeza-protocol/index.js | 1 + projects/zombi/index.js | 1 + 13 files changed, 17 insertions(+), 4 deletions(-) diff --git a/projects/2doge/index.js b/projects/2doge/index.js index d1729bbfde..c3645ff7a9 100644 --- a/projects/2doge/index.js +++ b/projects/2doge/index.js @@ -19,5 +19,6 @@ module.exports = { }, hallmarks: [ [1646179200, "Rug Pull"] - ] + ], + deadFrom: 1646179200 }; diff --git a/projects/CthulhuFinance/index.js b/projects/CthulhuFinance/index.js index 84776a175e..506c8e7acb 100644 --- a/projects/CthulhuFinance/index.js +++ b/projects/CthulhuFinance/index.js @@ -15,6 +15,7 @@ module.exports = { hallmarks: [ [1679788800, "Rug Pull"] ], + deadFrom: 1679788800, optimism: { tvl: vaultTvl([ "0xF6a6C4573099E6F6b9D8E1186a2C089B4d0fDf91", diff --git a/projects/KyborgExchange/index.js b/projects/KyborgExchange/index.js index ce604dec3b..63333c7f9f 100644 --- a/projects/KyborgExchange/index.js +++ b/projects/KyborgExchange/index.js @@ -9,6 +9,7 @@ module.exports = { hallmarks: [ [1684108800, "Rug Pull"] ], + deadFrom: '2023-05-15', methodology: `Counts the tokens balances of the KyborgHub contract`, }; diff --git a/projects/adaxPro/index.js b/projects/adaxPro/index.js index d8edf47e0e..da9196e5d1 100644 --- a/projects/adaxPro/index.js +++ b/projects/adaxPro/index.js @@ -8,4 +8,5 @@ module.exports={ hallmarks: [ [Math.floor(new Date('2023-08-29')/1e3), 'Website offline! Rug pull?'], ], + deadFrom: Math.floor(new Date('2023-08-29')/1e3) } \ No newline at end of file diff --git a/projects/blur-finance/index.js b/projects/blur-finance/index.js index b89430a011..4aaf7040a2 100644 --- a/projects/blur-finance/index.js +++ b/projects/blur-finance/index.js @@ -5,4 +5,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2022-08-10')/1e3), 'Rug pull'], ], + deadFrom: Math.floor(new Date('2022-08-10')/1e3) } \ No newline at end of file diff --git a/projects/dinosaur-finance/index.js b/projects/dinosaur-finance/index.js index d468024e94..f0a56d1812 100644 --- a/projects/dinosaur-finance/index.js +++ b/projects/dinosaur-finance/index.js @@ -24,6 +24,7 @@ module.exports = { hallmarks: [ [1675814400, "Rug Pull"] ], + deadFrom: '2023-02-08', arbitrum: { tvl, } diff --git a/projects/fundex/index.js b/projects/fundex/index.js index c8a1a94223..ad99f429ed 100644 --- a/projects/fundex/index.js +++ b/projects/fundex/index.js @@ -9,7 +9,8 @@ const config = { module.exports = { hallmarks: [ [1680134400, "Rugpull"] - ] + ], + deadFrom: '2023-03-30' }; Object.keys(config).forEach(chain => { module.exports[chain] = {tvl} }) diff --git a/projects/klaylend/index.js b/projects/klaylend/index.js index e0eb6d0f59..a0fe378587 100644 --- a/projects/klaylend/index.js +++ b/projects/klaylend/index.js @@ -12,4 +12,5 @@ module.exports = masterchefExports({ }) module.exports.hallmarks = [ [1662336000, "Rug Pull"] -] \ No newline at end of file +], +module.exports.deadFrom = 1662336000 \ No newline at end of file diff --git a/projects/laari-fi/index.js b/projects/laari-fi/index.js index d36349d111..28baf4b785 100644 --- a/projects/laari-fi/index.js +++ b/projects/laari-fi/index.js @@ -13,4 +13,5 @@ module.exports = yieldHelper({ poolInfo: 'function poolInfo(uint256) view returns (address want, uint256, uint256, uint256, uint256, uint256, uint256, uint256 amount, uint256, address strat)', }, }) -module.exports.hallmarks=[[1697068800, "Rug Pull"]] \ No newline at end of file +module.exports.hallmarks=[[1697068800, "Rug Pull"]], +module.exports.deadFrom='2023-10-12' \ No newline at end of file diff --git a/projects/stabledoin/index.js b/projects/stabledoin/index.js index cc886e818d..a2059c5cd3 100644 --- a/projects/stabledoin/index.js +++ b/projects/stabledoin/index.js @@ -8,6 +8,7 @@ module.exports = { hallmarks: [ [1666656000, "Rug Pull"] ], + deadFrom: 1666656000, dogechain: { tvl: sdk.util.sumChainTvls([ getUniTVL({ factory, useDefaultCoreAssets: true, }), diff --git a/projects/strategyx-finance/index.js b/projects/strategyx-finance/index.js index d097ce4f19..f0da70c8f1 100644 --- a/projects/strategyx-finance/index.js +++ b/projects/strategyx-finance/index.js @@ -6,4 +6,5 @@ module.exports = { hallmarks: [ [1658370720, "Rug pull"] ], + deadFrom: 1658370720 }; diff --git a/projects/trapeza-protocol/index.js b/projects/trapeza-protocol/index.js index 7e8925d946..5bea20a417 100644 --- a/projects/trapeza-protocol/index.js +++ b/projects/trapeza-protocol/index.js @@ -13,6 +13,7 @@ module.exports = { hallmarks: [ [1648684800, "Rug Pull"] ], + deadFrom: 1648684800, misrepresentedTokens: true, ...ohmTvl(treasury, treasuryTokens, "bsc", fidlStaking, fidl, undefined, undefined, false) } \ No newline at end of file diff --git a/projects/zombi/index.js b/projects/zombi/index.js index c8f7f81b8f..cdc2ee54d9 100644 --- a/projects/zombi/index.js +++ b/projects/zombi/index.js @@ -22,5 +22,6 @@ module.exports = { hallmarks: [ [1646870400, "Rug Pull"] ], + deadFrom: 1646870400, ...zombiTvl(token, share, rewardPool, rewardPoolGeneris, masonry, pool2LPs, listedTokenGeneris, "fantom", undefined, false, "0xe577DF94b4Ea94399B7438e27EA1Ba81717464A0") } From 67c5b8ffb9b95758cd3d3f11c2c254e1135bdade Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 02:09:01 +0100 Subject: [PATCH 0323/1768] add deadfrom export --- projects/apexswap/index.js | 1 + projects/goldbank/index.js | 1 + projects/kannagi-finance/index.js | 3 ++- projects/kefirswap/index.js | 1 + projects/kumu-finance/index.js | 1 + projects/nightmare/index.js | 3 ++- projects/omniprotocol/index.js | 1 + projects/spadefinance/index.js | 3 ++- projects/swivel/index.js | 1 + projects/treehousefinance/index.js | 3 ++- 10 files changed, 14 insertions(+), 4 deletions(-) diff --git a/projects/apexswap/index.js b/projects/apexswap/index.js index d509b1c8a3..f5ef357df5 100644 --- a/projects/apexswap/index.js +++ b/projects/apexswap/index.js @@ -5,6 +5,7 @@ module.exports = { hallmarks: [ [1665532800, "Rug Pull"] ], + deadFrom: '2022-10-12', avax: { tvl: getUniTVL({ factory: '0x21cadeb92c8bbfbef98c3098846f0999209c3a97', diff --git a/projects/goldbank/index.js b/projects/goldbank/index.js index 00d01f7023..11824ea2ce 100644 --- a/projects/goldbank/index.js +++ b/projects/goldbank/index.js @@ -5,6 +5,7 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-06-11') / 1e3), 'Project rugged'], ], + deadFrom: '2023-06-11', methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", arbitrum: { diff --git a/projects/kannagi-finance/index.js b/projects/kannagi-finance/index.js index 5e3dc9686d..26c9249b8c 100644 --- a/projects/kannagi-finance/index.js +++ b/projects/kannagi-finance/index.js @@ -35,4 +35,5 @@ helperReturn.era.tvl = tvlFunWrapper return helperReturn; } -module.exports = {...yieldHelperWrapper(), hallmarks:[[1690589340, "Rug"]]} +module.exports = {...yieldHelperWrapper(), hallmarks:[[1690589340, "Rug"]]}, +module.exports.deadFrom='2023-07-29' diff --git a/projects/kefirswap/index.js b/projects/kefirswap/index.js index a459ae97e6..cdd05b8a8a 100644 --- a/projects/kefirswap/index.js +++ b/projects/kefirswap/index.js @@ -9,6 +9,7 @@ module.exports = { hallmarks: [ [1656806400, "Rug Pull"] ], + deadFrom: '2022-07-03', methodology: "Count TVL as liquidity on the dex", misrepresentedTokens: true, kava: { diff --git a/projects/kumu-finance/index.js b/projects/kumu-finance/index.js index f2c9a5ed31..a1ce5305f4 100644 --- a/projects/kumu-finance/index.js +++ b/projects/kumu-finance/index.js @@ -44,6 +44,7 @@ module.exports = { hallmarks: [ [1662336000, "Rug Pull"] ], + deadFrom: '2022-09-25', klaytn: { tvl, staking } diff --git a/projects/nightmare/index.js b/projects/nightmare/index.js index c3d3efe515..caa5aff4ca 100644 --- a/projects/nightmare/index.js +++ b/projects/nightmare/index.js @@ -7,4 +7,5 @@ module.exports = masterchefExports({ }) module.exports.hallmarks = [ [1646179200, "Rug Pull"] -] \ No newline at end of file +], +module.exports.deadFrom='2022-03-02' \ No newline at end of file diff --git a/projects/omniprotocol/index.js b/projects/omniprotocol/index.js index 8ba29232f9..59c07c5063 100644 --- a/projects/omniprotocol/index.js +++ b/projects/omniprotocol/index.js @@ -14,4 +14,5 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2022-07-10')/1e3), 'reentrancy hack'], ], + deadFrom: '2022-07-10', }; \ No newline at end of file diff --git a/projects/spadefinance/index.js b/projects/spadefinance/index.js index ddaece14bd..d5ab771e59 100644 --- a/projects/spadefinance/index.js +++ b/projects/spadefinance/index.js @@ -8,4 +8,5 @@ module.exports = masterchefExports({ module.exports.hallmarks = [ [1647734400, "Rug Pull"] - ] + ], +module.exports.deadFrom='2022-03-20' diff --git a/projects/swivel/index.js b/projects/swivel/index.js index ff654a4a7d..557bf1710e 100644 --- a/projects/swivel/index.js +++ b/projects/swivel/index.js @@ -5,6 +5,7 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-03-13') / 1e3), 'Euler was hacked'], ], + deadFrom: '2023-03-13', ethereum: { tvl: sumTokensExport({ owners: [ diff --git a/projects/treehousefinance/index.js b/projects/treehousefinance/index.js index 86ec1db83e..72790351cf 100644 --- a/projects/treehousefinance/index.js +++ b/projects/treehousefinance/index.js @@ -8,5 +8,6 @@ module.exports = { methodology: "TVL includes all farms in MasterChef contract", hallmarks: [ [1647043200, "Rug Pull"] - ] + ], + deadFrom: '2022-03-12' } \ No newline at end of file From a4ad0d7465e85d9672b81c3a9201f80336c9aa15 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 02:20:15 +0100 Subject: [PATCH 0324/1768] add deadfrom export --- projects/Zolidly/index.js | 1 + projects/ZukeSwap/index.js | 1 + projects/avatr/index.js | 1 + projects/bonqdao/index.js | 1 + projects/cemetery/index.js | 3 ++- projects/hope-lend/index.js | 1 + projects/inuswap/index.js | 1 + projects/jbc/index.js | 1 + projects/palmaswap/index.js | 1 + projects/perseid-finance/index.js | 1 + 10 files changed, 11 insertions(+), 1 deletion(-) diff --git a/projects/Zolidly/index.js b/projects/Zolidly/index.js index ebb6c6a558..c3fa2b9879 100644 --- a/projects/Zolidly/index.js +++ b/projects/Zolidly/index.js @@ -5,6 +5,7 @@ module.exports = { hallmarks: [ [1684713600, "Rug Pull"] ], + deadFrom: '2023-05-22', era: { tvl: getUniTVL({ factory: '0x6E1315819908Eaa036405f405c033cC2BfFBFc75', diff --git a/projects/ZukeSwap/index.js b/projects/ZukeSwap/index.js index 6d16f07a58..c9f4fe1215 100644 --- a/projects/ZukeSwap/index.js +++ b/projects/ZukeSwap/index.js @@ -4,6 +4,7 @@ module.exports = { hallmarks: [ [1680307200, "Rug Pull"] ], + deadFrom: '2023-04-01', misrepresentedTokens: true, loop: { tvl: getUniTVL({ diff --git a/projects/avatr/index.js b/projects/avatr/index.js index 574576b847..23f07d4da8 100644 --- a/projects/avatr/index.js +++ b/projects/avatr/index.js @@ -26,6 +26,7 @@ module.exports = { hallmarks: [ [1682726400, "Rug Pull"] ], + deadFrom: '2023-04-29', ethereum: { tvl, }, diff --git a/projects/bonqdao/index.js b/projects/bonqdao/index.js index 45c4a56248..8f60657a81 100644 --- a/projects/bonqdao/index.js +++ b/projects/bonqdao/index.js @@ -67,6 +67,7 @@ module.exports = { hallmarks: [ [1675252800,"Oracle Hack"] ], + deadFrom: '2023-02-01', methodology: 'Summation of the collateral deposited in BonqDAO Troves (personal lending vaults)', start: 36884903, polygon: { diff --git a/projects/cemetery/index.js b/projects/cemetery/index.js index 2658153249..b55b1f79ac 100644 --- a/projects/cemetery/index.js +++ b/projects/cemetery/index.js @@ -7,5 +7,6 @@ module.exports = masterchefExports({ }) module.exports.hallmarks = [ [1646524800,"Rug Pull"] -] +], +module.exports.deadFrom='2022-03-06' diff --git a/projects/hope-lend/index.js b/projects/hope-lend/index.js index f40f2632f1..3b9d5302ae 100644 --- a/projects/hope-lend/index.js +++ b/projects/hope-lend/index.js @@ -9,6 +9,7 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-10-18')/1e3), 'Protocol was hacked!'], ], + deadFrom: '2023-10-18' }; delete module.exports.ethereum.borrowed \ No newline at end of file diff --git a/projects/inuswap/index.js b/projects/inuswap/index.js index 1cb8565c42..f608b398b4 100644 --- a/projects/inuswap/index.js +++ b/projects/inuswap/index.js @@ -8,6 +8,7 @@ module.exports = { hallmarks: [ [1663200000, "Rug Pull"] ], + deadFrom: '2022-09-15', dogechain: { tvl: getUniTVL({ useDefaultCoreAssets: true, diff --git a/projects/jbc/index.js b/projects/jbc/index.js index 0f32be4f1e..bd8d385e16 100644 --- a/projects/jbc/index.js +++ b/projects/jbc/index.js @@ -14,6 +14,7 @@ module.exports = { hallmarks: [ [1681516800, "Rug Pull"] ], + deadFrom: '2023-04-15', arbitrum: { tvl: sumTokensExport({ tokensAndOwners }), pool2: pool2({ stakingContract: '0x0F6f73c7ecCE4FB9861E25dabde79CBA112550b3', lpToken, useDefaultCoreAssets: true, }), diff --git a/projects/palmaswap/index.js b/projects/palmaswap/index.js index 6cacfa927a..784385db04 100644 --- a/projects/palmaswap/index.js +++ b/projects/palmaswap/index.js @@ -11,6 +11,7 @@ module.exports = { hallmarks: [ [1679356800, "Rug Pull"] ], + deadFrom: '2023-03-21', core: { tvl: sdk.util.sumChainTvls([uniTvl, staking({ owners: [masterchef], diff --git a/projects/perseid-finance/index.js b/projects/perseid-finance/index.js index fe2325cb81..ac8fe91978 100644 --- a/projects/perseid-finance/index.js +++ b/projects/perseid-finance/index.js @@ -38,6 +38,7 @@ module.exports = { hallmarks: [ [1699578000,"Rug Pull"] ], + deadFrom: '2023-11-10', scroll: { tvl: getTvl(false), staking: getTvl(true), From baf94c1e59af84212cb68abae6023c6214267da0 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 05:01:06 +0100 Subject: [PATCH 0325/1768] fix borrowed export --- projects/goldbank/index.js | 4 +++- projects/homecoin/index.js | 3 ++- projects/lendoraprotocol/index.js | 5 +++++ projects/mare-finance/index.js | 5 ++++- projects/merchant/index.js | 9 ++++++++- projects/omniprotocol/index.js | 4 +++- projects/sohei/index.js | 7 ++++++- projects/toreus/index.js | 5 ++++- projects/unclesam.js | 1 + projects/xbank/index.js | 5 ++++- 10 files changed, 40 insertions(+), 8 deletions(-) diff --git a/projects/goldbank/index.js b/projects/goldbank/index.js index 11824ea2ce..12bfafede8 100644 --- a/projects/goldbank/index.js +++ b/projects/goldbank/index.js @@ -11,4 +11,6 @@ module.exports = { arbitrum: { ...compoundExports(unitroller), }, -}; \ No newline at end of file +}; + +module.exports.arbitrum.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/homecoin/index.js b/projects/homecoin/index.js index 87375a41a3..96479b80ab 100644 --- a/projects/homecoin/index.js +++ b/projects/homecoin/index.js @@ -52,9 +52,10 @@ const borrowed = async (_, ethBlock) => { module.exports = { misrepresentedTokens: true, start: HOME_START, + deadFrom: '2022-11-09', ethereum: { tvl, - borrowed, + borrowed: ()=>({}), // it's all bad debt }, methodology: "The base TVL metric counts only USDC liquidity in the protocol." + diff --git a/projects/lendoraprotocol/index.js b/projects/lendoraprotocol/index.js index 7ed7230e5a..22078344ca 100644 --- a/projects/lendoraprotocol/index.js +++ b/projects/lendoraprotocol/index.js @@ -8,8 +8,13 @@ module.exports = { }), }; + +module.exports.deadFrom = '2023-12-04', + module.exports.scroll.staking = staking( ['0xca4fb5541D0f2899549e5f454155E1B34acc9379', '0x578E4f84663260e5C5c64d5310Dd76aA3CEC633c'], '0x3e6c99915803631D200441CdF6D84786912b0871', 'scroll' ) + +module.exports.scroll.borrowed = () => ({}) // bad debt diff --git a/projects/mare-finance/index.js b/projects/mare-finance/index.js index 05e2d49942..77b498d232 100644 --- a/projects/mare-finance/index.js +++ b/projects/mare-finance/index.js @@ -5,8 +5,11 @@ const unitroller = "0x4804357AcE69330524ceb18F2A647c3c162E1F95"; module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", + deadFrom: '2023-07-08', kava: { ...compoundExports(unitroller), staking: staking(['0x2c4A1f47c3E15F468399A87c4B41ec0d19297772', '0x194AAd54F363D28aDEaE53A7957d63B9BCf8a6b2'], '0xd86C8d4279CCaFbec840c782BcC50D201f277419') }, -} \ No newline at end of file +} + +module.exports.kava.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/merchant/index.js b/projects/merchant/index.js index 67e383e770..bfb0bcb625 100644 --- a/projects/merchant/index.js +++ b/projects/merchant/index.js @@ -1,9 +1,12 @@ const { compoundExports2 } = require("../helper/compound"); + + module.exports = { hallmarks: [ [1720051200,"Rug Pull"] ], + deadFrom: '2024-07-06', methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", merlin: { @@ -12,4 +15,8 @@ module.exports = { linea: { ...compoundExports2({ comptroller: '0xE54F37bbb8b7417EE4e0447DA0F8b922Fc7bb8Fa'}), }, -}; +} + +module.exports.merlin.borrowed = () => ({}) // bad debt +module.exports.linea.borrowed = () => ({}) // bad debt + diff --git a/projects/omniprotocol/index.js b/projects/omniprotocol/index.js index 59c07c5063..f06775fd7a 100644 --- a/projects/omniprotocol/index.js +++ b/projects/omniprotocol/index.js @@ -15,4 +15,6 @@ module.exports = { [Math.floor(new Date('2022-07-10')/1e3), 'reentrancy hack'], ], deadFrom: '2022-07-10', -}; \ No newline at end of file +}; + +module.exports.ethereum.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/sohei/index.js b/projects/sohei/index.js index d2816dff15..1814816d79 100644 --- a/projects/sohei/index.js +++ b/projects/sohei/index.js @@ -3,9 +3,14 @@ const { nullAddress } = require('../helper/tokenMapping'); const ceth = "0x685d1f1a83ff64e75fe882e7818e4ad9173342ca"; + + module.exports = { hallmarks: [ [1680480000, "Team out of funds announced"] ], + deadFrom: '2023-04-20', arbitrum: compoundExports('0x9f750cf10034f3d7a18221aec0bddab7fc6f32ba', ceth, nullAddress, { blacklistedTokens: ['0x6e002cb9bf8c17409eeb6c593ef6548faddd2985']}), -}; \ No newline at end of file +} + +module.exports.arbitrum.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/toreus/index.js b/projects/toreus/index.js index 9050af084a..4ac52c64fa 100644 --- a/projects/toreus/index.js +++ b/projects/toreus/index.js @@ -6,8 +6,11 @@ const TOREUS = "0x8549724fcC84ee9ee6c7A676F1Ba2Cc2f43AAF5B"; module.exports = { methodology, + deadFrom: '2023-07-18', kava: { ...aaveExports("kava", "0xcCe311383b0f4A41c82D8d03a1f4214A3c8E70Bd"), staking: staking(stakingContract, TOREUS), }, -}; \ No newline at end of file +}; + +module.exports.kava.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/unclesam.js b/projects/unclesam.js index cb4459ddeb..c6cbda4888 100644 --- a/projects/unclesam.js +++ b/projects/unclesam.js @@ -5,3 +5,4 @@ module.exports = { base: compoundExports(unitroller), deadFrom: "2023-08-27" }; +module.exports.base.borrowed = () => ({}) // bad debt diff --git a/projects/xbank/index.js b/projects/xbank/index.js index c9e3f5ef78..7ce5b8aedd 100644 --- a/projects/xbank/index.js +++ b/projects/xbank/index.js @@ -1,8 +1,11 @@ const { compoundExports2 } = require('../helper/compound'); module.exports = { + deadFrom: '2024-04-28', era: compoundExports2({ comptroller: '0xC6d329a2C3f8cFDECAe7FeEc387fa633C6520991', cether: '0xE4622A57Ab8F4168b80015BBA28fA70fb64fa246', }) -}; \ No newline at end of file +}; + +module.exports.era.borrowed = () => ({}) // bad debt \ No newline at end of file From c88203ac22c786d1091907a09463c35c7c72576b Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 11 Sep 2024 05:13:35 +0100 Subject: [PATCH 0326/1768] fix borrowed export --- projects/AvoLend/index.js | 2 ++ projects/glorifinance/index.js | 2 ++ projects/milkyway/index.js | 3 +++ projects/paperdao/index.js | 5 ++++- projects/tempest/index.js | 4 ++++ projects/w3bank/index.js | 3 +++ 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/projects/AvoLend/index.js b/projects/AvoLend/index.js index c7e8011c96..e4d354ef8e 100644 --- a/projects/AvoLend/index.js +++ b/projects/AvoLend/index.js @@ -6,3 +6,5 @@ module.exports = { cether: '0x29e15766d6b203C35c2D51AAEc4Cf964129Af088', }), }; +module.exports.deadFrom='2024-04-03', +module.exports.blast.borrowed = () => ({}) // bad debt diff --git a/projects/glorifinance/index.js b/projects/glorifinance/index.js index b01f0c7f74..497c061622 100644 --- a/projects/glorifinance/index.js +++ b/projects/glorifinance/index.js @@ -24,3 +24,5 @@ module.exports = mergeExports([ arbi_helper, { arbitrum: lend, } ]) +module.exports.deadFrom='2024-04-30', +module.exports.arbitrum.borrowed = () => ({}) // bad debt diff --git a/projects/milkyway/index.js b/projects/milkyway/index.js index 70175f76be..d1884ee3f2 100644 --- a/projects/milkyway/index.js +++ b/projects/milkyway/index.js @@ -1,7 +1,10 @@ const { compoundExports } = require("../helper/compound"); module.exports = { + deadFrom: '2023-12-15', timetravel: false, // milkomeda api's for staked coins can't be queried at historical points start: 1599552000, // 09/08/2020 @ 8:00am (UTC) milkomeda: compoundExports("0x0Dd4E2B7E0E8a2Cd1258a9023D3a5062381554Cf"), }; + +module.exports.milkomeda.borrowed = () => ({}) // bad debt diff --git a/projects/paperdao/index.js b/projects/paperdao/index.js index 013e90e408..68b7a9d4da 100644 --- a/projects/paperdao/index.js +++ b/projects/paperdao/index.js @@ -12,4 +12,7 @@ const blacklist = [ module.exports = { methodology, ethpow: compoundExports("0x5e496e7F241B13c514A78B7E840bc3cC744D7215", "0xb9e008f2C039fB994C8adD806F8aF709899aA95e", ADDRESSES.ethereum.WETH, { blacklistedTokens: blacklist }) -} \ No newline at end of file +} + +module.exports.deadFrom='2023-05-01', +module.exports.ethpow.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/tempest/index.js b/projects/tempest/index.js index a3b893ead3..29480fcbfd 100644 --- a/projects/tempest/index.js +++ b/projects/tempest/index.js @@ -10,3 +10,7 @@ module.exports = { cether: '0x6283829589A6A02981B425fd2e86D22F012191aC', }) }; + +module.exports.deadFrom='2023-09-08', +module.exports.optimism.borrowed = () => ({}) // bad debt +module.exports.base.borrowed = () => ({}) // bad debt diff --git a/projects/w3bank/index.js b/projects/w3bank/index.js index 90589db821..dc623b8d98 100644 --- a/projects/w3bank/index.js +++ b/projects/w3bank/index.js @@ -6,3 +6,6 @@ module.exports = { pg: compoundExports2({ comptroller: '0x697bc9fd98ddafd1979c3e079033698ca93af451'}), methodology: `${lendingMarket}`, }; + +module.exports.deadFrom='2024-06-21', +module.exports.pg.borrowed = () => ({}) // bad debt From 8903b9fadddc330be92ed45532082aa88428d2fb Mon Sep 17 00:00:00 2001 From: Nan Thanwa Date: Wed, 11 Sep 2024 15:00:24 +0700 Subject: [PATCH 0327/1768] Add PumpXY project (#11583) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 21 ++++++++++++--------- projects/pumpxy/index.js | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 projects/pumpxy/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 1f97df9fae..74140537cd 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -336,6 +336,7 @@ "zeniq", "zeta", "zilliqa", + "zircuit", "zkcro", "zkfair", "zklink", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 9241e924e5..2d6c918a40 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -18,7 +18,7 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify'] -const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', ] +const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa',] const transformTokens = { // Sample Code @@ -40,14 +40,14 @@ const fixBalancesTokens = { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, chainflip: { - Dot: { coingeckoId:'polkadot', decimals: 10 }, - Usdc: { coingeckoId:'usd-coin', decimals: 6 }, - Flip: { coingeckoId:'chainflip', decimals: 18 }, - Btc: { coingeckoId:'bitcoin', decimals: 8 }, - Eth: { coingeckoId:'ethereum', decimals: 18 }, - Usdt: { coingeckoId:'tether', decimals: 6 }, - ArbEth: { coingeckoId:'ethereum', decimals: 18 }, - ArbUsdc: { coingeckoId:'usd-coin', decimals: 6 }, + Dot: { coingeckoId: 'polkadot', decimals: 10 }, + Usdc: { coingeckoId: 'usd-coin', decimals: 6 }, + Flip: { coingeckoId: 'chainflip', decimals: 18 }, + Btc: { coingeckoId: 'bitcoin', decimals: 8 }, + Eth: { coingeckoId: 'ethereum', decimals: 18 }, + Usdt: { coingeckoId: 'tether', decimals: 6 }, + ArbEth: { coingeckoId: 'ethereum', decimals: 18 }, + ArbUsdc: { coingeckoId: 'usd-coin', decimals: 6 }, }, thundercore: { '0xc3c857a9e5be042c8acf4f2827aa053e93b5d039': { coingeckoId: 'thunder-token', decimals: 18 }, @@ -69,6 +69,9 @@ const fixBalancesTokens = { moonriver: { '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c': { coingeckoId: 'ethereum', decimals: 18 }, }, + zircuit: { + [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, + }, islm: { '0x0ce35b0d42608ca54eb7bcc8044f7087c18e7717': { coingeckoId: 'usd-coin', decimals: 6 }, }, diff --git a/projects/pumpxy/index.js b/projects/pumpxy/index.js new file mode 100644 index 0000000000..2358b7bb8f --- /dev/null +++ b/projects/pumpxy/index.js @@ -0,0 +1,15 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') + +module.exports = { + methodology: "TVL is calculated by retrieving the ETH balance of all meme coin contracts deployed by the Zircuit factory contract. The factory contract dynamically manages meme coins, and their ETH holdings are summed up to calculate the total TVL.", + start: 1726030293, + zircuit: { + tvl, + }, +} + +async function tvl(api) { + const factory = '0x2FB9FbFF266CED68FCfEEC850e3ce9c58BB68Ec3'; + const memeCoins = await api.fetchList({ lengthAbi: 'allMemecoinsCount', itemAbi: 'allMemecoins', target: factory }) + return sumTokens2({ api, owners: memeCoins, token: nullAddress}) +} From 26f5a06217392781365a13bdca6325f62ac59db3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:05:04 +0200 Subject: [PATCH 0328/1768] track forge game #11581 --- projects/forge-game/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/forge-game/index.js diff --git a/projects/forge-game/index.js b/projects/forge-game/index.js new file mode 100644 index 0000000000..836208b84c --- /dev/null +++ b/projects/forge-game/index.js @@ -0,0 +1,10 @@ +const { sumTokensExport } = require('../helper/chain/ton'); +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + methodology: 'Counts the pre-market wallet size as the TVL.', + timetravel: false, + ton: { + tvl: sumTokensExport({ owner: 'UQAGNpAAIaDrvGWdUCB7ycc_S5tLO0S6PPK0UkrrQb27AWKM', tokens: [ADDRESSES.null]}), + } +} \ No newline at end of file From 5c229f6647409b0c676447ee31736736ab706a76 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:08:23 +0200 Subject: [PATCH 0329/1768] mark upd as dead #11580 --- projects/crypto-lottery/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/crypto-lottery/index.js b/projects/crypto-lottery/index.js index e7b60e3946..7bb9e73fb7 100644 --- a/projects/crypto-lottery/index.js +++ b/projects/crypto-lottery/index.js @@ -13,6 +13,10 @@ const config = { module.exports = { methodology: "We count of smart contract balance in coins", + deadFrom: "2024-09-11", + hallmarks: [ + [Math.floor(new Date('2024-09-11')/1e3), 'Closed due to lack of interest'], + ], } Object.keys(config).forEach(chain => { From c2d2531622291f5fc3aecb0726a240b4a70db504 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:29:56 +0200 Subject: [PATCH 0330/1768] uniswap: track gnosis --- projects/helper/tokenMapping.js | 4 ++++ projects/uniswap/index.js | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 2d6c918a40..6116fae9a4 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -117,6 +117,10 @@ const fixBalancesTokens = { idex: { [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, }, + xdai: { + '0x6c76971f98945ae98dd7d4dfca8711ebea946ea6': { coingeckoId: "wrapped-steth", decimals: 18 }, + '0xaf204776c7245bf4147c2612bf6e5972ee483701': { coingeckoId: "savings-dai", decimals: 18 }, + } } diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index 9386a131e3..1f7de184e2 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -88,6 +88,7 @@ module.exports = { sei: { factory: "0x75FC67473A91335B5b8F8821277262a13B38c9b3", fromBlock: 79245151 }, mantle: { factory: "0x0d922Fb1Bc191F64970ac40376643808b4B74Df9", fromBlock: 63795918 }, polygon_zkevm: { factory: "0xff83c3c800Fec21de45C5Ec30B69ddd5Ee60DFC2", fromBlock: 8466867 }, + xdai: { factory: "0xe32F7dD7e3f098D518ff19A22d5f028e076489B1", fromBlock: 27416614 }, }), filecoin: { tvl: filecoinTvl }, } @@ -107,4 +108,4 @@ module.exports.sei.tvl = async (api) => { const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) const ownerTokens = pools.map((pool, i) => [[token0s[i], token1s[i]], pool]) return sumTokens2({ api, ownerTokens }) -} +} \ No newline at end of file From 952e34c611ddd6b53bb90cfd8cc06275657c3f2b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:31:53 +0200 Subject: [PATCH 0331/1768] Update bitunix (#11586) --- projects/bitunix-cex/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/bitunix-cex/index.js b/projects/bitunix-cex/index.js index 05d238c518..196c45f12b 100644 --- a/projects/bitunix-cex/index.js +++ b/projects/bitunix-cex/index.js @@ -26,7 +26,9 @@ const config = { "TYVAHVXixkL2dnaPfyjZz6J7hF6J4WW3Qx", "TCxBM3QPZCebzCuXtzzBA7Vet5mCcruHdN", "TLnMjGrgWTZLadqNRzbQPTzDPWbH6Dc1HA", - "TRcvGsNpzkm8LdhLYmqBWESRrTUv7BPQ8t" + "TRcvGsNpzkm8LdhLYmqBWESRrTUv7BPQ8t", + "TWJ6R2EbFC5KdZFwLNj9GDiENn7WyAUjQE", + "TJqCunxn9xYtnXtP8v5t54W7uR2huUbFvS", ], }, } From cc8c701d98c3001ff1711a6dc335443a7e490f01 Mon Sep 17 00:00:00 2001 From: dunglv-smartosc <108668260+dunglv-smartosc@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:33:22 +0700 Subject: [PATCH 0332/1768] Update: D2Finance (#11585) --- projects/d2finance/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/d2finance/index.js b/projects/d2finance/index.js index 568107dde8..da4696ffdf 100644 --- a/projects/d2finance/index.js +++ b/projects/d2finance/index.js @@ -18,7 +18,8 @@ const vaultTvlOnArbitrum = sumERC4626VaultsExport({ "0x34F0FdD80A51dfd8bA42343c20F89217280d760E", "0x57f467C9c4639B066F5A4D676Cd8Ed7D87C1791b", "0x7348925D3C63e4E61e9F5308eEec0f06EaA3bB7b", - "0xCFBBea43Fd99126E4c0eF53e2344609D513f72b3" + "0xCFBBea43Fd99126E4c0eF53e2344609D513f72b3", + "0x0F76De33a3679a6065D14780618b54584a3907D4" ], isOG4626: true, }); From 051b39a7f217a3f49d0da7d9e1f2929593edc3b8 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:41:58 +0200 Subject: [PATCH 0333/1768] feat: crescent-dex deadFrom (#11587) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/crescent-dex/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/crescent-dex/index.js b/projects/crescent-dex/index.js index 73f391a629..9ef4631f7c 100644 --- a/projects/crescent-dex/index.js +++ b/projects/crescent-dex/index.js @@ -26,5 +26,7 @@ module.exports = { methodology: "Counts the liquidity on all pools. ", crescent: { tvl - } + }, + deadFrom: '2024-05-01', + hallmarks: [1713052800, 'Sunset of Crescent Network'] } \ No newline at end of file From bda40e8a4ce707f5b5a51c597a724a387b199bd8 Mon Sep 17 00:00:00 2001 From: erinaceus-labs Date: Wed, 11 Sep 2024 16:42:12 +0400 Subject: [PATCH 0334/1768] Add VaultWin TVL (#11588) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 5 +++++ projects/vaultWin/index.js | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 projects/vaultWin/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 6116fae9a4..f38bc2427e 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -58,6 +58,11 @@ const fixBalancesTokens = { base: { '0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c': { coingeckoId: 'rocket-pool-eth', decimals: 18 }, }, + ftn: { + '0x780fb5aca83f2e3f57ee18cc3094988ef49d8c3d': { coingeckoId: 'lolik-staked-ftn', decimals: 18 }, + '0x4b7708ee3ccbd3f9af68208e69ad31f611e1befe': { coingeckoId: 'usd-coin', decimals: 6 }, + '0xb7dc5eca6de5cb9b46ac405d3d4596333714f3f7': { coingeckoId: 'tether', decimals: 6 }, + }, op_bnb: { '0x7c6b91d9be155a6db01f749217d76ff02a7227f2': { coingeckoId: 'binance-bitcoin', decimals: 18 }, '0xe7798f023fc62146e8aa1b36da45fb70855a77ea': { coingeckoId: 'ethereum', decimals: 18 }, diff --git a/projects/vaultWin/index.js b/projects/vaultWin/index.js new file mode 100644 index 0000000000..1012b42a53 --- /dev/null +++ b/projects/vaultWin/index.js @@ -0,0 +1,17 @@ +const { sumTokens2 } = require("../helper/unwrapLPs") + +const abi = { + "poolInfo": "function poolInfo(address) view returns (address token, address lendToken, uint256 roundStart, uint256 roundEnd, uint256 version, address yieldSource)" +} + +async function tvl(api) { + const lotteries = await api.call({ target: '0xE8aa1245E18185698f2af53D3ab4aC0f822120F8', abi: "address[]:getLotteries" }) + const poolInfos = await api.multiCall({ target: '0xE8aa1245E18185698f2af53D3ab4aC0f822120F8', abi: abi.poolInfo, calls: lotteries }) + const ownerTokens = poolInfos.map((data, i) => [[data.token, data.lendToken], lotteries[i]]) + return sumTokens2({ api, ownerTokens }) +} + +module.exports = { + methodology: 'Staked tokens are counted as TVL', + ftn: { tvl }, +}; From b5f09a23f8bb07ae0e79db0722efb644ca970f55 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:39:38 +0200 Subject: [PATCH 0335/1768] update: equilibrium-lending deadFrom (#11590) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/equilibrium/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/equilibrium/index.js b/projects/equilibrium/index.js index 52f805a089..fd2bd8f68e 100644 --- a/projects/equilibrium/index.js +++ b/projects/equilibrium/index.js @@ -1,6 +1,8 @@ const { getExports } = require('../helper/heroku-api') module.exports = { + hallmarks: [1714550400, 'Sunset of Equilibrium Network'], + deadFrom: "2024-09-01", timetravel: false, ...getExports("equilibrium", ['equilibrium']) } \ No newline at end of file From 152925d1e6cc8ce7b6d53880f5080d68c3b3851e Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Wed, 11 Sep 2024 23:14:17 +0800 Subject: [PATCH 0336/1768] Update fx-Protocol (#11591) Co-authored-by: markone --- projects/fx-Protocol/index.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/projects/fx-Protocol/index.js b/projects/fx-Protocol/index.js index fd2c856a9b..ad5ba93193 100644 --- a/projects/fx-Protocol/index.js +++ b/projects/fx-Protocol/index.js @@ -7,6 +7,15 @@ const treasuries = [ "0x63Fe55B3fe3f74B42840788cFbe6229869590f83", "0xdFac83173A96b06C5D6176638124d028269cfCd2" ]; +const baseTokenRate = [ + // '', + '0x81A777c4aB65229d1Bf64DaE4c831bDf628Ccc7f', + '0x7ceD6167b5A08111dC8d0D2f9F7E482c4Da62506', + '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', + '0xE3fF08070aB3aD7eeE7a1cab35105F27DF8EfF10', + // '', + '0x6Eb03222179F83126735D7E9FdE94571D716D399' +] const cvxAddress = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; const aCVX = "0xb0903Ab70a7467eE5756074b31ac88aEBb8fB777"; const uniBTC = "0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568"; @@ -18,7 +27,7 @@ module.exports = { }, }; -async function getACRVInfo(api) { +async function getACVXInfo(api) { const totalAssets = await api.api.call( { target: aCVX, @@ -40,17 +49,25 @@ async function getUniBTCTvl(api) { }) return totalSupply } +async function getBaseTokenRate(api) { + const rates = await api.multiCall({ abi: 'uint256:getRate', calls: baseTokenRate }) + rates.splice(0, 0, 1e18); + rates.splice(5, 0, 1e18); + return rates +} + async function tvl(api) { - const aCvxRate = await getACRVInfo(api) + const aCvxRate = await getACVXInfo(api) + const rates = await getBaseTokenRate(api) const tokens = await api.multiCall({ abi: 'address:baseToken', calls: treasuries }) const bals = await api.multiCall({ abi: 'uint256:totalBaseToken', calls: treasuries }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) const uniBTCTvl = await getUniBTCTvl(api) bals.forEach((bal, i) => { if (tokens[i].toLowerCase() === aCVX.toLowerCase()) { - api.add(cvxAddress, bal*aCvxRate / 10 ** (18 - decimals[i])) + api.add(cvxAddress, bal/(rates[i]/1e18)*aCvxRate / 10 ** (18 - decimals[i])) } else { - api.add(tokens[i], bal / 10 ** (18 - decimals[i])) + api.add(tokens[i], bal/(rates[i]/1e18) / 10 ** (18 - decimals[i])) } }) api.add(uniBTC, uniBTCTvl) From 97e4c1bcfe4aeb6cfddbb2069794068a34e5ef43 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 12 Sep 2024 03:58:08 +0100 Subject: [PATCH 0337/1768] add bnsol adapter --- projects/bnsol/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/bnsol/index.js diff --git a/projects/bnsol/index.js b/projects/bnsol/index.js new file mode 100644 index 0000000000..cb7ba4d83b --- /dev/null +++ b/projects/bnsol/index.js @@ -0,0 +1,12 @@ +const { getStakedSol } = require("../helper/solana") + +async function tvl(api) { + await getStakedSol('75NPzpxoh8sXGuSENFMREidq6FMzEx4g2AfcBEB6qjCV', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + }, +}; \ No newline at end of file From b30794656610e13f2b5bcb43920e6373442b62c3 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 12 Sep 2024 04:39:04 +0100 Subject: [PATCH 0338/1768] update borrowed export --- projects/antihero-fi/index.js | 4 +++- projects/ecodefi/index.js | 3 +++ projects/fortress-lending/index.js | 5 ++++- projects/geist/index.js | 3 +++ projects/klap/index.js | 3 +++ projects/mantradao.js | 3 ++- projects/polylend/index.js | 3 +++ 7 files changed, 21 insertions(+), 3 deletions(-) diff --git a/projects/antihero-fi/index.js b/projects/antihero-fi/index.js index 6ea44c6fcd..6547afa834 100644 --- a/projects/antihero-fi/index.js +++ b/projects/antihero-fi/index.js @@ -16,4 +16,6 @@ module.exports = { ), }, deadFrom: "2023-08-27" -}; \ No newline at end of file +}; + +module.exports.arbitrum.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/ecodefi/index.js b/projects/ecodefi/index.js index 90170d5814..b996f17a89 100644 --- a/projects/ecodefi/index.js +++ b/projects/ecodefi/index.js @@ -2,6 +2,7 @@ const { staking } = require('../helper/staking') const { compoundExports2 } = require('../helper/compound') module.exports = { + deadFrom: '2022-08-02', methodology: 'counts the number of Total value locked in ESG protocol.', bsc: { ...compoundExports2({ comptroller: '0xfd1f241ba25b8966a14865cb22a4ea3d24c92451'}), @@ -9,3 +10,5 @@ module.exports = { }, start: 15307794, // Feb-16-2022 01:49:31 PM +UTC } + +module.exports.bsc.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/fortress-lending/index.js b/projects/fortress-lending/index.js index dfdd343c60..9e1ff2321b 100644 --- a/projects/fortress-lending/index.js +++ b/projects/fortress-lending/index.js @@ -4,8 +4,11 @@ const { compoundExports } = require("../helper/compound"); const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491") module.exports = { + deadFrom: '2023-02-16', bsc: { tvl: sdk.util.sumChainTvls([lendingTvl]), borrowed }, -}; \ No newline at end of file +}; + +module.exports.bsc.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/geist/index.js b/projects/geist/index.js index b787ec300a..85b8b5e8c1 100644 --- a/projects/geist/index.js +++ b/projects/geist/index.js @@ -23,6 +23,7 @@ function lending(borrowed) { } module.exports = { + deadFrom: '2023-10-18', methodology: methodologies.lendingMarket, fantom: { tvl: lending(false), @@ -34,3 +35,5 @@ module.exports = { [1665090175, "BSC Bridge hacker deposits coins"] ], }; + +module.exports.fantom.borrowed = () => ({}) // bad debt diff --git a/projects/klap/index.js b/projects/klap/index.js index ff539335d6..4c7c3a5107 100644 --- a/projects/klap/index.js +++ b/projects/klap/index.js @@ -2,6 +2,9 @@ const { aaveExports } = require("../helper/aave"); const methodologies = require("../helper/methodologies"); module.exports = { + deadFrom: "2023-09-17", methodology: methodologies.lendingMarket, klaytn: aaveExports('klaytn', '0x969E4A05c2F3F3029048e7943274eC2E762497AB'), } + +module.exports.klaytn.borrowed = () => ({}) // bad debt diff --git a/projects/mantradao.js b/projects/mantradao.js index 0512395825..c64fa9605e 100644 --- a/projects/mantradao.js +++ b/projects/mantradao.js @@ -76,7 +76,8 @@ Object.keys(config).forEach(chain => { const { staking = [], pool2 = [], } = config[chain] if (!module.exports[chain]) module.exports[chain] = {} - + module.exports.deadFrom='2024-07-09' module.exports[chain].staking = sumTokensExport({ tokensAndOwners: staking }) module.exports[chain].pool2 = sumTokensExport({ tokensAndOwners: pool2, resolveLP: true, }) + module.exports.ethereum.borrowed = () => ({}) // bad debt }) \ No newline at end of file diff --git a/projects/polylend/index.js b/projects/polylend/index.js index 9ba41447cc..6244eecce6 100644 --- a/projects/polylend/index.js +++ b/projects/polylend/index.js @@ -1,7 +1,10 @@ const { aaveExports } = require("../helper/aave"); module.exports = { + deadFrom: '2023-11-23', polygon_zkevm: aaveExports("polygon_zkevm", undefined, undefined, [ "0x27268393Fb8CD0556A62C749C9E70aA537910acc", ]), }; + +module.exports.polygon_zkevm.borrowed = () => ({}) // bad debt From 352d620b71717a5606b4eb48097f93a103b47eda Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 12 Sep 2024 05:15:54 +0100 Subject: [PATCH 0339/1768] update borrows export --- projects/agile/index.js | 5 ++++- projects/bnpl-pay/index.js | 3 +++ projects/bodhfinance/index.js | 3 +++ projects/chimeradex-lend/index.js | 3 +++ projects/evolve/index.js | 3 +++ projects/flux/index.js | 10 +++++++--- projects/owna/index.js | 8 ++++++-- projects/proton-loan/index.js | 6 ++++-- projects/snai-finance/index.js | 5 ++++- projects/unfederalreserve/index.js | 6 +++++- projects/waterloan/index.js | 5 +++-- 11 files changed, 45 insertions(+), 12 deletions(-) diff --git a/projects/agile/index.js b/projects/agile/index.js index b23fdb056f..9d491a9223 100644 --- a/projects/agile/index.js +++ b/projects/agile/index.js @@ -11,6 +11,7 @@ const lendingMarket = compoundExports(unitroller, "0x2e909694B362c2FcA3C8168613b }) module.exports = { + deadFrom: '2022-06-28', methodology: "Liquidity on DEX and supplied and borrowed amounts found using the unitroller address(0x643dc7C5105d1a3147Bd9524DFC3c5831a373F1e)", cronos: { //staking: stakingPricedLP("0x37619cC85325aFea778830e184CB60a3ABc9210B", "0x9A92B5EBf1F6F6f7d93696FCD44e5Cf75035A756", "moonriver", "0xbBe2f34367972Cb37ae8dea849aE168834440685", "moonriver"), @@ -23,4 +24,6 @@ module.exports = { ]), borrowed: lendingMarket.borrowed } -} \ No newline at end of file +} + +module.exports.cronos.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/bnpl-pay/index.js b/projects/bnpl-pay/index.js index 00f78c909d..3bfc52e509 100644 --- a/projects/bnpl-pay/index.js +++ b/projects/bnpl-pay/index.js @@ -101,5 +101,8 @@ const abi = { } module.exports = { + deadFrom: '2023-02-12', ethereum: { tvl, staking, borrowed, }, } + +module.exports.ethereum.borrowed = () => ({}) // bad debt diff --git a/projects/bodhfinance/index.js b/projects/bodhfinance/index.js index 851d441203..6896d33c98 100644 --- a/projects/bodhfinance/index.js +++ b/projects/bodhfinance/index.js @@ -9,6 +9,9 @@ const { tvl, borrowed } = compoundExports( unitroller, bETH, ); module.exports = { + deadFrom: '2023-04-17', methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", boba: { tvl, borrowed } } + +module.exports.boba.borrowed = () => ({}) // bad debt diff --git a/projects/chimeradex-lend/index.js b/projects/chimeradex-lend/index.js index b2415bc1cd..4eabbb781b 100644 --- a/projects/chimeradex-lend/index.js +++ b/projects/chimeradex-lend/index.js @@ -8,3 +8,6 @@ const config = { Object.keys(config).forEach(chain => { module.exports[chain] = compoundExports2({ comptroller: config[chain]}) }) +module.exports.deadFrom='2023-12-12' +module.exports.scroll.borrowed = () => ({}) // bad debt +module.exports.arbitrum.borrowed = () => ({}) // bad debt diff --git a/projects/evolve/index.js b/projects/evolve/index.js index e2e4dc67df..d62b7c7fb5 100644 --- a/projects/evolve/index.js +++ b/projects/evolve/index.js @@ -1,6 +1,7 @@ const { tarotHelper } = require("../tarot/tarotHelper"); const config = { + deadFrom: '2023-02-27', cronos: { factories: ["0xb8b48e97cd037987de138b978df265d873333a3b"], }, @@ -9,3 +10,5 @@ const config = { module.exports = {} tarotHelper(module.exports, config, { tarotSymbol: 'vEvolve'}) + +module.exports.cronos.borrowed = () => ({}) // bad debt diff --git a/projects/flux/index.js b/projects/flux/index.js index 742dba09dc..c6662fd03a 100644 --- a/projects/flux/index.js +++ b/projects/flux/index.js @@ -15,6 +15,7 @@ const getFluxTVLDetail = 'function getFluxTVLDetail() view returns (uint256 tota module.exports = { misrepresentedTokens: true, + deadFrom: '2022-12-07', }; Object.keys(config).forEach(chain => { @@ -31,7 +32,9 @@ Object.keys(config).forEach(chain => { tether: (totalSupply - totalBorrow) / 1e18 } }, - borrowed: async (_, _b, {[chain]: block}) => { + borrowed: () => ({}), // bad debt + + /*async (_, _b, {[chain]: block}) => { const { reportContract } = config[chain] const { output: { totalBorrow, } } = await sdk.api.abi.call({ target: reportContract, @@ -42,7 +45,7 @@ Object.keys(config).forEach(chain => { return { tether: totalBorrow / 1e18 } - }, + },*/ staking: async (_, _b, {[chain]: block}) => { const { reportContract } = config[chain] const { output: { totalStaked, } } = await sdk.api.abi.call({ @@ -56,4 +59,5 @@ Object.keys(config).forEach(chain => { } }, } -}) \ No newline at end of file +}) + diff --git a/projects/owna/index.js b/projects/owna/index.js index 6410e55c5c..aec21d0ed7 100644 --- a/projects/owna/index.js +++ b/projects/owna/index.js @@ -87,9 +87,13 @@ config.chains.forEach(async chainInfo => { }; } + module.exports.deadFrom='2023-11-16', module.exports[chain] = { tvl: sumTokensExport({ chain, tokens, owners: [lendingContract] }), - borrowed: totalBorrowed, - offers: totalOffers, + borrowed: () => ({}) // bad debt totalBorrowed, + //offers: totalOffers, } }) + + + diff --git a/projects/proton-loan/index.js b/projects/proton-loan/index.js index 47df70645e..6a44573062 100644 --- a/projects/proton-loan/index.js +++ b/projects/proton-loan/index.js @@ -74,11 +74,13 @@ async function getTotalStaking() { } module.exports = { + deadFrom: '2024-09-09', misrepresentedTokens: true, methodology: `Proton Loan TVL is the sum of all lending deposits in the Proton Loan smart contract and single-side staked LOAN.`, proton: { tvl: getLendingTvl(false), - borrowed: getLendingTvl(true), + borrowed: () => ({}), // bad debt getLendingTvl(true), staking: getTotalStaking }, -} \ No newline at end of file +} + diff --git a/projects/snai-finance/index.js b/projects/snai-finance/index.js index c24c61d4ee..4b6525e670 100644 --- a/projects/snai-finance/index.js +++ b/projects/snai-finance/index.js @@ -1,6 +1,9 @@ const { methodology, compoundExports2 } = require("../helper/compound"); module.exports = { + deadFrom: '2024-06-15', base: compoundExports2({ comptroller: '0x784E1507193c060bC88e6699adC7c796Ebe0E14e', cether: '0x9649Eb0f03C7e85615cFDC7927c7E6B775Ef284d' }), methodology, -} \ No newline at end of file +} + +module.exports.base.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/unfederalreserve/index.js b/projects/unfederalreserve/index.js index aaf6d0f9cd..4fce65cb1d 100644 --- a/projects/unfederalreserve/index.js +++ b/projects/unfederalreserve/index.js @@ -1,2 +1,6 @@ const { compoundExports2 } = require('../helper/compound'); -module.exports.ethereum = compoundExports2({ comptroller: '0x3105D328c66d8d55092358cF595d54608178E9B5', cether: '0xFaCecE87e14B50eafc85C44C01702F5f485CA460' }) \ No newline at end of file + +module.exports.deadFrom='2023-11-12' +module.exports.ethereum = compoundExports2({ comptroller: '0x3105D328c66d8d55092358cF595d54608178E9B5', cether: '0xFaCecE87e14B50eafc85C44C01702F5f485CA460' }) + +module.exports.ethereum.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/waterloan/index.js b/projects/waterloan/index.js index 256fb11dcc..4db8fbd980 100644 --- a/projects/waterloan/index.js +++ b/projects/waterloan/index.js @@ -78,13 +78,14 @@ function waterloan(chain, borrowed) { } module.exports = { + deadFrom: '2022-10-23', methodology: `Counts all tokens locked in the contracts to be used as collateral in lending pool. Borrowed coins are not counted towards the TVL, only the coins actually locked in the contracts are counted.`, csc: { tvl: waterloan("csc", false), - borrowed: waterloan("csc", true), + borrowed: () => ({}) // bad debt waterloan("csc", true), }, smartbch: { tvl: waterloan("smartbch", false), - borrowed: waterloan("smartbch", true), + borrowed: () => ({}) // bad debt waterloan("smartbch", true), }, }; From ce449e98f80ccf0edf453a77e9c569f3fa91d737 Mon Sep 17 00:00:00 2001 From: 0xIvan <83612730+0xIvan@users.noreply.github.com> Date: Thu, 12 Sep 2024 08:00:44 +0200 Subject: [PATCH 0340/1768] Jones - Add new factory address (#11594) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Addis Belete Co-authored-by: Hacker <57176420+Havoc19@users.noreply.github.com> Co-authored-by: Trisome-Bedrock <151131601+Trisome-Bedrock@users.noreply.github.com> Co-authored-by: MindGamesM Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: Joel Mun Co-authored-by: lyfmantle <161433628+lyfmantle@users.noreply.github.com> Co-authored-by: AbstraDexXYZ <155727634+AbstraDexXYZ@users.noreply.github.com> Co-authored-by: juntingzhang <98256859+juntingzhang@users.noreply.github.com> Co-authored-by: Define101 <93603962+Define101@users.noreply.github.com> Co-authored-by: TJ <58812386+TJ-2@users.noreply.github.com> Co-authored-by: twothirtyfive Co-authored-by: shafu Co-authored-by: LtSnakePlissken Co-authored-by: wegory Co-authored-by: 0xngmi <0xngmi@protonmail.com> Co-authored-by: Nghia Pham <57862573+ngfam@users.noreply.github.com> Co-authored-by: Dry cake <174254844+dry-cake@users.noreply.github.com> Co-authored-by: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Co-authored-by: Brendon Votteler Co-authored-by: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> Co-authored-by: Kyrylo Riabov Co-authored-by: Nicolas Zozol Co-authored-by: Stone <125890624+Stonepapa@users.noreply.github.com> Co-authored-by: hamur dev <122794657+tpktpj@users.noreply.github.com> Co-authored-by: Darruma <30578602+Darruma@users.noreply.github.com> Co-authored-by: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Co-authored-by: Mike D Co-authored-by: RomanYarinski <139853615+RomanYarinski@users.noreply.github.com> Co-authored-by: Andrei Simion Co-authored-by: Strategic Reserve Co-authored-by: tstemko <57684389+tstemko@users.noreply.github.com> Co-authored-by: Tatyana Stemkovski Co-authored-by: Gustavo <44475146+Gustbel@users.noreply.github.com> Co-authored-by: hfnole Co-authored-by: LeeChunHao2000 <64617939+LeeChunHao2000@users.noreply.github.com> Co-authored-by: krk0d3r Co-authored-by: krk0d3r <156105012+krk0d3r@users.noreply.github.com> Co-authored-by: laocheng <920886811@163.com> Co-authored-by: 0xShad0w <44497716+0xShad0w@users.noreply.github.com> Co-authored-by: usr-icon-foundation <111794534+usr-icon-foundation@users.noreply.github.com> Co-authored-by: Mihail Krukov Co-authored-by: crypto developer <166532177+developer01metlab@users.noreply.github.com> Co-authored-by: Ryan C Co-authored-by: Luke Co-authored-by: realdealshaman Co-authored-by: Kacper Bak <290936+kbak@users.noreply.github.com> Co-authored-by: Jessie Liu <50894289+Nicklaus6@users.noreply.github.com> Co-authored-by: GiMa-Maya <128942712+GiMa-Maya@users.noreply.github.com> Co-authored-by: Efrain9502 Co-authored-by: 0xsign <99134502+0xsign@users.noreply.github.com> Co-authored-by: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Co-authored-by: yash-trufin <113037107+yash-trufin@users.noreply.github.com> Co-authored-by: waynebruce0x Co-authored-by: rohan9134 <149740230+rohan9134@users.noreply.github.com> Co-authored-by: rohan9134 Co-authored-by: Rahul Sethuram Co-authored-by: gengbingbing Co-authored-by: sgmntp <146187995+sgmntp@users.noreply.github.com> Co-authored-by: Clonescody Co-authored-by: 0xmDreamy <124707942+0xmDreamy@users.noreply.github.com> Co-authored-by: CronosLabsDev <106642922+CronosLabsDev@users.noreply.github.com> Co-authored-by: xieqiancaosissi Co-authored-by: bifkn <25141495+DJHellscream@users.noreply.github.com> Co-authored-by: Victor Navarro Co-authored-by: Gonçalo Salgueirinho Co-authored-by: yepp4you Co-authored-by: 0xRusty <84294992+CryptoTrades20@users.noreply.github.com> Co-authored-by: IguanaDEX Co-authored-by: styliann-eth Co-authored-by: bergben Co-authored-by: LpcAries <291482574@qq.com> Co-authored-by: Anton Klyr <90849526+antonklyr@users.noreply.github.com> Co-authored-by: David Cumps Co-authored-by: Endeavour-1 <50341461+Endeavour-Innovations-Inc@users.noreply.github.com> Co-authored-by: pavelGotbit <156020554+pavelGotbit@users.noreply.github.com> Co-authored-by: Mehmet Co-authored-by: Abel <72842607+Aliceonly@users.noreply.github.com> Co-authored-by: Dmitry Mpower Co-authored-by: Pavel Shuvalov Co-authored-by: Mihailo Maksa Co-authored-by: Linkie Link Co-authored-by: charq <73696209+buchaoqun@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> Co-authored-by: DackieSwap <132213730+DackieSwap@users.noreply.github.com> Co-authored-by: andreapn.eth Co-authored-by: Jake Co-authored-by: alexflorence <89457550+alexflorence@users.noreply.github.com> Co-authored-by: George Ciubotaru Co-authored-by: Addis Belete Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: sofa-org <161308389+sofa-org@users.noreply.github.com> Co-authored-by: David Lee Co-authored-by: undefined Co-authored-by: 0xyongyong Co-authored-by: Dmitriy Babenko <159453675+dmitriy-woof-software@users.noreply.github.com> Co-authored-by: leeamijo <154820412+leeamijo@users.noreply.github.com> Co-authored-by: samweinberg23 Co-authored-by: tyler-tsai Co-authored-by: Tyler Tsai Co-authored-by: Papparico Finance <161519435+PapparicoFinance@users.noreply.github.com> Co-authored-by: Jamesson Neves Co-authored-by: George Bibilashvili Co-authored-by: WindowAzure Co-authored-by: Antoine <67124021+antoineborg@users.noreply.github.com> Co-authored-by: BT.Wood(Tang Bo Hao) Co-authored-by: Daniel Schaffield <56415596+kiwi0401@users.noreply.github.com> Co-authored-by: idea2409 <60475612+idea2409@users.noreply.github.com> Co-authored-by: ideapacito Co-authored-by: ideapacito Co-authored-by: 0xton <0xton@proton.me> Co-authored-by: grace0950 Co-authored-by: James Stevens Co-authored-by: Kumar Nilay Co-authored-by: 0xjosaphat <120175614+0xjosaphat@users.noreply.github.com> Co-authored-by: skyge <1506186404li@gmail.com> Co-authored-by: Shawn Muggle Co-authored-by: muggledev Co-authored-by: dunglv-smartosc <108668260+dunglv-smartosc@users.noreply.github.com> Co-authored-by: bo-cyber Co-authored-by: Kay ( Andrew ) Co-authored-by: Octopus-Finance Co-authored-by: Levana Talented Dragon <162980484+lvn-talented-dragon@users.noreply.github.com> Co-authored-by: lvn-savvy-dragon Co-authored-by: Levana Rusty Dragon Co-authored-by: lvn-ryu Co-authored-by: Jon Co-authored-by: Trisome-Bedrock Co-authored-by: frost-ostrich <127277105+frost-ostrich@users.noreply.github.com> Co-authored-by: AmplyFinance-Defi Co-authored-by: kris-ipor <98769272+kris-ipor@users.noreply.github.com> Co-authored-by: fightingm <417300459@qq.com> Co-authored-by: KaiMing Xu Co-authored-by: CobaltSato <44801013+CobaltSato@users.noreply.github.com> Co-authored-by: lemonpac <144460286+lemonpac@users.noreply.github.com> Co-authored-by: Anastasiia Kondaurova <31795791+KStasi@users.noreply.github.com> Co-authored-by: liberhex <140998619+liberhex@users.noreply.github.com> Co-authored-by: nuhbye Co-authored-by: Wenching <103871930+amching@users.noreply.github.com> Co-authored-by: lina Co-authored-by: Bryan Cuccioli <842035+bcuccioli@users.noreply.github.com> Co-authored-by: Bryan Cuccioli Co-authored-by: Akira <156126180+akiraonstarknet@users.noreply.github.com> Co-authored-by: alec <75048567+ahorner2@users.noreply.github.com> Co-authored-by: void <162591301+void-restack@users.noreply.github.com> Co-authored-by: Aniket Sharma Co-authored-by: plonkai <167075793+plonkai@users.noreply.github.com> Co-authored-by: Andrew Clark Co-authored-by: markone Co-authored-by: Nan Thanwa Co-authored-by: erinaceus-labs --- projects/jones-dao/addresses.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/jones-dao/addresses.js b/projects/jones-dao/addresses.js index 52d3218687..2588230f71 100644 --- a/projects/jones-dao/addresses.js +++ b/projects/jones-dao/addresses.js @@ -50,6 +50,7 @@ module.exports = { "0xb385809cCdB2BD87A5Cd32ad09287399F0318a92", "0xf965734b1750E64D9a01c991C5E630D279C34fd2", "0xb754D87BdAb6Cc8c903abC2Bda9cE6B3c9481e60", + "0xB2cBa14C94B30297DBFbCB7517d9105D67bB692d" ], tokens: { aura: "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF", From 8a1aba08b0d0e8d60511b471aa93285ad3ac8230 Mon Sep 17 00:00:00 2001 From: microl2 Date: Thu, 12 Sep 2024 14:07:53 +0700 Subject: [PATCH 0341/1768] Add microswap.org (#11598) Co-authored-by: microl2 Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/microswap/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/microswap/index.js diff --git a/projects/microswap/index.js b/projects/microswap/index.js new file mode 100644 index 0000000000..7ab543aad1 --- /dev/null +++ b/projects/microswap/index.js @@ -0,0 +1,22 @@ +const { yieldHelper } = require("../helper/yieldHelper"); + +const abis = { + name: "string:name", + wantLockedTotal: "uint256:wantLockedTotal", + poolInfo: "function poolInfo(uint256) view returns (address want, uint256 allocPoint, uint256 lastRewardTime, address strategy, uint256 earlyWithdrawFee, uint256 earlyWithdrawTime)", +} + +async function getTokenBalances ({ api, poolInfos, }) { + const strategies = poolInfos.map(i => i.strategy) + return api.multiCall({ abi: abis.wantLockedTotal, calls: strategies }) +} + +module.exports = yieldHelper({ + project: 'microswap', + chain: 'cronos_zkevm', + masterchef: '0x19A497E9c034c0D66952366F46f0e4e8b27465a8', + nativeToken: '', + abis, + getTokens: ({ poolInfos, }) => poolInfos.map(i => i.want), + getTokenBalances, +}) From 7b7cc7a050c208107bca9499f816ab2f8e2905b4 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:18:37 +0200 Subject: [PATCH 0342/1768] update papparico #11596 --- package-lock.json | 6 +++--- projects/helper/coreAssets.json | 1 + projects/helper/env.js | 2 -- projects/papparico-finance/index.js | 16 ++++++++++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e9e11e2cb..8dedcbb4ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -997,9 +997,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.83", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.83.tgz", - "integrity": "sha512-JojVjzBR73GoVmyuC6gE7AfMgpWvHm2OEKEMIai53b7nkI91oFAVYu1PoX/YD+wTbOPhZwYWWhdVXR5hYPnNRQ==", + "version": "5.0.84", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.84.tgz", + "integrity": "sha512-Ump1cTVP3QzvUh7eMIFL6+poO2z1DBjIggV/TEnNT/WBb+PHjLXai3kpHWWgjc1CpMsoyjVWlN50bZF0hPECWw==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 1e2cccbd83..cb672656ee 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -487,6 +487,7 @@ }, "cronos": { "WCRO": "0xca2503482e5d6d762b524978f400f03e38d5f962", + "WCRO_1": "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", "USDC": "0xc21223249ca28397b4b6541dffaecc539bff0c59", "WBTC": "0x062e66477faf219f25d27dced647bf57c3107d52", "SVN": "0x654bac3ec77d6db497892478f854cf6e8245dca9", diff --git a/projects/helper/env.js b/projects/helper/env.js index e60244b5c2..ebdf0c7329 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -13,8 +13,6 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", IDEX_RPC: "https://xchain-rpc.idex.io", - CRONOS_ZKEVM_RPC_MULTICALL: '0x9b122BF7a96F24EFB7A2b5765c635909dB3458F7', - NEOX_RPC_MULTICALL: '0xD6010D102015fEa9cB3a9AbFBB51994c0Fd6E672', } const ENV_KEYS = [ diff --git a/projects/papparico-finance/index.js b/projects/papparico-finance/index.js index e4242deb85..2858568558 100644 --- a/projects/papparico-finance/index.js +++ b/projects/papparico-finance/index.js @@ -1,4 +1,4 @@ -const { sumTokensExport } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require("../helper/unknownTokens"); const PPFT_TOKEN_CONTRACT = "0x59BAfb7168972EcCA5e395F7dA88e71eCe47a260"; const PPFT_MAIN_LP = "0xb036145476Ad16782eC05C7EC340D7e3cE6D09b7"; @@ -8,17 +8,25 @@ const SINGLE_STAKING_CONTRACT = "0xFc8d5d6B280BF5E8d8DB12d0fF8a0f7d1A6ECf78"; const VAULTS_CONTRACT = "0x828CC5D75594e4d0D072566cC07F64E863A0d11E"; const LP_MINING_CONTRACT = "0x3E35810A663c7eE28a0A6f6A0984146CbB163c6c"; +const XPPFT_TOKEN = "0x961105dD9bE34B64A27251d72B6D8F086847bc1c"; +const XPPFT_LP = "0xA99F134FC1e922Bc78Aa78c5897ce1eeF925b179"; +const LP_MINING_CONTRACT_V2 = "0x2490AFBf1609119bB76E5e936f4ce4cBed815947"; +const lps = [PPFT_MAIN_LP, XPPFT_LP]; + module.exports = { start: 13406569, cronos: { tvl: () => ({}), staking: sumTokensExport({ owners: [STAKING_CONTRACT, SINGLE_STAKING_CONTRACT, VAULTS_CONTRACT,], - token: PPFT_TOKEN_CONTRACT, + tokens: [PPFT_TOKEN_CONTRACT, XPPFT_TOKEN], + lps, + useDefaultCoreAssets: true, }), pool2: sumTokensExport({ - tokensAndOwners: [[PPFT_MAIN_LP, LP_MINING_CONTRACT],], - resolveLP: true, + owners: [LP_MINING_CONTRACT, LP_MINING_CONTRACT_V2], + tokens: lps, + useDefaultCoreAssets: true, }), } }; \ No newline at end of file From ba61079fbb73310d901021a450438265b1a97611 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:12:24 +0200 Subject: [PATCH 0343/1768] track pancake stableswap on ethereum --- projects/pancake-swap-stableswap/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pancake-swap-stableswap/index.js b/projects/pancake-swap-stableswap/index.js index 6b32638f1a..b389701e6f 100644 --- a/projects/pancake-swap-stableswap/index.js +++ b/projects/pancake-swap-stableswap/index.js @@ -9,6 +9,7 @@ module.exports = { const config = { bsc: [{ target: '0x25a55f9f2279a54951133d503490342b50e5cd15', fromBlock: 25535459, token3: true, },], + ethereum: [{ target: '0xD173bf0851D2803177CC3928CF52F7b6bd29D054', fromBlock: 20362671, token3: true, },], arbitrum: [{ target: '0x5D5fBB19572c4A89846198c3DBEdB2B6eF58a77a', fromBlock: 169319653, token3: true, },], } From 0240db7d336f538ffc6fc73ffbfd290b7adb32be Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:37:44 +0200 Subject: [PATCH 0344/1768] fix sui issue --- projects/helper/chain/sui.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/helper/chain/sui.js b/projects/helper/chain/sui.js index 01b1749635..dcdfdf459e 100644 --- a/projects/helper/chain/sui.js +++ b/projects/helper/chain/sui.js @@ -32,8 +32,8 @@ async function queryEvents({ eventType, transform = i => i }) { } async function getObjects(objectIds) { - if (objectIds.length > 49) { - const chunks = sliceIntoChunks(objectIds, 49) + if (objectIds.length > 9) { + const chunks = sliceIntoChunks(objectIds, 9) const res = [] for (const chunk of chunks) res.push(...(await getObjects(chunk))) return res From 04fd8264c777fac81a990b180ba004bdebdc4d2b Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:09:17 +0200 Subject: [PATCH 0345/1768] track logx-v2 #11589 --- projects/logx-v2/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/logx-v2/index.js diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js new file mode 100644 index 0000000000..7fe4857328 --- /dev/null +++ b/projects/logx-v2/index.js @@ -0,0 +1,18 @@ +module.exports = { + methodology: "Tokens locked in HypCollateral contracts on different chains.", +} + +const config = { + arbitrum: ['0x297CE7A9156b9Dfc5b4468a6fd9ec5FdAd27e23A', '0xf0bDCFB8bfE1c5000481d263D672E1b09D58C3BE',] +} + +Object.keys(config).forEach(chain => { + let vault = config[chain] + module.exports[chain] = { + tvl: async (api) => { + if (!Array.isArray(vault)) vault = [vault] + const tokens = await api.multiCall({ abi: 'address:wrappedToken', calls: vault }) + return api.sumTokens({ tokensAndOwners2: [tokens, vault] }) + } + } +}) \ No newline at end of file From b597e106fcbee16cc22089f9be4ca64a26efdf5d Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:14:13 +0200 Subject: [PATCH 0346/1768] logx-v1: add hallmark #11589 --- projects/evolve/index.js | 5 +++-- projects/logx/index.js | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/evolve/index.js b/projects/evolve/index.js index d62b7c7fb5..d1f936ffa9 100644 --- a/projects/evolve/index.js +++ b/projects/evolve/index.js @@ -1,13 +1,14 @@ const { tarotHelper } = require("../tarot/tarotHelper"); const config = { - deadFrom: '2023-02-27', cronos: { factories: ["0xb8b48e97cd037987de138b978df265d873333a3b"], }, }; -module.exports = {} +module.exports = { + deadFrom: '2023-02-27', +} tarotHelper(module.exports, config, { tarotSymbol: 'vEvolve'}) diff --git a/projects/logx/index.js b/projects/logx/index.js index a90d5d4e53..35bd295364 100644 --- a/projects/logx/index.js +++ b/projects/logx/index.js @@ -2,6 +2,9 @@ const { nullAddress } = require("../helper/tokenMapping") module.exports = { methodology: "USDC.e in the vault", + hallmarks: [ + [Math.floor(new Date('2024-09-10')/1e3), 'v1 is deprecated'], + ], } const config = { From 4d7b69ef842cb52435200cb02360fbee20cf434d Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:17:43 +0200 Subject: [PATCH 0347/1768] equilibrium is deprecated #11590 --- projects/equilibrium/api.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/equilibrium/api.js b/projects/equilibrium/api.js index 45f1595d10..824909d627 100644 --- a/projects/equilibrium/api.js +++ b/projects/equilibrium/api.js @@ -54,6 +54,7 @@ const ASSETS = { const PRECISION = 1_000_000_000n; async function tvl() { + throw new Error("Equilibrium chain is deprecated"); const provider = new WsProvider("wss://node.pol.equilibrium.io/"); const api = await ApiPromise.create({ provider }); From 4ff732d81dfe089a0c9d1d5c33dac45786db0464 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:19:53 +0200 Subject: [PATCH 0348/1768] Update: Notional_v2 (Outdated) (#11601) Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/notional/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/notional/index.js b/projects/notional/index.js index 9bdcd28300..57095ae5ff 100644 --- a/projects/notional/index.js +++ b/projects/notional/index.js @@ -17,5 +17,7 @@ async function tvl(api) { } module.exports = { + deadFrom: '2024-08-22', + hallmarks: [1724284800, "End of Deprecation process for migrating from Notional V2 to Notional V3"], ethereum: { tvl }, }; \ No newline at end of file From 7e9fb43f95656b1654c4b335383e154de1b9ae29 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:14:48 +0200 Subject: [PATCH 0349/1768] fix hallmarks --- projects/crescent-dex/index.js | 2 +- projects/electrikfinance/index.js | 24 ------------------------ projects/equilibrium/index.js | 2 +- projects/notional/index.js | 2 +- test.js | 30 ++++++++++++++++++++++++++++-- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/projects/crescent-dex/index.js b/projects/crescent-dex/index.js index 9ef4631f7c..d1c4431ef6 100644 --- a/projects/crescent-dex/index.js +++ b/projects/crescent-dex/index.js @@ -28,5 +28,5 @@ module.exports = { tvl }, deadFrom: '2024-05-01', - hallmarks: [1713052800, 'Sunset of Crescent Network'] + hallmarks: [[1713052800, 'Sunset of Crescent Network']] } \ No newline at end of file diff --git a/projects/electrikfinance/index.js b/projects/electrikfinance/index.js index 1af6ddc8ed..1f5271627e 100644 --- a/projects/electrikfinance/index.js +++ b/projects/electrikfinance/index.js @@ -1,6 +1,3 @@ -const { sumUnknownTokens } = require("../helper/unknownTokens"); -const { getConfig } = require('../helper/cache') - module.exports = { klaytn: { tvl: () => ({}) @@ -8,24 +5,3 @@ module.exports = { } module.exports.deadFrom = '2023-01-01' - -// const chain = "klaytn"; -// const tokenAPI = "address:want" - -// module.exports = { -// [chain]: { -// tvl: async (api) => { -// let { result: { pools } } = await getConfig('elektrik-finance', 'https://api.electrik.finance/api/status/pools'); -// pools = Object.values(pools) -// const vaults = []; -// const tokens = []; -// for (var i = 0; i < pools.length; i++) { -// vaults.push(pools[i].earnedTokenAddress); -// tokens.push(pools[i].tokenAddress); -// } -// const bals = await api.multiCall({ abi: 'uint256:balance', calls: vaults }) -// api.addTokens(tokens, bals) -// return sumUnknownTokens({ api, useDefaultCoreAssets: true, resolveLP: true, lps: tokens }) -// } -// } -// } \ No newline at end of file diff --git a/projects/equilibrium/index.js b/projects/equilibrium/index.js index fd2bd8f68e..c1484bea19 100644 --- a/projects/equilibrium/index.js +++ b/projects/equilibrium/index.js @@ -1,7 +1,7 @@ const { getExports } = require('../helper/heroku-api') module.exports = { - hallmarks: [1714550400, 'Sunset of Equilibrium Network'], + hallmarks: [[1714550400, 'Sunset of Equilibrium Network']], deadFrom: "2024-09-01", timetravel: false, ...getExports("equilibrium", ['equilibrium']) diff --git a/projects/notional/index.js b/projects/notional/index.js index 57095ae5ff..ac2292616b 100644 --- a/projects/notional/index.js +++ b/projects/notional/index.js @@ -18,6 +18,6 @@ async function tvl(api) { module.exports = { deadFrom: '2024-08-22', - hallmarks: [1724284800, "End of Deprecation process for migrating from Notional V2 to Notional V3"], + hallmarks: [[1724284800, "End of Deprecation process for migrating from Notional V2 to Notional V3"]], ethereum: { tvl }, }; \ No newline at end of file diff --git a/test.js b/test.js index 1193a37075..f56af30940 100644 --- a/test.js +++ b/test.js @@ -103,6 +103,25 @@ sdk.api.abi.call = async (...args) => { } } +function validateHallmarks(hallmark) { + if (!Array.isArray(hallmark)) { + throw new Error("Hallmarks should be an array of [unixTimestamp, eventText] but got " + JSON.stringify(hallmark)) + } + const [timestamp, text] = hallmark + if (typeof timestamp !== 'number' && isNaN(+new Date(timestamp))) { + throw new Error("Hallmark timestamp should be a number/dateString") + } + const year = new Date(timestamp * 1000).getFullYear() + const currentYear = new Date().getFullYear() + if (year < 2010 || year > currentYear) { + throw new Error("Hallmark timestamp should be between 2010 and "+ currentYear + " but got " + year) + } + + if (typeof text !== 'string') { + throw new Error("Hallmark text should be a string") + } +} + (async () => { let module = {}; try { @@ -110,8 +129,15 @@ sdk.api.abi.call = async (...args) => { } catch (e) { console.log(e) } - if(module.hallmarks && module.hallmarks.length > 6){ - console.error("WARNING: Hallmarks should only be set for events that led to a big change in TVL, please reduce hallmarks to only those that meet this condition") + if (module.hallmarks) { + if (!Array.isArray(module.hallmarks)) { + throw new Error("Hallmarks should be an array of arrays") + } + if(module.hallmarks.length > 6){ + console.error("WARNING: Hallmarks should only be set for events that led to a big change in TVL, please reduce hallmarks to only those that meet this condition") + } + + module.hallmarks.forEach(validateHallmarks) } // await initCache() const chains = Object.keys(module).filter(item => typeof module[item] === 'object' && !Array.isArray(module[item])); From 025e0fd88301e991aef64f015ff515c6a84c3e9f Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:35:56 +0200 Subject: [PATCH 0350/1768] update eddy #11592 --- projects/eddyfinance/index.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/projects/eddyfinance/index.js b/projects/eddyfinance/index.js index 6b155c1b7f..d886b08aea 100644 --- a/projects/eddyfinance/index.js +++ b/projects/eddyfinance/index.js @@ -1,8 +1,36 @@ const { getUniTVL } = require('../helper/unknownTokens') -const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)' +const sdk = require('@defillama/sdk'); +const { sumTokens2 } = require('../helper/unwrapLPs'); -const zetaTVL = getUniTVL({ factory: '0x9fd96203f7b22bCF72d9DCb40ff98302376cE09c', abis: { getReserves } }) +const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)'; + +const stablePools = [ + '0x448028804461e8e5a8877c228F3adFd58c3Da6B6', // 4 asset pool + '0x01a9cd602c6c3f05ea9a3a55184c2181bd43e4b8', // 2 asset pool accumulated finance + '0xee1629de70afaf3ae3592a9d6d859949750aa697' // 2 asset pool zearn +] + +async function stableSwapTvl(api) { + const params = [0, 1, 2, 3] + const calls = [] + stablePools.forEach(pool => { + params.forEach(param => + calls.push({ target: pool, params: param })) + }) + const tokens = await api.multiCall({ abi: 'function coins(uint256) view returns (address)', calls, permitFailure: true }) + const tokensAndOwners = [] + tokens.forEach((token, i) => { + if (!token) return; + tokensAndOwners.push([token, calls[i].target]) + }) + + return sumTokens2({ api, tokensAndOwners, blacklistedTokens: stablePools }) +} + +const uniTvl = getUniTVL({ factory: '0x9fd96203f7b22bCF72d9DCb40ff98302376cE09c', abis: { getReserves } }) module.exports = { - zeta: { tvl: zetaTVL }, + misrepresentedTokens: true, + methodology: "Sum of tvl of UniV2 pools and StableSwap pools", + zeta: { tvl: sdk.util.sumChainTvls([uniTvl, stableSwapTvl]) }, }; \ No newline at end of file From 3450d0252b9d62f82e3f94fd7badad11c373b005 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:20:35 +0200 Subject: [PATCH 0351/1768] track dtx v3 #11602 --- projects/dtx-v3/index.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 projects/dtx-v3/index.js diff --git a/projects/dtx-v3/index.js b/projects/dtx-v3/index.js new file mode 100644 index 0000000000..af79fead8a --- /dev/null +++ b/projects/dtx-v3/index.js @@ -0,0 +1,3 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ taiko: { factory: '0xfCA1AEf282A99390B62Ca8416a68F5747716260c', fromBlock: 105000, } }) \ No newline at end of file From fca13cee4edff9e0ac081d512140174c0c4e1d8a Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Thu, 12 Sep 2024 21:33:59 +0800 Subject: [PATCH 0352/1768] add new usdt and strategy pool to tvl calculation (#11604) --- projects/vaultka/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/vaultka/index.js b/projects/vaultka/index.js index 4386ddf9a2..54b1908c91 100644 --- a/projects/vaultka/index.js +++ b/projects/vaultka/index.js @@ -29,9 +29,13 @@ module.exports = { const jitoSol = "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn"; const jupSolProgram = "6j6Fwxf7UzfaXqQA2QraWGEAYUYzjjZP3t6ChzjzkmL9"; const jitoSolProgram = "6MAnq2z4ww8nnvfd8sec4sRMhTEdsdZXB1FLgqaYsg4d"; + const jlpUsdtStrategy = "9vuDo8ZQsmMMe3qsiFCYoxsjhHieQVMNXLsfcfpC4SrX" + const lendingUsdc = "DefkwTSvkHeZASCuaVJ8AxUWS6zvBCwrLFpW2FniLSWo"; //change it to token account + const lendingUsdt = "HDNrMywo5z84uBLdbcdHpgVP3bao8bw2PDiUwtM4hvHk" const usdc = ADDRESSES.solana.USDC; + const usdt = ADDRESSES.solana.USDT; const jlp = "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4" const strategyJlp = "5852AnvCSV2GDzgpRVG4ZQ5cNn7abR7pPty5FaBxHLzW" @@ -42,7 +46,8 @@ module.exports = { [jitoSol, jitoSolProgram], [jlp, strategyJlp], [usdc, lendingUsdc], - + [usdt, lendingUsdt], + [jlp, jlpUsdtStrategy], ], solOwners: [lendingSol], }); @@ -143,7 +148,7 @@ module.exports = { }); const contractAbis = { - stakedVlpBalance: "function getStakedVlpBalance() public view returns (uint256)", + stakedVlpBalance: "function getStakedVlpBalance() public view returns ( uint256)", stakedHlpBalance: "function userTokenAmount(address user) public view returns (uint256)", stakedAlpBalance: "function userInfo(address account) external view returns (uint256, uint256)", alpPrice: "function getAlpPrice() external view returns (uint256)", // From a6b9a5af5899cb6820709a75f305038e9dca9b8e Mon Sep 17 00:00:00 2001 From: cymux Date: Thu, 12 Sep 2024 16:41:44 +0300 Subject: [PATCH 0353/1768] Add cybro integration for DefiLlama TVL (#1) (#11606) Co-authored-by: mukhamux Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/cybro/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/cybro/index.js diff --git a/projects/cybro/index.js b/projects/cybro/index.js new file mode 100644 index 0000000000..58ffec4009 --- /dev/null +++ b/projects/cybro/index.js @@ -0,0 +1,30 @@ +const vaults = [ + '0xc9434fbee4ec9e0bad7d067b35d2329e5f1d8915', + '0xf56dab7b7b2954aa86a591f164205e6cdd33797e', + '0x4caec64454893c7912e6beb1e19b4714dd353748', + '0xb4e96a45699b4cfc08bb6dd71eb1276bfe4e26e7', + '0x9c3d4e6f96d2c3ddd8afee3891b955283a920889', + '0x4f3da57dbfb2b85c96e3556c5f1859ef88f5d6b1', + '0x7458ac85593472ba501ee361449638ed180a7ee7', + '0x83eaed4393328f77d0e402018a369b8b82e501a4', + '0x18e22f3f9a9652ee3a667d78911bac55bc2249af', + '0xd58826d2c0babf1a60d8b508160b52e9c19aff07', + '0x567103a40c408b2b8f766016c57a092a180397a1', + '0xe922bccf90d74f02a9d4203b377399314e008e41', + '0x0667ac28015ed7146f19b2d218f81218abf32951', + '0xdccde9c6800bea86e2e91cf54a870ba3ff6faf9f', + '0x9cc62ef691e869c05fd2ec41839889d4e74c3a3f', + '0x3500e1d4e93c9f45aa8198efda16842cb73fa1bc', + '0x6654cddf2a14a06307af6a8d7731dd4e059962a1', +] + +async function tvl(api) { + return api.erc4626Sum2({ calls: vaults }) +} + +module.exports = { + doublecounted: true, + methodology: "We calculate TVL based on the Total Supply of our proxy contracts through which users interact with vault's contracts", + start: 1000235, + blast: { tvl }, +}; From e883a96707413a6531a45da58785b12307c88c5d Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 16:08:55 +0200 Subject: [PATCH 0354/1768] lint fix --- projects/equilibrium/api.js | 91 +------------------------------------ 1 file changed, 1 insertion(+), 90 deletions(-) diff --git a/projects/equilibrium/api.js b/projects/equilibrium/api.js index 824909d627..8b45d48911 100644 --- a/projects/equilibrium/api.js +++ b/projects/equilibrium/api.js @@ -1,95 +1,6 @@ -const { ApiPromise, WsProvider } = require("@polkadot/api"); -const BN = require("bn.js"); - -const capitalize = (str) => str.slice(0, 1).toUpperCase() + str.slice(1); - -const currencyFromU64 = (u64) => { - const bytes = []; - let num = typeof u64 === "number" ? new BN(u64) : u64; - do { - bytes.unshift(num.modn(256)); - num = num.divn(256); - } while (num.gtn(0)); - return capitalize(Buffer.from(bytes).toString("utf8")); -}; - -const u64FromCurrency = (currency) => { - const buf = Buffer.from(currency.toLowerCase()); - const size = buf.length; - return buf.reduce((val, digit, i) => val + Math.pow(256, size - 1 - i) * digit, 0); -}; - -const ASSETS = { - // Do not incluede Eq token in product TVL - "Eq": "", - "Aca": "Acala", - "Bnb": "binancecoin", - "Bnc": "bifrost-native-coin", - "Cru": "crust-network", - "Dot": "polkadot", - "Eqd": "", - "Lit": "Litentry ", - "Pha": "Phala", - "Astr": "Astar", - "Busd": "binance-usd", - "Glmr": "Moonbeam", - "Ibtc": "Bitcoin", - "Intr": "Interlay", - "Lpt0": "", - "Lpt1": "", - "Para": "parallel-finance", - "Usdt": "tether", - "Xdot": "polkadot", - "Cd613": "polkadot", - "Cd714": "polkadot", - "Cd815": "polkadot", - "Eqdot": "polkadot", - "Mxeth": "ethereum", - "Xdot2": "polkadot", - "Xdot3": "polkadot", - "Mxusdc": "usd-coin", - "Mxwbtc": "wrapped-bitcoin", -}; - -const PRECISION = 1_000_000_000n; async function tvl() { - throw new Error("Equilibrium chain is deprecated"); - const provider = new WsProvider("wss://node.pol.equilibrium.io/"); - const api = await ApiPromise.create({ provider }); - - const assets = (await api.query.eqAssets.assets()).unwrap(); - - const queries = assets.map(({ id }) => { - return [api.query.eqAggregates.totalUserGroups, ["Balances", { 0: id }]]; - }); - - const balances = await api.queryMulti(queries); - - const eqDotPrice = (await api.query.oracle.pricePoints(u64FromCurrency("eqdot"))).unwrap().price.toNumber() - / (await api.query.oracle.pricePoints(u64FromCurrency("dot"))).unwrap().price.toNumber(); - - const accuracy = 10000; - - const result = assets.reduce((acc, { id }, i) => { - const symbol = currencyFromU64(id) - const coiungekoAsset = ASSETS[symbol]; - if (coiungekoAsset) - { - let amount = Number(balances[i].collateral.toBigInt() * BigInt(accuracy) / PRECISION) / accuracy; - - // eqDot staking token - if (symbol == "Eqdot") - { - amount *= eqDotPrice; - } - acc[coiungekoAsset] = (acc[coiungekoAsset] ?? 0) + amount; - } - return acc; - }, {}); - - return result; -} + throw new Error("Equilibrium chain is deprecated");} module.exports = { equilibrium: {tvl}, From 0e737ab8020cf8eb24d3eba1ada165d1122caf20 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 12 Sep 2024 16:37:11 +0200 Subject: [PATCH 0355/1768] Refactor Elixir (#11608) Co-authored-by: cairo Co-authored-by: 0xpeluche <0xpeluche@protonmail.com> --- projects/elixir/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 projects/elixir/index.js diff --git a/projects/elixir/index.js b/projects/elixir/index.js new file mode 100644 index 0000000000..9a996f6202 --- /dev/null +++ b/projects/elixir/index.js @@ -0,0 +1,27 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const DEUSD_LP_STAKING = "0xC7963974280261736868f962e3959Ee1E1B99712"; +const COMMITS = "0x4265f5D6c0cF127d733EeFA16D66d0df4b650D53"; +const FOUNDATION = "0x4B4EEC1DDC9420a5cc35a25F5899dC5993f9e586"; +const deUSD = "0x15700b564ca08d9439c58ca5053166e8317aa138" + +const tokens = [ + "0xb478Bf40dD622086E0d0889eeBbAdCb63806ADde", // DEUSD/DAI Curve LP + "0x88DFb9370fE350aA51ADE31C32549d4d3A24fAf2", // DEUSD/FRAX Curve LP + "0x5F6c431AC417f0f430B84A666a563FAbe681Da94", // DEUSD/USDC Curve LP + "0x7C4e143B23D72E6938E06291f705B5ae3D5c7c7C", // DEUSD/USDT Curve LP +]; + +const tvl = async (api) => { + const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) + api.sumTokens({ owners: [COMMITS, FOUNDATION], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null] }) + api.add(deUSD, deusdSupply); +}; + +module.exports = { + ethereum: { + tvl, + pool2: sumTokensExport({ owner: DEUSD_LP_STAKING, tokens }) + }, +}; From 6d73b45e8518c15dc12ea515eef68882b18d33d4 Mon Sep 17 00:00:00 2001 From: Alfredo Ferreira <15140256+aaoferreira@users.noreply.github.com> Date: Thu, 12 Sep 2024 16:46:45 +0200 Subject: [PATCH 0356/1768] fix contango graph urls and add new chains (#11609) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/contango-v2/index.js | 62 +++++++++++++++++++++++---------- projects/helper/tokenMapping.js | 4 +-- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/projects/contango-v2/index.js b/projects/contango-v2/index.js index cf64a0e03b..f3d69ee3f2 100644 --- a/projects/contango-v2/index.js +++ b/projects/contango-v2/index.js @@ -1,41 +1,62 @@ -const sdk = require("@defillama/sdk"); -const { blockQuery } = require("../helper/http"); const { cachedGraphQuery } = require("../helper/cache"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const CONTANGO_PROXY = "0x6Cae28b3D09D8f8Fc74ccD496AC986FC84C0C24E"; const CONTANGO_LENS_PROXY = "0xe03835Dfae2644F37049c1feF13E8ceD6b1Bb72a"; +const alchemyGraphUrl = (chain) => + `https://subgraph.satsuma-prod.com/773bd6dfe1c6/egills-team/v2-${chain}/api` const config = { arbitrum: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - grapUrl: sdk.graph.modifyEndpoint('BmHqxUxxLuMoDYgbbXU6YR8VHUTGPBf9ghD7XH6RYyTQ'), + graphUrl: alchemyGraphUrl('arbitrum'), }, optimism: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - grapUrl: sdk.graph.modifyEndpoint('PT2TcgYqhQmx713U3KVkdbdh7dJevgoDvmMwhDR29d5'), + graphUrl: alchemyGraphUrl('optimism'), }, ethereum: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - grapUrl: sdk.graph.modifyEndpoint('FSn2gMoBKcDXEHPvshaXLPC1EJN7YsfCP78swEkXcntY'), + graphUrl: alchemyGraphUrl('mainnet'), }, polygon: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - grapUrl: sdk.graph.modifyEndpoint('5t3rhrAYt79iyjm929hgwyiaPLk9uGxQRMiKEasGgeSP'), + graphUrl: alchemyGraphUrl('polygon'), }, xdai: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - grapUrl: sdk.graph.modifyEndpoint('9h1rHUKJK9CGqztdaBptbj4Q9e2zL9jABuu9LpRQ1XkC'), + graphUrl: alchemyGraphUrl('gnosis'), }, base: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - grapUrl: - "https://graph.contango.xyz:18000/subgraphs/name/contango-xyz/v2-base", + graphUrl: alchemyGraphUrl('base'), + }, + avax: { + contango: CONTANGO_PROXY, + contango_lens: CONTANGO_LENS_PROXY, + graphUrl: alchemyGraphUrl('avalanche'), + }, + bsc: { + contango: CONTANGO_PROXY, + contango_lens: CONTANGO_LENS_PROXY, + graphUrl: alchemyGraphUrl('bsc'), + }, + linea: { + contango: CONTANGO_PROXY, + contango_lens: CONTANGO_LENS_PROXY, + graphUrl: alchemyGraphUrl('linea'), + }, + scroll: { + contango: CONTANGO_PROXY, + contango_lens: CONTANGO_LENS_PROXY, + graphUrl: + "https://graph.contango.xyz:18000/subgraphs/name/contango-xyz/v2-scroll", }, }; @@ -45,28 +66,31 @@ module.exports = { }; Object.keys(config).forEach((chain) => { - const { contango, contango_lens, grapUrl } = config[chain]; + const { contango, contango_lens, graphUrl } = config[chain]; module.exports[chain] = { tvl: async (api) => { await Promise.all([ - positionsTvl(api, contango_lens, grapUrl, false), - vaultTvl(api, contango, grapUrl), + positionsTvl(api, contango_lens, graphUrl, false), + vaultTvl(api, contango, graphUrl), ]); - return api.getBalances(); + return sumTokens2({ api }) }, - borrowed: async (api) => - positionsTvl(api, contango_lens, grapUrl, true), + borrowed: async (api) => { + + await positionsTvl(api, contango_lens, graphUrl, true) + return sumTokens2({ api }) + } }; }); async function positionsTvl( api, contangoLens, - grapUrl, + graphUrl, borrowed, ) { const cacheKey = `contango-positions-${api.chain}`; - const positions = await cachedGraphQuery(cacheKey, grapUrl, graphQueries.position, { + const positions = await cachedGraphQuery(cacheKey, graphUrl, graphQueries.position, { api, useBlock: true, fetchById: true, @@ -94,9 +118,9 @@ async function positionsTvl( }); } -async function vaultTvl(api, contango, grapUrl) { +async function vaultTvl(api, contango, graphUrl) { const cacheKey = `contango-vaultAssets-${api.chain}`; - const assets = await cachedGraphQuery(cacheKey, grapUrl, graphQueries.asset, { + const assets = await cachedGraphQuery(cacheKey, graphUrl, graphQueries.asset, { api, useBlock: true, fetchById: true, diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index f38bc2427e..b67ae6f720 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -70,6 +70,7 @@ const fixBalancesTokens = { }, optimism: { '0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff': { coingeckoId: 'wrapped-eeth', decimals: 18 }, + '0x2416092f143378750bb29b79ed961ab195cceea5': { coingeckoId: "renzo-restaked-eth", decimals: 18 }, }, moonriver: { '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c': { coingeckoId: 'ethereum', decimals: 18 }, @@ -125,8 +126,7 @@ const fixBalancesTokens = { xdai: { '0x6c76971f98945ae98dd7d4dfca8711ebea946ea6': { coingeckoId: "wrapped-steth", decimals: 18 }, '0xaf204776c7245bf4147c2612bf6e5972ee483701': { coingeckoId: "savings-dai", decimals: 18 }, - } - + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From c030c02dc48dd909a7c3aecbcbaebdd9b2ab7cef Mon Sep 17 00:00:00 2001 From: Han <79642550+nicetomeetyou1@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:24:42 +0700 Subject: [PATCH 0357/1768] fix: scallop tvl calculation (#11593) --- projects/scallop/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/scallop/index.js b/projects/scallop/index.js index c81835e12b..e665812cdb 100644 --- a/projects/scallop/index.js +++ b/projects/scallop/index.js @@ -30,7 +30,9 @@ async function suiTvl(api) { balanceSheets.forEach((e) => { const coinType = '0x' + e.fields.name.fields.name - const amount = new BigNumber(e.fields.value.fields.cash).toString() + const amount = new BigNumber(e.fields.value.fields.cash) + .minus(e.fields.value.fields.revenue) + .toString() api.add(coinType, amount) }) From 90a701d82f2c3e591c24bb9ecf6851cbd67534df Mon Sep 17 00:00:00 2001 From: Aniket Sharma Date: Thu, 12 Sep 2024 22:01:30 +0530 Subject: [PATCH 0358/1768] feat: add polynomial trade tvl on polynomial chain (#11574) --- projects/helper/chains.json | 1 + projects/polynomial-trade/index.js | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 74140537cd..4e98db8806 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -249,6 +249,7 @@ "polkadot", "polygon", "polygon_zkevm", + "polynomial", "pool2", "posi", "proton", diff --git a/projects/polynomial-trade/index.js b/projects/polynomial-trade/index.js index 31dfb2e3a1..14eae14d24 100644 --- a/projects/polynomial-trade/index.js +++ b/projects/polynomial-trade/index.js @@ -4,18 +4,31 @@ const { get } = require('../helper/http'); // api const BASE_URL = "https://perps-v2-mainnet.polynomial.fi/snx-perps/tvl"; -async function tvl (timestamp, ethBlock) { +const BASE_URL_POLYNOMIAL_CHAIN = "https://perps-api-mainnet.polynomial.finance/core/portfolio/tvl"; + +async function tvl_optimism_chain (timestamp, ethBlock) { const perpApi = await get(BASE_URL); return { [`ethereum:${ADDRESSES.ethereum.sUSD}`]: perpApi.tvl * 1e18 }; } +async function tvl_polynomial_chain(timestamp, ethBlock) { + const perpApi = await get(BASE_URL_POLYNOMIAL_CHAIN); + return { + [`ethereum:${ADDRESSES.ethereum.USDC}`]: perpApi.tvl * 1e6 + }; +} + module.exports = { optimism: { - tvl + tvl:tvl_optimism_chain + }, + polynomial: { + tvl: tvl_polynomial_chain }, hallmarks:[ - [1679918400, "Trade Launch"] + [1679918400, "Trade Launch"], + [1724248800, "Polynomial Trade Launch"] ] } \ No newline at end of file From 6d5e95eaab2124ea5685ede531b93a0215838e69 Mon Sep 17 00:00:00 2001 From: Jean Chambras Date: Thu, 12 Sep 2024 23:03:04 +0200 Subject: [PATCH 0359/1768] Add hallmarks for APWine and Spectra (#11610) --- projects/apwine/index.js | 5 ++++- projects/spectra/index.js | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/apwine/index.js b/projects/apwine/index.js index 1de189ff1a..79522802e0 100644 --- a/projects/apwine/index.js +++ b/projects/apwine/index.js @@ -114,5 +114,8 @@ module.exports = { tvl: tvl_from_registry('polygon'), pool2: pool2s([APW_WETH_cometh_staking, APW_MUST_cometh_staking], [APW_WETH_cometh, APW_MUST_cometh]) }, - methodology: `Use the registry to retrieve futureVaults, and get for each vault the IBT which is the token that this vault holds - the user locked collateral` + methodology: `Use the registry to retrieve futureVaults, and get for each vault the IBT which is the token that this vault holds - the user locked collateral`, + hallmarks: [ + [1677798000, "Announcement of V1 Retirement"] + ], } diff --git a/projects/spectra/index.js b/projects/spectra/index.js index a0dfa4546a..cda61e4b6e 100644 --- a/projects/spectra/index.js +++ b/projects/spectra/index.js @@ -5,6 +5,9 @@ const sdk = require("@defillama/sdk"); module.exports = { methodology: `All deposited underlying in Spectra Principal Tokens and all underlying supplied as liquidity in Spectra Markets`, + hallmarks: [ + [1717074000, "V2 Launch"] + ], }; const curvePoolDeployedTopic = From cba77133bb596f7b5c0d1fa905c0e070a8a5a2b4 Mon Sep 17 00:00:00 2001 From: xwaynec Date: Fri, 13 Sep 2024 05:03:54 +0800 Subject: [PATCH 0360/1768] Zomma add Arbitrum network support (#11611) --- projects/zomma/index.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/projects/zomma/index.js b/projects/zomma/index.js index 2c3ef3a96d..f7d254acf1 100644 --- a/projects/zomma/index.js +++ b/projects/zomma/index.js @@ -5,11 +5,22 @@ const ZOMMA_CONTRACT_ALPHA = "0x709051774c60c0527dbaf880f41425eae036efaf"; const ZOMMA_CONTRACT_BETA = "0x7bf1f1c2d8caa200b068747487cb9bf109e529f1"; const ZOMMA_CONTRACT_ETH_AUDIT = "0xdd5ae451a75a654146747235fdb515f06a55d018"; const ZOMMA_CONTRACT_BTC_AUDIT = "0x1f14544aea89046e068e98c8672d2fbc3ab45bab"; -const USDC_CONTRACT = ADDRESSES.era.USDC; +const ZK_USDC_CONTRACT = ADDRESSES.era.USDC; + +const ZOMMA_ARB_VAULT = "0x452610BB258c143B5f26687286AE5e59EC69c267"; +const ZOMMA_ARB_CONTRACT_ETH = "0xa9DEb981b735EC0525c8D4C959267429FdD82347"; +const ARB_USDC_CONTRACT = ADDRESSES.arbitrum.USDC_CIRCLE; +const ARB_AAVE_USDC_CONTRACT = "0x724dc807b04555b71ed48a6896b6F41593b8C637"; module.exports = { methodology: "TVL is calculated as the sum of USDC deposited by traders and the liquidity in the Pools.", + arbitrum: { + tvl: sumTokensExport({ + owners: [ZOMMA_ARB_VAULT, ZOMMA_ARB_CONTRACT_ETH], + tokens: [ARB_USDC_CONTRACT, ARB_AAVE_USDC_CONTRACT], + }), + }, era: { tvl: sumTokensExport({ owners: [ @@ -18,7 +29,7 @@ module.exports = { ZOMMA_CONTRACT_ETH_AUDIT, ZOMMA_CONTRACT_BTC_AUDIT, ], - tokens: [USDC_CONTRACT], + tokens: [ZK_USDC_CONTRACT], }), }, }; \ No newline at end of file From 9d66454bd096dbd630503645a85f364ef7502b9d Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 13 Sep 2024 08:27:36 +0200 Subject: [PATCH 0361/1768] track Lombard vault --- projects/etherfi-lrt/index.js | 1 - projects/lombard-vault/index.js | 13 +++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 projects/lombard-vault/index.js diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index 79213ef8c8..68fa8567b2 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -5,7 +5,6 @@ const vaults = [ '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', '0x352180974C71f84a934953Cf49C4E538a6F9c997', '0xeDa663610638E6557c27e2f4e973D3393e844E70', - '0x5401b8620E5FB570064CA9114fd1e135fd77D57c', ] module.exports = { diff --git a/projects/lombard-vault/index.js b/projects/lombard-vault/index.js new file mode 100644 index 0000000000..d169e56869 --- /dev/null +++ b/projects/lombard-vault/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require('../helper/unwrapLPs'); +const vaults = [ + '0x5401b8620E5FB570064CA9114fd1e135fd77D57c', +] + +module.exports = { + doublecounted: true, + ethereum: { + tvl: sumTokensExport({ owners: vaults, fetchCoValentTokens: true, tokenConfig: { + onlyWhitelisted: false, + }, resolveUniV3: true,}), + }, +} \ No newline at end of file From 02cc78768515505043b1672884e79818cb0a0ade Mon Sep 17 00:00:00 2001 From: Ken Date: Fri, 13 Sep 2024 15:00:55 +0800 Subject: [PATCH 0362/1768] Lazyotter: modify the aave vault contract address to new our new upgradable contract address (#11603) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lazyotter/index.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/projects/lazyotter/index.js b/projects/lazyotter/index.js index 4dd3d84cda..b1b974b826 100644 --- a/projects/lazyotter/index.js +++ b/projects/lazyotter/index.js @@ -1,10 +1,12 @@ -const aaveVaults = ["0x7100409baaeda121ab92f663e3ddb898f11ff745", "0x844Ccc93888CAeBbAd91332FCa1045e6926a084d"]; +// [usdc, weth, wstETH] +const aaveVaults = ["0xF91caE959D134065f39DDaa41d66E254dfaFc6f8", "0x81A47E298d634273Afe43AD58EaC5888983d21c4", "0x22EdDd86Ee6e1dcD2eAb06f80ee39B3c084a1E77"]; + +// [eth/usdc, eth/wbtc, eth/wrsETH, eth/wstETH, usdc/usdt] +// const ambientVaults = ["0x07ab0C3A3D9e286ba790FF57f205970bC462BB21", "0x018B3ac371344735025cB01d79871Be0e4AB351C", "0x7D1E707011bA5be76806037532c266fA6eb0699f", "0xe18acadfb098fbf4017108a5C83Fa901B062a53d", "0xfbB0D0cB3324Ec90c6667D9E2b8B98dB8F73a3e6"] async function tvl(api) { - const tokens = await api.multiCall({ abi: "address:asset", calls: aaveVaults }); - const aTokens = await api.multiCall({ abi: "address:aToken", calls: aaveVaults }); - const tokensAndOwners2 = [tokens.concat(aTokens), aaveVaults.concat(aaveVaults)]; - return api.sumTokens({ tokensAndOwners2 }); + await api.erc4626Sum2({ calls: aaveVaults, }); + // await api.erc4626Sum2({ calls: ambientVaults, tokenAbi: 'baseToken', balanceAbi: 'totalAssets' }); } module.exports = { From bc2392f4da943175c2e52605549fa237f55347d0 Mon Sep 17 00:00:00 2001 From: Paras Jain Date: Fri, 13 Sep 2024 13:31:29 +0530 Subject: [PATCH 0363/1768] Add ZTLN token (https://zoth.io) (#11578) Co-authored-by: Ashish Co-authored-by: Snehagupta1907 --- projects/ZTLN/index.js | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 projects/ZTLN/index.js diff --git a/projects/ZTLN/index.js b/projects/ZTLN/index.js new file mode 100644 index 0000000000..f3d9acdf98 --- /dev/null +++ b/projects/ZTLN/index.js @@ -0,0 +1,50 @@ +const { request } = require("graphql-request"); + +const endpoint = "https://api.studio.thegraph.com/query/77016/wallet-mainnet/version/latest"; + +const securityAddress = '0x917991d52Aa2fC1b5612A6aa5e4e81d580F97532'; +const query = ` +query MyQuery { + securities(where: {security: "${securityAddress}"}) { + secondaryInvestors { + amount + } + } +} +`; + +async function getTvl() { + try { + const data = await request(endpoint, query); + + const securities = data.securities || []; + + let tokens = 0; + const currencyDecimal = 10 ** 18; + + securities.forEach(security => { + security.secondaryInvestors.forEach(investor => { + const amt = parseFloat(investor.amount); + tokens += amt / currencyDecimal; + }); + }); + + const price = 100.5; + const tvl = tokens * price; + + // console.log("tvl", tvl); + return tvl; + } catch (error) { + console.error("Error fetching TVL:", error); + return 0; + } +} + +module.exports = { + timetravel: false, + methodology: "The value in RWA held by the protocol", + ethereum: { + fetch: getTvl + }, + fetch: getTvl +}; \ No newline at end of file From 0f9cd5ad1fdf0a7976764aa7b8b4f6887e977f33 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 13 Sep 2024 12:29:48 +0200 Subject: [PATCH 0364/1768] track IPOR fusion #11616 --- projects/ipor-fusion/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/ipor-fusion/index.js diff --git a/projects/ipor-fusion/index.js b/projects/ipor-fusion/index.js new file mode 100644 index 0000000000..2f43974e98 --- /dev/null +++ b/projects/ipor-fusion/index.js @@ -0,0 +1,15 @@ +const { getConfig } = require('../helper/cache') + +const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/main/mainnet/addresses.json"; + +async function tvl(api) { + const config = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); + const calls = config[api.chain].vaults.map(vault => vault.PlasmaVault); + return api.erc4626Sum2({ calls }) +} + +module.exports = { + methodology: `Counts the tokens deposited into IPOR Fusion Vaults.`, + ethereum: { tvl }, + arbitrum: { tvl }, +}; From 926d12765c3a450e07f9d135ea38370cfb5a2a6b Mon Sep 17 00:00:00 2001 From: yanfu-mercurylabs <155401479+yanfu-mercurylabs@users.noreply.github.com> Date: Fri, 13 Sep 2024 20:30:32 +1000 Subject: [PATCH 0365/1768] feature: update earlyfans adapter (#11617) Co-authored-by: Yan Fu --- projects/earlyfans/index.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/projects/earlyfans/index.js b/projects/earlyfans/index.js index e7801fcb37..ebed47cab7 100644 --- a/projects/earlyfans/index.js +++ b/projects/earlyfans/index.js @@ -2,17 +2,19 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') -const contract = "0x4b17a9318238403ddac8E3a790C3b06D18132Bf4"; -const early = "0x7135B32e9903BdB4e19a8b1D22fC2038964B8451"; +const earlyfansV1contract = "0x4b17a9318238403ddac8E3a790C3b06D18132Bf4"; +const earlyTokenContract = "0x7135B32e9903BdB4e19a8b1D22fC2038964B8451"; +const earlyfansV2promisesContract = "0x169BC25B709f05c69daE264487cd84Be526AFb9a"; +const earlyfansV2bribesContract = "0x55BcC767F4ADD89BB7C316C560701A0a331DF746" async function tvl(api) { - return sumTokens2({ tokens: [ADDRESSES.null], owners: [contract], api }); + return sumTokens2({ tokens: [ADDRESSES.null], owners: [earlyfansV1contract, earlyfansV2promisesContract, earlyfansV2bribesContract], api }); } module.exports = { - methodology: `TVL counts the EARLY on ${early} and ETH on ${contract}`, + methodology: `TVL counts the EARLY on ${earlyTokenContract} and ETH on ${earlyfansV1contract}, ${earlyfansV2promisesContract} and ${earlyfansV2bribesContract}.`, blast: { tvl, - staking: staking(contract, early) // early token + staking: staking(earlyfansV1contract, earlyTokenContract) // early token }, }; From d0b412a244c92e976beddb010237d8bf7a151be6 Mon Sep 17 00:00:00 2001 From: Ken Date: Fri, 13 Sep 2024 18:30:47 +0800 Subject: [PATCH 0366/1768] Lazyotter: add ambient vault tvl calculation (#11621) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lazyotter/index.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/projects/lazyotter/index.js b/projects/lazyotter/index.js index b1b974b826..b93cbd2461 100644 --- a/projects/lazyotter/index.js +++ b/projects/lazyotter/index.js @@ -2,11 +2,20 @@ const aaveVaults = ["0xF91caE959D134065f39DDaa41d66E254dfaFc6f8", "0x81A47E298d634273Afe43AD58EaC5888983d21c4", "0x22EdDd86Ee6e1dcD2eAb06f80ee39B3c084a1E77"]; // [eth/usdc, eth/wbtc, eth/wrsETH, eth/wstETH, usdc/usdt] -// const ambientVaults = ["0x07ab0C3A3D9e286ba790FF57f205970bC462BB21", "0x018B3ac371344735025cB01d79871Be0e4AB351C", "0x7D1E707011bA5be76806037532c266fA6eb0699f", "0xe18acadfb098fbf4017108a5C83Fa901B062a53d", "0xfbB0D0cB3324Ec90c6667D9E2b8B98dB8F73a3e6"] +const ambientVaultHelper = "0x9b5BD88893d73d114d252Cff7CFd4f2705eEFAe7" +const ambientVaults = ["0x07ab0C3A3D9e286ba790FF57f205970bC462BB21", "0x018B3ac371344735025cB01d79871Be0e4AB351C", "0x7D1E707011bA5be76806037532c266fA6eb0699f", "0xe18acadfb098fbf4017108a5C83Fa901B062a53d", "0xfbB0D0cB3324Ec90c6667D9E2b8B98dB8F73a3e6"] async function tvl(api) { await api.erc4626Sum2({ calls: aaveVaults, }); - // await api.erc4626Sum2({ calls: ambientVaults, tokenAbi: 'baseToken', balanceAbi: 'totalAssets' }); + const ambAssets = await api.multiCall({ abi: 'uint256:totalAssets', calls: ambientVaults}) + const calls = ambAssets.map((v, i) => ({ params: [ambientVaults[i], v]})) + const res = await api.multiCall({ abi: 'function previewAmountByAsset(address vault, uint256 assets) view returns (uint256, uint256)', calls, target: ambientVaultHelper}) + const quoteTokens = await api.multiCall({ abi: 'address:quoteToken', calls: ambientVaults}) + const baseTokens = await api.multiCall({ abi: 'address:baseToken', calls: ambientVaults}) + for (const i in res){ + api.add(quoteTokens[i], res[i][0]) + api.add(baseTokens[i], res[i][1]) + } } module.exports = { From 779947cfda0fd7779d4d8dbb73a4d5bedb8e4e3e Mon Sep 17 00:00:00 2001 From: Kevin Park Date: Fri, 13 Sep 2024 17:30:57 +0700 Subject: [PATCH 0367/1768] add TVL for nayms on base (#11620) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/nayms/index.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/projects/nayms/index.js b/projects/nayms/index.js index 0aeb90282e..9606698be0 100644 --- a/projects/nayms/index.js +++ b/projects/nayms/index.js @@ -10,13 +10,23 @@ const tokens = [ ADDRESSES.ethereum.USDM, ]; +const tokensBase = [ + ADDRESSES.base.WETH, + ADDRESSES.base.USDC, + "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C", +]; + const owner = "0x39e2f550fef9ee15b459d16bD4B243b04b1f60e5"; +const ownerBase = "0x546Fb1621CF8C0e8e3ED8E3508b7c5100ADdBc03"; module.exports = { methodology: "Sum assets on Nayms", start: 1681990619, // Thu Apr 20 13:36:59 2023 GMT + hallmarks: [[1681990619, "Nayms V3 Launch"]], ethereum: { tvl: sumTokensExport({ owner, tokens }), }, - hallmarks: [[1681990619, "Nayms V3 Launch"]], + base: { + tvl: sumTokensExport({ owner: ownerBase, tokens: tokensBase }), + }, }; From 06258c55781f610abea66e138b03252cc6069186 Mon Sep 17 00:00:00 2001 From: yash-trufin <113037107+yash-trufin@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:01:20 +0530 Subject: [PATCH 0368/1768] feat: Add support for TruStake NEAR TVL calculation (#11618) --- projects/trufin-trustake/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/trufin-trustake/index.js b/projects/trufin-trustake/index.js index 9773ee5467..83693706c7 100644 --- a/projects/trufin-trustake/index.js +++ b/projects/trufin-trustake/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { function_view } = require('../helper/chain/aptos') +const { call: near_call } = require('../helper/chain/near') const TRUSTAKE_APT_CONTRACT_ADDR = "0x6f8ca77dd0a4c65362f475adb1c26ae921b1d75aa6b70e53d0e340efd7d8bc80" const MODULE = "staker" @@ -27,6 +28,13 @@ async function tvl(api) { api.add(MATIC_TOKEN_ADDR, (totalSupply * sharePrice) + +dust) } +const TRUSTAKE_NEAR_CONTRACT_ADDR = "staker1.msig1.trufin.near" + +async function nearTvl() { + const totalStaked = await near_call(TRUSTAKE_NEAR_CONTRACT_ADDR, 'get_total_staked', {}) + return { near: totalStaked[0] / 1e24 } +} + module.exports = { methodology: `Counts the TVL of native tokens across all TruStake vaults.`, ethereum: { @@ -34,5 +42,8 @@ module.exports = { }, aptos: { tvl: aptosTvl + }, + near: { + tvl: nearTvl } } From 4130929af20738b6de8d2da4319909395937f1a9 Mon Sep 17 00:00:00 2001 From: Ariel Serranoni <30545071+aserranoni@users.noreply.github.com> Date: Fri, 13 Sep 2024 07:39:53 -0300 Subject: [PATCH 0369/1768] Add Kadena Cabinet Adapter (#11613) --- projects/cabinet/index.js | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 projects/cabinet/index.js diff --git a/projects/cabinet/index.js b/projects/cabinet/index.js new file mode 100644 index 0000000000..a0df108b04 --- /dev/null +++ b/projects/cabinet/index.js @@ -0,0 +1,42 @@ +const { fetchLocal, mkMeta } = require("../helper/pact"); + +const chainId = "5"; +const network = `https://api.chainweb.com/chainweb/0.0/mainnet01/chain/${chainId}/pact`; +const GAS_PRICE = 0.00000001; +const creationTime = () => Math.round(new Date().getTime() / 1000) - 10; + + +const getReserve = (tokenData) => { + return parseFloat(tokenData.decimal ? tokenData.decimal : tokenData); +}; + + +const getCabinetTvl = async () => { + const data = await fetchLocal( + { + pactCode: `(coin.get-balance "c:86aaCQXT8uRkyXGXu9k-eNn1kXqV_nNmjTYErKpZ6vE")`, + meta: mkMeta("", chainId, GAS_PRICE, 3000, creationTime(), 600) + }, + network + ); + if (data.result.status === "success") { + return getReserve(data.result.data); + } + throw new Error("Failed do fetch TVL"); + +} + +async function tvl() { + const cabinetTvl = await getCabinetTvl(); + return { + kadena: cabinetTvl, + }; +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + kadena: { + tvl: tvl, + }, +}; From 013728ed8c193034000706191d16a0222815db1b Mon Sep 17 00:00:00 2001 From: frost-ostrich <127277105+frost-ostrich@users.noreply.github.com> Date: Fri, 13 Sep 2024 06:01:55 -0500 Subject: [PATCH 0370/1768] Origami add borrowed metric (#11612) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/origami/index.js | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/projects/origami/index.js b/projects/origami/index.js index 4dff78b006..e136642cc2 100644 --- a/projects/origami/index.js +++ b/projects/origami/index.js @@ -11,20 +11,26 @@ module.exports = { } Object.keys(GRAPH_URLS).forEach(chain => { - const endpoint = GRAPH_URLS[chain] - module.exports[chain] = { - tvl: async (api) => { - const { metrics: [{ investmentVaults }] } = await cachedGraphQuery('origami/' + chain, endpoint, '{ metrics { investmentVaults { id } } }') - const vaults = investmentVaults.map(vault => vault.id) - let tokens = await api.multiCall({ abi: 'address:reserveToken', calls: vaults }) - if (chain === 'arbitrum') - tokens = await api.multiCall({ abi: 'address:baseToken', calls: tokens }) - - const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: vaults }) - const supplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: vaults }) - const reserves = await api.multiCall({ abi: 'uint256:reservesPerShare', calls: vaults }) - const bals = reserves.map((reserve, i) => reserve * supplies[i] / 10 ** decimals[i]) - api.add(tokens, bals) - } - } + module.exports[chain] = { tvl } }) + +async function tvl(api) { + const { metrics: [{ investmentVaults }] } = await cachedGraphQuery('origami/' + api.chain, GRAPH_URLS[api.chain], '{ metrics { investmentVaults { id kinds } } }') + + const isLeveraged = vault => !!vault.kinds.find(v => v === 'Leverage') + const levVaults = investmentVaults.filter(isLeveraged).map(v => v.id) + const nonLevVaults = investmentVaults.filter(v => !isLeveraged(v)).map(v => v.id) + + let nonLevTokens = await api.multiCall({ abi: 'address:reserveToken', calls: nonLevVaults }) + nonLevTokens = await api.multiCall({ abi: 'address:baseToken', calls: nonLevTokens }) + const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: nonLevVaults }) + const supplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: nonLevVaults }) + const reserves = await api.multiCall({ abi: 'uint256:reservesPerShare', calls: nonLevVaults }) + const bals = supplies.map((supply, idx) => reserves[idx] * supply / 10 ** decimals[idx]) + api.add(nonLevTokens, bals) + + const levReserveTokens = await api.multiCall({ calls: levVaults, abi: 'address:reserveToken' }) + const assetsAndLiabilities = await api.multiCall({ abi: 'function assetsAndLiabilities() external view returns (uint256 assets,uint256 liabilities,uint256 ratio)', calls: levVaults }) + const levBals = assetsAndLiabilities.map(({ assets, liabilities }) => assets - liabilities) + api.add(levReserveTokens, levBals) +} From 6790d329a6756f203d646fc9dbae5d33c54ed538 Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Fri, 13 Sep 2024 17:31:20 +0300 Subject: [PATCH 0371/1768] Add tvl for crosscurve (#11615) Co-authored-by: spiehdid --- projects/crosscurve/index.js | 106 +++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 projects/crosscurve/index.js diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js new file mode 100644 index 0000000000..53dce79f28 --- /dev/null +++ b/projects/crosscurve/index.js @@ -0,0 +1,106 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x0000000000085d4780B73119b644AE5ecd22b376", // TUSD + "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI + "0x4DEcE678ceceb27446b35C672dC7d61F30bAD69E", // crvUSDC + "0x390f3595bCa2Df7d23783dFd126427CCeb997BF4", // crvUSDT + "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3Crv + "0xc4AD29ba4B3c580e6D59105FFf484999997675Ff", // crv3crypto + ], + }), + }, + arbitrum: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x4D15a3A2286D883AF0AA1B3f21367843FAc63E07", // TUSD + "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", // USDT + "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", // usdc.e + "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", // DAI + "0xec090cf6DD891D2d014beA6edAda6e05E025D93d", // crvUSDC + "0x82670f35306253222F8a165869B28c64739ac62e", // 3c-crvUSD + "0x73aF1150F265419Ef8a5DB41908B700C32D49135", // crvUSDT + "0x7f90122BF0700F9E7e1F688fe926940E8839F353", // 2CRV + ], + }), + }, + polygon: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x2e1AD108fF1D8C782fcBbB89AAd783aC49586756", // TUSD + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", // USDT + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", // usdc.e + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", // DAI + "0x5225010a0ae133b357861782b0b865a48471b2c5", // crvUSDC + "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171", // aave + "0xa70af99bff6b168327f9d1480e29173e757c7904", // crvUSDT + "0xdad97f7713ae9437fa9249920ec8507e5fbb23d3", // crv3crypto + ], + }), + }, + bsc: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", // TUSD + "0x55d398326f99059fF775485246999027B3197955", // USDT + "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", // usdc.e + "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", // DAI + "0xc4ec3ab41182e70ca45a764ffc5c45b9a82ccc97", // crvUSDC + "0xA5E0E46462970C9Ee8C2ECadcde254c483748Ec4", // b3pool + "0xae87e5fa20f335ce14aa3b9e0616308d9ac7d4ce", // crvUSDT + ], + }), + }, + optimism: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0xcB59a0A753fDB7491d5F3D794316F1adE197B21E", // TUSD + "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", // USDT + "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", // usdc.e + "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", // DAI + "0x03771e24b7c9172d163bf447490b142a15be3485", // crvUSDC + "0x1337bedc9d22ecbe766df105c9623922a27963ec", // 3pool + "0xd1b30ba128573fcd7d141c8a987961b40e047bb6", // crvUSDT + ], + }), + }, + avax: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x1C20E891Bab6b1727d14Da358FAe2984Ed9B59EB", // TUSD + "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", // USDT + "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", // usdc.e + "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", // DAI + "0x1337BedC9D22ecbe766dF105c9623922A27963EC", // av3crv + "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", // crv3crypto + ], + }), + }, + base: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0xf6C5F01C7F3148891ad0e19DF78743D31E390D1f", // 4pool + ], + }), + }, + xdai: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x1337bedc9d22ecbe766df105c9623922a27963ec", // x3CRV + ], + }), + }, +}; From 6c4e587d9ee7f70595177eac83ed8d52e4dd2d7b Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 13 Sep 2024 23:27:47 +0100 Subject: [PATCH 0372/1768] add new adapters for electroswap --- projects/electroswap-v2/index.js | 7 +++++++ projects/electroswap-v3/index.js | 8 ++++++++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 4 ++++ 5 files changed, 21 insertions(+) create mode 100644 projects/electroswap-v2/index.js create mode 100644 projects/electroswap-v3/index.js diff --git a/projects/electroswap-v2/index.js b/projects/electroswap-v2/index.js new file mode 100644 index 0000000000..35fbf2c4a3 --- /dev/null +++ b/projects/electroswap-v2/index.js @@ -0,0 +1,7 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports={ + etn: { + tvl: getUniTVL({ factory: '0x203D550ed6fA9dAB8A4190720CF9F65138abd15B', useDefaultCoreAssets: false }), + } +} \ No newline at end of file diff --git a/projects/electroswap-v3/index.js b/projects/electroswap-v3/index.js new file mode 100644 index 0000000000..b580d9c6e9 --- /dev/null +++ b/projects/electroswap-v3/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + etn: { + factory: "0xbF6Bcbe2be545135391777F3B4698be92E2EB8cA", + fromBlock: 1242016, + }, +}); diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 4e98db8806..5f339a813f 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -112,6 +112,7 @@ "ethereumclassic", "ethf", "ethpow", + "etn", "europa", "everscale", "evmos", diff --git a/projects/helper/env.js b/projects/helper/env.js index ebdf0c7329..69b6c82ea8 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -13,6 +13,7 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", IDEX_RPC: "https://xchain-rpc.idex.io", + ETN_RPC: "https://rpc.ankr.com/electroneum" } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index b67ae6f720..90e0b74515 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -1,3 +1,4 @@ +const { decimals } = require('@defillama/sdk/build/erc20') let coreAssets = require('./coreAssets.json') const ADDRESSES = coreAssets const nullAddress = ADDRESSES.null @@ -127,6 +128,9 @@ const fixBalancesTokens = { '0x6c76971f98945ae98dd7d4dfca8711ebea946ea6': { coingeckoId: "wrapped-steth", decimals: 18 }, '0xaf204776c7245bf4147c2612bf6e5972ee483701': { coingeckoId: "savings-dai", decimals: 18 }, }, + etn: { + '0x138dafbda0ccb3d8e39c19edb0510fc31b7c1c77': { coingeckoId: "electroneum", decimals: 18 } + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From c3bad51e5d0c9702830de41bbc63f53bbe637f9b Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 14 Sep 2024 10:44:40 +0200 Subject: [PATCH 0373/1768] zerolend: add pools #11629 --- projects/zerolend/index.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/projects/zerolend/index.js b/projects/zerolend/index.js index 6f56ea6d81..52ce59c015 100644 --- a/projects/zerolend/index.js +++ b/projects/zerolend/index.js @@ -1,14 +1,22 @@ +const sdk = require('@defillama/sdk') const { aaveExports } = require("../helper/aave"); const { staking } = require("../helper/staking"); const { pool2s } = require("../helper/pool2"); const config = { - era: "0xB73550bC1393207960A385fC8b34790e5133175E", - manta: "0x67f93d36792c49a4493652B91ad4bD59f428AD15", - blast: "0xc6DF4ddDBFaCb866e78Dcc01b813A41C15A08C10", - linea: "0x67f93d36792c49a4493652B91ad4bD59f428AD15", - xlayer: "0x97e59722318F1324008484ACA9C343863792cBf6", - ethereum: "0x47223D4eA966a93b2cC96FFB4D42c22651FADFcf", + era: ["0xB73550bC1393207960A385fC8b34790e5133175E"], + manta: ["0x67f93d36792c49a4493652B91ad4bD59f428AD15"], + blast: ["0xc6DF4ddDBFaCb866e78Dcc01b813A41C15A08C10"], + linea: [ + "0x67f93d36792c49a4493652B91ad4bD59f428AD15", // main linea market + '0x9aFB91a3cfB9aBc8Cbc8429aB57b6593FE36E173', // croak linea market + '0xEe9ec60657B714E3FAC5255a5443AC5EC7Ba5bB0', // foxy linea market + ], + xlayer: ["0x97e59722318F1324008484ACA9C343863792cBf6"], + ethereum: [ + "0x47223D4eA966a93b2cC96FFB4D42c22651FADFcf", // ethereum lrt market + '0x31063F7CA8ef4089Db0dEdf8D6e35690B468A611' // bitcoin lrt market + ], }; const linea = { @@ -23,7 +31,11 @@ const linea = { const data = {}; Object.keys(config).forEach((chain) => { - data[chain] = aaveExports(chain, undefined, undefined, [config[chain]]); + const chainExports = config[chain].map((address) => aaveExports(chain, undefined, undefined, [address])) + data[chain] = { + tvl: sdk.util.sumChainTvls(chainExports.map(i => i.tvl)), + borrowed: sdk.util.sumChainTvls(chainExports.map(i => i.borrowed)) + } }); data.linea.staking = staking(linea.zeroLocker, linea.zero, "linea"); From ccf35dcf05c228aa399f35d14c602fe2d5d5784c Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 14 Sep 2024 12:45:20 +0400 Subject: [PATCH 0374/1768] Oasis sapphire (#11628) Co-authored-by: Evgeny Rozanov --- projects/accumulated-finance/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/accumulated-finance/index.js b/projects/accumulated-finance/index.js index 95eed412e7..8779d0c22f 100644 --- a/projects/accumulated-finance/index.js +++ b/projects/accumulated-finance/index.js @@ -62,6 +62,12 @@ const config = { "LST": "0xcba2aeec821b0b119857a9ab39e09b034249681a" }, } + ], + "oasis": [ + { + "sapphire": { + "LST": "0xed57966f1566de1a90042d07403021ea52ad4724" + }} ] } From 1618324dc14302647466fb5d17ba580c63bb0176 Mon Sep 17 00:00:00 2001 From: rav <85165079+rav-ipor@users.noreply.github.com> Date: Sat, 14 Sep 2024 10:47:24 +0200 Subject: [PATCH 0375/1768] Add hallmarks and logo update in IPOR protocol (#11626) Co-authored-by: adam Co-authored-by: kris-ipor <98769272+kris-ipor@users.noreply.github.com> --- projects/ipor/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/ipor/index.js b/projects/ipor/index.js index f4e7758c56..40b79070e3 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -93,5 +93,8 @@ module.exports = { }, arbitrum: { tvl: tvlArbitrum - } + }, + hallmarks:[ + [1674648000, "Liquidity Mining Start"] + ], }; From 45766fbace13356077ba71b2716787def99bb664 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 14 Sep 2024 10:53:11 +0200 Subject: [PATCH 0376/1768] track clTON #11625 --- projects/cygnus-fi-ton/index.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/cygnus-fi-ton/index.js diff --git a/projects/cygnus-fi-ton/index.js b/projects/cygnus-fi-ton/index.js new file mode 100644 index 0000000000..f795f9a54f --- /dev/null +++ b/projects/cygnus-fi-ton/index.js @@ -0,0 +1,31 @@ +const { call } = require("../helper/chain/ton") +const { get } = require('../helper/http') + +// helper function of getting jetton metadata +async function getJettonMetadata(addr) { + const res = await get(`https://tonapi.io/v2/jettons/${addr}`) + return res +} + +async function tvl(api) { + const CLTON_MINTER_ADDRESS = 'EQDz48al4FfPnapvXYJOfkBOIj3xvNZ0t5vSpQN-Qukqwm7W' + const CLTON_TOKEN_ADDRESS = 'EQCxd6SJQ8KiLkEpN3OoBfUIHqPE3yp0j80UnPysQqcTikNF' + + const cltonMinterResult = await call({ target: CLTON_MINTER_ADDRESS, abi: "get_minter_data", stack: [] }) + // exchange rate from clTON to TON: decimal 9 + + const cltonToTon = cltonMinterResult[4] / 1e9 + const cltonMetadata = await getJettonMetadata(CLTON_TOKEN_ADDRESS) + + // Now the tokens in the withdrawal vault will be correctly destroyed, so the TOTAL SUPPLY can be a true indication of tvl + const cltonTotalSupply = (cltonMetadata['total_supply']) / 1e9 + + const cltonTvl = cltonTotalSupply * cltonToTon + api.addCGToken("the-open-network", cltonTvl) +} + +module.exports = { + ton: { + tvl + } +}; \ No newline at end of file From 6be3c60110dc816f4b3e644d15ec61f5641385a4 Mon Sep 17 00:00:00 2001 From: daedboi <87483308+daedboi@users.noreply.github.com> Date: Sat, 14 Sep 2024 11:54:37 +0300 Subject: [PATCH 0377/1768] feat: Update subgraph link for BMX Freestyle (#11624) --- projects/freestyle/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/freestyle/index.js b/projects/freestyle/index.js index 4aadb02a6e..fce0e46372 100644 --- a/projects/freestyle/index.js +++ b/projects/freestyle/index.js @@ -5,7 +5,7 @@ const freestyleConfig = { base: { token: ADDRESSES.base.USDC, start: 1700006400, - graphUrl: "https://api.studio.thegraph.com/query/62454/analytics_base_8_2/version/latest", + graphUrl: "https://api-v2.morphex.trade/subgraph/3KhmYXgsM3CM1bbUCX8ejhcxQCtWwpUGhP7p9aDKZ94Z", accountSource: '0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD' }, } From f7f546a2a781cb20ac833cd1caaf9af19c90ac6d Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Sat, 14 Sep 2024 01:55:52 -0700 Subject: [PATCH 0378/1768] Add Velo/Aero/Edits (#11623) --- projects/visor/config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/visor/config.js b/projects/visor/config.js index 336cd3e712..026bae0e92 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -34,6 +34,7 @@ const HYPE_REGISTRY = { ], optimism: [ ["0xF5BFA20F4A77933fEE0C7bB7F39E7642A070d599", 6538026], // Uniswap + ["0xF802D5c44dC4E3bB0eCcf680a6bA82Cbd24B9F33", 125319599], // Velodrome ], arbitrum: [ ["0x66CD859053c458688044d816117D5Bdf42A56813", 10617223], // Uniswap @@ -87,6 +88,7 @@ const HYPE_REGISTRY = { ["0x8118C33513feC13f8cf488CCb4509190650F0e92", 7310111], // Baseswap ["0xf1DF4F17e34Ba710DfFC487F73f1e19476E815a6", 8743213], // Thick ["0xe1cd1c2d2e4B44dE211D554649BC7dc49eF07784", 15063294], // Kinetix + ["0x6809f4881707459Ad0287C6467365E3C910e9373", 19631061], // Aerodrome ], kava: [ ["0x683292172E2175bd08e3927a5e72FC301b161300", 6384272], // Kinetix @@ -141,7 +143,7 @@ const HYPE_REGISTRY = { ], core: [ ["0x32e27fF479454e32868ff67Ee9F06BAFDC1E908F", 17268275], // Glyph - ["0xFc13Ebe7FEB9595D70195E9168aA7F3acE153621", 17164390], // Glyph + ["0xFc13Ebe7FEB9595D70195E9168aA7F3acE153621", 17164390], // CoreX ], }; From 4cc59e147d1c61ae5eceb9b9c957d389b8cfda6e Mon Sep 17 00:00:00 2001 From: miler012 <124125686+miler012@users.noreply.github.com> Date: Sat, 14 Sep 2024 17:59:17 +0800 Subject: [PATCH 0379/1768] Satori add TON chain (#11631) --- projects/satori/index.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/projects/satori/index.js b/projects/satori/index.js index 1181426e80..53f0952302 100644 --- a/projects/satori/index.js +++ b/projects/satori/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { sumTokensExport } = require("../helper/unwrapLPs"); +const { sumTokensExport: sumTokensExportOfTon } = require("../helper/chain/ton"); const USDT_TOKEN_CONTRACT = ADDRESSES.astarzk.USDT; const EZETH_BASE = ADDRESSES.blast.ezETH; @@ -11,7 +12,7 @@ const WALLET_ADDR = [ ]; module.exports = { methodology: - "TVL includes the total token value inside the protocol's liquidity pools.", + "Counts Satori smartcontract balance as TVL..", polygon_zkevm: { tvl: sumTokensExport({ owners: WALLET_ADDR, @@ -72,4 +73,13 @@ module.exports = { tokens: [ADDRESSES.arbitrum.USDC_CIRCLE], }), }, + ton:{ + tvl: sumTokensExportOfTon({ + owners: [ + "EQDrGCJ3V8cMw92Gg8Tf9nfq3piaT_iI3EkCGVF0OUG0vWEh", + ], + tokens: [ADDRESSES.ton.USDT], + }), + } + }; From 1ef3e28ebf779a0881cf70f261ea6fa8db174d07 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 14 Sep 2024 15:36:46 +0200 Subject: [PATCH 0380/1768] code refactor --- projects/arbicheems/index.js | 53 +- projects/arbinyan/index.js | 72 +- .../abis/arbiStakerERC20.json | 5 - projects/arbirise-finance/contracts.json | 7 - projects/arbirise-finance/getPrice.js | 146 --- projects/arbirise-finance/index.js | 75 +- projects/helper/tokenMapping.js | 3 + projects/macaron/config.js | 895 ++---------------- projects/macaron/index.js | 113 +-- projects/maia-dao/index.js | 90 +- projects/makiswap/abi.json | 4 - projects/makiswap/index.js | 105 +- projects/meowfinance/index.js | 186 +--- projects/mero/index.js | 47 +- projects/metapoly/index.js | 54 +- projects/metavault.trade/index.js | 24 +- projects/metf-finance/index.js | 114 +-- projects/milkomeda-djed/config.json | 10 - projects/milkomeda-djed/index.js | 18 +- projects/miningtycoon/index.js | 66 +- projects/mover/abi.json | 4 - projects/mover/baseLedgerPoolAbi.json | 3 - projects/mover/index.js | 46 +- projects/mover/savingsPlusPoolAbi.json | 3 - projects/mover/savingsPoolAbi.json | 3 - projects/oddz/index.js | 125 +-- projects/opendao/abi.json | 10 - projects/opendao/index.js | 150 +-- projects/snowflake/index.js | 48 +- projects/solidex/index.js | 57 +- projects/stabl-v2/index.js | 36 +- projects/stabl/index.js | 11 +- projects/xWeowns/index.js | 22 - projects/xrune/abi.json | 5 - projects/xrune/index.js | 48 +- projects/yetiFinance/index.js | 199 +--- projects/yfdai/index.js | 40 +- projects/yieldwolf/index.js | 126 +-- projects/zencha/index.js | 51 +- projects/zest-protocol/index.js | 174 +--- projects/zombi/index.js | 26 +- projects/zombi/zombi.js | 92 -- projects/zombie-network/index.js | 45 +- 43 files changed, 326 insertions(+), 3085 deletions(-) delete mode 100644 projects/arbirise-finance/abis/arbiStakerERC20.json delete mode 100644 projects/arbirise-finance/contracts.json delete mode 100644 projects/arbirise-finance/getPrice.js delete mode 100644 projects/makiswap/abi.json delete mode 100644 projects/milkomeda-djed/config.json delete mode 100644 projects/mover/abi.json delete mode 100644 projects/mover/baseLedgerPoolAbi.json delete mode 100644 projects/mover/savingsPlusPoolAbi.json delete mode 100644 projects/mover/savingsPoolAbi.json delete mode 100644 projects/opendao/abi.json delete mode 100644 projects/xrune/abi.json delete mode 100644 projects/zombi/zombi.js diff --git a/projects/arbicheems/index.js b/projects/arbicheems/index.js index b1e6962476..8ccb415a59 100644 --- a/projects/arbicheems/index.js +++ b/projects/arbicheems/index.js @@ -1,7 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { stakingUnknownPricedLP } = require("../helper/staking"); -const { pool2Exports } = require("../helper/pool2"); +const { staking } = require("../helper/staking"); +const { pool2 } = require("../helper/pool2"); +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs'); const cheems = "0x75a2f30929C539E7d4eE033c9331b89F879c0cf7"; const stakingContract = "0xaaCcB989FE1084c6935f09aE4BBD49AfF58Bdb94"; @@ -13,50 +13,11 @@ const ethPool = "0xd495Beb0011e3DFEC0C93376f5216C1C3dD01C23"; const cheemsEthPool = "0x1382EcDf09507ba87022c79312DfAfb2A5063d73"; const cheemsEthSLP = "0xce786f1f3d3025fe4a64e37d28fa76311ff5253f"; -async function tvl(timestamp, block, chainBlocks) { - let balances = {}; - - const ethBal = ( - await sdk.api.eth.getBalance({ - target: ethPool, - block: chainBlocks.arbitrum, - chain: "arbitrum", - }) - ).output; - sdk.util.sumSingleBalance( - balances, - ADDRESSES.ethereum.WETH, - ethBal - ); - - const mimBal = ( - await sdk.api.erc20.balanceOf({ - target: mim, - owner: mimPool, - block: chainBlocks.arbitrum, - chain: "arbitrum", - }) - ).output; - sdk.util.sumSingleBalance(balances, `arbitrum:${mim}`, mimBal); - - return balances; -} - module.exports = { + deadFrom: '2022-02-22', arbitrum: { - tvl, - staking: stakingUnknownPricedLP( - stakingContract, - cheems, - "arbitrum", - cheemsEthSLP, - (addr) => `arbitrum:${addr}` - ), - pool2: pool2Exports( - cheemsEthPool, - [cheemsEthSLP], - "arbitrum", - (addr) => `arbitrum:${addr}` - ), + tvl: sumTokensExport({ tokensAndOwners: [[nullAddress, ethPool], [mim, mimPool]] }), + staking: staking(stakingContract, cheems,), + pool2: pool2(cheemsEthPool, [cheemsEthSLP],), }, }; diff --git a/projects/arbinyan/index.js b/projects/arbinyan/index.js index 57b4c5a468..f8a6bd5f6f 100644 --- a/projects/arbinyan/index.js +++ b/projects/arbinyan/index.js @@ -1,83 +1,21 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); +const { pool2 } = require("../helper/pool2"); const { staking } = require("../helper/staking"); -const BigNumber = require("bignumber.js"); +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs'); const stakingETHContract = "0x9F7968de728aC7A6769141F63dCA03FD8b03A76F"; -const WETH = ADDRESSES.ethereum.WETH; const stakingNYANContract = "0x32e5594F14de658b0d577D6560fA0d9C6F1aa724"; const NYAN = "0xed3fb761414da74b74f33e5c5a1f78104b188dfc"; const stakingPool2Contract = "0x62FF5Be795262999fc1EbaC29277575031d2dA2C"; -const NYAN_WETH_SLP = "0x70Df9Dd83be2a9F9Fcc58Dd7C00d032d007b7859"; -const WETH_arb = ADDRESSES.arbitrum.WETH; - -async function pool2(time, ethBlock, chainBlocks) { - const balances = {}; - - const balance_slp = ( - await sdk.api.abi.call({ - abi: 'erc20:balanceOf', - target: NYAN_WETH_SLP, - params: stakingPool2Contract, - chain: "arbitrum", - block: chainBlocks["arbitrum"], - }) - ).output; - - const totalSupply_slp = ( - await sdk.api.erc20.totalSupply({ - target: NYAN_WETH_SLP, - chain: "arbitrum", - block: chainBlocks["arbitrum"], - }) - ).output; - - const underlyingsBalance = ( - await sdk.api.abi.multiCall({ - calls: [NYAN, WETH_arb].map((token) => ({ - target: token, - params: NYAN_WETH_SLP, - })), - abi: 'erc20:balanceOf', - chain: "arbitrum", - block: chainBlocks["arbitrum"], - }) - ).output; - - underlyingsBalance.forEach((call) => { - const underlyingSetBalance = BigNumber(call.output) - .times(balance_slp) - .div(totalSupply_slp); - - sdk.util.sumSingleBalance( - balances, - `arbitrum:${call.input.target}`, - underlyingSetBalance.toFixed(0) - ); - }); - - return balances; -} - -async function arbTvl(time, _ethBlock, {arbitrum: block}) { - const eth = await sdk.api.eth.getBalance({ - target: stakingETHContract, - block, - chain: "arbitrum", - }); - return { - [WETH]: eth.output, - }; -} +const NYAN_WETH_SLP = "0x70df9dd83be2a9f9fcc58dd7c00d032d007b7859"; module.exports = { misrepresentedTokens: true, arbitrum: { staking: staking(stakingNYANContract, NYAN), - pool2: pool2, - tvl: arbTvl, + pool2: pool2(stakingPool2Contract, NYAN_WETH_SLP), + tvl: sumTokensExport({ owner: stakingETHContract, tokens: [nullAddress] }), }, methodology: "Counts as TVL the ETH asset deposited through StakingETH Contract, and we count Staking and Pool2 parts in the same way", diff --git a/projects/arbirise-finance/abis/arbiStakerERC20.json b/projects/arbirise-finance/abis/arbiStakerERC20.json deleted file mode 100644 index c9224c60fa..0000000000 --- a/projects/arbirise-finance/abis/arbiStakerERC20.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "stakedTokenTotal": "function stakedTokenTotal(address) view returns (uint256)", - "getNumTokensStaked": "uint256:getNumTokensStaked", - "getTokenStakedAt": "function getTokenStakedAt(uint256 index) view returns (address token)" -} \ No newline at end of file diff --git a/projects/arbirise-finance/contracts.json b/projects/arbirise-finance/contracts.json deleted file mode 100644 index b402c911dd..0000000000 --- a/projects/arbirise-finance/contracts.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "arbiStaker": "0x6a894bd1A5476Bdc52B709623B8751e244E6e975", - "sushiFactoryAddress": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - "weth": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", - "usdc": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", - "usdcWethPair": "0x905dfCD5649217c42684f23958568e533C711Aa3" -} diff --git a/projects/arbirise-finance/getPrice.js b/projects/arbirise-finance/getPrice.js deleted file mode 100644 index b3cd1bfeda..0000000000 --- a/projects/arbirise-finance/getPrice.js +++ /dev/null @@ -1,146 +0,0 @@ -const sdk = require("@defillama/sdk"); -const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)'; -const token0 = "address:token0"; -const contracts = require("./contracts.json"); -const { default: BigNumber } = require("bignumber.js"); - -const getETHPrice = async (block) => { - const reserves = ( - await sdk.api.abi.call({ - target: contracts["usdcWethPair"], - abi: getReserves, - block: block, - chain: "arbitrum", - }) - ).output; - - const _token0 = ( - await sdk.api.abi.call({ - target: contracts["usdcWethPair"], - abi: token0, - block: block, - chain: "arbitrum", - }) - ).output; - - const WETHReserve = new BigNumber( - _token0.toLowerCase() === contracts["weth"].toLowerCase() - ? reserves._reserve0 - : reserves._reserve1 - ).div(1e18); - const USDCReserve = new BigNumber( - _token0.toLowerCase() === contracts["usdc"].toLowerCase() - ? reserves._reserve0 - : reserves._reserve1 - ).div(1e6); - - return new BigNumber(USDCReserve).div(new BigNumber(WETHReserve)); -}; - -const getPrice = async (tokenAddress, block) => { - try { - const ETHPrice = await getETHPrice(block); - - const symbol = ( - await sdk.api.abi.call({ - target: tokenAddress, - abi: "erc20:symbol", - chain: "arbitrum", - block - }) - ).output; - - const isLp = symbol === "SLP"; - - if (tokenAddress.toLowerCase() === contracts["weth"].toLowerCase()) { - return { price: ETHPrice, decimals: 18 }; - } - - const pairAddress = isLp - ? tokenAddress - : ( - await sdk.api.abi.call({ - target: contracts["sushiFactoryAddress"], - abi: 'function getPair(address, address) view returns (address)', - params: [tokenAddress, contracts["weth"]], - block: block, - chain: "arbitrum", - }) - ).output; - - const reserves = ( - await sdk.api.abi.call({ - target: pairAddress, - abi: getReserves, - block: block, - chain: "arbitrum", - }) - ).output; - - const _token0 = ( - await sdk.api.abi.call({ - target: pairAddress, - abi: token0, - block: block, - chain: "arbitrum", - }) - ).output; - - const decimals = ( - await sdk.api.abi.call({ - target: tokenAddress, - abi: "erc20:decimals", - chain: "arbitrum", - block - }) - ).output; - - const WETHReserve = new BigNumber( - _token0.toLowerCase() === contracts["weth"].toLowerCase() - ? reserves._reserve0 - : reserves._reserve1 - ).div(1e18); - const tokenReserve = new BigNumber( - _token0.toLowerCase() === tokenAddress.toLowerCase() - ? reserves._reserve0 - : reserves._reserve1 - ).div(`1e${decimals}`); - - if (isLp) { - const totalSupply = ( - await sdk.api.abi.call({ - target: tokenAddress, - abi: "erc20:totalSupply", - chain: "arbitrum", - block - }) - ).output; - - return { - price: new BigNumber(WETHReserve) - .times(ETHPrice) - .times(2) - .div(new BigNumber(totalSupply).div(`1e${decimals}`)), - decimals, - }; - } - - const priceInETH = new BigNumber(tokenReserve).div( - new BigNumber(WETHReserve) - ); - - return { - price: ETHPrice.div(priceInETH), - decimals, - }; - } catch (e) { - return { - price: new BigNumber(0), - decimals: 0, - }; - } -}; - -module.exports = { - getPrice, -}; diff --git a/projects/arbirise-finance/index.js b/projects/arbirise-finance/index.js index d7f66d495b..d6ef6d37e0 100644 --- a/projects/arbirise-finance/index.js +++ b/projects/arbirise-finance/index.js @@ -1,65 +1,18 @@ -const sdk = require("@defillama/sdk"); -const arbiStakerERC20 = require("./abis/arbiStakerERC20.json"); -const contracts = require("./contracts.json"); -const { default: BigNumber } = require("bignumber.js"); -const { getPrice } = require("./getPrice"); - -async function tvl(time, _ethBlock, {arbitrum: block}) { - - const nbOfPrograms = ( - await sdk.api.abi.call({ - block, - target: contracts["arbiStaker"], - abi: arbiStakerERC20["getNumTokensStaked"], - chain: "arbitrum", - }) - ).output; - - const stakingTokens = ( - await sdk.api.abi.multiCall({ - block, - abi: arbiStakerERC20["getTokenStakedAt"], - calls: [...Array(+nbOfPrograms).keys()].map((index) => ({ - target: contracts["arbiStaker"], - params: index, - })), - chain: "arbitrum", - }) - ).output.map((o) => o.output); - - const stakedByProgram = ( - await sdk.api.abi.multiCall({ - block, - abi: arbiStakerERC20["stakedTokenTotal"], - calls: stakingTokens.map((token) => ({ - target: contracts["arbiStaker"], - params: token, - })), - chain: "arbitrum", - }) - ).output; - - let balances = {}; - - for (let i = 0; i < stakedByProgram.length; i++) { - const { price, decimals } = await getPrice( - stakedByProgram[i].input.params[0], - block - ); - const staked = new BigNumber(stakedByProgram[i].output).div( - `1e${decimals}` - ); - // Adding USDC decimals (6)again here `price.times(staked).times(1e6)` because `sumSingleBalance` will remove them - const rewardProgramTVL = price.times(staked).times(1e6).toFixed(0); - sdk.util.sumSingleBalance( - balances, - `arbitrum:${contracts["usdc"]}`, - rewardProgramTVL - ); - } - - return balances; +const abi = { + "stakedTokenTotal": "function stakedTokenTotal(address) view returns (uint256)", + "getNumTokensStaked": "uint256:getNumTokensStaked", + "getTokenStakedAt": "function getTokenStakedAt(uint256 index) view returns (address token)" } +const { sumTokens2 } = require("../helper/unwrapLPs"); + +async function tvl(api) { + const staker = '0x6a894bd1A5476Bdc52B709623B8751e244E6e975'; + const tokens = await api.fetchList({ lengthAbi: abi.getNumTokensStaked, itemAbi: abi.getTokenStakedAt, target: staker}) + const bals = await api.multiCall({ abi: abi.stakedTokenTotal, calls: tokens, target: staker}) + api.add(tokens, bals) + return sumTokens2({ api, resolveLP: true}) +} + module.exports = { methodology: diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 90e0b74515..bef1381afd 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -56,6 +56,9 @@ const fixBalancesTokens = { oasis: { '0x0000000000000000000000000000000000000000': { coingeckoId: 'oasis-network', decimals: 18 }, }, + heco: { + '0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f': { coingeckoId: 'huobi-token', decimals: 18 }, + }, base: { '0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c': { coingeckoId: 'rocket-pool-eth', decimals: 18 }, }, diff --git a/projects/macaron/config.js b/projects/macaron/config.js index 15ca85d9a0..af0703676f 100644 --- a/projects/macaron/config.js +++ b/projects/macaron/config.js @@ -1,1011 +1,250 @@ -const ADDRESSES = require('../helper/coreAssets.json') const vaults_bsc = [ { - "sousId": 0, "stakingToken": { "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" + "address": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", }, - "earningToken": { - "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" - }, - "contractAddress": { - "56": "0xCd59d44E94Dec10Bb666f50f98cD0B1593dC3a3A", - "97": "" - }, - "masterchef": { - "56": "0x73feaa1eE314F8c655E354234017bE2193C9E24E", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "10", - "sortOrder": 1, - "isFinished": true + "contractAddress": "0xCd59d44E94Dec10Bb666f50f98cD0B1593dC3a3A", + "masterchef": "0x73feaa1eE314F8c655E354234017bE2193C9E24E", }, { - "sousId": 1, "stakingToken": { "symbol": "BAKE", - "address": { - "56": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5", - "97": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5" - }, - "decimals": 18, - "projectLink": "https://www.bakeryswap.org/" - }, - "earningToken": { - "symbol": "BAKE", - "address": { - "56": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5", - "97": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5" - }, - "decimals": 18, - "projectLink": "https://www.bakeryswap.org/" + "address": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5", }, - "contractAddress": { - "56": "0xBB7ac3eB02c6d012cc8e2d916678De8843Eb8A56", - "97": "" - }, - "masterchef": { - "56": "0x20eC291bB8459b6145317E7126532CE7EcE5056f", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.39375", - "sortOrder": 1, - "isFinished": true + "contractAddress": "0xBB7ac3eB02c6d012cc8e2d916678De8843Eb8A56", + "masterchef": "0x20eC291bB8459b6145317E7126532CE7EcE5056f", }, { - "sousId": 2, "stakingToken": { "symbol": "BANANA", - "address": { - "56": "0x603c7f932ed1fc6575303d8fb018fdcbb0f39a95", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apeswap.finance/" - }, - "earningToken": { - "symbol": "BANANA", - "address": { - "56": "0x603c7f932ed1fc6575303d8fb018fdcbb0f39a95", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apeswap.finance/" - }, - "contractAddress": { - "56": "0xd474366F6c80230507481495F3C1490e62E3093F", - "97": "" - }, - "masterchef": { - "56": "0x5c8d727b265dbafaba67e050f2f739caeeb4a6f9", - "97": "" + "address": "0x603c7f932ed1fc6575303d8fb018fdcbb0f39a95", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "2.5", - "sortOrder": 1, - "isFinished": false + "contractAddress": "0xd474366F6c80230507481495F3C1490e62E3093F", + "masterchef": "0x5c8d727b265dbafaba67e050f2f739caeeb4a6f9", }, { - "sousId": 3, "stakingToken": { "symbol": "BAKE", - "address": { - "56": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5", - "97": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5" - }, - "decimals": 18, - "projectLink": "https://www.bakeryswap.org/" + "address": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5", }, - "earningToken": { - "symbol": "BAKE", - "address": { - "56": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5", - "97": "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5" - }, - "decimals": 18, - "projectLink": "https://www.bakeryswap.org/" - }, - "contractAddress": { - "56": "0x6dAc44A858Cb51e0d4d663A6589D2535A746607A", - "97": "" - }, - "masterchef": { - "56": "0x6a8DbBfbB5a57d07D14E63E757FB80B4a7494f81", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.025315565", - "sortOrder": 1, - "isFinished": false + "contractAddress": "0x6dAc44A858Cb51e0d4d663A6589D2535A746607A", + "masterchef": "0x6a8DbBfbB5a57d07D14E63E757FB80B4a7494f81", } ] const choco_pools_bsc = [ { - "sousId": 0, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "contractAddress": { - "56": "0xFcDE390bF7a8B8614EC11fa8bde7565b3E64fe0b", - "97": "0x09B7e4A3E9d3c5d5Da59B2F371ABC3a81Ff6c443" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0715", - "sortOrder": 1, - "isFinished": false + "contractAddress": "0xFcDE390bF7a8B8614EC11fa8bde7565b3E64fe0b", }, { - "sousId": 1, "stakingToken": { "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" - }, - "earningToken": { - "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", }, - "contractAddress": { - "56": "0xCded81aa5Ab3A433CadF77Fd5aC8B6fD973906e1", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0022", - "sortOrder": 3, - "isFinished": true, + "contractAddress": "0xCded81aa5Ab3A433CadF77Fd5aC8B6fD973906e1", "isCLP": true, - "syrupAddresses": { - "56": "0x009cF7bC57584b7998236eff51b98A168DceA9B0", - "97": "" - } + "syrupAddresses": "0x009cF7bC57584b7998236eff51b98A168DceA9B0", }, { - "sousId": 3, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "earningToken": { - "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" - }, - "contractAddress": { - "56": "0xF69bdcDB577F98753d4890Cc5aCfF3BE00177584", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.002", - "sortOrder": 4, - "isFinished": false, - "isCLP": false + "contractAddress": "0xF69bdcDB577F98753d4890Cc5aCfF3BE00177584", }, { - "sousId": 4, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "TAPE", - "address": { - "56": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apetools.co/" - }, - "contractAddress": { - "56": "0x7DB34B681c759918079C67EeF08868225F34fbcB", - "97": "" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.810185185", - "sortOrder": 5, - "isFinished": false, - "isCLP": false + "contractAddress": "0x7DB34B681c759918079C67EeF08868225F34fbcB", }, { - "sousId": 5, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "TBAKE", - "address": { - "56": "0x26d6e280f9687c463420908740ae59f712419147", - "97": "" - }, - "decimals": 18, - "projectLink": "https://bakerytools.io/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "contractAddress": { - "56": "0x13ED683DDf483d1f0bd2AE02b01D4d1D451D6c5b", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "1.099", - "sortOrder": 6, - "isFinished": false, - "isCLP": false + "contractAddress": "0x13ED683DDf483d1f0bd2AE02b01D4d1D451D6c5b", }, { - "sousId": 6, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "BREW", - "address": { - "56": "0x790Be81C3cA0e53974bE2688cDb954732C9862e1", - "97": "" - }, - "decimals": 18, - "projectLink": "https://cafeswap.finance/" - }, - "contractAddress": { - "56": "0x0f819C8E6A7c0F0906CBc84b9b1e6642f9634E61", - "97": "" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.00498", - "sortOrder": 5, - "isFinished": false, - "isCLP": false + "contractAddress": "0x0f819C8E6A7c0F0906CBc84b9b1e6642f9634E61", }, { - "sousId": 7, "stakingToken": { "symbol": "TAPE", - "address": { - "56": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apetools.co/" - }, - "earningToken": { - "symbol": "TAPE", - "address": { - "56": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apetools.co/" + "address": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", }, - "contractAddress": { - "56": "0x903A20CDbAC174250eAcc7437720929f0dE97B99", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.950347", - "sortOrder": 7, - "isFinished": false, - "isCLP": false + "contractAddress": "0x903A20CDbAC174250eAcc7437720929f0dE97B99", }, { - "sousId": 8, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "Helmet", - "address": { - "56": "0x948d2a81086a075b3130bac19e4c6dee1d2e3fe8", - "97": "" - }, - "decimals": 18, - "projectLink": "https://www.helmet.insure/" - }, - "contractAddress": { - "56": "0x82cF07a989835b68260989F13Bc853f8fe48ad04", - "97": "" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.06510416", - "sortOrder": 3, - "isFinished": false, - "isCLP": false + "contractAddress": "0x82cF07a989835b68260989F13Bc853f8fe48ad04", }, { - "sousId": 9, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "earningToken": { - "symbol": "HOTCROSS", - "address": { - "56": "0x4FA7163E153419E0E1064e418dd7A99314Ed27b6", - "97": "" - }, - "decimals": 18, - "projectLink": "https://www.hotcross.com/" - }, - "contractAddress": { - "56": "0xc8De98F603af53a5D52AF6AA153d9e15b0002B2c", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0992476", - "sortOrder": 3, - "isFinished": false, - "isCLP": false + "contractAddress": "0xc8De98F603af53a5D52AF6AA153d9e15b0002B2c", }, { - "sousId": 10, "stakingToken": { "symbol": "SMG", - "address": { - "56": "0x6bfd576220e8444ca4cc5f89efbd7f02a4c94c16", - "97": "" - }, - "decimals": 8, - "projectLink": "https://smaugs.com/" + "address": "0x6bfd576220e8444ca4cc5f89efbd7f02a4c94c16", }, - "earningToken": { - "symbol": "SMG", - "address": { - "56": "0x6bfd576220e8444ca4cc5f89efbd7f02a4c94c16", - "97": "" - }, - "decimals": 8, - "projectLink": "https://smaugs.com/" - }, - "contractAddress": { - "56": "0xf3D514263239672455306D188DD5f045E61deD03", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.138", - "sortOrder": 3, - "isFinished": true, - "isCLP": false + "contractAddress": "0xf3D514263239672455306D188DD5f045E61deD03", }, { - "sousId": 11, "stakingToken": { "symbol": "SMG", - "address": { - "56": "0x6bfd576220e8444ca4cc5f89efbd7f02a4c94c16", - "97": "" - }, - "decimals": 8, - "projectLink": "https://smaugs.com/" - }, - "earningToken": { - "symbol": "SMG", - "address": { - "56": "0x6bfd576220e8444ca4cc5f89efbd7f02a4c94c16", - "97": "" - }, - "decimals": 8, - "projectLink": "https://smaugs.com/" - }, - "contractAddress": { - "56": "0xC85C50988AEC8d260853443B345CAE63B7432b7A", - "97": "" + "address": "0x6bfd576220e8444ca4cc5f89efbd7f02a4c94c16", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.138", - "sortOrder": 3, - "isFinished": false, - "isCLP": false + "contractAddress": "0xC85C50988AEC8d260853443B345CAE63B7432b7A", }, { - "sousId": 12, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "earningToken": { - "symbol": "DUEL", - "address": { - "56": "0x297817ce1a8de777e7ddbed86c3b7f9dc9349f2c", - "97": "" - }, - "decimals": 18, - "projectLink": "https://www.duel.network/" - }, - "contractAddress": { - "56": "0xF60EDbF7D95E79878f4d448F0CA5622479eB8790", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.11574", - "sortOrder": 2, - "isFinished": false, - "isCLP": false + "contractAddress": "0xF60EDbF7D95E79878f4d448F0CA5622479eB8790", }, { - "sousId": 13, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" - }, - "contractAddress": { - "56": "0x99d3334CC9dF44Fb2788C2161FB296fb6Cf14a57", - "97": "" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.001", - "sortOrder": 3, - "isFinished": false, - "isCLP": false + "contractAddress": "0x99d3334CC9dF44Fb2788C2161FB296fb6Cf14a57", }, { - "sousId": 14, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "wBNB", - "address": { - "56": ADDRESSES.bsc.WBNB, - "97": "0xae13d989dac2f0debff460ac112a837c89baa7cd" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "contractAddress": { - "56": "0xD80bdF70b17bA4fDd0383171623D782D00c8be2E", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.000011574", - "sortOrder": 3, - "isFinished": false, - "isCLP": false, - "isLockPool": true + "contractAddress": "0xD80bdF70b17bA4fDd0383171623D782D00c8be2E", }, { - "sousId": 15, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "contractAddress": { - "56": "0x28D0e8f18FA73824C91ca77e28727d79b815aEF1", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0008", - "sortOrder": 3, - "isFinished": false, - "isCLP": false, - "isLockPool": true + "contractAddress": "0x28D0e8f18FA73824C91ca77e28727d79b815aEF1", }, { - "sousId": 16, "stakingToken": { "symbol": "TAPE", - "address": { - "56": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apetools.co/" - }, - "earningToken": { - "symbol": "TAPE", - "address": { - "56": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apetools.co/" + "address": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", }, - "contractAddress": { - "56": "0xa71aFD72A7ed03d2ad9D08A20cdadf17b067f33a", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.81", - "sortOrder": 6, - "isFinished": false, - "isCLP": false + "contractAddress": "0xa71aFD72A7ed03d2ad9D08A20cdadf17b067f33a", }, { - "sousId": 17, "stakingToken": { "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "TAPE", - "address": { - "56": "0xf63400ee0420ce5b1ebdee0c942d7de1c734a41f", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apetools.co/" + "address": "0xacb2d47827c9813ae26de80965845d80935afd0b", }, - "contractAddress": { - "56": "0x765c1a0b22130d0e8a61dbb125c1eec5710383f1", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.81", - "sortOrder": 3, - "isFinished": false, - "isCLP": false, - "isLockPool": true + "contractAddress": "0x765c1a0b22130d0e8a61dbb125c1eec5710383f1", }, { - "sousId": 18, "stakingToken": { "symbol": "BANANA", - "address": { - "56": "0x603c7f932ed1fc6575303d8fb018fdcbb0f39a95", - "97": "" - }, - "decimals": 18, - "projectLink": "https://apeswap.finance/" - }, - "earningToken": { - "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0x603c7f932ed1fc6575303d8fb018fdcbb0f39a95", }, - "contractAddress": { - "56": "0x4f0a992B465C1D8482b4E2a0861B6cAEE8B3171f", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "", - "sortOrder": 4, - "isFinished": false, - "isCLP": false, - "isLockPool": false, - "isBBChef": true + "contractAddress": "0x4f0a992B465C1D8482b4E2a0861B6cAEE8B3171f", }, { - "sousId": 19, "stakingToken": { "symbol": "BSW", - "address": { - "56": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", - "97": "" - }, - "decimals": 18, - "projectLink": "https://biswap.org/" - }, - "earningToken": { - "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", }, - "contractAddress": { - "56": "0x2a1Bf8e04633e397207d63F234d281fEf781B6F5", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "", - "sortOrder": 4, - "isFinished": false, - "isCLP": false, - "isLockPool": false, - "isBBChef": true + "contractAddress": "0x2a1Bf8e04633e397207d63F234d281fEf781B6F5", }, { - "sousId": 20, "stakingToken": { "symbol": "CAKE", - "address": { - "56": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "97": "0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe" - }, - "decimals": 18, - "projectLink": "https://pancakeswap.finance/" + "address": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", }, - "earningToken": { - "symbol": "MCRN", - "address": { - "56": "0xacb2d47827c9813ae26de80965845d80935afd0b", - "97": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "contractAddress": { - "56": "0x7C454456fc9E86EA1cF1e524FF8B8EbA613189E5", - "97": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "", - "sortOrder": 1, - "isFinished": false, - "isCLP": false, - "isLockPool": false, - "isBBChef": true + "contractAddress": "0x7C454456fc9E86EA1cF1e524FF8B8EbA613189E5", } ] const choco_pools_polygon = [ { - "sousId": 0, "stakingToken": { "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "contractAddress": { - "137": "0xC200cE4853d97e5f11320Bb8ee17F4D895f5e7BB", - "80001": "0xcE702936B63B6C9c3E059b315807BbE6212F1647" + "address": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0085", - "sortOrder": 1, - "isFinished": false + "contractAddress": "0xC200cE4853d97e5f11320Bb8ee17F4D895f5e7BB", }, { - "sousId": 1, "stakingToken": { "symbol": "QUICK", - "address": { - "137": "0x831753dd7087cac61ab5644b308642cc1c33dc13", - "80001": "" - }, - "decimals": 18, - "projectLink": "https://quickswap.exchange/" + "address": "0x831753dd7087cac61ab5644b308642cc1c33dc13", }, - "earningToken": { - "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "contractAddress": { - "137": "0xDeC7950840a32010410dcfFDC735911151604Ba5", - "80001": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.002", - "sortOrder": 2, - "isFinished": true, + "contractAddress": "0xDeC7950840a32010410dcfFDC735911151604Ba5", "isCLP": true, - "syrupAddresses": { - "137": "0xf28164A485B0B2C90639E47b0f377b4a438a16B1", - "80001": "" - } + "syrupAddresses": "0xf28164A485B0B2C90639E47b0f377b4a438a16B1", }, { - "sousId": 2, "stakingToken": { "symbol": "QUICK", - "address": { - "137": "0x831753dd7087cac61ab5644b308642cc1c33dc13", - "80001": "" - }, - "decimals": 18, - "projectLink": "https://quickswap.exchange/" - }, - "earningToken": { - "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "contractAddress": { - "137": "0x4b68bA327Cad4d8C4d0Bc783d686d08CFAa5C5D3", - "80001": "" + "address": "0x831753dd7087cac61ab5644b308642cc1c33dc13", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.002", - "sortOrder": 3, - "isFinished": false, + "contractAddress": "0x4b68bA327Cad4d8C4d0Bc783d686d08CFAa5C5D3", "isCLP": true, - "syrupAddresses": { - "137": "0xf28164A485B0B2C90639E47b0f377b4a438a16B1", - "80001": "" - } + "syrupAddresses": "0xf28164A485B0B2C90639E47b0f377b4a438a16B1", }, { - "sousId": 3, "stakingToken": { "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", }, - "earningToken": { - "symbol": "QUICK", - "address": { - "137": "0x831753dd7087cac61ab5644b308642cc1c33dc13", - "80001": "" - }, - "decimals": 18, - "projectLink": "https://quickswap.exchange/" - }, - "contractAddress": { - "137": "0xdb5640313fc4c958D3Fb2CF546d57dF142882acf", - "80001": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0000125", - "sortOrder": 4, - "isFinished": false, - "isCLP": false + "contractAddress": "0xdb5640313fc4c958D3Fb2CF546d57dF142882acf", }, { - "sousId": 4, "stakingToken": { "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "earningToken": { - "symbol": "QUICK", - "address": { - "137": "0x831753dd7087cac61ab5644b308642cc1c33dc13", - "80001": "" - }, - "decimals": 18, - "projectLink": "https://quickswap.exchange/" - }, - "contractAddress": { - "137": "0x337CC5daBaf1f874ACec0031d3d682CAF6DD2FC8", - "80001": "" + "address": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.0000125", - "sortOrder": 3, - "isFinished": false, - "isCLP": false, - "isLockPool": true + "contractAddress": "0x337CC5daBaf1f874ACec0031d3d682CAF6DD2FC8", }, { - "sousId": 5, "stakingToken": { "symbol": "MCRN", - "address": { - "137": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", - "80001": "0xfb53da50e544b06ecdc6827ab0df60a3b3801021" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" + "address": "0xba25b552c8a098afdf276324c32c71fe28e0ad40", }, - "earningToken": { - "symbol": "wMATIC", - "address": { - "137": ADDRESSES.polygon.WMATIC_2, - "80001": "" - }, - "decimals": 18, - "projectLink": "https://macaronswap.finance/" - }, - "contractAddress": { - "137": "0xA7661a7aeAF507a7782C230a45a002519cFC158C", - "80001": "" - }, - "poolCategory": "Core", - "harvest": true, - "tokenPerBlock": "0.00195216", - "sortOrder": 2, - "isFinished": false, - "isCLP": false, - "isLockPool": true + "contractAddress": "0xA7661a7aeAF507a7782C230a45a002519cFC158C", } ] - module.exports = { bsc: { masterchef: '0xFcDE390bF7a8B8614EC11fa8bde7565b3E64fe0b', token: '0xacb2d47827c9813ae26de80965845d80935afd0b'.toLowerCase(), chocochef: 'https://api.macaronswap.finance/chocofalls?chainId=56', pools: choco_pools_bsc, - masterchefPools: 'https://api.macaronswap.finance/magicboxes?chainId=56', - vaults: 'https://api.macaronswap.finance/boostpools', vaults_json: vaults_bsc, LPs: [ '0xe8D5d81dac092Ae61d097f84EFE230759BF2e522'.toLowerCase(), '0xc8f900cd8052862a8a5abf9278ad088611b2bd04'.toLowerCase(), ], - erc20s: [ - //MCRN - // "0xacb2d47827c9813ae26de80965845d80935afd0b", - //BANANA - "0x603c7f932ed1fc6575303d8fb018fdcbb0f39a95", - //CAKE - "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", - - ], - treasury: "0x67f1D48a8991009e0b092e9C34ca16f7d6072ec1", - chainId: 56, }, polygon: { masterchef: '0xC200cE4853d97e5f11320Bb8ee17F4D895f5e7BB', token: '0xba25b552c8a098afdf276324c32c71fe28e0ad40'.toLowerCase(), - chocochef: 'https://api.macaronswap.finance/chocofalls?chainId=137', pools: choco_pools_polygon, LPs: [ '0xfc53defcF4e21B868DaCEAA6350D507493F57110'.toLowerCase(), '0xde84c8f0562eB56A5fc8f07819cEF1FAf9Df3EBc'.toLowerCase(), ], - masterchefPools: 'https://api.macaronswap.finance/magicboxes?chainId=137', - chainId: 137, } } diff --git a/projects/macaron/index.js b/projects/macaron/index.js index c1d7c566b9..58c4312444 100644 --- a/projects/macaron/index.js +++ b/projects/macaron/index.js @@ -1,52 +1,31 @@ const abi = require("./abi.json"); const config = require("./config"); -const { sumTokens, unwrapUniswapLPs, } = require("../helper/unwrapLPs"); -const sdk = require("@defillama/sdk"); - -const { getChainTransform, } = require("../helper/portedTokens"); - -module.exports = {} +const { sumTokensExport, sumTokens2, } = require("../helper/unwrapLPs"); function setChainTVL(chain) { - const { masterchef, pools, vaults_json, chainId, erc20s, LPs, token, } = config[chain] - let getTvl - - async function getAllTVL(ts, _block, chainBlocks) { - const transform = await getChainTransform(chain) - const block = chainBlocks[chain] - const balances = { - tvl: {}, - staking: {}, - pool2: {}, - } - - const lengthOfPool = ( - await sdk.api.abi.call({ - abi: abi.poolLength, - target: masterchef, - chain, block, - }) - ).output - - const lpPositionCalls = []; - - for (let index = 0; index < lengthOfPool; index++) - lpPositionCalls.push({ params: [index] }) - - const { output: mcPools } = await sdk.api.abi.multiCall({ - target: masterchef, calls: lpPositionCalls, block, chain, abi: abi.poolInfo + const { masterchef, pools, vaults_json, LPs, token, } = config[chain] + const stakingOwners = [masterchef] + const pool2Owners = [masterchef] + if (vaults_json) { + vaults_json.forEach(pool => { + const symbol = pool.stakingToken?.symbol?.toLowerCase() + const addr = pool.stakingToken.address.toLowerCase() + if (symbol === 'mcrn') + stakingOwners.push(addr) + else if (symbol.includes('mcrn') && symbol.endsWith('lp')) { + LPs.push(addr) + pool2Owners.push(pool.contractAddress.toLowerCase()) + } }) + } - const masterchefPools = [] + const blacklistedTokens = [...LPs, token] + async function tvl(api) { + const tokensAndOwners = [] - mcPools.forEach(({ output }) => { - masterchefPools.push(output) - }) + const masterchefPools = await api.fetchList({ target: masterchef, lengthAbi: abi.poolLength, itemAbi: abi.poolInfo }) - const toaTvl = [] const toaSyrup = [] - const toaPool2 = [] - const toaStaking = [] const syrupMapping = {} // handle masterchef @@ -58,12 +37,7 @@ function setChainTVL(chain) { syrupMapping[syrup] = addr return; } - if (addr === token) - toaStaking.push([addr, masterchef]) - else if (LPs.includes(addr)) - toaPool2.push([addr, masterchef]) - else - toaTvl.push([addr, masterchef]) + tokensAndOwners.push([addr, masterchef]) }) // handle chocochef and boost pools @@ -71,52 +45,27 @@ function setChainTVL(chain) { pools.push(...vaults_json) pools.forEach(pool => { - const symbol = pool.stakingToken?.symbol?.toLowerCase() - const masterchef = pool.contractAddress[chainId].toLowerCase() - const addr = pool.stakingToken.address[chainId].toLowerCase() - if (symbol === 'mcrn') - toaStaking.push([addr, masterchef]) - else if (symbol.includes('mcrn') && symbol.endsWith('lp')) - toaPool2.push([addr, masterchef]) - else - toaTvl.push([addr, masterchef]) + const masterchef = pool.contractAddress + const addr = pool.stakingToken.address + tokensAndOwners.push([addr, masterchef]) }) const balanceCalls = toaSyrup.map(([token, address]) => ({ target: token, params: [address] })) - const { output: syrupBalances } = await sdk.api.abi.multiCall({ - abi: 'erc20:balanceOf', calls: balanceCalls, block, chain - }) + const syrupBalances = await api.multiCall({ abi: 'erc20:balanceOf', calls: balanceCalls, }) - const lpPositions = [] - syrupBalances.forEach(({ input, output }) => { - lpPositions.push({ - token: syrupMapping[input.target], - balance: output - }) + syrupBalances.forEach((bal, i) => { + api.add(syrupMapping[toaSyrup[i][0]], bal) }) - await sumTokens(balances.tvl, toaTvl, block, chain, transform) - await sumTokens(balances.pool2, toaPool2, block, chain, transform) - await sumTokens(balances.staking, toaStaking, block, chain, transform) - await unwrapUniswapLPs(balances.tvl, lpPositions, block, chain, transform) - return balances - } - - function getTvlFunction(key) { - return async (ts, _block, chainBlocks) => { - if (!getTvl) getTvl = getAllTVL(ts, _block, chainBlocks) - return (await getTvl)[key] - } + return sumTokens2({ api, tokensAndOwners, blacklistedTokens, resolveLP: true }) } - const chainExports = { - tvl: getTvlFunction('tvl'), - pool2: getTvlFunction('pool2'), - staking: getTvlFunction('staking'), + module.exports[chain] = { + tvl, + pool2: sumTokensExport({ tokens: LPs, owners: pool2Owners, resolveLP: true }), + staking: sumTokensExport({ token, owners: stakingOwners, }), } - - module.exports[chain] = chainExports } Object.keys(config).forEach(setChainTVL) \ No newline at end of file diff --git a/projects/maia-dao/index.js b/projects/maia-dao/index.js index 7b1ebdd7e6..596a9bd012 100644 --- a/projects/maia-dao/index.js +++ b/projects/maia-dao/index.js @@ -1,92 +1,26 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const { getChainTransform } = require('../helper/portedTokens'); -const { unwrapUniswapLPs, sumTokens2, } = require('../helper/unwrapLPs'); +const { sumTokens2, } = require('../helper/unwrapLPs'); const abis = require("./abis.json"); const HERMES = '0xb27bbeaaca2c00d6258c3118bab6b5b6975161c8'; -const excludedTokens = ["0xa3e8e7eb4649ffc6f3cbe42b4c2ecf6625d3e802"]; +const blacklistedTokens = ["0xa3e8e7eb4649ffc6f3cbe42b4c2ecf6625d3e802"]; const multisig = '0x77314eAA8D99C2Ad55f3ca6dF4300CFC50BdBC7F'; const tokens = [ADDRESSES.metis.WETH, ADDRESSES.metis.Metis, ADDRESSES.metis.m_USDC, ADDRESSES.metis.m_USDT, ADDRESSES.metis.DAI, '0xEfFEC28996aAff6D55B6D108a46446d45C3a2E71', '0x5ab390084812E145b619ECAA8671d39174a1a6d1',]; -async function tvl(timestamp, _, { metis: block }) { - const chain = 'metis' - const balances = {}; - const transform = await getChainTransform(chain); +async function tvl(api) { - const hermesBalance = (await sdk.api.abi.call({ + const hermesBalance = await api.call({ target: '0xa4C546c8F3ca15aa537D2ac3f62EE808d915B65b', abi: abis.locked, params: [2], - block, - chain: 'metis' - })).output; - - balances[`metis:${HERMES}`] = BigInt(hermesBalance.amount - 8424424910000000000000000).toString() - - const noPairs = (await sdk.api.abi.call({ - target: '0x879828da3a678D349A3C8d6B3D9C78e9Ee31137F', - abi: abis.length, - block, - chain: 'metis' - })).output; - - const pairAddresses = (await sdk.api.abi.multiCall({ - target: '0x879828da3a678D349A3C8d6B3D9C78e9Ee31137F', - calls: Array.from({ length: Number(noPairs) }, (_, k) => ({ - params: k, - })), - abi: abis.pools, - block, - chain: 'metis' - })).output; - - let gauges = (await sdk.api.abi.multiCall({ - target: '0x879828da3a678D349A3C8d6B3D9C78e9Ee31137F', - calls: pairAddresses.map(a => ({ - params: a.output - })), - abi: abis.gauges, - block, - chain: 'metis' - })).output; - - let pairBalances = [] - - for (let i = 0; i < Number(noPairs); i++) { - pairBalances.push( - await sdk.api.abi.call({ - target: gauges[i].output, - abi: abis.balanceOf, - params: [multisig], - block: block, - chain: "metis", - }) - ); - } - - let lpPositions = []; - for (let i = 0; i < pairBalances.length; i++) { - if ( - pairAddresses[i].output && - excludedTokens.includes(pairAddresses[i].output.toLowerCase()) - ) { - continue; - } - lpPositions.push({ - balance: pairBalances[i].output, - token: pairAddresses[i].output - }); - } - - await unwrapUniswapLPs( - balances, - lpPositions, - block, - 'metis', - transform - ); - return sumTokens2({ balances, owner: multisig, tokens, chain, block, resolveLP: 'true', }) + }) + api.add(HERMES, hermesBalance.amount - 8424424910000000000000000) + const pairs = await api.fetchList({ lengthAbi: abis.length, itemAbi: abis.pools, target: '0x879828da3a678D349A3C8d6B3D9C78e9Ee31137F' }) + + const gauges = await api.multiCall({ abi: abis.gauges, calls: pairs, target: '0x879828da3a678D349A3C8d6B3D9C78e9Ee31137F'}) + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: gauges.map(gauge => ({ target: gauge, params: [multisig] }))}) + api.add(pairs, bals) + return sumTokens2({ owner: multisig, tokens, api, resolveLP: 'true', blacklistedTokens, }) } module.exports = { diff --git a/projects/makiswap/abi.json b/projects/makiswap/abi.json deleted file mode 100644 index f73548ff07..0000000000 --- a/projects/makiswap/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "totalPairs": "uint256:totalPairs", - "allPairs": "function allPairs(uint256) view returns (address)" -} \ No newline at end of file diff --git a/projects/makiswap/index.js b/projects/makiswap/index.js index 1092095a4e..dbc74e4106 100644 --- a/projects/makiswap/index.js +++ b/projects/makiswap/index.js @@ -1,107 +1,14 @@ -const sdk = require("@defillama/sdk"); -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); - -const abi = require("./abi.json"); +const { staking } = require("../helper/staking"); +const { getUniTVL } = require("../helper/unknownTokens"); const factory = "0x11cdC9Bd86fF68b6A6152037342bAe0c3a717f56"; const maki = "0x5FaD6fBBA4BbA686bA9B8052Cf0bd51699f38B93"; const makiChef = "0x4cb4c9C8cC67B171Ce86eB947cf558AFDBcAB17E"; -const ignoreLPs = [ - "0x329bae377d60df25e58a17b3d0b1d46cf2f4fd8b", - "0x4db7c033137c2843481a686cc0cb415ad09fa764", - "0x5e9cdc40d1acf45fef65313142e40c72059bcb98", -]; - -async function tvl(timestamp, block, chainBlocks) { - let balances = {}; - let poolLength = ( - await sdk.api.abi.call({ - target: factory, - abi: abi.totalPairs, - block: chainBlocks.heco, - chain: "heco", - }) - ).output; - let allPools = ( - await sdk.api.abi.multiCall({ - calls: Array.from({ length: Number(poolLength) }, (_, k) => ({ - target: factory, - params: k, - })), - abi: abi.allPairs, - block: chainBlocks.heco, - chain: "heco", - }) - ).output; - let supply = ( - await sdk.api.abi.multiCall({ - calls: allPools.map((p) => ({ - target: p.output, - })), - abi: "erc20:totalSupply", - block: chainBlocks.heco, - chain: "heco", - }) - ).output; - let ignoreLPSupply = ( - await sdk.api.abi.multiCall({ - calls: ignoreLPs.map((p) => ({ - target: p, - })), - abi: "erc20:totalSupply", - block: chainBlocks.heco, - chain: "heco", - }) - ).output; - let lpPositions = []; - supply.forEach((p) => { - let addr = p.output.toLowerCase(); - if (addr === "0") { - return; - } - lpPositions.push({ - balance: p.output, - token: p.input.target, - }); - }); - ignoreLPSupply.forEach((p) => { - lpPositions.push({ - balance: p.output, - token: p.input.target, - }); - }); - await unwrapUniswapLPs( - balances, - lpPositions, - chainBlocks.heco, - "heco", - (addr) => { - return `heco:${addr}`; - }, - ignoreLPs - ); - return balances; -} - -async function staking(timestamp, block, chainBlocks) { - let balances = {}; - let balance = ( - await sdk.api.erc20.balanceOf({ - target: maki, - owner: makiChef, - block: chainBlocks.heco, - chain: "heco", - }) - ).output; - sdk.util.sumSingleBalance(balances, `heco:${maki}`, balance); - return balances; -} - module.exports = { - methodology: "TVL consists of LPs created by the factory contract", + misrepresentedTokens: true, heco: { - tvl, - staking, + tvl: getUniTVL({ factory, useDefaultCoreAssets: true, abis: { allPairsLength: 'uint256:totalPairs'}}), + staking: staking(makiChef, maki), }, -}; +} \ No newline at end of file diff --git a/projects/meowfinance/index.js b/projects/meowfinance/index.js index 1c7ba69695..c3a033e077 100644 --- a/projects/meowfinance/index.js +++ b/projects/meowfinance/index.js @@ -1,21 +1,10 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const { pool2Exports } = require("../helper/pool2"); -const { stakingUnknownPricedLP } = require("../helper/staking"); -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); +const { pool2 } = require("../helper/pool2"); +const { staking } = require("../helper/staking"); const meow = "0x41F4CC9613E31d4E77C428b40D53537Da24264Ee"; const meowMining = "0xba1a3dACa919616aA462E93A80EFbe82753f9087"; const meowFtm = "0x150Aeb5389d56E258c2bbb42c7e67e944EDEE913"; -const treasuryContract = "0x7d25f49C648B2a12B5f530Df929204352cb6080e"; - -const translate = { - [ADDRESSES.fantom.fUSDT]: - ADDRESSES.ethereum.USDT, - [ADDRESSES.fantom.DAI]: - ADDRESSES.ethereum.DAI, -}; const workers = [ "0x5f1D549826e1AE30D653aD17e7277Fb7C6AC7EDD", // SpiritswapWorker_USDC_FTM_Spirit_Worker @@ -37,172 +26,29 @@ const workers = [ "0xC14f48826EB564201Bf7D7111f0b46e2301bF36A", // SpookyswapWorker_fUSDT_FTM_Spooky_Worker ]; -async function calcTvl(block, chain, borrow) { - let balances = {}; - const poolLength = ( - await sdk.api.abi.call({ - target: meowMining, - abi: abi.poolLength, - block, - chain, - }) - ).output; - const poolInfo = ( - await sdk.api.abi.multiCall({ - calls: Array.from({ length: Number(poolLength) }, (_, k) => ({ - target: meowMining, - params: k, - })), - abi: abi.poolInfo, - block, - chain, - }) - ).output; - const symbols = ( - await sdk.api.abi.multiCall({ - calls: poolInfo.map((p) => ({ - target: p.output.stakeToken, - })), - abi: "erc20:symbol", - block, - chain, - }) - ).output; - let ibTokens = []; - symbols.forEach((p) => { - if (p.output.startsWith("ib")) { - ibTokens.push(p.input.target); - } - }); - const underlyingtoken = ( - await sdk.api.abi.multiCall({ - calls: ibTokens.map((p) => ({ - target: p, - })), - abi: abi.token, - block, - chain, - }) - ).output; - const totalToken = ( - await sdk.api.abi.multiCall({ - calls: ibTokens.map((p) => ({ - target: p, - })), - abi: abi.totalToken, - block, - chain, - }) - ).output; - const vaultDebtVal = ( - await sdk.api.abi.multiCall({ - calls: ibTokens.map((p) => ({ - target: p, - })), - abi: abi.vaultDebtVal, - block, - chain, - }) - ).output; - for (let i = 0; i < ibTokens.length; i++) { - let token = underlyingtoken[i].output.toLowerCase(); - let total = Number(totalToken[i].output); - let debt = Number(vaultDebtVal[i].output); - if (translate[token] !== undefined) { - token = translate[token]; - } else { - token = `fantom:${token}`; - } - if (!borrow) { - sdk.util.sumSingleBalance(balances, token, total - debt); - } else { - sdk.util.sumSingleBalance(balances, token, debt); - } - } - return balances; +async function calcTvl(api, borrow) { + if (borrow) return {} + const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: meowMining}) + return api.sumTokens({ owner: meowMining, tokens: poolInfos.map(p => p.stakeToken), blacklistedTokens: [meowFtm] }) } -async function tvl(timestamp, block, chainBlocks) { - let balances = await calcTvl(chainBlocks.fantom, "fantom", false); - const lpTokens = ( - await sdk.api.abi.multiCall({ - calls: workers.map((p) => ({ - target: p, - })), - abi: abi.lpToken, - block: chainBlocks.fantom, - chain: "fantom", - }) - ).output; - const masterchefs = ( - await sdk.api.abi.multiCall({ - calls: workers.map((p) => ({ - target: p, - })), - abi: abi.masterchef, - block: chainBlocks.fantom, - chain: "fantom", - }) - ).output; - const pids = ( - await sdk.api.abi.multiCall({ - calls: workers.map((p) => ({ - target: p, - })), - abi: abi.pid, - block: chainBlocks.fantom, - chain: "fantom", - }) - ).output; - const userInfos = ( - await sdk.api.abi.multiCall({ - calls: Array.from({ length: workers.length }, (_, k) => ({ - target: masterchefs[k].output, - params: [pids[k].output, workers[k]], - })), - abi: abi.userInfo, - block: chainBlocks.fantom, - chain: "fantom", - }) - ).output; - let lpPos = []; - for (let i = 0; i < workers.length; i++) { - if (userInfos[i].output.amount === "0") continue; - lpPos.push({ - token: lpTokens[i].output, - balance: userInfos[i].output.amount, - }); - } - await unwrapUniswapLPs( - balances, - lpPos, - chainBlocks.fantom, - "fantom", - (addr) => `fantom:${addr}` - ); - return balances; +async function tvl(api) { + await calcTvl(api, false); + const lpTokens = await api.multiCall({ abi: abi.lpToken, calls: workers}) + const shares = await api.multiCall({ abi: 'uint256:totalShare', calls: workers}) + const bals = (await api.multiCall({ abi: 'function shareToBalance(uint256) view returns (uint256)', calls: lpTokens.map((lp, i) => ({ target: lp, params: shares[i] })), permitFailure: true})).map(b => b || 0) + api.add(lpTokens, bals) } -async function borrowed(timestamp, block, chainBlocks) { - return await calcTvl(chainBlocks.fantom, "fantom", true); +async function borrowed(api) { + return await calcTvl(api, true); } module.exports = { fantom: { tvl, borrowed, - pool2: pool2Exports( - meowMining, - [meowFtm], - "fantom", - (addr) => `fantom:${addr}` - ), - staking: stakingUnknownPricedLP( - meowMining, - meow, - "fantom", - meowFtm, - (addr) => `fantom:${addr}` - ), + pool2: pool2(meowMining, [meowFtm],), + staking: staking(meowMining, meow,), }, }; diff --git a/projects/mero/index.js b/projects/mero/index.js index 05888cb2f9..b4c184a157 100644 --- a/projects/mero/index.js +++ b/projects/mero/index.js @@ -1,52 +1,15 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const { createIncrementArray } = require('../helper/utils') - - -const chain = "ethereum" const addressProviders = [ '0x139c15e21b0f6e43fc397face5de5b7d5ae6874a', '0xa298d39715AE492e4CAF3Ccb33cBF57abC5238d7', ] -async function tvl(timestamp, block) { - const balances = {} - const { output: vaultCounts } = await sdk.api.abi.multiCall({ - calls: addressProviders.map(i => ({ target: i })), - abi: abi.poolsCount, - chain, block, - }) - const vaultCallsList = [] - vaultCounts.forEach((j, idx) => { - createIncrementArray(j.output).forEach(i => vaultCallsList.push({ params: i, target: addressProviders[idx] })) - }) - - const { output: vaultsOut } = await sdk.api.abi.multiCall({ - abi: abi.getPoolAtIndex, - calls: vaultCallsList, - chain, block, - }) - - const strategies = vaultsOut.map(i => i.output) - - const { output: tokens } = await sdk.api.abi.multiCall({ - abi: abi.getUnderlying, - calls: strategies.map(i => ({ target: i })), - chain, block, - }) - - const { output: deposits } = await sdk.api.abi.multiCall({ - abi: abi.totalUnderlying, - calls: strategies.map(i => ({ target: i })), - chain, block, - }) - - tokens.forEach((data, i) => { - sdk.util.sumSingleBalance(balances, data.output, deposits[i].output) - }) - - return balances +async function tvl(api) { + const strategies = await api.fetchList({ lengthAbi: abi.poolsCount, itemAbi: abi.getPoolAtIndex, calls: addressProviders}) + const tokens = await api.multiCall({ abi: abi.getUnderlying, calls: strategies}) + const deposits = await api.multiCall({ abi: abi.totalUnderlying, calls: strategies}) + api.add(tokens, deposits) } module.exports = { diff --git a/projects/metapoly/index.js b/projects/metapoly/index.js index 9db34bbe92..fd16f28d7d 100644 --- a/projects/metapoly/index.js +++ b/projects/metapoly/index.js @@ -1,7 +1,4 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const { sumTokens2 } = require('../helper/unwrapLPs') -const { getChainTransform } = require('../helper/portedTokens') const config = { kava: { @@ -17,59 +14,18 @@ const config = { }; module.exports = { - misrepresentedTokens: true, + deadFrom: '2023-07-21', methodology: "We use the totalSupply() method which includes the interest accrued on the deposited USDC.", }; Object.keys(config).forEach((chain) => { module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => { + tvl: async (api) => { const vaults = Object.values(config[chain].vaults); - const tokensAndOwners = [] - const { output: underlyingAssets } = await sdk.api.abi.multiCall({ - abi: abi.UNDERLYING_ASSET_ADDRESS, - calls: vaults.map((i) => ({ target: i })), - chain, - block, - }); - underlyingAssets.forEach(i => tokensAndOwners.push([i.output, i.input.target])) - return sumTokens2({ chain, block, tokensAndOwners }) - }, - borrowed: async (_, _b, { [chain]: block }) => { - const vaults = Object.values(config[chain].vaults); - const [ - { output: decimals }, - { output: tokenBalances }, - { output: underlyingAssets }, - ] = await Promise.all([ - 'erc20:decimals', - abi.totalSupply, - abi.UNDERLYING_ASSET_ADDRESS - ].map(abi => sdk.api.abi.multiCall({ abi, calls: vaults.map((i) => ({ target: i })), chain, block, }))) - - const { output: underlyingDecimals } = await sdk.api.abi.multiCall({ - abi: 'erc20:decimals', - calls: underlyingAssets.map((i) => ({ target: i.output })), - chain, - block, - }); - const { output: underlyingBalances } = await sdk.api.abi.multiCall({ - abi: 'erc20:balanceOf', - calls: underlyingAssets.map((i, j) => ({ target: i.output, params: vaults[j] })), - chain, - block, - }); - const transformAddress = await getChainTransform(chain) - const balances = {} - tokenBalances.forEach(({ output: total }, i) => { - const token = transformAddress(underlyingAssets[i].output) - const decimalChange = underlyingDecimals[i].output - decimals[i].output - const amountInPool = underlyingBalances[i].output - const debt = (total * (10 ** decimalChange)) - amountInPool - if (debt > 0) sdk.util.sumSingleBalance(balances, token, Number(debt).toFixed(0)) - }) - return balances; + const tokens = await api.multiCall({ abi: abi.UNDERLYING_ASSET_ADDRESS, calls: vaults}) + return api.sumTokens({ tokensAndOwners2: [tokens, vaults]}) }, + borrowed: () => ({}), }; }); diff --git a/projects/metavault.trade/index.js b/projects/metavault.trade/index.js index fa7420216d..63f80c08e2 100644 --- a/projects/metavault.trade/index.js +++ b/projects/metavault.trade/index.js @@ -1,31 +1,13 @@ -const sdk = require("@defillama/sdk") const abi = require('./abi') const { staking } = require("../helper/staking"); -const { sumTokens } = require('../helper/unwrapLPs') -// Polygon const polygonVault = "0x32848E2d3aeCFA7364595609FB050A301050A6B4"; const polygonStaking = "0xE8e2E78D8cA52f238CAf69f020fA961f8A7632e9"; // Staked MVX, sMVX const polygonMVX = "0x2760e46d9bb43dafcbecaad1f64b93207f9f0ed7"; -const chain= 'polygon' -const polygonTVL = async (timestamp, _block, { [chain]: block}) => { - const calls = [] - const { output: size } = await sdk.api.abi.call({ - target: polygonVault, - abi: abi.allWhitelistedTokensLength, - chain, block, - }) - for (let i = 0;i < +size; i++) - calls.push({params: i}) - const { output: tokens } = await sdk.api.abi.multiCall({ - target: polygonVault, - abi: abi.allWhitelistedTokens, - calls, - chain, block, - }) - const toa = tokens.map(i => [i.output, polygonVault]) - return sumTokens({}, toa, block, chain) +const polygonTVL = async (api) => { + const tokens = await api.fetchList({ lengthAbi: abi.allWhitelistedTokensLength, itemAbi: abi.allWhitelistedTokens, target: polygonVault}) + return api.sumTokens({ tokens, owner: polygonVault }) }; module.exports = { diff --git a/projects/metf-finance/index.js b/projects/metf-finance/index.js index 5347c8b59c..18295b7d6b 100644 --- a/projects/metf-finance/index.js +++ b/projects/metf-finance/index.js @@ -1,116 +1,10 @@ -const abi = 'function balanceOf(address token) view returns (uint256)' -const pairPrice = 'function getPairPrice(address pair, uint256 amount) view returns (uint256 valueInMMF, uint256 valueInUSD)'; -const valueOfAsset = 'function valueOfAsset(address asset, uint256 amount) view returns (uint256 valueInCRO, uint256 valueInUSD)' -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); -const { pool2 } = require('../helper/pool2') - -const treasury = "0xE25737b093626233877EC0777755c5c4081580be" -const MMF_METF_BOND = "0x127966303484140EF3692C49CfF154eaAe50cEe3" -const calculator = "0xa2B417088D63400d211A4D5EB3C4C5363f834764" - -const ZERO = new BigNumber(0); -const ETHER = new BigNumber(10).pow(18); - -const tokens = ["0x97749c9B61F878a880DfE312d2594AE07AEd7656", - "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", - "0x50c0C5bda591bc7e89A342A3eD672FB59b3C46a7"] - -const LPs = ["0xbA452A1c0875D33a440259B1ea4DcA8f5d86D9Ae", - "0xB6E1705BfAFcf1efEE83C135C0F0210653bAB8F0", - // "0xd7385f46FFb877d8c8Fe78E5f5a7c6b2F18C05A7", //moved to pool2 -] - - -async function newTVL(timestamp, block, chainBlocks) { - block = chainBlocks.cronos - const balances = {} - const prices = {} - - let data = await sdk.api.abi.multiCall({ - calls: LPs.map((address) => ({ - target: MMF_METF_BOND, - params: [address, ETHER.toString()], - })), - block, - abi: pairPrice, - chain: "cronos", - }); - - data.output.forEach((call) => { - let value = call && call.output && new BigNumber(call.output.valueInUSD); - if (value) { - prices[call.input.params[0]] = value.dividedBy(ETHER); - } - }); - - let data3 = await sdk.api.abi.multiCall({ - calls: tokens.map((address) => ({ - target: calculator, - params: [address, ETHER.toString()], - })), - block, - abi: valueOfAsset, - chain: "cronos", - }); - data3.output.forEach((call) => { - let value = call && call.output && new BigNumber(call.output.valueInUSD); - if (value) { - prices[call.input.params[0]] = value.dividedBy(ETHER); - } - }); - - - let data2 = await sdk.api.abi.multiCall({ - calls: [...tokens, ...LPs].map((address) => ({ - target: treasury, - params: address, - })), - block, - abi: abi, - chain: "cronos", - }) - - data2.output.forEach((call) => { - let value = call && call.output && new BigNumber(call.output); - if (value) { - if (prices[call.input.params[0]]) { - balances[`cronos:${call.input.params[0]}`] = value.dividedBy(ETHER).multipliedBy(prices[call.input.params[0]]) - } else { - balances[`cronos:${call.input.params[0]}`] = value.dividedBy(ETHER) - } - } - }); - - let tvlall = Object.values(balances).reduce((tvl, bn) => { - return tvl.plus(bn) - }, ZERO) - - return { - tether: tvlall.toNumber(), - }; -} - -async function staking(timestamp, block, chainBlocks) { - block = chainBlocks.cronos - const staked = (await sdk.api.abi.call({ - target: "0xb8df27c687c6af9afe845a2afad2d01e199f4878", - params: "0x1A6aD4bac521a98556A4C0Da5946654c5DC7Ce0A", // masterchef - abi: 'erc20:balanceOf', - block: block, - chain: 'cronos' - })).output - const balances = { - ["cronos:0xb8df27c687c6af9afe845a2afad2d01e199f4878"]: staked - } - return balances -} - +const { pool2 } = require('../helper/pool2'); +const { staking } = require("../helper/staking"); module.exports = { cronos: { - tvl: newTVL, - staking: staking, + tvl: () => ({}), // tvl is 0 for ohm forks + staking: staking('0x1A6aD4bac521a98556A4C0Da5946654c5DC7Ce0A', '0xb8df27c687c6af9afe845a2afad2d01e199f4878'), pool2: pool2("0xE25737b093626233877EC0777755c5c4081580be", "0xd7385f46FFb877d8c8Fe78E5f5a7c6b2F18C05A7") } } \ No newline at end of file diff --git a/projects/milkomeda-djed/config.json b/projects/milkomeda-djed/config.json deleted file mode 100644 index b7e39bcf85..0000000000 --- a/projects/milkomeda-djed/config.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "djedAddress": { - "milkomeda": "0x67A30B399F5Ed499C1a6Bc0358FA6e42Ea4BCe76", - "milkomeda_a1": "0x..." - }, - "reserveTokenAddress": { - "milkomeda": "0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9", - "milkomeda_a1": "0x..." - } - } \ No newline at end of file diff --git a/projects/milkomeda-djed/index.js b/projects/milkomeda-djed/index.js index c1ed78e7b8..0d514096fa 100644 --- a/projects/milkomeda-djed/index.js +++ b/projects/milkomeda-djed/index.js @@ -1,24 +1,14 @@ -const sdk = require('@defillama/sdk'); -const { transformBalances } = require('../helper/portedTokens'); - const abi = require('./abi.json'); -const config = require("./config.json"); - -async function tvl(chain, chainBlocks) { - const balances = {}; - - const reserve = (await sdk.api.abi.call({ - abi: abi.Djed.reserve, chain: chain, target: config.djedAddress[chain], params: [ 0 ], block: chainBlocks[chain], - })).output; - sdk.util.sumSingleBalance(balances, config.reserveTokenAddress[chain], reserve); // Using WADA address instead of mADA - return transformBalances(chain, balances); +async function tvl(api) { + const reserve = await api.call({ abi: abi.Djed.reserve, target:'0x67A30B399F5Ed499C1a6Bc0358FA6e42Ea4BCe76', params: 0 }) + api.add('0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9', reserve); // Using WADA address instead of mADA } module.exports = { methodology: 'The TVL of each Djed deployment on Milkomeda C1.', milkomeda: { start: 10440400, - tvl: (timestamp, block, chainBlocks) => tvl('milkomeda', chainBlocks) + tvl, }, }; diff --git a/projects/miningtycoon/index.js b/projects/miningtycoon/index.js index a4fa748146..58c93d9855 100644 --- a/projects/miningtycoon/index.js +++ b/projects/miningtycoon/index.js @@ -1,70 +1,20 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json'); +const { staking } = require('../helper/staking'); -const tokenFarm = '0xBdfbeecF52bCfF5aa8cc1B8A4B737B2Af3D1BA2F'; const tokenFarm2 = '0x8A6AE8076A1866877e006cC9b4bd0378646A9bD5'; - const NTToken = '0x8b70512b5248e7c1f0f6996e2fde2e952708c4c9'; -const USDTToken = ADDRESSES.heco.USDT; - -const bsc_tokenFarm = '0xA05Cbf21620553Ade9a3368f1b20D81eEe74a1FC'; const bsc_tokenFarm2 = '0x973fEAf394F5E882B0F8a9B5CDC0b3E28AA08926'; - const bsc_NTToken = '0xfbcf80ed90856AF0d6d9655F746331763EfDb22c'; -const bsc_USDTToken = ADDRESSES.bsc.USDT; - -async function tvl(timestamp, ethBlock, chainBlocks) { - let balances = {}; - - const USDTBalance = (await sdk.api.abi.call({ - chain: "heco", - target: USDTToken, - params: [tokenFarm2], - abi: 'erc20:balanceOf', - })).output; - - const bsc_USDTBalance = (await sdk.api.abi.call({ - chain: "bsc", - target: bsc_USDTToken, - params: [bsc_tokenFarm2], - abi: 'erc20:balanceOf', - })).output; - - balances = {}; - balances['heco:'+USDTToken] = USDTBalance; - balances['bsc:'+bsc_USDTToken] = bsc_USDTBalance; - - return balances; -} - -async function staking(timestamp, ethBlock, chainBlocks) { - const NTBalance = (await sdk.api.abi.call({ - chain: "heco", - target: NTToken, - params: [tokenFarm2], - block: chainBlocks.heco, - abi: 'erc20:balanceOf', - })).output; - - const bsc_NTBalance = (await sdk.api.abi.call({ - chain: "bsc", - target: bsc_NTToken, - params: [bsc_tokenFarm2], - block: chainBlocks.bsc, - abi: 'erc20:balanceOf', - })).output; - - return { - ['heco:'+NTToken]: NTBalance, - ['bsc:'+bsc_NTToken]: bsc_NTBalance, - } -} module.exports = { methodology: 'TVL counts USDT staked to earn NT tokens and the staking portion of TVL counts the NT tokens that are staked to earn more NT tokens', bsc:{ - tvl, - staking + tvl: staking(bsc_tokenFarm2, ADDRESSES.bsc.USDT), + staking: staking(bsc_tokenFarm2, bsc_NTToken) + }, + heco:{ + tvl: staking(tokenFarm2, ADDRESSES.heco.USDT), + staking: staking(tokenFarm2, NTToken) }, } \ No newline at end of file diff --git a/projects/mover/abi.json b/projects/mover/abi.json deleted file mode 100644 index 2ac8dafd37..0000000000 --- a/projects/mover/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "inceptionLPPriceUSDC": "uint256:inceptionLPPriceUSDC", - "lpTokensBalance": "uint256:lpTokensBalance" -} \ No newline at end of file diff --git a/projects/mover/baseLedgerPoolAbi.json b/projects/mover/baseLedgerPoolAbi.json deleted file mode 100644 index b4c9952f59..0000000000 --- a/projects/mover/baseLedgerPoolAbi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "totalAssetAmount": "uint256:totalAssetAmount" -} \ No newline at end of file diff --git a/projects/mover/index.js b/projects/mover/index.js index 915a3b7f12..e31fd5ccc9 100644 --- a/projects/mover/index.js +++ b/projects/mover/index.js @@ -1,8 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const baseLedgerAbi = require("./baseLedgerPoolAbi.json"); -const savingsPoolAbi = require("./savingsPoolAbi.json"); -const savingsPlusPoolAbi = require("./savingsPlusPoolAbi.json"); const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); @@ -13,46 +9,18 @@ const MOVER_WETH_SLP = "0x87b918e76c92818DB0c76a4E174447aeE6E6D23f"; const savingsPool = "0xAF985437DCA19DEFf89e61F83Cd526b272523719"; const savingsPlusPolygonPool = "0x77D5333d97A092cA01A783468E53E550C379dc3C"; -const USDC = ADDRESSES.ethereum.USDC; -const USDCinPolygon = ADDRESSES.polygon.USDC; const baseLedgerPool = '0x1f15F293C1Cd3d05d58d3EdeAf0C72c5A2dfeaFf'; const UBT = '0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e'; -async function tvlEth(timestamp, block) { - const balances = {}; - - let stakedUBT = (await sdk.api.abi.call({ - abi: baseLedgerAbi.totalAssetAmount, - target: baseLedgerPool, - block - })).output; - - sdk.util.sumSingleBalance(balances, UBT, stakedUBT); - - - let savingsStakedUSDC = (await sdk.api.abi.call({ - abi: savingsPoolAbi.totalAssetAmount, - target: savingsPool, - block - })).output; - - sdk.util.sumSingleBalance(balances, USDC, savingsStakedUSDC); - return balances; +async function tvlEth(api) { + const [stakedUBT, savingsStakedUSDC] = await api.multiCall({ abi: "uint256:totalAssetAmount", calls: [baseLedgerPool, savingsPool] }) + api.add(UBT, stakedUBT) + api.add(ADDRESSES.ethereum.USDC, savingsStakedUSDC) } -async function tvlPolygon(timestamp, block, chainBlocks) { - const balances = {}; - const transform = i => `polygon:${i}`; - - let savingsPlusStakedUSDC = (await sdk.api.abi.call({ - chain: "polygon", - abi: savingsPlusPoolAbi.totalAssetAmount, - target: savingsPlusPolygonPool, - block: chainBlocks["polygon"], - })).output; - - sdk.util.sumSingleBalance(balances, transform(USDCinPolygon), savingsPlusStakedUSDC); - return balances; +async function tvlPolygon(api) { + const [savingsStakedUSDC] = await api.multiCall({ abi: "uint256:totalAssetAmount", calls: [savingsPlusPolygonPool] }) + api.add(ADDRESSES.polygon.USDC, savingsStakedUSDC) } module.exports = { diff --git a/projects/mover/savingsPlusPoolAbi.json b/projects/mover/savingsPlusPoolAbi.json deleted file mode 100644 index b4c9952f59..0000000000 --- a/projects/mover/savingsPlusPoolAbi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "totalAssetAmount": "uint256:totalAssetAmount" -} \ No newline at end of file diff --git a/projects/mover/savingsPoolAbi.json b/projects/mover/savingsPoolAbi.json deleted file mode 100644 index b4c9952f59..0000000000 --- a/projects/mover/savingsPoolAbi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "totalAssetAmount": "uint256:totalAssetAmount" -} \ No newline at end of file diff --git a/projects/oddz/index.js b/projects/oddz/index.js index f180e07082..d6328c6bdb 100644 --- a/projects/oddz/index.js +++ b/projects/oddz/index.js @@ -1,115 +1,20 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -async function getTotalCollateral(pools, chain, block) { - const balances = {}; - await Promise.all( - pools.map((pool) => - sdk.api.erc20 - .balanceOf({ - target: pool[1], - owner: pool[0], - chain, - block, - }) - .then((result) => - sdk.util.sumSingleBalance(balances, pool[2], result.output) - ) - ) - ); - return balances; -} -const bscPools = [ - // pool, token, representation - [ - "0x99f29c537c70897f60c9774d3f13bd081D423467", - ADDRESSES.bsc.USDC, - "bsc:" + ADDRESSES.bsc.USDC, - ], // oUSD -]; - -const bscStakingPool = [ - [ - "0x636f9d2Bb973D2E54d2577b9976DedFDc21E6672", - "0xcd40f2670cf58720b694968698a5514e924f742d", - "bsc:0xcd40f2670cf58720b694968698a5514e924f742d", - ], // sODDZ -]; - -const bscPool2 = [ - [ - "0x3c2c77353E2F6AC1578807b6b2336Bf3a3CbB014", - "0xcd40f2670cf58720b694968698a5514e924f742d", - "bsc:0xcd40f2670cf58720b694968698a5514e924f742d", - ], // sODDZ - [ - "0x3c2c77353E2F6AC1578807b6b2336Bf3a3CbB014", - ADDRESSES.bsc.WBNB, - "bsc:" + ADDRESSES.bsc.WBNB, - ], // ODDZ-BNB -]; - - -const avaxPools = [ - // pool, token, representation - [ - "0x6a165bA195D9d331b2A1C9648328d409aA599465", - ADDRESSES.avax.USDC_e, - "avax:" + ADDRESSES.avax.USDC_e, - ], // oUSD -]; - -const avaxStakingPool = [ - [ - "0xd0A145aF8F200Fc8e4d118c6e4d4a77eE1ba8E2e", - "0xB0a6e056B587D0a85640b39b1cB44086F7a26A1E", - "avax:0xB0a6e056B587D0a85640b39b1cB44086F7a26A1E", - ], // sODDZ -]; - -const avaxPool2 = [ - [ - "0xBAe8Ee2D95Aa5c68Fe8373Cd0208227E94075D5d", - "0xb0a6e056b587d0a85640b39b1cb44086f7a26a1e", - "avax:0xb0a6e056b587d0a85640b39b1cb44086f7a26a1e", - ], // sODDZ - [ - "0x3c2c77353E2F6AC1578807b6b2336Bf3a3CbB014", - ADDRESSES.avax.WAVAX, - "avax:" + ADDRESSES.avax.WAVAX, - ], // ODDZ-AVAX -]; - - -async function bsc(_timestamp, block, chainBlocks) { - return getTotalCollateral(bscPools, "bsc", chainBlocks["bsc"]); -} -async function pool2(timestamp, block, chainBlocks) { - return getTotalCollateral(bscPool2, "bsc", chainBlocks["bsc"]); -} -async function bscStaking(timestamp, block, chainBlocks) { - return getTotalCollateral(bscStakingPool, "bsc", chainBlocks["bsc"]); -} - -async function avax(_timestamp, block, chainBlocks) { - return getTotalCollateral(avaxPools, "avax", chainBlocks["avax"]); -} -async function pool3(timestamp, block, chainBlocks) { - return getTotalCollateral(avaxPool2, "avax", chainBlocks["avax"]); -} -async function avaxStaking(timestamp, block, chainBlocks) { - return getTotalCollateral(avaxStakingPool, "avax", chainBlocks["avax"]); -} - - -module.exports = { +const { sumTokensExport } = require('../helper/unwrapLPs') +const config = { bsc: { - tvl: bsc, - pool2, - staking: bscStaking, + tvl: { tokensAndOwners: [[ADDRESSES.bsc.USDC, "0x99f29c537c70897f60c9774d3f13bd081D423467"]] }, + staking: { tokensAndOwners: [["0xcd40f2670cf58720b694968698a5514e924f742d", "0x636f9d2Bb973D2E54d2577b9976DedFDc21E6672",]] }, + pool2: { tokensAndOwners: [["0x3c2c77353E2F6AC1578807b6b2336Bf3a3CbB014", "0xA3Fc4F2D307d8202468a223f35Bba978114A994C",],], resolveLP: true }, }, avax: { - tvl: avax, - pool2: pool2, - staking: avaxStaking, + tvl: { tokensAndOwners: [[ADDRESSES.avax.USDC_e, "0x6a165bA195D9d331b2A1C9648328d409aA599465"]] }, + staking: { tokensAndOwners: [["0xB0a6e056B587D0a85640b39b1cB44086F7a26A1E", "0xd0A145aF8F200Fc8e4d118c6e4d4a77eE1ba8E2e",]] }, + pool2: { tokensAndOwners: [["0xBAe8Ee2D95Aa5c68Fe8373Cd0208227E94075D5d", "0x8fD9f9AEd3a1a823693580CCcf482A04Db2Ad4f3",],], resolveLP: true }, }, -}; \ No newline at end of file +} + +Object.keys(config).forEach(chain => { + const _config = config[chain] + module.exports[chain] = {} + Object.keys(_config).forEach(key => module.exports[chain][key] = sumTokensExport(_config[key])) +}) diff --git a/projects/opendao/abi.json b/projects/opendao/abi.json deleted file mode 100644 index b6ed2c1803..0000000000 --- a/projects/opendao/abi.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "getAllMarkets": "address[]:getAllMarkets", - "getCash": "uint256:getCash", - "underlying": "address:underlying", - "symbol": "string:symbol", - "totalBorrows": "uint256:totalBorrows", - "poolInfo": "function poolInfo(uint256) view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accSushiPerShare)", - "poolLength": "uint256:poolLength", - "cash": "address:cash" -} \ No newline at end of file diff --git a/projects/opendao/index.js b/projects/opendao/index.js index ddd0cb7f80..82a65c0023 100644 --- a/projects/opendao/index.js +++ b/projects/opendao/index.js @@ -1,13 +1,8 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json") const { pool2s } = require("../helper/pool2"); -const { unwrapUniswapLPs } = require('../helper/unwrapLPs'); +const { compoundExports2 } = require('../helper/compound'); -/*** Ethereum Addresses ***/ const comptroller = "0x959Fb43EF08F415da0AeA39BEEf92D96f41E41b3"; -const farmContract = "0x9C3c5a058B83CBbE3Aa0a8a8711c2BD5080ccCa7"; - const farmContractsBSC = [ // Farm ID 41 "0x92702dcCD53022831edd3FCBfEabbBA31BC29bB6", @@ -38,113 +33,6 @@ const pool2LpsBSC = [ "0x507d84fe072Fe62A5F2e1F917Be8Cc58BdC53eF8" ]; -const calc = async (balances, balance, comptroller, chain = "ethereum") => { - let chainBlocks = {}; - - const allMarkets = ( - await sdk.api.abi.call({ - abi: abi.getAllMarkets, - target: comptroller, - chain: chain, - block: chainBlocks[chain] - }) - ).output; - - const getBalance = ( - await sdk.api.abi.multiCall({ - abi: balance, - calls: allMarkets.map(markets => ({ - target: markets, - })), - chain: chain, - block: chainBlocks[chain] - }) - ).output.map(bal => bal.output); - - const underlyings = ( - await sdk.api.abi.multiCall({ - abi: abi.underlying, - calls: allMarkets.map(markets => ({ - target: markets, - })), - chain: chain, - block: chainBlocks[chain] - }) - ).output.map(under => under.output); - - const symbols = ( - await sdk.api.abi.multiCall({ - abi: abi.symbol, - calls: underlyings.map(underlying => ({ - target: underlying, - })), - chain: chain, - block: chainBlocks[chain] - }) - ).output.map(symbol => symbol.output); - - const lpPositions = []; - underlyings.forEach((underlying, idx) => { - if (symbols[idx] == 'UNI-V2') { - lpPositions.push({ - token: underlying, - balance: getBalance[idx] - }) - } else { - sdk.util.sumSingleBalance(balances, `${chain}:${underlying}`, getBalance[idx]); - } - }); - - await unwrapUniswapLPs( - balances, - lpPositions, - chainBlocks[chain], - chain, - addr => `${chain}:${addr}` - ); -}; - -const ethTvl = async () => { - const balances = {}; - - await calc(balances, abi.getCash, comptroller); - - const poolLength = ( - await sdk.api.abi.call({ - abi: abi.poolLength, - target: farmContract, - }) - ).output; - - for (let i = 0; i < poolLength; i++) { - const lpFarm = ( - await sdk.api.abi.call({ - abi: abi.poolInfo, - target: farmContract, - params: i - }) - ).output.lpToken; - - const cashAddress = ( - await sdk.api.abi.call({ - abi: abi.cash, - target: lpFarm, - }) - ).output; - - const balance = ( - await sdk.api.erc20.balanceOf({ - target: cashAddress, - owner: lpFarm - }) - ).output; - - sdk.util.sumSingleBalance(balances, cashAddress, balance); - } - - return balances; -}; - const vaults = [ "0x0a234ef34614a4eed1c1430a23b46f95df5f4257", // pOPEN "0xfff0cc78a7e7ce5d6ba60f23628ff9a63beee87f", // OCP @@ -153,44 +41,22 @@ const vaults = [ "0xcfefc606c4c010c242431f60a7afc13461df399c", // ROSEN ]; -async function bscTvl(timestamp, block, chainBlocks) { - let balances = {}; - let underlying = ( - await sdk.api.abi.multiCall({ - calls: vaults.map((p) => ({ - target: p, - })), - abi: abi.underlying, - block: chainBlocks.bsc, - chain: "bsc", - }) - ).output; - let underlyingBalances = ( - await sdk.api.abi.multiCall({ - calls: underlying.map((p) => ({ - target: p.output, - params: p.input.target, - })), - abi: "erc20:balanceOf", - block: chainBlocks.bsc, - chain: "bsc", - }) - ).output; - underlyingBalances.forEach((p) => { - sdk.util.sumSingleBalance(balances, `bsc:${p.input.target}`, p.output); - }); - return balances; +async function bscTvl(api) { + const tokens = await api.multiCall({ abi: 'address:underlying', calls: vaults}) + return api.sumTokens({ tokensAndOwners2: [tokens, vaults]}) } module.exports = { misrepresentedTokens: true, ethereum: { pool2: pool2s(farmContractsBSC, pool2LpsBSC), - tvl: ethTvl + ...compoundExports2({ comptroller }) }, bsc: { tvl: bscTvl, }, methodology: "We count liquidity on the Markets same as compound, and we export Borrowing part too", -} \ No newline at end of file +} + +delete module.exports.ethereum.borrowed \ No newline at end of file diff --git a/projects/snowflake/index.js b/projects/snowflake/index.js index 4f9d577377..32a2562645 100644 --- a/projects/snowflake/index.js +++ b/projects/snowflake/index.js @@ -1,52 +1,30 @@ -const sdk = require("@defillama/sdk") const { staking } = require("../helper/staking"); -const { sumTokens2 } = require('../helper/unwrapLPs') const assetsAbi = require("./abi") const asssetsContract = "0x2c326AbbE089B786E7170da84e39F3d0c6650653" const bscAsssetsContract = "0xEaEC4e680F5D534772e888fbD558b3b29e1F2E89" -const chain = "polygon" -const chain2 = "bsc" - -async function tvl(timestamp, ethereumBlock, chainBlocks) { - const block = chainBlocks[chain]; - const { output: toa } = await sdk.api.abi.call({ - target: asssetsContract, - abi: assetsAbi.getAssets, - chain, block, - }) - return sumTokens2({ chain: chain, block, tokensAndOwners: toa, }) +async function tvl(api) { + const tokensAndOwners = await api.call({ target: asssetsContract, abi: assetsAbi.getAssets, }) + return api.sumTokens({ tokensAndOwners }) } -async function bscTvl(timestamp, ethereumBlock, chainBlocks) { - const block = chainBlocks[chain2]; - const { output: toa } = await sdk.api.abi.call({ - target: bscAsssetsContract, - abi: assetsAbi.getAssets, - chain: chain2, block, - }) - return sumTokens2({ chain: chain2, block, tokensAndOwners: toa, }) +async function bscTvl(api) { + const tokensAndOwners = await api.call({ target: bscAsssetsContract, abi: assetsAbi.getAssets, }) + return api.sumTokens({ tokensAndOwners }) } module.exports = { hallmarks: [ - [1672448400,"Rug Pull"] + [1672448400, "Rug Pull"] ], - polygon:{ - tvl, - staking: staking( - "0xfD5D4caDe98366d0b09c03cB3cEe7D244c8b6146", //ve - "0xE0f463832295ADf63eB6CA053413a3f9cd8bf685", //snow - "polygon" - ), + // deadFrom: 1672448400, + polygon: { + tvl: () => ({}), + staking: () => ({}), }, bsc: { - tvl: bscTvl, - staking: staking( - "0xfD5D4caDe98366d0b09c03cB3cEe7D244c8b6146", //ve - "0xE0f463832295ADf63eB6CA053413a3f9cd8bf685", //snow - "bsc" - ), + tvl: () => ({}), + staking: () => ({}), } }; diff --git a/projects/solidex/index.js b/projects/solidex/index.js index f5ba9f164a..6458e9471a 100644 --- a/projects/solidex/index.js +++ b/projects/solidex/index.js @@ -1,60 +1,21 @@ -const sdk = require("@defillama/sdk"); -const { unwrapUniswapLPs, sumTokens } = require('../helper/unwrapLPs'); const abis = require("./abis.json"); const SOLID = '0x888EF71766ca594DED1F0FA3AE64eD2941740A20'; - -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - - const noPairs = (await sdk.api.abi.call({ - target: '0x3fAaB499b519fdC5819e3D7ed0C26111904cbc28', - abi: abis.allPairsLength, - block: chainBlocks.fantom, - chain: 'fantom' - })).output; - - const pairAddresses = (await sdk.api.abi.multiCall({ - target: '0x3fAaB499b519fdC5819e3D7ed0C26111904cbc28', - calls: Array.from({ length: Number(noPairs) }, (_, k) => ({ - params: k, - })), - abi: abis.allPairs, - block: chainBlocks.fantom, - chain: 'fantom' - })).output; - - let pairTokens = (await sdk.api.abi.multiCall({ - calls: pairAddresses.map(a => ({ - target: a.output - })), - abi: abis.tokens, - block: chainBlocks.fantom, - chain: 'fantom' - })).output; - - let tokensAndOwners = []; - for (let i = 0; i < pairTokens.length; i++) { - const owner = pairTokens[i].input.target; - (pairTokens[i].output || []).forEach(token => tokensAndOwners.push([token, owner])) - } - - await sumTokens(balances, tokensAndOwners, chainBlocks.fantom, 'fantom',); - - return balances; +async function tvl(api) { + const pairs = await api.fetchList({ lengthAbi: abis.allPairsLength, itemAbi: abis.allPairs, target: '0x3fAaB499b519fdC5819e3D7ed0C26111904cbc28' }) + const tokens = await api.multiCall({ abi: abis.tokens, calls: pairs}) + const ownerTokens = tokens.map((t, i) => [t, pairs[i]]) + return api.sumTokens({ ownerTokens }) } -async function staking(ts, _block, chainBlocks) { - const balances = {}; - balances[`fantom:${SOLID}`] = (await sdk.api.abi.call({ +async function staking(api) { + const { amount } = await api.call({ target: '0xcbd8fea77c2452255f59743f55a3ea9d83b3c72b', abi: abis.locked, params: [8], - block: chainBlocks.fantom, - chain: 'fantom' - })).output.amount - return balances + }) + api.add(SOLID, amount) } module.exports = { diff --git a/projects/stabl-v2/index.js b/projects/stabl-v2/index.js index e013ecb186..d5d81924cc 100644 --- a/projects/stabl-v2/index.js +++ b/projects/stabl-v2/index.js @@ -1,39 +1,15 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const vault = "0x2D62f6D8288994c7900e9C359F8a72e84D17bfba"; -const polygonTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const stablecoins = ( - await sdk.api.abi.call({ - abi: abi.getAllAssets, - target: vault, - block: chainBlocks['polygon'], - chain: 'polygon' - }) - ).output; - - for (let i = 0; i < stablecoins.length; i++) { - const balance_stablecoin = ( - await sdk.api.abi.call({ - abi: abi.checkBalance, - target: vault, - params: stablecoins[i], - block: chainBlocks['polygon'], - chain: 'polygon' - }) - ).output; - - sdk.util.sumSingleBalance(balances, stablecoins[i], balance_stablecoin,'polygon'); - } - - return balances; -}; +async function tvl(api) { + const tokens = await api.call({ abi: abi.getAllAssets, target: vault }) + const bals = await api.multiCall({ abi: abi.checkBalance, target: vault, calls: tokens }) + api.add(tokens, bals) +} module.exports = { polygon: { - tvl: polygonTvl, + tvl, }, }; diff --git a/projects/stabl/index.js b/projects/stabl/index.js index fdfba33a84..e9dda7454f 100644 --- a/projects/stabl/index.js +++ b/projects/stabl/index.js @@ -1,5 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const vaults = { polygon: "0xd1bb7d35db39954d43e16f65f09dd0766a772cff", @@ -17,12 +16,10 @@ module.exports = { Object.keys(vaults).forEach(chain => { module.exports[chain] = { - tvl: async (_, _b, {[chain]: block}) => { - const { output } = await sdk.api.abi.call({ chain, block, abi, target: vaults[chain]}) - return { - // refilling wont work because at mar 26th the decimals used by checkBalance() changed - [`${chain}:${assets[chain]}`]: output/100 - } + tvl: async (api) => { + const bal = await api.call({ abi, target: vaults[chain]}) + // refilling wont work because at mar 26th the decimals used by checkBalance() changed + api.add(assets[chain], bal/100) } } }) diff --git a/projects/xWeowns/index.js b/projects/xWeowns/index.js index fe07eb3c84..006f1e1b8c 100644 --- a/projects/xWeowns/index.js +++ b/projects/xWeowns/index.js @@ -1,25 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); - -const contracts = { - "xWeowns": "0xaBA0Bb586335B938a7a817A900017D891268d32c", - "USDT": "0x32D2b9bBCf25525b8D7E92CBAB14Ca1a5f347B14", - "USDTethereum": ADDRESSES.ethereum.USDT -}; - -async function tvl(timestamp, block, chainBlocks) { - return { - [ contracts.USDTethereum ]: - (await sdk.api.abi.call({ - target: contracts.USDT, - params: contracts.xWeowns, - abi: 'erc20:balanceOf', - block: chainBlocks.lachain, - chain: 'lachain' - })).output - }; -} - module.exports = { lachain: { tvl: () => 0, diff --git a/projects/xrune/abi.json b/projects/xrune/abi.json deleted file mode 100644 index 7e755d4472..0000000000 --- a/projects/xrune/abi.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "getPrice": "function getPrice(address asset) view returns (uint256)", - "getTotal": "uint256:getTotal", - "getPoolAddress": "address:getPoolAddress" -} \ No newline at end of file diff --git a/projects/xrune/index.js b/projects/xrune/index.js index 679dcf6af8..2851dc77b5 100644 --- a/projects/xrune/index.js +++ b/projects/xrune/index.js @@ -1,26 +1,5 @@ -const sdk = require("@defillama/sdk"); -const { stakings } = require("../helper/staking.js"); -const abi = require("./abi.json"); -const BN = require("bignumber.js"); +const { staking } = require("../helper/staking.js"); -async function getTotal(pools, chain, block) { - const balances = {}; - await Promise.all( - pools.map((pool) => - sdk.api.erc20 - .balanceOf({ - target: pool[1], - owner: pool[0], - chain, - block, - }) - .then((result) => - sdk.util.sumSingleBalance(balances, pool[2], result.output) - ) - ) - ); - return balances; -} const token = "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c"; const ethStaking = [ @@ -29,32 +8,11 @@ const ethStaking = [ "0xc20434f595c32B5297A737Cb173382Dd2485C2cC", //4-Month Vault "0x8ba0C510Da4507D1F5f73ff9E1FcD14Edc819EB2", //6-Month Vault ]; -const ethPools = [ - [ - "0x817ba0ecafD58460bC215316a7831220BFF11C80", - "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", - "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", - ], //Tiers - [ - "0xebcd3922a199cd1358277c6458439c13a93531ed", - "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", - "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", - ], //DAO - [ - "0x5b1b8bdbcc534b17e9f8e03a3308172c7657f4a3", - "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", - "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", - ], //DAO -]; - -async function eth(_timestamp, block, chainBlocks) { - return getTotal(ethPools, "ethereum", block); -} module.exports = { methodology: `TVL comes from the Staking Vaults and Launchpad Tiers`, ethereum: { - tvl: eth, - staking: stakings(ethStaking, token), + tvl: () => ({}), + staking: staking([...ethStaking, '0x817ba0ecafD58460bC215316a7831220BFF11C80'], token), }, }; diff --git a/projects/yetiFinance/index.js b/projects/yetiFinance/index.js index 19dd253676..cae094cbd6 100644 --- a/projects/yetiFinance/index.js +++ b/projects/yetiFinance/index.js @@ -1,197 +1,14 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); - -const getAllCollateralAbi = 'function getAllCollateral() view returns (address[], uint256[])' -const fetchPrice_vAbi = "uint256:fetchPrice_v" -const farmPoolTotalSupplyAbi = "uint256:totalSupply" -const curve_get_virtual_priceAbi = "uint256:get_virtual_price" -const getPriceAbi = 'function getPrice(address _collateral) view returns (uint256)' -const getReservesAbi = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)' - -// YetiController knows the price of the collateral -const YETI_CONTROLLER_ADDRESS = "0xcCCCcCccCCCc053fD8D1fF275Da4183c2954dBe3"; - -// All system collaterals are stored across activepool and defaultpool -const ACTIVE_POOL_ADDRESS = "0xAAAaaAaaAaDd4AA719f0CF8889298D13dC819A15"; -const DEFAULT_POOL_ADDRESS = "0xdDDDDDdDDD3AD7297B3D13E17414fBED370cd425"; - -const FARM_ADDRESS = "0xfffFffFFfFe8aA117FE603a37188E666aF110F39"; -const BOOST_CURVE_LP_FARM_ADDRESS = "0xD8A4AA01D54C8Fdd104EAC28B9C975f0663E75D8" - -const YUSDCURVE_POOL_ADDRESS = "0x1da20ac34187b2d9c74f729b85acb225d3341b25" - -const YETIAVAX_POOL2_ADDRESS = "0xbdc7EF37283BC67D50886c4afb64877E3e83f869" - -const YETI_PRICEFEED = "0x8a98709077E8A98ECAf89056838a99b484686863" - -const AVAX_PRICEFEED = "0x45F7260f7Cc47b15eB5cB6ac0dAaBd8Efb2A0edB" - -const YETI_TOKEN_ADDRESS = "0x77777777777d4554c39223C354A05825b2E8Faa3" - -const VEYETI_ADDRESS = "0x88888888847DF39Cf1dfe1a05c904b4E603C9416" -const chain = 'avax' -/** - * Get TVL of YETI FInance - */ -async function tvl(_, _block, chainBlocks) { - const block = chainBlocks[chain] - const activePoolCollaterals = ( - await sdk.api.abi.call({ - target: ACTIVE_POOL_ADDRESS, - abi: getAllCollateralAbi, - block, - chain: "avax" - }) - ).output - - const defaultPoolCollaterals = ( - await sdk.api.abi.call({ - target: DEFAULT_POOL_ADDRESS, - abi: getAllCollateralAbi, - block, - chain: "avax" - }) - ).output - - // require(activePoolCollaterals[0].length === defaultPoolCollaterals[0].length, "active pool collaterals and default pool collaterals have different length") - - // in USD - let systemCollateralTvl = 0 - // iterate through all the collateral types and sum up amount * price to get TVL in USD - for (let i = 0; i < activePoolCollaterals[0].length; i++) { - - const tokenAddress = activePoolCollaterals[0][i] - const amount = +activePoolCollaterals[1][i] + +defaultPoolCollaterals[1][i] - const decimals = ( - await sdk.api.erc20.decimals(tokenAddress, "avax") - ).output; - - const price = ( - await sdk.api.abi.call({ - target: YETI_CONTROLLER_ADDRESS, - abi: getPriceAbi, - block, - chain: "avax", - params: tokenAddress - }) - ).output - - - // some collaterals have decimals that is < 18 so need to normalize decimals - systemCollateralTvl += amount * (10 ** (18 - +decimals)) * +price / (10 ** 18) - } - - - const curveFarmAmount = ( - await sdk.api.abi.call({ - target: FARM_ADDRESS, - abi: farmPoolTotalSupplyAbi, - block, - chain: "avax" - }) - ).output - - const curveBoostFarmAmount = ( - await sdk.api.abi.call({ - target: BOOST_CURVE_LP_FARM_ADDRESS, - abi: farmPoolTotalSupplyAbi, - block, - chain: "avax" - }) - ).output - - const YUSDCurvPrice = ( - await sdk.api.abi.call({ - target: YUSDCURVE_POOL_ADDRESS, - abi: curve_get_virtual_priceAbi, - block, - chain: "avax" - }) - ).output - - const farmTvl = (+curveFarmAmount + +curveBoostFarmAmount) * +YUSDCurvPrice / (10 ** 18) - - const total = systemCollateralTvl + farmTvl - - return { - // In USDC, USDC has decimal of 6 - ["avax:" + ADDRESSES.avax.USDC]: total / (10 ** 12) - } -} - -async function pool2(_, _block, chainBlocks) { - const block = chainBlocks[chain] - const reserves = ( - await sdk.api.abi.call({ - target: YETIAVAX_POOL2_ADDRESS, - abi: getReservesAbi, - block, - chain: "avax" - }) - ).output - const YETIReserve = reserves[0] - const AVAXReserve = reserves[1] - - const YETIPrice = ( - await sdk.api.abi.call({ - target: YETI_PRICEFEED, - abi: fetchPrice_vAbi, - block, - chain: "avax" - }) - ).output - - const AVAXPrice = ( - await sdk.api.abi.call({ - target: AVAX_PRICEFEED, - abi: fetchPrice_vAbi, - block, - chain: "avax" - }) - ).output - - const pool2ValueUSD = (YETIReserve * YETIPrice + AVAXReserve * AVAXPrice) / 10 ** 18 - return { - // In USDC, USDC has decimal of 6 - ["avax:" + ADDRESSES.avax.USDC]: pool2ValueUSD / (10 ** 12) - } -} - -async function staking(_, _block, chainBlocks) { - const block = chainBlocks[chain] - const veYETIBalance = ( - await sdk.api.erc20.balanceOf({ - target: YETI_TOKEN_ADDRESS, - owner: VEYETI_ADDRESS, - block, - chain:"avax" - }) - ).output; - - const YETIPrice = ( - await sdk.api.abi.call({ - target: YETI_PRICEFEED, - abi: fetchPrice_vAbi, - block, - chain: "avax" - }) - ).output - - const stakingUSD = veYETIBalance * YETIPrice / (10 ** 18) - return { - // In USDC, USDC has decimal of 6 - ["avax:" + ADDRESSES.avax.USDC]: stakingUSD / (10 ** 12) - } -} - +// https://yetifinance.medium.com/yeti-finance-wind-down-55913bbf6aed module.exports = { misrepresentedTokens: true, - methodology: true, - // first trove opened start: 1650027587, + deadFrom: '2324-02-10', + hallmarks: [ + [Math.floor(new Date('2023-12-28')/1e3), 'Protocol decides to wind down'], + ], avax:{ - tvl, - pool2, - staking + tvl: () => ({}), + pool2: () => ({}), + staking: () => ({}), }, }; diff --git a/projects/yfdai/index.js b/projects/yfdai/index.js index 839ffc7445..52133f95d9 100644 --- a/projects/yfdai/index.js +++ b/projects/yfdai/index.js @@ -1,6 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk') -const {sumTokens} = require('../helper/unwrapLPs') +const { sumTokensExport } = require('../helper/unwrapLPs') +const { staking } = require('../helper/staking') const yfdaiTokenAddress = "0xf4CD3d3Fda8d7Fd6C5a500203e38640A70Bf9577"; const YfDaiStakingAdddress = "0x44d771D0C998f524ff39aB6Df64B72bce1d09566"; @@ -15,33 +15,13 @@ const YfDaiETHLP60DayVault = "0x26572bf2620108cb5006987e6348c07dc4e14a0f"; const YfDaiETHLP90DayVault = "0x175d6cbaeff93734ada4c5430815f2208a6b040c"; const impulsevenStakingAddress = "0xc0c135D29ba6BB1Ca5F88571A0c45807C3015c64"; -async function eth(_timestamp, ethBlock, chainBlocks) { - const balances = {} - await sumTokens(balances, [ - [yfdaiTokenAddress, YfDaiSafetradeStakingAddress], - [weth, wethVault], - [dai, daiVault], - ], ethBlock) - return balances -} - -async function staking(_timestamp, ethBlock, chainBlocks) { - const balances = {} - await sumTokens(balances, [ - [yfdaiTokenAddress, YfDaiETHLP72HRSVault], - [yfdaiTokenAddress, YfDaiETHLP30DayVault], - [yfdaiTokenAddress, YfDaiETHLP60DayVault], - [yfdaiTokenAddress, YfDaiETHLP90DayVault], - [yfdaiTokenAddress, impulsevenStakingAddress], - [yfdaiTokenAddress, YfDaiStakingAdddress] - ], ethBlock) - return balances -} - - module.exports = { - ethereum:{ - tvl: eth, - staking - }, + ethereum: { + tvl: sumTokensExport({ tokensAndOwners: [ + [yfdaiTokenAddress, YfDaiSafetradeStakingAddress], + [weth, wethVault], + [dai, daiVault], + ]}), + staking: staking([YfDaiStakingAdddress, YfDaiETHLP72HRSVault, YfDaiETHLP30DayVault, YfDaiETHLP60DayVault, YfDaiETHLP90DayVault, impulsevenStakingAddress,], yfdaiTokenAddress) + }, } diff --git a/projects/yieldwolf/index.js b/projects/yieldwolf/index.js index 22782306de..30d26cb6eb 100644 --- a/projects/yieldwolf/index.js +++ b/projects/yieldwolf/index.js @@ -1,105 +1,33 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const { unwrapLPsAuto } = require("../helper/unwrapLPs"); -const { - getChainTransform, -} = require("../helper/portedTokens"); +const { sumTokens2 } = require("../helper/unwrapLPs"); -const vaultsContractPolygon = "0xBF65023BcF48Ad0ab5537Ea39C9242de499386c9"; -const ignoreAddresses_polygon = ["0x0B048D6e01a6b9002C291060bF2179938fd8264c"]; - -const vaultsContractFantom = "0x876F890135091381c23Be437fA1cec2251B7c117"; -const vaultsContractCelo = "0xd54AA6fEeCc289DeceD6cd0fDC54f78079495E79"; -const vaultsContractAvax = "0xc9070B3EFE0aacC5AfB4B31C5DbDCA7C6B4bAAA9"; -const vaultsContractCronos = "0x8fEc7A778Cba11a98f783Ebe9826bEc3b5E67F95"; -const vaultsContractHarmony = "0x8fec7a778cba11a98f783ebe9826bec3b5e67f95"; -const vaultsContractBsc = "0xD3aB90CE1eEcf9ab3cBAE16A00acfbace30EbD75"; - -const calcTvl = async (chain, block, masterchef, ignoreAddresses = []) => { - const balances = {} - const transformAddress = await getChainTransform(chain) - const poolLength = ( - await sdk.api.abi.call({ abi: abi.poolLength, target: masterchef, chain, block, }) - ).output; - const calls = [] - for (let index = 0; index < poolLength; index++) - calls.push({ params: index }) - - const { output: res } = await sdk.api.abi.multiCall({ - target: masterchef, - abi: abi.poolInfo, - calls: calls, - chain, block, - }); - - const stratCalls = res.map(i => ({ target: i.output.strategy })) - - const { output: stratResponse } = await sdk.api.abi.multiCall({ - abi: abi.totalStakeTokens, - calls: stratCalls, - chain, block, - }); - - res.forEach(({ output }, i) => { - const token = output.stakeToken - if (ignoreAddresses.some((addr) => addr.toLowerCase() === token.toLowerCase())) return; - sdk.util.sumSingleBalance(balances, transformAddress(token), stratResponse[i].output) - }) - - await unwrapLPsAuto({ balances, block, chain, transformAddress }) - return balances -}; - -const polygonTvl = async (ts, _, chainBlocks) => { - return calcTvl("polygon", chainBlocks["polygon"], vaultsContractPolygon, ignoreAddresses_polygon); -}; - -const fantomTvl = async (ts, _, chainBlocks) => { - return calcTvl("fantom", chainBlocks["fantom"], vaultsContractFantom,); -}; - -const celoTvl = async (ts, _, chainBlocks) => { - return calcTvl("celo", chainBlocks["celo"], vaultsContractCelo,); -}; - -const avaxTvl = async (ts, _, chainBlocks) => { - return calcTvl("avax", chainBlocks["avax"], vaultsContractAvax,); -}; - -const cronosTvl = async (ts, _, chainBlocks) => { - return calcTvl("cronos", chainBlocks["cronos"], vaultsContractCronos,); -}; - -const harmonyTvl = async (ts, _, chainBlocks) => { - return calcTvl("harmony", chainBlocks["harmony"], vaultsContractHarmony,); -}; - -const bscTvl = async (ts, _, chainBlocks) => { - return calcTvl("bsc", chainBlocks["bsc"], vaultsContractBsc,); -}; +const blacklistedTokens = ["0x0B048D6e01a6b9002C291060bF2179938fd8264c"]; module.exports = { misrepresentedTokens: true, - polygon: { - tvl: polygonTvl, - }, - fantom: { - tvl: fantomTvl, - }, - celo: { - tvl: celoTvl, - }, - avax: { - tvl: avaxTvl, - }, - cronos: { - tvl: cronosTvl, - }, - harmony: { - tvl: harmonyTvl, - }, - bsc: { - tvl: bscTvl, - }, methodology: "We count liquidity on all the Vaults through YieldWolf Contracts", -}; +} + +const config = { + polygon: '0xBF65023BcF48Ad0ab5537Ea39C9242de499386c9', + fantom: '0x876F890135091381c23Be437fA1cec2251B7c117', + celo: '0xd54AA6fEeCc289DeceD6cd0fDC54f78079495E79', + avax: '0xc9070B3EFE0aacC5AfB4B31C5DbDCA7C6B4bAAA9', + cronos: '0x8fEc7A778Cba11a98f783Ebe9826bEc3b5E67F95', + harmony: '0x8fec7a778cba11a98f783ebe9826bec3b5e67f95', + bsc: '0xD3aB90CE1eEcf9ab3cBAE16A00acfbace30EbD75', +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: config[chain]}) + const strategies = poolInfos.map(i => i.strategy) + const tokens = poolInfos.map(i => i.stakeToken) + const bals = await api.multiCall({ abi: abi.totalStakeTokens, calls: strategies}) + api.add(tokens, bals) + blacklistedTokens.forEach(token => api.removeTokenBalances(token)) + return sumTokens2({ api, resolveLP: true }) + } + } +}) \ No newline at end of file diff --git a/projects/zencha/index.js b/projects/zencha/index.js index ba46550394..4561a451f6 100644 --- a/projects/zencha/index.js +++ b/projects/zencha/index.js @@ -1,55 +1,10 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require("../helper/unwrapLPs"); const swapFlashLoan = '0x2D027B49B8960810F84D5fE172d07FFf62311852'; -const tokens = { - DAI: { - boba: ADDRESSES.boba.DAI, - eth: ADDRESSES.ethereum.DAI - }, - USDT: { - boba: ADDRESSES.boba.USDT, - eth: ADDRESSES.ethereum.USDT - }, - USDC: { - boba: ADDRESSES.boba.USDC, - eth: ADDRESSES.ethereum.USDC - } -}; - -function transform(address) { - for (let token of Object.keys(tokens)) { - if (tokens[token].boba == address) { - return tokens[token].eth; - } - } - - return address; -} - -async function tvl(timestamp, block, chainBlocks) { - block = chainBlocks.boba; - const balances = {}; - - await sumTokens( - balances, - [ - [tokens.DAI.boba, swapFlashLoan], - [tokens.USDT.boba , swapFlashLoan], - [tokens.USDC.boba , swapFlashLoan], - ], - block, - "boba", - transform - ); - - return balances; -} - module.exports = { boba: { - tvl + tvl: sumTokensExport({ owner: swapFlashLoan, tokens: [ADDRESSES.boba.USDC, ADDRESSES.boba.USDT, ADDRESSES.boba.DAI] }), } -}; -// node test.js projects/zencha/index.js \ No newline at end of file +} \ No newline at end of file diff --git a/projects/zest-protocol/index.js b/projects/zest-protocol/index.js index dee057d6a7..7f134eb7cf 100644 --- a/projects/zest-protocol/index.js +++ b/projects/zest-protocol/index.js @@ -1,176 +1,10 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const Abis = require("./abi.json"); -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); - -const Contracts = { - fantom: { - wftm: ADDRESSES.fantom.WFTM, - wethBank: "0xB717b014BC34fc904396585CbF4FC1B0BBe603B4", - weth: "0x74b23882a30290451A17c44f4F05243b6b58C76d", - zsp: "0x2C26617034C840C9412CD67aE0Fc68A6755D00BF", - ftmz: "0x9e219b51891e2c62ea8a2ea438d331eae7c68484", - usdc: ADDRESSES.fantom.USDC, - bank: "0x9fc3E5259Ba18BD13366D0728a256E703869F21D", - multiFeeDistribution: "0x1b6deD5c603d66800B0DDf566Ec316a344C7BcaD", - chef: "0xFdAa392FCF8946e8e658B9f36ffbE6659cB40edf", - wftmLps: [ - { - address: "0xcAa542473912a727C7F6715458db8C5f9b0291FC", // ZSP-WFTM - isToken0: true, - }, - { - address: "0xd02cc84b296ef3332Ca9371fC633bB7D7a51ad32", // FTMz-WFTM - isToken0: true, - }, - ], - wethLps: [ - { - address: "0x4f9b08C06A19EBee8871C3b563C38326927Ac945", // ETHz-WETH - isToken0: true, - }, - ], - usdcLps: [ - { - address: "0x2ABDC15324a38093e07b9EBF7c15bD8e672E212e", // ZSP-USDC - isToken0: true, - }, - ], - }, -}; - -async function calcTvl(timestamp, ethBlock, chainBlocks) { - const block = chainBlocks.fantom; - const chain = "fantom"; - - const bankBalance = await sdk.api.abi.call({ - target: Contracts.fantom.bank, - abi: Abis.bank.usableCollateralBalance, - chain: chain, - block, - }); - - const bankBalanceWeth = await sdk.api.abi.call({ - target: Contracts.fantom.wethBank, - abi: Abis.bank.usableCollateralBalance, - chain: chain, - block, - }); - - return { - [`fantom:${Contracts.fantom.wftm}`]: +bankBalance.output, - [`fantom:${Contracts.fantom.weth}`]: +bankBalanceWeth.output, - }; -} - -async function calcStakingTvl(timestamp, ethBlock, chainBlocks) { - const block = chainBlocks.fantom; - const chain = "fantom"; - - const stakingData = await sdk.api.abi.call({ - target: Contracts.fantom.multiFeeDistribution, - abi: Abis.multiFeeDistribution.totalSupply, - chain: chain, - block, - }); - - return { - [`fantom:${Contracts.fantom.zsp}`]: stakingData.output, - }; -} - -async function calcLp(lps, block, chain, baseToken) { - const reserves = ( - await sdk.api.abi.multiCall({ - calls: lps.map((lp) => ({ - target: lp.address, - params: [], - })), - abi: Abis.pair.getReserves, - block, - chain, - }) - ).output; - const totalSupplies = ( - await sdk.api.abi.multiCall({ - calls: lps.map((lp) => ({ - target: lp.address, - params: [], - })), - abi: "erc20:totalSupply", - block, - chain, - }) - ).output; - const balances = ( - await sdk.api.abi.multiCall({ - calls: lps.map((lp) => ({ - target: lp.address, - params: [Contracts.fantom.chef], - })), - abi: "erc20:balanceOf", - block, - chain, - }) - ).output; - - const results = lps.map((lp, index) => - new BigNumber( - reserves[index].output[lp.isToken0 ? "_reserve0" : "_reserve1"] - ) - .times(2) - .times(new BigNumber(balances[index].output)) - .idiv(new BigNumber(totalSupplies[index].output)) - ); - - const total = results.reduce( - (total, num) => total.plus(num), - new BigNumber(0) - ); - - return { - [`fantom:${baseToken}`]: total.toString(10), - }; -} - -async function ftmPool2(timestamp, block, chainBlocks) { - const zsp = await calcLp( - Contracts.fantom.wftmLps, - chainBlocks.fantom, - "fantom", - Contracts.fantom.zsp - ); - - const ftmz = await calcLp( - Contracts.fantom.wftmLps, - chainBlocks.fantom, - "fantom", - Contracts.fantom.wftm - ); - - const weth = await calcLp( - Contracts.fantom.wethLps, - chainBlocks.fantom, - "fantom", - Contracts.fantom.weth - ); - - const usdc = await calcLp( - Contracts.fantom.usdcLps, - chainBlocks.fantom, - "fantom", - Contracts.fantom.usdc - ); - - return { ...zsp, ...ftmz, ...weth, ...usdc }; -} - module.exports = { methodology: "TVL of collateral added to Zest Protocol in order to mint Synthetic Assets.", + deadFrom: '2022-08-10', fantom: { - tvl: calcTvl, - pool2: ftmPool2, - staking: calcStakingTvl, + tvl: () => ({}), + pool2: () => ({}), + staking: () => ({}), }, }; diff --git a/projects/zombi/index.js b/projects/zombi/index.js index cdc2ee54d9..cfd01c10d0 100644 --- a/projects/zombi/index.js +++ b/projects/zombi/index.js @@ -1,27 +1,11 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { zombiTvl } = require("./zombi"); - -const token = "0xda5db6c2a2fd53a2d3fc4246bbd8acce5f93bae1"; -const share = "0xb3584d821109e49a068a8c3a05f367bc54061252"; -const rewardPool = "0x3E6a10C75d33D4fF95A33342d33A73176Bcd0629"; -const rewardPoolGeneris = "0xDa0cB4684b02D8bB253Af60a942625D1BC9Ba53d"; -const masonry = "0x4E2950365024D27956538AB27C97083634DDBE90"; - -const pool2LPs = [ - "0xe577DF94b4Ea94399B7438e27EA1Ba81717464A0", - "0x5db45a30732cf98fda72b9b91a0c554dc1f2e83b" -]; -const listedTokenGeneris = [ - ADDRESSES.fantom.WFTM,//wftm - '0x74b23882a30290451A17c44f4F05243b6b58C76d',//weth - '0x841FAD6EAe12c286d1Fd18d1d525DFfA75C7EFFE',//boo - '0xaD996A45fd2373ed0B10Efa4A8eCB9de445A4302'//alpaca -] - module.exports = { hallmarks: [ [1646870400, "Rug Pull"] ], deadFrom: 1646870400, - ...zombiTvl(token, share, rewardPool, rewardPoolGeneris, masonry, pool2LPs, listedTokenGeneris, "fantom", undefined, false, "0xe577DF94b4Ea94399B7438e27EA1Ba81717464A0") + fantom: { + tvl: () => ({}), + pool2: () => ({}), + staking: () => ({}), + }, } diff --git a/projects/zombi/zombi.js b/projects/zombi/zombi.js deleted file mode 100644 index eca87e7e4f..0000000000 --- a/projects/zombi/zombi.js +++ /dev/null @@ -1,92 +0,0 @@ -const { stakingUnknownPricedLP } = require("../helper/staking"); -const sdk = require("@defillama/sdk"); -const token0Abi = 'address:token0' -const token1Abi = 'address:token1' -const { default: BigNumber } = require("bignumber.js"); - -function zombiTvl(token, share, rewardPool, rewardPool2, masonry, pool2LPs, listedTokenGeneris, chain = "ethereum", transform = undefined, tokensOnCoingecko = true, lpWithShare = undefined) { - if (transform === undefined) transform = addr => `${chain}:${addr}`; - - const pool2 = async (timestamp, block, chainBlocks) => { - let balances = {}; - token = token.toLowerCase(); - share = share.toLowerCase(); - block = chainBlocks[chain]; - const pool2Balances = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p, - params: rewardPool - })), - abi: "erc20:balanceOf", - block, - chain - })).output; - const supplies = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p - })), - abi: "erc20:totalSupply", - block, - chain - })).output; - const pool2Token0 = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p - })), - abi: token0Abi, - block, - chain - })).output; - const pool2Token1 = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map(p => ({ - target: p - })), - abi: token1Abi, - block, - chain - })).output; - - for (let i = 0; i < pool2LPs.length; i++) { - let listedToken; - const token0 = pool2Token0[i].output.toLowerCase(); - const token1 = pool2Token1[i].output.toLowerCase(); - if (token0 === token || token0 === share) { - listedToken = token1; - } - else if (token1 === token || token1 === share) { - listedToken = token0; - } - const listedTokenBalance = (await sdk.api.erc20.balanceOf({ - target: listedToken, - owner: pool2LPs[i], - block, - chain - })).output; - const balance = BigNumber(pool2Balances[i].output).times(listedTokenBalance).div(supplies[i].output).times(2).toFixed(0); - sdk.util.sumSingleBalance(balances, transform(listedToken), balance); - } - // get tvl generis pool - for (let i = 0; i < listedTokenGeneris.length; i++) { - const balance = (await sdk.api.erc20.balanceOf({ - target: listedTokenGeneris[i], - owner: rewardPool2, - block, - chain - })).output; - sdk.util.sumSingleBalance(balances, transform(listedTokenGeneris[i]), balance); - } - return balances - } - - return { - [chain]: { - tvl: async () => ({}), - staking: stakingUnknownPricedLP(masonry, share, chain, lpWithShare), - pool2 - } - } -} - -module.exports = { - zombiTvl -} \ No newline at end of file diff --git a/projects/zombie-network/index.js b/projects/zombie-network/index.js index 1a34a8c9ed..2cc2b3a615 100644 --- a/projects/zombie-network/index.js +++ b/projects/zombie-network/index.js @@ -1,45 +1,28 @@ const sdk = require("@defillama/sdk"); -const { getChainTransform } = require("../helper/portedTokens"); const BLOOD_TOKEN_ADDR = "0x07709260f6C431bc2CB1480F523F4F7c639a5155"; const FOUNTAIN_ADDR = "0x028c7738353a939E654bBDf5Bd57EbB17755cfa0"; const VAULT_ADDR = "0xD7656b90263f6ceaB35370d37f08fD1aEc19A421"; -const chain = 'klaytn' -let balanceResolve +async function staking(api) { -function getTvlPromise(key) { - return async (ts, _block, chainBlocks) => { - if (!balanceResolve) - balanceResolve = getTvl(ts, _block, chainBlocks) - return (await balanceResolve)[key] - } -} -async function getTvl(timestamp, ethBlock, chainBlocks) { - const block = chainBlocks[chain] - const transform = await getChainTransform(chain); - - const balances = { - staking: {}, - pool2: {}, - tvl: {} - } + const { output: klayBalance } = await sdk.api2.eth.getBalance({ target: FOUNTAIN_ADDR, ...api }) + const [bldBalance, stakingBalance] = await api.multiCall({ abi: 'erc20:balanceOf', calls: [FOUNTAIN_ADDR, VAULT_ADDR], target: BLOOD_TOKEN_ADDR }) - const { output: klayBalance } = await sdk.api.eth.getBalance({ target: FOUNTAIN_ADDR, block, chain}) - const { output: bldBalance } = await sdk.api.erc20.balanceOf({ target: BLOOD_TOKEN_ADDR, owner: FOUNTAIN_ADDR, block, chain}) - const { output: stakingBalance } = await sdk.api.erc20.balanceOf({ target: BLOOD_TOKEN_ADDR, owner: VAULT_ADDR, block, chain}) - - const pool2Balance = klayBalance * 2 / 10 ** 18 const bloodPrice = klayBalance / bldBalance - const staking = stakingBalance * bloodPrice / 10 ** 18 - sdk.util.sumSingleBalance(balances.pool2, 'klay-token', pool2Balance ) - sdk.util.sumSingleBalance(balances.staking, 'klay-token', staking ) + const staking = stakingBalance * bloodPrice / 1e18 + console.log('staking', staking, klayBalance, bldBalance, stakingBalance, bloodPrice) + api.addCGToken('klay-token', staking) +} - return balances +async function pool2(api) { + const { output: klayBalance } = await sdk.api2.eth.getBalance({ target: FOUNTAIN_ADDR, ...api }) + const pool2Balance = klayBalance * 2 / 1e18 + api.addCGToken('klay-token', pool2Balance) } module.exports = { - klaytn: - ['tvl', 'staking', 'pool2'] - .reduce((acc, key) => ({ ...acc, [key]: getTvlPromise(key) }), {}), + klaytn: { + tvl: () => ({}), staking, pool2, + } }; From e6fe861c529ae8041fe52b8f5fb1eb46745df940 Mon Sep 17 00:00:00 2001 From: Trisome-Bedrock <151131601+Trisome-Bedrock@users.noreply.github.com> Date: Sat, 14 Sep 2024 21:39:17 +0800 Subject: [PATCH 0381/1768] add the following tokens for Vault of uniBTC project: Arbitrum(WBTC), Mode(WBTC) (#11632) Co-authored-by: Trisome-Bedrock --- projects/unibtc/index.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/projects/unibtc/index.js b/projects/unibtc/index.js index 467cf04db4..ad9c87b80b 100644 --- a/projects/unibtc/index.js +++ b/projects/unibtc/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const defaultVault = '0xF9775085d726E782E83585033B58606f7731AB18' +const extraVault = '0x84E5C854A7fF9F49c888d69DECa578D406C26800' const fbtc0 = '0xc96de26018a54d51c097160568752c4e3bd6c364' const fbtc1 = '0xd681C5574b7F4E387B608ed9AF5F5Fc88662b37c' @@ -9,6 +10,14 @@ const config = { vault: '0x047D41F2544B7F63A8e991aF2068a363d210d6Da', tokens: [ADDRESSES['ethereum'].WBTC, fbtc0, fbtc1] }, + arbitrum: { + vault: extraVault, + tokens: [ADDRESSES['arbitrum'].WBTC] + }, + mode: { + vault: extraVault, + tokens: [ADDRESSES['mode'].WBTC] + }, optimism: { vault: defaultVault, tokens: [ADDRESSES['optimism'].WBTC] @@ -22,11 +31,11 @@ const config = { tokens: [ADDRESSES['bob'].WBTC] }, zeta: { - vault: '0x84E5C854A7fF9F49c888d69DECa578D406C26800', + vault: extraVault, tokens: [ADDRESSES['zeta'].BTC] }, bsc: { - vault: '0x84E5C854A7fF9F49c888d69DECa578D406C26800', + vault: extraVault, tokens: [fbtc0, ADDRESSES['bsc'].BTCB] }, bsquared: { From dd9aafb0ba5dff70a60edd6076062ca931911ffb Mon Sep 17 00:00:00 2001 From: Abhishek Date: Sat, 14 Sep 2024 17:39:35 +0400 Subject: [PATCH 0382/1768] (EddyFinance)Added Ultiverse stableSwap pool (#11633) --- projects/eddyfinance/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/eddyfinance/index.js b/projects/eddyfinance/index.js index d886b08aea..ec2774d676 100644 --- a/projects/eddyfinance/index.js +++ b/projects/eddyfinance/index.js @@ -7,7 +7,8 @@ const getReserves = 'function getReserves() view returns (uint112 _reserve0, uin const stablePools = [ '0x448028804461e8e5a8877c228F3adFd58c3Da6B6', // 4 asset pool '0x01a9cd602c6c3f05ea9a3a55184c2181bd43e4b8', // 2 asset pool accumulated finance - '0xee1629de70afaf3ae3592a9d6d859949750aa697' // 2 asset pool zearn + '0xee1629de70afaf3ae3592a9d6d859949750aa697', // 2 asset pool zearn + '0x89cb3fA2A7910A268e9f7F619108aFADBD7587c4' // 2 asset UltiVerse pool ] async function stableSwapTvl(api) { From 7945e60787a96979129ede73f21714e1b011f3f0 Mon Sep 17 00:00:00 2001 From: 0xYFLOW <139814596+0xYFLOW@users.noreply.github.com> Date: Sat, 14 Sep 2024 17:41:05 +0400 Subject: [PATCH 0383/1768] add additional render tvl (#11634) --- projects/yieldflow/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/yieldflow/index.js b/projects/yieldflow/index.js index 94b58c40ca..54a830821b 100644 --- a/projects/yieldflow/index.js +++ b/projects/yieldflow/index.js @@ -96,11 +96,12 @@ const config = { '0x47Dd57DFe9e01616e4Adc28015243Ea6A2C09cEC', '0x0a4a169a6b2ac75c86e2F0e42822fdEA13fB1CC8', '0xafFA16b152232dAd8BF3AaDF6bb6F895A836F917', - '0xFB04d48e4CE9C042188Ef933ff4cf58921Ab59B8' + '0xFB04d48e4CE9C042188Ef933ff4cf58921Ab59B8', + '0x36232356758c746A50AD5078815F09e39E34628d' ] } } Object.keys(config).forEach(chain => { module.exports[chain] = { tvl } -}) \ No newline at end of file +}) From 3d8c43232e2555f2753dbd93599e6dad72c33a14 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 14 Sep 2024 18:57:51 +0100 Subject: [PATCH 0384/1768] add new tron wallets --- projects/bitunix-cex/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/bitunix-cex/index.js b/projects/bitunix-cex/index.js index 196c45f12b..672e9cc210 100644 --- a/projects/bitunix-cex/index.js +++ b/projects/bitunix-cex/index.js @@ -28,7 +28,16 @@ const config = { "TLnMjGrgWTZLadqNRzbQPTzDPWbH6Dc1HA", "TRcvGsNpzkm8LdhLYmqBWESRrTUv7BPQ8t", "TWJ6R2EbFC5KdZFwLNj9GDiENn7WyAUjQE", - "TJqCunxn9xYtnXtP8v5t54W7uR2huUbFvS", + 'TJqCunxn9xYtnXtP8v5t54W7uR2huUbFvS', + 'THY84dJ4EPsPddwJP2URsqkDzHwVB9uk48', + 'TQTn7XQmZ9p2jToTV2rPbrVLZSftaZjK9y', + 'TLvpkJy9cn695PZLU2fEKYbfVDDpUymZvR', + 'TGmri3M7L5bhMVZdEViUX9tdARpJ4ANdNb', + 'TQTgNHaHLPEcCsvfFciriXLvQDktWNQ7yM', + 'TVaRQRPJh3MT3AfGLVZuaTdJL8nd176tpB', + 'TXP66hCnRzRP4ZNbQcNSWcBV4C5JnHK51F', + 'TP5UzNzk4tL2Jo6twHavUM9s9NjUPSgrvN', + 'TJRkfdgdQTSTmfQQzFy8RR6o73eLCEorSH' ], }, } From 2de20e99c335b6eb635afbd679cfbf0e1be89cb7 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 14 Sep 2024 19:19:07 +0100 Subject: [PATCH 0385/1768] add new file --- projects/zomb2/index.js | 2 +- projects/zomb2/zombi.js | 92 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 projects/zomb2/zombi.js diff --git a/projects/zomb2/index.js b/projects/zomb2/index.js index 54cd40a12a..0c3df29c11 100644 --- a/projects/zomb2/index.js +++ b/projects/zomb2/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { zombiTvl } = require("../zombi/zombi"); +const { zombiTvl } = require("../zomb2/zombi"); const token = "0xA87bcE04d4a396DF40cC1be3a21CF04592C08290"; const share = "0x9E594379bC7e2034fCc8607Fb8C57F149Fb68284"; diff --git a/projects/zomb2/zombi.js b/projects/zomb2/zombi.js new file mode 100644 index 0000000000..eca87e7e4f --- /dev/null +++ b/projects/zomb2/zombi.js @@ -0,0 +1,92 @@ +const { stakingUnknownPricedLP } = require("../helper/staking"); +const sdk = require("@defillama/sdk"); +const token0Abi = 'address:token0' +const token1Abi = 'address:token1' +const { default: BigNumber } = require("bignumber.js"); + +function zombiTvl(token, share, rewardPool, rewardPool2, masonry, pool2LPs, listedTokenGeneris, chain = "ethereum", transform = undefined, tokensOnCoingecko = true, lpWithShare = undefined) { + if (transform === undefined) transform = addr => `${chain}:${addr}`; + + const pool2 = async (timestamp, block, chainBlocks) => { + let balances = {}; + token = token.toLowerCase(); + share = share.toLowerCase(); + block = chainBlocks[chain]; + const pool2Balances = (await sdk.api.abi.multiCall({ + calls: pool2LPs.map(p => ({ + target: p, + params: rewardPool + })), + abi: "erc20:balanceOf", + block, + chain + })).output; + const supplies = (await sdk.api.abi.multiCall({ + calls: pool2LPs.map(p => ({ + target: p + })), + abi: "erc20:totalSupply", + block, + chain + })).output; + const pool2Token0 = (await sdk.api.abi.multiCall({ + calls: pool2LPs.map(p => ({ + target: p + })), + abi: token0Abi, + block, + chain + })).output; + const pool2Token1 = (await sdk.api.abi.multiCall({ + calls: pool2LPs.map(p => ({ + target: p + })), + abi: token1Abi, + block, + chain + })).output; + + for (let i = 0; i < pool2LPs.length; i++) { + let listedToken; + const token0 = pool2Token0[i].output.toLowerCase(); + const token1 = pool2Token1[i].output.toLowerCase(); + if (token0 === token || token0 === share) { + listedToken = token1; + } + else if (token1 === token || token1 === share) { + listedToken = token0; + } + const listedTokenBalance = (await sdk.api.erc20.balanceOf({ + target: listedToken, + owner: pool2LPs[i], + block, + chain + })).output; + const balance = BigNumber(pool2Balances[i].output).times(listedTokenBalance).div(supplies[i].output).times(2).toFixed(0); + sdk.util.sumSingleBalance(balances, transform(listedToken), balance); + } + // get tvl generis pool + for (let i = 0; i < listedTokenGeneris.length; i++) { + const balance = (await sdk.api.erc20.balanceOf({ + target: listedTokenGeneris[i], + owner: rewardPool2, + block, + chain + })).output; + sdk.util.sumSingleBalance(balances, transform(listedTokenGeneris[i]), balance); + } + return balances + } + + return { + [chain]: { + tvl: async () => ({}), + staking: stakingUnknownPricedLP(masonry, share, chain, lpWithShare), + pool2 + } + } +} + +module.exports = { + zombiTvl +} \ No newline at end of file From 8d0a600481ea2b3b3a0aba29071c36dd3359c609 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 15 Sep 2024 13:41:52 +0200 Subject: [PATCH 0386/1768] code refactor --- projects/ante/index.js | 48 ++----- projects/ape-fi/index.js | 43 ++---- projects/aperocket/abi.json | 4 - projects/aperocket/index.js | 60 ++------- projects/aperture/abi.json | 6 - projects/aperture/getVaults.js | 28 ---- projects/aperture/index.js | 50 ++----- projects/bnpl-pay/index.js | 83 ++---------- projects/cubfinance/index.js | 22 +-- projects/invar-finance/index.js | 31 +---- projects/inverse/index.js | 199 +++------------------------- projects/ipor/index.js | 14 +- projects/jarvis/index.js | 109 ++++----------- projects/lixir/index.js | 83 ++++-------- projects/llamapay/index.js | 51 +++---- projects/multiplierfinance/index.js | 114 +++++----------- projects/singularityDAO/index.js | 87 +++--------- projects/valuedefi.js | 23 +--- 18 files changed, 205 insertions(+), 850 deletions(-) delete mode 100644 projects/aperocket/abi.json delete mode 100644 projects/aperture/abi.json delete mode 100644 projects/aperture/getVaults.js diff --git a/projects/ante/index.js b/projects/ante/index.js index 27f4b2a483..ef79007b87 100644 --- a/projects/ante/index.js +++ b/projects/ante/index.js @@ -1,5 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); const { sumTokens2, nullAddress } = require('../helper/unwrapLPs'); const { createIncrementArray } = require('../helper/utils'); @@ -95,60 +94,37 @@ const CONFIG = { }; Object.keys(CONFIG).forEach((chain) => { - const { startBlock, factories } = CONFIG[chain]; + const { factories } = CONFIG[chain]; module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => { - let calls, currentRes; + tvl: async (api) => { + let currentRes; const pools = []; - let tokens = []; + let tokens = [nullAddress]; let i = 0; - const length = 4; + const length = 10 for (const factory of factories) { if (factory.version >= '0.6') { - const controller = await sdk.api.abi.call({ - target: factory.factory, - abi: abis.getController, - chain, - block, - }); - const allowedTokens = await sdk.api.abi.call({ - target: controller.output, - abi: abis.getAllowedTokens, - chain, - block, - }); - - tokens = [...new Set([...tokens, ...allowedTokens.output])]; + const controller = await api.call({ target: factory.factory, abi: abis.getController, }); + const allowedTokens = await api.call({ target: controller, abi: abis.getAllowedTokens, }); + tokens.push(...allowedTokens); } do { - calls = createIncrementArray(4).map((j) => ({ - params: j + i * length, - })); - const { output: res } = await sdk.api.abi.multiCall({ + const calls = createIncrementArray(length).map((j) => ({ params: j + i * length, })); + const res = await api.multiCall({ target: factory.factory, abi: abis.allPools, calls, - chain, - block, permitFailure: true, }); - currentRes = res.map((i) => i.output).filter((i) => i); - + currentRes = res.filter((i) => i) pools.push(...currentRes); - i++; } while (currentRes.length === length); } - return sumTokens2({ - tokens: [nullAddress, ...tokens], - owners: pools, - chain, - block, - }); + return sumTokens2({ tokens, owners: pools, api }); }, - start: startBlock, }; }); diff --git a/projects/ape-fi/index.js b/projects/ape-fi/index.js index b2ff6182dd..3f7a647b4d 100644 --- a/projects/ape-fi/index.js +++ b/projects/ape-fi/index.js @@ -1,6 +1,5 @@ -const sdk = require("@defillama/sdk"); -const { default: BigNumber } = require("bignumber.js"); -const { sumTokens2, sumTokensExport } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require("../helper/unwrapLPs"); +const { staking } = require("../helper/staking"); const APE = "0x4d224452801ACEd8B2F0aebE155379bb5D594381"; const crvFRAX = "0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC"; @@ -12,31 +11,10 @@ const fraxStakingWrapper = "0x6a20FC1654A2167d00614332A5aFbB7EBcD9d414"; const apeAPE = "0xcaB90816f91CC25b04251857ED6002891Eb0D6Fa"; -const tvl = async (timestamp, block) => { - const toa = [ - [APE, apeAPE], - ] +const tvl = async (api) => { + const apeUSDCrvFraxTotalSupply = await api.call({ abi: 'erc20:totalSupply', target: apeUSDCrvFrax }) - const balances = await sumTokens2({ block, tokensAndOwners: toa }) - - const { - output: [ - { output: apeUSDCrvFraxTotalSupply }, - ] - } = await sdk.api.abi.multiCall({ - calls: [apeUSDCrvFrax].map((target) => ({ target })), - abi: "erc20:totalSupply", - block, - }); - - const { - output: [ - { output: amoV2LPBalance }, - { output: multisigLPBalance }, - { output: stakedLPBalance }, - { output: crvFraxBalance }, - ] - } = await sdk.api.abi.multiCall({ + const [amoV2LPBalance, multisigLPBalance, stakedLPBalance, crvFraxBalance,] = await api.multiCall({ calls: [ { target: convexRewardPool, params: amoV2, }, { target: convexRewardPool, params: multisig, }, @@ -44,13 +22,10 @@ const tvl = async (timestamp, block) => { { target: crvFRAX, params: apeUSDCrvFrax, }, ], abi: "erc20:balanceOf", - block: block, }); - const apeUSDCrvFraxShare = BigNumber((+stakedLPBalance + +multisigLPBalance + +amoV2LPBalance) /apeUSDCrvFraxTotalSupply ).toFixed(0) - const crvFraxShare = BigNumber(crvFraxBalance * apeUSDCrvFraxShare).toFixed(0) - sdk.util.sumSingleBalance(balances, crvFRAX, crvFraxShare) - return balances + const apeUSDCrvFraxShare = (+stakedLPBalance + +multisigLPBalance + +amoV2LPBalance) / apeUSDCrvFraxTotalSupply + api.add(crvFRAX, crvFraxBalance * apeUSDCrvFraxShare) }; module.exports = { @@ -61,9 +36,11 @@ module.exports = { ['0xfb7a3798c6fff187c8cf08c0b1322b52cfa70ace', '0xbcc28F6BA03642B9B5a3E7ad5C8f27991576796c'], // uni v2 ['0x84ab278a8140a8a9759de17895a8da8d756618f3', '0x0a2c0a2033eccc7cc57e42901f04b96972131579'], // uni v2 ['0x04b727C7e246CA70d496ecF52E6b6280f3c8077D', '0x0C63197017970596044f80778282BB5B2208f018'], // curve - ] + ], + resolveLP: true, }), tvl, + staking: staking(apeAPE, APE), }, start: 15688276, methodology: diff --git a/projects/aperocket/abi.json b/projects/aperocket/abi.json deleted file mode 100644 index 8f90529e6e..0000000000 --- a/projects/aperocket/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "tvlOfPool": "function tvlOfPool(address vault) view returns (uint256)", - "tvlOfVault": "function tvlOfVault(address _vault, bool isLp, address tokenRouter) view returns (uint256)" -} \ No newline at end of file diff --git a/projects/aperocket/index.js b/projects/aperocket/index.js index d73d0b39ed..c53df55b26 100644 --- a/projects/aperocket/index.js +++ b/projects/aperocket/index.js @@ -1,12 +1,5 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); - -/* Certain portion of TVL accounted by their site is coming from their own native token - * in differente blockchains (i.e, bsc and polygon). Aprox $6.0M - */ - -const V2_READER = "0xDc84cbf85ADA13ACAe796FAa4472C19cC901b042" -const MERCURY_READER = "0xc9e54c7ec73aEe86e2BB07c4c6B65BE8BD86Ca90" +const { staking } = require("../helper/staking"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const V2_VAULTS_CONTRACTS_BSC = [ "0xa13eF34F11cD905A1aACe891e3Fd1b355D770e7F", // BANANA @@ -38,54 +31,17 @@ const V2_VAULTS_CONTRACTS_BSC = [ "0x1AFB491895D301a7cea026a5c65316b2C05A56B4", // ETH-BTCB LP Maximizer (Biswap) ]; -const MERCURY_SINGLE_VAULTS_CONTRACTS_BSC = [ - { - address: "0xFfDcD49d902d71445B93DCbFa51E2F9797de05C9", // BANANA - isLp: false, - router: "0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7", - }, -]; - -const bscTvl = async (timestamp, block, chainBlocks) => { - block = chainBlocks.bsc - const getV2Tvls = ( - await sdk.api.abi.multiCall({ - abi: abi.tvlOfPool, - calls: V2_VAULTS_CONTRACTS_BSC.map((vcb) => ({ - target: V2_READER, - params: [vcb], - })), - block, - chain: "bsc", - }) - ).output.map((tvl) => tvl.output); - - const v2Tvl = getV2Tvls.reduce((previousValue, currentValue) => Number(previousValue) + Number(currentValue)) - - const getMercuryTvls = ( - await sdk.api.abi.multiCall({ - abi: abi.tvlOfVault, - calls: MERCURY_SINGLE_VAULTS_CONTRACTS_BSC.map((vcb) => ({ - target: MERCURY_READER, - params: [vcb.address, vcb.isLp, vcb.router], - })), - block, - chain: "bsc", - }) - ).output.map((tvl) => tvl.output); - - const mercuryTvl = getMercuryTvls.reduce((previousValue, currentValue) => Number(previousValue) + Number(currentValue)) - - const totalTvl = (v2Tvl / 10 ** 18) + (mercuryTvl / 10 ** 18) - - return { - 'tether': totalTvl, - }; +const bscTvl = async (api) => { + const tokens = await api.multiCall({ abi: 'address:STAKING_TOKEN', calls: V2_VAULTS_CONTRACTS_BSC}) + const bals = await api.multiCall({ abi: 'uint256:balance', calls: V2_VAULTS_CONTRACTS_BSC}) + api.add(tokens, bals) + return sumTokens2({ api, resolveLP: true}) }; module.exports = { bsc: { tvl: bscTvl, + staking: staking("0xFfDcD49d902d71445B93DCbFa51E2F9797de05C9", "0x603c7f932ED1fc6575303D8Fb018fDCBb0f39a95"), }, methodology: `TVL consists of deposits made to the Earn Vaults of ApeRocket minus the 'SPACE' vault and the 'SPACE-BNB' pool2 vault which are created using the protocol's native token.`, misrepresentedTokens: true, diff --git a/projects/aperture/abi.json b/projects/aperture/abi.json deleted file mode 100644 index 1406ebe36a..0000000000 --- a/projects/aperture/abi.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "getStrategyId": "uint64:nextStrategyId", - "getLeverage": "uint256:leverageLevel", - "getEquityETHValue": "uint256:getEquityETHValue", - "getETHPx": "function getETHPx(address oracle, address token) view returns (uint256)" -} \ No newline at end of file diff --git a/projects/aperture/getVaults.js b/projects/aperture/getVaults.js deleted file mode 100644 index dc2a35f748..0000000000 --- a/projects/aperture/getVaults.js +++ /dev/null @@ -1,28 +0,0 @@ -const sdk = require('@defillama/sdk') -const abi = require("./abi.json"); -const { getParamCalls, getUniqueAddresses } = require('../helper/utils') - -const APERTURE_MANAGER_ADDRESS = "0xeD380115259FcC9088c187Be1279678e23a6E565"; - -const abis = { - strategyIdToMetadata: "function strategyIdToMetadata(uint64 arg0) view returns (string, string, address)", -} - -async function getVaults(chain, block) { - const { output: nextStrategyId } = await sdk.api.abi.call({ - target: APERTURE_MANAGER_ADDRESS, - abi: abi.getStrategyId, - chain, block, - }) - const { output: vaults } = await sdk.api.abi.multiCall({ - target: APERTURE_MANAGER_ADDRESS, - abi: abis.strategyIdToMetadata, - calls: getParamCalls(nextStrategyId), - chain, block, - }) - return getUniqueAddresses(vaults.map(i => i.output[2])); -} - -module.exports = { - getVaults, -}; diff --git a/projects/aperture/index.js b/projects/aperture/index.js index d7f269fc48..2edccc060a 100644 --- a/projects/aperture/index.js +++ b/projects/aperture/index.js @@ -1,45 +1,21 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const { default: BigNumber } = require("bignumber.js"); -const { getVaults } = require("./getVaults.js"); +const APERTURE_MANAGER_ADDRESS = "0xeD380115259FcC9088c187Be1279678e23a6E565"; -async function avax_tvl(timestamp, _, { avax: block }) { - const chain = "avax"; - const vaultContracts = await getVaults(chain, block); - const calls = vaultContracts.map((i) => ({ target: i })); - const equityETHValues = ( - await sdk.api.abi.multiCall({ - abi: abi.getEquityETHValue, - calls, - chain, - block, - }) - ).output; - - const vaultLeverage = ( - await sdk.api.abi.multiCall({ - abi: abi.getLeverage, - calls, - chain, - block, - }) - ).output; - - let balances = {}; - for (let i = 0; i < vaultContracts.length; i++) { - const bal = (vaultLeverage[i].output * equityETHValues[i].output) / 1e22; - sdk.util.sumSingleBalance( - balances, - `coingecko:avalanche-2`, - BigNumber(bal).toFixed(0) - ); - } +const abis = { + strategyIdToMetadata: "function strategyIdToMetadata(uint64 arg0) view returns (string, string, address strategy)", + "getStrategyId": "uint64:nextStrategyId", + "getLeverage": "uint256:leverageLevel", + "getEquityETHValue": "uint256:getEquityETHValue", + "getETHPx": "function getETHPx(address oracle, address token) view returns (uint256)" +} - return balances; +async function avax_tvl(api) { + const strategies = (await api.fetchList({ lengthAbi: 'nextStrategyId', itemAbi: abis.strategyIdToMetadata, target: APERTURE_MANAGER_ADDRESS, })).map(i => i.strategy) + const equityETHValues = await api.multiCall({ abi: abis.getEquityETHValue, calls: strategies }) + const vaultLeverage = await api.multiCall({ abi: abis.getLeverage, calls: strategies }) + vaultLeverage.map((v, i) => api.addCGToken(`avalanche-2`, equityETHValues[i] * v / 1e22)) } module.exports = { - timetravel: false, avax: { tvl: avax_tvl, }, diff --git a/projects/bnpl-pay/index.js b/projects/bnpl-pay/index.js index 3bfc52e509..2576332317 100644 --- a/projects/bnpl-pay/index.js +++ b/projects/bnpl-pay/index.js @@ -1,94 +1,29 @@ -const sdk = require('@defillama/sdk') -const { getParamCalls, getUniqueAddresses } = require('../helper/utils') +const { getUniqueAddresses } = require('../helper/utils') const { sumTokens2 } = require('../helper/unwrapLPs') -const chain = 'ethereum' const BNPL_FACTORY = '0x7edB0c8b428b97eA1Ca44ea9FCdA0835FBD88029' -let nodes = {} -async function getNodes(block) { - if (!nodes[block]) nodes[block] = _getNodes(block) - return nodes[block] -} - -async function _getNodes(block) { - const { output: nodeCount } = await sdk.api.abi.call({ - target: BNPL_FACTORY, - abi: abi.bankingNodeCount, - chain, block, - }) - - const nodeCalls = getParamCalls(nodeCount) - const { output: res } = await sdk.api.abi.multiCall({ - target: BNPL_FACTORY, - abi: abi.bankingNodesList, - calls: nodeCalls, - chain, block, - }) - const nodes = res.map(i => i.output.toLowerCase()) - const baseTokenCalls = nodes.map(i => ({ target: i })) - const { output: tokens } = await sdk.api.abi.multiCall({ - abi: abi.baseToken, - calls: baseTokenCalls, - chain, block, - }) - const baseTokenMapping = {} - tokens.forEach(({ input: { target }, output }) => baseTokenMapping[target] = output) - return { nodes, baseTokenMapping } -} +async function tvl(api) { + const nodes = await api.fetchList({ lengthAbi: abi.bankingNodeCount, itemAbi: abi.bankingNodesList, target: BNPL_FACTORY }) -async function tvl(_, block) { - const { nodes, baseTokenMapping, } = await getNodes(block) const tokens = getUniqueAddresses([ - // ...Object.keys(baseTokenMapping), '0x3Ed3B47Dd13EC9a98b44e6204A523E766B225811', // aave USDT '0xBcca60bB61934080951369a648Fb03DF4F96263C', // aave USDC ]) - return sumTokens2({ chain, block, owners: nodes, tokens, }) + return sumTokens2({ api, owners: nodes, tokens, }) } -async function staking(_, block) { - const { nodes } = await getNodes(block) +async function staking(api) { + const nodes = await api.fetchList({ lengthAbi: abi.bankingNodeCount, itemAbi: abi.bankingNodesList, target: BNPL_FACTORY }) + return sumTokens2({ - chain, block, owners: nodes, tokens: [ + api, owners: nodes, tokens: [ '0x84d821f7fbdd595c4c4a50842913e6b1e07d7a53', // BNPL ] }) } -async function borrowed(_, block) { - const { nodes, baseTokenMapping, } = await getNodes(block) - const balances = {} - const loanCountCalls = nodes.map(i => ({ target: i })) - const { output: loanCounts } = await sdk.api.abi.multiCall({ - abi: abi.getCurrentLoansCount, - calls: loanCountCalls, - chain, block, - }) - const loanToIdCalls = [] - loanCounts.forEach(({ input: { target}, output }) => { - const calls = getParamCalls(output) - calls.forEach(i => i.target = target) - loanToIdCalls.push(...calls) - }) - - const { output: loanIds } = await sdk.api.abi.multiCall({ - abi: abi.currentLoans, - calls: loanToIdCalls, - chain, block, - }) - - const idToLoanCalls = loanIds.map(({ input: { target }, output }) => ({ target, params: output })) - const { output: res } = await sdk.api.abi.multiCall({ - abi: abi.idToLoan, - calls: idToLoanCalls, - chain, block, - }) - - res.forEach(({ output, input: { target } }) => { - sdk.util.sumSingleBalance(balances, baseTokenMapping[target], output.principalRemaining) - }) - return balances +async function borrowed(api) { } const abi = { diff --git a/projects/cubfinance/index.js b/projects/cubfinance/index.js index 4d6499ccd1..82be384f66 100644 --- a/projects/cubfinance/index.js +++ b/projects/cubfinance/index.js @@ -1,31 +1,15 @@ const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); const { sumTokens2 } = require('../helper/unwrapLPs') -const { getParamCalls } = require('../helper/utils') const { yieldHelper } = require('../helper/yieldHelper') const cubFarmAddress = '0x227e79c83065edb8b954848c46ca50b96cb33e16'; const cubKingdomFarmAddress = '0x2E72f4B196b9E5B89C29579cC135756a00E6CBBd'; const cub = '0x50d809c74e0b8e49e7b4c65bb3109abe3ff4c1c1' -const chain = 'bsc' - -async function tvl(timestamp, ethBlock, { bsc: block }) { - const toa = [] - const poolLength = (await sdk.api.abi.call({ - target: cubFarmAddress, - abi: abi['poolLength'], - chain, block, - })).output; - const { output: res } = await sdk.api.abi.multiCall({ - target: cubFarmAddress, - abi: abi['poolInfo'], - calls: getParamCalls(poolLength), - chain, block, - }) - - res.forEach(({ output }) => toa.push([output.lpToken, cubFarmAddress])) - return sumTokens2({ chain, block, tokensAndOwners: toa, blacklistedTokens: [cub, '0x5E719AA339a6229692cf4163Eb0D966ACF93Ce28',], resolveLP: true, }) +async function tvl(api) { + const farms = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: cubFarmAddress}) + return sumTokens2({ api, owner: cubFarmAddress, tokens: farms.map(i => i.lpToken), blacklistedTokens: [cub, '0x5E719AA339a6229692cf4163Eb0D966ACF93Ce28',], resolveLP: true, }) } const kingdomTvl = yieldHelper({ diff --git a/projects/invar-finance/index.js b/projects/invar-finance/index.js index a909807781..5ebb73cc66 100644 --- a/projects/invar-finance/index.js +++ b/projects/invar-finance/index.js @@ -1,39 +1,14 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const abis = require("./abis.js"); -const BigNumber = require("bignumber.js"); +const { sumTokensExport } = require('../helper/unwrapLPs.js'); -const USDC_ADDRESS = ADDRESSES.ethereum.USDC; -const RE_NFT = "0x502818ec5767570F7fdEe5a568443dc792c4496b"; const INVARIA2222 = "0x10a92B12Da3DEE9a3916Dbaa8F0e141a75F07126"; -const toUSDCBalaces = (amount, unitPrice) => ({ - [USDC_ADDRESS] : BigNumber(amount).dp(0, BigNumber.ROUND_DOWN).times(unitPrice).toFixed(0) -}); - -async function tvl(timestamp, block) { - const stakingNFTs = (await sdk.api.abi.call({ - block, - target: RE_NFT, - abi: abis.balanceOf, - params: [INVARIA2222, 1], - })).output; - - const nftUnitPrice = (await sdk.api.abi.call({ - block, - target: RE_NFT, - abi: abis.SellingPrice, - })).output; - - return toUSDCBalaces(stakingNFTs, nftUnitPrice); -} - module.exports = { - misrepresentedTokens: true, methodology: "Counts the number of staking nfts time the unit price of nft", ethereum: { - tvl, + tvl: sumTokensExport({ owner:INVARIA2222, token: ADDRESSES.ethereum.USDC}), }, + deadFrom: '2023-11-12', start: 15389792, }; diff --git a/projects/inverse/index.js b/projects/inverse/index.js index 9f7137a697..bc60510054 100644 --- a/projects/inverse/index.js +++ b/projects/inverse/index.js @@ -1,16 +1,12 @@ +const { compoundExports2 } = require('../helper/compound') const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const BigNumber = require("bignumber.js"); -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); // Anchor const anchorStart = 11915867; const comptroller = "0x4dcf7407ae5c07f8681e1659f626e114a7667339"; -const ignore = ["0x7Fcb7DAC61eE35b3D4a51117A7c58D53f0a8a670"]; // anDOLA will be counted through the stabilizer -const anETH = "0x697b4acAa24430F254224eB794d2a85ba1Fa1FB8"; -const wETH = ADDRESSES.ethereum.WETH; // Stabilizer const stabilizer = "0x7eC0D931AFFBa01b77711C2cD07c76B970795CDd"; @@ -24,190 +20,37 @@ const vaults = [ "0x2dCdCA085af2E258654e47204e483127E0D8b277", // inDAI->ETH ]; -// ask comptroller for all markets array -async function getAllTokens(block) { - let tokens = ( - await sdk.api.abi.call({ - block, - target: comptroller, - params: [], - abi: abi["getAllMarkets"], - }) - ).output; - return tokens.filter(function (token) { - return ignore.indexOf(token) === -1; - }); +async function vaultsTVL(api) { + const tokens = await api.multiCall({ abi: abi.underlying, calls: vaults}) + const bals = await api.multiCall({ abi: abi.totalSupply, calls: vaults}) + api.add(tokens, bals) } -async function getAllUnderlying(block, tokens) { - let allUnderlying = ( - await sdk.api.abi.multiCall({ - block, - calls: tokens.filter((token) => token !== anETH).map( - (token) => ({ - target: token, - }) - ), - abi: abi["underlying"], - permitFailure: true, - }) - ).output; +async function stabilizerTVL(api) { + if (api < anchorStart) + return; - allUnderlying.push({ - input: { - target: anETH, - }, - success: true, - output: wETH, - }); - return allUnderlying; + const supply = await api.call({ target: stabilizer, abi: abi["supply"], }) + api.add(dai, supply); } -async function getCashes(block, tokens) { - return ( - await sdk.api.abi.multiCall({ - block, - calls: tokens.map((token) => ({ - target: token, - })), - abi: abi["getCash"], - }) - ).output; -} - -async function getTotalSupplies(block, tokens) { - return ( - await sdk.api.abi.multiCall({ - block, - calls: tokens.map((token) => ({ - target: token, - })), - abi: abi["totalSupply"], - }) - ).output; -} - -async function anchorTVL(block) { - const balances = {}; - if (block < anchorStart) { - return balances; - } - - const tokens = await getAllTokens(block); - const [allUnderlying, cashes] = await Promise.all([ - getAllUnderlying(block, tokens), - getCashes(block, tokens), - ]); - - tokens.forEach((token) => { - let cash = cashes.find( - (result) => result.input.target === token - ); - let underlying = allUnderlying.find( - (result) => result.input.target === token - ); - if (cash && underlying) { - balances[underlying.output] = BigNumber( - balances[underlying.output] || 0 - ).plus(cash.output); - } - }); - - return balances; -} - -async function vaultsTVL(block) { - const balances = {}; - - const [allUnderlying, totalSupplies] = await Promise.all([ - getAllUnderlying(block, vaults), - getTotalSupplies(block, vaults), - ]); +async function tvl(api) { + const compTvl = compoundExports2({ comptroller, cether: ['0x697b4acaa24430f254224eb794d2a85ba1fa1fb8', '0x8e103eb7a0d01ab2b2d29c91934a9ad17eb54b86'], blacklistedTokens: ['0x865377367054516e17014ccded1e7d814edc9ce4']}).tvl - vaults.forEach((token) => { - let totalSupply = totalSupplies.find( - (result) => result.input.target === token - ); - let underlying = allUnderlying.find( - (result) => result.input.target === token - ); - if (totalSupply && underlying) { - balances[underlying.output] = BigNumber( - balances[underlying.output] || 0 - ).plus(totalSupply.output); - } - }); - - return balances; -} - -async function stabilizerTVL(block) { - if (block < anchorStart) { - return {}; - } - - const supply = ( - await sdk.api.abi.call({ - block, - target: stabilizer, - abi: abi["supply"], - }) - ).output; - - return { - [dai]: BigNumber(supply), - }; -} - -async function tvl(timestamp, block) { - const balances = {}; - - const [ - anchorBalances, - vaultBalances, - stabilizerBalances, - ] = await Promise.all([ - anchorTVL(block), - vaultsTVL(block), - stabilizerTVL(block), + await Promise.all([ + compTvl(api), + vaultsTVL(api), + stabilizerTVL(api), ]); - - const lps = [] - Object.entries(anchorBalances).forEach(([token, value]) => { - const balance = BigNumber(balances[token] || 0); - if(token === '0xAA5A67c256e27A5d80712c51971408db3370927D'){ - token = "0x865377367054516e17014ccded1e7d814edc9ce4" - } - if(token === "0x5BA61c0a8c4DccCc200cd0ccC40a5725a426d002"){ - lps.push({ - token, - balance: value.toFixed(0) - }) - } else { - balances[token] = balance.plus(BigNumber(value)).toFixed(); - } - }); - - Object.entries(vaultBalances).forEach(([token, value]) => { - const balance = BigNumber(balances[token] || 0); - balances[token] = balance.plus(BigNumber(value)).toFixed(); - }); - - Object.entries(stabilizerBalances).forEach(([token, value]) => { - const balance = BigNumber(balances[token] || 0); - balances[token] = balance.plus(BigNumber(value)).toFixed(); - }); - await unwrapUniswapLPs(balances, lps, block) - - return balances; + return sumTokens2({ api, resolveLP: true, }) } module.exports = { methodology: "DOLA curve metapool replaced by DOLA", hallmarks: [ - [1648771200, "INV price hack"], - [1655380800, "Inverse Frontier Deprecated"] -], + [1648771200, "INV price hack"], + [1655380800, "Inverse Frontier Deprecated"] + ], start: 1607731200, // Dec 12 2020 00:00:00 GMT+0000 ethereum: { tvl } }; diff --git a/projects/ipor/index.js b/projects/ipor/index.js index 40b79070e3..dbdfb7cc8a 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -14,17 +14,17 @@ async function tvlEthereum(api) { return await calculateTvlForV1(api); } } -async function tvlArbitrum(_, block, _1, {api}) { +async function tvlArbitrum(api) { const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); const assets = [ ADDRESSES.arbitrum.USDC_CIRCLE, // USDC ] - const output = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: addresses.arbitrum.IporProtocolRouter }) + const res = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: addresses.arbitrum.IporProtocolRouter }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) - output.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { + res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool const decimal = 18 - decimals[i] api.add(assets[i], balance / (10 ** decimal)) @@ -48,10 +48,10 @@ async function calculateTvlForV2(api) { ADDRESSES.ethereum.DAI, // DAI ] - const output = await api.multiCall({ abi: abi.getAmmBalance, calls: assets, target: addresses.ethereum.IporProtocolRouter }) + const res = await api.multiCall({ abi: abi.getAmmBalance, calls: assets, target: addresses.ethereum.IporProtocolRouter }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) - output.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { + res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool const decimal = 18 - decimals[i] api.add(assets[i], balance / (10 ** decimal)) @@ -73,11 +73,11 @@ async function calculateTvlForV1(api) { '0x137000352B4ed784e8fa8815d225c713AB2e7Dc9', // USDC '0xEd7d74AA7eB1f12F83dA36DFaC1de2257b4e7523', // DAI ] - const output = await api.multiCall({ abi: abi.getAccruedBalance, calls: miltonAddresses, }) + const res = await api.multiCall({ abi: abi.getAccruedBalance, calls: miltonAddresses, }) const tokens = await api.multiCall({ abi: abi.getAsset, calls: miltonAddresses, }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) - output.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool }, i) => { + res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool }, i) => { const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool const decimal = 18 - decimals[i] api.add(tokens[i], balance / (10 ** decimal)) diff --git a/projects/jarvis/index.js b/projects/jarvis/index.js index cbdab35bee..e246481a14 100644 --- a/projects/jarvis/index.js +++ b/projects/jarvis/index.js @@ -36,64 +36,34 @@ async function tvl(api) { const { synthpoolRegistry, version } = contracts[chain] const { fixedRateRegistry, fixedRateVersion } = contracts[chain] const { selfMintingRegistry, creditLineVersion } = contracts[chain] - const block = api.block - const balances = {} // Get liquidityPools by calling getElements(synth, collateral, version) // For v5, the collateral is stored in the liquidity pools directly // Get collaterals, usually single collat, USDC on polygon, BUSD on BSC, but might be multiple collats later on - const collaterals = await api.call({ - abi: abi["SynthereumPoolRegistry_getCollaterals"], - target: synthpoolRegistry, - }) + const collaterals = await api.call({ abi: abi["SynthereumPoolRegistry_getCollaterals"], target: synthpoolRegistry, }) // Get synth token symbols - jEUR, jCHF etc - const syntheticTokens = await api.call({ - abi: abi["SynthereumPoolRegistry_getSyntheticTokens"], - target: synthpoolRegistry, - }) + const syntheticTokens = await api.call({ abi: abi["SynthereumPoolRegistry_getSyntheticTokens"], target: synthpoolRegistry, }) if (chain === 'polygon' || chain === 'bsc') { // Get collateral for SynthereumFixedRate Wrappers - const fixedRateCollaterals = await api.call({ - abi: abi["SynthereumFixedRateRegistry_getCollaterals"], - target: fixedRateRegistry, - }) + const fixedRateCollaterals = await api.call({ abi: abi["SynthereumFixedRateRegistry_getCollaterals"], target: fixedRateRegistry, }) // Get synthTokens for SynthereumFixedRate Wrappers - jEUR, jCHF etc. - const fixedRateSynthTokens = await api.call({ - abi: abi["SynthereumFixedRateRegistry_getSyntheticTokens"], - target: fixedRateRegistry, - }) + const fixedRateSynthTokens = await api.call({ abi: abi["SynthereumFixedRateRegistry_getSyntheticTokens"], target: fixedRateRegistry, }) // Get fixedRateWrappers by calling SynthereumFixedRateRegistry_getElements const params_list_fixedRate = fixedRateCollaterals.map(fixedRateCollateral => fixedRateSynthTokens.map(fixedRateSynth => [fixedRateSynth, fixedRateCollateral, fixedRateVersion])).flat().map(i => ({ params: i })) - const elements_obj_fixedRate = await api.multiCall({ - abi: abi["SynthereumFixedRateRegistry_getElements"], - target: fixedRateRegistry, - calls: params_list_fixedRate - }) + const elements_obj_fixedRate = await api.multiCall({ abi: abi["SynthereumFixedRateRegistry_getElements"], target: fixedRateRegistry, calls: params_list_fixedRate }) const fixedRateWrappers = elements_obj_fixedRate.flat(2) const fixedRateCalls = fixedRateWrappers - const fixedRateCollateralTokens = await api.multiCall({ - abi: abi.collateralToken, - calls: fixedRateCalls, - }) - const fixedRateTotalCollateralAmounts = await api.multiCall({ - abi: abi.totalPegCollateral, - calls: fixedRateCalls, - }) - fixedRateCollateralTokens.forEach((data, i) => { - sdk.util.sumSingleBalance(balances, chain + ':' + data, fixedRateTotalCollateralAmounts[i]) - }) + const fixedRateCollateralTokens = await api.multiCall({ abi: abi.collateralToken, calls: fixedRateCalls, }) + const fixedRateTotalCollateralAmounts = await api.multiCall({ abi: abi.totalPegCollateral, calls: fixedRateCalls, }) + api.add(fixedRateCollateralTokens, fixedRateTotalCollateralAmounts) } // Get synthereumPools by calling SynthereumPoolRegistry_getElements - const params_list = collaterals.map(collateral => syntheticTokens.map(synth => [synth, collateral, version])).flat().map(i => ({ params: i })) - const elements_obj = await api.multiCall({ - abi: abi["SynthereumPoolRegistry_getElements"], - target: synthpoolRegistry, - calls: params_list - }) + const params_list = collaterals.map(collateral => syntheticTokens.map(synth => ({ params: [synth, collateral, version]}))).flat() + const elements_obj = await api.multiCall({ abi: abi["SynthereumPoolRegistry_getElements"], target: synthpoolRegistry, calls: params_list }) const liquidityPools = elements_obj.flat(2) if (version === 6) { @@ -103,66 +73,37 @@ async function tvl(api) { '0xBC988A0146178825C26c255989cfd5083Bae672C', '0x8FEceC5629EED60D18Fd3438aae4a8E69723D190', ].map(i => i.toLowerCase()) - const calls = liquidityPools.filter(i => !blacklistedPools.includes(i.toLowerCase())).map(a => ({ target: a })) - const collateralTokens = await api.multiCall({ - abi: abi.collateralToken, - calls - }) - const totalCollateralAmounts = await api.multiCall({ - abi: abi.totalCollateralAmount, - calls - }) + const calls = liquidityPools.filter(i => !blacklistedPools.includes(i.toLowerCase())) + const collateralTokens = await api.multiCall({ abi: abi.collateralToken, calls }) + const totalCollateralAmounts = await api.multiCall({ abi: abi.totalCollateralAmount, calls }) collateralTokens.forEach((data, i) => { - sdk.util.sumSingleBalance(balances, chain + ':' + data, totalCollateralAmounts[i].totalCollateral) + api.add(data, totalCollateralAmounts[i].totalCollateral) }) } else if (version === 5) { // Get balances of every LiquidityPool and SynthToken Contracts - await sumTokens2({ api, balances, owners: liquidityPools, tokens: collaterals }) + await sumTokens2({ api, owners: liquidityPools, tokens: collaterals }) } if (chain === 'polygon' || chain === 'bsc' || chain === 'optimism' || chain === 'arbitrum') { // Get collateral token addresses from self minting registry - const { output: selfMintingCollaterals } = await sdk.api.abi.call({ - abi: abi["SynthereumSelfMintingRegistry_getCollaterals"], - target: selfMintingRegistry, - block, - chain - }) + const selfMintingCollaterals = await api.call({ abi: abi["SynthereumSelfMintingRegistry_getCollaterals"], target: selfMintingRegistry, }) // Get synth token symbols - jEUR, jCHF etc - const { output: selfMintingSyntheticTokens } = await sdk.api.abi.call({ - abi: abi["SynthereumSelfMintingRegistry_getSyntheticTokens"], - target: selfMintingRegistry, - block, - chain - }) + const selfMintingSyntheticTokens = await api.call({ abi: abi["SynthereumSelfMintingRegistry_getSyntheticTokens"], target: selfMintingRegistry, }) // Get creditLineDerivatives by calling SynthereumSelfMintingRegistry_getElements - const params_list_creditline = selfMintingCollaterals.map(selfMintingCollateral => selfMintingSyntheticTokens.map(selfMintingSynth => [selfMintingSynth, selfMintingCollateral, creditLineVersion])).flat() - const { output: elements_obj_creditline } = await sdk.api.abi.multiCall({ - abi: abi["SynthereumSelfMintingRegistry_getElements"], - calls: params_list_creditline.map(params => ({ - target: selfMintingRegistry, - params: params - })), - block, - chain + const params_list_creditline = selfMintingCollaterals.map(selfMintingCollateral => selfMintingSyntheticTokens.map(selfMintingSynth => ({ params: [selfMintingSynth, selfMintingCollateral, creditLineVersion]}))).flat() + const elements_obj_creditline = await api.multiCall({ + abi: abi["SynthereumSelfMintingRegistry_getElements"], target: selfMintingRegistry, calls: params_list_creditline, }) - const creditLineDerivatives = elements_obj_creditline.map(e => e.output).flat(2) + const creditLineDerivatives = elements_obj_creditline.flat(2) - const creditLineCalls = creditLineDerivatives.map(f => ({ target: f })) - const { output: creditLineCollateralTokens } = await sdk.api.abi.multiCall({ - abi: abi.collateralToken, - chain, block, calls: creditLineCalls, - }) - const { output: creditLineTotalCollateralAmounts } = await sdk.api.abi.multiCall({ - abi: abi.getGlobalPositionData, - chain, block, calls: creditLineCalls, - }) + const creditLineCalls = creditLineDerivatives + const creditLineCollateralTokens = await api.multiCall({ abi: abi.collateralToken, calls: creditLineCalls, }) + const creditLineTotalCollateralAmounts = await api.multiCall({ abi: abi.getGlobalPositionData, calls: creditLineCalls, }) creditLineCollateralTokens.forEach((data, i) => { - sdk.util.sumSingleBalance(balances, chain + ':' + data.output, creditLineTotalCollateralAmounts[i].output.totCollateral) + api.add(data, creditLineTotalCollateralAmounts[i].totCollateral) }) } - return balances } module.exports = { diff --git a/projects/lixir/index.js b/projects/lixir/index.js index dcf15c9715..5d003a73f6 100644 --- a/projects/lixir/index.js +++ b/projects/lixir/index.js @@ -1,75 +1,38 @@ -const sdk = require('@defillama/sdk'); const abi = require('./abi.json') -const {staking} = require('../helper/staking') +const { staking } = require('../helper/staking'); const oldRegistry = "0x3228f22d98d81A859aCC9890c3874FfF864a8Bd4"; const newRegistry = "0x18bf8A3eE39Be5730189A0C88D90f744e3c55B20"; const vault_role = "0x0e2208c692f4f271957e6c9d7c9785b7c2c3a7e329d54eecdfaa3c5f48b0cd51"; const lixirToken = "0xd0345D30FD918D7682398ACbCdf139C808998709"; -// node test.js projects/lixir/index.js -async function ethTvl(timestamp, block) { - let balances = await vaultTvl(oldRegistry, block, {}); - await vaultTvl(newRegistry, block, balances) - return balances//await newVaultTvl(block, newVaults, balances); +async function ethTvl(api) { + await vaultTvl(oldRegistry, api); + await vaultTvl(newRegistry, api) } -async function vaultTvl(registry, block, balances, pool2 = false) { - const count = Number((await sdk.api.abi.call({ - target: registry, - block, - params: [vault_role], - abi: abi.getRoleMemberCount - })).output) - const vaults = await sdk.api.abi.multiCall({ - block, - abi: abi.getRoleMember, - calls: [...Array(count)].map((_, i) => ({ - target: registry, - params: [vault_role, i], - })) - }) +async function vaultTvl(registry, api) { + const count = await api.call({ abi: abi.getRoleMemberCount, target: registry, params: vault_role }) + const calls = [] + for (let i = 0; i < count; i++) + calls.push({ params: [vault_role, i] }) - const calls = vaults.output.map(v=>({ - target: v.output - })) - const [totals, token0, token1] = await Promise.all([ - abi.calculateTotals, - abi.token0, - abi.token1 - ].map(abi=>sdk.api.abi.multiCall({ - block, - abi, - calls - }))) + const vaults = await api.multiCall({ abi: abi.getRoleMember, target: registry, calls, }) + const token0s = await api.multiCall({ abi: abi.token0, calls: vaults }) + const token1s = await api.multiCall({ abi: abi.token1, calls: vaults }) + const totals = await api.multiCall({ abi: abi.calculateTotals, calls: vaults }) - for(let i =0; i i[0]) - const symbolMapping = await getSymbols(chain, tokens) + const symbolMapping = await getSymbols(api.chain, tokens) tokensAndOwners = tokensAndOwners.filter(([token]) => isWhitelistedToken(symbolMapping[token], token, isVesting)) if (isVesting) - tokensAndOwners.push(...await getTokensAndOwners(vesting, chain, block, true)) - return sumTokens2({ tokensAndOwners, chain, block, }) + tokensAndOwners.push(...await getTokensAndOwners(vestingContract, api, true)) + return sumTokens2({ tokensAndOwners, api, resolveLP: true, }) } -async function getTokensAndOwners(contract, chain, block, isVestingContract) { +async function getTokensAndOwners(contract, api, isVestingContract) { const abis = { count: isVestingContract ? abi.escrows_length : abi.getLlamaPayContractCount, vault: isVestingContract ? abi.escrows : abi.getLlamaPayContractByIndex, } - const { output:contractCount } = await sdk.api.abi.call({ - target: contract, - abi: abis.count, - chain, block, - }) - - const { output: llamaPayContractsRes } = await sdk.api.abi.multiCall({ - target: contract, - abi: abis.vault, - calls: getParamCalls(contractCount), - chain, block, - }) - - const llamaPayContracts = llamaPayContractsRes.map(i => i.output) - const { output: llamaPayTokens } = await sdk.api.abi.multiCall({ - calls: llamaPayContracts.map(i => ({ target: i })) , - abi: abi.token, - chain, block, - }) - - return llamaPayTokens.map(({ output}, i) => ([output, llamaPayContracts[i]])) + const llamaPayContracts = await api.fetchList({ lengthAbi: abis.count, itemAbi: abis.vault, target: contract }) + const llamaPayTokens = await api.multiCall({ calls: llamaPayContracts, abi: abi.token, }) + return llamaPayTokens.map((token, i) => ([token, llamaPayContracts[i]])) } const chains = [ @@ -64,8 +45,6 @@ const chains = [ "metis" ] -module.exports = {} - chains.forEach(chain => { let contract = llamaPayDefault let vestingContract = llamaPayVesting @@ -74,14 +53,14 @@ chains.forEach(chain => { case 'avax': contract = llamaPayAvax; break; case 'meter': contract = llamaPayMeter; vestingContract = llamaPayMeterVesting; break; case 'metis': contract = llamaPayMetis; break; - case 'kava': contract = llamaPayKava ; vestingContract = llamaPayKavaVesting; break; + case 'kava': contract = llamaPayKava; vestingContract = llamaPayKavaVesting; break; } module.exports[chain] = { hallmarks: [ - [Math.floor(new Date('2022-10-03')/1e3), 'Vesting tokens are not included in tvl'], + [Math.floor(new Date('2022-10-03') / 1e3), 'Vesting tokens are not included in tvl'], ], - tvl: async (_, _b, { [chain]: block }) => calculateTvl(contract, vestingContract, block, chain, false), - vesting: async (_, _b, { [chain]: block }) => calculateTvl(contract, vestingContract, block, chain, true), + tvl: async (api) => calculateTvl(contract, vestingContract, api, false), + vesting: async (api) => calculateTvl(contract, vestingContract, api, true), } }) \ No newline at end of file diff --git a/projects/multiplierfinance/index.js b/projects/multiplierfinance/index.js index 2eb0e191d8..d0033b5e01 100644 --- a/projects/multiplierfinance/index.js +++ b/projects/multiplierfinance/index.js @@ -1,109 +1,59 @@ const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') -const { getParamCalls } = require('../helper/utils') const YieldContract = "0xE4Baf69B887843aB6A0e82E8BAeA49010fF619af"; const LendingPool = "0xbc3534b076EDB8E8Ef254D81b81DC193c53057F7"; const LendingPoolV2 = "0x503fba251cdc4c06a1eeea4faf89e3fafc5923a6"; -const ethTvl = async (timestamp, block, chainBlocks) => { - const tokens = [nullAddress] - const { output: length } = await sdk.api.abi.call({ - target: YieldContract, - abi: abi.getNoOfErc20s, block, - }) - - const { output } = await sdk.api.abi.multiCall({ - target: YieldContract, - abi: abi.erc20List, - calls: getParamCalls(length), block, - }) - - output.forEach(i => tokens.push(i.output)) - return sumTokens2({ tokens, owner: YieldContract, block, }) +const ethTvl = async (api) => { + const tokens = await api.fetchList({ lengthAbi: abi.getNoOfErc20s, itemAbi: abi.erc20List, target: YieldContract }) + tokens.push(nullAddress) + return sumTokens2({ tokens, owner: YieldContract, }) }; -const chain = 'bsc' - -async function getReservesData(block) { - const { output: tokens } = await sdk.api.abi.call({ - abi: abi.getReserves, - target: LendingPool, - chain, block, - }) - - const { output: reservesData } = await sdk.api.abi.multiCall({ - abi: abi.getReserveData, - target: LendingPool, - calls: tokens.map(i => ({ params: i })), - chain, block, - }) - - return reservesData.map(({ input: { params: [token]}, output}) => { - output.token = token - return output - }) +async function getReservesData(api) { + const tokens = await api.call({ abi: abi.getReserves, target: LendingPool, }) + const res = await api.multiCall({ abi: abi.getReserveData, target: LendingPool, calls: tokens, }) + tokens.map((v, i) => res[i].token = v) + return res } -async function tvl(_, _b, { bsc: block }) { - const data = await getReservesData(block) +async function tvl(api) { + const data = await getReservesData(api) const tokensAndOwners = data.map(i => ([i.token, i.mTokenAddress])) - return sumTokens2({ tokensAndOwners, chain, block, }) + return sumTokens2({ tokensAndOwners, api, }) } -async function borrowed(_, _b, { bsc: block }) { - const balances = {} - const data = await getReservesData(block) - data.forEach(i => sdk.util.sumSingleBalance(balances,'bsc:'+i.token,i.totalBorrowsVariable)) - return balances +async function borrowed(api) { + const data = await getReservesData(api) + data.forEach(i => api.add(i.token, i.totalBorrowsVariable)) + return api.getBalances() } -async function tvlV2(_, _b, { bsc: block }) { - const data = await getReservesDataV2(block) +async function tvlV2(api) { + const data = await getReservesDataV2(api) const tokensAndOwners = data.map(i => ([i.token, i.aTokenAddress])) - return sumTokens2({ tokensAndOwners, chain, block, }) + return sumTokens2({ tokensAndOwners, api, }) } -async function borrowedV2(_, _b, { bsc: block }) { - const balances = {} - const data = await getReservesDataV2(block) - const { output: supplyVariable } = await sdk.api.abi.multiCall({ - abi: 'erc20:totalSupply', - calls: data.map(i => ({ target: i.variableDebtTokenAddress})), - chain, block, - }) - const { output: supplyStable } = await sdk.api.abi.multiCall({ - abi: 'erc20:totalSupply', - calls: data.map(i => ({ target: i.stableDebtTokenAddress})), - chain, block, - }) +async function borrowedV2(api) { + const data = await getReservesDataV2(api) + const supplyVariable = await api.multiCall({ abi: 'erc20:totalSupply', calls: data.map(i => i.variableDebtTokenAddress), }) + const supplyStable = await api.multiCall({ abi: 'erc20:totalSupply', calls: data.map(i => i.stableDebtTokenAddress), }) data.forEach((i, idx) => { - sdk.util.sumSingleBalance(balances,'bsc:'+i.token,supplyVariable[idx].output) - sdk.util.sumSingleBalance(balances,'bsc:'+i.token,supplyStable[idx].output) + api.add(i.token, supplyVariable[idx]) + api.add(i.token, supplyStable[idx]) }) - return balances + return api.getBalances() } -async function getReservesDataV2(block) { - const { output: tokens } = await sdk.api.abi.call({ - abi: abiv2.getReservesList, - target: LendingPoolV2, - chain, block, - }) - - const { output: reservesData } = await sdk.api.abi.multiCall({ - abi: abiv2.getReserveData, - target: LendingPoolV2, - calls: tokens.map(i => ({ params: i })), - chain, block, - }) - - return reservesData.map(({ input: { params: [token]}, output}) => { - output.token = token - return output - }) +async function getReservesDataV2(api) { + const tokens = await api.call({ abi: abiv2.getReservesList, target: LendingPoolV2, }) + const res = await api.multiCall({ abi: abiv2.getReserveData, target: LendingPoolV2, calls: tokens, }) + tokens.map((v, i) => res[i].token = v) + return res } const abiv2 = { @@ -117,6 +67,6 @@ module.exports = { }, bsc: { tvl: sdk.util.sumChainTvls([tvl, tvlV2]), - borrowed: sdk.util.sumChainTvls([borrowed, borrowedV2]), + borrowed: sdk.util.sumChainTvls([borrowedV2, ]), }, }; diff --git a/projects/singularityDAO/index.js b/projects/singularityDAO/index.js index b21c601368..ab355cf205 100644 --- a/projects/singularityDAO/index.js +++ b/projects/singularityDAO/index.js @@ -1,10 +1,8 @@ const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json"); const { cachedGraphQuery } = require('../helper/cache') -const sdk = require("@defillama/sdk"); const { sumTokens2 } = require("../helper/unwrapLPs"); -const { getParamCalls } = require("../helper/utils"); const AGIX_TOKEN = "0x5B7533812759B45C2B44C19e320ba2cD2681b542"; const NUNET_TOKEN = "0xF0d33BeDa4d734C72684b5f9abBEbf715D0a7935"; @@ -27,7 +25,7 @@ const graphEndpoint = "https://singularitydao.ai/api/dynaset-server/api/graphql"; -async function tvl(_, block) { +async function tvl(api) { const blacklistedTokens = [ SDAO_TOKEN, LP_TOKEN_SDAO_ETH, @@ -38,63 +36,26 @@ async function tvl(_, block) { const response = await cachedGraphQuery('singularity-dao', graphEndpoint, getDynasetQuery); const dynasets = response.dynaset.map((d) => d.address).flat(); - const { output: tokens } = await sdk.api.abi.multiCall({ - calls: dynasets.map((addr) => ({ target: addr })), - abi: abi.getCurrentTokens, - block, - permitFailure: true, - }); - const tokensAndOwners = []; - tokens - .filter((t) => t.output) - .map((t, index) => - t.output.forEach((token) => - tokensAndOwners.push([token, dynasets[index]]) - ) - ); - - let { output: forgetCount } = await sdk.api.abi.multiCall({ - abi: abis.totalForges, - calls: DYNASET_FORGES.map((i) => ({ target: i })), - block, - }); - - const calls = []; - forgetCount = forgetCount.map(({ input: { target }, output }) => { - let arry = getParamCalls(output); - arry.forEach((i) => (i.target = target)); - calls.push(...arry); - }); - - let { output: tokenInfo } = await sdk.api.abi.multiCall({ - abi: abis.forgeInfo, - calls, - block, - }); - - tokenInfo.forEach(({ input: { target }, output }) => { - tokensAndOwners.push([output.contributionToken, target]); - }); - - return sumTokens2({ tokensAndOwners, block, blacklistedTokens }); -} + const tokens = await api.multiCall({ calls: dynasets, abi: abi.getCurrentTokens, permitFailure: true, }); + const ownerTokens = []; + tokens.map((t, index) => t && ownerTokens.push([t, dynasets[index]])) + + const tokenInfos = await api.fetchList({ lengthAbi: abis.totalForges, itemAbi: abis.forgeInfo, targets: DYNASET_FORGES, groupedByInput: true }) + tokenInfos.forEach((info, i) => ownerTokens.push([info.map(i => i.contributionToken), DYNASET_FORGES[i]])) -// LP Pools ERC -// Staked LP tokens where one side of the market is the platform's own governance token. + return sumTokens2({ ownerTokens, api, blacklistedTokens }); +} -async function pool2(ts, block) { +async function pool2(api) { const tokensAndOwners = [ [LP_TOKEN_SDAO_ETH, "0xfB85B9Ec50560e302Ab106F1E2857d95132120D0"], // Unbonded [LP_TOKEN_SDAO_USDT, "0xfB85B9Ec50560e302Ab106F1E2857d95132120D0"], // Bonded 6M ]; - return sumTokens2({ tokensAndOwners, block, resolveLP: true }); + return sumTokens2({ tokensAndOwners, api, resolveLP: true }); } -// Staking pools ERC -// The platform's own tokens - -async function staking(ts, block) { +async function staking(api) { const tokensAndOwners = [ [SDAO_TOKEN, "0xfB85B9Ec50560e302Ab106F1E2857d95132120D0"], // Unbonded [SDAO_TOKEN, "0x74641ed232dbB8CBD9847484dD020d44453F0368"], // Bonded 6M @@ -105,16 +66,10 @@ async function staking(ts, block) { [AGIX_TOKEN, "0xfB85B9Ec50560e302Ab106F1E2857d95132120D0"], [AGIX_TOKEN, "0xb267deaace0b8c5fcb2bb04801a364e7af7da3f4"], ]; - return sumTokens2({ tokensAndOwners, block }); + return sumTokens2({ tokensAndOwners, api }); } -////////////////////////////////// -////// BNB CHAIN //////////////// -//////////////////////////////// - -// DYNASET BNB CHAIN - -async function tvlBNB(ts, EthBlock, { bsc: block }) { +async function tvlBNB(api) { const tokensAndOwners = [ [ADDRESSES.bsc.WBNB, DYNASETSBNB], // BNB [ADDRESSES.bsc.BUSD, DYNASETSBNB], // BUSD @@ -127,22 +82,18 @@ async function tvlBNB(ts, EthBlock, { bsc: block }) { ["0xCC42724C6683B7E57334c4E856f4c9965ED682bD", DYNASETSBNB], // BMATIC ["0xfA54fF1a158B5189Ebba6ae130CEd6bbd3aEA76e", DYNASETSBNB], // BSOL ]; - return sumTokens2({ tokensAndOwners, block, chain: "bsc" }); + return sumTokens2({ tokensAndOwners, api }); } -// Staking pools BNB - -async function stakingBNB(ts, EthBlock, { bsc: block }) { +async function stakingBNB(api) { const tokensAndOwners = [ [SDAO_TOKEN_BNB, "0x79292c62f593e08d9b850b790b07e7a0903fd007"], // Unbonded [SDAO_TOKEN_BNB, "0x17de46760F4c18C26eEc36117C23793299F564A8"], // Bonded ]; - return sumTokens2({ tokensAndOwners, block, chain: "bsc" }); + return sumTokens2({ tokensAndOwners, api }); } -// LP Pools BNB - -async function pool2BNB(ts, EthBlock, { bsc: block }) { +async function pool2BNB(api) { const tokensAndOwners = [ [ "0x6c805d2077025eaaa42fae7f764e61df42aadb14", @@ -157,7 +108,7 @@ async function pool2BNB(ts, EthBlock, { bsc: block }) { "0x79292c62f593e08d9b850b790b07e7a0903fd007", ], ]; - return sumTokens2({ tokensAndOwners, block, chain: "bsc", resolveLP: true }); + return sumTokens2({ tokensAndOwners, api, resolveLP: true }); } module.exports = { diff --git a/projects/valuedefi.js b/projects/valuedefi.js index 289eeec283..1a04ed920a 100644 --- a/projects/valuedefi.js +++ b/projects/valuedefi.js @@ -1,6 +1,5 @@ const { getUniTVL } = require('./helper/unknownTokens') -const { createIncrementArray } = require('./helper/utils') const sdk = require('@defillama/sdk') const { sumTokens2 } = require('./helper/unwrapLPs') const swapFactory = '0x1b8e12f839bd4e73a47addf76cf7f0097d74c14c' @@ -13,25 +12,13 @@ const abis = { getToken: "function getToken(uint8 index) view returns (address)", } -const bscDexTVL = getUniTVL({ - factory: swapFactory, - useDefaultCoreAssets: true, -}) +const bscDexTVL = getUniTVL({ factory: swapFactory, useDefaultCoreAssets: true, }) async function bscStableSwapTvl(api) { - const pools = await api.fetchList({ lengthAbi: 'allPoolsLength', itemAbi: 'allPools', target: stableSwapFactory}) - - const tokenLength = await api.multiCall({ abi: abis.getTokenLength, calls: pools, }) - - const tokenCalls = [] - tokenLength.forEach((i, idx) => { - createIncrementArray(i).forEach(j => tokenCalls.push({ target: pools[idx], params: j })) - }) - - const tokens = await api.multiCall({ abi: abis.getToken, calls: tokenCalls, }) - - const toa = tokens.map((i, idx) => ([i, tokenCalls[idx].target])) - return sumTokens2({ tokensAndOwners: toa, api}) + const pools = await api.fetchList({ lengthAbi: 'allPoolsLength', itemAbi: 'allPools', target: stableSwapFactory }) + const tokens = await api.fetchList({ lengthAbi: abis.getTokenLength, itemAbi: abis.getToken, targets: pools, groupedByInput: true }) + const ownerTokens = tokens.map((i, idx) => ([i, pools[idx]])) + return sumTokens2({ ownerTokens, api }) } module.exports = { From 0915cf57330686615dfa0496045fe1ae29c3b9d9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 16 Sep 2024 08:01:42 +0200 Subject: [PATCH 0387/1768] code refactor --- projects/Caketomb/index.js | 4 +- projects/alpaca-finance/ausd.js | 73 +--- projects/alpaca-finance/index.js | 28 +- projects/alpaca-finance/lyf.js | 125 +------ projects/alpaca-finance/xalpaca.js | 22 +- projects/alpha-homora/index.js | 37 +- projects/alpha-homora/v1.js | 152 ++------ projects/alpha-homora/v2.js | 455 +++++++----------------- projects/arable-protocol/index.js | 4 +- projects/banano/index.js | 12 +- projects/bombmoney/index.js | 4 +- projects/chargedefi/index.js | 4 +- projects/cleopatradao.js | 2 +- projects/curve/index.js | 24 +- projects/diamond-coin/index.js | 4 +- projects/float-capital/index.js | 69 +--- projects/grape-finance/index.js | 4 +- projects/grave/index.js | 4 +- projects/hades-money/index.js | 4 +- projects/helper/ohm.js | 25 +- projects/helper/pool2.js | 149 +------- projects/helper/tomb.js | 4 +- projects/helper/unwrapLPs.js | 94 ----- projects/hermes-finance/index.js | 4 +- projects/iTrustfinance/index.js | 30 +- projects/keep3r/index.js | 108 ++---- projects/klondike/index.js | 34 +- projects/maximizer/index.js | 226 +----------- projects/mm-stableswap/index.js | 31 +- projects/monox/index.js | 44 +-- projects/moonflowerfarmers/index.js | 36 +- projects/nest/index.js | 93 +++-- projects/newland/index.js | 17 - projects/oceanus/index.js | 30 +- projects/optidoge/index.js | 4 +- projects/orcadao/index.js | 109 ++---- projects/pendle/v1.js | 170 ++++----- projects/printerfinancial/helper.js | 4 +- projects/quartzdefi/index.js | 43 +-- projects/reserve/index.js | 58 ++- projects/thales/index.js | 25 +- projects/waterfall-wtf-finance/index.js | 4 +- 42 files changed, 548 insertions(+), 1825 deletions(-) diff --git a/projects/Caketomb/index.js b/projects/Caketomb/index.js index 6b6806de2b..acb6f205c5 100644 --- a/projects/Caketomb/index.js +++ b/projects/Caketomb/index.js @@ -1,4 +1,4 @@ -const {pool2Exports} = require("../helper/pool2"); +const {pool2} = require("../helper/pool2"); const { staking } = require("../helper/staking"); const shares = "0x9f8349C33B942b6CBb15426E02b5Bbb77fAeB64f"; @@ -15,6 +15,6 @@ module.exports = { bsc: { tvl: async () => ({}), staking: staking(boardroom, shares), - pool2: pool2Exports(shareRewardPool, pancakeLPs, "bsc", addr=>`bsc:${addr}`) + pool2: pool2(shareRewardPool, pancakeLPs, "bsc", addr=>`bsc:${addr}`) } } diff --git a/projects/alpaca-finance/ausd.js b/projects/alpaca-finance/ausd.js index 9c96cb515d..fbc4fbd119 100644 --- a/projects/alpaca-finance/ausd.js +++ b/projects/alpaca-finance/ausd.js @@ -1,6 +1,4 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const BigNumber = require("bignumber.js"); const { getConfig } = require('../helper/cache') async function getProcolAUSDAddresses(chain) { @@ -30,70 +28,31 @@ async function getProcolLYFAddresses(chain) { } } -async function calAusdTvl(chain, block) { - /// @dev Initialized variables - const balances = {}; +async function calAusdTvl(api) { + const chain = api.chain; const ausdAddresses = await getProcolAUSDAddresses(chain); const lyfAddresses = await getProcolLYFAddresses(chain); - - const pids = await sdk.api.abi.multiCall({ - block, - abi: abi.pid, - calls: ausdAddresses["IbTokenAdapters"].map((each) => { - return { - target: each.address, - }; - }), - chain, - }); - const failaunchUserInfos = await sdk.api.abi.multiCall({ - block, + const ibTokens = ausdAddresses["IbTokenAdapters"].map((i) => i.address) + const pids = await api.multiCall({ abi: abi.pid, calls: ibTokens }); + const failaunchUserInfos = await api.multiCall({ abi: abi.userInfo, - calls: pids.output.map((each) => { - return { - target: lyfAddresses["FairLaunch"].address, - params: [each.output, each.input.target], - }; - }), - chain, - }); - const totalTokens = await sdk.api.abi.multiCall({ - block, - abi: abi.totalToken, - calls: ausdAddresses["IbTokenAdapters"].map((each) => { + target: lyfAddresses["FairLaunch"].address, + calls: pids.map((each, i) => { return { - target: each.collateralToken, + params: [each, ibTokens[i]], }; }), - chain, }); - const totalSupplys = await sdk.api.abi.multiCall({ - block, - abi: abi.totalSupply, - calls: ausdAddresses["IbTokenAdapters"].map((each) => { - return { - target: each.collateralToken, - }; - }), - chain, - }); - const vaultTokens = await sdk.api.abi.multiCall({ - block, - abi: abi.token, - calls: ausdAddresses["IbTokenAdapters"].map((each) => { - return { - target: each.collateralToken, - }; - }), - chain, - }); - - failaunchUserInfos.output.forEach((eachUserInfo, i) => { - const balance = new BigNumber(eachUserInfo.output.amount).multipliedBy(totalTokens.output[i].output).dividedBy(totalSupplys.output[i].output) - balances[`${chain}:${vaultTokens.output[i].output}`] = balance.toFixed(0); + const collateralTokens = ausdAddresses.IbTokenAdapters.map((each) => each.collateralToken); + const totalTokens = await api.multiCall({ abi: abi.totalToken, calls: collateralTokens }); + const totalSupplys = await api.multiCall({ abi: abi.totalSupply, calls: collateralTokens, }); + const vaultTokens = await api.multiCall({ abi: abi.token, calls: collateralTokens, }); + + failaunchUserInfos.forEach((eachUserInfo, i) => { + api.add(vaultTokens[i], eachUserInfo.amount * totalTokens[i] / totalSupplys[i]); }) - return balances; + return api.getBalances() } module.exports = { diff --git a/projects/alpaca-finance/index.js b/projects/alpaca-finance/index.js index 81ee4eeb26..80f4b65ae4 100644 --- a/projects/alpaca-finance/index.js +++ b/projects/alpaca-finance/index.js @@ -4,34 +4,14 @@ const { calAusdTvl } = require('./ausd'); const { calxALPACAtvl } = require('./xalpaca'); const aExports = require('../alpaca-finance-lend'); -async function bscTvl(timestamp, ethBlock, chainBlocks) { - const lyfTvl = await calLyfTvl('bsc', chainBlocks.bsc); - const ausdTvl = await calAusdTvl('bsc', chainBlocks.bsc); - return {...lyfTvl, ...ausdTvl}; -} - -async function bscStaking(timestamp, ethBlock, chainBlocks) { - return await calxALPACAtvl('bsc', chainBlocks.bsc); -} - -async function fantomTvl(timestamp, ethBlock, chainBlocks) { - const lyfTvl = await calLyfTvl('fantom', chainBlocks.fantom); - return {...lyfTvl}; -} - -async function ftmStaking(timestamp, ethBlock, chainBlocks) { - return await calxALPACAtvl('fantom', chainBlocks.fantom); -} - -// node test.js projects/alpaca-finance/index.js module.exports = { start: 1602054167, bsc: { - tvl: sdk.util.sumChainTvls([bscTvl, aExports.bsc.tvl]), - staking: bscStaking, + tvl: sdk.util.sumChainTvls([calLyfTvl, calAusdTvl, aExports.bsc.tvl]), + staking: calxALPACAtvl, }, fantom: { - tvl: sdk.util.sumChainTvls([fantomTvl, aExports.fantom.tvl]), - staking: ftmStaking, + tvl: sdk.util.sumChainTvls([calLyfTvl, aExports.fantom.tvl]), + staking: calxALPACAtvl, } }; diff --git a/projects/alpaca-finance/lyf.js b/projects/alpaca-finance/lyf.js index d448335c57..5dd21568b9 100644 --- a/projects/alpaca-finance/lyf.js +++ b/projects/alpaca-finance/lyf.js @@ -1,8 +1,4 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const BigNumber = require("bignumber.js"); const { getConfig } = require('../helper/cache') -const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); async function getProcolAddresses(chain) { if (chain == 'bsc') { @@ -21,121 +17,14 @@ async function getProcolAddresses(chain) { } } -async function calLyfTvl(chain, block) { - /// @dev Initialized variables - const balances = {}; - - /// @dev Getting all addresses from Github +async function calLyfTvl(api) { + const chain = api.chain; const addresses = await getProcolAddresses(chain); - - for (let i = 0; i < addresses["Vaults"].length; i++) { - /// @dev getting balances that each of workers holding - const stakingTokenInfos = ( - await sdk.api.abi.multiCall({ - block, - abi: abi.userInfo, - calls: addresses["Vaults"][i]["workers"].filter((n) => { - /// @dev filter only workers that are working with LPs - if (n.name.includes("CakeMaxiWorker")) { - return false; - } - return true; - }).map((worker) => { - return { - target: worker["stakingTokenAt"], - params: [worker["pId"], worker["address"]], - }; - }), - chain, - }) - ).output; - - /// @dev unwrap LP to get underlaying token balances for workers that are working with LPs - await unwrapUniswapLPs( - balances, - stakingTokenInfos - .filter((n) => { - /// @dev filter only workers that are working with LPs - const name = addresses["Vaults"][i]["workers"].find( - (w) => w.address === n.input.params[1] - ).name; - if (name.includes("CakeMaxiWorker")) { - return false; - } - return true; - }) - .map((info) => { - /// @dev getting LP address and return the object that unwrapUniswapLPs want - const lpAddr = addresses["Vaults"][i]["workers"].find( - (w) => w.address === info.input.params[1] - ).stakingToken; - return { - token: lpAddr, - balance: info.output.amount, - }; - }), - block, - chain, - (addr) => `${chain}:${addr}` - ); - - /// @dev update balances directly for single-asset workers - const singleAssetWorkersInfos = ( - await sdk.api.abi.multiCall({ - block, - abi: abi.userInfoCake, - calls: addresses["Vaults"][i]["workers"].filter((n) => { - /// @dev filter only single-asset LYF workers - return n.name.includes("CakeMaxiWorker"); - }).map((worker) => { - return { - target: worker["stakingTokenAt"], - params: [worker["address"]], - }; - }), - chain, - }) - ).output; - - const singleAssetPrice = ( - await sdk.api.abi.multiCall({ - block, - abi: abi.singleAssetPrice, - calls: addresses["Vaults"][0]["workers"].filter((n) => { - /// @dev filter only single-asset LYF workers - return n.name.includes("CakeMaxiWorker"); - }).map((worker) => { - return { - target: worker["stakingTokenAt"], - }; - }), - chain, - }) - ).output; - - const singleAssetWorkersBalances = singleAssetWorkersInfos - .map((n) => { - /// @dev getting staking token address and return the object to be sum with balances - const stakingTokenAddr = addresses["Vaults"][i]["workers"].find( - (w) => w.address === n.input.params[0] - ).stakingToken; - return { - token: stakingTokenAddr, - balance: BigNumber(n.output.shares).multipliedBy(BigNumber(singleAssetPrice[0].output)).div(1e18), - }; - }); - - /// @dev sum single-asset balances to balances variable - singleAssetWorkersBalances.forEach((s) => { - balances[`${chain}:${s.token}`] = BigNumber( - balances[`${chain}:${s.token}`] || 0 - ) - .plus(BigNumber(s.balance)) - .toFixed(0); - }); - } - - return balances; + const vaults = addresses["Vaults"].map(i => i.address) + const tokens = await api.multiCall({ abi: 'address:token', calls: vaults}) + const bals = await api.multiCall({ abi: 'uint256:totalToken', calls: vaults}) + api.add(tokens, bals) + return api.getBalances() } module.exports = { diff --git a/projects/alpaca-finance/xalpaca.js b/projects/alpaca-finance/xalpaca.js index 490a9dd403..00c4de8660 100644 --- a/projects/alpaca-finance/xalpaca.js +++ b/projects/alpaca-finance/xalpaca.js @@ -1,4 +1,3 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { getConfig } = require('../helper/cache') @@ -18,25 +17,14 @@ async function getProcolXAlpacaAddresses(chain) { ) } } - -async function calxALPACAtvl(chain, block) { - const xalpacaAddresses = await getProcolXAlpacaAddresses(chain); - const xalpacaTVL = ( - await sdk.api.abi.multiCall({ - block, - abi: abi.xalpacaTotalSupply, - calls: [ - { - target: xalpacaAddresses["xALPACA"], - }, - ], - chain, - }) - ).output; +async function calxALPACAtvl(api) { + const xalpacaAddresses = await getProcolXAlpacaAddresses(api.chain); + + const xalpacaTVL = await api.call({ abi: abi.xalpacaTotalSupply, target: xalpacaAddresses["xALPACA"], }) const alpacaAddress = xalpacaAddresses["Tokens"]["ALPACA"]; - return { [`${chain}:${alpacaAddress}`]: xalpacaTVL[0].output }; + api.add(alpacaAddress, xalpacaTVL) } module.exports = { diff --git a/projects/alpha-homora/index.js b/projects/alpha-homora/index.js index d512fa9997..39b58dd157 100644 --- a/projects/alpha-homora/index.js +++ b/projects/alpha-homora/index.js @@ -1,32 +1,11 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const BigNumber = require("bignumber.js"); const {tvlV1Eth, tvlV1Bsc} = require('./v1.js') const {tvlV2, tvlV2Onchain} = require('./v2.js') -async function ethTvl(timestamp, block) { - const ethAddress = ADDRESSES.null; - const balances = {}; - - const tvls = await Promise.all([ - tvlV1Eth(timestamp, block), - tvlV2(block, "ethereum", true), - ]); - - const ethTvl = BigNumber.sum(tvls[0], tvls[1]); - balances[ethAddress] = ethTvl.toFixed(0); - - return balances; -} - -async function avaxTvl(timestamp, block, chainBlocks) { - return tvlV2Onchain(chainBlocks.avax, "avax") -} - -async function fantomTvl(timestamp, block, chainBlocks) { - return tvlV2Onchain(chainBlocks.fantom, "fantom") -} -async function opTvl(timestamp, block, chainBlocks) { - return tvlV2Onchain(chainBlocks.optimism, "optimism") +async function ethTvl(api) { + await Promise.all([ + tvlV1Eth(api), + tvlV2(api), + ]) } module.exports = { @@ -39,13 +18,13 @@ module.exports = { tvl: tvlV1Bsc }, avax:{ - tvl: avaxTvl + tvl: tvlV2Onchain }, fantom:{ - tvl: fantomTvl + tvl: tvlV2Onchain }, optimism:{ - tvl: opTvl + tvl: tvlV2Onchain }, start: 1602054167, // unix timestamp (utc 0) specifying when the project began, or where live data begins hallmarks: [ diff --git a/projects/alpha-homora/v1.js b/projects/alpha-homora/v1.js index 3e8ed453dd..77aa2b7856 100644 --- a/projects/alpha-homora/v1.js +++ b/projects/alpha-homora/v1.js @@ -1,139 +1,35 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const { getConfig } = require('../helper/cache') -const BigNumber = require("bignumber.js"); +const { getConfig } = require('../helper/cache'); +const { sumTokens2 } = require('../helper/unwrapLPs'); module.exports = { - tvlV1Eth, - tvlV1Bsc + tvlV1Eth, + tvlV1Bsc } -async function tvlV1Eth({timestamp}, block) { - const startTimestamp = 1602054167; - const startBlock = 11007158; - - if (timestamp < startTimestamp || block < startBlock) { - return BigNumber(0); - } - return tvlV1("ethereum", block, "https://homora.alphafinance.io/static/contracts.json", "WETHAddress", "totalETH") +async function tvlV1Eth(api) { + return tvlV1(api, "https://homora.alphafinance.io/static/contracts.json") } const wBNB = ADDRESSES.bsc.WBNB -async function tvlV1Bsc(timestamp, block, chainBlocks) { - const tvlBNB = await tvlV1("bsc", chainBlocks.bsc, "https://homora-bsc.alphafinance.io/static/contracts.json", "WBNBAddress", "totalBNB") - return { - ["bsc:"+wBNB]: tvlBNB.toFixed(0) - } +async function tvlV1Bsc(api) { + await tvlV1(api, "https://homora-bsc.alphafinance.io/static/contracts.json") } -async function tvlV1(chain, block, contractsUrl, wrappedBaseName, totalEthMethodName) { - const data = await getConfig('alpha-hormora/v1/'+chain, - contractsUrl - ); - - const bankAddress = data.bankAddress.toLowerCase(); - const WETHAddress = data[wrappedBaseName].toLowerCase(); - - let pools = data.pools; - - const uniswapPools = pools.filter( - (pool) => pool.id === undefined - ); - - const sushiswapPools = pools.filter( - (pool) => pool.id !== undefined - ); - pools = [...uniswapPools, ...sushiswapPools]; - - const { output: _totalETH } = await sdk.api.abi.call({ - target: bankAddress, - block, - chain, - abi: 'uint256:'+totalEthMethodName, - }); - - const totalETH = BigNumber(_totalETH); - - const { output: _totalDebt } = await sdk.api.abi.call({ - target: bankAddress, - block, - chain, - abi: abi["glbDebtVal"], - }); - - const totalDebt = BigNumber(_totalDebt); - - // Uniswap Pools - const { output: _UnilpTokens } = await sdk.api.abi.multiCall({ - calls: uniswapPools.map((pool) => ({ - target: pool.lpStakingAddress, - params: [pool.goblinAddress], - })), - chain, - abi: abi["balanceOf"], - block, - }); - - // Sushiswap Pools - const { output: _SushilpTokens } = await sdk.api.abi.multiCall({ - calls: sushiswapPools.map((pool) => ({ - target: pool.lpStakingAddress, - params: [pool.id, pool.goblinAddress], - })), - chain, - abi: abi["userInfo"], - block, - }); - - const _lpTokens = [ - ..._UnilpTokens, - ..._SushilpTokens.map((x) => ({ - output: x.output[0], - })), - ]; - - const lpTokens = _lpTokens.map((_lpToken) => BigNumber(_lpToken.output || 0)); - - const { output: _totalETHOnStakings } = await sdk.api.abi.multiCall({ - calls: pools.map((pool) => ({ - target: WETHAddress, - params: [pool.lpTokenAddress], - })), - chain, - abi: abi["balanceOf"], - block, - }); - - const totalETHOnStakings = _totalETHOnStakings.map((stake) => - BigNumber(stake.output || 0) - ); - - const { output: _totalLpTokens } = await sdk.api.abi.multiCall({ - calls: pools.map((pool) => ({ - target: pool.lpTokenAddress, - })), - chain, - abi: abi["totalSupply"], - block, - }); - - const totalLpTokens = _totalLpTokens.map((_totalLpToken) => - BigNumber(_totalLpToken.output || 0) - ); - - const unUtilizedValue = totalETH.minus(totalDebt); - - let tvl = BigNumber(unUtilizedValue); - for (let i = 0; i < lpTokens.length; i++) { - if (totalLpTokens[i].gt(0)) { - const amount = lpTokens[i] - .times(totalETHOnStakings[i]) - .div(totalLpTokens[i]) - .times(BigNumber(2)); - - tvl = tvl.plus(amount); - } - } - return tvl; - } \ No newline at end of file +async function tvlV1(api, contractsUrl) { + const data = await getConfig('alpha-hormora/v1/' + api.chain, contractsUrl); + + const bankAddress = data.bankAddress + + let pools = data.pools.map(i => i.goblinAddress) + const tokens = await api.multiCall({ abi: 'address:lpToken', calls: pools }) + const shares = await api.multiCall({ abi: 'uint256:totalShare', calls: pools }) + const bals = await api.multiCall({ abi: 'function shareToBalance(uint256) view returns (uint256)', calls: shares.map((v, i) => ({ target: pools[i], params: v})) }) + api.add(tokens, bals) + const totalEthMethodName = api.chain === 'bsc' ? 'totalBNB' : 'totalETH'; + const totalETH = await api.call({ target: bankAddress, abi: 'uint256:' + totalEthMethodName, }); + const totalDebt = await api.call({ target: bankAddress, abi: abi.glbDebtVal, }); + api.addGasToken(totalETH - totalDebt); + return sumTokens2({ api, resolveLP: true}) +} \ No newline at end of file diff --git a/projects/alpha-homora/v2.js b/projects/alpha-homora/v2.js index ab58294362..293e35739d 100644 --- a/projects/alpha-homora/v2.js +++ b/projects/alpha-homora/v2.js @@ -1,369 +1,174 @@ -const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const BigNumber = require("bignumber.js"); -const { request, gql } = require("graphql-request"); -const { unwrapCreamTokens, unwrapUniswapLPs, sumTokens2 } = require('../helper/unwrapLPs') +const { request, } = require("graphql-request"); +const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require('../helper/cache') const chainParams = { - optimism: { - safeBoxApi: "https://api.homora.alphaventuredao.io/v2/10/safeboxes", - latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('B3g98fbbStVKtff6QUY6iMUqp7rxqrdDyGdrXAmcWG6B'), - poolsJsonUrl: "https://api.homora.alphaventuredao.io/v2/10/pools", - instances: [ ] - }, - avax: { - safeBoxApi: "https://homora-api.alphafinance.io/v2/43114/safeboxes", - latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('8zVTsZBmd8CU7vnmonPr7qex4A69yM7NSzxKCpGHw6Q6'), + optimism: { + safeBoxApi: "https://api.homora.alphaventuredao.io/v2/10/safeboxes", + latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('B3g98fbbStVKtff6QUY6iMUqp7rxqrdDyGdrXAmcWG6B'), + poolsJsonUrl: "https://api.homora.alphaventuredao.io/v2/10/pools", + instances: [] + }, + avax: { + safeBoxApi: "https://homora-api.alphafinance.io/v2/43114/safeboxes", + latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('8zVTsZBmd8CU7vnmonPr7qex4A69yM7NSzxKCpGHw6Q6'), + poolsJsonUrl: "https://homora-api.alphafinance.io/v2/43114/pools", + instances: [ + { + wMasterChefAddress: "0xb41de9c1f50697cc3fd63f24ede2b40f6269cbcb", + wLiquidityGauge: "0xf1f32c8eeb06046d3cc3157b8f9f72b09d84ee5b", // wrong poolsJsonUrl: "https://homora-api.alphafinance.io/v2/43114/pools", - instances: [ - { - wMasterChefAddress: "0xb41de9c1f50697cc3fd63f24ede2b40f6269cbcb", - wLiquidityGauge: "0xf1f32c8eeb06046d3cc3157b8f9f72b09d84ee5b", // wrong - poolsJsonUrl: "https://homora-api.alphafinance.io/v2/43114/pools", - graphUrl: sdk.graph.modifyEndpoint('8zVTsZBmd8CU7vnmonPr7qex4A69yM7NSzxKCpGHw6Q6'), - }, - ] - }, - fantom: { - safeBoxApi: "https://homora-api.alphafinance.io/v2/250/safeboxes", - latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('H4Q15YbQxRWw14HaABfWiTptSwRzanXNwyACY8MCRqVS'), - poolsJsonUrl: "https://homora-api.alphafinance.io/v2/250/pools", - instances: [ - { - wMasterChefAddress: "0x5FC20fCD1B50c5e1196ac790DADCfcDD416bb0C7", - wLiquidityGauge: "0xf1f32c8eeb06046d3cc3157b8f9f72b09d84ee5b", // wrong - poolsJsonUrl: "https://homora-api.alphafinance.io/v2/43114/pools", - graphUrl: sdk.graph.modifyEndpoint('H4Q15YbQxRWw14HaABfWiTptSwRzanXNwyACY8MCRqVS'), - }, - ] - }, - ethereum: { - safeBoxApi: "https://homora-api.alphafinance.io/v2/1/safeboxes", - coreOracleAddress: "0x6be987c6d72e25f02f6f061f94417d83a6aa13fc", - latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('CnfAARjTUna6ZVo7RjJvQmm44e7uWx6kbaRm4Xh5MR5N'), - instances: [ - { - // Current - werc20Address: "0x06799a1e4792001aa9114f0012b9650ca28059a3", - wMasterChefAddress: "0xa2caea05ff7b98f10ad5ddc837f15905f33feb60", - wLiquidityGauge: "0xf1f32c8eeb06046d3cc3157b8f9f72b09d84ee5b", - wStakingRewardIndex: "0x011535fd795fd28c749363e080662d62fbb456a7", - wStakingRewardPerp: "0xc4635854480fff80f742645da0310e9e59795c63", - poolsJsonUrl: "https://homora-api.alphafinance.io/v2/1/pools", - graphUrl: sdk.graph.modifyEndpoint('37CbUUxwQC7uTqQquQXtQQF8b2bU7L3VBrkEntiHxf4r'), - }, - { - // Legacy - werc20Address: "0xe28d9df7718b0b5ba69e01073fe82254a9ed2f98", - wMasterChefAddress: "0x373ae78a14577682591e088f2e78ef1417612c68", - wLiquidityGauge: "0xfdb4f97953150e47c8606758c13e70b5a789a7ec", - wStakingRewardIndex: "0x713df2ddda9c7d7bda98a9f8fcd82c06c50fbd90", - wStakingRewardPerp: "0xc4635854480fff80f742645da0310e9e59795c63", - poolsJsonUrl: - "local", - graphUrl: sdk.graph.modifyEndpoint('CnfAARjTUna6ZVo7RjJvQmm44e7uWx6kbaRm4Xh5MR5N'), - } - ] - } + graphUrl: sdk.graph.modifyEndpoint('8zVTsZBmd8CU7vnmonPr7qex4A69yM7NSzxKCpGHw6Q6'), + }, + ] + }, + fantom: { + safeBoxApi: "https://homora-api.alphafinance.io/v2/250/safeboxes", + latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('H4Q15YbQxRWw14HaABfWiTptSwRzanXNwyACY8MCRqVS'), + poolsJsonUrl: "https://homora-api.alphafinance.io/v2/250/pools", + instances: [ + { + wMasterChefAddress: "0x5FC20fCD1B50c5e1196ac790DADCfcDD416bb0C7", + wLiquidityGauge: "0xf1f32c8eeb06046d3cc3157b8f9f72b09d84ee5b", // wrong + poolsJsonUrl: "https://homora-api.alphafinance.io/v2/43114/pools", + graphUrl: sdk.graph.modifyEndpoint('H4Q15YbQxRWw14HaABfWiTptSwRzanXNwyACY8MCRqVS'), + }, + ] + }, + ethereum: { + safeBoxApi: "https://homora-api.alphafinance.io/v2/1/safeboxes", + coreOracleAddress: "0x6be987c6d72e25f02f6f061f94417d83a6aa13fc", + latestAlphaHomoraV2GraphUrl: sdk.graph.modifyEndpoint('CnfAARjTUna6ZVo7RjJvQmm44e7uWx6kbaRm4Xh5MR5N'), + instances: [ + { + // Current + werc20Address: "0x06799a1e4792001aa9114f0012b9650ca28059a3", + wMasterChefAddress: "0xa2caea05ff7b98f10ad5ddc837f15905f33feb60", + wLiquidityGauge: "0xf1f32c8eeb06046d3cc3157b8f9f72b09d84ee5b", + wStakingRewardIndex: "0x011535fd795fd28c749363e080662d62fbb456a7", + wStakingRewardPerp: "0xc4635854480fff80f742645da0310e9e59795c63", + poolsJsonUrl: "https://homora-api.alphafinance.io/v2/1/pools", + graphUrl: sdk.graph.modifyEndpoint('37CbUUxwQC7uTqQquQXtQQF8b2bU7L3VBrkEntiHxf4r'), + }, + { + // Legacy + werc20Address: "0xe28d9df7718b0b5ba69e01073fe82254a9ed2f98", + wMasterChefAddress: "0x373ae78a14577682591e088f2e78ef1417612c68", + wLiquidityGauge: "0xfdb4f97953150e47c8606758c13e70b5a789a7ec", + wStakingRewardIndex: "0x713df2ddda9c7d7bda98a9f8fcd82c06c50fbd90", + wStakingRewardPerp: "0xc4635854480fff80f742645da0310e9e59795c63", + poolsJsonUrl: + "local", + graphUrl: sdk.graph.modifyEndpoint('CnfAARjTUna6ZVo7RjJvQmm44e7uWx6kbaRm4Xh5MR5N'), + } + ] + } } -const GET_TOTAL_COLLATERALS = gql` - query GET_TOTAL_COLLATERALS($block: Int) { - werc20Collaterals(block: { number: $block }) { +const GET_TOTAL_COLLATERALS = ` + query GET_TOTAL_COLLATERALS{ + werc20Collaterals { lpToken amount } - sushiswapCollaterals(block: { number: $block }) { + sushiswapCollaterals{ pid amount } - crvCollaterals(block: { number: $block }) { + crvCollaterals { pid gid amount } - wstakingRewardCollaterals(block: { number: $block }) { + wstakingRewardCollaterals { wtoken amount } } `; -const GET_CY_TOKEN = gql` - query GET_CY_TOKEN($cyToken: String, $block: Int) { - cyTokenStates( - where: { cyToken: $cyToken } - first: 1 - orderBy: blockTimestamp - orderDirection: desc - block: { number: $block } - ) { - id - cyToken - safeboxBalance - exchangeRate - blockTimestamp - } - } -`; module.exports = { - tvlV2, - tvlV2Onchain -} - -async function getPools(poolsJsonUrl, chain){ - return poolsJsonUrl === "local"? require('./v2/legacy-pools.json') : (await getConfig('alpha-hormora/v2-pools/'+chain, poolsJsonUrl)) + tvlV2, + tvlV2Onchain } -async function tvlV2Onchain(block, chain) { - const balances = {} - const transform = addr => { - if (addr.toLowerCase() === '0x260bbf5698121eb85e7a74f2e45e16ce762ebe11') - return 'avax:' + ADDRESSES.avax.USDT_e // Axelar wrapped UST -> USDT - if (addr.toLowerCase() === '0x2147efff675e4a4ee1c2f918d181cdbd7a8e208f') - return '0xa1faa113cbe53436df28ff0aee54275c13b40975' // Wrapped Alpha Finance -> ALPHA (erc20) - return `${chain}:${addr}` - } - const { safeBoxApi, poolsJsonUrl, instances, } = chainParams[chain]; - let safebox = await getConfig('alpha-hormora/v2-safebox/'+chain, safeBoxApi); - const safeBoxRewards = safebox.filter(i => i.ibStakingReward) - safebox = safebox.filter(i => !i.ibStakingReward) - await unwrapIBRewards({ boxes: safeBoxRewards, balances, chain, block, transform, }) - await unwrapCreamTokens(balances, safebox.map(s=>[s.cyTokenAddress, s.safeboxAddress]), block, chain, transform) - let pools= await getPools(poolsJsonUrl, chain); - const owners = pools.filter(i => i.wTokenType === 'WUniswapV3').map(i => i.wTokenAddress).filter(i => i) - pools = pools.filter(i => i.wTokenType !== 'WUniswapV3') - let poolsWithPid = pools.filter(p => p.pid !== undefined) - let poolsWithoutPid = pools.filter(p => p.pid === undefined) - const { output: masterchefLpTokens } = await sdk.api.abi.multiCall({ - calls: poolsWithPid.map((pool) => ({ - target: pool.exchange.stakingAddress ?? pool.stakingAddress, - params: [pool.pid, pool.wTokenAddress], - })), - chain, - abi: abi["userInfo"], - block, - }); - let lpPools = masterchefLpTokens.map((amount, i) => ({ - balance: amount.output.amount, - token: poolsWithPid[i].lpTokenAddress - })) - const { output: stakingPoolsLpTokens } = await sdk.api.abi.multiCall({ - calls: poolsWithoutPid.map((pool) => ({ - target: pool.stakingAddress, - params: [pool.wTokenAddress], - })), - chain, - abi: "erc20:balanceOf", - block, - }); - stakingPoolsLpTokens.forEach((amount, i) => lpPools.push({ - balance: amount.output, - token: poolsWithoutPid[i].lpTokenAddress - })) - const blacklisted = ['0xf3a602d30dcb723a74a0198313a7551feaca7dac', '0x2a8a315e82f85d1f0658c5d66a452bbdd9356783',].map(i => i.toLowerCase()) - lpPools = lpPools.filter(p => !blacklisted.includes(p.token.toLowerCase())) - await unwrapUniswapLPs(balances, lpPools, block, chain, transform) - if (owners.length) await sumTokens2({ balances, chain, block, owners, resolveUniV3: true, }) - - return balances +async function getPools(poolsJsonUrl, chain) { + return poolsJsonUrl === "local" ? require('./v2/legacy-pools.json') : (await getConfig('alpha-hormora/v2-pools/' + chain, poolsJsonUrl)) } -async function unwrapIBRewards({ block, chain, boxes, balances, transform}) { - for (const { cyTokenAddress, ibStakingReward, safeboxAddress, } of boxes) { - const tempBalance = {} - const [ - { output: balanceOf,}, - { output: totalSupply,}, - ] = await Promise.all([ - sdk.api.erc20.balanceOf({ target: ibStakingReward, owner: safeboxAddress, chain, block, }), - sdk.api.erc20.totalSupply({ target: ibStakingReward, chain, block, }), - unwrapCreamTokens(tempBalance, [[cyTokenAddress, ibStakingReward]], block, chain, transform), - ]) - const ratio = balanceOf / totalSupply - for (const [token, balance] of Object.entries(tempBalance)) { - sdk.util.sumSingleBalance(balances, token, BigNumber(balance * ratio).toFixed(0)) - } - } +async function tvlV2Onchain(api) { + const chain = api.chain + const { safeBoxApi, poolsJsonUrl, } = chainParams[chain]; + let safebox = await getConfig('alpha-hormora/v2-safebox/' + chain, safeBoxApi); + const ownerTokens = safebox.map(s => [[s.cyTokenAddress], s.safeboxAddress]) + await sumTokens2({ api, ownerTokens }) + let pools = await getPools(poolsJsonUrl, chain); + const owners = pools.filter(i => i.wTokenType === 'WUniswapV3').map(i => i.wTokenAddress).filter(i => i) + pools = pools.filter(i => i.wTokenType !== 'WUniswapV3') + let poolsWithPid = pools.filter(p => p.pid !== undefined) + let poolsWithoutPid = pools.filter(p => p.pid === undefined) + const masterchefLpTokens = await api.multiCall({ + calls: poolsWithPid.map((pool) => ({ + target: pool.exchange.stakingAddress ?? pool.stakingAddress, + params: [pool.pid, pool.wTokenAddress], + })), + abi: abi["userInfo"], + }); + masterchefLpTokens.map((amount, i) => api.add(poolsWithPid[i].lpTokenAddress, amount.amount)) + const stakingPoolsLpTokens = await api.multiCall({ + calls: poolsWithoutPid.map((pool) => ({ target: pool.stakingAddress, params: [pool.wTokenAddress], })), + abi: "erc20:balanceOf", + }); + stakingPoolsLpTokens.forEach((amount, i) => api.add(poolsWithoutPid[i].lpTokenAddress, amount)) + const blacklisted = ['0xf3a602d30dcb723a74a0198313a7551feaca7dac', '0x2a8a315e82f85d1f0658c5d66a452bbdd9356783', '0x75E5509029c85fE08e4934B1275c5575aA5538bE'] + blacklisted.forEach(i => api.removeTokenBalance(i)) + await sumTokens2({ api, owners, resolveUniV3: api.chain === 'optimism', resolveLP: api.chain !== 'optimism', }) } - -async function tvlV2(block, chain) { - const { safeBoxApi, coreOracleAddress, latestAlphaHomoraV2GraphUrl, instances } = chainParams[chain]; - const cyTokens = await getCyTokens(block, safeBoxApi, latestAlphaHomoraV2GraphUrl, chain); - const collateralGroups = await Promise.all(instances.map(params => getTotalCollateral(block, params, chain))) - - const tokens = Array.from( - new Set([ - ...collateralGroups.map(collaterals => - collaterals.map((collateral) => collateral.lpTokenAddress) - .filter((lpToken) => !!lpToken)).flat(), - ...cyTokens.map((cy) => cy.token).filter((token) => !!token), - ]) - ); - - const tokenPrices = await getTokenPrices(tokens, block, chain, coreOracleAddress); - - const totalCollateralValue = BigNumber.sum(...collateralGroups.map(collaterals => sumCollaterals(collaterals, tokenPrices))) - - const totalCyValue = BigNumber.sum( - 0, - ...cyTokens.map((cy) => { - if (cy.token in tokenPrices) { - return BigNumber(cy.amount).times(tokenPrices[cy.token]); - } - return BigNumber(0); - }) - ); - - return totalCollateralValue - .plus(totalCyValue); +async function tvlV2(api) { + const chain = api.chain + const { safeBoxApi, instances } = chainParams[chain]; + await getCyTokens(api, safeBoxApi); + await Promise.all(instances.map(params => getTotalCollateral(params, api))) } -function sumCollaterals(collaterals, tokenPrices) { - return BigNumber.sum( - 0, // Default value - ...collaterals.map((collateral) => { - if (collateral.lpTokenAddress in tokenPrices) { - return BigNumber(collateral.amount).times( - tokenPrices[collateral.lpTokenAddress] - ); - } - return BigNumber(0); - }) - ); +async function getCyTokens(api, safeBoxApi) { + const safebox = await getConfig('alpha-hormora/v2-safebox/' + api.chain, safeBoxApi); + const ownerTokens = safebox.map(s => [[s.cyTokenAddress, s.address], s.safeboxAddress]) + return api.sumTokens({ ownerTokens, }) } -async function getCyTokens(block, safeBoxApi, AlphaHomoraV2GraphUrl, chain) { - const safebox = await getConfig('alpha-hormora/v2-safebox/'+chain, - safeBoxApi - ); - return Promise.all( - safebox.map(async (sb) => { - const cyToken = sb.cyTokenAddress; - const { cyTokenStates } = await request( - AlphaHomoraV2GraphUrl, - GET_CY_TOKEN, - { - block, - cyToken, - } - ); - const cyTokenState = cyTokenStates[0]; - if (!cyTokenState) { - return { amount: new BigNumber(0), token: null }; - } - const exchangeRate = new BigNumber(cyTokenState.exchangeRate).div(1e18); - const cyBalance = new BigNumber(cyTokenState.safeboxBalance); - return { amount: cyBalance.times(exchangeRate), token: sb.address }; - }) - ); -} -async function getTokenPrices(tokens, block, chain, coreOracleAddress) { - const { output: _ethPrices } = await sdk.api.abi.multiCall({ - calls: tokens.map((token) => ({ - target: coreOracleAddress, - params: [token], - })), - chain, - abi: abi["getETHPx"], - block, - permitFailure: true, - }); +async function getTotalCollateral({ wMasterChefAddress, wLiquidityGauge, poolsJsonUrl, graphUrl, }, api) { + const chain = api.chain + const pools = await getPools(poolsJsonUrl, chain); - const tokenPrices = {}; - for (let i = 0; i < _ethPrices.length; i++) { - const price = _ethPrices[i].output / 2 ** 112; - if (price > 0) { - tokenPrices[tokens[i]] = price; - } - } - return tokenPrices; -} + const { crvCollaterals, sushiswapCollaterals, werc20Collaterals, wstakingRewardCollaterals, } = await request(graphUrl, GET_TOTAL_COLLATERALS, { block: undefined }); -async function getTotalCollateral( - block, - { - werc20Address, - wMasterChefAddress, - wLiquidityGauge, - wStakingRewardIndex, - wStakingRewardPerp, - poolsJsonUrl, - graphUrl, - }, chain -) { - const pools = await getPools(poolsJsonUrl, chain); + crvCollaterals.map((coll) => { + const pool = pools.find((pool) => pool.wTokenAddress === wLiquidityGauge && Number(coll.pid) === pool.pid && Number(coll.gid) === pool.gid); + if (!pool || !pool.lpTokenAddress) + return; + api.add(pool.lpTokenAddress, coll.amount); + }) - const { - crvCollaterals, - sushiswapCollaterals, - werc20Collaterals, - wstakingRewardCollaterals, - } = await request(graphUrl, GET_TOTAL_COLLATERALS, { - block, - }); + sushiswapCollaterals.map((coll) => { + const pool = pools.find((pool) => pool.wTokenAddress === wMasterChefAddress && Number(coll.pid) === pool.pid); + if (!pool || !pool.lpTokenAddress) + return; + api.add(pool.lpTokenAddress, coll.amount); + }) - const collaterals = [ - ...crvCollaterals.map((coll) => { - const pool = pools.find( - (pool) => - pool.wTokenAddress === wLiquidityGauge && - Number(coll.pid) === pool.pid && - Number(coll.gid) === pool.gid - ); - if (!pool) { - return { - lpTokenAddress: null, - amount: BigNumber(0), - }; - } - return { - lpTokenAddress: pool.lpTokenAddress ? pool.lpTokenAddress : null, - amount: BigNumber(coll.amount), - }; - }), - ...sushiswapCollaterals.map((coll) => { - const pool = pools.find( - (pool) => - pool.wTokenAddress === wMasterChefAddress && - Number(coll.pid) === pool.pid - ); - if (!pool) { - return { - lpTokenAddress: null, - amount: BigNumber(0), - }; - } - return { - lpTokenAddress: pool.lpTokenAddress ? pool.lpTokenAddress : null, - amount: BigNumber(coll.amount), - }; - }), - ...werc20Collaterals.map((coll) => ({ - lpTokenAddress: - "0x" + - BigNumber(coll.lpToken).toString(16).padStart(40, "0").toLowerCase(), - amount: BigNumber(coll.amount), - })), - ...wstakingRewardCollaterals.map((coll) => { - const pool = pools.find((pool) => pool.wTokenAddress === coll.wtoken); - if (!pool) { - return { - lpTokenAddress: null, - amount: BigNumber(0), - }; - } - return { - lpTokenAddress: pool.lpTokenAddress ? pool.lpTokenAddress : null, - amount: BigNumber(coll.amount), - }; - }), - ]; + werc20Collaterals.map((coll) => api.add("0x" + BigNumber(coll.lpToken).toString(16).padStart(40, "0").toLowerCase(), coll.amount)) - return collaterals; + wstakingRewardCollaterals.map((coll) => { + const pool = pools.find((pool) => pool.wTokenAddress === coll.wtoken); + if (!pool || !pool.lpTokenAddress) + return; + api.add(pool.lpTokenAddress, coll.amount); + }) } diff --git a/projects/arable-protocol/index.js b/projects/arable-protocol/index.js index 74db2b8336..02538413b2 100644 --- a/projects/arable-protocol/index.js +++ b/projects/arable-protocol/index.js @@ -1,5 +1,5 @@ const { staking } = require("../helper/staking"); -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const acre = "0x00ee200df31b869a321b10400da10b561f3ee60d"; const stakingContract = "0x4bc722Cd3F7b29ae3A5e0a17a61b72Ea5020502B"; @@ -11,6 +11,6 @@ module.exports = { avax:{ tvl: async () => ({}), staking: staking(stakingContract, acre), - pool2: pool2Exports(farming, [acrewavaxpgl], "avax") + pool2: pool2(farming, [acrewavaxpgl], "avax") } } \ No newline at end of file diff --git a/projects/banano/index.js b/projects/banano/index.js index 8adc696432..c58390a92f 100644 --- a/projects/banano/index.js +++ b/projects/banano/index.js @@ -1,5 +1,4 @@ -const { pool2BalanceFromMasterChefExports} = require("../helper/pool2.js"); -const masterchefAbi = require("../helper/abis/masterchef.json"); +const { sumTokens2 } = require("../helper/unwrapLPs.js"); //Polygon and BSC staking contracts const polygonContract = "0xefa4aED9Cf41A8A0FcdA4e88EfA2F60675bAeC9F"; @@ -12,11 +11,16 @@ module.exports = { methodology: 'Pool2 TVL in Polygon and BSC LPs', polygon: { tvl: async ()=>({}), - pool2: pool2BalanceFromMasterChefExports(polygonContract, ban, "polygon", addr=>`polygon:${addr}`, masterchefAbi.poolInfo) + pool2: tvl, }, bsc: { tvl: async ()=>({}), - pool2: pool2BalanceFromMasterChefExports(bscContract, ban, "bsc", addr=>`bsc:${addr}`, masterchefAbi.poolInfo) + pool2: tvl, }, } +async function tvl(api) { + const contract = api.chain === 'bsc' ? bscContract : polygonContract; + const tokens = await api.fetchList({ lengthAbi: 'poolLength', itemAbi:'function poolInfo(uint256) view returns (address stakingToken , uint256 stakingTokenTotalAmount , uint256 accWBANPerShare , uint32 lastRewardTime , uint16 allocPoint )' , target: contract}) + return sumTokens2({ api, tokens: tokens.map(i => i.stakingToken), owner: contract, resolveLP: true}) +} \ No newline at end of file diff --git a/projects/bombmoney/index.js b/projects/bombmoney/index.js index fcc813abdf..b6db5ee98a 100644 --- a/projects/bombmoney/index.js +++ b/projects/bombmoney/index.js @@ -1,5 +1,5 @@ const sdk = require("@defillama/sdk"); -const {pool2Exports} = require("../helper/pool2"); +const {pool2} = require("../helper/pool2"); const { staking } = require("../helper/staking"); const token = "0x522348779DCb2911539e76A1042aA922F9C47Ee3"; @@ -16,6 +16,6 @@ module.exports = { bsc: { tvl: async () => ({}), staking: staking(masonry, shares), - pool2: pool2Exports(shareRewardPool, pancakeLPs, "bsc", addr=>`bsc:${addr}`) + pool2: pool2(shareRewardPool, pancakeLPs, "bsc", addr=>`bsc:${addr}`) } } \ No newline at end of file diff --git a/projects/chargedefi/index.js b/projects/chargedefi/index.js index 92151453ec..c16ca65560 100644 --- a/projects/chargedefi/index.js +++ b/projects/chargedefi/index.js @@ -1,6 +1,6 @@ const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const { staking } = require("../helper/staking"); const chargeTokenAddress = "0x1C6bc8e962427dEb4106aE06A7fA2d715687395c"; @@ -62,7 +62,7 @@ module.exports = { methodology: 'The TVL of Charge Defi is calculated using the Pancake LP token deposits (Static/BUSD and Charge/BUSD) in the farms, and the Charge & Static-BUSD deposits found in each Boardroom.', bsc: { tvl, - pool2: pool2Exports( + pool2: pool2( chargeBUSDFarmStrategyAddress, [chargeBUSDLpAddress], "bsc" diff --git a/projects/cleopatradao.js b/projects/cleopatradao.js index 78420920ca..a4105d1002 100644 --- a/projects/cleopatradao.js +++ b/projects/cleopatradao.js @@ -13,5 +13,5 @@ const treasuryTokens = [ module.exports = { deadFrom: 1648765747, misrepresentedTokens: true, - ...ohmTvl(treasury, treasuryTokens, "avax", stakingContract, cat, undefined, undefined, false) + ...ohmTvl(treasury, treasuryTokens, "avax", stakingContract, cat) } diff --git a/projects/curve/index.js b/projects/curve/index.js index c53dc8ecc7..3424f2ea1d 100644 --- a/projects/curve/index.js +++ b/projects/curve/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensSharedOwners, nullAddress, sumTokens2, } = require("../helper/unwrapLPs"); +const { nullAddress, sumTokens2, } = require("../helper/unwrapLPs"); const { getChainTransform } = require("../helper/portedTokens"); const { getCache } = require("../helper/http"); const { getUniqueAddresses } = require("../helper/utils"); @@ -257,25 +257,15 @@ module.exports.ethereum["staking"] = staking( ); module.exports.harmony = { - tvl: async (ts, ethB, chainB) => { - if (ts > 1655989200) { + tvl: async (api) => { + if (api.timestamp > 1655989200) { // harmony hack return {}; } - const block = chainB.harmony - const balances = {}; - await sumTokensSharedOwners( - balances, - [ - "0xef977d2f931c1978db5f6747666fa1eacb0d0339", - "0x3c2b8be99c50593081eaa2a724f0b8285f5aba8f" - ], - ["0xC5cfaDA84E902aD92DD40194f0883ad49639b023"], - block, - "harmony", - addr => `harmony:${addr}` - ); - return balances; + return api.sumTokens({ owner: '0xC5cfaDA84E902aD92DD40194f0883ad49639b023', tokens: [ + "0xef977d2f931c1978db5f6747666fa1eacb0d0339", + "0x3c2b8be99c50593081eaa2a724f0b8285f5aba8f" + ]}) } }; diff --git a/projects/diamond-coin/index.js b/projects/diamond-coin/index.js index 0d4c9453ec..b39f71c4b6 100644 --- a/projects/diamond-coin/index.js +++ b/projects/diamond-coin/index.js @@ -1,5 +1,5 @@ const sdk = require("@defillama/sdk"); -const {pool2Exports} = require("../helper/pool2"); +const {pool2} = require("../helper/pool2"); const token = "0xDDa0F0E1081b8d64aB1D64621eb2679F93086705"; const emissionRewardPool = "0xDDa0F0E1081b8d64aB1D64621eb2679F93086705"; @@ -12,6 +12,6 @@ const DiamondLPs = [ module.exports = { fantom: { tvl: async () => ({}), - pool2: pool2Exports(emissionRewardPool, DiamondLPs, "fantom", addr=>`fantom:${addr}`) + pool2: pool2(emissionRewardPool, DiamondLPs, "fantom", addr=>`fantom:${addr}`) } } diff --git a/projects/float-capital/index.js b/projects/float-capital/index.js index 35632c7c60..18520aec8b 100644 --- a/projects/float-capital/index.js +++ b/projects/float-capital/index.js @@ -1,7 +1,4 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens, unwrapCreamTokens } = require("../helper/unwrapLPs"); -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const vaults = [ "0xce5da4bebBA980BeC39da5b118750A47a23D4B85", @@ -19,68 +16,16 @@ const avaults = [ "0x47a21F14794b6229cc2a1ddfe4498C9e48f1C16c", ]; const avDAI = "0x47afa96cdc9fab46904a55a6ad4bf6660b53c38a"; -const DAI = ADDRESSES.avax.DAI; -const transforms = { - "0x47afa96cdc9fab46904a55a6ad4bf6660b53c38a": - ADDRESSES.ethereum.DAI, // avDAI - [ADDRESSES.avax.DAI]: - ADDRESSES.ethereum.DAI, // DAI -}; -async function polyTvl(time, ethBlock, chainBlocks) { - const balances = {}; - await sumTokens( - balances, - vaults.map((v) => [amDAI, v]), - chainBlocks.polygon, - "polygon", - (addr) => `polygon:${addr}` - ); - return balances; +async function polyTvl(api) { + return sumTokens2({ api, owners: vaults, token: amDAI}) } -const qiDAI = "avax:0x835866d37afb8cb8f8334dccdaf66cf01832ff5d" - -async function avaxTvl(time, ethBlock, chainBlocks) { - const balances = {}; - await sumTokens( - balances, - avaults.map((v) => [avDAI, v]), - chainBlocks.avax, - "avax", - (addr) => { - return transforms[addr.toLowerCase()] ?? `avax:${addr}`; - } - ); - const [{ output: jDAIRate }, { output: jDAIBalance }] = await Promise.all([ - sdk.api.abi.call({ - chain: 'avax', - target: '0xc988c170d0E38197DC634A45bF00169C7Aa7CA19', - block: chainBlocks.avax, - abi: abi.exchangeRateStored - }), - sdk.api.erc20.balanceOf({ - target: "0xc988c170d0E38197DC634A45bF00169C7Aa7CA19", - owner: "0xcD62196CC117EA7fd9525ADe37e44d01209e8EBB", - block: chainBlocks.avax, - chain: 'avax' - }) - ]) - sdk.util.sumSingleBalance(balances, `avax:${DAI}`, jDAIRate * jDAIBalance / 10 ** 18) - await unwrapCreamTokens( - balances, - [[ - "0x835866d37afb8cb8f8334dccdaf66cf01832ff5d", - "0xEb2A90ED68017Ac1B068077C5D1537f4C544036C" - ]], - chainBlocks.avax, - "avax", - (addr) => { - return transforms[addr.toLowerCase()] ?? `avax:${addr}`; - } - ); - return balances; +async function avaxTvl(api) { + await sumTokens2({ api, owners: avaults, token: avDAI}) + await sumTokens2({ api, owner: '0xcD62196CC117EA7fd9525ADe37e44d01209e8EBB', token: '0xc988c170d0E38197DC634A45bF00169C7Aa7CA19'}) + return sumTokens2({ api, owner: '0xEb2A90ED68017Ac1B068077C5D1537f4C544036C', token: '0x835866d37afb8cb8f8334dccdaf66cf01832ff5d'}) } module.exports = { diff --git a/projects/grape-finance/index.js b/projects/grape-finance/index.js index 3e8edd9420..6a2164ea14 100644 --- a/projects/grape-finance/index.js +++ b/projects/grape-finance/index.js @@ -1,4 +1,4 @@ -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const { staking } = require("../helper/staking"); const grape = "0x5541D83EFaD1f281571B343977648B75d95cdAC2"; @@ -15,7 +15,7 @@ const LPTokens = [ module.exports = { avax:{ tvl: async () => ({}), - pool2: pool2Exports(rewardpool, LPTokens, "avax"), + pool2: pool2(rewardpool, LPTokens, "avax"), staking: staking(boardroom, wine) } } \ No newline at end of file diff --git a/projects/grave/index.js b/projects/grave/index.js index 2e2e123fda..dda9c9f03a 100644 --- a/projects/grave/index.js +++ b/projects/grave/index.js @@ -1,6 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { stakingPricedLP } = require("../helper/staking"); -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const GRAVE = "0x3700a92dd231F0CaC37D31dBcF4c0f5cCb1db6Ca" const GSHARE = "0xffe04bf98c7111360bf7a6c56b343915543cd941" @@ -29,7 +29,7 @@ const pool2LPs = [ module.exports = { avax:{ tvl: atvl, - pool2: pool2Exports(GShareRewardPool,pool2LPs,"avax"), + pool2: pool2(GShareRewardPool,pool2LPs,"avax"), staking: stakingPricedLP(ASYLUM, GSHARE, "avax", gShareAvaxLp, "wrapped-avax") } }; \ No newline at end of file diff --git a/projects/hades-money/index.js b/projects/hades-money/index.js index 991b828d2a..f1389c2562 100644 --- a/projects/hades-money/index.js +++ b/projects/hades-money/index.js @@ -1,5 +1,5 @@ const { staking } = require("../helper/staking"); -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const hades = "0x88C37E0bc6a237e96bc4A82774A38BBc30efF3Cf"; const hellshare = "0xEfB15eF34f85632fd1D4C17FC130CcEe3D3D48aE"; @@ -15,6 +15,6 @@ module.exports = { metis: { tvl: async () => ({}), staking: staking(masonry, hellshare), - pool2: pool2Exports(hellsharerewardpool, pool2LPs, "metis") + pool2: pool2(hellsharerewardpool, pool2LPs, "metis") } } \ No newline at end of file diff --git a/projects/helper/ohm.js b/projects/helper/ohm.js index 59ed5d2312..79502966df 100644 --- a/projects/helper/ohm.js +++ b/projects/helper/ohm.js @@ -1,26 +1,15 @@ -const { staking, stakingUnknownPricedLP } = require('./staking') -const { sumTokensAndLPsSharedOwners, sumLPWithOnlyOneTokenOtherThanKnown } = require('./unwrapLPs') +const { staking, } = require('./staking') +const { sumTokens2 } = require('./unwrapLPs') -function ohmTvl(treasury, treasuryTokens, chain = 'ethereum', stakingAddress, stakingToken, transformOriginal = undefined, fix, tokenOnCoingecko = true) { - let transform = transformOriginal - const tvl = async (time, ethBlock, chainBlocks) => { - const block = chainBlocks[chain] - const balances = {} - await sumTokensAndLPsSharedOwners(balances, tokenOnCoingecko?treasuryTokens:treasuryTokens.filter(t=>t[1]===false), [treasury], block, chain, transform || (addr => `${chain}:${addr}`)) - if(!tokenOnCoingecko){ - await Promise.all(treasuryTokens.filter(t=>t[1]===true).map(t=> - sumLPWithOnlyOneTokenOtherThanKnown(balances, t[0], treasury, stakingToken, block, chain, transform) - )) - } - if (fix) fix(balances) - return balances +function ohmTvl(treasury, treasuryTokens, chain = 'ethereum', stakingAddress, stakingToken) { + const tvl = async (api) => { + const tokens = treasuryTokens.map(t => t[0]) + return sumTokens2({ api, tokens, owner: treasury, resolveLP: true, }) } return { [chain]: { tvl, - staking: tokenOnCoingecko? - staking(stakingAddress, stakingToken, chain, transform ? transform(stakingToken) : undefined) - : stakingUnknownPricedLP(stakingAddress, stakingToken, chain, treasuryTokens.find(t=>t[1]===true)[0], transform) + staking: staking(stakingAddress, stakingToken) } } } diff --git a/projects/helper/pool2.js b/projects/helper/pool2.js index bc4a64d177..82589cad5f 100644 --- a/projects/helper/pool2.js +++ b/projects/helper/pool2.js @@ -1,163 +1,26 @@ const { _BASE_TOKEN_, _QUOTE_TOKEN_ } = require('./abis/dodo.json') -const sdk = require('@defillama/sdk') -const { default: BigNumber } = require('bignumber.js') -const { unwrapUniswapLPs, sumTokensAndLPsSharedOwners, sumTokensExport, } = require('./unwrapLPs'); -const { getFixBalancesSync } = require('../helper/portedTokens') -const masterchefAbi = require("./abis/masterchef.json") -const token0Abi = 'address:token0' -const token1Abi = 'address:token1' -const { isLP, getPoolInfo } = require('./masterchef') +const { sumTokensExport, sumTokens2, } = require('./unwrapLPs'); const { sumTokensExport: uSumExport } = require('./unknownTokens') -function pool2(stakingContract, lpToken, chain, transformAddress) { +function pool2(stakingContract, lpToken) { if (!Array.isArray(stakingContract)) stakingContract = [stakingContract] if (!Array.isArray(lpToken)) lpToken = [lpToken] if (arguments.length === 2) return uSumExport({ tokens: lpToken, owners: stakingContract, useDefaultCoreAssets: true }) - return pool2s(stakingContract, lpToken, chain, transformAddress) + return pool2s(stakingContract, lpToken) } -function pool2s(stakingContracts, lpTokens, chain = "ethereum", transformAddress = undefined) { +function pool2s(stakingContracts, lpTokens) { return async (api) => { - chain = api.chain ?? chain - const block = api.block - const balances = {} - let transform = transformAddress - if (transform === undefined) { - transform = addr => `${chain}:${addr}` - } - await sumTokensAndLPsSharedOwners(balances, lpTokens.map(token => [token, true]), stakingContracts, block, chain, transform) - const fixBalances = getFixBalancesSync(chain) - fixBalances(balances) - return balances + return sumTokens2({ api, tokens: lpTokens, owners: stakingContracts, resolveLP: true}) } } -function pool2Exports(stakingContract, lpTokens, chain, transformAddress) { - return pool2s([stakingContract], lpTokens, chain, transformAddress) -} - -function dodoPool2(stakingContract, lpToken, chain = "ethereum", transformAddress = addr => addr) { - return async (_timestamp, _ethBlock, chainBlocks) => { - const balances = {} - const block = chainBlocks[chain] - const [baseToken, quoteToken, totalSupply] = await Promise.all([_BASE_TOKEN_, _QUOTE_TOKEN_, "erc20:totalSupply"].map(abi => sdk.api.abi.call({ - target: lpToken, - chain, - block, - abi - }).then(r => r.output))) - const [baseTokenBalance, quoteTokenBalance, stakedLPBalance] = await Promise.all([ - [baseToken, lpToken], [quoteToken, lpToken], [lpToken, stakingContract] - ].map(token => sdk.api.abi.call({ - target: token[0], - params: [token[1]], - chain, - block, - abi: 'erc20:balanceOf' - }).then(r => r.output))) - sdk.util.sumSingleBalance(balances, baseToken, BigNumber(baseTokenBalance).times(stakedLPBalance).div(totalSupply).toFixed(0)) - sdk.util.sumSingleBalance(balances, quoteToken, BigNumber(quoteTokenBalance).times(stakedLPBalance).div(totalSupply).toFixed(0)) - return balances - } -} - - -async function pool2BalanceFromMasterChef(balances, masterchef, token, block, chain = "ethereum", transformAddress = (addr) => addr, poolInfoAbi = masterchefAbi.poolInfo) { - const poolInfo = await getPoolInfo(masterchef, block, chain, poolInfoAbi) - - let symbols = ( - await sdk.api.abi.multiCall({ - calls: poolInfo.map((p) => ({ - target: p.output.lpToken, - })), - abi: "erc20:symbol", - block, - chain, - }) - ).output; - - let lpTokens = []; - - for (let i = 0; i < symbols.length; i++) { - let symbol = symbols[i]; - if (symbol.output === null) { - continue; - } - if (isLP(symbol.output, symbol.input.target, chain)) { - lpTokens.push(symbol.input.target); - } - } - - let [tokens0, tokens1] = await Promise.all([ - sdk.api.abi.multiCall({ - calls: lpTokens.map((p) => ({ - target: p, - })), - abi: token0Abi, - block, - chain, - }), - sdk.api.abi.multiCall({ - calls: lpTokens.map((p) => ({ - target: p, - })), - abi: token1Abi, - block, - chain, - }), - ]); - - let pool2LPs = []; - - for (let i = 0; i < lpTokens.length; i++) { - if ( - tokens0.output[i].output.toLowerCase() === token.toLowerCase() || - tokens1.output[i].output.toLowerCase() === token.toLowerCase() - ) { - pool2LPs.push(lpTokens[i]); - } - } - - let lpBalances = (await sdk.api.abi.multiCall({ - calls: pool2LPs.map((p) => ({ - target: p, - params: masterchef - })), - abi: "erc20:balanceOf", - block, - chain, - })).output; - - let lpPositions = lpBalances.map((p) => ({ - balance: p.output, - token: p.input.target - })); - - await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAddress); - -} - -function pool2BalanceFromMasterChefExports(masterchef, token, chain = "ethereum", transformAddress = (addr) => addr, poolInfoAbi = masterchefAbi.poolInfo) { - - return async (_timestamp, _ethBlock, chainBlocks) => { - let balances = {}; - - await pool2BalanceFromMasterChef(balances, masterchef, token, chainBlocks[chain], chain, transformAddress, poolInfoAbi); - - return balances; - } -} - -function pool2UniV3({ stakingAddress, chain = 'ethereum' }) { +function pool2UniV3({ stakingAddress, }) { return sumTokensExport({ owner: stakingAddress, resolveUniV3: true }) } module.exports = { pool2, - pool2Exports, - dodoPool2, pool2s, - pool2BalanceFromMasterChef, - pool2BalanceFromMasterChefExports, pool2UniV3, } \ No newline at end of file diff --git a/projects/helper/tomb.js b/projects/helper/tomb.js index ba6f784d49..7473d16b0c 100644 --- a/projects/helper/tomb.js +++ b/projects/helper/tomb.js @@ -1,5 +1,5 @@ const { staking, stakingUnknownPricedLP } = require("./staking"); -const { pool2Exports } = require("./pool2"); +const { pool2 } = require("./pool2"); const sdk = require("@defillama/sdk"); const token0Abi = 'address:token0' const token1Abi = 'address:token1' @@ -12,7 +12,7 @@ function tombTvl(token, share, rewardPool, masonry, pool2LPs, chain = "ethereum" [chain]: { tvl: async () => ({}), staking: staking(masonry, share, chain), - pool2: pool2Exports(rewardPool, pool2LPs, chain, transform) + pool2: pool2(rewardPool, pool2LPs, chain, transform) } } } diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index deca1d854b..facf05dcb6 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -103,53 +103,6 @@ async function addTokensAndLPs(balances, tokens, amounts, block, chain = "ethere await unwrapUniswapLPs(balances, lpBalances, block, chain, transformAddress) } -/* -tokens [ - [token, isLP] - eg ["0xaaa", true] -] -*/ -async function sumTokensAndLPsSharedOwners(balances, tokens, owners, block, chain = "ethereum", transformAddress) { - if (!transformAddress) - transformAddress = await getChainTransform(chain) - const balanceOfTokens = await sdk.api.abi.multiCall({ - calls: tokens.map(t => owners.map(o => ({ - target: t[0], - params: o - }))).flat(), - abi: 'erc20:balanceOf', - block, - chain - }) - await requery(balanceOfTokens, chain, block, 'erc20:balanceOf') - const isLP = {} - tokens.forEach(token => { - isLP[token[0].toLowerCase()] = token[1] - }) - const lpBalances = [] - balanceOfTokens.output.forEach((result, idx) => { - const token = result.input.target.toLowerCase() - const balance = result.output - if (isLP[token] === true) { - lpBalances.push({ - token, - balance - }) - } else { - sdk.util.sumSingleBalance(balances, transformAddress(token), balance); - } - }) - if (lpBalances.length > 0) { - await unwrapUniswapLPs(balances, lpBalances, block, chain, transformAddress) - } -} - -async function sumTokensSharedOwners(balances, tokens, owners, block, chain = "ethereum", transformAddress) { - if (transformAddress === undefined) { - transformAddress = addr => `${chain}:${addr}` - } - await sumTokensAndLPsSharedOwners(balances, tokens.map(t => [t, false]), owners, block, chain, transformAddress) -} - async function sumLPWithOnlyOneToken(balances, lpToken, owner, listedToken, block, chain = "ethereum", transformAddress = id => id) { const [balanceOfLP, balanceOfTokenListedInLP, lpSupply] = await Promise.all([ sdk.api.erc20.balanceOf({ @@ -589,40 +542,6 @@ async function sumTokens(balances = {}, tokensAndOwners, block, chain = "ethereu return balances } -async function unwrapCreamTokens(balances, tokensAndOwners, block, chain = "ethereum", transformAddress = id => id) { - const [balanceOfTokens, exchangeRates, underlyingTokens] = await Promise.all([ - sdk.api.abi.multiCall({ - calls: tokensAndOwners.map(t => ({ - target: t[0], - params: t[1] - })), - abi: 'erc20:balanceOf', - block, - chain - }), - sdk.api.abi.multiCall({ - calls: tokensAndOwners.map(t => ({ - target: t[0], - })), - abi: creamAbi.exchangeRateStored, - block, - chain - }), - sdk.api.abi.multiCall({ - calls: tokensAndOwners.map(t => ({ - target: t[0], - })), - abi: creamAbi.underlying, - block, - chain - }) - ]) - balanceOfTokens.output.forEach((balanceCall, i) => { - const underlying = underlyingTokens.output[i].output - const balance = BigNumber(balanceCall.output).times(exchangeRates.output[i].output).div(1e18).toFixed(0) - sdk.util.sumSingleBalance(balances, transformAddress(underlying), balance) - }) -} const cvx_abi = { cvxBRP_pid: "uint256:pid", @@ -666,15 +585,6 @@ async function genericUnwrapCvx(balances, holder, cvx_BaseRewardPool, block, cha return balances } -async function genericUnwrapCvxDeposit({ api, owner, token, balances }) { - if (!balances) balances = await api.getBalances() - const [bal, cToken] = await api.batchCall([ - { target: token, params: owner, abi: 'erc20:balanceOf' }, - { target: token, abi: 'address:curveToken' }, - ]) - sdk.util.sumSingleBalance(balances, cToken, bal, api.chain) - return balances -} async function genericUnwrapCvxRewardPool({ api, owner, pool, balances }) { if (!balances) balances = await api.getBalances() @@ -1132,13 +1042,10 @@ module.exports = { unwrapUniswapLPs, unwrapSlipstreamNFT, addTokensAndLPs, - sumTokensAndLPsSharedOwners, sumTokensAndLPs, sumTokens, sumBalancerLps, - unwrapCreamTokens, sumLPWithOnlyOneToken, - sumTokensSharedOwners, sumLPWithOnlyOneTokenOtherThanKnown, genericUnwrapCvx, unwrapLPsAuto, @@ -1147,7 +1054,6 @@ module.exports = { sumTokens2, unwrapBalancerToken, sumTokensExport, - genericUnwrapCvxDeposit, genericUnwrapCvxRewardPool, genericUnwrapCvxFraxFarm, genericUnwrapCvxPrismaPool, diff --git a/projects/hermes-finance/index.js b/projects/hermes-finance/index.js index a44ac2602a..9cb0bd2a3a 100644 --- a/projects/hermes-finance/index.js +++ b/projects/hermes-finance/index.js @@ -1,5 +1,5 @@ const { staking } = require('../helper/staking'); -const { pool2Exports } = require('../helper/pool2'); +const { pool2 } = require('../helper/pool2'); const hermes = "0xB15f02F9Da8CD1f99E9dd375F21dc96D25ddd82C"; const hermesShares = "0xfa4b6db72a650601e7bd50a0a9f537c9e98311b2"; @@ -15,6 +15,6 @@ module.exports = { avax:{ tvl: async () => ({}), staking: staking(olympus, hermesShares), - pool2: pool2Exports(hShareRewardPool, pool2LPs, "avax") + pool2: pool2(hShareRewardPool, pool2LPs, "avax") } } \ No newline at end of file diff --git a/projects/iTrustfinance/index.js b/projects/iTrustfinance/index.js index 3b82c128a9..b66dd9fd19 100644 --- a/projects/iTrustfinance/index.js +++ b/projects/iTrustfinance/index.js @@ -1,7 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const vaults = [ // sNXM (Nexus Mutual Strategy Vault) @@ -31,29 +28,10 @@ const erc20Tokens = [ ]; /*** Vaults and staking TVL Portions ***/ -const ethTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - for (const vault of vaults) { - const supply = ( - await sdk.api.abi.call({ - abi: abi.totalSupply, - target: vault, - ethBlock, - }) - ).output; - - sdk.util.sumSingleBalance(balances, NXM, supply); - } - - await sumTokensAndLPsSharedOwners( - balances, - erc20Tokens.map(token => [token, false]), - vaults, - chainBlocks["ethereum"] - ); - - return balances; +const ethTvl = async (api) => { + const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: vaults}) + api.add(NXM, supplies) + return api.sumTokens({ owners: vaults, tokens: erc20Tokens}) }; module.exports = { diff --git a/projects/keep3r/index.js b/projects/keep3r/index.js index 1c0b7e2ce0..8bbbffe31d 100644 --- a/projects/keep3r/index.js +++ b/projects/keep3r/index.js @@ -1,99 +1,53 @@ -const sdk = require("@defillama/sdk"); - const abis = require("./abis.js").abis; const registry = require("./registry.js").registry; -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - -async function staking(_timestamp, block) { - const { KP3R, VKP3R } = registry; - const balances = {}; - - await sumTokensAndLPsSharedOwners(balances, [[KP3R, false]], [VKP3R], block); +const { staking } = require('../helper/staking'); +const { sumTokens2 } = require("../helper/unwrapLPs.js"); - // @dev should return stakingTvl - return balances; -} - -async function borrowed(_timestamp, block) { - /** @type {Balances} */ - const balances = {}; +async function borrowed(api) { const cyTokens = Object.values(registry.cTokens); - const { output: borrowed } = await sdk.api.abi.multiCall({ - block: block, - calls: cyTokens.map((coin) => ({ - target: coin, - })), - abi: abis.totalBorrows, - }); + const borrowed = await api.multiCall({ calls: cyTokens, abi: abis.totalBorrows, }); const ib = Object.values(registry.ibTokens); for (const idx in borrowed) { - sdk.util.sumSingleBalance( - balances, - ib[idx].toLowerCase(), - borrowed[idx].output - ); + api.add(ib[idx], borrowed[idx]) } - - return balances; } -async function tvl(_timestamp, block) { - /** @type {Balances} */ - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [registry.CVX, false], - [registry.DAI, false], - [registry.KP3R, false], - [registry.SUSHI, false], - [registry.CRV, false], - [registry.CVXCRV, false], - [registry.SPELL, false], - [registry.WETH, false], - ].concat( - [ - [registry.KPR_WETH_SUSHI_POOL, false], - [registry.USDC_ibAUD_POOL, false], - [registry.USDC_ibEUR_POOL, false], - [registry.USDC_ibKRW_POOL, false], - [registry.USDC_ibJPY_POOl, false], - [registry.USDC_ibGBP_POOL, false], - [registry.USDC_ibCHF_POOL, false], - ], - Object.values(registry.ibTokens).map((t) => [t, false]) - ), - [registry.YEARN_DEPLOYER, registry.BOND_TREASURY].concat( +async function tvl(api) { + const tokens = [ + registry.CVX, + registry.DAI, + registry.KP3R, + registry.SUSHI, + registry.CRV, + registry.CVXCRV, + registry.SPELL, + registry.WETH, + registry.KPR_WETH_SUSHI_POOL, + registry.USDC_ibAUD_POOL, + registry.USDC_ibEUR_POOL, + registry.USDC_ibKRW_POOL, + registry.USDC_ibJPY_POOl, + registry.USDC_ibGBP_POOL, + registry.USDC_ibCHF_POOL, + ].concat(Object.values(registry.ibTokens)) + + await api.sumTokens({ + tokens, owners: [registry.YEARN_DEPLOYER, registry.BOND_TREASURY].concat( Object.values(registry.cTokens), Object.values(registry.ibCrvGauges) ), - block - ); - - await sumTokensAndLPsSharedOwners( - balances, - Object.values(registry.Kp3rV2Klps).map((t) => [t, false]), - [registry.KP3RV2], - block - ); - - await sumTokensAndLPsSharedOwners( - balances, - Object.values(registry.Kp3rV1Slps).map((t) => [t, false]), - [registry.KP3R], - block - ); - - return balances; + }) + await api.sumTokens({ tokens: Object.values(registry.Kp3rV2Klps), owner: registry.KP3RV2, }) + await api.sumTokens({ tokens: Object.values(registry.Kp3rV1Slps), owner: registry.KP3R, }) + return sumTokens2({ api, resolveLP: true, }) } module.exports = { ethereum: { tvl, - staking, + staking: staking(registry.VKP3R, registry.KP3R), borrowed }, }; diff --git a/projects/klondike/index.js b/projects/klondike/index.js index 80b23854d4..4e8df2ff23 100644 --- a/projects/klondike/index.js +++ b/projects/klondike/index.js @@ -1,8 +1,7 @@ -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const stakingContract = "0xAcbdB82f07B2653137d3A08A22637121422ae747"; const KlonX = "0xbf15797BB5E47F6fB094A4abDB2cfC43F77179Ef"; @@ -23,31 +22,12 @@ const fundContracts = [ "0x3BE908C22D21ab32C5A04CFCa3a9A70d4FEfc098", ]; -async function ethTvl(block) { - const balances = {}; - - for (const pool of [KWBTCWBTCLPKlonXPool, KXUSDDAILPKlonXPool]) { - await sumTokensAndLPsSharedOwners( - balances, - pool == KWBTCWBTCLPKlonXPool - ? [[WBTC_KBTC_UNI, true]] - : [[KXUSD_DAI_UNI, true]], - [pool] - ); - } - - const tokenAddresses = ( - await sdk.api.abi.call({ - abi: abi.allAllowedTokens, - target: fundContracts[0], - }) - ).output; - - for (const token of tokenAddresses) { - await sumTokensAndLPsSharedOwners(balances, [[token, false]], fundContracts); - } - - return balances; +async function ethTvl(api) { + const tokenAddresses = await api.call({ abi: abi.allAllowedTokens, target: fundContracts[0], }) + tokenAddresses.push(WBTC_KBTC_UNI, KXUSD_DAI_UNI) + fundContracts.push(KWBTCWBTCLPKlonXPool, KXUSDDAILPKlonXPool) + + return sumTokens2({ api, tokens: tokenAddresses, owners: fundContracts, resolveLP: true }) } module.exports = { diff --git a/projects/maximizer/index.js b/projects/maximizer/index.js index ba02b163b0..96f30b08e1 100644 --- a/projects/maximizer/index.js +++ b/projects/maximizer/index.js @@ -1,232 +1,14 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const BigNumber = require("bignumber.js"); -const { sumTokensAndLPsSharedOwners, unwrapUniswapLPs } = require("../helper/unwrapLPs"); -const sdk = require("@defillama/sdk"); -const allocatorAbi = require("./allocatorAbi.json"); -const pngStakingAbi = require("./stakingRewardsAbi.json"); -const joeStakingAbi = require("./stableJoeStakingAbi.json"); -const veptpAbi = require("./veptpAbi.json"); -const qiTokenAbi = require("./qiTokenAbi.json"); const MaximizerStaking = "0x6d7AD602Ec2EFdF4B7d34A9A53f92F06d27b82B1"; -const Treasury = "0x22cF6c46b4E321913ec30127C2076b7b12aC6d15"; -const Deployer = "0xb2Fe117269292D41c3b5bdD6B600Fc80239AfBeC"; -const PngAllocator = "0x1ff1E60e7af648DFE7B95E025214bfCd6f3D9524"; -const JoeAllocator = "0x7613D00f7b49E514Ce84d6369EA12Cc98219Ed40"; -const BenqiAllocator = '0x1e3834DA9a9B4d4016427554Ef31ff4e1F41d4Ed'; - const MAXI = "0x7C08413cbf02202a1c13643dB173f2694e0F73f0"; -const SMAXI = "0xEcE4D1b3C2020A312Ec41A7271608326894076b4"; -const DAIe = ADDRESSES.avax.DAI; -const USDC = ADDRESSES.avax.USDC; -const USDCe = ADDRESSES.avax.USDC_e; -const WAVAX = ADDRESSES.avax.WAVAX; -const PNG = "0x60781C2586D68229fde47564546784ab3fACA982"; -const QI = "0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5"; -const JOE = ADDRESSES.avax.JOE; -const XJOE = ADDRESSES.avax.xJOE; -const ISA = "0x3EeFb18003D033661f84e48360eBeCD181A84709"; -const PTP = "0x22d4002028f537599bE9f666d1c4Fa138522f9c8"; -const VEPTP = "0x5857019c749147EEE22b1Fe63500F237F3c1B692"; -const MORE = "0xd9D90f882CDdD6063959A9d837B05Cb748718A05"; -const MONEY = "0x0f577433Bf59560Ef2a79c124E9Ff99fCa258948"; -const HEC = "0xC7f4debC8072e23fe9259A5C0398326d8EfB7f5c"; -const SAVAX = ADDRESSES.avax.SAVAX; -const MAXI_DAI_JLP = "0xfBDC4aa69114AA11Fae65E858e92DC5D013b2EA9"; -const MAXI_WAVAX_PGL = "0xbb700450811a30c5ee0dB80925Cf1BA53dBBd60A"; -const PNG_WAVAX_PGL = "0xd7538cABBf8605BdE1f4901B47B8D42c61DE0367"; -const QI_WAVAX_PGL = "0xE530dC2095Ef5653205CF5ea79F8979a7028065c"; -const JOE_WAVAX_JLP = "0x454E67025631C065d3cFAD6d71E6892f74487a15"; -const ISA_WAVAX_JLP = "0x9155f441FFDfA81b13E385bfAc6b3825C05184Ee"; -const PTP_WAVAX_JLP = "0xCDFD91eEa657cc2701117fe9711C9a4F61FEED23"; -const MORE_WAVAX_JLP = "0xb8361D0E3F3B0fc5e6071f3a3C3271223C49e3d9"; -const HEC_WAVAX_JLP = "0x4dc5291cdc7ad03342994e35d0ccc76de065a566"; -const AVAX_QITOKEN = "0x5C0401e81Bc07Ca70fAD469b451682c0d747Ef1c"; -const QI_QITOKEN = "0x35Bd6aedA81a7E5FC7A7832490e71F757b0cD9Ce"; -const DAI_QITOKEN = "0x835866d37AFB8CB8F8334dCCdaf66cf01832Ff5D"; -const USDC_QITOKEN = "0xB715808a78F6041E46d61Cb123C9B4A27056AE9C"; -const SAVAX_QITOKEN = "0xF362feA9659cf036792c9cb02f8ff8198E21B4cB"; - -const PngStaking = "0x88afdaE1a9F58Da3E68584421937E5F564A0135b"; -const JoeStaking = "0x1a731B2299E22FbAC282E7094EdA41046343Cb51"; - -const Allocators = [ - { allocator: PngAllocator, stakeToken: PNG, yieldToken: PNG, yieldStaking: PngStaking, abi: pngStakingAbi.balanceOf, params: [ PngAllocator ], transformResult: (result) => result.output }, - { allocator: JoeAllocator, stakeToken: JOE, yieldToken: JOE, yieldStaking: JoeStaking, abi: joeStakingAbi.getUserInfo, params: [ JoeAllocator, USDC ], transformResult: (result) => result.output.amount }, -]; -const Allocations = [ - { allocator: PngAllocator, token: PNG_WAVAX_PGL, pid: 0 }, - { allocator: PngAllocator, token: QI_WAVAX_PGL, pid: 19 }, - { allocator: PngAllocator, token: MAXI_WAVAX_PGL, pid: 42 }, - { allocator: JoeAllocator, token: JOE_WAVAX_JLP, pid: 0 }, - { allocator: JoeAllocator, token: ISA_WAVAX_JLP, pid: 36 }, - { allocator: JoeAllocator, token: HEC_WAVAX_JLP, pid: 41 }, - { allocator: JoeAllocator, token: MORE_WAVAX_JLP, pid: 44 }, -]; - -const BenqiMarkets = [ - { qiToken: AVAX_QITOKEN, underlyingToken: WAVAX }, - { qiToken: QI_QITOKEN, underlyingToken: QI }, - { qiToken: DAI_QITOKEN, underlyingToken: DAIe }, - { qiToken: USDC_QITOKEN, underlyingToken: USDC }, - { qiToken: SAVAX_QITOKEN, underlyingToken: SAVAX }, -]; - -const Tokens = [ - [MAXI, false], - [SMAXI, false], - [DAIe, false], - [USDC, false], - [WAVAX, false], - [PNG, false], - [QI, false], - [JOE, false], - [ISA, false], - [PTP, false], - [MORE, false], - [MONEY, false], - [HEC, false], - [MAXI_DAI_JLP, true], - [MAXI_WAVAX_PGL, true], - [PNG_WAVAX_PGL, true], - [QI_WAVAX_PGL, true], - [JOE_WAVAX_JLP, true], - [ISA_WAVAX_JLP, true], - [PTP_WAVAX_JLP, true], - [MORE_WAVAX_JLP, true], - [HEC_WAVAX_JLP, true], -]; - -function compareToIgnoreCase(a, b) { - return a.toLowerCase() === b.toLowerCase(); -} - -const transformAddress = (addr) => { - let resultantAddress = addr; - // sMAXI -> MAXI - if (compareToIgnoreCase(addr, SMAXI)) { - resultantAddress = MAXI; - } - // USDC -> USDC.e - if (compareToIgnoreCase(addr, USDC)) { - resultantAddress = USDCe; - } - // MONEY -> DAI - if (compareToIgnoreCase(addr, MONEY)) { - resultantAddress = DAIe; - } - // xJOE -> JOE - if (compareToIgnoreCase(addr, XJOE)) { - resultantAddress = JOE; - } - return `avax:${resultantAddress.toLowerCase()}`; -}; - -const chainConfig = (chainBlocks) => ({ - block: chainBlocks.avax, - chain: "avax", - transformAddress, -}); - -const staking = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const stakingBalance = await sdk.api.abi.call({ - abi: "erc20:balanceOf", - target: MAXI, - params: MaximizerStaking, - block: chainBlocks.avax, - chain: "avax", - }); - - sdk.util.sumSingleBalance(balances, "avax:" + MAXI, stakingBalance.output); - - return balances; -}; - -async function tvl(timestamp, block, chainBlocks) { - const config = chainConfig(chainBlocks); - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - Tokens, - [Treasury], - config.block, - config.chain, - config.transformAddress, - ); - - const allocatedLps = await sdk.api.abi.multiCall({ - calls: Allocations.map(allocation => ({ - target: allocation.allocator, - params: [allocation.token] - })), - abi: allocatorAbi.balanceOf, - ...config, - }); - - await unwrapUniswapLPs( - balances, - Allocations.map((allocation, index) => ({ - balance: allocatedLps.output[index].output, - token: allocation.token, - })), - config.block, - config.chain, - config.transformAddress, - ); - - const stakedYieldTokens = (await Promise.all( - Allocators.map(allocator => ( - sdk.api.abi.call({ - target: allocator.yieldStaking, - params: allocator.params, - abi: allocator.abi, - ...config, - }) - )) - )).map((result, index) => Allocators[index].transformResult(result)); - - const pendingYieldTokens = (await sdk.api.abi.multiCall({ - calls: Allocators.map(allocator => ({ - target: allocator.allocator, - })), - abi: allocatorAbi.pending, - ...config, - })).output.map(result => result.output); - - for (const [index, allocator] of Allocators.entries()) { - sdk.util.sumSingleBalance(balances, config.transformAddress(allocator.stakeToken), stakedYieldTokens[index]); - sdk.util.sumSingleBalance(balances, config.transformAddress(allocator.yieldToken), pendingYieldTokens[index]); - } - - for (const market of BenqiMarkets) { - const [balance, exchangeRate] = await Promise.all([ - sdk. - api.abi.call({ target: market.qiToken, abi: qiTokenAbi.balanceOf, params: [BenqiAllocator], ...config }), - sdk.api.abi.call({ target: market.qiToken, abi: qiTokenAbi.exchangeRateStored, params: [], ...config }), - ]); - const underlyingTokenBalance = new BigNumber(balance.output).times(new BigNumber(exchangeRate.output)).div(new BigNumber(1e18)); - sdk.util.sumSingleBalance(balances, config.transformAddress(market.underlyingToken), underlyingTokenBalance.toFixed(0)); - } - - const stakedPtp = (await sdk.api.abi.call({ - target: VEPTP, - abi: veptpAbi.getStakedPtp, - params: [Deployer], - ...config, - })).output; - sdk.util.sumSingleBalance(balances, config.transformAddress(PTP), stakedPtp); - - return balances; -} +const staking = async (api) => api.sumTokens({ owner: MaximizerStaking, token: MAXI }) module.exports = { - avax:{ - tvl, + avax: { + tvl: () => ({}), staking, }, + deadFrom: '2022-06-13', methodology: "Counts MAXI, MAXI LP (MAXI-DAI.e JLP, MAXI-WAVAX PGL), DAI.e, USDC, WAVAX, liquidity tokens (PGL, JLP), single partner tokens on the treasury and allocators", }; diff --git a/projects/mm-stableswap/index.js b/projects/mm-stableswap/index.js index 6a9e1175c4..4c1466a82c 100644 --- a/projects/mm-stableswap/index.js +++ b/projects/mm-stableswap/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require("../helper/unwrapLPs"); const MM3BasePool = "0x61bB2F4a4763114268a47fB990e633Cb40f045F8"; @@ -8,29 +8,10 @@ const USDT = ADDRESSES.cronos.USDT; const USDC = ADDRESSES.cronos.USDC; -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [USDT, false], - [USDC, false], - [DAI, false], - ], - [MM3BasePool], - chainBlocks["cronos"], - 'cronos', - addr=>`cronos:${addr}`, - ); - - return balances; -} - module.exports = { - doublecounted: true, - cronos:{ - tvl, - }, - methodology: "Counts DAI, USDC, & USDT tokens on the 3MM Base Pool for tvl", + doublecounted: true, + cronos: { + tvl: sumTokensExport({ tokens: [DAI, USDC, USDT], owner: MM3BasePool }), + }, + methodology: "Counts DAI, USDC, & USDT tokens on the 3MM Base Pool for tvl", }; diff --git a/projects/monox/index.js b/projects/monox/index.js index c67ebfd3fb..3252b85a77 100644 --- a/projects/monox/index.js +++ b/projects/monox/index.js @@ -1,41 +1,31 @@ const ADDRESSES = require('../helper/coreAssets.json') -const {sumTokensSharedOwners} = require('../helper/unwrapLPs') +const { sumTokensExport } = require('../helper/unwrapLPs') -async function eth(timestamp, ethBlock, chainBlocks){ - const block = chainBlocks.ethereum - const balances = {} - await sumTokensSharedOwners(balances, [ +module.exports = { + hallmarks: [ + [1669766400, "swap contract exploit"] + ], + ethereum: { + tvl: sumTokensExport({ + owner: '0x59653E37F8c491C3Be36e5DD4D503Ca32B5ab2f4', tokens: [ "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "0x92e187a03b6cd19cb6af293ba17f2745fd2357d5", ADDRESSES.ethereum.WBTC, ADDRESSES.ethereum.WETH, ADDRESSES.ethereum.USDT, ADDRESSES.ethereum.USDC - ], ["0x59653E37F8c491C3Be36e5DD4D503Ca32B5ab2f4"], ethBlock) - return balances -} - -async function polygon(timestamp, ethBlock, chainBlocks){ - const block = chainBlocks.polygon - const balances = {} - await sumTokensSharedOwners(balances, [ + ] + }) + }, + polygon: { + tvl: sumTokensExport({ + owner: '0x3826367A5563eCE9C164eFf9701146d96cC70AD9', tokens: [ ADDRESSES.polygon.WBTC, ADDRESSES.polygon.USDT, ADDRESSES.polygon.USDC, ADDRESSES.polygon.WETH_1, ADDRESSES.polygon.WMATIC_2, - ], ["0x3826367A5563eCE9C164eFf9701146d96cC70AD9"], block, "polygon") - return balances -} - -module.exports = { - hallmarks: [ - [1669766400, "swap contract exploit"] - ], - ethereum:{ - tvl:eth - }, - polygon:{ - tvl:polygon - } + ] + }) + } } \ No newline at end of file diff --git a/projects/moonflowerfarmers/index.js b/projects/moonflowerfarmers/index.js index 57653f28ac..27f8f2bc33 100644 --- a/projects/moonflowerfarmers/index.js +++ b/projects/moonflowerfarmers/index.js @@ -1,42 +1,10 @@ -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const MFF = "0x78b65477bba78fc11735801d559c386611d07529"; const contract = "0xDE707357D10D86aE21373b290eAbBA07360896F6"; -const sdk = require("@defillama/sdk"); -const abi = require("../vexchange/abi.json"); - -async function staking(timestamp, _, {aurora: block}) { - const balances = {}; - const MFFPrice = await getMFFPrice(block); - - await sumTokensAndLPsSharedOwners( - balances, - [[MFF, false]], - [contract], - block, - "aurora", - (addr) => `aurora:${addr}` - ); - - balances.terrausd = (balances[`aurora:${MFF}`] * MFFPrice) / 10 ** 18; - delete balances[`aurora:${MFF}`]; - - return balances; -} -async function getMFFPrice(block) { - const reserves = ( - await sdk.api.abi.call({ - target: "0x3c508FC05C289BA989CF877bb2e3f6e54eF3fc95", - abi: abi.getReserves, - block, - chain: "aurora", - }) - ).output; - return reserves[0] / reserves[1]; -} +const { staking } = require('../helper/staking') module.exports = { aurora: { tvl: () => ({}), - staking, + staking: staking(contract, MFF), }, }; diff --git a/projects/nest/index.js b/projects/nest/index.js index a19ee7ba48..cf28a9a05a 100644 --- a/projects/nest/index.js +++ b/projects/nest/index.js @@ -1,56 +1,47 @@ -const sdk = require("@defillama/sdk"); -const { getChainTransform } = require("../helper/portedTokens"); -const { sumTokensSharedOwners } = require("../helper/unwrapLPs"); -const contracts = require('./contracts'); +const { sumTokensExport } = require("../helper/unwrapLPs"); -function staking(chain) { - return async (timestamp, block, chainBlocks) => { - return { - [contracts.NEST.ethereum]: - (await sdk.api.abi.multiCall({ - target: contracts.NEST[chain], - calls: contracts.stakingContracts[chain].map(h => ({ - params: h - })), - block: chainBlocks[chain], - abi: 'erc20:balanceOf', - chain - })).output.map(b => b.output) - .reduce((a, b) => Number(a) + Number(b), 0) - }; - }; -} - -function tvl(chain) { - return async (timestamp, block, chainBlocks) => { - const balances = {}; - const transform = await getChainTransform(chain); - - if (!contracts.tvlContracts.hasOwnProperty([chain])) { - return balances; - } +module.exports = { + methodology: "Counts NEST tokens that have been staked in the nest dapp", +}; - await sumTokensSharedOwners( - balances, - contracts.tokens[chain], - contracts.tvlContracts[chain], - chainBlocks[chain], - chain, - transform - ); - return balances; - }; +const config = { + ethereum: { + tvlContracts: ['0xE544cF993C7d477C7ef8E91D28aCA250D135aa03'], + tokens: [ + "0x0316EB71485b0Ab14103307bf65a021042c6d380" + ], + NEST: '0x04abEdA201850aC0124161F037Efd70c74ddC74C', + stakingContracts: [ + "0xaA7A74a46EFE0C58FBfDf5c43Da30216a8aa84eC", + "0x505eFcC134552e34ec67633D1254704B09584227", + "0x9a5C88aC0F209F284E35b4306710fEf83b8f9723", + "0x34B931C7e5Dc45dDc9098A1f588A0EA0dA45025D", + "0xE544cF993C7d477C7ef8E91D28aCA250D135aa03" + ] + }, + bsc: { + tvlContracts: ['0x9484f12044b9d5707AfeaC5BD02b5E0214381801'], + tokens: [ + "0x55d398326f99059fF775485246999027B3197955" + ], + NEST: '0x98f8669F6481EbB341B522fCD3663f79A3d1A6A7', + stakingContracts: ["0x09CE0e021195BA2c1CDE62A8B187abf810951540"] + }, + polygon: { + NEST: '0x98f8669F6481EbB341B522fCD3663f79A3d1A6A7', + stakingContracts: ["0x09CE0e021195BA2c1CDE62A8B187abf810951540"] + }, + kcc: { + NEST: '0x98f8669F6481EbB341B522fCD3663f79A3d1A6A7', + stakingContracts: ["0x7DBe94A4D6530F411A1E7337c7eb84185c4396e6"] + }, } -const chainExports = Object.keys(contracts.stakingContracts).reduce((a, chain) => ({ - ...a, [chain]: { - tvl: tvl(chain), - staking: staking(chain) - } -}), {}) - -module.exports = { - methodology: "Counts NEST tokens that have been staked in the nest dapp", - ...chainExports -}; \ No newline at end of file +Object.keys(config).forEach(chain => { + const { NEST: token, stakingContracts = [], tokens = [], tvlContracts = [] } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ tokens, owners: tvlContracts }), + staking: token ? sumTokensExport({ token, owners: stakingContracts }) : undefined, + } +}) \ No newline at end of file diff --git a/projects/newland/index.js b/projects/newland/index.js index 3f979353ef..58cb18ef7d 100644 --- a/projects/newland/index.js +++ b/projects/newland/index.js @@ -3,21 +3,12 @@ const abi = require("./abi.json") const { unwrapLPsAuto, } = require("../helper/unwrapLPs"); const { getChainTransform } = require("../helper/portedTokens"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const BoosterStakingChef_Heco = "0x7970234cDfa8898853Eaa1e2586cE933d9054af8"; const MdexStakingChef_Heco = "0x44aEfA01E92d170C915D87C2AB03D03cA49D5cb5"; const LavaStakingChef_heco = "0x9B948c946BE7F062D2075744142896F08D32a8A5"; const SushiStakingChef_Ethereum = "0x0503866eD9F304Ec564F145d22994F7f11838596"; -const treasuryAddress = "0xB3FC6B9be3AD6b2917d304d4F5645a311bCFd0A8"; -const erc20Tokens = [ - //MDX - "0x25d2e80cb6b86881fd7e07dd263fb79f4abe033c", - //BOO - "0xff96dccf2763d512b6038dc60b7e96d1a9142507", -]; - const calcTvl = async (balances, chain, block, poolInfo, StakingChef, transform) => { const lengthOfPool = ( await sdk.api.abi.call({ @@ -42,14 +33,6 @@ const calcTvl = async (balances, chain, block, poolInfo, StakingChef, transform) }) }; -/*** Treasury ***/ -const Treasury = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - let transformAddress = await getChainTransform('heco') - await sumTokensAndLPsSharedOwners(balances, erc20Tokens.map(t => [t, false]), [treasuryAddress], chainBlocks["heco"], "heco", transformAddress); - return balances; -}; - /*** Heco TVL Portion ***/ const hecoTvl = async (timestamp, ethBlock, { heco: block }) => { const balances = {}; diff --git a/projects/oceanus/index.js b/projects/oceanus/index.js index cba3392edf..58baa650b7 100644 --- a/projects/oceanus/index.js +++ b/projects/oceanus/index.js @@ -1,8 +1,5 @@ -const { staking } = require("../helper/staking"); -const { pool2Exports } = require("../helper/pool2"); -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - -const treasuryContract = "0xF29EEC2563b1E6a1ed87ff7DDfB164474d1Ecb50"; +const { pool2 } = require("../helper/pool2"); +const { sumTokensExport } = require("../helper/unwrapLPs"); const OShareRewardPool = "0xc4a5b1CdCcD8CF80aC7cB5B86Fe5a8D64DBA9D0F"; const lpPool2Addresses = [ @@ -18,30 +15,13 @@ const stakingContracts = [ const OSHARE = "0x28100159d8b2acc4e45ec7ebdb875265bb752385"; const SEA = "0x41607272ce6f2a42732ae382f00f8f9ce68d78f3"; -async function Staking(timestamp, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [SEA, false], - [OSHARE, false], - ], - stakingContracts, - chainBlocks["metis"], - "metis", - (addr) => `metis:${addr}` - ); - - return balances; -} module.exports = { misrepresentedTokens: true, metis: { - tvl: (async) => ({}), - staking: Staking, - pool2: pool2Exports(OShareRewardPool, lpPool2Addresses, "metis"), + tvl: () => ({}), + staking: sumTokensExport(stakingContracts, [SEA, OSHARE], ), + pool2: pool2(OShareRewardPool, lpPool2Addresses,), }, methodology: "Counts liquidity on the Pool2s and Staking parts", }; diff --git a/projects/optidoge/index.js b/projects/optidoge/index.js index 5952b44af6..f624917a68 100644 --- a/projects/optidoge/index.js +++ b/projects/optidoge/index.js @@ -1,6 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') -const {pool2Exports} = require("../helper/pool2") +const {pool2} = require("../helper/pool2") const {stakingUnknownPricedLP} = require("../helper/staking") const weth = ADDRESSES.ethereum.WETH @@ -18,7 +18,7 @@ async function tvl(time, _ethBlock, {optimism: block}){ module.exports = { optimism: { tvl, - pool2: pool2Exports("0x7Dbe3714371bB9FF72369AFc88703AbD2694E322", ["0x91d62ac270e5bb371a25f81c9e74f16b53448efd"], "optimism"), + pool2: pool2("0x7Dbe3714371bB9FF72369AFc88703AbD2694E322", ["0x91d62ac270e5bb371a25f81c9e74f16b53448efd"], "optimism"), staking: stakingUnknownPricedLP("0x015C4b2250F7aAC41274FeB95eFf00016C0CE08c", "0x93d97dbb1bb5290c78c23885e8026047dc8998a8", "optimism", "0x91d62ac270e5bb371a25f81c9e74f16b53448efd", addr=>`optimism:${addr}`) } } diff --git a/projects/orcadao/index.js b/projects/orcadao/index.js index 61f59d0746..c45ae3518b 100644 --- a/projects/orcadao/index.js +++ b/projects/orcadao/index.js @@ -1,10 +1,8 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const {pool2Exports} = require("../helper/pool2"); -const { sumTokensAndLPsSharedOwners, sumTokens } = require("../helper/unwrapLPs"); -const {staking} = require("../helper/staking"); +const { pool2 } = require("../helper/pool2"); +const { staking } = require("../helper/staking"); +const { sumTokens2 } = require('../helper/unwrapLPs'); const orca = "0x8b1d98a91f853218ddbb066f20b8c63e782e2430"; const podLeader = "0x111E1E97435b57467E79d4930acc4B7EB3d478ad"; @@ -16,64 +14,33 @@ const pool2LPs = [ // [[Collateral, Bank]] const banksAndCollateral = [ - ["0x330cc45c8f60fef7f9d271a7512542b3d201a48d","0x64D56b4B6C844015EC07e52A1267D5d5d4F4E5BD"], // YAK BENQI WBTC - ["0x9669fe1ea0d8883661289461b90a10b71ae400ee","0xEa03cDCdD912522400d21Ee89A5bC46Bffe11AC3"], // YAK BENQI DAI - ["0x07b0e11d80ccf75cb390c9be6c27f329c119095a","0xAf8d16500A58b868C34be9106d674b820d67C979"], // YAK BENQI USDT - [ADDRESSES.avax.WAVAX,"0xC029713E92383426C9b387b124C0BF6271d08b80"], // AVAX - ["0x8b414448de8b609e96bd63dcf2a8adbd5ddf7fdd","0x2b583646EC93245562Fd08A3b5f44Aa55417766B"], // YAK BENQI AVAX - ["0x0eac97a78a93b75549d49145df41dbe9cd520874","0xd694F97dd5874fA4e712FDFB781231D93642D29b"], // YAK BENQI USDC - ["0x957ca4a4aa7cdc866cf430bb140753f04e273bc0","0x8aee038726715d78C49dFb2f12e76DE70C2F48eC"], // YAK AAVE AVAX - ["0x4084f32a91f4d8636ca08386efe70c6e302f1d84","0x22a86D96b26308ba1971F8080AAD965884061076"], // YAK BENQI LINK - ["0x7d2d076000611e44740d636843384412399e31b9","0xc59b6794e5DeE450d264669f34e7849A90083774"], // YAK BENQI WETH - ["0xb634a71a54d3382ff6896eb22244b4a4e54c0a82","0x8b61488Ca2D727826c7Afe4eDbF810159F17D398"], // YAK AAVE WETH - ["0x3a91a592a06390ca7884c4d9dd4cba2b4b7f36d1","0xa1A34E32c24911daA45e338dB9D785c1b323F280"], // YAK JOE - ["0x0f7f48d4b66bf5a53d4f21fa6ffca45f70cef770","0x18419976Ba05dd9cE44544B8d91590704aFA4a29"], // YAK AAVE WBTC - ["0xbf5bffbf7d94d3b29abe6eb20089b8a9e3d229f7","0xC09caDDA753c54292BeB1D10429bD175556b8b5E"], // YAK QI - [ADDRESSES.avax.WETH_e,"0x4805D6563B36a02C5012c11d6e15552f50066d58"], // WETH - [ADDRESSES.avax.WBTC_e,"0x1eA60d781376C06693dFB21d7e5951cAEc13F7E4"], // WBTC + ["0x330cc45c8f60fef7f9d271a7512542b3d201a48d", "0x64D56b4B6C844015EC07e52A1267D5d5d4F4E5BD"], // YAK BENQI WBTC + ["0x9669fe1ea0d8883661289461b90a10b71ae400ee", "0xEa03cDCdD912522400d21Ee89A5bC46Bffe11AC3"], // YAK BENQI DAI + ["0x07b0e11d80ccf75cb390c9be6c27f329c119095a", "0xAf8d16500A58b868C34be9106d674b820d67C979"], // YAK BENQI USDT + [ADDRESSES.avax.WAVAX, "0xC029713E92383426C9b387b124C0BF6271d08b80"], // AVAX + ["0x8b414448de8b609e96bd63dcf2a8adbd5ddf7fdd", "0x2b583646EC93245562Fd08A3b5f44Aa55417766B"], // YAK BENQI AVAX + ["0x0eac97a78a93b75549d49145df41dbe9cd520874", "0xd694F97dd5874fA4e712FDFB781231D93642D29b"], // YAK BENQI USDC + ["0x957ca4a4aa7cdc866cf430bb140753f04e273bc0", "0x8aee038726715d78C49dFb2f12e76DE70C2F48eC"], // YAK AAVE AVAX + ["0x4084f32a91f4d8636ca08386efe70c6e302f1d84", "0x22a86D96b26308ba1971F8080AAD965884061076"], // YAK BENQI LINK + ["0x7d2d076000611e44740d636843384412399e31b9", "0xc59b6794e5DeE450d264669f34e7849A90083774"], // YAK BENQI WETH + ["0xb634a71a54d3382ff6896eb22244b4a4e54c0a82", "0x8b61488Ca2D727826c7Afe4eDbF810159F17D398"], // YAK AAVE WETH + ["0x3a91a592a06390ca7884c4d9dd4cba2b4b7f36d1", "0xa1A34E32c24911daA45e338dB9D785c1b323F280"], // YAK JOE + ["0x0f7f48d4b66bf5a53d4f21fa6ffca45f70cef770", "0x18419976Ba05dd9cE44544B8d91590704aFA4a29"], // YAK AAVE WBTC + ["0xbf5bffbf7d94d3b29abe6eb20089b8a9e3d229f7", "0xC09caDDA753c54292BeB1D10429bD175556b8b5E"], // YAK QI + [ADDRESSES.avax.WETH_e, "0x4805D6563B36a02C5012c11d6e15552f50066d58"], // WETH + [ADDRESSES.avax.WBTC_e, "0x1eA60d781376C06693dFB21d7e5951cAEc13F7E4"], // WBTC ] -const translateToken = { - "0x957ca4a4aa7cdc866cf430bb140753f04e273bc0": "avax:" + ADDRESSES.avax.WAVAX, - "0x0f7f48d4b66bf5a53d4f21fa6ffca45f70cef770": "avax:" + ADDRESSES.avax.WBTC_e, - "0xb634a71a54d3382ff6896eb22244b4a4e54c0a82": "avax:" + ADDRESSES.avax.WETH_e, - "0x3a91a592a06390ca7884c4d9dd4cba2b4b7f36d1": "avax:" + ADDRESSES.avax.JOE, - "0x8b414448de8b609e96bd63dcf2a8adbd5ddf7fdd": "avax:0x8729438eb15e2c8b576fcc6aecda6a148776c0f5", - "0x4084f32a91f4d8636ca08386efe70c6e302f1d84": "avax:0x5947bb275c521040051d82396192181b413227a3", - "0x9669fe1ea0d8883661289461b90a10b71ae400ee": "avax:" + ADDRESSES.avax.DAI, - "0x330cc45c8f60fef7f9d271a7512542b3d201a48d": "avax:" + ADDRESSES.avax.WBTC_e, - "0x07b0e11d80ccf75cb390c9be6c27f329c119095a": "avax:" + ADDRESSES.avax.USDt, - "0x0eac97a78a93b75549d49145df41dbe9cd520874": "avax:" + ADDRESSES.avax.USDC_e, - "0x7d2d076000611e44740d636843384412399e31b9": "avax:" + ADDRESSES.avax.WETH_e, - "0xbf5bffbf7d94d3b29abe6eb20089b8a9e3d229f7": "avax:0x8729438eb15e2c8b576fcc6aecda6a148776c0f5" +async function tvl(api) { + return api.sumTokens({ tokensAndOwners: banksAndCollateral }) } -async function tvl(timestamp, block, chainBlocks) { - let balances = {}; - await sumTokens(balances, banksAndCollateral, chainBlocks.avax, "avax", addr=> { - addr = addr.toLowerCase(); - if (translateToken[addr] !== undefined) { - return translateToken[addr]; - } - return `avax:${addr}`; - }); - return balances; -} - -async function borrowed(timestamp, block, chainBlocks) { - let balances = {}; - const debt = (await sdk.api.abi.multiCall({ - calls: banksAndCollateral.map(p => ({ - target: p[1] - })), - abi: abi.totalDebt, - block: chainBlocks.avax, - chain: "avax" - })).output; - debt.forEach(p => { - sdk.util.sumSingleBalance(balances, `avax:0xd586e7f844cea2f87f50152665bcbc2c279d8d70`, p.output) - }); - return balances; +async function borrowed(api) { + const debt = await api.multiCall({ + calls: banksAndCollateral.map(p => p[1]), + abi: "uint256:totalDebt", + }) + api.add('0xd586e7f844cea2f87f50152665bcbc2c279d8d70', debt) } const treasuryContract = "0x10131d4f3193a59A46d3ab57D765f2604e77B4E3"; @@ -81,24 +48,24 @@ const usdc = ADDRESSES.avax.USDC_e const ocraAvaiPGL = "0x1A9Bd67c82C0e8E47C3ad2FA772FCb9B7A831A37"; const orcaWavaxPGL = "0x73e6CB72a79dEa7ed75EF5eD6f8cFf86C9128eF5"; const avaiUsdc = "0xeD7a2B4054757Cfdb632Af15Ad528624F0fFf3B0"; -async function treasury (timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, [ - [usdc, false], - [orca, false], - [ocraAvaiPGL, true], - [orcaWavaxPGL, true], - [avaiUsdc, true] - ], [treasuryContract], chainBlocks.avax, "avax", addr=>`avax:${addr}`); - return balances; +async function treasury(api) { + return sumTokens2({ + api, owner: treasuryContract, tokens: [ + usdc, + orca, + ocraAvaiPGL, + orcaWavaxPGL, + avaiUsdc, + ], resolveLP: true, + }) } module.exports = { - avax:{ + avax: { methodology: "Tokens locked in as collateral is counted as TVL", tvl, borrowed, - pool2: pool2Exports(podLeader, pool2LPs, "avax", addr=>`avax:${addr}`), + pool2: pool2(podLeader, pool2LPs, "avax", addr => `avax:${addr}`), treasury, staking: staking(podLeader, orca) } diff --git a/projects/pendle/v1.js b/projects/pendle/v1.js index 2ab549e92e..ea0aa7f361 100644 --- a/projects/pendle/v1.js +++ b/projects/pendle/v1.js @@ -1,8 +1,3 @@ -const { - sumTokensAndLPsSharedOwners, - unwrapUniswapLPs -} = require("../helper/unwrapLPs"); -const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const contracts = require("./contracts"); const { staking } = require("../helper/staking"); @@ -18,125 +13,82 @@ const avaxFundedContracts = Object.keys(contracts.v1.avax.funded); const avaxOtTokens = Object.keys(contracts.v1.avax.otTokens); const avaxPool2Contracts = Object.keys(contracts.v1.avax.pool2); -async function ethTvl(timestamp, block) { - const balances = {}; - let lpBalances = []; +async function ethTvl(api) { const masterChefContract = "0xc2edad668740f1aa35e4d8f227fb8e17dca888cd"; - const masterChefDeposits = await sdk.api.abi.call({ + const masterChefDeposits = await api.call({ target: masterChefContract, abi: abi.userInfo, params: [1, ethFundedContracts[4]], - block: block }); - lpBalances.push({ - token: ethTokens.SLP_ETHUSDC, - balance: masterChefDeposits.output.amount - }); - await unwrapUniswapLPs(balances, lpBalances, block); - - await sumTokensAndLPsSharedOwners( - balances, - [ - [ethTokens.USDC, false], - [ethTokens.aUSDC, false], - [ethTokens.cDAI, false], - [ethTokens.SLP_ETHUSDC, false], - [ethTokens.SLP_PENDLEETH, false], - [ethTokens.SUSHI, false], - [ethTokens.COMP, false], - [ethTokens.wxBTRFLY, false], - [ethTokens.SLP_OT_aUSDC_21, false], - [ethTokens.SLP_OT_aUSDC_22, false], - [ethTokens.SLP_OT_cDAI_21, false], - [ethTokens.SLP_OT_cDAI_22, false], - [ethTokens.SLP_OT_ETHUSDC_22, false], - [ethTokens.SLP_OT_wxBTRFLY_22, false] - ], - ethFundedContracts, - block - ); - for (let token of ethOtTokens) { - delete balances[token.toLowerCase()]; - } - delete balances[ethTokens.PENDLE]; - - return balances; + api.add(ethTokens.SLP_ETHUSDC, masterChefDeposits.amount); + await api.sumTokens({ + owners: ethFundedContracts, tokens: [ + ethTokens.USDC, + ethTokens.aUSDC, + ethTokens.cDAI, + ethTokens.SLP_ETHUSDC, + ethTokens.SLP_PENDLEETH, + ethTokens.SUSHI, + ethTokens.COMP, + ethTokens.wxBTRFLY, + ethTokens.SLP_OT_aUSDC_21, + ethTokens.SLP_OT_aUSDC_22, + ethTokens.SLP_OT_cDAI_21, + ethTokens.SLP_OT_cDAI_22, + ethTokens.SLP_OT_ETHUSDC_22, + ethTokens.SLP_OT_wxBTRFLY_22, + ] + }) + + ethOtTokens.push(ethTokens.PENDLE); + + ethOtTokens.map(i => api.removeTokenBalance(i)) + return api.getBalances() } -async function avaxTvl(timestamp, _, { avax: block }) { - const transform = addr => 'avax:'+addr - const balances = {}; - +async function avaxTvl(api) { const masterChefContract = "0xd6a4F121CA35509aF06A0Be99093d08462f53052"; - const TIME = "avax:0xb54f16fb19478766a268f172c9480f8da1a7c9c3"; - balances[transform(avaxTokens.xJOE)] = (await sdk.api.abi.call({ + const xJOEBalance = (await api.call({ target: masterChefContract, abi: abi.userInfo, params: [24, avaxFundedContracts[0]], - block: block, - chain: "avax" - })).output.amount; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [avaxTokens.USDC, false], - [avaxTokens.qiAVAX, false], - [avaxTokens.qiUSDC, false], - [avaxTokens.xJOE, false], - [avaxTokens.JLP_PENDLEAVAX, false], - [avaxTokens.WAVAX, false], - [avaxTokens.JOE, false], - [avaxTokens.QI, false], - [avaxTokens.MIM, false], - [avaxTokens.wMEMO, false], - [avaxTokens.JLP_OT_PAP, false], - [avaxTokens.JLP_OT_qiUSDC, false], - [avaxTokens.JLP_OT_qiAVAX, false], - [avaxTokens.JLP_OT_xJOE, false], - [avaxTokens.JLP_OT_wMEMO, false] - ], - avaxFundedContracts, - block, - "avax", - transform - ); - - balances[TIME] = (await sdk.api.abi.call({ - target: avaxTokens.wMEMO, - abi: abi.wMEMOToMEMO, - params: [balances[`avax:${avaxTokens.wMEMO}`]], - block: block, - chain: "avax" - })).output; - delete balances[`avax:${avaxTokens.wMEMO}`]; - - for (let token of avaxOtTokens) { - delete balances[`avax:${token.toLowerCase()}`]; - } - - return balances; + })).amount + api.add(avaxTokens.xJOE, xJOEBalance); + await api.sumTokens({ + owners: avaxFundedContracts, tokens: [ + avaxTokens.USDC, + avaxTokens.qiAVAX, + avaxTokens.qiUSDC, + avaxTokens.xJOE, + avaxTokens.JLP_PENDLEAVAX, + avaxTokens.WAVAX, + avaxTokens.JOE, + avaxTokens.QI, + avaxTokens.MIM, + avaxTokens.wMEMO, + avaxTokens.JLP_OT_PAP, + avaxTokens.JLP_OT_qiUSDC, + avaxTokens.JLP_OT_qiAVAX, + avaxTokens.JLP_OT_xJOE, + avaxTokens.JLP_OT_wMEMO, + ] + }) + + avaxOtTokens.map(i => api.removeTokenBalance(i)) + return api.getBalances() } -async function avaxPool2(timestamp, _, { avax: block }) { - const transform = addr => 'avax:'+addr - const pool2 = {}; - - await sumTokensAndLPsSharedOwners( - pool2, - [ - [avaxTokens.JLP_PENDLEAVAX, false], - [avaxTokens.PENDLE, false], - [avaxTokens.JOE, false] - ], - avaxPool2Contracts, - block, - "avax", - transform - ); - return pool2; +async function avaxPool2(api) { + await api.sumTokens({ + owners: avaxPool2Contracts, tokens: [ + avaxTokens.JLP_PENDLEAVAX, + avaxTokens.PENDLE, + avaxTokens.JOE, + ] + }) + return api.getBalances() } module.exports = { diff --git a/projects/printerfinancial/helper.js b/projects/printerfinancial/helper.js index 70070cafba..29a2c3c2c3 100644 --- a/projects/printerfinancial/helper.js +++ b/projects/printerfinancial/helper.js @@ -1,5 +1,5 @@ const { staking, stakingUnknownPricedLP } = require("../helper/staking"); -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const sdk = require("@defillama/sdk"); const token0Abi = 'address:token0' const token1Abi = 'address:token1' @@ -12,7 +12,7 @@ function printerTvl(token, share, rewardPool, masonry, pool2LPs, chain = "ethere [chain]: { tvl: async () => ({}), staking: staking(masonry, share, chain), - pool2: pool2Exports(rewardPool, pool2LPs, chain, transform) + pool2: pool2(rewardPool, pool2LPs, chain, transform) } } } diff --git a/projects/quartzdefi/index.js b/projects/quartzdefi/index.js index ecb96cb184..2823f30fca 100644 --- a/projects/quartzdefi/index.js +++ b/projects/quartzdefi/index.js @@ -1,4 +1,4 @@ -const { pool2Exports } = require("../helper/pool2"); +const { pool2 } = require("../helper/pool2"); const { staking } = require("../helper/staking"); const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -59,54 +59,17 @@ async function harmonyPool2(timestamp, block, chainBlocks) { return balances; } -async function harmonyStaking(timestamp, block, chainBlocks) { - let balances = {}; - const chain = "harmony"; - block = chainBlocks.harmony; - - const tokenBalances = (await sdk.api.abi.multiCall({ - calls: [ - { - target: qshare, - params: qshareboardroom - }, - { - target: quartz, - params: singleQuartzFarm - }, - { - target: quartz, - params: xquartz - } - ], - abi: "erc20:balanceOf", - block, - chain - })).output; - - tokenBalances.forEach(p => { - sdk.util.sumSingleBalance(balances, `harmony:${p.input.target}`, p.output); - }) - - return balances; -} module.exports = { misrepresentedTokens: true, harmony: { tvl: async () => ({}), - staking: harmonyStaking, + staking: staking([qshareboardroom, singleQuartzFarm, xquartz], [quartz]), pool2: harmonyPool2 }, bsc: { tvl: async () => ({}), staking: staking(aShareBoardroomAddress, ashareTokenAddress), - pool2: pool2Exports(ashareRewardPool, BSCLPTokens, "bsc", addr=> { - addr = addr.toLowerCase(); - if (addr === "0x36d53ed6380313f3823eed2f44dddb6d1d52f656") { - return "harmony:0xfa4b16b0f63f5a6d0651592620d585d308f749a4" - } - return `bsc:${addr}`; - }) + pool2: pool2(ashareRewardPool, BSCLPTokens) } } \ No newline at end of file diff --git a/projects/reserve/index.js b/projects/reserve/index.js index 04f20a8752..3501fe68b5 100644 --- a/projects/reserve/index.js +++ b/projects/reserve/index.js @@ -1,8 +1,6 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { sumTokens2, - genericUnwrapCvxDeposit, - unwrapCreamTokens, } = require("../helper/unwrapLPs.js"); const { getStargateLpValues, @@ -152,13 +150,8 @@ async function tvl(api) { ); } - await Promise.all( - convexTokensAndOwners.map(([token, owner]) => - genericUnwrapCvxDeposit({ api, token, owner }) - ) - ); - - await unwrapCreamTokens(api.getBalances(), fluxListWithOwner, api.block); + await genericUnwrapCvxDeposit(api, convexTokensAndOwners) + await unwrapCreamTokens(api, fluxListWithOwner); await sumTokens2({ api, ownerTokens, blacklistedTokens }); } @@ -182,3 +175,50 @@ module.exports = { }, methodology: `TVL accounts for the underlying ERC20 collateral which back RTokens.`, }; + + +async function unwrapCreamTokens(api, tokensAndOwners,) { + const [balanceOfTokens, exchangeRates, underlyingTokens] = await Promise.all([ + api.multiCall({ + calls: tokensAndOwners.map(t => ({ + target: t[0], + params: t[1] + })), + abi: 'erc20:balanceOf', + }), + api.multiCall({ + calls: tokensAndOwners.map(t => ({ + target: t[0], + })), + abi: "uint256:exchangeRateStored", + }), + api.multiCall({ + calls: tokensAndOwners.map(t => ({ + target: t[0], + })), + abi: "address:underlying", + }) + ]) + balanceOfTokens.forEach((balanceCall, i) => { + api.add(underlyingTokens[i], balanceCall * exchangeRates[i] / 1e18) + }) +} + +async function genericUnwrapCvxDeposit(api, tokensAndOwners) { + const tokens = [...new Set(tokensAndOwners.map(t => t[0]))] + const uTokens = await api.multiCall({ abi: 'address:curveToken', calls: tokens }) + const tokenMapping = {} + tokens.forEach((token, i) => { + tokenMapping[token] = uTokens[i] + }) + const balances = await api.multiCall({ + calls: tokensAndOwners.map(t => ({ + target: t[0], + params: t[1] + })), + abi: 'erc20:balanceOf', + }) + balances.forEach((balance, i) => { + api.add(tokenMapping[tokensAndOwners[i][0]], balance) + }) +} \ No newline at end of file diff --git a/projects/thales/index.js b/projects/thales/index.js index 83f6abf46c..de61108e84 100644 --- a/projects/thales/index.js +++ b/projects/thales/index.js @@ -1,7 +1,6 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { staking } = require('../helper/staking') const abi = require('./abi.json') -const { dodoPool2 } = require('../helper/pool2') const ADDRESSES = require('../helper/coreAssets.json') const ethMarketsManager = "0x5ed98Ebb66A929758C7Fe5Ac60c979aDF0F4040a" @@ -123,9 +122,31 @@ module.exports = { bsc: { tvl: async (api) => { const markets = (await Promise.all([bscMarketManager,].map(i => getMarkets(api, i)))).flat() - markets.push( bscRangedAMM, bscThalesAMM) + markets.push(bscRangedAMM, bscThalesAMM) if (speedMarkets[api.chain]) markets.push(...speedMarkets[api.chain]) return sumTokens2({ api, tokens: [ADDRESSES.bsc.BUSD], owners: markets }) }, }, } + + +function dodoPool2(stakingContract, lpToken) { + return async (api) => { + const [baseToken, quoteToken, totalSupply] = await Promise.all(["address:_BASE_TOKEN_", "address:_QUOTE_TOKEN_", "erc20:totalSupply"].map(abi => api.call({ + target: lpToken, + abi + }))) + const [baseTokenBalance, quoteTokenBalance, stakedLPBalance] = await api.multiCall({ + calls: [ + [baseToken, lpToken], [quoteToken, lpToken], [lpToken, stakingContract] + ].map(token => ({ + target: token[0], + params: [token[1]], + })), + abi: 'erc20:balanceOf' + }) + const ratio = stakedLPBalance/totalSupply + api.add(baseToken, baseTokenBalance * ratio) + api.add(quoteToken, quoteTokenBalance * ratio) + } +} diff --git a/projects/waterfall-wtf-finance/index.js b/projects/waterfall-wtf-finance/index.js index 991debacfe..3457756166 100644 --- a/projects/waterfall-wtf-finance/index.js +++ b/projects/waterfall-wtf-finance/index.js @@ -1,5 +1,5 @@ const sdk = require("@defillama/sdk"); -const {pool2Exports} = require("../helper/pool2"); +const {pool2} = require("../helper/pool2"); const { staking } = require("../helper/staking"); const token = "0x1811b7eD3B613805A9a4B4b1B80C99d58Af32576"; @@ -16,6 +16,6 @@ module.exports = { bsc: { tvl: async () => ({}), staking: staking(masonry, shares), - pool2: pool2Exports(shareRewardPool, pancakeLPs, "bsc", addr=>`bsc:${addr}`) + pool2: pool2(shareRewardPool, pancakeLPs, "bsc", addr=>`bsc:${addr}`) } } \ No newline at end of file From 6f469e12ff120b786d409932eed0938cd154e052 Mon Sep 17 00:00:00 2001 From: Wayne Kuo <95527849+WayneAl@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:10:01 +0800 Subject: [PATCH 0388/1768] Typus/safu (#11643) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/typus-finance/index.js | 5 +---- projects/typus-safu/index.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 projects/typus-safu/index.js diff --git a/projects/typus-finance/index.js b/projects/typus-finance/index.js index a0cad66122..ba5f173d80 100644 --- a/projects/typus-finance/index.js +++ b/projects/typus-finance/index.js @@ -6,13 +6,10 @@ const V1_SINGLE_DEPOSIT_VAULT_REGISTRY = "0x4ae62c4d67f9f5d7077626fcc6d450535c4d const V1_SINGLE_BID_VAULT_REGISTRY = "0x2c8cdd00ced47e717420cd2fc54990b3b38e115e34a9209271063a59ddeeb059"; async function tvl(api) { - const depositVaultFields = await sui.getDynamicFieldObjects({ + const depositVaults = await sui.getDynamicFieldObjects({ parent: SINGLE_DEPOSIT_VAULT_REGISTRY, }); - const depositVaultIds = depositVaultFields.map((item) => item.fields.id.id); - const depositVaults = await sui.getObjects(depositVaultIds); - depositVaults.forEach(({ fields }) => { const deposit_token = "0x" + fields.deposit_token.fields.name; const bid_token = "0x" + fields.bid_token.fields.name; diff --git a/projects/typus-safu/index.js b/projects/typus-safu/index.js new file mode 100644 index 0000000000..74bf2213d6 --- /dev/null +++ b/projects/typus-safu/index.js @@ -0,0 +1,22 @@ +const sui = require("../helper/chain/sui"); + +const SAFU_REGISTRY = "0xdc970d638d1489385e49ddb76889748011bac4616b95a51aa63633972b841706"; + +async function tvl(api) { + const fields = await sui.getDynamicFieldObjects({ + parent: SAFU_REGISTRY, + }); + const safuVaults = fields.filter((item) => item.type.includes("Vault")); + + safuVaults.forEach(({ fields }) => { + const deposit_token = "0x" + fields.deposit_token.fields.name; + api.add(deposit_token, fields.share_supply.slice(0, 4)); + }); +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, +}; From 04f7787dd89e3caed7e6088531107a195d974770 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:12:08 +0200 Subject: [PATCH 0389/1768] minor fix --- projects/typus-safu/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/typus-safu/index.js b/projects/typus-safu/index.js index 74bf2213d6..a6a15ac094 100644 --- a/projects/typus-safu/index.js +++ b/projects/typus-safu/index.js @@ -16,6 +16,7 @@ async function tvl(api) { module.exports = { timetravel: false, + doublecounted: true, sui: { tvl, }, From d89bf1978fa6fc1c60430943bd93d3d2d9ad9c68 Mon Sep 17 00:00:00 2001 From: Ken Date: Mon, 16 Sep 2024 15:36:07 +0800 Subject: [PATCH 0390/1768] Lazyotter: add rho markets vault tvl calculation (#11642) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lazyotter/index.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/projects/lazyotter/index.js b/projects/lazyotter/index.js index b93cbd2461..e39cfda970 100644 --- a/projects/lazyotter/index.js +++ b/projects/lazyotter/index.js @@ -5,8 +5,18 @@ const aaveVaults = ["0xF91caE959D134065f39DDaa41d66E254dfaFc6f8", "0x81A47E298d6 const ambientVaultHelper = "0x9b5BD88893d73d114d252Cff7CFd4f2705eEFAe7" const ambientVaults = ["0x07ab0C3A3D9e286ba790FF57f205970bC462BB21", "0x018B3ac371344735025cB01d79871Be0e4AB351C", "0x7D1E707011bA5be76806037532c266fA6eb0699f", "0xe18acadfb098fbf4017108a5C83Fa901B062a53d", "0xfbB0D0cB3324Ec90c6667D9E2b8B98dB8F73a3e6"] +// [USDC, USDT, wstETH, weETH, wrsETH, STONE] +const rhoMarketsVault = [ + "0x1BA2A898b5EfB716557696e3E42E6479882fCDE1", + "0x87131c9Bb4878067742dd5D60596ED3b353493FD", + "0xfAe6c6E62bc5374a229960891Ec9707e8671a219", + "0x74a28efb7275c3871aCCaE2917f6EE073039042d", + "0x4220F7297eBa7cE583826eC754A0CBE29E4e6F6f", + "0x235ea5d1EA9407334E0AF8F45BA6c9A69DF9AC18" +] + async function tvl(api) { - await api.erc4626Sum2({ calls: aaveVaults, }); + await api.erc4626Sum2({ calls: aaveVaults.concat(rhoMarketsVault), }); const ambAssets = await api.multiCall({ abi: 'uint256:totalAssets', calls: ambientVaults}) const calls = ambAssets.map((v, i) => ({ params: [ambientVaults[i], v]})) const res = await api.multiCall({ abi: 'function previewAmountByAsset(address vault, uint256 assets) view returns (uint256, uint256)', calls, target: ambientVaultHelper}) From 78169cfb1f4f4b47f4f9b0c2041a7ee84787e6a2 Mon Sep 17 00:00:00 2001 From: 0xd4n1el <162194815+0xd4n1el@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:36:14 +0200 Subject: [PATCH 0391/1768] feat: loopfi add scroll and btc netowrks (#11641) --- projects/loopfi/index.js | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/projects/loopfi/index.js b/projects/loopfi/index.js index 1cc6ccdb44..496e556f16 100644 --- a/projects/loopfi/index.js +++ b/projects/loopfi/index.js @@ -2,6 +2,9 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs") const LOOP_PRELAUNCH = "0xaBEEcB1d3414550B30694bB37ac24CAaD0b82aE9" +const LOOP_PRELAUNCH_SCROLL = "0x640befeAd1A7ce841ef878058A7003EC260ebAE8" +const LOOP_PRELAUNCH_BTC = "0x497Fb40D610C29E66d06F3B18Cd9966053abB49A" +const LOOP_PRELAUNCH_YNETH = "0xa67C60AE18BE09F074a6c733a1cc06B63Ae53589" const tokens = { WETH: ADDRESSES.ethereum.WETH, @@ -13,14 +16,36 @@ const tokens = { pufETH: "0xD9A442856C234a39a81a089C06451EBAa4306a72", } +const tokensScroll = { + WETH: ADDRESSES.scroll.WETH, + STONE: ADDRESSES.scroll.STONE, + weETH: '0x01f0a31698C4d065659b9bdC21B3610292a1c506', + wrsETH: '0xa25b25548B4C98B0c7d3d27dcA5D5ca743d68b7F', + pufETH: '0xc4d46E8402F476F269c379677C99F18E22Ea030e', +} + +const tokensBtc = { + WBTC: ADDRESSES.ethereum.WBTC, + swBTC: '0x8DB2350D78aBc13f5673A411D4700BCF87864dDE' +} + +const tokensYieldnest = { + ynETH: '0x09db87A538BD693E9d08544577d5cCfAA6373A48' +} + module.exports = { methodology: - "Counts the number of WETH and LRT tokens in the LoopFi Prelaunch Contract.", + "Counts the number of WETH, WBTC and LRT tokens in the LoopFi Prelaunch Contracts in Ethereum and Scroll networks.", start: 1718390875, ethereum: { tvl: sumTokensExport({ - owner: LOOP_PRELAUNCH, - tokens: Object.values(tokens), - }), + ownerTokens: [[Object.values(tokens), LOOP_PRELAUNCH], [Object.values(tokensBtc), LOOP_PRELAUNCH_BTC], [Object.values(tokensYieldnest), LOOP_PRELAUNCH_YNETH]], + }) }, + scroll: { + tvl: sumTokensExport({ + owner: LOOP_PRELAUNCH_SCROLL, + tokens: Object.values(tokensScroll), + }) + } } From a166732ff81cb1555bf857586913930a908a2ee7 Mon Sep 17 00:00:00 2001 From: Dayaa Date: Mon, 16 Sep 2024 08:36:29 +0100 Subject: [PATCH 0392/1768] build(Sperax Demter V2): added a new adapter for sperax demeter v2 (#11640) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/sperax-demeter-v2/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/sperax-demeter-v2/index.js diff --git a/projects/sperax-demeter-v2/index.js b/projects/sperax-demeter-v2/index.js new file mode 100644 index 0000000000..2c04b1014c --- /dev/null +++ b/projects/sperax-demeter-v2/index.js @@ -0,0 +1,9 @@ +async function tvl(api) { + const farms = await api.call({ target: '0x45bC6B44107837E7aBB21E2CaCbe7612Fce222e0', abi: 'address[]:getFarmList', }) + const tokensAndBals = await api.multiCall({ calls: farms, abi: 'function getTokenAmounts() view returns (address[], uint256[])', }) + tokensAndBals.forEach(([t, b]) => api.add(t, b)) +} + +module.exports = { + arbitrum: { tvl }, +} \ No newline at end of file From 9d8d2e3e9c52f91c627d8daf48d01f802da9882e Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:41:03 +0200 Subject: [PATCH 0393/1768] bitstable: track staking #11638 --- projects/bitstable-finance/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/bitstable-finance/index.js b/projects/bitstable-finance/index.js index 39f2780ef9..55319ab1ef 100644 --- a/projects/bitstable-finance/index.js +++ b/projects/bitstable-finance/index.js @@ -3,12 +3,20 @@ const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require('@defillama/sdk') const { sumTokensExport: sumBRC20TokensExport } = require("../helper/chain/brc20"); +const BB_STAKE_CONTRACT = '0x8816353DA8A4D45E81C509A54AdbA8E57908958f' +const BB_STAKE_ABI = 'function totalStakedAmount() view returns (uint256)' + const owner = "0x103dd1184599c7511a3016E0a383E11F84AE7173"; const tokens = { ethereum: [ADDRESS.ethereum.USDT], bsc: [ADDRESS.ethereum.FDUSD], }; +const bbInBouncebitStaking = async (api) => { + const staked = await api.call({ target: BB_STAKE_CONTRACT, abi: BB_STAKE_ABI }) + api.addCGToken('bouncebit', staked/1e18) +} + module.exports = { methodology: "Staking tokens via BitStable counts as TVL", bitcoin: { @@ -28,6 +36,9 @@ module.exports = { blacklistedTokens: ["DAII"], }), }, + bouncebit: { + staking: bbInBouncebitStaking, + }, }; Object.keys(tokens).map((chain) => { From 8fe8085254d16528a70c5b5d2c08f5e8b97be5ea Mon Sep 17 00:00:00 2001 From: Arpit Singh Date: Mon, 16 Sep 2024 13:12:09 +0530 Subject: [PATCH 0394/1768] added mantle for logx network (#11636) --- projects/logx-v2/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index 7fe4857328..d84c533256 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -3,7 +3,8 @@ module.exports = { } const config = { - arbitrum: ['0x297CE7A9156b9Dfc5b4468a6fd9ec5FdAd27e23A', '0xf0bDCFB8bfE1c5000481d263D672E1b09D58C3BE',] + arbitrum: ['0x297CE7A9156b9Dfc5b4468a6fd9ec5FdAd27e23A', '0xf0bDCFB8bfE1c5000481d263D672E1b09D58C3BE',], + mantle: ['0x895389e5744F2093A8ac985d8dB208eb9C1e6BA7', '0x8fb8a7E1ee970E3bf80494be0043B1117d835da8',] } Object.keys(config).forEach(chain => { From 2d832295ba1cb276c17f082db8e54cfbf3b16d56 Mon Sep 17 00:00:00 2001 From: Oleh-Mohylnyi <79149758+Oleh-Mohylnyi@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:49:17 +0300 Subject: [PATCH 0395/1768] add TakoTako.xyz landing project running on Taiko mainnet network (#11637) --- projects/takoTako/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/takoTako/index.js diff --git a/projects/takoTako/index.js b/projects/takoTako/index.js new file mode 100644 index 0000000000..ffe978e343 --- /dev/null +++ b/projects/takoTako/index.js @@ -0,0 +1,14 @@ +const { aaveV2Export } = require("../helper/aave"); +const methodologies = require("../helper/methodologies"); + +const LPConfiguratorContract = "0xD07B62ee683267D4A884453eaE982A151653515E"; + +module.exports = { + taiko: { + ...aaveV2Export(LPConfiguratorContract, { + fromBlock: 381054, + }), + }, +}; + +module.exports.methodology = methodologies.lendingMarket; From 71ae1b4f0a2845a5717625c718dd7d005c9a97b2 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:16:23 +0100 Subject: [PATCH 0396/1768] wallet deribit (#11646) --- projects/deribit/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/deribit/index.js b/projects/deribit/index.js index eb71c2aab7..20910881e9 100644 --- a/projects/deribit/index.js +++ b/projects/deribit/index.js @@ -2,7 +2,7 @@ const { cexExports } = require('../helper/cex') const config = { bitcoin: { - // from https://insights.deribit.com/exchange-updates/deribit-wallet-holdings/ + // from https://insights.deribit.com/exchange-updates/proof-of-reserves-deribit/ owners: [ "bc1qa3phj5uhnuauk6r62cku6r6fl9rawqx4n6d690", "bc1qtq5zfllw9fs9w6stnfgalf9v59fgrcxxyawuvm", @@ -36,7 +36,8 @@ const config = { "0x1baE874af9f81B8F93315b27F080260Da4702D3a", "0x2563328d58AC7eE9e930E89C29Ce96046a291207", "0x866c9a77d8Ab71d2874703e80cb7aD809b301e8e", - "0xCf2027AAB22980820F0767d9f214CDBD2AA2428D" + "0xCf2027AAB22980820F0767d9f214CDBD2AA2428D", + "0xACd41f0dA1A84f5543c84a33864e025cE30C099D", ] }, solana: { From 92df8be971834e05c572c1b8bdd2e6168773a9c1 Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:37:58 +0200 Subject: [PATCH 0397/1768] Add new SwissBorg wallet (#11647) --- projects/swissborg/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index f326c54b1b..aa11e0cab8 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -17,6 +17,7 @@ const config = { '0x67FE3293FC4e877F3CDc3F0ed93721a600f72BdE', '0x178Fb204c1ff2Ed7d0651C522A3a5B15480Eb76d', '0xFbA64167e4f091Ca625FA79aa6f83665856f8Bf2', + '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', ], }, bitcoin: { @@ -107,6 +108,11 @@ const config = { owners: [ 'cosmos10dfzd2wpnpeuy2lgan35ah8dg5p4l298v0n8e8', ] + }, + arbitrum: { + owners: [ + '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', + ] } } From 317a626ee032950c406a631436b2d9009256c475 Mon Sep 17 00:00:00 2001 From: CronosLabsDev <106642922+CronosLabsDev@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:49:33 +0200 Subject: [PATCH 0398/1768] feat: add zkCRO, ybETH, ybUSD, vETH and vUSD TVL to venofinance (#11645) --- projects/venofinance/index.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/projects/venofinance/index.js b/projects/venofinance/index.js index bc87e4f181..16765dd6a7 100644 --- a/projects/venofinance/index.js +++ b/projects/venofinance/index.js @@ -3,6 +3,12 @@ const { staking } = require("../helper/staking.js"); const fountain_contract_address = "0xb4be51216f4926ab09ddf4e64bc20f499fd6ca95"; const reservoir_contract_address = "0x21179329c1dcfd36ffe0862cca2c7e85538cca07"; const vno_contract_address = "0xdb7d0a1ec37de1de924f8e8adac6ed338d4404e9"; +const zkCRO_contract_address = "0x28Ff2E4dD1B58efEB0fC138602A28D5aE81e44e2"; +const ybETH_contract_address = "0x76bf2D1e6dFda645c0c17440B17Eccc181dfC351"; +const ybUSD_contract_address = "0xFA59075DfCE274E028b58BdDFcC3D709960F594a"; +const vETH_contract_address = "0x271602A97027ee1dd03b1E6e5dB153eB659A80b1"; +const vUSD_contract_address = "0x5b91e29Ae5A71d9052620Acb813d5aC25eC7a4A2"; + async function tvlCronos(api) { const lcro_contract_address = "0x9Fae23A2700FEeCd5b93e43fDBc03c76AA7C08A6"; @@ -24,6 +30,26 @@ async function tvlEra(api) { return api.getBalances() } +async function tvlEthereum(api) { + const cro_pooled = await api.call({ abi: "uint256:totalPooledCro", target: zkCRO_contract_address }); + api.addCGToken('crypto-com-chain', cro_pooled / 1e8); + const eth_pooled = await api.call({ abi: "uint256:totalPooledEth", target: ybETH_contract_address }); + api.addCGToken('ethereum', eth_pooled / 1e18); + const usd_pooled = await api.call({ abi: "uint256:totalUsdValue", target: ybUSD_contract_address }); + api.addCGToken('dai', usd_pooled / 1e18); + + return api.getBalances(); +} + +async function tvlCronosZkEVM(api) { + const totalVEth = await api.call({ abi: "uint256:ybEthValue", target: vETH_contract_address }); + api.addCGToken('ethereum', totalVEth / 1e18); + const totalVUsd = await api.call({ abi: "uint256:ybUsdValue", target: vUSD_contract_address }); + api.addCGToken('dai', totalVUsd / 1e18); + + return api.getBalances(); +} + module.exports = { methodology: "TVL counts tokens staked by the protocol.", cronos: { @@ -36,4 +62,10 @@ module.exports = { era: { tvl: tvlEra, }, + ethereum: { + tvl: tvlEthereum, + }, + cronos_zkevm: { + tvl: tvlCronosZkEVM, + }, }; From 6d24c9d47ea640e9b23d5288c6c4ff0cf8e512f1 Mon Sep 17 00:00:00 2001 From: "Guillermo M. Narvaja" Date: Mon, 16 Sep 2024 06:57:54 -0300 Subject: [PATCH 0399/1768] Ensuro: adds new pools and premiums accounts + adds CFLs (#11650) --- projects/ensuro/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/ensuro/index.js b/projects/ensuro/index.js index 231b15184a..8f814ae81d 100644 --- a/projects/ensuro/index.js +++ b/projects/ensuro/index.js @@ -5,7 +5,6 @@ const addressBook = { polygon: { usdc: ADDRESSES.polygon.USDC, aave_v3_usdc: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aPolUSDC - aave_v2_usdc: "0x1a13F4Ca1d028320A707D99520AbFefca3998b7F", // amUSDC compound_v3_usdc: "0xF25212E676D1F7F89Cd72fFEe66158f541246445", // Compound USDC mountain_usdm: ADDRESSES.ethereum.USDM, // Mountain USDM reserves: [ @@ -24,6 +23,9 @@ const addressBook = { {name: "eToken Junior Bliss", address: "0x71d390C243706b713B5D2b077E942223f7A55d00"}, {name: "eToken Junior InsureHero", address: "0x15F76F59A29C7c12b4a67751CA525bf9167C1AaB"}, {name: "eToken Junior Clerity", address: "0x1c7F0c8ba10Db7f2e1c7B5B0A024b66b6baceb45"}, + {name: "eToken Junior FortuneCredit", address: "0xb1Dff6ce862273adcA2B9eFD96A8976764Ac7414"}, + {name: "eToken Junior Azzegura", address: "0x45435f79103472eD62fB9C92F04c50b188b22B99"}, + {name: "eToken Junior Covest", address: "0x92624870dC092C36943682375Df8246BF126D410"}, // PremiumsAccounts {name: "PremiumsAccount Koala", address: "0xCCf5C404d32eB6E777088AB13837a1b8dCBA9328"}, {name: "PremiumsAccount Innov Zone", address: "0x4f43B8F252887F814ED689346fdb5Bd266394520"}, @@ -37,6 +39,13 @@ const addressBook = { {name: "PremiumsAccount Bliss", address: "0x11b490292799a0edFE37797592F77151C4483442"}, {name: "PremiumsAccount InsureHero", address: "0x41B5a105C850014eC594879E8511994F25092460"}, {name: "PremiumsAccount Clerity", address: "0xD26d5015C57C197AE5e7BC866B49837d22364eAB"}, + {name: "PremiumsAccount FortuneCredit", address: "0xaF48bd33916836F5A3dD8C9095692d240A6A2567"}, + {name: "PremiumsAccount Azzegura", address: "0x6CB730dF6B3DB5BAac5FD96F50b04005c1B3A5F7"}, + {name: "PremiumsAccount Covest", address: "0x1D71E3901dB121F05A4a06F92440108055386355"}, + // Main CFLs + {name: "CFL Koala", address: "0xf6b7a278afFbc905b407E01893B287D516016ce0"}, + {name: "CFL Spot", address: "0x48Ff8B1493c6A3545Aea3F0812f1303E2f958bF4"}, + {name: "CFL Bliss", address: "0x936DAC0eeA5e4E90B8384B96d1aA6284Ce106f71"}, // MultiStrategy Vault - Vault that aggregates assets of several reserves {name: "MultiStrategy Vault", address: "0x1EE585dcea25cbDa16BE8cfeFa381A1F32acA418"}, ], From 0c25d2bd1684530278da21dcb491c756e5a35dcf Mon Sep 17 00:00:00 2001 From: sofa-org <161308389+sofa-org@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:19:40 +0800 Subject: [PATCH 0400/1768] add sofa bsc vaults (#11651) --- projects/sofa-org/index.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/projects/sofa-org/index.js b/projects/sofa-org/index.js index cbce75c057..0fb00932e9 100644 --- a/projects/sofa-org/index.js +++ b/projects/sofa-org/index.js @@ -79,9 +79,24 @@ const config = { '0xfA49f859a012e8b1795A81B23b21Db0bD40e7770', '0x94Fe821E8Adde08aB97530D432Ff34A724FD7830', '0x4a5B4049a4aFae31278d36768704872f73dA67D1', - '0x08c57aE48a89b6876A76dC618972Ef1602da7ED8',], + '0x08c57aE48a89b6876A76dC618972Ef1602da7ED8', + ], + }, + bsc: { + vaults: [ + ], + aVaults: [ + // aBnbUSDT + '0x89c82D1B7616B0a465311FF077db6Bc21d43eA22', + '0x842E97BaA96cFE1534F1A50Da112C7800134656A', + '0x5DcEFCa5207c58dCbcf41eF017D1D0EB42d83701', + '0x4573382A9d101EB6DFa1C4B448f939c41fF3e81d', + '0x40144BC227f78A288FE9Ae6F4C7389C92C5aD9CF', + '0x41Df07a5E58D551164fCAEaD4c1ee67B77a84776', + '0xD0fb7977df47d7Fe946A21679DAbCe877f7A3a05', + '0xab08fF5dd91636fE556f692825Cadd7bA04A4c97', + ], } - } From 56e35c4594db0a47578e69ad592cb77c34250e0f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:21:50 +0200 Subject: [PATCH 0401/1768] Enzyme: track external position (#11648) --- projects/enzyme/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/enzyme/index.js b/projects/enzyme/index.js index 121fe8240f..03709f93b7 100644 --- a/projects/enzyme/index.js +++ b/projects/enzyme/index.js @@ -16,6 +16,12 @@ const query = `query get_accounts($lastId: String!) { async function tvl(api) { const { endpoint } = config[api.chain] const vaults = await cachedGraphQuery('enzyme/' + api.chain, endpoint, query, { fetchById: true, }) + const externalPositions = (await api.multiCall({ calls: vaults.map(i => i.id), abi: 'address[]:getActiveExternalPositions', excludeFailed: true, })).flat() + const managedAssets = await api.multiCall({ abi: 'function getManagedAssets() external returns (address[] memory assets, uint256[] memory amounts)', calls: externalPositions, excludeFailed: true, }) + const debtAssets = await api.multiCall({ abi: 'function getDebtAssets() external returns (address[] memory assets, uint256[] memory amounts)', calls: externalPositions, excludeFailed: true, }) + managedAssets.forEach(i => api.add(i.assets, i.amounts)) + debtAssets.forEach(i => api.add(i.assets, i.amounts.map(i => -1 * i))) + return sumTokens2({ api, ownerTokens: vaults.map(i => { return [i.trackedAssets.map(i => i.id), i.id] @@ -30,4 +36,4 @@ module.exports = { Object.keys(config).forEach(chain => { module.exports[chain] = { tvl } -}) \ No newline at end of file +}) From d1eebb8c1be0920d1963d91ee7cc99e8775e379c Mon Sep 17 00:00:00 2001 From: cairo Date: Mon, 16 Sep 2024 17:22:35 +0200 Subject: [PATCH 0402/1768] Add Elixir integrations (#11622) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/elixir/index.js | 48 +++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/projects/elixir/index.js b/projects/elixir/index.js index 9a996f6202..d2453940cd 100644 --- a/projects/elixir/index.js +++ b/projects/elixir/index.js @@ -1,27 +1,59 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { sumTokensExport } = require("../helper/unwrapLPs"); +const MANAGER_ABI = { + getPoolToken: "function getPoolToken(uint256 id, address token) view returns (address _address, uint256 amount, uint256, bool)", + getPoolToken_2: "function pools(uint256 id) view returns (address router, uint8 poolType, address token, uint256 orderlyDepositFee, uint256 orderlyWithdrawalFee, uint256 activeAmount, uint256 hardcap)" +} const DEUSD_LP_STAKING = "0xC7963974280261736868f962e3959Ee1E1B99712"; const COMMITS = "0x4265f5D6c0cF127d733EeFA16D66d0df4b650D53"; const FOUNDATION = "0x4B4EEC1DDC9420a5cc35a25F5899dC5993f9e586"; +const FOUNDATION_2 = "0x738744237b7Fd97AF670d9ddF54390c24263CeA8"; const deUSD = "0x15700b564ca08d9439c58ca5053166e8317aa138" -const tokens = [ +const LP_TOKENS = [ "0xb478Bf40dD622086E0d0889eeBbAdCb63806ADde", // DEUSD/DAI Curve LP "0x88DFb9370fE350aA51ADE31C32549d4d3A24fAf2", // DEUSD/FRAX Curve LP "0x5F6c431AC417f0f430B84A666a563FAbe681Da94", // DEUSD/USDC Curve LP "0x7C4e143B23D72E6938E06291f705B5ae3D5c7c7C", // DEUSD/USDT Curve LP ]; -const tvl = async (api) => { - const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) - api.sumTokens({ owners: [COMMITS, FOUNDATION], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null] }) - api.add(deUSD, deusdSupply); -}; +const VERTEX_MANAGER = '0x052Ab3fd33cADF9D9f227254252da3f996431f75' +const ORDERLY_MANAGER = '0x79865208f5dc18a476f49e6dbfd7d79785cb8cd8' + +const orderlyIntegration = async (api, manager, poolIds) => { + const pools = await api.multiCall({ abi: MANAGER_ABI.getPoolToken_2, calls: poolIds, target: manager }); + pools.forEach(i => api.add(i.token, i.activeAmount)); +} + +const integration = async (api, manager, poolIds, tokens) => { + if (manager === ORDERLY_MANAGER) + return orderlyIntegration(api, manager, poolIds) + const calls = poolIds.map(id => tokens.map(token => ({ params: [id, token] }))).flat(); + const pools = await api.multiCall({ abi: MANAGER_ABI.getPoolToken, calls, target: manager }); + pools.forEach((v, i) => api.add(calls[i].params[1], v.amount)); +} module.exports = { ethereum: { - tvl, - pool2: sumTokensExport({ owner: DEUSD_LP_STAKING, tokens }) + tvl: async (api) => { + const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) + api.add(deUSD, deusdSupply); + await api.sumTokens({ owners: [COMMITS, FOUNDATION, FOUNDATION_2], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null, ADDRESSES.ethereum.SDAI] }) + }, + pool2: sumTokensExport({ owner: DEUSD_LP_STAKING, tokens: LP_TOKENS }) }, + arbitrum: { + tvl: async (api) => { + await integration(api, VERTEX_MANAGER, [1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 31, 34, 36, 38, 40, 41, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62], [ + ADDRESSES.arbitrum.USDC_CIRCLE, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.ARB, + '0x95146881b86B3ee99e63705eC87AfE29Fcc044D9', + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.WETH, + ]) + await integration(api, ORDERLY_MANAGER, Array.from({ length: 10 }, (_, i) => i + 1)) + } + } }; From 19f1b6baf828b29aa81dd0d619a6055af08a285c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:30:29 +0200 Subject: [PATCH 0403/1768] rivus dao was hacked --- projects/rivusdao/index.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/projects/rivusdao/index.js b/projects/rivusdao/index.js index 2c901fc67d..618151ac4c 100644 --- a/projects/rivusdao/index.js +++ b/projects/rivusdao/index.js @@ -1,18 +1,23 @@ const rTokens = [ - '0x5e17abe30f0b804730c4e4db0ad217d8c29d05a0', // rsTAO - '0xcD7D22146ea9F26d0208848B6a1A9d1Bb538245A', // rsCOMAI + // '0x5e17abe30f0b804730c4e4db0ad217d8c29d05a0', // rsTAO + // '0xcD7D22146ea9F26d0208848B6a1A9d1Bb538245A', // rsCOMAI '0x3d8ede6231243d56e7896477789a450ce7fd2ad3' // rsNMT - ] +] async function tvl(api) { - const tokens = await api.multiCall({ abi: 'address:wrappedToken', calls: rTokens}) - const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: rTokens}) - api.add(tokens, supplies) + const tokens = await api.multiCall({ abi: 'address:wrappedToken', calls: rTokens }) + const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: rTokens }) + // const mintedBal = await api.call({ abi: 'erc20:balanceOf', target: rTokens[1], params: '0xA47F6159Ed855Ed7E9ec3Ca339b1B7491777d08E' }) + api.add(tokens, supplies) + // api.add(tokens[1], mintedBal * -1) } module.exports = { methodology: "TVL is calculated as the sum of the total supplies of rsTAO, rsCOMAI and rsNMT tokens.", ethereum: { tvl, - } + }, + hallmarks: [ + [Math.floor(new Date('2024-09-16')/1e3), 'Migration contract was hacked'], + ], }; From 20c9d3079804c433915bd4c5a78c61f09cbcabe7 Mon Sep 17 00:00:00 2001 From: NightHarbor Date: Tue, 17 Sep 2024 14:51:22 +0200 Subject: [PATCH 0404/1768] Add OracleFreeDollar.org (#11662) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/oraclefreedollar/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/oraclefreedollar/index.js diff --git a/projects/oraclefreedollar/index.js b/projects/oraclefreedollar/index.js new file mode 100644 index 0000000000..a1e60a0d54 --- /dev/null +++ b/projects/oraclefreedollar/index.js @@ -0,0 +1,16 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +const config = { + bsc: { factory: '0xFe00054AF44E24f0B4bd49b1A2d2984C4264aabE', fromBlock: 37882077, }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event PositionOpened (address indexed owner, address indexed position, address ofd, address collateral, uint256 price)', fromBlock, }) + const tokensAndOwners = logs.map(log => [log.collateral, log.position]) + return api.sumTokens({ tokensAndOwners }) + } + } +}) \ No newline at end of file From 9737bd8e4ec8dc3685fc2fc25fdb6d99b5cd24b7 Mon Sep 17 00:00:00 2001 From: Brendon Votteler Date: Tue, 17 Sep 2024 14:51:54 +0200 Subject: [PATCH 0405/1768] Feat: add V3 gateways to bob-gateway (#11659) --- projects/bob-gateway/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/bob-gateway/index.js b/projects/bob-gateway/index.js index bebbc6b72b..2c4588b454 100644 --- a/projects/bob-gateway/index.js +++ b/projects/bob-gateway/index.js @@ -22,6 +22,9 @@ module.exports = { // V2 gateways taken from gateway registry (allGateways): https://explorer.gobob.xyz/address/0x37f330e667208633e1da1cf601d01f0ef8484306?tab=read_contract "0x1578c26085b45A559D6B4D4cCfc1DD9e5c66F7B6", "0x2a7b7Db980B2228D5FfC47711D09d13F8F90961e", + // V3 gateways taken from gateway registry (allGateways): https://explorer.gobob.xyz/address/0xAE6770a207E86FaE3b191564FA55ce7Bfee0Dde9?tab=read_contract + "0xcc2c1d45A3ECeEdec364a6B9e537AE97Fa20bEa7", + "0x32768E87f7E929616f43B02F83c0F155A942Bc6B", ], }), } From 763a6a57e2e30b6d556593a851d26d16f1a885af Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:52:04 +0200 Subject: [PATCH 0406/1768] fix: yieldwolf (outdated) (#11661) --- projects/yieldwolf/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/yieldwolf/index.js b/projects/yieldwolf/index.js index 30d26cb6eb..856cc19b95 100644 --- a/projects/yieldwolf/index.js +++ b/projects/yieldwolf/index.js @@ -26,7 +26,7 @@ Object.keys(config).forEach(chain => { const tokens = poolInfos.map(i => i.stakeToken) const bals = await api.multiCall({ abi: abi.totalStakeTokens, calls: strategies}) api.add(tokens, bals) - blacklistedTokens.forEach(token => api.removeTokenBalances(token)) + blacklistedTokens.forEach(token => api.removeTokenBalance(token)) return sumTokens2({ api, resolveLP: true }) } } From 5b15a250bf797f2e0d1afd1fb671aebbb2d43353 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:52:13 +0200 Subject: [PATCH 0407/1768] fix: bril-finance (outdated) (#11660) --- projects/bril-finance/index.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/projects/bril-finance/index.js b/projects/bril-finance/index.js index faf565b1f2..73be3acf3c 100644 --- a/projects/bril-finance/index.js +++ b/projects/bril-finance/index.js @@ -25,13 +25,15 @@ Object.keys(config).forEach(chain => { const areStrategiesEnabled = await api.multiCall({ abi: factory_abi.isStrategyEnabled, calls: strategies, target: factory }); const enabledStrategies = strategies.filter((s, index) => areStrategiesEnabled[index]); - const balances = await api.multiCall({ abi: abi.vaultAmounts, calls: enabledStrategies, }); + const balances = await api.multiCall({ abi: abi.vaultAmounts, calls: enabledStrategies, permitFailure: true }); const summaries = await api.multiCall({ abi: abi.vaultSummary, calls: enabledStrategies, permitFailure: true, }); for (let i = 0; i < balances.length; i++) { - if (!summaries[i]) continue; - api.add(summaries[i].baseToken_, balances[i].baseTotal_); - api.add(summaries[i].scarceToken_, balances[i].scarceTotal_); + const balance = balances[i] + const summary = summaries[i] + if (!balance || !summary) continue; + api.add(summary.baseToken_, balance.baseTotal_); + api.add(summary.scarceToken_, balance.scarceTotal_); } } } From 7183fb7f8fa734bace1f7add67f3d0f5603e3347 Mon Sep 17 00:00:00 2001 From: codenutt <23013728+codenutt@users.noreply.github.com> Date: Tue, 17 Sep 2024 08:00:27 -0500 Subject: [PATCH 0408/1768] update tokemak to include autopilot tvl (#11658) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/tokemak/index.js | 52 ++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/projects/tokemak/index.js b/projects/tokemak/index.js index 6f52e0e1ea..23b780f9d3 100644 --- a/projects/tokemak/index.js +++ b/projects/tokemak/index.js @@ -1,5 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk') const { sumTokens2, } = require('../helper/unwrapLPs') const abi = require("../pendle/abi.json"); const positions = require('./positions.json'); @@ -15,6 +14,26 @@ const cvx_abi = { stkcvxFRAXBP_lockedStakesOf: "function lockedStakesOf(address account) view returns (tuple(bytes32 kek_id, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier)[])", } +const v2Gen3EthMainnet = { + systemRegistry: { + address: "0x2218F90A98b0C070676f249EF44834686dAa4285", + abi: { + autoPoolRegistry: "function autoPoolRegistry() view returns (address)" + } + }, + autoPoolRegistry: { + abi: { + listVaults: "function listVaults() view returns (address[] memory)" + } + }, + autopool: { + abi: { + totalAssets: "function totalAssets() view returns (uint256)", + asset: "function asset() view returns (address)" + } + } +} + const degenesisContract = "0xc803737D3E12CC4034Dde0B2457684322100Ac38"; const wethPool = "0xD3D13a578a53685B4ac36A1Bab31912D2B2A2F36"; const usdcPool = "0x04bda0cf6ad025948af830e75228ed420b0e860d"; @@ -31,9 +50,9 @@ const fxs = ADDRESSES.ethereum.FXS; const tcrPool = "0x15A629f0665A3Eb97D7aE9A7ce7ABF73AeB79415"; const tcr = "0x9C4A4204B79dd291D6b6571C5BE8BbcD0622F050"; const toke = ADDRESSES.ethereum.TOKE; -const rtoke1 = "0xa760e26aA76747020171fCF8BdA108dFdE8Eb930"; -const rtoke2 = "0x96f98ed74639689c3a11daf38ef86e59f43417d3"; -const rtoke3 = "0xA374A62DdBd21e3d5716cB04821CB710897c0972"; +const tTokeReactor = "0xa760e26aA76747020171fCF8BdA108dFdE8Eb930"; +const stakingVestingV1 = "0x96f98ed74639689c3a11daf38ef86e59f43417d3"; +const accTokeV1 = "0xA374A62DdBd21e3d5716cB04821CB710897c0972"; const sushiPool = "0xf49764c9C5d644ece6aE2d18Ffd9F1E902629777"; const sushi = ADDRESSES.ethereum.SUSHI; const fraxPool = "0x94671A3ceE8C7A12Ea72602978D1Bb84E920eFB2"; @@ -110,7 +129,6 @@ async function tvl(api) { [cvxFRAXPool, tokeManager], [cvxalUSDPool, tokeManager], ] - const balances = {} // cvxcrvFRAX const cvxFraxUsdcPool = "0x7e880867363A7e321f5d260Cade2B0Bb2F717B02"; @@ -133,9 +151,9 @@ async function tvl(api) { target: cvxcvxFxsPool, params: [tokeTreasury], }); - sdk.util.sumSingleBalance(balances, cvxcrvFrax, cvxcrvFraxBal) - sdk.util.sumSingleBalance(balances, cvxcrvFrax, treasuryFraxBal[0]['liquidity']) - sdk.util.sumSingleBalance(balances, cvxcvxFxs, cvxcvxFxsBal) + api.add(cvxcrvFrax, cvxcrvFraxBal) + api.add(cvxcrvFrax, treasuryFraxBal[0]['liquidity']) + api.add(cvxcvxFxs, cvxcvxFxsBal) let curveHoldings = positions.exchanges.filter( pool => pool.type == 'Curve') @@ -147,10 +165,20 @@ async function tvl(api) { lpBalances(curveHoldings, toa, tokens, calls,) lpBalances(uniHoldings, toa, tokens, calls) const amountRes = await api.multiCall({ abi: abi.userInfo, calls }) - tokens.forEach((val, i) => sdk.util.sumSingleBalance(balances, val, amountRes[i].amount, api.chain)) + tokens.forEach((val, i) => api.add(val, amountRes[i].amount)) + + + // ================================================ + // Autopilot + // ================================================ + // Get the instance of the Autopool Registry from the System Registry + const autopoolRegistry = await api.call({ abi: v2Gen3EthMainnet.systemRegistry.abi.autoPoolRegistry, target: v2Gen3EthMainnet.systemRegistry.address, }); + // Use the Autopool Registry to get all the Autopools in the system + const autopools = await api.call({ abi: v2Gen3EthMainnet.autoPoolRegistry.abi.listVaults, target: autopoolRegistry, }); + await api.erc4626Sum2({ calls: autopools}) - return sumTokens2({ balances, api, tokensAndOwners: toa, }) + return sumTokens2({ api, tokensAndOwners: toa, }) } function lpBalances(holdings, toa, tokens, calls) { @@ -175,11 +203,11 @@ function lpBalances(holdings, toa, tokens, calls) { } async function staking(api) { - let vestedToke = '57238445' + let vestedToke = '1438444' api.add(ADDRESSES.ethereum.TOKE, vestedToke * 1e18 * -1) return sumTokens2({ api, tokensAndOwners: [ - [toke, rtoke1], [toke, rtoke2], [toke, rtoke3] + [toke, tTokeReactor], [toke, stakingVestingV1], [toke, accTokeV1] ] }) } From d1503610fabca8c1bc5153751f28ccefe8afed88 Mon Sep 17 00:00:00 2001 From: "gervickas.js" Date: Tue, 17 Sep 2024 10:01:56 -0300 Subject: [PATCH 0409/1768] feat/adding new chain to adapter (#11657) --- projects/sweep-n-flip/index.js | 85 +++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 23 deletions(-) diff --git a/projects/sweep-n-flip/index.js b/projects/sweep-n-flip/index.js index 6f4d2f25be..5c0e0e0091 100644 --- a/projects/sweep-n-flip/index.js +++ b/projects/sweep-n-flip/index.js @@ -1,37 +1,76 @@ +const { getLogs } = require('../helper/cache/getLogs'); +const { transformDexBalances } = require('../helper/portedTokens'); -const { getLogs } = require('../helper/cache/getLogs') -const { transformDexBalances } = require('../helper/portedTokens') - -const factory = '0x16eD649675e6Ed9F1480091123409B4b8D228dC1' module.exports = { misrepresentedTokens: true, methodology: 'TVL counts the liquidity of the pools on each chain.', -} +}; const config = { - ethereum: { fromBlock: 12965000, }, - polygon: { fromBlock: 12965000, }, - arbitrum: { fromBlock: 101851523, }, -} + ethereum: { + fromBlock: 12965000, + factory: '0x16eD649675e6Ed9F1480091123409B4b8D228dC1', + }, + polygon: { + fromBlock: 12965000, + factory: '0x16eD649675e6Ed9F1480091123409B4b8D228dC1', + }, + arbitrum: { + fromBlock: 101851523, + factory: '0x16eD649675e6Ed9F1480091123409B4b8D228dC1', + }, + mode: { + fromBlock: 6989680, + factory: '0x7962223D940E1b099AbAe8F54caBFB8a3a0887AB', + }, +}; -Object.keys(config).forEach(chain => { - const { fromBlock } = config[chain] +Object.keys(config).forEach((chain) => { + const { fromBlock, factory } = config[chain]; module.exports[chain] = { tvl: async (api) => { let logs = await getLogs({ api, target: factory, - eventAbi: "event PairCreated(address indexed token0, address indexed token1, address pair, uint256)", + eventAbi: + 'event PairCreated(address indexed token0, address indexed token1, address pair, uint256)', onlyArgs: true, fromBlock, - }) - let pairs = logs.map(log => log.pair) - const names = await api.multiCall({ abi: 'string:name', calls: pairs }) - logs = logs.filter((pair, i) => names[i] === 'SweepnFlip LPs') - pairs = logs.map(log => log.pair) - const bals0 = await api.multiCall({ abi: 'erc20:balanceOf', calls: pairs.map((pair, i) => ({ target: logs[i].token0, params: pair })) }) - const bals1 = await api.multiCall({ abi: 'erc20:balanceOf', calls: pairs.map((pair, i) => ({ target: logs[i].token1, params: pair })) }) - return transformDexBalances({ chain, data: logs.map((l, i) => ({ token0Bal: bals0[i], token1Bal: bals1[i], token0: l.token0, token1: l.token1 })) }) - } - } -}) \ No newline at end of file + }); + + let pairs = logs.map((log) => log.pair); + + const names = await api.multiCall({ abi: 'string:name', calls: pairs }); + + logs = logs.filter((pair, i) => names[i] === 'SweepnFlip LPs'); + + pairs = logs.map((log) => log.pair); + + const bals0 = await api.multiCall({ + abi: 'erc20:balanceOf', + calls: pairs.map((pair, i) => ({ + target: logs[i].token0, + params: pair, + })), + }); + + const bals1 = await api.multiCall({ + abi: 'erc20:balanceOf', + calls: pairs.map((pair, i) => ({ + target: logs[i].token1, + params: pair, + })), + }); + + return transformDexBalances({ + chain, + data: logs.map((l, i) => ({ + token0Bal: bals0[i], + token1Bal: bals1[i], + token0: l.token0, + token1: l.token1, + })), + }); + }, + }; +}); From 43a3583b489532cd3715c7275ee6bd0bb67ba55f Mon Sep 17 00:00:00 2001 From: Double Date: Tue, 17 Sep 2024 06:15:21 -0700 Subject: [PATCH 0410/1768] feat: refactor double2win for multi-chain support (#11656) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/double2win/config.js | 24 ------------ projects/double2win/index.js | 74 +++++++++++++++-------------------- 2 files changed, 31 insertions(+), 67 deletions(-) delete mode 100644 projects/double2win/config.js diff --git a/projects/double2win/config.js b/projects/double2win/config.js deleted file mode 100644 index 262c978956..0000000000 --- a/projects/double2win/config.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - arbitrum: { - uniswapV2Vault: { - doubleContract: '0xBf212dEE0aea6531dEb0B02be6E70b527dDF8246', - type: 'v2-vault' - }, - uniswapV2Migration: { - doubleContract: '0x1c6E7CE03ae7a9A252BcE0C9F871654dBB0C7ca5', - type: 'v2-vault' - }, - uniswapV3Vault: { - doubleContract: '0x07116C5ED5cBb49464f64926Ba152B8985fe3AFf', - type: 'v3-vault' - }, - uniswapV3Migration: { - doubleContract: '0x99F980fa0b1939A0A1033092EF2a668df8D8b70D', - type: 'v3-vault' - }, - assetVault: { - doubleContract: '0x7C09A9c30736F17043Fe6D0C0A3D03a7Cf6e78FD', - type: 'asset-vault' - }, - } -}; diff --git a/projects/double2win/index.js b/projects/double2win/index.js index dea04d687b..c68d0e86d5 100644 --- a/projects/double2win/index.js +++ b/projects/double2win/index.js @@ -1,12 +1,7 @@ -const config = require("./config") -const { sumTokens2 } = require('../helper/unwrapLPs') const { cachedGraphQuery } = require('../helper/cache') +const { sumTokens2 } = require("../helper/unwrapLPs") -const subgraphs = { - "arbitrum": "https://api.studio.thegraph.com/query/16975/double-arbitrum/version/latest", -} - -async function getTokens(chain) { +async function getTokens(chain, subgraph) { const graphQuery = ` { assetTokens(where: {amount_gt: "0"}) { @@ -23,45 +18,38 @@ async function getTokens(chain) { } ` - const { assetTokens, migrations, liquidities } = await cachedGraphQuery(`double2win/${chain}`, subgraphs[chain], graphQuery) + const { assetTokens, migrations, liquidities } = await cachedGraphQuery(`double2win/${chain}`, subgraph, graphQuery) + const tokens = [] - return { assets: assetTokens.map(i => i.tokenAddress), v2Tokens: migrations.concat(liquidities).filter(i => i.ammType === 'UniswapV2').map(i => i.pair) } -} + migrations.forEach(migration => { tokens.push(migration.pair.toLowerCase()) }) + liquidities.forEach(liquidity => { tokens.push(liquidity.pair.toLowerCase()) }) + assetTokens.forEach(assetToken => { tokens.push(assetToken.tokenAddress.toLowerCase()) }) -module.exports = { - doublecounted: true, + return tokens } -Object.keys(config).forEach((chain) => { - const configs = Object.values(config[chain]) - - module.exports[chain] = { - tvl: async (api) => { - const v2Vaults = [] - const v3Vaults = [] - const assetVaults = [] - configs.forEach((config) => { - switch (config.type) { - case 'v2-vault': - v2Vaults.push(config.doubleContract) - break - case 'v3-vault': - v3Vaults.push(config.doubleContract) - break - case 'asset-vault': - assetVaults.push(config.doubleContract) - break - } - }) - const { assets, v2Tokens } = await getTokens(chain) - await sumTokens2({ resolveUniV3: true, api, owners: v3Vaults }) - await sumTokens2({ - owners: assetVaults, tokens: assets, api, blacklistedTokens: [ - '0x13654df31871b5d01e5fba8e6c21a5d0344820f5' - ] - }) - return sumTokens2({ owners: v2Vaults, tokens: v2Tokens, resolveLP: true, api }) - } +async function arbitrumTvl(api) { + const chain = api.chain + const subgraph = "https://api.studio.thegraph.com/query/16975/double-arbitrum/version/latest" + const addresses = { + uniswapV2Vault: '0xBf212dEE0aea6531dEb0B02be6E70b527dDF8246', + uniswapV2Migration: '0x1c6E7CE03ae7a9A252BcE0C9F871654dBB0C7ca5', + uniswapV3Vault: '0x07116C5ED5cBb49464f64926Ba152B8985fe3AFf', + uniswapV3Migration: '0x99F980fa0b1939A0A1033092EF2a668df8D8b70D', + assetVault: '0x7C09A9c30736F17043Fe6D0C0A3D03a7Cf6e78FD', } + + const tokens = await getTokens(chain, subgraph) + + const blacklistedTokens = ['0x13654df31871b5d01e5fba8e6c21a5d0344820f5'] + await sumTokens2({ api, owners: [addresses.uniswapV3Vault, addresses.uniswapV3Migration,], resolveUniV3: true, blacklistedTokens, }) + await sumTokens2({ api, owners: [addresses.uniswapV2Migration, addresses.assetVault, addresses.uniswapV2Vault], tokens, resolveLP: true, blacklistedTokens, }) + +} -}) +module.exports = { + doublecounted: true, + arbitrum: { + tvl: arbitrumTvl, + }, +} From 90d87bca0d358260ce5db2c952737988aaf7e306 Mon Sep 17 00:00:00 2001 From: pie Date: Tue, 17 Sep 2024 21:17:21 +0800 Subject: [PATCH 0411/1768] feat: add cygnus restaking protocol (#11655) --- projects/cygnus-fi-restake/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/cygnus-fi-restake/index.js diff --git a/projects/cygnus-fi-restake/index.js b/projects/cygnus-fi-restake/index.js new file mode 100644 index 0000000000..8ef5e2683e --- /dev/null +++ b/projects/cygnus-fi-restake/index.js @@ -0,0 +1,15 @@ +const { sumTokensExport } = require('../helper/sumTokens'); +const ADDRESSES = require('../helper/coreAssets.json') + +// Cygnus is extending the restaking protocol to more chains. +// Bsquared is one of the first chains we are supporting. +const CYGNUS_RESTAKE_VAULT = { + bsquared: '0x7551aEa51588AaCe99B89c3FaC3CFc4108DB8094' +} + +module.exports = { + methodology: "Calculates assets locked in cygnus restaking vault", + bsquared: { + tvl: sumTokensExport({ owner: CYGNUS_RESTAKE_VAULT.bsquared, tokens: [ADDRESSES.bsquared.UBTC] }) + } +} \ No newline at end of file From e685c60fda501931f1f7003320cd429c926812dc Mon Sep 17 00:00:00 2001 From: Dan Hsu Date: Tue, 17 Sep 2024 21:18:20 +0800 Subject: [PATCH 0412/1768] Add new project - DoubleUp (#11652) --- projects/doubleup/index.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 projects/doubleup/index.js diff --git a/projects/doubleup/index.js b/projects/doubleup/index.js new file mode 100644 index 0000000000..7cf3171866 --- /dev/null +++ b/projects/doubleup/index.js @@ -0,0 +1,35 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const sui = require("../helper/chain/sui"); + +const UNI_HOUSE_OBJ_ID = "0x75c63644536b1a7155d20d62d9f88bf794dc847ea296288ddaf306aa320168ab" +const SUI = ADDRESSES.sui.SUI; + +async function tvl(api) { + const unihouseDynamicFields = await sui.getDynamicFieldObjects({ + parent: UNI_HOUSE_OBJ_ID, + }); + + const unihouseList = unihouseDynamicFields?.filter( + (field) => field?.type.includes("house::House"), + ); + + const unihouseIdList = unihouseList.map((house) => house.fields.id.id); + + // console.log(unihouseIdList); + + for (const id of unihouseIdList) { + const house = await sui.getObject(id); + + const pipeDebt = house?.fields?.pipe_debt?.fields?.value; + const totalSui = Number(pipeDebt) + Number(house?.fields?.pool); + + api.add(SUI, totalSui); + } +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, +}; \ No newline at end of file From 0bc54fc54035af298c5b132dfc8a47ba07a694f1 Mon Sep 17 00:00:00 2001 From: TJakubek <39831436+TJakubek@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:18:37 +0200 Subject: [PATCH 0413/1768] Enosys - add songbird v3 dex (#11653) --- projects/enosys-dex-v3/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/enosys-dex-v3/index.js diff --git a/projects/enosys-dex-v3/index.js b/projects/enosys-dex-v3/index.js new file mode 100644 index 0000000000..bc6987e740 --- /dev/null +++ b/projects/enosys-dex-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + songbird: { factory: "0x416F1CcBc55033Ae0133DA96F9096Fe8c2c17E7d", fromBlock: 69857654 }, +}); \ No newline at end of file From 68d40a06ee015f8882514501223324b5aabda020 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:26:34 +0200 Subject: [PATCH 0414/1768] track yellow #11654 --- projects/yellow/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/yellow/index.js diff --git a/projects/yellow/index.js b/projects/yellow/index.js new file mode 100644 index 0000000000..fdf8a8b522 --- /dev/null +++ b/projects/yellow/index.js @@ -0,0 +1,21 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const vaultAddress = '0xb5F3a9dD92270f55e55B7Ac7247639953538A261' + +const vaults = { + ethereum: {}, + linea: {}, + polygon: {}, +} + +module.exports = { + methodology: 'The total amount of assets locked in the Yellow Wallet.', +} + +Object.keys(vaults).forEach((chain) => { + const { vault = vaultAddress, tokens = [] } = vaults[chain] + + module.exports[chain] = { + tvl: sumTokensExport({ owner: vault, tokens, fetchCoValentTokens: true }), + } +}) From 055d6523918273c9bca72d228195ac3c41268ded Mon Sep 17 00:00:00 2001 From: Jasper <104004836+j-vp@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:52:23 +0200 Subject: [PATCH 0415/1768] add cbBTC lending pool (#11667) --- projects/arcadia-finance-v2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/arcadia-finance-v2/index.js b/projects/arcadia-finance-v2/index.js index 561698f436..88571f13dc 100644 --- a/projects/arcadia-finance-v2/index.js +++ b/projects/arcadia-finance-v2/index.js @@ -6,6 +6,7 @@ const config = { pools: { wethPool: "0x803ea69c7e87D1d6C86adeB40CB636cC0E6B98E2", usdcPool: "0x3ec4a293Fb906DD2Cd440c20dECB250DeF141dF1", + cbbtcPool: "0xa37E9b4369dc20940009030BfbC2088F09645e3B" }, uniNFT: "0x03a520b32c04bf3beef7beb72e919cf822ed34f1", slipNFT: "0x827922686190790b37229fd06084350e74485b72", From bd2978df34d4716af70bd5d825148eefd33a1c7a Mon Sep 17 00:00:00 2001 From: Michael Otis <34221002+michaelotis@users.noreply.github.com> Date: Wed, 18 Sep 2024 01:52:53 -0500 Subject: [PATCH 0416/1768] Vela: Add burn event (#11666) --- projects/vela-exchange/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/vela-exchange/index.js b/projects/vela-exchange/index.js index f1ae88d8b5..4e70f94995 100644 --- a/projects/vela-exchange/index.js +++ b/projects/vela-exchange/index.js @@ -39,6 +39,7 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2023-04-13') / 1e3), 'Refunded tokens to VLP holders & traders'], [1693926000, 'Launched on Base Chain'], - [1721314800, 'Implemented Aave VLP supply integration'] + [1721314800, 'Implemented Aave VLP supply integration'], + [1726596000, 'Burned 65m Vela tokens'] ], } From 4ba32d7962d8dc2b3dd92377b798c08fa9b82dab Mon Sep 17 00:00:00 2001 From: johnnyonline <103320838+johnnyonline@users.noreply.github.com> Date: Wed, 18 Sep 2024 13:55:36 +0700 Subject: [PATCH 0417/1768] fix: ynLSDe TVL (#11664) --- projects/yieldnest/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index f69868f71d..45adaf4573 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -2,7 +2,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const YN_ETH = '0x09db87a538bd693e9d08544577d5ccfaa6373a48' -const YN_LSDE = '0x35Ec69A77B79c255e5d47D5A3BdbEFEfE342630c' module.exports = { ethereum: { @@ -11,7 +10,7 @@ module.exports = { api.add(ADDRESSES.null, ynethBalance) const lsdRegistry = '0x323C933df2523D5b0C756210446eeE0fB84270fd' const lsds = await api.call({ abi: 'address[]:getAssets', target: lsdRegistry }) - const bals = await api.call({ abi: 'function assetBalances(address[]) view returns (uint256[])', target: YN_LSDE, params: [lsds] }) + const bals = await api.call({ abi: 'function getAllAssetBalances() view returns (uint256[])', target: lsdRegistry }) api.add(lsds, bals) } }, From a398dbebdcac79096605d288fa02eb2e3ca68a73 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:01:33 +0200 Subject: [PATCH 0418/1768] update midas oracle #11671 --- projects/midas/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/midas/index.js b/projects/midas/index.js index 69f0421fb7..59a6104fc4 100644 --- a/projects/midas/index.js +++ b/projects/midas/index.js @@ -3,10 +3,10 @@ async function tvl(api) { const mtbillSupply = await await api.call({ abi: "erc20:totalSupply", target: MTBILL_TOKEN_CONTRACT, }) const rate = await api.call({ - target: "0x32d1463EB53b73C095625719Afa544D5426354cB", // IB01/USD + target: "0x056339C044055819E8Db84E71f5f2E1F536b2E5b", // midas oracle abi: "function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)", }); - api.addCGToken("tether", (mtbillSupply / 1e18) * ((rate.answer / 1e8) / 100)) + api.addCGToken("tether", (mtbillSupply / 1e18) * ((rate.answer / 1e8))) } const chains = ["ethereum"]; From 732f7ab1d5c2745fec9e043514527935bf24a9af Mon Sep 17 00:00:00 2001 From: Thomas Wilkinson Date: Wed, 18 Sep 2024 09:31:02 +0100 Subject: [PATCH 0419/1768] Update Mozaic to include Theseus Vault relaunch (#11665) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/mozaic/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/projects/mozaic/index.js b/projects/mozaic/index.js index d46b1e6e47..3e4a2804ba 100644 --- a/projects/mozaic/index.js +++ b/projects/mozaic/index.js @@ -7,7 +7,21 @@ const vaults = { kava: "0x5712ab97A299a8A4544BCc728B7f3E9663965443", } +const theseusVaults = { + arbitrum: { vault: '0x6D8E0Ac94fb79Cd3520f546ce1c23A6F27F16EaC', gmxPlugin: '0xD4497259a3535ae311AB0F6ad68Da43a676919Db' }, +} + async function tvl(api) { + if (theseusVaults[api.chain]) { + const { vault, gmxPlugin } = theseusVaults[api.chain] + const tokens = await api.call({ abi: 'address[]:getAcceptedTokens', target: vault }) + const gmxPoolAbi = "function getPools() view returns ((uint8 poolId, address indexToken, address longToken, address shortToken, address marketToken)[])" + const gmxTokens = await api.call({ abi: gmxPoolAbi, target: gmxPlugin }) + const ownerTokens = [[tokens, vault], [gmxTokens.map(t => t.marketToken), gmxPlugin]] + await api.sumTokens({ ownerTokens }) + } + + const vault = vaults[api.chain]; const tokens = await api.call({ abi: 'function getAcceptingTokens () view returns (address[])', target: vault, }); const bals = await api.multiCall({ abi: 'function getStakedAmountPerToken(address token) view returns (uint256)', calls: tokens, target: vault }) From 9f05a3aff7e49737c869abb2b81ef0b172d2acd2 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:09:51 +0200 Subject: [PATCH 0420/1768] fix: Maya-protocol (outdated) (#11674) --- projects/mayachain/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/projects/mayachain/index.js b/projects/mayachain/index.js index a4da73bb21..d793d9602d 100644 --- a/projects/mayachain/index.js +++ b/projects/mayachain/index.js @@ -19,6 +19,7 @@ const tokenGeckoMapping = { "ETH.PEPE": "pepe", "ETH.ETH": "ethereum", "ETH.USDC": "usd-coin", + "ETH.MOG":"mog-coin", "KUJI.USK": "usk", "KUJI.KUJI": "kujira", "THOR.RUNE": "thorchain", @@ -47,6 +48,7 @@ const tokenToDecimalMapping = { "ETH.PEPE": 18, "ETH.ETH": 18, "ETH.USDC": 6, + "ETH.MOG":18, "KUJI.USK": 8, "KUJI.KUJI": 8, "THOR.RUNE": 8, @@ -92,9 +94,9 @@ async function tvl(api) { let [baseToken, address] = token.split("-"); if (chain === "ethereum" || chain === "arbitrum") { - assetDepth = - assetDepth * - 10 ** (+tokenToDecimalMapping[chainStr + "." + baseToken] - 8); + let decimal = tokenToDecimalMapping[chainStr + "." + baseToken]; + if (decimal === undefined || isNaN(decimal)) return + assetDepth = assetDepth * 10 ** (+decimal - 8); // e.g. ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48 address = address && address.includes('-') ? address.split("-")[1] : address From 01e2d933b028d6ed039a136164a9834c52f2e215 Mon Sep 17 00:00:00 2001 From: Stone <125890624+Stonepapa@users.noreply.github.com> Date: Wed, 18 Sep 2024 22:10:47 +0800 Subject: [PATCH 0421/1768] Add token address (#11673) --- projects/buzz-farming/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/buzz-farming/index.js b/projects/buzz-farming/index.js index 0c8950c9e5..146b5e9dd7 100644 --- a/projects/buzz-farming/index.js +++ b/projects/buzz-farming/index.js @@ -10,8 +10,9 @@ const ADDRESSES_BSQUARED_FBTC = '0x5d247f32b792a61f7b4078cf7752a878aff152e2'; const ADDRESSES_BSQUARED_UBTC = ADDRESSES.bsquared.UBTC; const ADDRESSES_BSQUARED_USDA = '0x46fecc5bef70615ee3bfdbd2b278944368b78cf5'; const ADDRESSES_BSQUARED_ETH = ADDRESSES.bsquared.ETH; +const ADDRESSES_BSQUARED_UNIBTC = '0x93919784C523f39CACaa98Ee0a9d96c3F32b593e'; -const tokenList = [ADDRESSES.null, ADDRESSES.bsquared.USDT, ADDRESSES.bsquared.USDC, ADDRESSES.bsquared.WBTC, ADDRESSES_BSQUARED_BSTONE, ADDRESSES_BSQUARED_FDUSD, ADDRESSES_BSQUARED_MATIC, ADDRESSES_BSQUARED_ORDI, ADDRESSES_BSQUARED_SATS, ADDRESSES_BSQUARED_FBTC, ADDRESSES_BSQUARED_UBTC, ADDRESSES_BSQUARED_USDA, ADDRESSES_BSQUARED_ETH,]; +const tokenList = [ADDRESSES.null, ADDRESSES.bsquared.USDT, ADDRESSES.bsquared.USDC, ADDRESSES.bsquared.WBTC, ADDRESSES_BSQUARED_BSTONE, ADDRESSES_BSQUARED_FDUSD, ADDRESSES_BSQUARED_MATIC, ADDRESSES_BSQUARED_ORDI, ADDRESSES_BSQUARED_SATS, ADDRESSES_BSQUARED_FBTC, ADDRESSES_BSQUARED_UBTC, ADDRESSES_BSQUARED_USDA, ADDRESSES_BSQUARED_ETH, ADDRESSES_BSQUARED_UNIBTC]; module.exports = { From 53b650d1a735e07c836c00b6ba3ce2f271b30769 Mon Sep 17 00:00:00 2001 From: Sergey Martinsen Date: Wed, 18 Sep 2024 19:43:37 +0400 Subject: [PATCH 0422/1768] Add Aqua Protocol (#11672) --- projects/aquaprotocol/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/aquaprotocol/index.js diff --git a/projects/aquaprotocol/index.js b/projects/aquaprotocol/index.js new file mode 100644 index 0000000000..5b06ff4af5 --- /dev/null +++ b/projects/aquaprotocol/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require('../helper/sumTokens') +const ADDRESSES = require("../helper/coreAssets.json"); + +const AQUA_ADDRESS = 'EQAWDyxARSl3ol2G1RMLMwepr3v6Ter5ls3jiAlheKshgg0K' + +module.exports = { + methodology: 'Total amount of collateral locked in the Aqua Protocol (EQAWDyxARSl3ol2G1RMLMwepr3v6Ter5ls3jiAlheKshgg0K)', + start: 1726506000, + ton: { + tvl: sumTokensExport({ owner: AQUA_ADDRESS, tokens: [ADDRESSES.null]}), + } +} From 408037b0b05446de07c093fff183d46e480191c3 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 18 Sep 2024 23:12:32 +0100 Subject: [PATCH 0423/1768] fix bastion bug --- projects/bastion/index.js | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/projects/bastion/index.js b/projects/bastion/index.js index a90c0019cf..78cae181c7 100644 --- a/projects/bastion/index.js +++ b/projects/bastion/index.js @@ -1,5 +1,4 @@ const { compoundExports } = require("../helper/compound"); -const sdk = require('@defillama/sdk') const mainHubExport = compoundExports( "0x6De54724e128274520606f038591A00C5E94a1F6", @@ -21,20 +20,12 @@ const bastion = [ module.exports = { aurora: { tvl: async (...args) => { - let balances = {}; - const tvls = await Promise.all(bastion.map(realm => realm.tvl(...args))) - tvls.forEach(tvl => { - Object.keys(tvl).forEach(key => sdk.util.sumSingleBalance(balances, key, tvl[key])) - }) - return balances; + await Promise.all(bastion.map(realm => realm.tvl(...args))) + return args[0].getBalances(); }, borrowed: async (...args) => { - let balances = {}; - const tvls = await Promise.all(bastion.map(realm => realm.borrowed(...args))) - tvls.forEach(tvl => { - Object.keys(tvl).forEach(key => sdk.util.sumSingleBalance(balances, key, tvl[key])) - }) - return balances; + await Promise.all(bastion.map(realm => realm.borrowed(...args))) + return args[0].getBalances(); }, }, }; \ No newline at end of file From de178c2f774ef041316335aa8564cd7f93ed36f0 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Sep 2024 03:21:10 +0100 Subject: [PATCH 0424/1768] add era --- projects/venus.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/venus.js b/projects/venus.js index cb52954cca..e06a2ad297 100644 --- a/projects/venus.js +++ b/projects/venus.js @@ -3,4 +3,5 @@ const { compoundExports2} = require('./helper/compound'); module.exports.bsc = compoundExports2({ comptroller: '0xfd36e2c2a6789db23113685031d7f16329158384', cether: '0xA07c5b74C9B40447a954e1466938b865b6BBea36'}) module.exports.ethereum = compoundExports2({ comptroller: '0x67aA3eCc5831a65A5Ba7be76BED3B5dc7DB60796'}) module.exports.op_bnb = compoundExports2({ comptroller: '0xd6e3e2a1d8d95cae355d15b3b9f8e5c2511874dd'}) -module.exports.arbitrum = compoundExports2({ comptroller: '0x317c1A5739F39046E20b08ac9BeEa3f10fD43326'}) \ No newline at end of file +module.exports.arbitrum = compoundExports2({ comptroller: '0x317c1A5739F39046E20b08ac9BeEa3f10fD43326'}) +module.exports.era = compoundExports2({ comptroller: '0xddE4D098D9995B659724ae6d5E3FB9681Ac941B1'}) \ No newline at end of file From faef2bf0385a86783c5918d1f66aab4bfa5e1b3d Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Sep 2024 03:34:23 +0100 Subject: [PATCH 0425/1768] add era --- projects/treasury/venus.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/treasury/venus.js b/projects/treasury/venus.js index 6933612a32..b091f07c73 100644 --- a/projects/treasury/venus.js +++ b/projects/treasury/venus.js @@ -60,4 +60,13 @@ module.exports = treasuryExports({ owners: [venusTreasury], ownTokens: [XVS, VAI], }, + era: { + tokens: [ + '0xBBeB516fb02a01611cBBE0453Fe3c580D7281011', + '0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E', + '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', + '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91' + ], + owners: ['0xB2e9174e23382f7744CebF7e0Be54cA001D95599'] + } }); From fe9df1353aee8f524102f3c8d6c8cbe5a70e8fdb Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Sep 2024 03:38:25 +0100 Subject: [PATCH 0426/1768] update era addresses --- projects/treasury/venus.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/treasury/venus.js b/projects/treasury/venus.js index b091f07c73..c14df2d5e3 100644 --- a/projects/treasury/venus.js +++ b/projects/treasury/venus.js @@ -62,10 +62,10 @@ module.exports = treasuryExports({ }, era: { tokens: [ - '0xBBeB516fb02a01611cBBE0453Fe3c580D7281011', - '0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E', - '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', - '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91' + ADDRESSES.era.WBTC, + ADDRESSES.era.ZK, + ADDRESSES.era.USDC, + ADDRESSES.era.WETH ], owners: ['0xB2e9174e23382f7744CebF7e0Be54cA001D95599'] } From 177c69ef0932d1efe6f0eceb2d9e7d5535b54800 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 07:52:20 +0200 Subject: [PATCH 0427/1768] remove unused code --- projects/nearpad/index.js | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/projects/nearpad/index.js b/projects/nearpad/index.js index d4091a13d8..063948ac8a 100644 --- a/projects/nearpad/index.js +++ b/projects/nearpad/index.js @@ -1,26 +1,8 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') -const tokens = [ - "0x885f8CF6E45bdd3fdcDc644efdcd0AC93880c781", - "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", - ADDRESSES.aurora.NEAR, - ADDRESSES.aurora.USDT_e, - "0xe3520349F477A5F6EB06107066048508498A291b", - ADDRESSES.aurora.USDC_e, - "0xF4eB217Ba2454613b15dBdea6e5f22276410e89e", - ADDRESSES.aurora.AURORA, - "0xFa94348467f64D5A457F75F8bc40495D33c65aBB", - "0x74974575d2f1668c63036d51ff48dbaa68e52408", - "0xdcD6D4e2B3e1D1E1E6Fa8C21C8A323DcbecfF970", - ADDRESSES.aurora.FRAX, -]; - - module.exports = { misrepresentedTokens: true, aurora: { tvl: getUniTVL({ factory: '0x34484b4E416f5d4B45D4Add0B6eF6Ca08FcED8f1', useDefaultCoreAssets: true }), }, -}; -// node test.js projects/nearpad/index.js +} From 05243fbbdfebd40abf80d610cd7eb4d78755cbb5 Mon Sep 17 00:00:00 2001 From: 0xELFi02 <157559451+0xELFi02@users.noreply.github.com> Date: Thu, 19 Sep 2024 14:16:49 +0800 Subject: [PATCH 0428/1768] Add ELFi Protocol (#11676) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/elfi/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/elfi/index.js diff --git a/projects/elfi/index.js b/projects/elfi/index.js new file mode 100644 index 0000000000..f599360653 --- /dev/null +++ b/projects/elfi/index.js @@ -0,0 +1,30 @@ + +const ADDRESSES = require('../helper/coreAssets.json') +const { getLogs2 } = require('../helper/cache/getLogs') + +const tradeVault = '0x8772bB60EA1BBA8a7729a90ff1907855FD55ba83' +const lpVault = '0xbC268D619b406bdfCA1B4AC30d50Ba30AB38E96f' +const portfolioVault = '0x9099824Be9aB2b691ce0E478853Cb15Fb81FF677' + +const elfUSD = '0x70B8117b3177a7CE42BEe021E89625f27E45b98C' + +module.exports = { + arbitrum: { + tvl, + }, +}; + +async function tvl(api) { + const logs = await getLogs2({ + api, + factory: '0x153c613D572c050104086c7113d00B76Fbaa5d55', + eventAbi: 'event MarketCreated (bytes32 code, string stakeTokenName, address indexToken, address baseToken, address stakeToken)', + fromBlock: 233088372, + }) + + const ownerTokens = logs.map(log => [[log.baseToken, log.indexToken], log.stakeToken]) + ownerTokens.push([[ADDRESSES.arbitrum.USDC_CIRCLE], elfUSD]) + const tokens = ownerTokens.map(([tokens]) => tokens).flat() + await api.sumTokens({ tokens, owners: [lpVault, portfolioVault, tradeVault] }) + return api.sumTokens({ ownerTokens}) +} \ No newline at end of file From 5dc4e23fa36fb8eb1df2e3af65bd4589e88c72ce Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:07:52 +0200 Subject: [PATCH 0429/1768] fix justlend --- projects/justlend.js | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/projects/justlend.js b/projects/justlend.js index ca90788a59..667c3e6ea8 100644 --- a/projects/justlend.js +++ b/projects/justlend.js @@ -1,6 +1,45 @@ -const { compoundExports2 } = require('./helper/compound') +const { unhexifyTarget, } = require('@defillama/sdk/build/abi/tron'); const ADDRESSES = require('./helper/coreAssets.json') +const { sumTokens } = require('./helper/sumTokens') + +const comptroller = 'TGjYzgCyPobsNS9n6WcbdLVR9dH7mWqFx7' module.exports = { - tron: compoundExports2({ comptroller: 'TGjYzgCyPobsNS9n6WcbdLVR9dH7mWqFx7', cether: '0x2c7c9963111905d29eb8da37d28b0f53a7bb5c28', cetheEquivalent: ADDRESSES.null, transformAdressRaw: i => 'tron:' + i }), + tron: { + tvl, borrowed, + }, }; + +async function tvl(api) { + const markets = (await api.call({ abi: 'address[]:getAllMarkets', target: comptroller })).map(unhexifyTarget) + const cMarkets = ['TE2RzoSV3wFK99w6J9UnnZ4vLfXYoxvRwP'] + const tokensAndOwners = [] + const otherMarkets = [] + for (let i = 0; i < markets.length; i++) { + if (cMarkets.includes(markets[i])) { + tokensAndOwners.push([ADDRESSES.null, markets[i]]) + } else + otherMarkets.push(markets[i]) + } + + const underlyings = await api.multiCall({ abi: 'address:underlying', calls: otherMarkets }) + underlyings.forEach((t, i) => tokensAndOwners.push([t, otherMarkets[i]])) + return sumTokens({ chain: 'tron', tokensAndOwners }) +} + +async function borrowed(api) { + const markets = (await api.call({ abi: 'address[]:getAllMarkets', target: comptroller })).map(unhexifyTarget) + const cMarkets = ['TE2RzoSV3wFK99w6J9UnnZ4vLfXYoxvRwP'] + const otherMarkets = [] + for (let i = 0; i < markets.length; i++) { + if (cMarkets.includes(markets[i])) { + } else + otherMarkets.push(markets[i]) + } + + const underlyings = await api.multiCall({ abi: 'address:underlying', calls: otherMarkets }) + const uBorrowed = await api.multiCall({ abi: 'uint256:totalBorrows', calls: otherMarkets }) + const cBorrowed = await api.multiCall({ abi: 'uint256:totalBorrows', calls: cMarkets }) + api.add(underlyings, uBorrowed) + api.add(ADDRESSES.null, cBorrowed) +} From 338d9acedc0edd882ed5bfc206f43ebd974c39c3 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Sep 2024 18:50:40 +0100 Subject: [PATCH 0430/1768] add taiko --- projects/icecreamswap/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/icecreamswap/index.js b/projects/icecreamswap/index.js index 0f5623414d..738a9baeed 100644 --- a/projects/icecreamswap/index.js +++ b/projects/icecreamswap/index.js @@ -4,6 +4,7 @@ const config = { shimmer_evm: '0x24cb308a4e2F3a4352F513681Bd0c31a0bd3BA31', bob: '0x7b2a5C88AB9367147F6ac384F857CbaDF5aA70a7', lightlink_phoenix: '0xC87De04e2EC1F4282dFF2933A2D58199f688fC3d', + taiko: '0xC87De04e2EC1F4282dFF2933A2D58199f688fC3d' } const chains = [...Object.keys(config), 'base', 'telos', 'core', 'dogechain', 'fuse', 'xdc', 'bitgert', 'scroll', 'neon_evm', 'blast' ] From c55e0407cc0c09d46b5eedd160299da512be3d19 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Sep 2024 18:54:33 +0100 Subject: [PATCH 0431/1768] fix tvl spike --- projects/swampfinance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/swampfinance/index.js b/projects/swampfinance/index.js index 674d31402a..9ea696dcac 100644 --- a/projects/swampfinance/index.js +++ b/projects/swampfinance/index.js @@ -6,5 +6,5 @@ module.exports = yieldHelper({ chain: 'bsc', masterchef: '0x33AdBf5f1ec364a4ea3a5CA8f310B597B8aFDee3', nativeToken: '0xc5A49b4CBe004b6FD55B30Ba1dE6AC360FF9765d', - blacklistedTokens: [ADDRESSES.bsc.BTCB] + blacklistedTokens: [ADDRESSES.bsc.BTCB, ADDRESSES.bsc.ETH] }) \ No newline at end of file From 528733f056cd98b6317791e14f135e302c7a85f0 Mon Sep 17 00:00:00 2001 From: Richard Larsson Date: Thu, 19 Sep 2024 21:30:31 +0200 Subject: [PATCH 0432/1768] Added base and optimism to index.js (#11691) Co-authored-by: Define101 <93603962+Define101@users.noreply.github.com> --- projects/betmode/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/betmode/index.js b/projects/betmode/index.js index b0b34df336..299c6d1e51 100644 --- a/projects/betmode/index.js +++ b/projects/betmode/index.js @@ -9,4 +9,16 @@ module.exports = { tokens: [ADDRESSES.mode.USDC], }), }, + base: { + tvl: sumTokensExport({ + owners: ["0x1C6971510c02eAe2e0a7d02A51193fE0b7286De4"], + tokens: [ADDRESSES.base.USDC], + }), + }, + optimism: { + tvl: sumTokensExport({ + owners: ["0x4b9d8f10bB6F50765DbeB9F8FBBF3Dace0Db8f3c"], + tokens: [ADDRESSES.optimism.USDC_CIRCLE], + }), + }, }; From 1d67fc89ceaa7b9674df5dd8dbf849cf1d5af410 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 21:44:22 +0200 Subject: [PATCH 0433/1768] lint fix --- projects/justlend.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/justlend.js b/projects/justlend.js index 667c3e6ea8..33547deab2 100644 --- a/projects/justlend.js +++ b/projects/justlend.js @@ -32,8 +32,7 @@ async function borrowed(api) { const cMarkets = ['TE2RzoSV3wFK99w6J9UnnZ4vLfXYoxvRwP'] const otherMarkets = [] for (let i = 0; i < markets.length; i++) { - if (cMarkets.includes(markets[i])) { - } else + if (!cMarkets.includes(markets[i])) otherMarkets.push(markets[i]) } From 054c54da77cc016f69bd6a8f982e26f274c539ab Mon Sep 17 00:00:00 2001 From: stephen <991266+stxphxn@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:02:23 +0100 Subject: [PATCH 0434/1768] Add Taiko to Symmetric (#11692) --- projects/symmetric/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/symmetric/index.js b/projects/symmetric/index.js index 126b17d6c3..559ae7bccb 100644 --- a/projects/symmetric/index.js +++ b/projects/symmetric/index.js @@ -19,5 +19,8 @@ module.exports = { }, meter: { tvl: onChainTvl('0x913f21E596790aFC6AA45229E9ff8b7d0A473D5A', 51825430), - } + }, + taiko: { + tvl: onChainTvl('0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD', 371729), + }, } From 02d1fd612779fd22dc55dc2b3ac974f136caa312 Mon Sep 17 00:00:00 2001 From: xwaynec Date: Fri, 20 Sep 2024 17:03:16 +0800 Subject: [PATCH 0435/1768] Zomma add BTC vault in arbitrum (#11690) --- projects/zomma/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/zomma/index.js b/projects/zomma/index.js index f7d254acf1..506c406cb1 100644 --- a/projects/zomma/index.js +++ b/projects/zomma/index.js @@ -8,7 +8,9 @@ const ZOMMA_CONTRACT_BTC_AUDIT = "0x1f14544aea89046e068e98c8672d2fbc3ab45bab"; const ZK_USDC_CONTRACT = ADDRESSES.era.USDC; const ZOMMA_ARB_VAULT = "0x452610BB258c143B5f26687286AE5e59EC69c267"; +const ZOMMA_ARB_VAULT2 = "0xF55DF159c030b2804269742853079c9FD6B8cf64" const ZOMMA_ARB_CONTRACT_ETH = "0xa9DEb981b735EC0525c8D4C959267429FdD82347"; +const ZOMMA_ARB_CONTRACT_BTC = "0x275376e25e068c894d0df5cc9a3d1893d94e9f4a"; const ARB_USDC_CONTRACT = ADDRESSES.arbitrum.USDC_CIRCLE; const ARB_AAVE_USDC_CONTRACT = "0x724dc807b04555b71ed48a6896b6F41593b8C637"; @@ -17,7 +19,7 @@ module.exports = { "TVL is calculated as the sum of USDC deposited by traders and the liquidity in the Pools.", arbitrum: { tvl: sumTokensExport({ - owners: [ZOMMA_ARB_VAULT, ZOMMA_ARB_CONTRACT_ETH], + owners: [ZOMMA_ARB_VAULT, ZOMMA_ARB_VAULT2, ZOMMA_ARB_CONTRACT_ETH, ZOMMA_ARB_CONTRACT_BTC], tokens: [ARB_USDC_CONTRACT, ARB_AAVE_USDC_CONTRACT], }), }, From 763e0c98146523ab4b307f93e411e2ce00b0b70d Mon Sep 17 00:00:00 2001 From: Kacper Bak <290936+kbak@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:03:42 +0200 Subject: [PATCH 0436/1768] added FDUSD to Zircuit staking (#11689) --- projects/zircuit/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index a6239dcc4a..894b5901b1 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -28,7 +28,8 @@ const TOKEN_CONTRACTS = [ '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', // weETHs '0xC96dE26018A54D51c097160568752c4E3BD6C364', // FBTC - '0x8236a87084f8b84306f72007f36f2618a5634494' // LBTC + '0x8236a87084f8b84306f72007f36f2618a5634494', // LBTC + '0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409' // FDUSD ]; module.exports = { From 50b818f2ffb94662fe7fa34b665ef3739b150101 Mon Sep 17 00:00:00 2001 From: shafu Date: Fri, 20 Sep 2024 11:05:41 +0200 Subject: [PATCH 0437/1768] add apxETH vault (#11685) --- projects/dyad/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/dyad/index.js b/projects/dyad/index.js index c6f9545a9f..71d6cfa51b 100644 --- a/projects/dyad/index.js +++ b/projects/dyad/index.js @@ -7,6 +7,7 @@ const vaults = [ "0x3D72f7Fc3A9537e1fcC6FBF91AF55CcF2c5C4ed0", "0x3FC5c0e19b6287f25EB271c2E8e7Ba898FE7ab29", "0x5B74DD13D4136443A7831fB7AD139BA123B5071B", + "0xB58d87dD30a67823acC4b9Fa533F464CdEdA737E", ] async function tvl(api) { From 1f92e07be6ae911e9536feb7e36edafba78340ad Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:39:29 +0200 Subject: [PATCH 0438/1768] Fix: Commodo (outdated) (#11684) --- projects/commodo/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/commodo/index.js b/projects/commodo/index.js index 3506493157..c706a1ed9a 100644 --- a/projects/commodo/index.js +++ b/projects/commodo/index.js @@ -43,6 +43,7 @@ async function getData() { module.exports = { + deadFrom: "2024-09-17", timetravel: false, comdex: { tvl: async () => transformBalances('comdex', (await getData()).tvl), From 2fad97bd2a80cb0d2c55b4dc7fa46d0a4ded69ed Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:40:03 +0200 Subject: [PATCH 0439/1768] Fix: Axelar (outdated not refillable) (#11683) --- projects/alexar/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/alexar/index.js b/projects/alexar/index.js index d3dd0f8e1f..f904f2c268 100644 --- a/projects/alexar/index.js +++ b/projects/alexar/index.js @@ -10,12 +10,17 @@ const chainMapping = { bsc: 'binance' }; -const chainListSupply = ['juno', 'cosmos', 'comdex', 'carbon', /*'crescent',*/ 'injective', 'kujira', 'osmosis', 'persistence', 'stargaze', 'secret', 'stargaze', 'umee', 'evmos', 'terra2']; +const blackListChains = ['comdex', 'crescent']; +const chainListSupply = ['juno', 'cosmos', 'carbon', 'injective', 'kujira', 'osmosis', 'persistence', 'stargaze', 'secret', 'stargaze', 'umee', 'evmos', 'terra2']; const chainListTotal = ['avax', 'bsc', 'moonbeam', 'polygon', 'fantom', 'arbitrum', 'aurora', 'celo', 'kava', 'mantle', 'ethereum', 'base']; chainListSupply.concat(chainListTotal).forEach(chain => { - module.exports[chain] = { tvl }; + if (blackListChains.includes(chain)) { + module.exports[chain] = { tvl: () => ({}) }; + } else { + module.exports[chain] = { tvl }; + } async function tvl(api) { const config = await getConfig('alexar', 'https://api.axelarscan.io/api/getTVL') const tokensAndOwners = [] From a652b4606b56f88da7238ae0a569f6426e29704b Mon Sep 17 00:00:00 2001 From: Arpit Singh Date: Fri, 20 Sep 2024 15:10:22 +0530 Subject: [PATCH 0440/1768] hyp collateral contracts changed for logx network (#11682) --- projects/logx-v2/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index d84c533256..310d4fb275 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -3,8 +3,8 @@ module.exports = { } const config = { - arbitrum: ['0x297CE7A9156b9Dfc5b4468a6fd9ec5FdAd27e23A', '0xf0bDCFB8bfE1c5000481d263D672E1b09D58C3BE',], - mantle: ['0x895389e5744F2093A8ac985d8dB208eb9C1e6BA7', '0x8fb8a7E1ee970E3bf80494be0043B1117d835da8',] + arbitrum: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd', '0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6',], + mantle: ['0x4417613C0fe034f7D333BF8a6247EaAAF1d51965', '0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8',] } Object.keys(config).forEach(chain => { From 203791b88d7ed9664d485ae0bf0b47abcefe4ff2 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:40:57 +0200 Subject: [PATCH 0441/1768] feat: Add Sunset for cSwap (Comdex chain) (#11679) --- projects/cswap/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/cswap/index.js b/projects/cswap/index.js index 7a6a0a544d..23c9b0685c 100644 --- a/projects/cswap/index.js +++ b/projects/cswap/index.js @@ -2,6 +2,8 @@ const { transformDexBalances } = require('../helper/portedTokens') const { get } = require('../helper/http') module.exports = { + deadFrom: '2024-09-17', + hallmarks: [[1726531200,'Sunset of cSwap']], timetravel: false, misrepresentedTokens: true, comdex: { From 9527e3628d9fd740790cbefbee549bd0caac7618 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:42:04 +0200 Subject: [PATCH 0442/1768] Fix: WhiteWhale-dex (outdated) (#11680) --- projects/whitewhale-dex/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/whitewhale-dex/index.js b/projects/whitewhale-dex/index.js index 3089d9a942..5762a195c3 100644 --- a/projects/whitewhale-dex/index.js +++ b/projects/whitewhale-dex/index.js @@ -21,8 +21,11 @@ module.exports = { ] } - Object.keys(factory).forEach(chain => { const contract = factory[chain] - module.exports[chain] = { tvl: getFactoryTvl(contract) } + if (chain === 'comdex') { + module.exports[chain] = { tvl: () => ({}) } + } else { + module.exports[chain] = { tvl: getFactoryTvl(contract) } + } }) \ No newline at end of file From e0908dc145ca493da1ab956a104c14a23283746d Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:42:54 +0200 Subject: [PATCH 0443/1768] Fix: Harbor (outdated) (#11681) --- projects/harbor-protocol.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/harbor-protocol.js b/projects/harbor-protocol.js index 5894faf048..7f365981c0 100644 --- a/projects/harbor-protocol.js +++ b/projects/harbor-protocol.js @@ -10,5 +10,7 @@ async function tvl({ chain }) { } module.exports = { + deadFrom: "2024-09-17", + hallmarks: [[1692403200, "Exploit on Harbor Protocol"]], comdex: { tvl } } \ No newline at end of file From 4a3ef4a4f92049e59f1d9e1146204468d92d18fd Mon Sep 17 00:00:00 2001 From: Aniket Sharma Date: Fri, 20 Sep 2024 15:39:31 +0530 Subject: [PATCH 0444/1768] feat: add polynomial liquidity layer tvl (#11670) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/coreAssets.json | 5 +++++ projects/helper/tokenMapping.js | 5 +++++ projects/polynomial-liquidity-layer/index.js | 9 +++++++++ 3 files changed, 19 insertions(+) create mode 100644 projects/polynomial-liquidity-layer/index.js diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index cb672656ee..1b02003ee1 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1897,5 +1897,10 @@ }, "ripple": { "XRP": "XRP" + }, + "polynomial": { + "USDC": "0x17C9D8Cef7Ef072844EEaEdE1F9f54C7E3fa8743", + "SDAI": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", + "sUSDe": "0x2A06DEAc3E863c23DD6a89Eeacd80aBA9E08B77B" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index bef1381afd..c24c0b5b94 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -133,6 +133,11 @@ const fixBalancesTokens = { }, etn: { '0x138dafbda0ccb3d8e39c19edb0510fc31b7c1c77': { coingeckoId: "electroneum", decimals: 18 } + }, + polynomial: { + [ADDRESSES.polynomial.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, + [ADDRESSES.polynomial.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, + [ADDRESSES.polynomial.sUSDe]: { coingeckoId: "ethena-staked-usde", decimals: 18 }, } } diff --git a/projects/polynomial-liquidity-layer/index.js b/projects/polynomial-liquidity-layer/index.js new file mode 100644 index 0000000000..dda769ab1f --- /dev/null +++ b/projects/polynomial-liquidity-layer/index.js @@ -0,0 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') + + +module.exports = { + polynomial: { + tvl: sumTokensExport({ owner: '0xc133983D6d9140923b5eaE52664221d9099cf119', tokens: [ADDRESSES.polynomial.USDC,ADDRESSES.polynomial.SDAI, ADDRESSES.polynomial.sUSDe]}) + } +} \ No newline at end of file From 5435936e6ccfa17f3899c8631ad8d47e8c27627e Mon Sep 17 00:00:00 2001 From: NikolasHai <113891786+NikolasHai@users.noreply.github.com> Date: Fri, 20 Sep 2024 14:48:41 +0200 Subject: [PATCH 0445/1768] add ck aggregator (#11619) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/chain-fusion/index.js | 27 +++++++++++++++++++++++++++ projects/ckbtc/index.js | 16 ---------------- projects/cketh/index.js | 21 --------------------- 3 files changed, 27 insertions(+), 37 deletions(-) create mode 100644 projects/chain-fusion/index.js delete mode 100644 projects/ckbtc/index.js delete mode 100644 projects/cketh/index.js diff --git a/projects/chain-fusion/index.js b/projects/chain-fusion/index.js new file mode 100644 index 0000000000..80c79de0d0 --- /dev/null +++ b/projects/chain-fusion/index.js @@ -0,0 +1,27 @@ +const { sumTokens2, } = require("../helper/unwrapLPs"); +const { get } = require('../helper/http') + +// This address holds all the locked ETH as well as locked ERC20 tokens +const ethereum_contract = "0xb25eA1D493B49a1DeD42aC5B1208cC618f9A9B80"; + +async function ethereum_tvl(api) { + return sumTokens2({ owner: ethereum_contract, api, fetchCoValentTokens: true }); +} + +async function bitcoin_tvl(ts) { + var end = ts.timestamp + let start = end - 24 * 60 * 60; + const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/mxzaz-hqaaa-aaaar-qaada-cai/total-supply?start=${start}&end=${end}&step=1`); + let [_, bal] = data.pop() + return { + 'coingecko:bitcoin': bal / 1e8 + }; +} + +module.exports = { + methodology: `We count the ETH and ERC20-Tokens on ${ethereum_contract} as the collateral for ckETH and ck-ERC20 tokens and we count BTC as the collateral for ckBTC`, + ethereum: { + tvl: ethereum_tvl, + }, + bitcoin: { tvl: bitcoin_tvl }, +}; diff --git a/projects/ckbtc/index.js b/projects/ckbtc/index.js deleted file mode 100644 index 94bca32767..0000000000 --- a/projects/ckbtc/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const { get } = require('../helper/http') - -async function tvl(ts) { - var end = ts.timestamp - let start = end - 24 * 60 * 60; - const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/mxzaz-hqaaa-aaaar-qaada-cai/total-supply?start=${start}&end=${end}&step=1`); - let [_, bal] = data.pop() - return { - 'coingecko:bitcoin': bal / 1e8 - }; -} - -module.exports = { - methodology: `We count the BTC as the collateral for the ckBTC`, - bitcoin: { tvl: tvl }, -} diff --git a/projects/cketh/index.js b/projects/cketh/index.js deleted file mode 100644 index 0a12acb973..0000000000 --- a/projects/cketh/index.js +++ /dev/null @@ -1,21 +0,0 @@ -const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); -// const { get } = require('../helper/http') -const ADDRESSES = require('../helper/coreAssets.json') - -const contract = "0xb25eA1D493B49a1DeD42aC5B1208cC618f9A9B80"; - -async function tvl(api) { - // var end = api.timestamp - // let start = end - 24 * 60 * 60; - // const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/xevnm-gaaaa-aaaar-qafnq-cai/total-supply?start=${start}&end=${end}&step=1`); - // let [_, bal] = data.pop() - // api.add(ADDRESSES.ethereum.USDC, bal/1e2) - return sumTokens2({ tokens: [nullAddress, ADDRESSES.ethereum.USDC], owner: contract, api }); -} - -module.exports = { - methodology: `We count the ETH on ${contract} as the collateral for the ckETH`, - ethereum: { - tvl, - }, -}; \ No newline at end of file From 9bef2f35c91e50812b29c1b2bd8c82eba439d4b6 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:48:57 +0100 Subject: [PATCH 0446/1768] Revert "add ck aggregator (#11619)" This reverts commit 5435936e6ccfa17f3899c8631ad8d47e8c27627e. --- projects/chain-fusion/index.js | 27 --------------------------- projects/ckbtc/index.js | 16 ++++++++++++++++ projects/cketh/index.js | 21 +++++++++++++++++++++ 3 files changed, 37 insertions(+), 27 deletions(-) delete mode 100644 projects/chain-fusion/index.js create mode 100644 projects/ckbtc/index.js create mode 100644 projects/cketh/index.js diff --git a/projects/chain-fusion/index.js b/projects/chain-fusion/index.js deleted file mode 100644 index 80c79de0d0..0000000000 --- a/projects/chain-fusion/index.js +++ /dev/null @@ -1,27 +0,0 @@ -const { sumTokens2, } = require("../helper/unwrapLPs"); -const { get } = require('../helper/http') - -// This address holds all the locked ETH as well as locked ERC20 tokens -const ethereum_contract = "0xb25eA1D493B49a1DeD42aC5B1208cC618f9A9B80"; - -async function ethereum_tvl(api) { - return sumTokens2({ owner: ethereum_contract, api, fetchCoValentTokens: true }); -} - -async function bitcoin_tvl(ts) { - var end = ts.timestamp - let start = end - 24 * 60 * 60; - const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/mxzaz-hqaaa-aaaar-qaada-cai/total-supply?start=${start}&end=${end}&step=1`); - let [_, bal] = data.pop() - return { - 'coingecko:bitcoin': bal / 1e8 - }; -} - -module.exports = { - methodology: `We count the ETH and ERC20-Tokens on ${ethereum_contract} as the collateral for ckETH and ck-ERC20 tokens and we count BTC as the collateral for ckBTC`, - ethereum: { - tvl: ethereum_tvl, - }, - bitcoin: { tvl: bitcoin_tvl }, -}; diff --git a/projects/ckbtc/index.js b/projects/ckbtc/index.js new file mode 100644 index 0000000000..94bca32767 --- /dev/null +++ b/projects/ckbtc/index.js @@ -0,0 +1,16 @@ +const { get } = require('../helper/http') + +async function tvl(ts) { + var end = ts.timestamp + let start = end - 24 * 60 * 60; + const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/mxzaz-hqaaa-aaaar-qaada-cai/total-supply?start=${start}&end=${end}&step=1`); + let [_, bal] = data.pop() + return { + 'coingecko:bitcoin': bal / 1e8 + }; +} + +module.exports = { + methodology: `We count the BTC as the collateral for the ckBTC`, + bitcoin: { tvl: tvl }, +} diff --git a/projects/cketh/index.js b/projects/cketh/index.js new file mode 100644 index 0000000000..0a12acb973 --- /dev/null +++ b/projects/cketh/index.js @@ -0,0 +1,21 @@ +const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); +// const { get } = require('../helper/http') +const ADDRESSES = require('../helper/coreAssets.json') + +const contract = "0xb25eA1D493B49a1DeD42aC5B1208cC618f9A9B80"; + +async function tvl(api) { + // var end = api.timestamp + // let start = end - 24 * 60 * 60; + // const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/xevnm-gaaaa-aaaar-qafnq-cai/total-supply?start=${start}&end=${end}&step=1`); + // let [_, bal] = data.pop() + // api.add(ADDRESSES.ethereum.USDC, bal/1e2) + return sumTokens2({ tokens: [nullAddress, ADDRESSES.ethereum.USDC], owner: contract, api }); +} + +module.exports = { + methodology: `We count the ETH on ${contract} as the collateral for the ckETH`, + ethereum: { + tvl, + }, +}; \ No newline at end of file From 48d7f9990b4f45795a4be42efa3f1f84ef721287 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:59:27 +0100 Subject: [PATCH 0447/1768] Revert "Revert "add ck aggregator"" --- projects/chain-fusion/index.js | 27 +++++++++++++++++++++++++++ projects/ckbtc/index.js | 16 ---------------- projects/cketh/index.js | 21 --------------------- 3 files changed, 27 insertions(+), 37 deletions(-) create mode 100644 projects/chain-fusion/index.js delete mode 100644 projects/ckbtc/index.js delete mode 100644 projects/cketh/index.js diff --git a/projects/chain-fusion/index.js b/projects/chain-fusion/index.js new file mode 100644 index 0000000000..80c79de0d0 --- /dev/null +++ b/projects/chain-fusion/index.js @@ -0,0 +1,27 @@ +const { sumTokens2, } = require("../helper/unwrapLPs"); +const { get } = require('../helper/http') + +// This address holds all the locked ETH as well as locked ERC20 tokens +const ethereum_contract = "0xb25eA1D493B49a1DeD42aC5B1208cC618f9A9B80"; + +async function ethereum_tvl(api) { + return sumTokens2({ owner: ethereum_contract, api, fetchCoValentTokens: true }); +} + +async function bitcoin_tvl(ts) { + var end = ts.timestamp + let start = end - 24 * 60 * 60; + const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/mxzaz-hqaaa-aaaar-qaada-cai/total-supply?start=${start}&end=${end}&step=1`); + let [_, bal] = data.pop() + return { + 'coingecko:bitcoin': bal / 1e8 + }; +} + +module.exports = { + methodology: `We count the ETH and ERC20-Tokens on ${ethereum_contract} as the collateral for ckETH and ck-ERC20 tokens and we count BTC as the collateral for ckBTC`, + ethereum: { + tvl: ethereum_tvl, + }, + bitcoin: { tvl: bitcoin_tvl }, +}; diff --git a/projects/ckbtc/index.js b/projects/ckbtc/index.js deleted file mode 100644 index 94bca32767..0000000000 --- a/projects/ckbtc/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const { get } = require('../helper/http') - -async function tvl(ts) { - var end = ts.timestamp - let start = end - 24 * 60 * 60; - const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/mxzaz-hqaaa-aaaar-qaada-cai/total-supply?start=${start}&end=${end}&step=1`); - let [_, bal] = data.pop() - return { - 'coingecko:bitcoin': bal / 1e8 - }; -} - -module.exports = { - methodology: `We count the BTC as the collateral for the ckBTC`, - bitcoin: { tvl: tvl }, -} diff --git a/projects/cketh/index.js b/projects/cketh/index.js deleted file mode 100644 index 0a12acb973..0000000000 --- a/projects/cketh/index.js +++ /dev/null @@ -1,21 +0,0 @@ -const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); -// const { get } = require('../helper/http') -const ADDRESSES = require('../helper/coreAssets.json') - -const contract = "0xb25eA1D493B49a1DeD42aC5B1208cC618f9A9B80"; - -async function tvl(api) { - // var end = api.timestamp - // let start = end - 24 * 60 * 60; - // const { data } = await get(`https://icrc-api.internetcomputer.org/api/v1/ledgers/xevnm-gaaaa-aaaar-qafnq-cai/total-supply?start=${start}&end=${end}&step=1`); - // let [_, bal] = data.pop() - // api.add(ADDRESSES.ethereum.USDC, bal/1e2) - return sumTokens2({ tokens: [nullAddress, ADDRESSES.ethereum.USDC], owner: contract, api }); -} - -module.exports = { - methodology: `We count the ETH on ${contract} as the collateral for the ckETH`, - ethereum: { - tvl, - }, -}; \ No newline at end of file From 2a51e59f81295c70725afd794ec62edd017fe798 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 20 Sep 2024 14:47:56 +0100 Subject: [PATCH 0448/1768] add mode --- projects/logx-v2/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index 310d4fb275..b02601e371 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -4,7 +4,8 @@ module.exports = { const config = { arbitrum: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd', '0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6',], - mantle: ['0x4417613C0fe034f7D333BF8a6247EaAAF1d51965', '0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8',] + mantle: ['0x4417613C0fe034f7D333BF8a6247EaAAF1d51965', '0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8',], + mode: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd','0x8BF17893f08C570fBA78E9268d3aFc61f42557f1'] } Object.keys(config).forEach(chain => { From f4fa4ff547104c89f67f0e790c3f640c89765eab Mon Sep 17 00:00:00 2001 From: 0xLight <109751758+0xLightt@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:37:35 +0100 Subject: [PATCH 0449/1768] Add Ulysses adapter for Maia DAO Ecosystem (#11688) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/ulysses/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 projects/ulysses/index.js diff --git a/projects/ulysses/index.js b/projects/ulysses/index.js new file mode 100644 index 0000000000..3c3422ad77 --- /dev/null +++ b/projects/ulysses/index.js @@ -0,0 +1,27 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") +const ADDRESSES = require('../helper/coreAssets.json') + +const defaultPort = '0x6C6d3FB0289039b0FCa2E7244A06Cf9403464646' +const ports = { + arbitrum: '0x0c453ef35986E1d8dA22043fF00BF03cEB42e1f7', + ethereum: undefined, + optimism: undefined, + base: undefined, + polygon: undefined, + avax: undefined, + bsc: undefined, + // metis: undefined, +} + +Object.keys(ports).forEach(chain => module.exports[chain] = { tvl: sumTokensExport({ owner: ports[chain] ?? defaultPort, fetchCoValentTokens: true, }) }) + +const chainsWithCovalentSupport = { + metis: { tokens: Object.values(ADDRESSES.metis).concat([ + ADDRESSES.null, + ])} +} + +Object.keys(chainsWithCovalentSupport).forEach(chain => { + const { tokens, port =defaultPort } = chainsWithCovalentSupport[chain] + module.exports[chain] = { tvl: sumTokensExport({ owner: port, tokens }) +} }) \ No newline at end of file From fd7a7b744dacdcfaf8af66d111970090040fa55a Mon Sep 17 00:00:00 2001 From: Dmitry Gritsenko <43145587+evtn@users.noreply.github.com> Date: Fri, 20 Sep 2024 18:44:42 +0400 Subject: [PATCH 0450/1768] Add Tonstakers Token Staking (#11687) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/ton.js | 18 +++++ projects/tonstakers-token-staking/index.js | 79 ++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 projects/tonstakers-token-staking/index.js diff --git a/projects/helper/chain/ton.js b/projects/helper/chain/ton.js index 2efa80e6a5..d0345dcc65 100644 --- a/projects/helper/chain/ton.js +++ b/projects/helper/chain/ton.js @@ -28,6 +28,23 @@ async function _sumTokensAccount({ api, addr, tokens = [], onlyWhitelistedTokens }) } +async function getTokenRates({ tokens = [] }) { + const { rates } = await get(`https://tonapi.io/v2/rates?` + ( + new URLSearchParams({ tokens: tokens.join(','), currencies: "usd" }) + ).toString()); + + const tokenPrices = {}; + + tokens.forEach(tokenAddress => { + if (rates[tokenAddress]) { + const usdPrice = rates[tokenAddress].prices.USD; + tokenPrices[tokenAddress] = usdPrice; + } + }); + + return tokenPrices +} + const sumTokensAccount = rateLimited(_sumTokensAccount) async function sumTokens({ api, tokens, owners = [], owner, onlyWhitelistedTokens = false }) { @@ -70,6 +87,7 @@ async function call({ target, abi, params = [] }) { module.exports = { getTonBalance, + getTokenRates, sumTokens, sumTokensExport, call, diff --git a/projects/tonstakers-token-staking/index.js b/projects/tonstakers-token-staking/index.js new file mode 100644 index 0000000000..69ffac6702 --- /dev/null +++ b/projects/tonstakers-token-staking/index.js @@ -0,0 +1,79 @@ +const { call, getTokenRates } = require("../helper/chain/ton"); +const { sleep } = require("../helper/utils"); + +const farms = [ + { + contract: "EQBh2Asg4Opnlgmkw25gpZ7IcmyNPJceLh_51o0lOGwGjvuc", + name: "GEMSTON", + token: "0:57e8af5a5d59779d720d0b23cf2fce82e0e355990f2f2b7eb4bba772905297a4", + launch: 1721817124, + decimals: 9, + }, + { + contract: "EQDjQOGq_bx9pdjQJhQRK9Lux-YOUwDu1UNM8SevvbG25dEq", + name: "$PUNK", + token: "0:9da73e90849b43b66dacf7e92b576ca0978e4fc25f8a249095d7e5eb3fe5eebb", + launch: 1722433134, + decimals: 9, + }, + { + contract: "EQA0R317P10bopg5YGnI4B9_cJc0jPbVwnLZu3JuMWdyNgly", + name: "XROCK", + token: "0:157c463688a4a91245218052c5580807792cf6347d9757e32f0ee88a179a6549", + launch: 1722515467, + decimals: 9, + }, + { + contract: "EQA5BgnWFYQuKjDMgmqsYRTA1S3qjrF1MvmjG-BDEA19j0I9", + name: "JetTon", + token: "0:105e5589bc66db15f13c177a12f2cf3b94881da2f4b8e7922c58569176625eb5", + launch: 1722940520, + decimals: 9, + }, + { + contract: "EQDw7u6CwkbIfzhfdxITAy09yqvAk59hyCdxbdQCR67ilyn-", + name: "durev", + token: "0:74d8327471d503e2240345b06fe1a606de1b5e3c70512b5b46791b429dab5eb1", + launch: 1723474591, + decimals: 9, + }, + { + contract: "EQDMMSQsmGocIRUMxXL4MamEGasiANnV6GpKstApK45lVGwc", + name: "$WEB3", + token: "0:6d70be0903e3dd3e252407cbad1dca9d69fb665124ea74bf19d4479778f2ed8b", + launch: 1723732987, + decimals: 3, + }, +]; + +const retrieveFarmTVL = async (farmContract) => { + const result = await call({ + target: farmContract, + abi: "get_farming_minter_data", + }); + return result[3]; +}; + +const getFullTVl = async (api) => { + const tokens = farms.map((farm) => farm.token); + + const prices = await getTokenRates({ tokens }); + + for (const farm of farms) { + const balanceRaw = await retrieveFarmTVL(farm.contract); + await sleep(1000); + + const decimalPow = Math.pow(10, farm.decimals); + const balance = balanceRaw / decimalPow; + api.addUSDValue(balance * (prices[farm.token] || 0)); + } +}; + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + ton: { + tvl: () => ({}), + staking: getFullTVl, + }, +}; From f1ca6377d67a32f618413c6d3a1a4a8e67fb6a37 Mon Sep 17 00:00:00 2001 From: Mike <1611115+ittikorns@users.noreply.github.com> Date: Fri, 20 Sep 2024 21:45:01 +0700 Subject: [PATCH 0451/1768] feat: add flow tvl (#11695) --- projects/ankr/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/ankr/index.js b/projects/ankr/index.js index edef933246..d56fa0b489 100644 --- a/projects/ankr/index.js +++ b/projects/ankr/index.js @@ -29,6 +29,12 @@ async function getAvaxTvl() { } } +async function getFlowTvl() { + return { + 'flow': await getTvls("flowevm", "totalStaked"), + } +} + async function polkadot() { return { polkadot: await getTvls("dot", "totalStaked"), @@ -91,6 +97,9 @@ module.exports = { fantom: { tvl: getFantomTvl, }, + flow: { + tvl: getFlowTvl, + }, polkadot: { tvl: polkadot, }, From 04b5050512f2a865e0b30e7e35ffd185d4252170 Mon Sep 17 00:00:00 2001 From: backgroundjun <93336448+backgroundjun@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:26:28 +0900 Subject: [PATCH 0452/1768] Add Gracy Staking Season 6 (#11704) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/gracy-staking/index.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/projects/gracy-staking/index.js b/projects/gracy-staking/index.js index f0b6c571a8..74ab5df198 100644 --- a/projects/gracy-staking/index.js +++ b/projects/gracy-staking/index.js @@ -6,16 +6,12 @@ const STAKING_CONTRACT_SEASON_2 = "0xa0EE760C52b10d2A21E563526248CA389D9C47E6"; const STAKING_CONTRACT_SEASON_3 = "0xAb6aD663b42c7031b52737cbcBF9f70cb88fD9FC"; const STAKING_CONTRACT_SEASON_4 = "0x4f1043ABb51648E817b8e62EcABc157F91E61c52"; const STAKING_CONTRACT_SEASON_5 = "0x6e05d3a61f5026EEa67d0a82843d5E82eb3E2608"; +const STAKING_CONTRACT_SEASON_6 = "0xE5ff1432DC7BE35CC73216A8cc468608398AD433"; module.exports = { - ethereum: { - tvl: () => ({}), - staking: stakings([ - STAKING_CONTRACT_SEASON_1, - STAKING_CONTRACT_SEASON_2, - STAKING_CONTRACT_SEASON_3, - STAKING_CONTRACT_SEASON_4, - STAKING_CONTRACT_SEASON_5, - ], GRACY_TOKEN), - }, + ethereum: { + tvl: () => ({}), + staking: stakings([STAKING_CONTRACT_SEASON_1, STAKING_CONTRACT_SEASON_2, STAKING_CONTRACT_SEASON_3, STAKING_CONTRACT_SEASON_4, STAKING_CONTRACT_SEASON_5, STAKING_CONTRACT_SEASON_6, + ], GRACY_TOKEN), + }, }; From 257fe06919a5b49f854fc3b7cf038221238a3252 Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 23 Sep 2024 16:28:24 +0800 Subject: [PATCH 0453/1768] feat: adjust pumpbtc adapter new (#11703) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/pumpbtc/index.js | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index f49afeaa69..db34d661b8 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -1,4 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens } = require('../helper/sumTokens'); +const utils = require('../helper/utils'); +const { getConfig } = require('../helper/cache') module.exports = { methodology: 'TVL for pumpBTC is calculated based on the total value of WBTC, FBTC, BTCB held in the contract that were utilized in the minting process of pumpBTC.', @@ -7,11 +10,33 @@ const config = { ethereum: { owners: ['0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', '0x3d9bCcA8Bc7D438a4c5171435f41a0AF5d5E6083'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364', ADDRESSES.ethereum.WBTC], }, bsc: { owners: ['0x2Ee808F769AB697C477E0aF8357315069b66bCBb'], tokens: [ADDRESSES.bsc.BTCB], }, mantle: { owners: ['0xd6Ab15B2458B6EC3E94cE210174d860FdBdd6b96'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, + bitcoin: {}, } Object.keys(config).forEach(chain => { const { owners, tokens, } = config[chain] - module.exports[chain] = { - tvl: async (api) => api.sumTokens({ owners, tokens }) + + if (chain === 'bitcoin') { + module.exports[chain] = { + tvl: + async (api) => { + const addresses = await getConfig('pumpbtc', undefined, { fetcher: getStakingAddresses }) + return sumTokens({ api, owners: addresses }) + } + } + } else { + module.exports[chain] = { + tvl: async (api) => api.sumTokens({ owners, tokens }) + } } }) + +async function getStakingAddresses() { + let res = await utils.fetchURL('https://dashboard.pumpbtc.xyz/api/dashboard/btc/addresses') + + const btcAddresses = res.data.data || [] + //console.log('>>', btcAddresses.length) + return btcAddresses +} + +module.exports.isHeavyProtocol = true From efde13edcaf790ba15fa3917355a18e0b729bae2 Mon Sep 17 00:00:00 2001 From: Deadshot Ryker <151393124+deadshotryker@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:32:29 +0400 Subject: [PATCH 0454/1768] Added zircuit and the stablecoin market for ZeroLend (#11702) --- projects/zerolend/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/zerolend/index.js b/projects/zerolend/index.js index 52ce59c015..06ff9f78c1 100644 --- a/projects/zerolend/index.js +++ b/projects/zerolend/index.js @@ -13,9 +13,11 @@ const config = { '0xEe9ec60657B714E3FAC5255a5443AC5EC7Ba5bB0', // foxy linea market ], xlayer: ["0x97e59722318F1324008484ACA9C343863792cBf6"], + zircuit: ["0xA754b2f1535287957933db6e2AEE2b2FE6f38588"], ethereum: [ "0x47223D4eA966a93b2cC96FFB4D42c22651FADFcf", // ethereum lrt market - '0x31063F7CA8ef4089Db0dEdf8D6e35690B468A611' // bitcoin lrt market + '0x31063F7CA8ef4089Db0dEdf8D6e35690B468A611', // bitcoin lrt market + '0x298ECDcb0369Aef75cBbdA3e46a224Cfe622E287' // stablecoin rwa market ], }; From c8550e8ce89aca209b67d64abcfb18c5ecdebd52 Mon Sep 17 00:00:00 2001 From: Rhombus Protocol Date: Mon, 23 Sep 2024 17:36:47 +0900 Subject: [PATCH 0455/1768] add rhombusprotocol kaia market (#11701) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/rhombus/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/rhombus/index.js diff --git a/projects/rhombus/index.js b/projects/rhombus/index.js new file mode 100644 index 0000000000..b8539b33fc --- /dev/null +++ b/projects/rhombus/index.js @@ -0,0 +1,5 @@ +const { aaveExports } = require("../helper/aave"); + +module.exports = { + klaytn: aaveExports(undefined, undefined, undefined, ['0x3eFC37753ec2501b406F3443cFD8D406B52abEa6'], { v3: true }) +} From 1b365e65f5bf8751ef836724201138e656422634 Mon Sep 17 00:00:00 2001 From: whichghost <140190180+whichghost@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:41:27 +0800 Subject: [PATCH 0456/1768] List polter base (#11699) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/polter/index.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/projects/polter/index.js b/projects/polter/index.js index ccd8038611..d7fb056c67 100644 --- a/projects/polter/index.js +++ b/projects/polter/index.js @@ -1,12 +1,25 @@ const { aaveV2Export } = require('../helper/aave') const { sumTokensExport } = require("../helper/unknownTokens") -const POLTER_CONTRACT = '0x5c725631FD299703D0A74C23F89a55c6B9A0C52F' -const MULTIFEE_CONTRACT = '0xb0F8fe472422Ae582a535b5418C82Ff0F9fa9267' -const POLTER_LP_CONTRACT = '0x44C85D45EB17C8A6b241807BE5c9c48201F91837' +const fantom = { + POLTER_CONTRACT: '0x5c725631FD299703D0A74C23F89a55c6B9A0C52F', + MULTIFEE_CONTRACT: '0xb0F8fe472422Ae582a535b5418C82Ff0F9fa9267', + POLTER_LP_CONTRACT: '0x44C85D45EB17C8A6b241807BE5c9c48201F91837', + POLTER_LENDINGPOOL_CONTRACT: '0x867fAa51b3A437B4E2e699945590Ef4f2be2a6d5' +} + +const base = { + POLTER_CONTRACT: '0xA0820613976B441E2c6A90E4877E2fb5f7D72552', + MULTIFEE_CONTRACT: '0x0B7B45A920Ae54f066b6c013fEdF27C37840dE38', + POLTER_LP_CONTRACT: '', // no LP atm + POLTER_LENDINGPOOL_CONTRACT: '0x33CA62504cebAB919f0FCa94562413ee121A9798' +} + module.exports = { - fantom: aaveV2Export('0x867fAa51b3A437B4E2e699945590Ef4f2be2a6d5'), + fantom: aaveV2Export(fantom.POLTER_LENDINGPOOL_CONTRACT), + base: aaveV2Export(base.POLTER_LENDINGPOOL_CONTRACT), } -module.exports.fantom.staking = sumTokensExport({ owner: MULTIFEE_CONTRACT, tokens: [POLTER_CONTRACT], lps: [POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) \ No newline at end of file +module.exports.fantom.staking = sumTokensExport({ owner: fantom.MULTIFEE_CONTRACT, tokens: [fantom.POLTER_CONTRACT], lps: [fantom.POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) +module.exports.base.staking = sumTokensExport({ owner: base.MULTIFEE_CONTRACT, tokens: [base.POLTER_CONTRACT], lps: [base.POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) From 675ce429fefa706b3d09154f8f13fb0bad2ce87d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:42:47 +0200 Subject: [PATCH 0457/1768] minor fix --- projects/polter/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/polter/index.js b/projects/polter/index.js index d7fb056c67..a673448def 100644 --- a/projects/polter/index.js +++ b/projects/polter/index.js @@ -22,4 +22,4 @@ module.exports = { } module.exports.fantom.staking = sumTokensExport({ owner: fantom.MULTIFEE_CONTRACT, tokens: [fantom.POLTER_CONTRACT], lps: [fantom.POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) -module.exports.base.staking = sumTokensExport({ owner: base.MULTIFEE_CONTRACT, tokens: [base.POLTER_CONTRACT], lps: [base.POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) +module.exports.base.staking = sumTokensExport({ owner: base.MULTIFEE_CONTRACT, tokens: [base.POLTER_CONTRACT],}) From 45fa1339eb244de0a9b4caf768c62af9cd677038 Mon Sep 17 00:00:00 2001 From: Adolf998 <154962952+Adolf998@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:04:40 +0800 Subject: [PATCH 0458/1768] add project bouncebit-club (#11700) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bb-club-cdp/index.js | 7 +++++++ projects/bb-club-meme/index.js | 13 +++++++++++++ projects/bb-club-quanto/index.js | 7 +++++++ projects/bb-club-restaking/index.js | 13 +++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 projects/bb-club-cdp/index.js create mode 100644 projects/bb-club-meme/index.js create mode 100644 projects/bb-club-quanto/index.js create mode 100644 projects/bb-club-restaking/index.js diff --git a/projects/bb-club-cdp/index.js b/projects/bb-club-cdp/index.js new file mode 100644 index 0000000000..f9c3ddabb7 --- /dev/null +++ b/projects/bb-club-cdp/index.js @@ -0,0 +1,7 @@ +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + bouncebit: { + tvl: sumTokensExport({ owner: '0xdE1F1Ff02D565E554E63AEfe80cB6818eAaCD6A8', token: '0xF5e11df1ebCf78b6b6D26E04FF19cD786a1e81dC'}), + } +} \ No newline at end of file diff --git a/projects/bb-club-meme/index.js b/projects/bb-club-meme/index.js new file mode 100644 index 0000000000..961da573e7 --- /dev/null +++ b/projects/bb-club-meme/index.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +async function tvl(api) { + const factory = '0x0dB9ea3c097fC9fD709da54aA1eFcd6FFb3DdE2C'; + const memeCoins = await api.fetchList({ lengthAbi: 'allPairsLength', itemAbi: 'allPairs', target: factory }) + return api.sumTokens({owners: memeCoins, tokens: [ADDRESSES.null] }) +} + +module.exports = { + bouncebit: { + tvl + } +} \ No newline at end of file diff --git a/projects/bb-club-quanto/index.js b/projects/bb-club-quanto/index.js new file mode 100644 index 0000000000..e5f76ca482 --- /dev/null +++ b/projects/bb-club-quanto/index.js @@ -0,0 +1,7 @@ +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + bouncebit: { + tvl: sumTokensExport({ owner: '0xA19237FFc49D1b71f00DA1a82cfF79CE7789f74A', token: '0xF4c20e5004C6FDCDdA920bDD491ba8C98a9c5863'}) + } +} \ No newline at end of file diff --git a/projects/bb-club-restaking/index.js b/projects/bb-club-restaking/index.js new file mode 100644 index 0000000000..3460141dff --- /dev/null +++ b/projects/bb-club-restaking/index.js @@ -0,0 +1,13 @@ +const BBTC = '0xF5e11df1ebCf78b6b6D26E04FF19cD786a1e81dC' + +async function BTCFIStaking(api) { + const totalStake = await api.call({abi: 'uint256:totalStaked', target: '0x0d5d4599eb4f48df6aeaf2f3c814f5a5302931e5'}) + api.add(BBTC, totalStake) +} + + +module.exports = { + bouncebit: { + tvl: BTCFIStaking + } +} \ No newline at end of file From 7e4ef266fc1ee0ed1614d8515863e78d9d97442c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:20:00 +0200 Subject: [PATCH 0459/1768] migrate token mappings --- projects/CreampanFinance/index.js | 2 +- projects/agile/index.js | 3 +- projects/annex.js | 2 +- projects/argofinance/index.js | 3 +- projects/crosscurve/index.js | 39 +++++++++---------- projects/darkcrypto/index.js | 9 +++-- projects/darkness/index.js | 2 +- projects/ferro/index.js | 2 +- projects/fx-Protocol/index.js | 3 +- projects/gamblefi/index.js | 3 +- projects/helper/coreAssets.json | 59 +++++++++++++++++++++++------ projects/helper/tokenMapping.js | 50 ++++++++++++------------ projects/hinkal/registryTokens.js | 2 +- projects/lolik/index.js | 3 +- projects/milkomeda-djed/index.js | 3 +- projects/mimas-finance/index.js | 3 +- projects/minotaur-money/index.js | 2 +- projects/nayms/index.js | 2 +- projects/nest/index.js | 3 +- projects/orcadao/index.js | 2 +- projects/pegasusdao.js | 2 +- projects/polynomial-bridge/index.js | 4 +- projects/relayChain/index.js | 2 +- projects/routerprotocol/index.js | 2 +- projects/svn/index.js | 2 +- projects/thetanuts/index.js | 2 +- projects/treasury/bankofcronos.js | 2 +- projects/treasury/croblanc.js | 3 +- projects/vett/index.js | 3 +- projects/zircuit/index.js | 2 +- 30 files changed, 135 insertions(+), 86 deletions(-) diff --git a/projects/CreampanFinance/index.js b/projects/CreampanFinance/index.js index 96fbc4c79a..b0bc1d4876 100644 --- a/projects/CreampanFinance/index.js +++ b/projects/CreampanFinance/index.js @@ -13,7 +13,7 @@ async function tvl(api) { const data = await Promise.all(accounts.map(account => queryV1Beta1({ chain: 'cronos', url: `/staking/v1beta1/delegations/${account}`, }))); const factroy_contract_address = '0x66f5997b7810723aceeeb8a880846fc117081bd0'; data.map(i => i.delegation_responses).flat().forEach(i => api.add(ADDRESSES.cronos.WCRO, i.balance.amount * 1e10)) - return api.sumTokens({ owner: factroy_contract_address, tokens: ['0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23']}) + return api.sumTokens({ owner: factroy_contract_address, tokens: [ADDRESSES.cronos.WCRO_1]}) } module.exports = { diff --git a/projects/agile/index.js b/projects/agile/index.js index 9d491a9223..f639ee2639 100644 --- a/projects/agile/index.js +++ b/projects/agile/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports, } = require('../helper/compound') const sdk = require('@defillama/sdk') const { getUniTVL } = require("../helper/unknownTokens"); const unitroller = '0x643dc7C5105d1a3147Bd9524DFC3c5831a373F1e' -const lendingMarket = compoundExports(unitroller, "0x2e909694B362c2FcA3C8168613bd47842245504B", "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", { +const lendingMarket = compoundExports(unitroller, "0x2e909694B362c2FcA3C8168613bd47842245504B", ADDRESSES.cronos.WCRO_1, { blacklistedTokens: [ '0xa4434afeae0decb9820d906bf01b13291d00651a', ] diff --git a/projects/annex.js b/projects/annex.js index 3732be7160..bf06194e1b 100644 --- a/projects/annex.js +++ b/projects/annex.js @@ -4,7 +4,7 @@ const { compoundExports } = require('./helper/compound') const wBNB = ADDRESSES.bsc.WBNB; const cBNB = "0xC5a83aD9f3586e143D2C718E8999206887eF9dDc"; -const wCRO = "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"; +const wCRO = ADDRESSES.cronos.WCRO_1; const cCRO = "0x61FCA31c51aCc4CC683291Be936E6799AeAAFe41"; const wKAVA = ADDRESSES.kava.WKAVA; diff --git a/projects/argofinance/index.js b/projects/argofinance/index.js index 065d7c9e99..62e70315a6 100644 --- a/projects/argofinance/index.js +++ b/projects/argofinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { queryV1Beta1 } = require("../helper/chain/cosmos"); const sdk = require("@defillama/sdk"); @@ -5,7 +6,7 @@ async function tvl() { const data = await queryV1Beta1({ chain: 'cronos', url: '/staking/v1beta1/delegations/cro1klkxkl2c59m5dcw4w0683ctfaxklsy9py26jg3', }) let total = data.delegation_responses.reduce((a, i) => a += +i.balance.amount, 0) const balances = {} - sdk.util.sumSingleBalance(balances, 'cronos:0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23', total * 1e10) + sdk.util.sumSingleBalance(balances, 'cronos:' + ADDRESSES.cronos.WCRO_1, total * 1e10) return balances } diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index 53dce79f28..ebdef37b8b 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); module.exports = { @@ -5,10 +6,10 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0x0000000000085d4780B73119b644AE5ecd22b376", // TUSD - "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI + ADDRESSES.ethereum.TUSD, // TUSD + ADDRESSES.ethereum.USDT, // USDT + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.DAI, // DAI "0x4DEcE678ceceb27446b35C672dC7d61F30bAD69E", // crvUSDC "0x390f3595bCa2Df7d23783dFd126427CCeb997BF4", // crvUSDT "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3Crv @@ -21,9 +22,9 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0x4D15a3A2286D883AF0AA1B3f21367843FAc63E07", // TUSD - "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", // USDT - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", // usdc.e - "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", // DAI + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.arbitrum.USDC, // usdc.e + ADDRESSES.optimism.DAI, // DAI "0xec090cf6DD891D2d014beA6edAda6e05E025D93d", // crvUSDC "0x82670f35306253222F8a165869B28c64739ac62e", // 3c-crvUSD "0x73aF1150F265419Ef8a5DB41908B700C32D49135", // crvUSDT @@ -36,9 +37,9 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0x2e1AD108fF1D8C782fcBbB89AAd783aC49586756", // TUSD - "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", // USDT - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", // usdc.e - "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", // DAI + ADDRESSES.polygon.USDT, // USDT + ADDRESSES.polygon.USDC, // usdc.e + ADDRESSES.polygon.DAI, // DAI "0x5225010a0ae133b357861782b0b865a48471b2c5", // crvUSDC "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171", // aave "0xa70af99bff6b168327f9d1480e29173e757c7904", // crvUSDT @@ -50,9 +51,9 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", // TUSD - "0x55d398326f99059fF775485246999027B3197955", // USDT - "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", // usdc.e + ADDRESSES.bsc.TUSD, // TUSD + ADDRESSES.bsc.USDT, // USDT + ADDRESSES.bsc.USDC, // usdc.e "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", // DAI "0xc4ec3ab41182e70ca45a764ffc5c45b9a82ccc97", // crvUSDC "0xA5E0E46462970C9Ee8C2ECadcde254c483748Ec4", // b3pool @@ -65,9 +66,9 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0xcB59a0A753fDB7491d5F3D794316F1adE197B21E", // TUSD - "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", // USDT - "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", // usdc.e - "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", // DAI + ADDRESSES.optimism.USDT, // USDT + ADDRESSES.optimism.USDC, // usdc.e + ADDRESSES.optimism.DAI, // DAI "0x03771e24b7c9172d163bf447490b142a15be3485", // crvUSDC "0x1337bedc9d22ecbe766df105c9623922a27963ec", // 3pool "0xd1b30ba128573fcd7d141c8a987961b40e047bb6", // crvUSDT @@ -79,9 +80,9 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0x1C20E891Bab6b1727d14Da358FAe2984Ed9B59EB", // TUSD - "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", // USDT - "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", // usdc.e - "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", // DAI + ADDRESSES.avax.USDt, // USDT + ADDRESSES.avax.USDC, // usdc.e + ADDRESSES.avax.DAI, // DAI "0x1337BedC9D22ecbe766dF105c9623922A27963EC", // av3crv "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", // crv3crypto ], diff --git a/projects/darkcrypto/index.js b/projects/darkcrypto/index.js index 0ba25a6e1a..9dc85c189b 100644 --- a/projects/darkcrypto/index.js +++ b/projects/darkcrypto/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakingUnknownPricedLP } = require("../helper/staking"); const farmUtils = require("./farm-utils"); const vaultUtils = require("./vault-utils") @@ -15,15 +16,15 @@ async function pool2(timestamp, block, chainBlocks) { //add CRO balance in LP pool sdk.util.sumSingleBalance( balances, - "cronos:0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", - farmTvl["cronos:0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"] + "cronos:" + ADDRESSES.cronos.WCRO_1, + farmTvl["cronos:" + ADDRESSES.cronos.WCRO_1] ); //add Dark and Sky balance in LP pool sdk.util.sumSingleBalance( balances, - "cronos:0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", - farmTvl["cronos:0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"], + "cronos:" + ADDRESSES.cronos.WCRO_1, + farmTvl["cronos:" + ADDRESSES.cronos.WCRO_1], ); return balances; diff --git a/projects/darkness/index.js b/projects/darkness/index.js index ac1f3dce8c..6d7d830dc2 100644 --- a/projects/darkness/index.js +++ b/projects/darkness/index.js @@ -10,7 +10,7 @@ module.exports = { tvl: sumTokensExport({ owner: '0x92631e0e84ff01853ef1bb88fc9c9f7d1e1af1ca', tokens: [ - '0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23', + ADDRESSES.cronos.WCRO_1, '0xf2001b145b43032aaf5ee2884e456ccd805f677d', ADDRESSES.cronos.USDC, '0x6582c738660bf0701f05b04dce3c4e5fcfcda47a', diff --git a/projects/ferro/index.js b/projects/ferro/index.js index 007b21fc25..311df16a53 100644 --- a/projects/ferro/index.js +++ b/projects/ferro/index.js @@ -25,7 +25,7 @@ const tokens = { SWAP_LCRO_WCRO_ADDRESSES, ], // WCRO - "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23": [ + [ADDRESSES.cronos.WCRO_1]: [ SWAP_LCRO_WCRO_ADDRESSES, ], // LATOM-ATOM diff --git a/projects/fx-Protocol/index.js b/projects/fx-Protocol/index.js index ad5ba93193..914f8e1235 100644 --- a/projects/fx-Protocol/index.js +++ b/projects/fx-Protocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const treasuries = [ "0x0e5CAA5c889Bdf053c9A76395f62267E653AFbb0", "0xED803540037B0ae069c93420F89Cd653B6e3Df1f", @@ -16,7 +17,7 @@ const baseTokenRate = [ // '', '0x6Eb03222179F83126735D7E9FdE94571D716D399' ] -const cvxAddress = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; +const cvxAddress = ADDRESSES.ethereum.CVX; const aCVX = "0xb0903Ab70a7467eE5756074b31ac88aEBb8fB777"; const uniBTC = "0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568"; const uniBTC_Genesis_Gauge = "0x1D20671A21112E85b03B00F94Fd760DE0Bef37Ba" diff --git a/projects/gamblefi/index.js b/projects/gamblefi/index.js index d5f42cb54b..753272d607 100644 --- a/projects/gamblefi/index.js +++ b/projects/gamblefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const betifystaking = "0x335CAC92af7015BE7802170B62Ebc4C74900484d"; @@ -11,7 +12,7 @@ async function tvl(api) { "0xf2001b145b43032aaf5ee2884e456ccd805f677d", "0x76f0adfff61fd9a542a36a98b96909ec7d3a8c53", "0xe2c5275d86D2fB860F19a2CbBED9967d39AA73e8", - "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", + ADDRESSES.cronos.WCRO_1, "0x3e7dfdd82965515e9b6398d91b991f5d4c830ef6", ] }) } diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 1b02003ee1..86bec2a4ca 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -167,7 +167,8 @@ "ETHIX": "0xec3f3e6d7907acda3a7431abd230196cda3fbb19", "SDAI": "0xaf204776c7245bF4147c2612BF6e5972Ee483701", "XHOPR": "0xD4fdec44DB9D44B8f2b6d529620f9C0C7066A2c1", - "DAI_1": "0x678df3415fc31947da4324ec63212874be5a82f8" + "DAI_1": "0x678df3415fc31947da4324ec63212874be5a82f8", + "sDAI": "0xaf204776c7245bf4147c2612bf6e5972ee483701" }, "okexchain": { "USDC": "0xc946daf81b08146b1c7a8da2a851ddf2b3eaaf85", @@ -220,7 +221,9 @@ "USDC": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", "USDC_CIRCLE": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85", "DAI": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", - "WBTC": "0x68f180fcCe6836688e9084f035309E29Bf0A2095" + "WBTC": "0x68f180fcCe6836688e9084f035309E29Bf0A2095", + "weETH": "0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff", + "ezETH": "0x2416092f143378750bb29b79ed961ab195cceea5" }, "moonriver": { "WMOVR": "0xe3c7487eb01c74b73b7184d198c7fbf46b34e5af", @@ -1089,7 +1092,8 @@ "TT_USDT": "0x4f3c8e20942461e2c3bdd8311ac57b0c222f2b82", "TT_ETH": "0x6576bb918709906dcbfdceae4bb1e6df7c8a1077", "TT_USDC": "0x22e89898a04eaf43379beb70bf4e38b1faf8a31e", - "TT_BUSD": "0xbeb0131d95ac3f03fd15894d0ade5dbf7451d171" + "TT_BUSD": "0xbeb0131d95ac3f03fd15894d0ade5dbf7451d171", + "veTT": "0xc3c857a9e5be042c8acf4f2827aa053e93b5d039" }, "conflux": { "WCFX": "0x14b2d3bc65e74dae1030eafd8ac30c533c976a9b", @@ -1478,7 +1482,8 @@ "USDbC": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "DAI": "0x50c5725949a6f0c72e6c4a641f24049a917db0cb", - "USDT": "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2" + "USDT": "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2", + "rETH": "0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c" }, "sei": { "SEI": "usei", @@ -1495,7 +1500,9 @@ }, "op_bnb": { "WBNB": "0x4200000000000000000000000000000000000006", - "USDT": "0x9e5aac1ba1a2e6aed6b32689dfcf62a509ca96f3" + "USDT": "0x9e5aac1ba1a2e6aed6b32689dfcf62a509ca96f3", + "ETH": "0xe7798f023fc62146e8aa1b36da45fb70855a77ea", + "FDUSD": "0x50c5725949a6f0c72e6c4a641f24049a917db0cb" }, "archway": { "ARCH": "aarch" @@ -1526,7 +1533,9 @@ "USDT": "secret18wpjn83dayu4meu6wnn29khfkwdxs7kyrz9c8f" }, "aura": { - "AURA": "uaura" + "AURA": "uaura", + "WAURA": "0xDE47A655a5d9904BD3F7e1A536D8323fBD99993A", + "USDT": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd" }, "shibarium": { "WETH": "0x8ed7d143ef452316ab1123d28ab302dc3b80d3ce", @@ -1720,7 +1729,10 @@ "WBTC_1": "0xB880fd278198bd590252621d4CD071b1842E9Bcd" }, "ftn": { - "USDC": "0x4237e0A5b55233D5B6D6d1D9BF421723954130D8" + "USDC": "0x4237e0A5b55233D5B6D6d1D9BF421723954130D8", + "stFTN": "0x780fb5aca83f2e3f57ee18cc3094988ef49d8c3d", + "mUSDC": "0x4b7708ee3ccbd3f9af68208e69ad31f611e1befe", + "mUSDT": "0xb7dc5eca6de5cb9b46ac405d3d4596333714f3f7" }, "q": { "WBTC": "0xde397e6C442A3E697367DecBF0d50733dc916b79", @@ -1767,7 +1779,8 @@ "ETH": "0xeceeefcee421d8062ef8d6b4d814efe4dc898265", "WBTC": "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", "USDT": "0xd567b3d7b8fe3c79a1ad8da978812cfc4fa05e75", - "AXLUSDC": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd" + "AXLUSDC": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd", + "USDC": "0x0ce35b0d42608ca54eb7bcc8044f7087c18e7717" }, "xlayer": { "WOKB": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", @@ -1808,7 +1821,9 @@ "USDC_1": "0x75E20C5d4aade76143b8b74d1C5E2865347f9d3B" }, "lac": { - "LAC": "0x2911a1ab18546cb501628be8625c7503a2a7db54" + "LAC": "0x2911a1ab18546cb501628be8625c7503a2a7db54", + "WETH": "0x42c8c9c0f0a98720dacdaeac0c319cb272b00d7e", + "WBTC": "0xf54b8cb8eeee3823a55dddf5540ceaddf9724626" }, "bob": { "WETH": "0x4200000000000000000000000000000000000006", @@ -1828,6 +1843,7 @@ "USDC": "0x07d83526730c7438048D55A4fc0b850e2aaB6f0b", "USDT": "0x2def195713cf4a606b49d07e520e22c17899a736", "USDC_e": "0x19e26b0638bf63aa9fa4d14c6baf8d52ebe86c5c", + "DAI": "0x7d02A3E0180451B17e5D7f29eF78d06F8117106C", "WETH": "0xA51894664A773981C6C112C43ce576f315d5b1B6" }, "stellar": { @@ -1893,14 +1909,35 @@ }, "noble": { "USDC": "uusdc", - "USDY": "ausdy" + "USDY": "ausdy", + "uusdc": "uusdc", + "ausdy": "ausdy" }, "ripple": { "XRP": "XRP" - }, + }, "polynomial": { "USDC": "0x17C9D8Cef7Ef072844EEaEdE1F9f54C7E3fa8743", "SDAI": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", "sUSDe": "0x2A06DEAc3E863c23DD6a89Eeacd80aBA9E08B77B" + }, + "cronos_zkevm": { + "wzkCRO": "0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d", + "ETH": "0x898b3560affd6d955b1574d87ee09e46669c60ea" + }, + "neox": { + "WGAS": "0x008cd7f573998cb841a5d82a857ed1f0ce03a653", + "WGAS_1": "0xde41591ed1f8ed1484ac2cd8ca0876428de60eff" + }, + "gravity": { + "wG": "0xbb859e225ac8fb6be1c7e38d87b767e95fef0ebd", + "WETH": "0xf6f832466Cd6C21967E0D954109403f36Bc8ceaA", + "USDC_e": "0xfbda5f676cb37624f28265a144a48b0d6e87d3b6" + }, + "idex": { + "0xfbda5f676cb37624f28265a144a48b0d6e87d3b6": "0xfbda5f676cb37624f28265a144a48b0d6e87d3b6" + }, + "etn": { + "WETN": "0x138dafbda0ccb3d8e39c19edb0510fc31b7c1c77" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c24c0b5b94..ede91a25a1 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -51,49 +51,49 @@ const fixBalancesTokens = { ArbUsdc: { coingeckoId: 'usd-coin', decimals: 6 }, }, thundercore: { - '0xc3c857a9e5be042c8acf4f2827aa053e93b5d039': { coingeckoId: 'thunder-token', decimals: 18 }, + [ADDRESSES.thundercore.veTT]: { coingeckoId: 'thunder-token', decimals: 18 }, }, oasis: { - '0x0000000000000000000000000000000000000000': { coingeckoId: 'oasis-network', decimals: 18 }, + [ADDRESSES.null]: { coingeckoId: 'oasis-network', decimals: 18 }, }, heco: { - '0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f': { coingeckoId: 'huobi-token', decimals: 18 }, + [ADDRESSES.heco.WHT]: { coingeckoId: 'huobi-token', decimals: 18 }, }, base: { - '0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c': { coingeckoId: 'rocket-pool-eth', decimals: 18 }, + [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, }, ftn: { - '0x780fb5aca83f2e3f57ee18cc3094988ef49d8c3d': { coingeckoId: 'lolik-staked-ftn', decimals: 18 }, - '0x4b7708ee3ccbd3f9af68208e69ad31f611e1befe': { coingeckoId: 'usd-coin', decimals: 6 }, - '0xb7dc5eca6de5cb9b46ac405d3d4596333714f3f7': { coingeckoId: 'tether', decimals: 6 }, + [ADDRESSES.ftn.stFTN]: { coingeckoId: 'lolik-staked-ftn', decimals: 18 }, + [ADDRESSES.ftn.mUSDC]: { coingeckoId: 'usd-coin', decimals: 6 }, + [ADDRESSES.ftn.mUSDT]: { coingeckoId: 'tether', decimals: 6 }, }, op_bnb: { - '0x7c6b91d9be155a6db01f749217d76ff02a7227f2': { coingeckoId: 'binance-bitcoin', decimals: 18 }, - '0xe7798f023fc62146e8aa1b36da45fb70855a77ea': { coingeckoId: 'ethereum', decimals: 18 }, - '0x50c5725949a6f0c72e6c4a641f24049a917db0cb': { coingeckoId: 'first-digital-usd', decimals: 18 }, + [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, + [ADDRESSES.op_bnb.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.base.DAI]: { coingeckoId: 'first-digital-usd', decimals: 18 }, }, optimism: { - '0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff': { coingeckoId: 'wrapped-eeth', decimals: 18 }, - '0x2416092f143378750bb29b79ed961ab195cceea5': { coingeckoId: "renzo-restaked-eth", decimals: 18 }, + [ADDRESSES.optimism.weETH]: { coingeckoId: 'wrapped-eeth', decimals: 18 }, + [ADDRESSES.optimism.ezETH]: { coingeckoId: "renzo-restaked-eth", decimals: 18 }, }, moonriver: { - '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c': { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.moonriver.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, }, zircuit: { [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, }, islm: { - '0x0ce35b0d42608ca54eb7bcc8044f7087c18e7717': { coingeckoId: 'usd-coin', decimals: 6 }, + [ADDRESSES.islm.USDC]: { coingeckoId: 'usd-coin', decimals: 6 }, }, cronos_zkevm: { - '0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d': { coingeckoId: 'crypto-com-chain', decimals: 18 }, - '0x898b3560affd6d955b1574d87ee09e46669c60ea': { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.cronos_zkevm.wzkCRO]: { coingeckoId: 'crypto-com-chain', decimals: 18 }, + [ADDRESSES.cronos_zkevm.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, }, lac: { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, - '0x42c8c9c0f0a98720dacdaeac0c319cb272b00d7e': { coingeckoId: "ethereum", decimals: 18 }, - '0xf54b8cb8eeee3823a55dddf5540ceaddf9724626': { coingeckoId: "wrapped-bitcoin", decimals: 8 }, + [ADDRESSES.lac.WETH]: { coingeckoId: "ethereum", decimals: 18 }, + [ADDRESSES.lac.WBTC]: { coingeckoId: "wrapped-bitcoin", decimals: 8 }, }, blast: { '0xf8a5d147a3a3416ab151758d969eff15c27ab743': { coingeckoId: "blast:0x59c159e5a4f4d1c86f7abdc94b7907b7473477f6", decimals: 0 }, @@ -106,12 +106,12 @@ const fixBalancesTokens = { [ADDRESSES.q.WQ]: { coingeckoId: "q-protocol", decimals: 18 }, }, taiko: { - '0x7d02A3E0180451B17e5D7f29eF78d06F8117106C': { coingeckoId: "dai", decimals: 18 }, + [ADDRESSES.taiko.DAI]: { coingeckoId: "dai", decimals: 18 }, }, neox: { [ADDRESSES.null]: { coingeckoId: "gas", decimals: 18 }, - '0x008cd7f573998cb841a5d82a857ed1f0ce03a653': { coingeckoId: "gas", decimals: 18 }, - '0xde41591ed1f8ed1484ac2cd8ca0876428de60eff': { coingeckoId: "gas", decimals: 18 }, + [ADDRESSES.neox.WGAS]: { coingeckoId: "gas", decimals: 18 }, + [ADDRESSES.neox.WGAS_1]: { coingeckoId: "gas", decimals: 18 }, }, aura: { [ADDRESSES.null]: { coingeckoId: "aura-network", decimals: 18 }, @@ -120,8 +120,8 @@ const fixBalancesTokens = { }, gravity: { [ADDRESSES.null]: { coingeckoId: "g-token", decimals: 18 }, - '0xbb859e225ac8fb6be1c7e38d87b767e95fef0ebd': { coingeckoId: "g-token", decimals: 18 }, - '0xf6f832466Cd6C21967E0D954109403f36Bc8ceaA': { coingeckoId: "ethereum", decimals: 18 }, + [ADDRESSES.gravity.wG]: { coingeckoId: "g-token", decimals: 18 }, + [ADDRESSES.gravity.WETH]: { coingeckoId: "ethereum", decimals: 18 }, [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, }, idex: { @@ -129,10 +129,10 @@ const fixBalancesTokens = { }, xdai: { '0x6c76971f98945ae98dd7d4dfca8711ebea946ea6': { coingeckoId: "wrapped-steth", decimals: 18 }, - '0xaf204776c7245bf4147c2612bf6e5972ee483701': { coingeckoId: "savings-dai", decimals: 18 }, + [ADDRESSES.xdai.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, }, etn: { - '0x138dafbda0ccb3d8e39c19edb0510fc31b7c1c77': { coingeckoId: "electroneum", decimals: 18 } + [ADDRESSES.etn.WETN]: { coingeckoId: "electroneum", decimals: 18 } }, polynomial: { [ADDRESSES.polynomial.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, diff --git a/projects/hinkal/registryTokens.js b/projects/hinkal/registryTokens.js index 2b653c698e..67d10025b3 100644 --- a/projects/hinkal/registryTokens.js +++ b/projects/hinkal/registryTokens.js @@ -908,7 +908,7 @@ const BASE_REGISTRY_TOKENS = [ ADDRESSES.base.DAI, "0xd07379a755A8f11B57610154861D694b2A0f615a", "0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22", - "0xB6fe221Fe9EeF5aBa221c348bA20A1Bf5e73624c", + ADDRESSES.base.rETH, "0x9EaF8C1E34F05a589EDa6BAfdF391Cf6Ad3CB239", "0xf6C5F01C7F3148891ad0e19DF78743D31E390D1f", "0x6e53131F68a034873b6bFA15502aF094Ef0c5854", diff --git a/projects/lolik/index.js b/projects/lolik/index.js index e791764661..a26d2d8d65 100644 --- a/projects/lolik/index.js +++ b/projects/lolik/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') async function tvl(api) { - const pooledFTN = await api.call({ target: '0x780Fb5AcA83F2e3F57EE18cc3094988Ef49D8c3d', abi: "uint256:getTotalPooledFtn" }) + const pooledFTN = await api.call({ target: ADDRESSES.ftn.stFTN, abi: "uint256:getTotalPooledFtn" }) return { 'coingecko:fasttoken': pooledFTN / 1e18, diff --git a/projects/milkomeda-djed/index.js b/projects/milkomeda-djed/index.js index 0d514096fa..499b345b1e 100644 --- a/projects/milkomeda-djed/index.js +++ b/projects/milkomeda-djed/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require('./abi.json'); async function tvl(api) { const reserve = await api.call({ abi: abi.Djed.reserve, target:'0x67A30B399F5Ed499C1a6Bc0358FA6e42Ea4BCe76', params: 0 }) - api.add('0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9', reserve); // Using WADA address instead of mADA + api.add(ADDRESSES.milkomeda.WADA, reserve); // Using WADA address instead of mADA } module.exports = { diff --git a/projects/mimas-finance/index.js b/projects/mimas-finance/index.js index ab440df421..839232c6dd 100644 --- a/projects/mimas-finance/index.js +++ b/projects/mimas-finance/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {compoundExports} = require('../helper/compound') const { stakingUnknownPricedLP } = require("../helper/staking"); const token = "0x10C9284E6094b71D3CE4E38B8bFfc668199da677"; const stakingContract = "0x268E2E1e5a465034Ee5742DA578feb41B228ad7B"; -const wCRO = "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"; +const wCRO = ADDRESSES.cronos.WCRO_1; const mmCRO = "0xff024211741059a2540b01f5Be2e75fC0c1b3d82"; module.exports = { diff --git a/projects/minotaur-money/index.js b/projects/minotaur-money/index.js index ea0fd70eaf..70644bf6aa 100644 --- a/projects/minotaur-money/index.js +++ b/projects/minotaur-money/index.js @@ -10,7 +10,7 @@ const tokens = [ ["0xf5a5f547612e95c688971fb68334a80ceb3c542b", true], // MINO-DAI ["0x1c139f4b953ce0c0f6aa1cd1755727ad5aba5080", true], // MINO-WCRO [ADDRESSES.cronos.WBTC, false], // WBTC - ["0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", false], // WCRO + [ADDRESSES.cronos.WCRO_1, false], // WCRO ["0xe44fd7fcb2b1581822d0c862b68222998a0c299a", false] // WETH ]; diff --git a/projects/nayms/index.js b/projects/nayms/index.js index 9606698be0..de6cd8b411 100644 --- a/projects/nayms/index.js +++ b/projects/nayms/index.js @@ -13,7 +13,7 @@ const tokens = [ const tokensBase = [ ADDRESSES.base.WETH, ADDRESSES.base.USDC, - "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C", + ADDRESSES.ethereum.USDM, ]; const owner = "0x39e2f550fef9ee15b459d16bD4B243b04b1f60e5"; diff --git a/projects/nest/index.js b/projects/nest/index.js index cf28a9a05a..0d0d815c4f 100644 --- a/projects/nest/index.js +++ b/projects/nest/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); module.exports = { @@ -23,7 +24,7 @@ const config = { bsc: { tvlContracts: ['0x9484f12044b9d5707AfeaC5BD02b5E0214381801'], tokens: [ - "0x55d398326f99059fF775485246999027B3197955" + ADDRESSES.bsc.USDT ], NEST: '0x98f8669F6481EbB341B522fCD3663f79A3d1A6A7', stakingContracts: ["0x09CE0e021195BA2c1CDE62A8B187abf810951540"] diff --git a/projects/orcadao/index.js b/projects/orcadao/index.js index c45ae3518b..58a98b746a 100644 --- a/projects/orcadao/index.js +++ b/projects/orcadao/index.js @@ -40,7 +40,7 @@ async function borrowed(api) { calls: banksAndCollateral.map(p => p[1]), abi: "uint256:totalDebt", }) - api.add('0xd586e7f844cea2f87f50152665bcbc2c279d8d70', debt) + api.add(ADDRESSES.avax.DAI, debt) } const treasuryContract = "0x10131d4f3193a59A46d3ab57D765f2604e77B4E3"; diff --git a/projects/pegasusdao.js b/projects/pegasusdao.js index a0f7909118..89b3fb8a1a 100644 --- a/projects/pegasusdao.js +++ b/projects/pegasusdao.js @@ -14,7 +14,7 @@ const lps = [ const shareLps = "0x72c1f5fb7e5513a07e1ff663ad861554887a0a0a"; const genesisPool = "0x64bfCBe4480B53E8234Ca258a96720F29fe6A6fB"; const genesisTokens = [ - "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", + ADDRESSES.cronos.WCRO_1, ADDRESSES.cronos.USDC, "0x97749c9b61f878a880dfe312d2594ae07aed7656", "0xb8df27c687c6af9afe845a2afad2d01e199f4878", diff --git a/projects/polynomial-bridge/index.js b/projects/polynomial-bridge/index.js index 4108f499df..0823b48f2d 100644 --- a/projects/polynomial-bridge/index.js +++ b/projects/polynomial-bridge/index.js @@ -8,7 +8,7 @@ module.exports = { api, owners: [ "0xDE1617Ddb7C8A250A409D986930001985cfad76F", // usdc vault - "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", // sdai vault + ADDRESSES.polynomial.SDAI, // sdai vault "0xC6cfb996A7CFEB89813A68CD13942CD75553032b", // susde vault "0x034cbb620d1e0e4C2E29845229bEAc57083b04eC" // eth bridge ], @@ -40,7 +40,7 @@ module.exports = { sumTokens2({ api, owners: [ - "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", // usdc vault + ADDRESSES.polynomial.SDAI, // usdc vault ], tokens: [ADDRESSES.arbitrum.USDC_CIRCLE], }), diff --git a/projects/relayChain/index.js b/projects/relayChain/index.js index b2ac00eb58..15829e7bc8 100644 --- a/projects/relayChain/index.js +++ b/projects/relayChain/index.js @@ -104,7 +104,7 @@ const wbtcCronos = ADDRESSES.cronos.WBTC; const wethCronos = "0xe44fd7fcb2b1581822d0c862b68222998a0c299a"; const relayCronos = "0x9C29650a1B273A031A35F3121914aae882B144A4"; const busdCronos = ADDRESSES.oasis.USDT; -const wCronos = "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"; +const wCronos = ADDRESSES.cronos.WCRO_1; diff --git a/projects/routerprotocol/index.js b/projects/routerprotocol/index.js index c8fafab9c4..0433aa984d 100644 --- a/projects/routerprotocol/index.js +++ b/projects/routerprotocol/index.js @@ -97,7 +97,7 @@ const config = { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ { name: "usd-coin", address: ADDRESSES.cronos.USDC, decimals: 6 }, - { name: "wrapped-cro", address: "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", decimals: 18 }, + { name: "wrapped-cro", address: ADDRESSES.cronos.WCRO_1, decimals: 18 }, { name: "wmatic", address: "0xad79AC3c5a5c15C6B9194F5568e451b3fc3C2B40", decimals: 18 }, { name: "wbnb", address: ADDRESSES.telos.ETH, decimals: 18 }, { name: "wrapped-avax", address: ADDRESSES.shiden.ETH, decimals: 18 }, diff --git a/projects/svn/index.js b/projects/svn/index.js index be0a5d1d63..d142ca9e76 100644 --- a/projects/svn/index.js +++ b/projects/svn/index.js @@ -18,7 +18,7 @@ async function tvl(api) { "0xc924da29d37f3b8C62c4c3e4e6958bF2b5ebF677", "0x97749c9B61F878a880DfE312d2594AE07AEd7656", "0x50c0C5bda591bc7e89A342A3eD672FB59b3C46a7", - "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", + ADDRESSES.cronos.WCRO_1, "0x2D03bECE6747ADC00E1a131BBA1469C15fD11e03", ], owner: '0x3827CAa33557304e1CA5D89c2f85919Da171C44D', resolveLP: true }) diff --git a/projects/thetanuts/index.js b/projects/thetanuts/index.js index bff48b0012..c1b96ac200 100644 --- a/projects/thetanuts/index.js +++ b/projects/thetanuts/index.js @@ -168,7 +168,7 @@ let boba = ADDRESSES.boba.BOBA const bobaUSDC = ADDRESSES.boba.USDC // cronos assets -const wcro = '0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23' +const wcro = ADDRESSES.cronos.WCRO_1 // Arbitrum assets const arb = ADDRESSES.arbitrum.ARB diff --git a/projects/treasury/bankofcronos.js b/projects/treasury/bankofcronos.js index 7a3808f5f3..47bf8672d5 100644 --- a/projects/treasury/bankofcronos.js +++ b/projects/treasury/bankofcronos.js @@ -12,7 +12,7 @@ module.exports = treasuryExports({ nullAddress, ADDRESSES.cronos.USDC,//USDC '0x26043Aaa4D982BeEd7750e2D424547F5D76951d4',//CUSD - '0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23',//WCRO + ADDRESSES.cronos.WCRO_1,//WCRO '0xe44Fd7fCb2b1581822D0c862B68222998a0c299a',//WETH ADDRESSES.cronos.WBTC,//WBTC ], diff --git a/projects/treasury/croblanc.js b/projects/treasury/croblanc.js index 806a6efef5..a0d3525160 100644 --- a/projects/treasury/croblanc.js +++ b/projects/treasury/croblanc.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const treasury = "0xb20234c33337537111f4ab6f5EcaD400134aC143"; -const WCRO = "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23"; +const WCRO = ADDRESSES.cronos.WCRO_1; module.exports = { cronos: { diff --git a/projects/vett/index.js b/projects/vett/index.js index 5abf1b50a2..bbd1df6d3e 100644 --- a/projects/vett/index.js +++ b/projects/vett/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const chain = "thundercore"; -const posStaking = "0xC3C857a9E5Be042C8acF4F2827Aa053e93b5d039" +const posStaking = ADDRESSES.thundercore.veTT const posABI = { getTTPoolAbi: "uint256:getTTPool" } diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index 894b5901b1..3c16d07952 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -29,7 +29,7 @@ const TOKEN_CONTRACTS = [ '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', // weETHs '0xC96dE26018A54D51c097160568752c4E3BD6C364', // FBTC '0x8236a87084f8b84306f72007f36f2618a5634494', // LBTC - '0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409' // FDUSD + ADDRESSES.ethereum.FDUSD // FDUSD ]; module.exports = { From 0178278423b8acd0cc5d8970891a9952701c0a95 Mon Sep 17 00:00:00 2001 From: Solbank <162707590+SolbankFinance@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:29:58 +0200 Subject: [PATCH 0460/1768] [SOLANA] Add Solbank TVL (#11697) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/solbank-finance/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/solbank-finance/index.js diff --git a/projects/solbank-finance/index.js b/projects/solbank-finance/index.js new file mode 100644 index 0000000000..bae3e57047 --- /dev/null +++ b/projects/solbank-finance/index.js @@ -0,0 +1,10 @@ +const { sumTokensExport } = require('../helper/solana'); + +const contractAddress = '3Q3pE1izgCeAtTR23eufZy5vCEGtpWLBQcGD2HGd1cbU'; + +module.exports = { + solana: { + tvl: sumTokensExport({ owners: [contractAddress], blacklistedTokens: ['8twuNzMszqWeFbDErwtf4gw13E6MUS4Hsdx5mi3aqXAM'] }), + staking: sumTokensExport({ owners: [contractAddress], tokens: ['8twuNzMszqWeFbDErwtf4gw13E6MUS4Hsdx5mi3aqXAM'] }), + }, +}; \ No newline at end of file From 8e46778cc92a8bd1c868e1ae3290335d269e87d4 Mon Sep 17 00:00:00 2001 From: Ao Wang <127380378+AoWangg@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:30:14 +0800 Subject: [PATCH 0461/1768] new Bitlayer USDC address (#11705) --- projects/bitparty/index.js | 2 +- projects/predx/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/bitparty/index.js b/projects/bitparty/index.js index 404bc0eff9..5e08782687 100644 --- a/projects/bitparty/index.js +++ b/projects/bitparty/index.js @@ -9,7 +9,7 @@ module.exports = { nullAddress, ADDRESSES.btr.ETH, '0xfe9f969faf8ad72a83b761138bf25de87eff9dd2', - '0x9827431e8b77e87c9894bd50b055d6be56be0030', + '0xf8c374ce88a3be3d374e8888349c7768b607c755', ADDRESSES.btr.WBTC, '0x07373d112edc4570b46996ad1187bc4ac9fb5ed0', '0x2729868df87d062020e4a4867ff507fb52ee697c', diff --git a/projects/predx/index.js b/projects/predx/index.js index cde2245fe8..7965c70c8c 100644 --- a/projects/predx/index.js +++ b/projects/predx/index.js @@ -41,7 +41,7 @@ module.exports = { btr: { tvl: sumTokensExport({ owners: ["0x92CdC3a149A6bc3f39136eF4A94292cDC2Cc4b9b"], - tokens: ["0x9827431e8b77e87c9894bd50b055d6be56be0030"] + tokens: ["0xf8c374ce88a3be3d374e8888349c7768b607c755"] }), }, } From 6843299e0a57687933728b22ea3324abe53cc014 Mon Sep 17 00:00:00 2001 From: hamur dev <122794657+tpktpj@users.noreply.github.com> Date: Mon, 23 Sep 2024 05:30:33 -0400 Subject: [PATCH 0462/1768] Chore: update avalon finance markets (#11698) --- projects/avalon-finance/index.js | 37 ++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 1c3171a6fe..8d75ee1bf1 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -3,34 +3,49 @@ const { aaveExports } = require('../helper/aave') const methodologies = require('../helper/methodologies') const { mergeExports } = require('../helper/utils') +//@note Main & Innovative Markets const mainMarket = { merlin: aaveExports('', '0x6aB5d5E96aC59f66baB57450275cc16961219796', undefined, ['0x5F314b36412765f3E1016632fD1Ad528929536CA'], {v3: true}), btr: aaveExports('', '0x6aB5d5E96aC59f66baB57450275cc16961219796', undefined, ['0x5F314b36412765f3E1016632fD1Ad528929536CA'], {v3: true}), - arbitrum: aaveExports('', '0xa2ddc06baDc817C612111137c0cf6Bd43634EE1a', undefined, ['0xEc579d2cE07401258710199Ff12a5bb56e086a6F'],{v3: true}), - bsc: aaveExports('', '0x5395201A4DD625a0d69b99D917282f75928416c1', undefined, ['0x672b19DdA450120C505214D149Ee7F7B6DEd8C39'],{v3: true}), - core: aaveExports('', '0x410d2D3Dc79ec66A2Cfc3A4a0AD4af3a38D38bd0', undefined, ['0x802CB61844325dc9A161bC3A498E3BE1B7b6FE00'], { v3: true }), scroll: aaveExports('', '0xFBb77A68ee35e7902F1ABE0Bd34B263023e90c70', undefined, ['0x18cbe70602Ee17f79D56971F685E9EaF49DA53F2'], { v3: true }), - ethereum: aaveExports('', '0xff12470a969Dd362EB6595FFB44C82c959Fe9ACc', undefined, ['0xfabb0fDca4348d5A40EB1BB74AEa86A1C4eAd7E2'], { v3: true }), - mantle: aaveExports('', '0xc6517002bE432e60DEb311c2FD264aBdC7CC74F2', undefined, ['0xc8651Bc174A1f9c29dCDc0651917379d29aBE13F'], { v3: true }), } const innovativeMarket = { merlin: aaveExports('', '0x91b212e9FaF20117Eae59d6289CB38749DDFc070', undefined, ['0x883cb2E2d9c5D4D9aF5b0d37fc39Fa2284405682'], { v3: true }), - btr: aaveExports('', '0x90EA8C92AddE4D3f323Dad9E36f0E0395dbc929d', undefined, ['0x4c25c261Fe47bC216113D140BaF72B05E151bcE4'], { v3: true }), } + +//@note Protocol based markets: Solv, pumpBTC, stbtc, unibtc, others +const solvMarkets = { + base: aaveExports('', '', undefined, ['0xA9D15C669940a757Ab76C6604f2f8f1e198f7D50'], { v3: true }), + bsc: aaveExports('', '0x5395201A4DD625a0d69b99D917282f75928416c1', undefined, ['0x672b19DdA450120C505214D149Ee7F7B6DEd8C39'], { v3: true }), + ethereum: aaveExports('', '0xff12470a969Dd362EB6595FFB44C82c959Fe9ACc', undefined, ['0xfabb0fDca4348d5A40EB1BB74AEa86A1C4eAd7E2'], { v3: true }), + core: aaveExports('', '0x410d2D3Dc79ec66A2Cfc3A4a0AD4af3a38D38bd0', undefined, ['0x802CB61844325dc9A161bC3A498E3BE1B7b6FE00'], { v3: true }), + arbitrum: aaveExports('', '0xa2ddc06baDc817C612111137c0cf6Bd43634EE1a', undefined, ['0xEc579d2cE07401258710199Ff12a5bb56e086a6F'], { v3: true }), + bob: aaveExports('', '', undefined, ['0xfabb0fDca4348d5A40EB1BB74AEa86A1C4eAd7E2'], { v3: true }), +} + const pumpBTCMarkets = { - // Ethereum - Pump BTC ethereum: aaveExports('', '0xE00A3FE97714765A1a2054E850724Fd1320FaCc0', undefined, ['0x2eE0438BCC1876cEA2c6fc43dD21417cF3D1c2eF'], { v3: true }), - // BSC - PumpBTC bsc: aaveExports('', '0xb1C93Ba1286b6CCA1496C266f0eBfCe94b0C0cc0', undefined, ['0x58c937fa2D147117dB43d187f9411151edfFf03c'], { v3: true }), } +const unibtcMarkets = { + merlin: aaveExports('', '0x0024818043D04B1Cc9685233D47eF7eea6Df0A5E', undefined, ['0x623700Fee1dF64088f258e2c4DAB4D6aEac4dDA6'], { v3: true }), + btr: aaveExports('', '', undefined, ['0x898D0EF6E20B7597728AEB41169c22608Fe4b234'], { v3: true }), + bsc: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), +} + +const stbtcMarkets = { + bsc: aaveExports('', '', undefined, ['0x56F817eF5D1945E0772496020ff0F72c3984B351'], { v3: true }), + btr: aaveExports('', '0x90EA8C92AddE4D3f323Dad9E36f0E0395dbc929d', undefined, ['0x4c25c261Fe47bC216113D140BaF72B05E151bcE4'], { v3: true }), +} + const otherProtocolTokenMarkets = { // ETH - Swell BTC ethereum: aaveExports('', '0x3975BE5E668b189b8Ac9049B96A9D9561c4F5273', undefined, ['0x87Ed94868f6fbaA834Db81a1C5854c445caCaB67'], { v3: true }), - // Merlin - UniBTC - merlin: aaveExports('', '0x0024818043D04B1Cc9685233D47eF7eea6Df0A5E', undefined, ['0x623700Fee1dF64088f258e2c4DAB4D6aEac4dDA6'], { v3: true }), } -module.exports = mergeExports(mainMarket, innovativeMarket,pumpBTCMarkets,otherProtocolTokenMarkets) +module.exports = mergeExports( + mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets +) module.exports.methodology = methodologies.lendingMarket From d42fb82d45a6db7f73beb79921d4204a18795016 Mon Sep 17 00:00:00 2001 From: alec <75048567+ahorner2@users.noreply.github.com> Date: Mon, 23 Sep 2024 04:31:05 -0500 Subject: [PATCH 0463/1768] Oracle update - adding mBASIS token to TVL (#11696) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/midas/index.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/projects/midas/index.js b/projects/midas/index.js index 59a6104fc4..797ffa5699 100644 --- a/projects/midas/index.js +++ b/projects/midas/index.js @@ -1,18 +1,17 @@ -async function tvl(api) { - const MTBILL_TOKEN_CONTRACT = "0xDD629E5241CbC5919847783e6C96B2De4754e438"; - const mtbillSupply = await await api.call({ abi: "erc20:totalSupply", target: MTBILL_TOKEN_CONTRACT, }) - - const rate = await api.call({ - target: "0x056339C044055819E8Db84E71f5f2E1F536b2E5b", // midas oracle - abi: "function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)", - }); - api.addCGToken("tether", (mtbillSupply / 1e18) * ((rate.answer / 1e8))) +const config = { + ethereum: { + mTBILL: '0xDD629E5241CbC5919847783e6C96B2De4754e438', + mBASIS: '0x2a8c22E3b10036f3AEF5875d04f8441d4188b656', + } } -const chains = ["ethereum"]; +async function tvl(api) { + const tokens = Object.values(config[api.chain]) + const bals = await api.multiCall({ abi: 'uint256:totalSupply', calls: tokens}) + api.add(tokens, bals) +} -chains.forEach((chain) => { - module.exports[chain] = { tvl }; -}); -module.exports.misrepresentedTokens = true \ No newline at end of file +Object.keys(config).forEach((chain) => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From 3aa82e9b8fc85ac8c742e7085883b3dee5c15952 Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Mon, 23 Sep 2024 17:42:04 +0800 Subject: [PATCH 0464/1768] Add StakeStone SBTC (#11678) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/stakestone-btc/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/stakestone-btc/index.js diff --git a/projects/stakestone-btc/index.js b/projects/stakestone-btc/index.js new file mode 100644 index 0000000000..619453706a --- /dev/null +++ b/projects/stakestone-btc/index.js @@ -0,0 +1,17 @@ +const vaultABI = { + "getDepositAmounts": "function getDepositAmounts() view returns (address[], uint256[])" +} + +const VaultBSC = '0xc6f830BB162e6CFb7b4Bac242B0E43cF1984c853'; + +const bscTvl = async (api) => { + const [btclist] = await api.call({ abi: vaultABI.getDepositAmounts, target: VaultBSC }) + return api.sumTokens({ owner: VaultBSC, tokens: btclist }) +} + +module.exports = { + start: 42326440, + bsc: { + tvl: bscTvl, + } +} From f23a11d443d3718a9ec7ef3d9421856d67347e88 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:11:35 +0200 Subject: [PATCH 0465/1768] Fix: dexfinance-vault (outdated) (#11706) --- projects/dexfinance-vault/index.js | 107 ++++++++++++++--------------- 1 file changed, 51 insertions(+), 56 deletions(-) diff --git a/projects/dexfinance-vault/index.js b/projects/dexfinance-vault/index.js index 6132575bf4..5eaf428385 100644 --- a/projects/dexfinance-vault/index.js +++ b/projects/dexfinance-vault/index.js @@ -33,53 +33,57 @@ const CONFIG = { }; const getVaults = async (api, factory) => { - const vaults = await api.fetchList({ lengthAbi: abi.factory.vaultsLength, itemAbi: abi.factory.vaults, target: factory, }); - const farmsAll = await api.fetchList({ lengthAbi: abi.vault.farmsLength, itemAbi: abi.vault.farms, targets: vaults, groupedByInput: true }) - const items = [] - vaults.map((vault, i) => items.push(farmsAll[i].map((farm) => ({ vault, farm })))) - return items.flat() + const vaults = await api.fetchList({ lengthAbi: abi.factory.vaultsLength, itemAbi: abi.factory.vaults, target: factory, permitFailure:true }); + const farmsAll = await api.fetchList({ lengthAbi: abi.vault.farmsLength, itemAbi: abi.vault.farms, targets: vaults, groupedByInput: true, permitFailure:true }) + + return vaults.map((vault, i) => { + const farms = farmsAll[i] || []; + return farms.map(farm => ({ vault, farm })); + }).flat(); }; const getVaultsConnectors = async (api, factory, vaultFarms) => { - const connectorsCalls = vaultFarms.map(({ farm, vault }) => ({ params: farm.beacon, target: vault, })); + const connectorsCalls = vaultFarms.map(({ farm, vault }) => ({ params: farm.beacon, target: vault })); const calculationConnectorCalls = vaultFarms.map(({ farm }) => farm.beacon); - const connectors = await api.multiCall({ abi: abi.vault.farmConnector, calls: connectorsCalls }) - const calculationConnectors = await api.multiCall({ abi: abi.factory.farmCalculationConnector, calls: calculationConnectorCalls, target: factory }) - - vaultFarms.forEach((item, i) => { - delete item.farm.data - item.connector = connectors[i] - item.calculationConnector = calculationConnectors[i] - }) -} + const connectors = await api.multiCall({ abi: abi.vault.farmConnector, calls: connectorsCalls, permitFailure: true }); + const calculationConnectors = await api.multiCall({ abi: abi.factory.farmCalculationConnector, calls: calculationConnectorCalls, target: factory, permitFailure: true }); + + return vaultFarms + .map((item, i) => { + const connector = connectors[i] + const calculationConnector = calculationConnectors[i] + if (!connector || !calculationConnector) return null; + delete item.farm.data; + return { ...item, connector, calculationConnector }; + }).filter(item => item !== null); +}; const getVaultsDatas = async (api, vaultFarms) => { - const calls = vaultFarms.map(({ connector }) => connector) - const liquidityCalls = vaultFarms.map(({ calculationConnector, connector }) => ({ target: calculationConnector, params: [connector] })) - - const [types, stakingTokens, liquidities] = - await Promise.all([ - api.multiCall({ calls, abi: abi.farm.type }), - api.multiCall({ calls, abi: abi.farm.stakingToken }), - api.multiCall({ calls: liquidityCalls, abi: abi.vault.liquidity }), - ]); - - vaultFarms.forEach((item, i) => { - item.type = types[i] - item.stakingToken = stakingTokens[i] - item.liquidity = liquidities[i] + const v2Farms = []; + const v3Farms = []; + const calls = vaultFarms.map(({ connector }) => connector); + const liquidityCalls = vaultFarms.map(({ calculationConnector, connector }) => ({ target: calculationConnector, params: [connector] })); + const stakingDatasCalls = vaultFarms.map(({ calculationConnector }) => ({ target: calculationConnector })) + + const [stakingTokens, liquidities, datas] = await Promise.all([ + api.multiCall({ calls, abi: abi.farm.stakingToken, permitFailure: true }), + api.multiCall({ calls: liquidityCalls, abi: abi.vault.liquidity }), + api.multiCall({ calls: stakingDatasCalls, abi: abi.farm.stakingTokenData, permitFailure: true }) + ]); + + vaultFarms.forEach(( item, i ) => { + const stakingToken = stakingTokens[i] + const liquidity = liquidities[i] + const data = datas[i] + if (!stakingToken || !liquidity ) return + if (!data) { + v2Farms.push({ ...item, stakingToken, liquidity }) + } else { + v3Farms.push({ ...item, stakingToken, liquidity, data }) + } }) -}; -const groupBy = (array, keyFn) => { - return array.reduce((acc, item) => { - const key = keyFn(item); - if (!acc[key]) { - acc[key] = []; - } - acc[key].push(item); - return acc; - }, {}); + return { v2Farms, v3Farms } }; const lpv2Balances = async (api, farms) => { @@ -100,34 +104,25 @@ async function addERC721Data(api, vaultFarms) { nftPositionMapping[nft].push(positionIds[i]) }) for (const [nftAddress, positionIds] of Object.entries(nftPositionMapping)) - await sumTokens2({ api, uniV3ExtraConfig: { nftAddress, positionIds, } }) + await sumTokens2({ api, uniV3ExtraConfig: { nftAddress, positionIds } }) } const tvl = async (api) => { const { factory, USDEX_PLUS, gDEX } = CONFIG[api.chain]; const vaultFarms = await getVaults(api, factory); - await getVaultsConnectors(api, factory, vaultFarms); - await getVaultsDatas(api, vaultFarms); - const sortedFarms = groupBy(vaultFarms, ({ type }) => `${type}`); + const vaultFarmsWithConnectors = await getVaultsConnectors(api, factory, vaultFarms); + const { v2Farms, v3Farms } = await getVaultsDatas(api, vaultFarmsWithConnectors); - const lpv2Farms = Object.keys(sortedFarms) - .filter((key) => !key.includes("ERC721")) - .flatMap((key) => sortedFarms[key]); - - const lpv3Farms = Object.keys(sortedFarms) - .filter((key) => key.includes("ERC721")) - .flatMap((key) => sortedFarms[key]); - - await Promise.all([ - lpv2Balances(api, lpv2Farms), - addERC721Data(api, lpv3Farms) + await Promise.all([ + lpv2Balances(api, v2Farms), + addERC721Data(api, v3Farms) ]) - + await sumTokens2({ api, resolveLP: true }); if (USDEX_PLUS) api.removeTokenBalance(USDEX_PLUS); if (gDEX) api.removeTokenBalance(gDEX); }; Object.keys(CONFIG).forEach((chain) => { - module.exports[chain] = { tvl, }; + module.exports[chain] = { tvl }; }) \ No newline at end of file From 5f06b53bedf007895491e4ad1a605b2ac8979581 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:12:07 +0200 Subject: [PATCH 0466/1768] Fix: Lachain adapters (#11709) --- projects/lachain-yield-market.js | 2 ++ projects/ladex-exchange/index.js | 1 + 2 files changed, 3 insertions(+) diff --git a/projects/lachain-yield-market.js b/projects/lachain-yield-market.js index fb34d20f73..417f2d4fd0 100644 --- a/projects/lachain-yield-market.js +++ b/projects/lachain-yield-market.js @@ -1,4 +1,5 @@ const utils = require('./helper/utils'); +const { deadFrom } = require('./ladex-exchange'); async function fetch() { const response = await utils.fetchURL(`https://farms-info.lachain.io/farms/beefy`); @@ -20,6 +21,7 @@ async function fetch() { } module.exports = { + deadFrom: '2024-01-01', lachain: { fetch }, fetch, } diff --git a/projects/ladex-exchange/index.js b/projects/ladex-exchange/index.js index 1ad19b40b8..84f750c548 100644 --- a/projects/ladex-exchange/index.js +++ b/projects/ladex-exchange/index.js @@ -2,6 +2,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const factory_contract = "0xD707d9038C1d976d3a01c770f01CB73a1fd305Cd" module.exports = { + deadFrom: '2024-01-01', lachain: { tvl: getUniTVL({ factory: factory_contract, useDefaultCoreAssets: true }), } From 3563c802a5b7f9bdcb25ba066f56ba7b6bcd9d1a Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:12:55 +0200 Subject: [PATCH 0467/1768] Fix: Vaultka (outdated) (#11707) --- projects/vaultka/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/vaultka/index.js b/projects/vaultka/index.js index 54b1908c91..a85c0afb6d 100644 --- a/projects/vaultka/index.js +++ b/projects/vaultka/index.js @@ -63,8 +63,9 @@ module.exports = { const bals = await api.multiCall({ abi: "int256:getVaultMarketValue", calls: vaults, + permitFailure: true }); - bals.forEach((i) => api.add(ADDRESSES.arbitrum.USDC, i)); + bals.filter((bal) => bal !== null).forEach((i) => api.add(ADDRESSES.arbitrum.USDC, i)); const addresses = { wSol: "0x2bcC6D6CdBbDC0a4071e48bb3B969b06B3330c07", From dd09938c31b170edbad170a60de84865ddbcfc88 Mon Sep 17 00:00:00 2001 From: KDarensky Date: Mon, 23 Sep 2024 15:22:43 +0300 Subject: [PATCH 0468/1768] K9 Finance: add tvl adapter (#11710) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/utils.js | 1 + projects/k9-finance/index.js | 59 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 projects/k9-finance/index.js diff --git a/projects/helper/utils.js b/projects/helper/utils.js index cbda36f2ed..15e958316a 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -100,6 +100,7 @@ function isLP(symbol, token, chain) { if (chain === 'btn' && /(XLT)$/.test(symbol)) return true //xenwave LP if (['fantom', 'nova',].includes(chain) && ['NLT'].includes(symbol)) return true if (chain === 'ethereumclassic' && symbol === 'ETCMC-V2') return true + if (chain === 'shibarium' && ['SSLP', 'ChewyLP'].includes(symbol)) return true let label if (symbol.startsWith('ZLK-LP') || symbol.includes('DMM-LP') || (chain === 'avax' && 'DLP' === symbol) || symbol === 'fChe-LP') diff --git a/projects/k9-finance/index.js b/projects/k9-finance/index.js new file mode 100644 index 0000000000..7c8e195d0b --- /dev/null +++ b/projects/k9-finance/index.js @@ -0,0 +1,59 @@ +const { sumUnknownTokens } = require("../helper/unknownTokens"); + +const vestingSettingsAbi = "function settings() view returns (bool lockedOnly, uint64 backingRatio, uint64 vestingRatio, uint64 vestingPeriod)" + +const BONE_TOKEN = "0x9813037ee2218799597d83D4a5B6F3b6778218d9"; +const BONE_CONTRACT = "0x3358FCA51d7C0408750FBbE7777012E0b67C027F"; + +const REAL_YIELD_STAKING = "0xe13824Fb7b206E585c775B30431600528572C3E7"; +const KNINE_TOKEN = "0x91fbB2503AC69702061f1AC6885759Fc853e6EaE"; + +const FARMING_FABRIC = "0x8ed1A7c4736b5835560b0f9E961B8E3581774D42"; + +const VESTING = "0xf7384ba80A51979eC8cc0F17a843089ffD706f0a"; + +async function tvl(api) { + const bonesBalance = await api.call({ abi: "uint256:getTotalPooledBONE", target: BONE_CONTRACT, }); + // api.addToken(BONE_TOKEN, bonesBalance); + api.addCGToken('bone-shibaswap', bonesBalance / 1e18) +} + +async function pool2(api) { + const poolsAddresses = await api.call({ abi: "address[]:getAllCreatedPools", target: FARMING_FABRIC, }); + + const tokens = await api.multiCall({ abi: "address:pool", calls: poolsAddresses, }); + const bals = await api.multiCall({ abi: "uint256:intermediate", calls: poolsAddresses, }); + api.add(tokens, bals) + return sumUnknownTokens({ api, lps: tokens, useDefaultCoreAssets: true, resolveLP: true, }) +} + +async function vesting(api) { + const vestingSettings = await api.call({ abi: vestingSettingsAbi, target: VESTING, }); + const esKNINEAddress = await api.call({ abi: "address:esKNINE", target: VESTING, }); + + const esKNINEBalance = await api.call({ abi: "erc20:balanceOf", target: esKNINEAddress, params: VESTING, }); + const vestingRatio = vestingSettings[2]; + + const KNINEAmount = esKNINEBalance * vestingRatio / 100 + api.addToken(KNINE_TOKEN, KNINEAmount); + return sumUnknownTokens({ api, useDefaultCoreAssets: true, lps: ['0xF3452bCdEcaDa5E08ce56EC3D2BF8e35ECFFFF91'], }) +} +async function staking(api) { + const bal = await api.call({ abi: "erc20:balanceOf", target: KNINE_TOKEN, params: REAL_YIELD_STAKING, }); + + api.addToken(KNINE_TOKEN, bal); + return sumUnknownTokens({ api, useDefaultCoreAssets: true, lps: ['0xF3452bCdEcaDa5E08ce56EC3D2BF8e35ECFFFF91'],}) +} + +module.exports = { + methodology: + "Counts the liquidity locked inside the K9 Finance DAO protocol, including: the BONE amount locked at the Liquid Staking, the KNINE amount locked at the Real Yield Staking, the KNINE amount locked at the Vesting, the LP tokens locked at the Farming.", + ethereum: { + tvl, + }, + shibarium: { + staking, + pool2, + vesting, + }, +}; From fab8989b00185115362c9ed7b93962fd87dff786 Mon Sep 17 00:00:00 2001 From: Deadshot Ryker <151393124+deadshotryker@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:23:12 +0400 Subject: [PATCH 0469/1768] Added base market for ZeroLend (#11711) --- projects/zerolend/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/zerolend/index.js b/projects/zerolend/index.js index 06ff9f78c1..09c30da827 100644 --- a/projects/zerolend/index.js +++ b/projects/zerolend/index.js @@ -7,6 +7,7 @@ const config = { era: ["0xB73550bC1393207960A385fC8b34790e5133175E"], manta: ["0x67f93d36792c49a4493652B91ad4bD59f428AD15"], blast: ["0xc6DF4ddDBFaCb866e78Dcc01b813A41C15A08C10"], + base: ["0xA754b2f1535287957933db6e2AEE2b2FE6f38588"], linea: [ "0x67f93d36792c49a4493652B91ad4bD59f428AD15", // main linea market '0x9aFB91a3cfB9aBc8Cbc8429aB57b6593FE36E173', // croak linea market From 51c7daa53a4398d984802e6bb7e620dd60d6858f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 23 Sep 2024 14:26:49 +0200 Subject: [PATCH 0470/1768] update danzo #11712 --- projects/danzo-arena/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/danzo-arena/index.js b/projects/danzo-arena/index.js index b7084cb67d..d3fc32f1e4 100644 --- a/projects/danzo-arena/index.js +++ b/projects/danzo-arena/index.js @@ -2,6 +2,7 @@ const { sumTokensExport } = require("../helper/chain/cardano"); const scriptAdresses = [ "addr1vx4caaf06swdn7cdfc7pu3sw235zvuhd02tw2np4uac9mwcp2vt4y", //Danzo Tokens locked inside the address for the DeFi game DANZO ARENA: https://cardanzoada.com/arena/ + "addr1v858vfzl7hdqduqqa4vsj58nfy9njtw5q98q8tzzds58uncqjezd7", //Danzo Tokens locked inside the address for the DeFi game DANZO Game: https://cardanzoada.com/app/#/games ]; module.exports = { From f5521983260d16ebf5ed365e711b5a455fe0d5a5 Mon Sep 17 00:00:00 2001 From: Knight <74679047+Knight-101@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:05:56 +0530 Subject: [PATCH 0471/1768] added leverage lending vaults tvl (#11713) --- projects/kriya-dex-earn/index.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/projects/kriya-dex-earn/index.js b/projects/kriya-dex-earn/index.js index f96382b549..60cbaecb1f 100644 --- a/projects/kriya-dex-earn/index.js +++ b/projects/kriya-dex-earn/index.js @@ -1,11 +1,14 @@ const { fetchURL } = require("../helper/utils"); const sui = require("../helper/chain/sui"); -const vaultUrl = +const clmmVaultUrl = "https://88ob93rfva.execute-api.ap-southeast-1.amazonaws.com/release/vaults"; -async function vaultTVL(api) { - const vaults = (await fetchURL(vaultUrl))?.data; +const llVaultUrl = + "https://4sacq88271.execute-api.ap-southeast-1.amazonaws.com/release/vaults"; + +async function clmmVaultTVL(api) { + const vaults = (await fetchURL(clmmVaultUrl))?.data; for (const vault of vaults) { const tokenX = Number(vault?.coinA); const tokenY = Number(vault?.coinB); @@ -15,12 +18,26 @@ async function vaultTVL(api) { } } +async function llVaultTVL(api) { + const vaults = (await fetchURL(llVaultUrl))?.data; + for (const vault of vaults) { + const aumBaseTokenReserve = Number(vault?.aumInBaseToken); + + api.add(vault?.pool?.tokenXType, aumBaseTokenReserve); + } +} + +async function vaultsTVL(api) { + await llVaultTVL(api); + await clmmVaultTVL(api); +} + module.exports = { timetravel: true, misrepresentedTokens: false, methodology: "Collets all the TVL from the KriyaDEX vaults. The TVL is denominated in USD.", sui: { - tvl: vaultTVL, + tvl: vaultsTVL, }, }; From b9197a8898724772573d768498e01efece040a77 Mon Sep 17 00:00:00 2001 From: 0xYFLOW <139814596+0xYFLOW@users.noreply.github.com> Date: Mon, 23 Sep 2024 19:37:05 +0400 Subject: [PATCH 0472/1768] add fet and aave (#11715) --- projects/yieldflow/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/yieldflow/index.js b/projects/yieldflow/index.js index 54a830821b..41088f514c 100644 --- a/projects/yieldflow/index.js +++ b/projects/yieldflow/index.js @@ -97,7 +97,9 @@ const config = { '0x0a4a169a6b2ac75c86e2F0e42822fdEA13fB1CC8', '0xafFA16b152232dAd8BF3AaDF6bb6F895A836F917', '0xFB04d48e4CE9C042188Ef933ff4cf58921Ab59B8', - '0x36232356758c746A50AD5078815F09e39E34628d' + '0x36232356758c746A50AD5078815F09e39E34628d', + '0xA0FDf5DC858ea552d51B4fa304e72cEB34e736fb', + '0xaC36A41da8f069C4874Dda60e073B5DcF889B56E' ] } } From 825b8fa7d62b7c340e312a626cab5a3af5756e3d Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 23 Sep 2024 18:59:04 +0100 Subject: [PATCH 0473/1768] fix ausd decimals --- projects/navi/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/navi/index.js b/projects/navi/index.js index 24a12baa10..d5e81b6c81 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -5,6 +5,7 @@ const decimalShift = { [ADDRESSES.sui.USDC]: -3, // USDC [ADDRESSES.sui.USDT]: -3, // USDT [ADDRESSES.sui.WETH]: -1, // WETH + ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" From 95271d9f9d0eabad166dad02067e80584f3122a3 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 23 Sep 2024 19:21:51 +0100 Subject: [PATCH 0474/1768] add k9finance treasury --- projects/treasury/k9finance.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/treasury/k9finance.js diff --git a/projects/treasury/k9finance.js b/projects/treasury/k9finance.js new file mode 100644 index 0000000000..5afb3b3161 --- /dev/null +++ b/projects/treasury/k9finance.js @@ -0,0 +1,17 @@ +const { token } = require("@project-serum/anchor/dist/cjs/utils"); +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xDA4Df6E2121eDaB7c33Ed7FE0f109350939eDA84"; +const shibtreasury = "0x5C3d21D406226F17a06510F1CB9157BD9e751416" + +module.exports = treasuryExports({ + ethereum: { + owners: [treasury], + ownTokens: ["0x91fbb2503ac69702061f1ac6885759fc853e6eae"] + }, + shibarium: { + tokens: ["0x839fdb6cc98342b428e074c1573adf6d48ca3bfd"], + owners: [shibtreasury], + ownTokens: ["0x91fbB2503AC69702061f1AC6885759Fc853e6EaE"] + }, +}) \ No newline at end of file From 8ec13109a87742a323bb7d3fc378eebd4a27a797 Mon Sep 17 00:00:00 2001 From: Miao Chen Date: Tue, 24 Sep 2024 03:14:56 +0800 Subject: [PATCH 0475/1768] Four meme (#11716) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/four-meme/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/four-meme/index.js diff --git a/projects/four-meme/index.js b/projects/four-meme/index.js new file mode 100644 index 0000000000..aade92ebd3 --- /dev/null +++ b/projects/four-meme/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const config = { + bsc: { + owners: Object.values({ + tokenManager: "0xEC4549caDcE5DA21Df6E6422d448034B5233bFbC", + tokenManager2: "0x5c952063c7fc8610FFDB798152D69F0B9550762b", + }), + tokens: [ADDRESSES.null, ADDRESSES.bsc.USDT,], + }, +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl: sumTokensExport(config[chain]) } +}) \ No newline at end of file From 926717a3fef56630513257d3d5620b62db82fbe0 Mon Sep 17 00:00:00 2001 From: Philipp Date: Mon, 23 Sep 2024 21:15:08 +0200 Subject: [PATCH 0476/1768] Adding Nibiru to ERIS (#11718) --- projects/eris-protocol/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/eris-protocol/index.js b/projects/eris-protocol/index.js index 2d68297c92..1f60b22d8e 100644 --- a/projects/eris-protocol/index.js +++ b/projects/eris-protocol/index.js @@ -172,6 +172,10 @@ const config = { coinGeckoId: "chihuahua-token", hub: "chihuahua1nktfhalzvtx82kyn4dh6l8htcl0prfpnu380a39zj52nzu3j467qqg23ry", }, + nibiru: { + coinGeckoId: "nibiru", + hub: "nibi1udqqx30cw8nwjxtl4l28ym9hhrp933zlq8dqxfjzcdhvl8y24zcqpzmh8m", + }, }; let assetDecimals = { @@ -399,7 +403,7 @@ async function productsTvl(chain) { module.exports = { timetravel: false, - methodology: "Liquid Staking and Arbitrage Protocol", + methodology: "Liquid Staking and Arbitrage Protocol", terra2: { tvl: () => productsTvl("terra2") }, terra: { tvl: () => productsTvl("terra") }, kujira: { tvl: () => productsTvl("kujira") }, @@ -411,4 +415,5 @@ module.exports = { chihuahua: { tvl: () => productsTvl("chihuahua") }, archway: { tvl: () => productsTvl("archway") }, sei: { tvl: () => productsTvl("sei") }, + nibiru: { tvl: () => productsTvl("nibiru") }, }; From bf49df9bb33a3df6caac7059ee076ec830b607d8 Mon Sep 17 00:00:00 2001 From: yorm-bro Date: Tue, 24 Sep 2024 00:17:44 +0500 Subject: [PATCH 0477/1768] Add two new vaults (#11717) --- projects/cybro/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/cybro/index.js b/projects/cybro/index.js index 58ffec4009..7611d32485 100644 --- a/projects/cybro/index.js +++ b/projects/cybro/index.js @@ -16,6 +16,8 @@ const vaults = [ '0x9cc62ef691e869c05fd2ec41839889d4e74c3a3f', '0x3500e1d4e93c9f45aa8198efda16842cb73fa1bc', '0x6654cddf2a14a06307af6a8d7731dd4e059962a1', + '0xdb5e7d5ac4e09206fed80efd7abd9976357e1c03', + '0x3db2bd838c2bed431dcfa012c3419b7e94d78456', ] async function tvl(api) { From 995b970c68cc2064faf124a735fade6424b250ad Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 23 Sep 2024 20:25:25 +0100 Subject: [PATCH 0478/1768] add nulladdress --- projects/treasury/k9finance.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/treasury/k9finance.js b/projects/treasury/k9finance.js index 5afb3b3161..40adc17154 100644 --- a/projects/treasury/k9finance.js +++ b/projects/treasury/k9finance.js @@ -6,11 +6,12 @@ const shibtreasury = "0x5C3d21D406226F17a06510F1CB9157BD9e751416" module.exports = treasuryExports({ ethereum: { + tokens: [nullAddress], owners: [treasury], ownTokens: ["0x91fbb2503ac69702061f1ac6885759fc853e6eae"] }, shibarium: { - tokens: ["0x839fdb6cc98342b428e074c1573adf6d48ca3bfd"], + tokens: [nullAddress,"0x839fdb6cc98342b428e074c1573adf6d48ca3bfd"], owners: [shibtreasury], ownTokens: ["0x91fbB2503AC69702061f1AC6885759Fc853e6EaE"] }, From 603d08a3c31b06623b5cffafe6465b5e9d2177fe Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 23 Sep 2024 23:05:30 +0200 Subject: [PATCH 0479/1768] Add Hedgehog Markets P2P, Parimutuel, and Parlay Support (#11719) Co-authored-by: James Whaley Co-authored-by: jkdipeppe --- projects/hedgehog-markets/index.js | 114 ++++++++++++++++++ projects/helper/utils/solana/layout.js | 4 +- .../utils/solana/layouts/mixed-layout.js | 22 +++- 3 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 projects/hedgehog-markets/index.js diff --git a/projects/hedgehog-markets/index.js b/projects/hedgehog-markets/index.js new file mode 100644 index 0000000000..d7196b0ca0 --- /dev/null +++ b/projects/hedgehog-markets/index.js @@ -0,0 +1,114 @@ + +const { PublicKey } = require("@solana/web3.js"); +const { getProvider, sumTokens2, getConnection, decodeAccount, } = require("../helper/solana") +const { Program, } = require("@project-serum/anchor"); + +async function tvl(api) { + const provider = getProvider() + const connection = getConnection() + const tokenAccounts = [] + const owners= [] + await getClassicMarketTokenAccounts() + await addP2PBalances() + await addParlay() + // await addParimutuel() + + const balances = api.getBalances() + await sumTokens2({ owners, balances, }) + return sumTokens2({ tokenAccounts, balances, }) + + async function getClassicMarketTokenAccounts() { + + const classicMarketProgramId = "D8vMVKonxkbBtAXAxBwPPWyTfon8337ARJmHvwtsF98G" + const idl = await Program.fetchIdl(classicMarketProgramId, provider) + + const program = new Program(idl, classicMarketProgramId, provider) + const markets = await program.account.market.all() + const collateralAccounts = markets.map(({ account }) => account.marketCollateral) + tokenAccounts.push(...collateralAccounts) + } + + async function addParlay() { + const programId = new PublicKey('PLYaNRbQs9GWyVQdcLrzPvvZu7NH4W2sneyHcEimLr7') + const poolOwner = "8Y46GkrbUqXnbs6kPD6SWr44NjcKPEWYzvpAn8UB5duR" + owners.push(poolOwner) + + const accounts = await connection.getProgramAccounts(programId, { + // We only care about: + // - mint address (69..101) + // - entry count (101..105) + // - entry cost (105..113) + dataSlice: { offset: 69, length: 44 }, + filters: [ + // Market accounts have a discriminator of 3 at offset 0. + { memcmp: { offset: 0, bytes: "4" } }, + // Open markets have a state of 0 at offset 149. + { memcmp: { offset: 149, bytes: "1" } }, + ], + }) + + accounts.forEach(({ account }) => { + const data = decodeAccount('hhParlay', account) + + api.add(data.mint.toString(), Number(data.entryCount) * Number(data.entryCost)) + }) + } + + async function addP2PBalances() { + // https://github.com/Hedgehog-Markets/hedgehog-program-library/blob/master/p2p/idl.json + const programId = new PublicKey('P2PzLraW8YF87BxqZTZ5kgrfvzcrKGPnqUBNhqmcV9B') + const poolOwner = "J9EH18EWSo8s69gouHGNy5zFHkhcHRbb9zBZXwSG4cHy" + owners.push(poolOwner) + + const accounts = await connection.getProgramAccounts(programId, { + // We only care about: + // - mint address (73..105) + // - yes amount (113..121) + // - no amount (121..129) + dataSlice: { offset: 69, length: 56 }, + filters: [ + // Market accounts have a discriminator of 3 at offset 0. + { memcmp: { offset: 0, bytes: "4", } }, + // Open markets have a state of 0 at offset 129. + { memcmp: { offset: 129, bytes: "1"} }, + ], + }); + + accounts.forEach(({ account: { data } }) => { + const mint = new PublicKey(data.slice(0, 32)).toString() + const yesAmount = Number(data.readUInt8(40)); + const noAmount = Number(data.readUInt8(48)); + api.add(mint, yesAmount + noAmount) + }) + } + + + async function addParimutuel() { + const programId = new PublicKey('PARrVs6F5egaNuz8g6pKJyU4ze3eX5xGZCFb3GLiVvu') + const poolOwner = "3SAUPiGiATqv8TBgvzSJqpLxLGF6LbJamvimueJQT7WT" + owners.push(poolOwner) + + const accounts = await connection.getProgramAccounts(programId, { + dataSlice: { offset: 69, length: 70 }, + filters: [ + // Market accounts have a discriminator of 3 at offset 0. + { memcmp: { offset: 0, bytes: "4" } }, + // Open markets have a state of 0 at offset 149. + { memcmp: { offset: 149, bytes: "1" } }, + ], + }) + + accounts.forEach(({ account }) => { + const data = decodeAccount('hhPari', account) + const token = data.mint.toString() + const amounts = data.amounts.map(Number) + api.add(token, amounts) + }) + } +} + +module.exports = { + timetravel: false, + solana: { tvl }, + methodology: "TVL consists of deposits made into Hedgehog Markets.", +}; diff --git a/projects/helper/utils/solana/layout.js b/projects/helper/utils/solana/layout.js index b7523fd96e..42e27acd27 100644 --- a/projects/helper/utils/solana/layout.js +++ b/projects/helper/utils/solana/layout.js @@ -5,7 +5,7 @@ const { parsePhoenix } = require('./layouts/phoenix-dex') const { RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM, RAYDIUM_STABLE_STATE_LAYOUT_V1, } = require('./layouts/raydium-layout') const { INVESTIN_FUND_DATA, } = require('./layouts/investin-layout') const { MARKET_STATE_LAYOUT_V3, OPEN_ORDERS_LAYOUT_V2, MARKET_STATE_LAYOUT_V3_MINIMAL } = require('./layouts/openbook-layout') -const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, } = require('./layouts/mixed-layout'); +const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, } = require('./layouts/mixed-layout'); const { SCN_STAKE_POOL, TOKEN_LAYOUT, } = require("./layouts/scnSOL"); const { SANCTUM_INFINITY } = require("./layouts/sanctum-infinity-layout"); const { parseSanctumLstStateList } = require("./layouts/sanctum-validators-lsts-layout"); @@ -63,6 +63,8 @@ const customDecoders = { sanctumValidatorLsts: parseSanctumLstStateList, stakePoolPartial: defaultParseLayout(STAKE_POOL_PARTIAL), stakePool: defaultParseLayout(STAKE_POOL_LAYOUT), + hhParlay: defaultParseLayout(PARLAY_LAYOUT_PARTIAL), + hhPari: defaultParseLayout(HH_PARI_LAYOUT_PARTIAL), } function decodeAccount(layout, accountInfo) { diff --git a/projects/helper/utils/solana/layouts/mixed-layout.js b/projects/helper/utils/solana/layouts/mixed-layout.js index 77e760154d..53962af37c 100644 --- a/projects/helper/utils/solana/layouts/mixed-layout.js +++ b/projects/helper/utils/solana/layouts/mixed-layout.js @@ -250,7 +250,27 @@ const ESOLStakePoolLayout = BufferLayout.struct([ u32("maxValidatorYieldPerEpochNumerator") ]); + +const PARLAY_LAYOUT_PARTIAL = BufferLayout.struct([ + publicKey('mint'), + u32("entryCount"), + u64('entryCost'), +]); + +const HH_PARI_LAYOUT_PARTIAL = BufferLayout.struct([ + publicKey('mint'), + u64("closeTimestamp"), + u64("resolveTimestamp"), + u64("outcomeTimestamp"), + u16("creatorFee"), + u16("platformFee"), + u8('state'), + u8('outcome'), + BufferLayout.seq(u64(), u8().span, 'amounts'), +]); + module.exports = { - ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, + ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, + PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, } From c38e59f7147b30fbf2b9e01ed31bccddef171a60 Mon Sep 17 00:00:00 2001 From: Jenelyn Castil Contillo <62682071+jenelyn0214@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:02:31 +0800 Subject: [PATCH 0480/1768] Feat: Added Ethereum pools to Wiselending-v2 (#11721) --- projects/wise-lending-v2/index.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/projects/wise-lending-v2/index.js b/projects/wise-lending-v2/index.js index bb9c673262..9d6c1503e4 100644 --- a/projects/wise-lending-v2/index.js +++ b/projects/wise-lending-v2/index.js @@ -1,4 +1,4 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const ADDRESSES = require('../helper/coreAssets.json'); async function tvl(api) { const { lending: lendingContract, tvlAddresses } = config[api.chain]; @@ -12,9 +12,9 @@ async function borrowed(api) { abi: 'function getPseudoTotalBorrowAmount(address) view returns (uint256)', target: lendingContract, calls: borrowAddresses - }) + }); - api.add(borrowAddresses, borrowAmounts) + api.add(borrowAddresses, borrowAmounts); } const aavePools = [ @@ -25,6 +25,16 @@ const aavePools = [ "0x6ab707Aca953eDAeFBc4fD23bA73294241490620", ]; +const wisePools = [ + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.WSTETH, +]; + + const config = { arbitrum: { lending: '0x9034a49587bD2c1Af27598E0f04F30Db66C87Ebf', @@ -32,6 +42,12 @@ const config = { tvlAddresses: aavePools, borrowAddresses: aavePools }, + ethereum: { + lending: '0x78190e4c7C7B2c2C3b0562F1f155a1FC2F5160CA', + feeManager: '0x0bc24e61daad6293a1b3b53a7d01086bff0ea6e5', + tvlAddresses: wisePools, + borrowAddresses: wisePools + }, }; Object.keys(config).forEach(chain => { From 75c2625e8bc2e1bcb45abc0e930fff8f7fc523f9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:45:25 +0200 Subject: [PATCH 0481/1768] Rumpel (#11727) Co-authored-by: Josh Levine Co-authored-by: Josh Levine <24902242+jparklev@users.noreply.github.com> --- projects/helper/tokenMapping.js | 86 ------------------- projects/rumpel/index.js | 117 ++++++++++++++++++++++++++ projects/treasury/k9finance.js | 4 +- utils/scripts/checkFixTokensPriced.js | 34 ++++++++ 4 files changed, 153 insertions(+), 88 deletions(-) create mode 100644 projects/rumpel/index.js create mode 100644 utils/scripts/checkFixTokensPriced.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ede91a25a1..07d985fc41 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,105 +40,19 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, - chainflip: { - Dot: { coingeckoId: 'polkadot', decimals: 10 }, - Usdc: { coingeckoId: 'usd-coin', decimals: 6 }, - Flip: { coingeckoId: 'chainflip', decimals: 18 }, - Btc: { coingeckoId: 'bitcoin', decimals: 8 }, - Eth: { coingeckoId: 'ethereum', decimals: 18 }, - Usdt: { coingeckoId: 'tether', decimals: 6 }, - ArbEth: { coingeckoId: 'ethereum', decimals: 18 }, - ArbUsdc: { coingeckoId: 'usd-coin', decimals: 6 }, - }, - thundercore: { - [ADDRESSES.thundercore.veTT]: { coingeckoId: 'thunder-token', decimals: 18 }, - }, - oasis: { - [ADDRESSES.null]: { coingeckoId: 'oasis-network', decimals: 18 }, - }, heco: { [ADDRESSES.heco.WHT]: { coingeckoId: 'huobi-token', decimals: 18 }, }, base: { [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, }, - ftn: { - [ADDRESSES.ftn.stFTN]: { coingeckoId: 'lolik-staked-ftn', decimals: 18 }, - [ADDRESSES.ftn.mUSDC]: { coingeckoId: 'usd-coin', decimals: 6 }, - [ADDRESSES.ftn.mUSDT]: { coingeckoId: 'tether', decimals: 6 }, - }, op_bnb: { [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, - [ADDRESSES.op_bnb.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, - [ADDRESSES.base.DAI]: { coingeckoId: 'first-digital-usd', decimals: 18 }, - }, - optimism: { - [ADDRESSES.optimism.weETH]: { coingeckoId: 'wrapped-eeth', decimals: 18 }, - [ADDRESSES.optimism.ezETH]: { coingeckoId: "renzo-restaked-eth", decimals: 18 }, - }, - moonriver: { - [ADDRESSES.moonriver.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, - }, - zircuit: { - [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, - }, - islm: { - [ADDRESSES.islm.USDC]: { coingeckoId: 'usd-coin', decimals: 6 }, - }, - cronos_zkevm: { - [ADDRESSES.cronos_zkevm.wzkCRO]: { coingeckoId: 'crypto-com-chain', decimals: 18 }, - [ADDRESSES.cronos_zkevm.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, }, lac: { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, - [ADDRESSES.lac.WETH]: { coingeckoId: "ethereum", decimals: 18 }, - [ADDRESSES.lac.WBTC]: { coingeckoId: "wrapped-bitcoin", decimals: 8 }, - }, - blast: { - '0xf8a5d147a3a3416ab151758d969eff15c27ab743': { coingeckoId: "blast:0x59c159e5a4f4d1c86f7abdc94b7907b7473477f6", decimals: 0 }, - }, - noble: { - [ADDRESSES.noble.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, - [ADDRESSES.noble.USDY]: { coingeckoId: "ondo-us-dollar-yield", decimals: 18 }, - }, - q: { - [ADDRESSES.q.WQ]: { coingeckoId: "q-protocol", decimals: 18 }, - }, - taiko: { - [ADDRESSES.taiko.DAI]: { coingeckoId: "dai", decimals: 18 }, - }, - neox: { - [ADDRESSES.null]: { coingeckoId: "gas", decimals: 18 }, - [ADDRESSES.neox.WGAS]: { coingeckoId: "gas", decimals: 18 }, - [ADDRESSES.neox.WGAS_1]: { coingeckoId: "gas", decimals: 18 }, - }, - aura: { - [ADDRESSES.null]: { coingeckoId: "aura-network", decimals: 18 }, - '0xDE47A655a5d9904BD3F7e1A536D8323fBD99993A': { coingeckoId: "aura-network", decimals: 18 }, - [ADDRESSES.functionx.WFX]: { coingeckoId: "tether", decimals: 6 }, - }, - gravity: { - [ADDRESSES.null]: { coingeckoId: "g-token", decimals: 18 }, - [ADDRESSES.gravity.wG]: { coingeckoId: "g-token", decimals: 18 }, - [ADDRESSES.gravity.WETH]: { coingeckoId: "ethereum", decimals: 18 }, - [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, - }, - idex: { - [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, - }, - xdai: { - '0x6c76971f98945ae98dd7d4dfca8711ebea946ea6': { coingeckoId: "wrapped-steth", decimals: 18 }, - [ADDRESSES.xdai.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, - }, - etn: { - [ADDRESSES.etn.WETN]: { coingeckoId: "electroneum", decimals: 18 } }, - polynomial: { - [ADDRESSES.polynomial.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, - [ADDRESSES.polynomial.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, - [ADDRESSES.polynomial.sUSDe]: { coingeckoId: "ethena-staked-usde", decimals: 18 }, - } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/rumpel/index.js b/projects/rumpel/index.js new file mode 100644 index 0000000000..27c6607c6c --- /dev/null +++ b/projects/rumpel/index.js @@ -0,0 +1,117 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { getLogs2 } = require("../helper/cache/getLogs") + +const CONTRACTS = { + RUMEPL_POINT_TOKENIZATION_VAULT: "0xe47F9Dbbfe98d6930562017ee212C1A1Ae45ba61", + RUMPEL_WALLET_FACTORY: "0x5774abcf415f34592514698eb075051e97db2937", + ETHENA_LP_STAKING: "0x8707f238936c12c309bfc2B9959C35828AcFc512", + MORPHO_BLUE: "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb", + ZIRCUIT_RESTAKING_POOL: "0xF047ab4c75cebf0eB9ed34Ae2c186f3611aEAfa6", +}; + +const DEPLOYMENT = { + RUMPEL_WALLET_FACTORY: { + block: 20696108, + timestamp: 1725680627000, + }, +}; + +const TOKENS = { + AGETH: "0xe1B4d34E8754600962Cd944B535180Bd758E6c2e", + SUSDE: ADDRESSES.ethereum.sUSDe, + USDE: ADDRESSES.ethereum.USDe, + WSTETH: ADDRESSES.ethereum.WSTETH, + WEETH: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", + WEETHS: "0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88", + MSTETH: "0x49446A0874197839D15395B908328a74ccc96Bc0", + STETH: ADDRESSES.ethereum.STETH, + RSUSDE: "0x82f5104b23FF2FA54C2345F821dAc9369e9E0B26", + RSTETH: "0x7a4effd87c2f3c55ca251080b1343b605f327e3a", + KUSDE: "0xBE3cA34D0E877A1Fc889BD5231D65477779AFf4e", + KWEETH: "0x2DABcea55a12d73191AeCe59F508b191Fb68AdaC", + DC_WSTETH_COLLATERAL: "0xC329400492c6ff2438472D4651Ad17389fCb843a", + DC_SUSDE_COLLATERAL: "0x19d0D8e6294B7a04a2733FE433444704B791939A", +}; + +const MORPHO_SUSDE_MARKET_ID = + "0x39d11026eae1c6ec02aa4c0910778664089cdd97c3fd23f68f7cd05e2e95af48"; + +async function tvl(api) { + const owners = await getOwners(api); + + await Promise.all([sumBaseTokens, handleLockedUSDE, handleMorphoSuppliedSUSDE, handleZircuitAssets, handleStrategyTokenBalances].map(async (fn) => fn())); + + async function sumBaseTokens() { + return api.sumTokens({ + owners, tokens: [TOKENS.AGETH, TOKENS.WEETH, TOKENS.USDE, TOKENS.SUSDE, TOKENS.MSTETH, TOKENS.WSTETH, TOKENS.STETH,] + }) + } + + + async function handleLockedUSDE() { + const stakes = await api.multiCall({ + target: CONTRACTS.ETHENA_LP_STAKING, + abi: "function stakes(address,address) view returns (uint256 amount,uint152,uint104)", + calls: owners.map((owner) => ({ params: [owner, TOKENS.USDE] })), + }); + api.add(TOKENS.USDE, stakes.map(i => i.amount)) + } + + async function handleMorphoSuppliedSUSDE() { + const positions = await api.multiCall({ + target: CONTRACTS.MORPHO_BLUE, + abi: "function position(bytes32,address) view returns (uint256,uint128,uint128 amount)", + calls: owners.map((owner) => ({ params: [MORPHO_SUSDE_MARKET_ID, owner] })), + }); + api.add(TOKENS.USDE, positions.map(i => i.amount)) + } + + async function handleZircuitAssets() { + const assets = [TOKENS.WEETH, TOKENS.WEETHS, TOKENS.USDE, TOKENS.MSTETH] + const calls = [] + for (const asset of assets) + for (const owner of owners) + calls.push({ params: [asset, owner] }) + const tokens = calls.map(i => i.params[0]) + const bals = await api.multiCall({ target: CONTRACTS.ZIRCUIT_RESTAKING_POOL, abi: "function balance(address,address) view returns (uint256)", calls, }); + api.add(tokens, bals) + } + + async function handleStrategyTokenBalances() { + const tokens = [ + TOKENS.KWEETH, + TOKENS.KUSDE, + TOKENS.DC_WSTETH_COLLATERAL, + TOKENS.DC_SUSDE_COLLATERAL, + TOKENS.MSTETH, + TOKENS.RSUSDE, + TOKENS.RSTETH, + ] + return api.sumTokens({ owners, tokens }) + } +} + +async function getOwners(api) { + const logs = await getLogs2({ + api, + target: CONTRACTS.RUMPEL_WALLET_FACTORY, + topic: "SafeCreated(address,address[],uint256)", + eventAbi: + "event SafeCreated(address indexed safe, address[] indexed owners, uint256 threshold)", + fromBlock: DEPLOYMENT.RUMPEL_WALLET_FACTORY.block, + }); + return logs + .map((log) => log.safe) + .concat(CONTRACTS.RUMEPL_POINT_TOKENIZATION_VAULT); +} + + + +module.exports = { + methodology: + "Sums up the supported tokens in Rumpel Wallets + Deposits in the Rumpel Point Tokenization Vault", + start: DEPLOYMENT.RUMPEL_WALLET_FACTORY.timestamp, + ethereum: { + tvl, + }, +}; diff --git a/projects/treasury/k9finance.js b/projects/treasury/k9finance.js index 40adc17154..2622ebfd21 100644 --- a/projects/treasury/k9finance.js +++ b/projects/treasury/k9finance.js @@ -1,4 +1,4 @@ -const { token } = require("@project-serum/anchor/dist/cjs/utils"); +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xDA4Df6E2121eDaB7c33Ed7FE0f109350939eDA84"; @@ -11,7 +11,7 @@ module.exports = treasuryExports({ ownTokens: ["0x91fbb2503ac69702061f1ac6885759fc853e6eae"] }, shibarium: { - tokens: [nullAddress,"0x839fdb6cc98342b428e074c1573adf6d48ca3bfd"], + tokens: [nullAddress,ADDRESSES.shibarium.BONE_5], owners: [shibtreasury], ownTokens: ["0x91fbB2503AC69702061f1AC6885759Fc853e6EaE"] }, diff --git a/utils/scripts/checkFixTokensPriced.js b/utils/scripts/checkFixTokensPriced.js new file mode 100644 index 0000000000..da8b955b90 --- /dev/null +++ b/utils/scripts/checkFixTokensPriced.js @@ -0,0 +1,34 @@ +const { fixBalancesTokens } = require("../../projects/helper/tokenMapping") +const axios = require('axios') + + +async function run() { + let allTokens = [] + const tokensMissingPrice = [] + const tokensWithPrice = [] + const tokenSet = new Set() + Object.entries(fixBalancesTokens).forEach(([chain, tokens]) => { + Object.keys(tokens).forEach(token => { + const key = chain+':'+token + if (!tokenSet.has(key.toLowerCase())) { // ignore duplicates + tokenSet.add(key.toLowerCase()) + allTokens.push(key) + } + }) + }) + const burl = 'https://coins.llama.fi/prices/current/'+allTokens.join(',') + const prices = (await axios.get(burl)).data.coins + + allTokens.forEach(token => { + if (!prices[token]) { + tokensMissingPrice.push(token) + } else { + tokensWithPrice.push(token) + } + }) + + console.log('Tokens with price:', tokensWithPrice, tokensWithPrice.length) + console.log('Tokens missing price:', tokensMissingPrice, tokensMissingPrice.length) +} + +run().catch(console.error).then(() => process.exit(0)) \ No newline at end of file From 8c66ac3aa278a012e8a8c7455a144ded5b05ab80 Mon Sep 17 00:00:00 2001 From: harold-awaken <167839386+harold-awaken@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:51:26 +0800 Subject: [PATCH 0482/1768] Upgrade Awaken's Indexer to v2 (#11724) --- projects/awaken/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/awaken/index.js b/projects/awaken/index.js index b40ea52d2c..94db172ccb 100644 --- a/projects/awaken/index.js +++ b/projects/awaken/index.js @@ -2,7 +2,7 @@ const { request, gql } = require("graphql-request"); const { toUSDTBalances } = require("../helper/balances"); const GRAPH_QUERY = gql` - query get_tvl($dto: GetTotalValueLockedDto) { + query get_tvl($dto: GetTotalValueLockedDto!) { totalValueLocked(dto: $dto) { value } @@ -32,7 +32,7 @@ function getChainTvl(graphUrls) { } const v2graph = getChainTvl({ - aelf: "https://dapp.awaken.finance/AElfIndexer_Swap/SwapIndexerSchema/graphql", + aelf: "https://app.aefinder.io/awaken/995f8e7e957d43d6b1706a4e351e2e47/graphql", }); module.exports = { From 14ff594a945bf227760f7da540cf57db6a726f37 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:14:54 +0200 Subject: [PATCH 0483/1768] aave v3: track zksync era --- projects/aave/v3.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/projects/aave/v3.js b/projects/aave/v3.js index 302270d49b..02f47848d7 100644 --- a/projects/aave/v3.js +++ b/projects/aave/v3.js @@ -18,6 +18,8 @@ function v3(chain) { params = ['0xFBedc64AeE24921cb43004312B9eF367a4162b57', undefined, ['0xa99F4E69acF23C6838DE90dD1B5c02EA928A53ee']] else if (chain === 'bsc') params = ['0x117684358D990E42Eb1649E7e8C4691951dc1E71', undefined, ['0x41585C50524fb8c3899B43D7D797d9486AAc94DB']] + else if (chain === 'era') + params = ['0x0753E3637ddC6efc40759D9c347251046644F25F', undefined, ['0x48B96565291d1B23a014bb9f68E07F4B2bb3Cd6D']] const section = borrowed => aaveChainTvl(chain, ...params, borrowed, true); return { tvl: section(false), @@ -28,13 +30,14 @@ function v3(chain) { module.exports = mergeExports({ methodology: methodologies.lendingMarket, avax: v3("avax"), - ...["optimism", "fantom", "harmony", "arbitrum", "polygon", "ethereum", "metis", "base", "xdai", "scroll", "bsc"].reduce((t, c) => ({ ...t, [c]: v3(c) }), {}), - hallmarks: [ - [1659630089, "Start OP Rewards"], - [1650471689, "Start AVAX Rewards"] - ], + ...["optimism", "fantom", "harmony", "arbitrum", "polygon", "ethereum", "metis", "base", "xdai", "scroll", "bsc", "era"].reduce((t, c) => ({ ...t, [c]: v3(c) }), {}), }, { // Lido pool ethereum: aaveExports(undefined, "0x770ef9f4fe897e59daCc474EF11238303F9552b6", undefined, ["0xa3206d66cF94AA1e93B21a9D8d409d6375309F4A"], { v3: true, }), }); + +module.exports.hallmarks = [ + [1659630089, "Start OP Rewards"], + [1650471689, "Start AVAX Rewards"] +] // node test.js projects/aave/index.js From ece620d01be901e0a4a9e0c7924cf08ae1432a55 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:22:32 +0200 Subject: [PATCH 0484/1768] refactor imBTC --- projects/imbtc.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/projects/imbtc.js b/projects/imbtc.js index 7d80f59ec1..65dbf6ae6d 100644 --- a/projects/imbtc.js +++ b/projects/imbtc.js @@ -1,11 +1,14 @@ - -async function tvl(api) { - const imBTC = '0x3212b29E33587A00FB1C83346f5dBFA69A458923' - const supply = await api.call({ abi: 'erc20:totalSupply', target: imBTC }) - api.add(imBTC, supply) -} +const { sumTokens } = require('./helper/chain/bitcoin') module.exports = { - ethereum: { tvl }, - methodology: `TVL for imBTC consists of the BTC deposits in custody that were used to mint imBTC` + ethereum: { tvl: () => ({}) }, + bitcoin: { + tvl: () => sumTokens({ + owners: ['3JMjHDTJjKPnrvS7DycPAgYcA6HrHRk8UG', '3GH4EhMi1MG8rxSiAWqfoiUCMLaWPTCxuy'], + }) + }, + methodology: `TVL for imBTC consists of the BTC deposits in custody that were used to mint imBTC`, + hallmarks: [ + [Math.floor(new Date('2024-01-31') / 1e3), 'Project ceases operation'], + ], } From 68b18920bbbdfaafc7810c755ff0db80aaea5504 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:47:37 +0200 Subject: [PATCH 0485/1768] Multibit (#11644) Co-authored-by: pipi-multibit --- projects/multibit/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/multibit/index.js b/projects/multibit/index.js index a5b461cea9..1ccc38fcc2 100644 --- a/projects/multibit/index.js +++ b/projects/multibit/index.js @@ -7,9 +7,10 @@ const BRIDGE_TOKENS = "https://api.multibit.exchange/support/token"; const config = { // https://app.multibit.exchange/staking - ethereum: { stakingPool: "0x2EDfFbc62C3dfFD2a8FbAE3cd83A986B5bbB5495", tokens: [ADDRESSES.null, ADDRESSES.ethereum.USDT] }, + ethereum: { stakingPool: "0x2EDfFbc62C3dfFD2a8FbAE3cd83A986B5bbB5495", tokens: [ADDRESSES.null, ADDRESSES.ethereum.USDT], chainKey: 'eth' }, bsc: {}, polygon: {}, + bouncebit: { chainKey: 'bb'}, } module.exports = { methodology: `Tokens bridged via MultiBit are counted as TVL`, @@ -20,18 +21,17 @@ module.exports = { 'bc1pyyms2ssr0hagy5j50r5n689e6ye0626v3c98j5fw0jk6tz3vrgts7nt56g', // cold wallet 'bc1qmcrpqanjnrw58y0fvq08fqchgxv5aylctew7vxlkalfns3rpedxsx4hxpu', // cold wallet ], - blacklistedTokens: ['MUBI', 'BSSB'] + blacklistedTokens: ['MUBI', 'BSSB', 'savm'] // more SAVM is bridged than circulating supply according to coingecko & etherscan }), }, } Object.keys(config).forEach(chain => { - const { stakingPool, tokens = [ADDRESSES.null] } = config[chain] + const { stakingPool, tokens = [ADDRESSES.null], chainKey = chain } = config[chain] module.exports[chain] = { tvl: async (api) => { const data = await getConfig('multibit', BRIDGE_TOKENS) - const key = chain === 'ethereum' ? 'eth': chain - const owner = data.find(v => v.chain === key)?.real?.contract + const owner = data.find(v => v.chain === chainKey)?.real?.contract if (!owner) return {} return api.sumTokens({ owner, tokens, }) } From 78fecf3257d5b53c86ff0ed473b6953a8a51897d Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:50:57 +0200 Subject: [PATCH 0486/1768] Fix: Darkcrypto (masterChef logic) (#11729) --- projects/darkcrypto/farm-utils.js | 112 ++++++++---------------------- projects/darkcrypto/index.js | 31 +-------- 2 files changed, 33 insertions(+), 110 deletions(-) diff --git a/projects/darkcrypto/farm-utils.js b/projects/darkcrypto/farm-utils.js index 22195222b3..c6e9c73711 100644 --- a/projects/darkcrypto/farm-utils.js +++ b/projects/darkcrypto/farm-utils.js @@ -1,90 +1,38 @@ -const sdk = require('@defillama/sdk'); -const BigNumber = require('bignumber.js'); -const farmCronos = require('./farm-cronos.json'); +const abi = { + getReserves: "function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)", + poolInfo: "function poolInfo(uint256) view returns (address token, uint256 allocPoint, uint256 lastRewardTime, uint256 accSkyPerShare, bool isStarted)" +} -const farmLPBalance = async ( - chain, - block, - masterChef, - lpToken, - token0, - token1, -) => { - const balances = ( - await sdk.api.abi.multiCall({ - abi: 'erc20:balanceOf', - calls: [ - { - target: token0, - params: [lpToken], - }, - { - target: token1, - params: [lpToken], - }, - { - target: lpToken, - params: [masterChef], - }, - ], - block, - chain: chain, - }) - ).output; - - const lpTotalSuply = ( - await sdk.api.abi.call({ - target: lpToken, - abi: 'erc20:totalSupply', - chain: chain, - block, - }) - ).output; - const token0Locked = (balances[2].output * balances[0].output) / lpTotalSuply; - const token1Locked = (balances[2].output * balances[1].output) / lpTotalSuply; - return [ - { token: `${chain}:${token0}`, locked: token0Locked }, - { token: `${chain}:${token1}`, locked: token1Locked }, - ]; -}; +const pool2Balances = async (api, masterChef) => { + const calls = Array.from({ length: 9 }, (_, i) => ({ target: masterChef, params: [i] })); + const poolsInfos = await api.multiCall({ calls, abi: abi.poolInfo }) + const pools = poolsInfos.map(({ token }) => token) + const [token0s, token1s, balances, reserves, supplies] = await Promise.all([ + api.multiCall({ calls: pools.map((p) => ({ target: p })), abi: 'address:token0', permitFailure: true }), + api.multiCall({ calls: pools.map((p) => ({ target: p })), abi: 'address:token1', permitFailure: true }), + api.multiCall({ calls: pools.map((p) => ({ target: p, params: [masterChef] })), abi: 'erc20:balanceOf', permitFailure:true }), + api.multiCall({ calls: pools.map((p) => ({ target: p })), abi: abi.getReserves, permitFailure:true }), + api.multiCall({ calls: pools.map((p) => ({ target: p })), abi: 'erc20:totalSupply', permitFailure:true }) + ]) -const farmLocked = async (block) => { - const balances = {}; - const tokens = farmCronos.tokens; + pools.forEach((_, i) => { + const token0 = token0s[i] + const token1 = token1s[i] + const balance = balances[i] + const reserve = reserves[i] + const supply = supplies[i] + if (!token0 || !token1 || !balance || !reserve || !supply) return - const allPools = farmCronos.farms - .map((t) => { - return t.pools.map((pool) => { - return Object.assign(pool, { - masterChef: t.masterChef, - }); - }); - }) - .reduce((acc, current) => [...acc, ...current], []); - const promises = allPools.map((item) => { - return farmLPBalance( - 'cronos', - block, - item.masterChef, - item.lpToken, - tokens[item.token0], - tokens[item.token1], - ); - }); + const _balance0 = Math.round(reserve[0] * balance / supply) + const _balance1 = Math.round(reserve[1] * balance / supply) - const data = await Promise.all(promises); - data.forEach((farm) => { - farm.forEach((item) => { - balances[item.token] = new BigNumber(balances[item.token] || 0) - .plus(item.locked || 0) - .toFixed(0); - }); - }); + api.add(token0, _balance0) + api.add(token1, _balance1) + }) +} - return balances; -}; module.exports = { - farmLocked, -}; + pool2Balances +} \ No newline at end of file diff --git a/projects/darkcrypto/index.js b/projects/darkcrypto/index.js index 9dc85c189b..895db318fd 100644 --- a/projects/darkcrypto/index.js +++ b/projects/darkcrypto/index.js @@ -1,34 +1,10 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { stakingUnknownPricedLP } = require("../helper/staking"); -const farmUtils = require("./farm-utils"); const vaultUtils = require("./vault-utils") +const { pool2Balances } = require("./farm-utils"); -const sdk = require("@defillama/sdk"); const sky = "0x9D3BBb0e988D9Fb2d55d07Fe471Be2266AD9c81c"; const boardroom = "0x2e7d17ABCb9a2a40ec482B2ac9a9F811c12Bf630"; - - -async function pool2(timestamp, block, chainBlocks) { - // SKY POOL - const farmTvl = await farmUtils.farmLocked(chainBlocks["cronos"]); - let balances = {}; - - //add CRO balance in LP pool - sdk.util.sumSingleBalance( - balances, - "cronos:" + ADDRESSES.cronos.WCRO_1, - farmTvl["cronos:" + ADDRESSES.cronos.WCRO_1] - ); - - //add Dark and Sky balance in LP pool - sdk.util.sumSingleBalance( - balances, - "cronos:" + ADDRESSES.cronos.WCRO_1, - farmTvl["cronos:" + ADDRESSES.cronos.WCRO_1], - ); - - return balances; -} +const masterChef = "0x42B652A523367e7407Fb4BF2fA1F430781e7db8C" async function vault(api){ return vaultUtils.vaultLocked(api) @@ -38,13 +14,12 @@ module.exports = { doublecounted: true, cronos: { tvl:vault, - pool2, + pool2: (api) => pool2Balances(api, masterChef), staking: stakingUnknownPricedLP( boardroom, sky, "cronos", "0xaA0845EE17e4f1D4F3A8c22cB1e8102baCf56a77" ), - }, }; From 12ea3af7d501b9b6ebbed6005c2fc1a6866e707b Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:51:24 +0200 Subject: [PATCH 0487/1768] Fix: Knit-finance (outdated) (#11725) --- projects/knitfinance/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/knitfinance/index.js b/projects/knitfinance/index.js index c3adaaece5..56a821106a 100644 --- a/projects/knitfinance/index.js +++ b/projects/knitfinance/index.js @@ -52,6 +52,7 @@ module.exports = { function addChain(chain) { module.exports[chain] = { + deadFrom: "2023-02-01", tvl: async () => { const balances = {} const key = chainConfig[chain]; From fab91387735009cc8bd4cb0ba51d6218c284f73c Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Tue, 24 Sep 2024 14:00:28 +0400 Subject: [PATCH 0488/1768] Add new pool for EVAA (#11728) --- projects/evaa/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/evaa/index.js b/projects/evaa/index.js index 1913a9c214..2616a62cc1 100644 --- a/projects/evaa/index.js +++ b/projects/evaa/index.js @@ -1,11 +1,12 @@ const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const evaaScAddr = "EQC8rUZqR_pWV1BylWUlPNBzyiTYVoBEmQkMIQDZXICfnuRr" +const evaaMainPool = "EQC8rUZqR_pWV1BylWUlPNBzyiTYVoBEmQkMIQDZXICfnuRr" +const evaaLpPool = "EQBIlZX2URWkXCSg3QF2MJZU-wC5XkBoLww-hdWk2G37Jc6N" module.exports = { methodology: 'Counts EVAA smartcontract balance as TVL.', ton: { - tvl: sumTokensExport({ owner: evaaScAddr, tokens: [ADDRESSES.null]}), + tvl: sumTokensExport({ owners: [evaaMainPool, evaaLpPool], tokens: [ADDRESSES.null]}), } } From 93044ca65b34101a62fe563719752252d8574c41 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:39:40 +0200 Subject: [PATCH 0489/1768] Fix: KnitFinance, small fix (#11734) --- projects/knitfinance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/knitfinance/index.js b/projects/knitfinance/index.js index 56a821106a..81226c1fbc 100644 --- a/projects/knitfinance/index.js +++ b/projects/knitfinance/index.js @@ -51,8 +51,8 @@ module.exports = { }; function addChain(chain) { + module.exports.deadFrom = "2023-02-01" module.exports[chain] = { - deadFrom: "2023-02-01", tvl: async () => { const balances = {} const key = chainConfig[chain]; From 43406fca5047087cef08d9c8755509f01f52e6ba Mon Sep 17 00:00:00 2001 From: Aymen <146243083+aymentrosh@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:55:40 +0100 Subject: [PATCH 0490/1768] added fraxtal to karak (#11730) --- projects/karak/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/karak/index.js b/projects/karak/index.js index 4596dcbd6e..3cd0de8cf0 100644 --- a/projects/karak/index.js +++ b/projects/karak/index.js @@ -7,6 +7,7 @@ const config = { mantle: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD', }, bsc: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD', }, blast: { factory: '0x58b5dc145ca2BE84fe087614CFe36055be609BB3', }, + fraxtal: { factory: '0xdF922c74CC0dc394022ea002Af5aFaa32348670e', }, } Object.keys(config).forEach(chain => { From 3ae3547842c5af5a82e48b52cfa54e68c4e0700d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:18:12 +0200 Subject: [PATCH 0491/1768] Filament (#11735) Co-authored-by: rajeebkm --- projects/filament/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/filament/index.js diff --git a/projects/filament/index.js b/projects/filament/index.js new file mode 100644 index 0000000000..e4970b23ae --- /dev/null +++ b/projects/filament/index.js @@ -0,0 +1,10 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const USDC_CONTRACT = '0x3894085Ef7Ff0f0aeDf52E2A2704928d1Ec074F1'; +const FILAMENT_VAULT_CONTRACT = '0xbeB6A6273c073815eBe288d2dF4e5E8bc027DA11'; + +module.exports = { + sei: { + tvl: sumTokensExport({ owner: FILAMENT_VAULT_CONTRACT, tokens: [USDC_CONTRACT] }), + }, +} From 6275f68cafa1f1113497afcbafdc010086d5ed84 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:19:30 +0200 Subject: [PATCH 0492/1768] Fix: Stargate (#11732) --- projects/stargatefinance/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/projects/stargatefinance/index.js b/projects/stargatefinance/index.js index 3abc684a85..273babb7ad 100644 --- a/projects/stargatefinance/index.js +++ b/projects/stargatefinance/index.js @@ -63,11 +63,12 @@ const CONFIG = { module.exports = { goerli: { - tvl: async (api) => { - return { - [ADDRESSES.ethereum.WETH]: await api.call({ abi: 'erc20:balanceOf', target: '0xdD69DB25F6D620A7baD3023c5d32761D353D3De9', params: ['0x88124ef4a9ec47e691f254f2e8e348fd1e341e9b'], }), - } - }, + tvl: () => ({}) + // tvl: async (api) => { + // return { + // [ADDRESSES.ethereum.WETH]: await api.call({ abi: 'erc20:balanceOf', target: '0xdD69DB25F6D620A7baD3023c5d32761D353D3De9', params: ['0x88124ef4a9ec47e691f254f2e8e348fd1e341e9b'], }), + // } + // }, }, } From 4313fce45a89f7ea2303fae4519dfb8b7d348d50 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:19:40 +0200 Subject: [PATCH 0493/1768] Fix: Ampleswap (#11733) --- projects/ampleswap/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/ampleswap/index.js b/projects/ampleswap/index.js index 77bd25892b..085021d75d 100644 --- a/projects/ampleswap/index.js +++ b/projects/ampleswap/index.js @@ -12,5 +12,6 @@ module.exports = { staking: staking(MasterChefContract, AMPLE), }, alv: { tvl: getUniTVL({ factory: '0x01dC97C89DF7d3C616a696dD53F600aB3FF12983', useDefaultCoreAssets: true }), }, - dsc: { tvl: getUniTVL({ factory: '0x232Ba9f3B3643ab28d28ED7ee18600708D60E5fe', useDefaultCoreAssets: true, }), }, + dsc: { tvl: () => ({}) } + // dsc: { tvl: getUniTVL({ factory: '0x232Ba9f3B3643ab28d28ED7ee18600708D60E5fe', useDefaultCoreAssets: true, }), }, }; From ca344bb44cc5e8e55dd6b0742a41e23965572627 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:35:06 +0200 Subject: [PATCH 0494/1768] minor fix --- projects/y2b-finance/index.js | 29 ++--------------------------- test.js | 1 + 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/projects/y2b-finance/index.js b/projects/y2b-finance/index.js index bd0b88b5be..7863274132 100644 --- a/projects/y2b-finance/index.js +++ b/projects/y2b-finance/index.js @@ -1,34 +1,9 @@ -const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') -const { getLogs } = require('../helper/cache/getLogs') -const { deadFrom } = require('../mosquitos-finance') - -async function tvl(api) { - const logs = await getLogs({ - api, - fromBlock: 16310967, - eventAbi: 'event MarketCreated(uint256 indexed mIndex, address hedge, address risk, address token, string name, int256 strikePrice)', - topics: ['0xf38f00404415af51ddd0dd57ce975d015de2f40ba8a087ac48cd7552b7580f32'], - target: '0xF33C13DA4425629C3F10635E4f935D8020F97D1f', - }) - - const vaults = logs.map(({ args }) => ([args.hedge, args.risk])).flat() - const tokens = await api.multiCall({ - abi: 'address:asset', - calls: vaults, - }) - const tokensAndOwners = tokens.map((token, i) => ([token, vaults[i]])) - - return sumTokens2({ api, tokensAndOwners }) -} - - module.exports = { hallmarks: [ [1673913600, "Rug Pull"] ], deadFrom: 1673913600, - ethereum: { - tvl, - // staking: sumTokensExport({ owners: [], tokens: ['0xF9C12B27cE5058ab98ce11BD53900f84E18C0650']}) + ethereum: { + tvl: () => ({}), } } diff --git a/test.js b/test.js index f56af30940..29cab073d7 100644 --- a/test.js +++ b/test.js @@ -261,6 +261,7 @@ function checkExportKeys(module, filePath, chains) { || (filePath.length === 2 && !(['api.js', 'index.js', 'apiCache.js',].includes(filePath[1]) // matches .../projects/projectXYZ/index.js || ['treasury', 'entities'].includes(filePath[0]) // matches .../projects/treasury/project.js + || /v\d+\.js$/.test(filePath[1]) // matches .../projects/projectXYZ/v1.js ))) process.exit(0) From 0f4180002e82b231c68acb6e7245053af786b7c8 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Sep 2024 20:04:21 +0200 Subject: [PATCH 0495/1768] track moonthat.gg tvl --- projects/moonthat-gg/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/moonthat-gg/index.js diff --git a/projects/moonthat-gg/index.js b/projects/moonthat-gg/index.js new file mode 100644 index 0000000000..4c30d858d7 --- /dev/null +++ b/projects/moonthat-gg/index.js @@ -0,0 +1,22 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') +const { getLogs2 } = require('../helper/cache/getLogs') + +const config = { + ethereum: { factory: '0x966983F93309D726a888adff08331ac81b522971', fromBlock: 20815952 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event CommunityLaunchCreated (address indexed singleton, bytes32 indexed coinId, address indexed proxy)', fromBlock, }) + const proxies = logs.map(log => log.proxy) + await api.sumTokens({ tokens: [ADDRESSES.null], owners: proxies }) // add ETH deposited to initial pool + const tokens = await api.multiCall({ abi: 'address:tokenAddress', calls: proxies }) + const utilities = await api.multiCall({ abi: 'address:MOONTHAT_UNISWAP_V3_UTILITY', calls: proxies }) + const vaults = await api.multiCall({ abi: 'address:moonThatUniswapV3Vault', calls: utilities }) + return sumTokens2({ api, owners: vaults, resolveUniV3: true, blacklistedTokens: tokens }) + } + } +}) \ No newline at end of file From be1d01ec2eea955335a762a462b10e7eea412897 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 25 Sep 2024 10:13:41 +0100 Subject: [PATCH 0496/1768] add onyx post hack --- projects/onyx-v2/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/onyx-v2/index.js diff --git a/projects/onyx-v2/index.js b/projects/onyx-v2/index.js new file mode 100644 index 0000000000..2af4a93b41 --- /dev/null +++ b/projects/onyx-v2/index.js @@ -0,0 +1,5 @@ +const { compoundExports2 } = require('../helper/compound'); + +module.exports = { + ethereum: compoundExports2({ comptroller: "0xcC53F8fF403824a350885A345ED4dA649e060369", cether: "0x2ccb7d00a9e10d0c3408b5eefb67011abfacb075"}), +}; From 79860a16bb0d67d1a4d2a6353bafed43b66dd201 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:23:21 +0200 Subject: [PATCH 0497/1768] track bybit sol --- projects/bybitSOL/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/bybitSOL/index.js diff --git a/projects/bybitSOL/index.js b/projects/bybitSOL/index.js new file mode 100644 index 0000000000..d1c4d1c48f --- /dev/null +++ b/projects/bybitSOL/index.js @@ -0,0 +1,13 @@ + +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('2aMLkB5p5gVvCwKkdSo5eZAL1WwhZbxezQr1wxiynRhq', api) +} + +module.exports = { + timetravel: false, + solana: { + tvl + } +} \ No newline at end of file From dc82f2d652cfc496732962fab030d9afd39b58fa Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 18:09:27 +0200 Subject: [PATCH 0498/1768] add logx staking --- projects/logx-v2/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index b02601e371..bae5af35ad 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -1,3 +1,5 @@ +const { staking } = require('../helper/staking') + module.exports = { methodology: "Tokens locked in HypCollateral contracts on different chains.", } @@ -17,4 +19,6 @@ Object.keys(config).forEach(chain => { return api.sumTokens({ tokensAndOwners2: [tokens, vault] }) } } -}) \ No newline at end of file +}) + +module.exports.arbitrum.staking = staking('0x89E86f7d2398e8C1070d321D18c1Ce75aBF09b75', '0x59062301Fb510F4ea2417B67404CB16D31E604BA') \ No newline at end of file From 526b1c545d66342141bb3daf99f4000edab4656e Mon Sep 17 00:00:00 2001 From: Dan Hsu Date: Thu, 26 Sep 2024 03:10:57 +0800 Subject: [PATCH 0499/1768] Update TVL (#11747) --- projects/bucket-protocol/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index 1c69565b56..acf1fb3b23 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -3,6 +3,7 @@ const sui = require("../helper/chain/sui"); const MAINNET_PROTOCOL_ID = "0x9e3dab13212b27f5434416939db5dec6a319d15b89a84fd074d03ece6350d3df"; + const SUI = ADDRESSES.sui.SUI; const BUCK = ADDRESSES.sui.BUCK; const USDC = ADDRESSES.sui.USDC; const USDT = ADDRESSES.sui.USDT; @@ -70,6 +71,8 @@ const scallop_sUSDT_LP_ID = const haSUI_Navi_Pond_ID = "0xef1ff1334c1757d8e841035090d34b17b7aa3d491a3cb611319209169617518e" +const SUI_Navi_Pond_ID = "0xcf887d7201c259496a191348da86b4772a2e2ae3f798ca50d1247194e30b7656"; + async function getStakingLPAmount(id) { const stakingLPObject = await sui.getObject(id); return stakingLPObject.fields.output_volume; @@ -246,6 +249,12 @@ async function tvl(api) { haSuiNaviPondAmount ); + const suiNaviPondAmount = await getStakingLPAmount(SUI_Navi_Pond_ID); + api.add( + SUI, + suiNaviPondAmount + ); + const scallopUSDC_LPAmount = await getScallopsLPAmount(scallop_sUSDC_LP_ID); api.add(USDC, scallopUSDC_LPAmount); From 355d340773537535770b6dd89097673ba9cdd176 Mon Sep 17 00:00:00 2001 From: Shokker <78864496+rcheiko@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:12:46 +0200 Subject: [PATCH 0500/1768] =?UTF-8?q?fix:=F0=9F=92=A5breaking=20change=20o?= =?UTF-8?q?n=20the=20API=20-=20update=20symbol=20(#11746)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/liqwid/index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/projects/liqwid/index.js b/projects/liqwid/index.js index bf61464582..9a251c1e71 100644 --- a/projects/liqwid/index.js +++ b/projects/liqwid/index.js @@ -40,11 +40,9 @@ const query = `query($input: MarketsInput) { page pagesCount results { + id asset { id - symbol - qTokenName - qTokenCurrencySymbol currencySymbol name decimals @@ -61,13 +59,13 @@ const query = `query($input: MarketsInput) { ` const tokenMapping = { - ADA: 'lovelace', + Ada: 'lovelace', DJED: '8db269c3ec630e06ae29f74bc39edd1f87c819f1056206e879a1cd61446a65644d6963726f555344', DAI: 'dai', } -const getToken = (market) => tokenMapping[market.asset.symbol] ?? market.asset.currencySymbol + toHex(market.asset.name) +const getToken = (market) => tokenMapping[market.id] ?? market.asset.currencySymbol + toHex(market.asset.name) const getOptimBondTVL = async () => { const getLoans = async (pageIndex = 0, collectedLoans = []) => { From 8a73d7c876487692b0b0983885cbf18aa3579120 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 26 Sep 2024 03:13:53 +0800 Subject: [PATCH 0501/1768] feat: udpate pumpbtc adapter (update some token holder addresses) (#11745) --- projects/pumpbtc/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index db34d661b8..b5c00f0d19 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -7,8 +7,8 @@ module.exports = { methodology: 'TVL for pumpBTC is calculated based on the total value of WBTC, FBTC, BTCB held in the contract that were utilized in the minting process of pumpBTC.', } const config = { - ethereum: { owners: ['0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', '0x3d9bCcA8Bc7D438a4c5171435f41a0AF5d5E6083'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364', ADDRESSES.ethereum.WBTC], }, - bsc: { owners: ['0x2Ee808F769AB697C477E0aF8357315069b66bCBb'], tokens: [ADDRESSES.bsc.BTCB], }, + ethereum: { owners: ['0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', '0x3d9bCcA8Bc7D438a4c5171435f41a0AF5d5E6083', '0xAC364d14020f1da0044699691a91f06ca6131Fe3', '0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364', ADDRESSES.ethereum.WBTC], }, + bsc: { owners: ['0x2Ee808F769AB697C477E0aF8357315069b66bCBb', '0x80922aD2771c5Ea9C14bA5FF4a903EC6B0f7e7C9', '0x2b4B9047C9fEA54705218388bFC7Aa7bADA4BB5E', '0x8A0727B87fa1027c419c3aa2caf56C799d5Bd8c5'], tokens: [ADDRESSES.bsc.BTCB, '0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, mantle: { owners: ['0xd6Ab15B2458B6EC3E94cE210174d860FdBdd6b96'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, bitcoin: {}, } From 67c3b7d2a179f20dedd580678fd3c711035c497c Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:21:18 +0200 Subject: [PATCH 0502/1768] feat:Adapter, Limitless-Exchange (prediction markets) (#11744) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/limitless-exchange/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/limitless-exchange/index.js diff --git a/projects/limitless-exchange/index.js b/projects/limitless-exchange/index.js new file mode 100644 index 0000000000..265a506c33 --- /dev/null +++ b/projects/limitless-exchange/index.js @@ -0,0 +1,23 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const eventAbi = "event FixedProductMarketMakerCreation(address indexed creator, address fixedProductMarketMaker, address indexed conditionalTokens, address indexed collateralToken, bytes32[] conditionIds, uint256 fee)"; +const config = [ + { factory: "0x8E50578ACa3C5E2Ef5ed2aA4bd66429B5e44C16E", resolver: "0x15A61459d65D89A25a9e91e0dc9FC69598791505", fromBlock: 13547870 }, + { factory: "0xc397D5d70cb3B56B26dd5C2824d49a96c4dabF50", resolver: "0xc9c98965297bc527861c898329ee280632b76e18", fromBlock: 13547845 }, +]; + +const getMarkets = async ({ factory, resolver, fromBlock }, api) => { + const logs = await getLogs2({ api, target: factory, eventAbi, fromBlock }); + const tokens = logs.map(i => i.collateralToken) + return api.sumTokens({ owner: resolver, tokens }); +}; + +const tvl = async (api) => { + for (const marketConfig of config) { + await getMarkets(marketConfig, api); + } +}; + +module.exports = { + methodology: "The TVL represents the total amount of tokens deposited in the prediction markets", + base: { tvl } +}; From a115f148879ce47add0f1af8c14d0557490677e6 Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Thu, 26 Sep 2024 03:22:26 +0800 Subject: [PATCH 0503/1768] update StakeStone SBTC vault contract address (#11743) --- projects/stakestone-btc/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/stakestone-btc/index.js b/projects/stakestone-btc/index.js index 619453706a..768e9d8c3a 100644 --- a/projects/stakestone-btc/index.js +++ b/projects/stakestone-btc/index.js @@ -2,7 +2,7 @@ const vaultABI = { "getDepositAmounts": "function getDepositAmounts() view returns (address[], uint256[])" } -const VaultBSC = '0xc6f830BB162e6CFb7b4Bac242B0E43cF1984c853'; +const VaultBSC = '0x3aa0670E24Cb122e1d5307Ed74b0c44d619aFF9b'; const bscTvl = async (api) => { const [btclist] = await api.call({ abi: vaultABI.getDepositAmounts, target: VaultBSC }) From df369a02e932bf4710d443d4322823b281dd0faf Mon Sep 17 00:00:00 2001 From: Bitstable <154438863+pi-bitstable@users.noreply.github.com> Date: Thu, 26 Sep 2024 03:24:37 +0800 Subject: [PATCH 0504/1768] Add BBUSD token to bitstable (#11742) --- projects/bitstable-finance/index.js | 1 + projects/helper/coreAssets.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/bitstable-finance/index.js b/projects/bitstable-finance/index.js index 55319ab1ef..45ccc16cfd 100644 --- a/projects/bitstable-finance/index.js +++ b/projects/bitstable-finance/index.js @@ -10,6 +10,7 @@ const owner = "0x103dd1184599c7511a3016E0a383E11F84AE7173"; const tokens = { ethereum: [ADDRESS.ethereum.USDT], bsc: [ADDRESS.ethereum.FDUSD], + bouncebit: [ADDRESS.bouncebit.BBUSD] }; const bbInBouncebitStaking = async (api) => { diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 86bec2a4ca..d3daddaafd 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1897,7 +1897,8 @@ "USDC_e": "0x739222D8A9179fE05129C77a8fa354049c088CaA" }, "bouncebit": { - "wstBBTC": "0x8f083eafcbba2e126ad9757639c3a1e25a061a08" + "wstBBTC": "0x8f083eafcbba2e126ad9757639c3a1e25a061a08", + "BBUSD": "0x77776b40C3d75cb07ce54dEA4b2Fd1D07F865222" }, "reya": { "WETH": "0x6b48c2e6a32077ec17e8ba0d98ffc676dfab1a30", From 94ef152d6229a2576fb4d518ebea72f76eaf8ee3 Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Thu, 26 Sep 2024 03:24:51 +0800 Subject: [PATCH 0505/1768] Add BTC Address (#11741) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solvbtc/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index 6ab7e9ac67..aa3b4beeb9 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -18,7 +18,9 @@ const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov- const bitcionOwners = [ 'bc1pjrxeuc9f3zqtx92s3mnf6202894jzufswur957l6s04rjns6dumsyh6u89', - 'bc1qdpwl80flfh3k6h6sumzwgws3ephkrmx307hk64' + 'bc1qdpwl80flfh3k6h6sumzwgws3ephkrmx307hk64', + 'bc1q5pzsptd5whcljevzyztavuqru0hugd5ymgx5ezksdqug3ztrjvmqauys2q', + 'bc1q437jw8wqph854vf9dwxy4c2u6daveupjm5dqptj469gxw6vcpp0qfpr0mh' ] async function tvl(api) { From 702c3a97d021d4e244704851e52d51cfeaad5601 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:29:23 +0200 Subject: [PATCH 0506/1768] Feat: Adapter, Sygnum-Bank (RWA) (#11740) --- projects/sygnum-bank/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/sygnum-bank/index.js diff --git a/projects/sygnum-bank/index.js b/projects/sygnum-bank/index.js new file mode 100644 index 0000000000..3d1318486b --- /dev/null +++ b/projects/sygnum-bank/index.js @@ -0,0 +1,11 @@ +const fund = "0x2AB105A3eAd22731082B790CA9A00D9A3A7627F9"; + +module.exports = { + methodology: "TVL represents the total sum of all tokens minted in Fidelity's investment fund (FIUSD)", + era: { + tvl: async (api) => { + const supply = await api.call({ target: fund, abi: "erc20:totalSupply" }); + api.add("0x2AB105A3eAd22731082B790CA9A00D9A3A7627F9", supply); + }, + }, +}; From 20bb62a845b0d79a987877772bf21a00510e0335 Mon Sep 17 00:00:00 2001 From: TJakubek <39831436+TJakubek@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:30:00 +0200 Subject: [PATCH 0507/1768] chore: fix enosys xdc bridge address (#11739) --- projects/enosys-bridge/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/enosys-bridge/index.js b/projects/enosys-bridge/index.js index 57c5807cfe..069f878851 100644 --- a/projects/enosys-bridge/index.js +++ b/projects/enosys-bridge/index.js @@ -2,7 +2,7 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') module.exports = { - xdc: { tvl: sumTokensExport({ owner: '0xd5308a4bb2d7121a26d0bd11257245f0efda2bc4', tokens: [ADDRESSES.xdc.WXDC], logCalls: true }) }, + xdc: { tvl: sumTokensExport({ owner: '0xcB71dC7b30205eB7Ce27B2cB36b24ba331ecD42a', tokens: [ADDRESSES.xdc.WXDC], logCalls: true }) }, ethereum: { tvl: sumTokensExport({ tokensAndOwners: [ [ADDRESSES.ethereum.USDT,'0x8936761f2903ed1af2b269e6fa3a79ebb0162c51'], From d49d045d1c1de6f4e149a8bd6cfda5e3eea1339a Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 26 Sep 2024 00:33:07 +0500 Subject: [PATCH 0508/1768] Add UniswapV3 vault type (#11738) --- projects/clip-finance/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/clip-finance/index.js b/projects/clip-finance/index.js index e7289d0dea..1da2b85271 100644 --- a/projects/clip-finance/index.js +++ b/projects/clip-finance/index.js @@ -24,6 +24,7 @@ const VaultType = { NileCl: 6, ZeroLend: 7, StargateFarming: 8, + UniswapV3: 9, }; const typesDataInterfaces = { @@ -37,7 +38,8 @@ const typesDataInterfaces = { [VaultType.LynexAlgebra]: ["uint256", "address"], // vaultType, algebra pool address [VaultType.NileCl]: ["uint256", "address", "address"], // vaultType, nileCl pool address, stacking contract address [VaultType.ZeroLend]: ["uint256", "address"], // vaultType, ZeroLend strategy address - [VaultType.StargateFarming]: ["uint256", "address"] // vaultType, Stargate strategy address + [VaultType.StargateFarming]: ["uint256", "address"], // vaultType, Stargate strategy address + [VaultType.UniswapV3]: ["uint256", "address"], // vaultType, v3 pool address }; const tvl = async (api) => { @@ -49,7 +51,7 @@ const tvl = async (api) => { const vaults = vaultDatas.map((i) => ({ ...i, vaultType: decoder.decode(typesDataInterfaces.any, i.data) })); // ammVaults - const ammTypes = [VaultType.PancakeV3, VaultType.LynexAlgebra, VaultType.NileCl]; + const ammTypes = [VaultType.PancakeV3, VaultType.LynexAlgebra, VaultType.NileCl, VaultType.UniswapV3]; const ammVaults = vaults.filter((i) => ammTypes.includes(Number(i.vaultType.toString()))).map((i) => i.vault); const ammPools = vaults .filter((i) => ammTypes.includes(Number(i.vaultType.toString()))) From 49adb0a88d0a30c67e86fb311d25a28d38681f6c Mon Sep 17 00:00:00 2001 From: "Luren L." Date: Wed, 25 Sep 2024 15:33:43 -0400 Subject: [PATCH 0509/1768] update NAVI Protocol WBTC config (#11736) --- projects/navi/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/navi/index.js b/projects/navi/index.js index d5e81b6c81..97d3f13397 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -5,7 +5,8 @@ const decimalShift = { [ADDRESSES.sui.USDC]: -3, // USDC [ADDRESSES.sui.USDT]: -3, // USDT [ADDRESSES.sui.WETH]: -1, // WETH - ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, + ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, // AUSD + ['0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN']: -1, // WBTC } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" From b8373d2dfe11871dba154203c2090f32a6c0695c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:48:17 +0200 Subject: [PATCH 0510/1768] update treehouse #11737 --- projects/treehouse/index.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 3379c86c8c..535ebabaa8 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -1,9 +1,23 @@ -const ADDRESSES = require('../helper/coreAssets.json'); -const { sumTokensExport } = require('../helper/unwrapLPs'); +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + const vault = '0x551d155760ae96050439ad24ae98a96c765d761b' + const tokens = await api.call({ abi: 'address[]:getAllowableAssets', target: vault }) + await api.sumTokens({ owner: vault, tokens }) + + const storage = await api.call({ abi: 'address:strategyStorage', target: vault }) + const strategies = await api.fetchList({ lengthAbi: 'getStrategyCount', itemAbi: 'getStrategyAddress', target: storage }) + return sumTokens2({ + api, owners: strategies, fetchCoValentTokens: true, resolveUniV3: true, tokenConfig: { + onlyWhitelisted: false, + } + }) +} module.exports = { + methodology: 'Token balance in vault and strategy contracts', start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM ethereum: { - tvl: sumTokensExport({ owner: '0x551d155760ae96050439AD24Ae98A96c765d761B', tokens: [ADDRESSES.ethereum.WSTETH], }), + tvl, } -} \ No newline at end of file +} \ No newline at end of file From 85f10d3a01ee273445d9096f48ed7709d8588ffd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 22:02:03 +0200 Subject: [PATCH 0511/1768] hedgehog: track parimutuel #11714 --- projects/hedgehog-markets/index.js | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/projects/hedgehog-markets/index.js b/projects/hedgehog-markets/index.js index d7196b0ca0..a5ff4b4cc7 100644 --- a/projects/hedgehog-markets/index.js +++ b/projects/hedgehog-markets/index.js @@ -7,11 +7,11 @@ async function tvl(api) { const provider = getProvider() const connection = getConnection() const tokenAccounts = [] - const owners= [] + const owners = [] await getClassicMarketTokenAccounts() await addP2PBalances() await addParlay() - // await addParimutuel() + await addParimutuel() const balances = api.getBalances() await sumTokens2({ owners, balances, }) @@ -39,7 +39,7 @@ async function tvl(api) { // - entry count (101..105) // - entry cost (105..113) dataSlice: { offset: 69, length: 44 }, - filters: [ + filters: [ // Market accounts have a discriminator of 3 at offset 0. { memcmp: { offset: 0, bytes: "4" } }, // Open markets have a state of 0 at offset 149. @@ -68,29 +68,27 @@ async function tvl(api) { dataSlice: { offset: 69, length: 56 }, filters: [ // Market accounts have a discriminator of 3 at offset 0. - { memcmp: { offset: 0, bytes: "4", } }, + { memcmp: { offset: 0, bytes: "4", } }, // Open markets have a state of 0 at offset 129. - { memcmp: { offset: 129, bytes: "1"} }, + { memcmp: { offset: 129, bytes: "1" } }, ], }); accounts.forEach(({ account: { data } }) => { - const mint = new PublicKey(data.slice(0, 32)).toString() + const mint = new PublicKey(data.slice(0, 32)).toString() const yesAmount = Number(data.readUInt8(40)); const noAmount = Number(data.readUInt8(48)); api.add(mint, yesAmount + noAmount) }) } - async function addParimutuel() { const programId = new PublicKey('PARrVs6F5egaNuz8g6pKJyU4ze3eX5xGZCFb3GLiVvu') const poolOwner = "3SAUPiGiATqv8TBgvzSJqpLxLGF6LbJamvimueJQT7WT" owners.push(poolOwner) const accounts = await connection.getProgramAccounts(programId, { - dataSlice: { offset: 69, length: 70 }, - filters: [ + filters: [ // Market accounts have a discriminator of 3 at offset 0. { memcmp: { offset: 0, bytes: "4" } }, // Open markets have a state of 0 at offset 149. @@ -98,10 +96,16 @@ async function tvl(api) { ], }) - accounts.forEach(({ account }) => { - const data = decodeAccount('hhPari', account) - const token = data.mint.toString() - const amounts = data.amounts.map(Number) + accounts.forEach(({ account: { data } }) => { + const token = new PublicKey(data.slice(69,69+ 32)).toString() + // Amounts is a u64 array with u8 length prefix at offset 131. + const amountsLen = data.readUint8(131); + + let amounts = [] + for (let i = 0; i < amountsLen; i++) { + amounts.push(data.readBigUint64LE(132 + i * 8).toString()) + } + api.add(token, amounts) }) } From b3472f185b65cc52b3a6335a3282bf8017ee4129 Mon Sep 17 00:00:00 2001 From: TsimakuridzeNikolozi <100114440+TsimakuridzeNikolozi@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:18:32 +0400 Subject: [PATCH 0512/1768] Added LP token to Hinkal token registry (#11748) --- projects/hinkal/registryTokens.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/hinkal/registryTokens.js b/projects/hinkal/registryTokens.js index 67d10025b3..cad8bd180d 100644 --- a/projects/hinkal/registryTokens.js +++ b/projects/hinkal/registryTokens.js @@ -253,6 +253,7 @@ const ETHEREUM_REGISTRY_TOKENS = [ "0x0d86883faf4ffd7aeb116390af37746f45b6f378", "0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5", "0x35d8949372d46b7a3d5a56006ae77b215fc69bc0", + "0x1f7e9321ce32af1f9ea1185fd10d31fea31ffd95", ]; const ARBITRUM_REGISTRY_TOKENS = [ From 5b98bf3e7f7c6987c87a0a278a44a86eadebc23f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Sep 2024 15:52:10 +0200 Subject: [PATCH 0513/1768] fix poseidollar --- projects/poseidollar/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/poseidollar/index.js b/projects/poseidollar/index.js index 900db73c08..4304969b4d 100644 --- a/projects/poseidollar/index.js +++ b/projects/poseidollar/index.js @@ -93,8 +93,8 @@ async function suiTVL(api) { "0x3cfad71fc1f65addbadc0d4056fbd1106aa6b9a219e3ea1f5356a2f500d13182" ); - //TVL on PSH Earn - for (let i = 0; i < poolShareInfo.length; i++) { + //TVL on PSH Earn - ignoring pool 0, it is returning absurd value + for (let i = 1; i < poolShareInfo.length; i++) { api.add(poolShareInfo[i].coinX, poolShareInfo[i].coinXStaked) if (poolShareInfo[i].coinY) From ad4d94930b1a9621a7f049222dd3662f401c5318 Mon Sep 17 00:00:00 2001 From: Rahul Sethuram Date: Fri, 27 Sep 2024 00:26:20 -0700 Subject: [PATCH 0514/1768] feat: add optimism (#11769) --- projects/ionic/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/ionic/index.js b/projects/ionic/index.js index eeba8d7a39..a68ce8b0ab 100644 --- a/projects/ionic/index.js +++ b/projects/ionic/index.js @@ -12,4 +12,6 @@ module.exports = mergeExports([{ bob: compoundExports2({ comptroller: '0x9cFEe81970AA10CC593B83fB96eAA9880a6DF715' }) }, { fraxtal: compoundExports2({ comptroller: '0xB5141403e811fFFE02f4d49Ea8d4a7B0b9590658' }) + }, { + optimism: compoundExports2({ comptroller: '0xaFB4A254D125B0395610fdc8f1D022936c7b166B' }) }]) \ No newline at end of file From 2ec4ad9a9d6e746935d63556af5c92eb6eed6612 Mon Sep 17 00:00:00 2001 From: dunglv-smartosc <108668260+dunglv-smartosc@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:28:19 +0700 Subject: [PATCH 0515/1768] Update: D2Finance (#11768) --- projects/d2finance/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/d2finance/index.js b/projects/d2finance/index.js index da4696ffdf..79b1afe321 100644 --- a/projects/d2finance/index.js +++ b/projects/d2finance/index.js @@ -19,7 +19,8 @@ const vaultTvlOnArbitrum = sumERC4626VaultsExport({ "0x57f467C9c4639B066F5A4D676Cd8Ed7D87C1791b", "0x7348925D3C63e4E61e9F5308eEec0f06EaA3bB7b", "0xCFBBea43Fd99126E4c0eF53e2344609D513f72b3", - "0x0F76De33a3679a6065D14780618b54584a3907D4" + "0x0F76De33a3679a6065D14780618b54584a3907D4", + "0x195a9e0f29f96d4ab2139ee1272380a4aa352890" ], isOG4626: true, }); From 892cc3e0219c74e082d43cfce1392d7c9f8969d5 Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff <7558841+jonathansmirnoff@users.noreply.github.com> Date: Fri, 27 Sep 2024 04:45:27 -0300 Subject: [PATCH 0516/1768] Add Rootstock Collective (#11751) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/rootstock-collective/index.js | 8 ++++++++ projects/treasury/rootstock-collective.js | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 projects/rootstock-collective/index.js create mode 100644 projects/treasury/rootstock-collective.js diff --git a/projects/rootstock-collective/index.js b/projects/rootstock-collective/index.js new file mode 100644 index 0000000000..74288207b1 --- /dev/null +++ b/projects/rootstock-collective/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + rsk: { + tvl: () => ({}), + staking: sumTokensExport({ owner: '0x5db91e24BD32059584bbDb831A901f1199f3d459', tokens: ['0x2aCc95758f8b5F583470bA265Eb685a8f45fC9D5']}) + } +} diff --git a/projects/treasury/rootstock-collective.js b/projects/treasury/rootstock-collective.js new file mode 100644 index 0000000000..aa9ff9005e --- /dev/null +++ b/projects/treasury/rootstock-collective.js @@ -0,0 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +// Treasury +const treasuryGrants = "0x48229e5D82a186Aa89a99212D2D59f5674aa5b6C"; +const treasuryActive = "0xf016fA6B237BB56E3AEE7022C6947a6A103E3C47"; +const treasuryGrowth = "0x267a6073637408b6A1d34d685ff5720A0CbCbD9d"; +const treasuryGeneral = "0xfE3d9B7D68aE13455475F28089968336414FD358"; + + +module.exports = treasuryExports({ + rsk: { + tokens: [ + // Rootstock Assets + nullAddress, + "0x2aCc95758f8b5F583470bA265Eb685a8f45fC9D5", // RIF + ], + owners: [treasuryGrants, treasuryActive, treasuryGrowth, treasuryGeneral], + }, +}); \ No newline at end of file From 95cce5f98794e9b04f87a3d42f93cafef747d63a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:46:54 +0200 Subject: [PATCH 0517/1768] rootstock collective: update treasury --- projects/treasury/rootstock-collective.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/treasury/rootstock-collective.js b/projects/treasury/rootstock-collective.js index aa9ff9005e..c8d26e8018 100644 --- a/projects/treasury/rootstock-collective.js +++ b/projects/treasury/rootstock-collective.js @@ -1,4 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); // Treasury @@ -13,8 +12,8 @@ module.exports = treasuryExports({ tokens: [ // Rootstock Assets nullAddress, - "0x2aCc95758f8b5F583470bA265Eb685a8f45fC9D5", // RIF ], owners: [treasuryGrants, treasuryActive, treasuryGrowth, treasuryGeneral], + ownTokens: ["0x2aCc95758f8b5F583470bA265Eb685a8f45fC9D5",] // RIF }, }); \ No newline at end of file From 621cd20be32e861e2d90e3a0a698bf44228ffe3e Mon Sep 17 00:00:00 2001 From: Mario Reder Date: Fri, 27 Sep 2024 10:14:40 +0200 Subject: [PATCH 0518/1768] add memedotcooking (#11770) Co-authored-by: pysrxyz --- projects/memecooking/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/memecooking/index.js diff --git a/projects/memecooking/index.js b/projects/memecooking/index.js new file mode 100644 index 0000000000..615d3d10ba --- /dev/null +++ b/projects/memecooking/index.js @@ -0,0 +1,11 @@ +const { addTokenBalances } = require("../helper/chain/near"); + +const MEMECOOKING_CONTRACT = 'meme-cooking.near'; +const FT_NEAR = 'wrap.near' + +module.exports = { + methodology: 'Amount of wNEAR in the MEMECOOKING contract', + near: { + tvl: () => addTokenBalances([FT_NEAR], MEMECOOKING_CONTRACT), + } +}; \ No newline at end of file From 6c98e4a13730663b05e7d91cee637ae64901b08a Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:28:40 +0200 Subject: [PATCH 0519/1768] Fix: hpdex (outdated) (#11771) --- projects/hpdex/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/hpdex/index.js b/projects/hpdex/index.js index 2a4b8f4549..e52ef6190e 100644 --- a/projects/hpdex/index.js +++ b/projects/hpdex/index.js @@ -1,6 +1,7 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + deadFrom: '2024-09-22', misrepresentedTokens: true, methodology: "Factory address (0xE1d563BcFD4E2a5A9ce355CC8631421186521aAA) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", hpb: { From d10b0a7c807db48b2a49db213858fdf6b9878115 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:29:29 +0200 Subject: [PATCH 0520/1768] Revert "Fix: hpdex (outdated)" (#11773) --- projects/hpdex/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/hpdex/index.js b/projects/hpdex/index.js index e52ef6190e..2a4b8f4549 100644 --- a/projects/hpdex/index.js +++ b/projects/hpdex/index.js @@ -1,7 +1,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { - deadFrom: '2024-09-22', misrepresentedTokens: true, methodology: "Factory address (0xE1d563BcFD4E2a5A9ce355CC8631421186521aAA) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", hpb: { From cff4e8eb1f4370745343043fc07f71dfcabab0e1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:37:37 +0200 Subject: [PATCH 0521/1768] track new protocols #11772 --- projects/metavault-amm-v2/index.js | 7 +++++++ projects/quickswap-hydra/index.js | 14 ++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 projects/metavault-amm-v2/index.js create mode 100644 projects/quickswap-hydra/index.js diff --git a/projects/metavault-amm-v2/index.js b/projects/metavault-amm-v2/index.js new file mode 100644 index 0000000000..7245d4eaef --- /dev/null +++ b/projects/metavault-amm-v2/index.js @@ -0,0 +1,7 @@ + +const { uniTvlExports } = require("../helper/unknownTokens"); + +module.exports = uniTvlExports({ + scroll: '0xCc570Ec20eCB62cd9589FA33724514BDBc98DC7E', + linea: '0xCc570Ec20eCB62cd9589FA33724514BDBc98DC7E', +}) diff --git a/projects/quickswap-hydra/index.js b/projects/quickswap-hydra/index.js new file mode 100644 index 0000000000..7cb1af7a74 --- /dev/null +++ b/projects/quickswap-hydra/index.js @@ -0,0 +1,14 @@ +const config = { + polygon_zkevm: '0x14c8FEA10fdc2d1357410f473e2CAa035a872517', + manta: '0x443Cf165B72e4b4331C0101A10553269972Ed4B8' +} + +Object.keys(config).forEach(chain => { + const target = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const tokens= await api.call({ abi: 'address[]:getAssetList', target}) + return api.sumTokens({ owner: target, tokens }) + } + } +}) \ No newline at end of file From 49dc771a918810c62f16f81227ed941108c75667 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:50:22 +0200 Subject: [PATCH 0522/1768] Fix: Stader (#11775) --- projects/stader/index.js | 54 ++++++++++++---------------------------- 1 file changed, 16 insertions(+), 38 deletions(-) diff --git a/projects/stader/index.js b/projects/stader/index.js index 617a0aef1d..c308d5ed19 100644 --- a/projects/stader/index.js +++ b/projects/stader/index.js @@ -1,66 +1,44 @@ const { nullAddress, sumTokens2 } = require("../helper/unwrapLPs"); const { get } = require("../helper/http"); + +const headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }; let _res; async function getData() { - if (!_res) _res = get("https://universe.staderlabs.com/common/tvl"); + if (!_res) _res = await get('https://universe.staderlabs.com/common/tvl', { headers }) return _res; } async function hbarTvl() { - const res = await get("https://universe.staderlabs.com/common/tvl"); - return { - "hedera-hashgraph": res.hedera.native, - }; + const res = await get('https://universe.staderlabs.com/common/tvl', { headers }) + return { "hedera-hashgraph": res.hedera.native }; } async function maticTvl() { const res = await getData(); - return { - "matic-network": res.polygon.native, - }; + return { "matic-network": res.polygon.native }; } async function bscTvl() { const res = await getData(); - return { - binancecoin: res.bnb.native, - }; + return { binancecoin: res.bnb.native }; } async function ethTvl(api) { - return await api.call({ - abi: "uint256:totalAssets", - target: "0xcf5ea1b38380f6af39068375516daf40ed70d299", - }); + return await api.call({ abi: "uint256:totalAssets", target: "0xcf5ea1b38380f6af39068375516daf40ed70d299" }); } module.exports = { timetravel: false, - methodology: - "We aggregated the assets staked across Stader staking protocols", - /*terra: { - tvl, - },*/ - hedera: { - tvl: hbarTvl, - }, + methodology: "We aggregated the assets staked across Stader staking protocols", + /*terra: { tvl },*/ + hedera: { tvl: hbarTvl }, // its on ethereum because funds are locked there - /* ethereum: { - tvl: maticTvl - }, */ - fantom: { - tvl: () => ({}), - }, - terra2: { - tvl: () => ({}), - }, - bsc: { - tvl: bscTvl, - }, - near: { - tvl: () => ({}), - }, + // ethereum: { tvl: maticTvl }, + fantom: { tvl: () => ({}) }, + terra2: { tvl: () => ({}) }, + bsc: { tvl: bscTvl }, + near: { tvl: () => ({}) }, ethereum: { tvl: async (api) => { const res = await getData(); From ca8e9619c75ac26dc2940d8c992fb762cc465f42 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:48:49 +0200 Subject: [PATCH 0523/1768] update thUSD --- projects/thUSD/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/thUSD/index.js b/projects/thUSD/index.js index 368dc65b0c..ca9b1759d5 100644 --- a/projects/thUSD/index.js +++ b/projects/thUSD/index.js @@ -2,7 +2,7 @@ const sdk = require('@defillama/sdk') const { getLiquityTvl } = require("../helper/liquity") const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs") const tBTCTvl = getLiquityTvl('0xf5e4ffeb7d2183b61753aa4074d72e51873c1d0a', { nonNativeCollateralToken: true, abis: { collateralToken: 'address:collateralAddress' } }) -const ethTvl = sumTokensExport({ owner: '0x1f490764473eb1013461D6079F827DB95d8B4DC5', tokens: [nullAddress]}) +const ethTvl = sumTokensExport({ owners: ['0x1f490764473eb1013461D6079F827DB95d8B4DC5', '0xE922B5591Da479a559b25261BD6Dc8f89cA1A29d'], tokens: [nullAddress]}) module.exports = { ethereum: { From 3495df7708d78bcfa2d17279e67e3c2520a32cb7 Mon Sep 17 00:00:00 2001 From: Mazrael Leashtenant <151787101+Testingtester2@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:26:38 -0400 Subject: [PATCH 0524/1768] Update Shibaswap - Shibarium (#11779) --- projects/shibaswap/index.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/projects/shibaswap/index.js b/projects/shibaswap/index.js index 772fb8ccf3..7502a85dc6 100644 --- a/projects/shibaswap/index.js +++ b/projects/shibaswap/index.js @@ -1,12 +1,13 @@ -const {getUniTVL} = require('../helper/unknownTokens') +const { getUniTVL } = require('../helper/unknownTokens'); -const FACTORY = '0x115934131916c8b277dd010ee02de363c09d037c'; +const FACTORY_ETHEREUM = '0x115934131916c8b277dd010ee02de363c09d037c'; +const FACTORY_SHIBARIUM = '0xc2b4218F137e3A5A9B98ab3AE804108F0D312CBC'; module.exports = { misrepresentedTokens: true, ethereum: { tvl: getUniTVL({ - factory: FACTORY, + factory: FACTORY_ETHEREUM, useDefaultCoreAssets: true, blacklist: [ '0x6ADb2E268de2aA1aBF6578E4a8119b960E02928F', @@ -17,5 +18,11 @@ module.exports = { '0xC1bfcCd4c29813eDe019D00D2179Eea838a67703' ], }) + }, + shibarium: { + tvl: getUniTVL({ + factory: FACTORY_SHIBARIUM, + useDefaultCoreAssets: true, + }) } -}; \ No newline at end of file +}; From 4c2f3c45872d435c389da96a59f5644d9a4e60e8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:25:36 +0200 Subject: [PATCH 0525/1768] update sdk version --- package-lock.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8dedcbb4ae..b4f55f846a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -997,10 +997,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.84", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.84.tgz", - "integrity": "sha512-Ump1cTVP3QzvUh7eMIFL6+poO2z1DBjIggV/TEnNT/WBb+PHjLXai3kpHWWgjc1CpMsoyjVWlN50bZF0hPECWw==", - "license": "ISC", + "version": "5.0.92", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.92.tgz", + "integrity": "sha512-t6A4qSX9y1VPIaiVE7/O1UPrkDmljjiGv8DrtKZuzuCpwMsL2uMDNIn5a8WLnQizft8mUV3YY4aojx6WC7L7Sw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From 392d14d7495f3fc588c3c2c56d8a475046139290 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:29:55 +0200 Subject: [PATCH 0526/1768] Feat: Turn tvl frxETH on chain (#11780) --- projects/frax-ETH/index.js | 124 ++++++++++++++++++++++++++++++++++--- 1 file changed, 117 insertions(+), 7 deletions(-) diff --git a/projects/frax-ETH/index.js b/projects/frax-ETH/index.js index c8d9d99ba5..af96654e63 100644 --- a/projects/frax-ETH/index.js +++ b/projects/frax-ETH/index.js @@ -1,10 +1,120 @@ +const { get } = require("../helper/http"); +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") -const token = '0x5E8422345238F34275888049021821E8E08CAa1f' + +const abi = { + coins: "function coins(uint256 arg0) view returns (address)", + get_balances: "function get_balances() view returns (uint256[2])", + lockedLiquidityOf: "function lockedLiquidityOf(address account) view returns (uint256)", + redemptionQueueAccounting: "function redemptionQueueAccounting() view returns (uint128 etherLiabilities, uint128 unclaimedFees)", + get_balances2: "function get_balances() view returns (uint256[])", +} + +/** + * Config Ethereum + */ + +const frxETH = "0x5E8422345238F34275888049021821E8E08CAa1f" +const treasury = "0x8306300ffd616049FD7e4b0354a64Da835c1A81C"; +const minter = "0xbAFA44EFE7901E04E39Dad13167D089C559c1138"; +const redeemer = "0x82bA8da44Cd5261762e629dd5c605b17715727bd" +const st_frxETH = "0x4d9f9D15101EEC665F77210cB999639f760F831E"; +const frxeth_ng = '0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc' +const stakingProxyConvex_1 = '0x32a2849100ed63878ba8ee6e924EB052A57ecB44' +const stakingProxyConvex_2 = '0x74da8EB74DD94Dbd3B501eb16D8CB2C5222dBDa9' +const stakingConvex_1 = "0x68921998fbc43B360D3cF14a03aF4273CB0cFA44" +const stakingConvex_2 = "0xB4fdD7444E1d86b2035c97124C46b1528802DA35" + +const url = "https://api.frax.finance/v2/frxeth/validators" + +/** + * Config Fraxtal + */ + +const wfrxETH = "0xFC00000000000000000000000000000000000006" +const treasury_2 = "0x0ae0548Ef97d3eC699cF375e2467E24B2f35847c" +const ezwfrxETH = "0x6e9b6660b94fa74A8087D7ee14Dc28698249D242" + +const unwrapperCRV = async (api, lps, treasury) => { + const [supplies, token0s, token1s, poolBalances, balanceOfs] = await Promise.all([ + api.multiCall({ calls: lps.map((lp) => ({ target: lp.pool })), abi: "erc20:totalSupply" }), + api.multiCall({ calls: lps.map((lp) => ({ target: lp.pool, params: [0] })), abi: abi.coins }), + api.multiCall({ calls: lps.map((lp) => ({ target: lp.pool, params: [1] })), abi: abi.coins }), + api.multiCall({ calls: lps.map((lp) => ({ target: lp.pool })), abi: abi.get_balances }), + api.multiCall({ calls: lps.map((lp) => ({ target: lp.pool, params: [treasury], skip: lp.balance !== undefined })), abi: "erc20:balanceOf" }), + ]) + + lps.forEach((lp, i) => { + const supply = supplies[i] + const token0 = token0s[i] + const token1 = token1s[i] + const poolBalance = poolBalances[i] + const balanceOf = lp.balance !== undefined ? lp.balance : balanceOfs[i]; + api.add(token0, balanceOf * poolBalance[0] / supply, { skipChain: true }) + api.add(token1, balanceOf * poolBalance[1] / supply, { skipChain: true }) + }) +}; + +const unwrapperCRVCVX = async (api, lps, treasury) => { + const balanceOfs = await api.multiCall({ calls: lps.map((lp) => ({ target: lp.staker, params: [lp.user] })) , abi: abi.lockedLiquidityOf }) + return unwrapperCRV(api, lps.map((lp, i) => ({...lp, balance: balanceOfs[i]})), treasury) +} + +const treasuryAssets = async (api, treasury) => { + await Promise.all([ + unwrapperCRV(api, [{ pool: st_frxETH }, { pool: frxeth_ng }], treasury), + unwrapperCRVCVX(api, [ + { user: stakingProxyConvex_1, staker: stakingConvex_1, pool: st_frxETH }, + { user: stakingProxyConvex_2, staker: stakingConvex_2, pool: frxeth_ng } + ], treasury) + ]) + + api.add(frxETH, await api.call({ target: frxETH, params: [treasury], abi: 'erc20:balanceOf' })) + api.add(ADDRESSES.ethereum.WETH, (await sdk.api.eth.getBalance({ target: treasury })).output) +} + +const redeemerAssets = async (api, redeemer) => { + const unclaimed = await api.call({ target: redeemer, abi: abi.redemptionQueueAccounting }) + api.add(ADDRESSES.ethereum.WETH, unclaimed.unclaimedFees) + api.add(ADDRESSES.ethereum.WETH, (await sdk.api.eth.getBalance({ target: redeemer })).output) +} + +const validatorsAssets = async (api) => { + const { validators } = await get(url) + const balances = validators.map((r) => r.balanceDec * Math.pow(10, 18)) + const totalBalance = balances.reduce((acc, balance) => acc + balance, 0); + api.add(ADDRESSES.ethereum.WETH, totalBalance) +} + + +const ethTvl = async (api) => { + await Promise.all([ + treasuryAssets(api, treasury), // frxETH Treasury + redeemerAssets(api, redeemer), // frxETH redeemer + validatorsAssets(api) // validators + ]) + + api.add(ADDRESSES.ethereum.WETH, (await sdk.api.eth.getBalance({ target: minter })).output) // frxETH Minter + api.removeTokenBalance(frxETH) +}; + +const fraxtalTvl = async (api) => { + const [supply, token0, token1, poolBalance, balanceOf] = await Promise.all([ + api.call({ target: ezwfrxETH, abi: "erc20:totalSupply" }), + api.call({ target: ezwfrxETH, params: [0], abi: abi.coins }), + api.call({ target: ezwfrxETH, params: [1], abi: abi.coins }), + api.call({ target: ezwfrxETH, abi: abi.get_balances2 }), + api.call({ target: ezwfrxETH, params: [treasury_2], abi: "erc20:balanceOf" }), + ]) + + api.add(token0 === wfrxETH ? frxETH : token0, balanceOf * poolBalance[0] / supply, { skipChain: true }) + api.add(token1 === wfrxETH ? frxETH : token1, balanceOf * poolBalance[1] / supply, { skipChain: true }) + api.add(frxETH, (await sdk.api.eth.getBalance({ target: treasury })).output, { skipChain: true }) + api.removeTokenBalance(frxETH) +} module.exports = { - ethereum: { - tvl: async (_, block) => ({ - ethereum: (await sdk.api.erc20.totalSupply({ target: token, block})).output/1e18 - }) - } -} \ No newline at end of file + methodology: "TVL represents all the on-chain assets backing frxETH", + ethereum: { tvl: ethTvl }, + fraxtal: { tvl: fraxtalTvl } +}; From d67cc4b8a0ffeb2d8f8ad6cb025d6af12b50d29b Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Sat, 28 Sep 2024 00:35:12 -0700 Subject: [PATCH 0527/1768] Add Zircuit (#11781) --- projects/visor/config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/visor/config.js b/projects/visor/config.js index 026bae0e92..a9b2a66a36 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -145,6 +145,10 @@ const HYPE_REGISTRY = { ["0x32e27fF479454e32868ff67Ee9F06BAFDC1E908F", 17268275], // Glyph ["0xFc13Ebe7FEB9595D70195E9168aA7F3acE153621", 17164390], // CoreX ], + zircuit: [ + ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 1216191], // Gmeow + ["0x683292172E2175bd08e3927a5e72FC301b161300", 1216165], // Circuit + ], }; Object.keys(HYPE_REGISTRY).forEach(chain => { From 1e529f8e1ff7862a1f0de6ce46fdf433868cc870 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 29 Sep 2024 17:14:14 +0100 Subject: [PATCH 0528/1768] add treasury chains --- projects/treasury/sideshift-ai.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/projects/treasury/sideshift-ai.js b/projects/treasury/sideshift-ai.js index 4fb7c838ee..a98de007e9 100644 --- a/projects/treasury/sideshift-ai.js +++ b/projects/treasury/sideshift-ai.js @@ -1,11 +1,27 @@ const { nullAddress, treasuryExports } = require("../helper/treasury"); +const owners = ['0x8f456e525ed0115e22937c5c8afac061cc697f21'] + module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, ], - owners: ['0x8f456e525ed0115e22937c5c8afac061cc697f21'], + owners, + ownTokens: [], + }, + mantle: { + tokens: [ + "0xcda86a272531e8640cd7f1a92c01839911b90bb0", + "0xc96de26018a54d51c097160568752c4e3bd6c364" + ], + owners, + ownTokens: [], + }, + arbitrum: { + tokens: [ + ], + owners, ownTokens: [], }, }) \ No newline at end of file From 39661004a273840a9afb78f52e9b3fd32a9dad7e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 29 Sep 2024 20:49:46 +0200 Subject: [PATCH 0529/1768] update vfat --- projects/vfat/index.js | 18 ++++++++++++++++-- test.js | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/projects/vfat/index.js b/projects/vfat/index.js index 3942aecaf8..6865d2b68b 100644 --- a/projects/vfat/index.js +++ b/projects/vfat/index.js @@ -1,4 +1,5 @@ const { getLogs } = require('../helper/cache/getLogs'); +const { get } = require('../helper/http'); const { sumTokens2, addUniV3LikePosition } = require('../helper/unwrapLPs'); const config = require('./config'); @@ -322,7 +323,20 @@ Object.keys(config).forEach(chain => { tvl = genericTvl } - module.exports[chain] = { tvl } + module.exports[chain] = { tvl: tvl2 } }) -module.exports.isHeavyProtocol = true \ No newline at end of file +// module.exports.isHeavyProtocol = true +module.exports.misrepresentedTokens = true +let _get + +async function tvl2(api) { + if (!_get) + _get = get(`https://api.vfat.io/v1/sickle-stats`) + + const { chainStats } = await _get + chainStats.filter(chain => chain.chainId === api.chainId).forEach(chain => { + api.addUSDValue(chain.tvl) + }) + +} \ No newline at end of file diff --git a/test.js b/test.js index 29cab073d7..1518dd2ae7 100644 --- a/test.js +++ b/test.js @@ -27,7 +27,7 @@ const currentCacheVersion = sdk.cache.currentVersion // load env for cache if (process.env.LLAMA_SANITIZE) Object.keys(process.env).forEach((key) => { if (key.endsWith('_RPC')) return; - if (['TVL_LOCAL_CACHE_ROOT_FOLDER', 'LLAMA_DEBUG_MODE', 'GRAPH_API_KEY', ...ENV_KEYS].includes(key) || key.includes('SDK')) return; + if (['TVL_LOCAL_CACHE_ROOT_FOLDER', 'LLAMA_DEBUG_MODE', 'GRAPH_API_KEY', 'LLAMA_DEBUG_LEVEL2', ...ENV_KEYS].includes(key) || key.includes('SDK')) return; delete process.env[key] }) process.env.SKIP_RPC_CHECK = 'true' From 143b391f16a4ce187c2e4f84884598aaf7fd8558 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 30 Sep 2024 02:32:09 +0100 Subject: [PATCH 0530/1768] re-add bsc --- projects/vfat/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/vfat/config.js b/projects/vfat/config.js index 3afb4e0028..3a3692d452 100644 --- a/projects/vfat/config.js +++ b/projects/vfat/config.js @@ -72,10 +72,10 @@ module.exports = { fromBlockSickle: 62383980, moeMasterchef: '0xA756f7D419e1A5cbd656A438443011a7dE1955b5' }, - /*bsc: { + bsc: { factory: '0x53d9780DbD3831E3A797Fd215be4131636cD5FDf', chainName: 'bsc', masterchefV3: '0x556B9306565093C855AEA9AE92A594704c2Cd59e', fromBlockSickle: 37565801 - },*/ + }, } \ No newline at end of file From 774a1b7b627422ea058300b5e820a37e7d4b0317 Mon Sep 17 00:00:00 2001 From: lyfmantle <161433628+lyfmantle@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:39:14 +0800 Subject: [PATCH 0531/1768] add fbtc addresses (#11785) --- projects/fbtc/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/fbtc/index.js b/projects/fbtc/index.js index a8be5fda22..6d656a7ca9 100644 --- a/projects/fbtc/index.js +++ b/projects/fbtc/index.js @@ -17,6 +17,13 @@ const staticAddresses = [ '32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', 'bc1qj9w5ee2kf4akvtzrj59p77yc6x02nqqg9m0tcd', 'bc1q6w7dn3fkky587a2qwxp6swyhlwgueh2ew26zem', + + '3Pg6HJJPhm3X7eWrdHbPFQeHU723a9GSJ7', + '35cUDQg2EBuc3wadWmcEFW2YG7Uj2yfNRq', + 'bc1qwgnhe6vn5zzu7csukavhfatzdasvmkavktqe4udzx96dk602ghsqaz8vt6', + 'bc1qf2lqvumkq2l2d3qej7u6w9u84djfnmy7kfcqdulfpcm7zqxl330smc0mkj', + 'bc1qyzsetzfrwzxs7zzqtsmyaz39mumhrh58mu04kyjcy8pynn9zhk5q2dc2r3', + 'bc1qxsuy93rr0mat8sdlzjuk86z6ajpr04634wfx04lcuerw7dj52k5q8k6qaq' ] const abi = { getQualifiedUserInfo: "function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)", From 664463d8764462e20b7f34fb04a92983fb0ca1a6 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:39:33 +0200 Subject: [PATCH 0532/1768] Fix: Quicksilver (outdated) (#11786) --- projects/quicksilver/index.js | 37 +++++++++-------------------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/projects/quicksilver/index.js b/projects/quicksilver/index.js index 8e135e4c82..342ac38365 100644 --- a/projects/quicksilver/index.js +++ b/projects/quicksilver/index.js @@ -16,32 +16,15 @@ const coinGeckoIds = { async function tvl() { const balances = {}; + const { zones } = await get(endPoints.quicksilver + "/quicksilver/interchainstaking/v1/zones"); + const { supply } = await get(endPoints.quicksilver + "/cosmos/bank/v1beta1/supply"); - const { zones } = await get( - endPoints.quicksilver + "/quicksilver/interchainstaking/v1/zones" - ); - const { supply } = await get( - endPoints.quicksilver + "/cosmos/bank/v1beta1/supply" - ); - - zones.map((zone) => { - const balance = supply.find((coin) => { - return coin.denom === zone.local_denom; - }); - let amount = balance.amount / 1e6; - if (zone.base_denom === "adydx") - amount = balance.amount / 1e18 - + zones.forEach((zone) => { + const balance = supply.find((coin) => coin.denom === zone.local_denom); + if (!balance) return + const amount = zone.base_denom === "adydx" ? balance.amount / 1e18 : balance.amount / Math.pow(10, 6) const id = coinGeckoIds[zone.base_denom] - if (!id) { - throw new Error("Missing CoinGecko ID for denom " + zone.base_denom); - } - - sdk.util.sumSingleBalance( - balances, - id, - amount * zone.redemption_rate - ); + sdk.util.sumSingleBalance(balances, id, amount * zone.redemption_rate); }); return balances; @@ -50,7 +33,5 @@ async function tvl() { module.exports = { timetravel: false, methodology: "Sum of all the tokens that are liquid staked on Quicksilver", - quicksilver: { - tvl, - }, -}; // node test.js projects/quicksilver/index.js + quicksilver: { tvl }, +}; From b35838b9cd21527febe674a3e27d39d2dbe6e57f Mon Sep 17 00:00:00 2001 From: CJ Date: Mon, 30 Sep 2024 16:42:06 +0800 Subject: [PATCH 0533/1768] add dojoswap-ancient8 on ancient8-chain. (#11784) Co-authored-by: 0xvoidmain --- projects/dojoswap-ancient8/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/dojoswap-ancient8/index.js diff --git a/projects/dojoswap-ancient8/index.js b/projects/dojoswap-ancient8/index.js new file mode 100644 index 0000000000..3fe19dc10c --- /dev/null +++ b/projects/dojoswap-ancient8/index.js @@ -0,0 +1,14 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +const config = { + ancient8: { factory: '0x7d6eb409e2540d27Ea6Dc976E1a549a3dBcBfFBC', key: 'A8ChainMainnet' }, +} + +Object.keys(config).forEach(chain => { + const { factory, key } = config[chain] + module.exports[chain] = { + tvl: getUniTVL({ factory, useDefaultCoreAssets: true, chain, fetchBalances: true }) + } +}) + +module.exports.misrepresentedTokens = true \ No newline at end of file From d9837b5eeb25d4b0cc548ef60d047b4b98ab1c82 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:45:51 +0200 Subject: [PATCH 0534/1768] code refactor --- projects/dojoswap-ancient8/index.js | 18 ++++-------------- projects/dojoswap/index.js | 1 - 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/projects/dojoswap-ancient8/index.js b/projects/dojoswap-ancient8/index.js index 3fe19dc10c..f2320073e4 100644 --- a/projects/dojoswap-ancient8/index.js +++ b/projects/dojoswap-ancient8/index.js @@ -1,14 +1,4 @@ -const { getUniTVL } = require('../helper/unknownTokens') - -const config = { - ancient8: { factory: '0x7d6eb409e2540d27Ea6Dc976E1a549a3dBcBfFBC', key: 'A8ChainMainnet' }, -} - -Object.keys(config).forEach(chain => { - const { factory, key } = config[chain] - module.exports[chain] = { - tvl: getUniTVL({ factory, useDefaultCoreAssets: true, chain, fetchBalances: true }) - } -}) - -module.exports.misrepresentedTokens = true \ No newline at end of file +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'ancient8': '0x7d6eb409e2540d27Ea6Dc976E1a549a3dBcBfFBC' +}) \ No newline at end of file diff --git a/projects/dojoswap/index.js b/projects/dojoswap/index.js index 0b3632acca..815afadc13 100644 --- a/projects/dojoswap/index.js +++ b/projects/dojoswap/index.js @@ -1,4 +1,3 @@ -const BigNumber = require("bignumber.js"); const { getFactoryTvl } = require("../terraswap/factoryTvl"); const factory = { From ad33009f3ac2cd22e5eb062fe60518ab122bbc20 Mon Sep 17 00:00:00 2001 From: w33r Date: Mon, 30 Sep 2024 17:46:48 +0900 Subject: [PATCH 0535/1768] Add KaiaFun (#11782) --- projects/kaiafun/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/kaiafun/index.js diff --git a/projects/kaiafun/index.js b/projects/kaiafun/index.js new file mode 100644 index 0000000000..9d220060da --- /dev/null +++ b/projects/kaiafun/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require('../helper/unwrapLPs'); + +// Canonical WKLAY +const WKLAY = '0x19aac5f612f524b754ca7e7c41cbfa2e981a4432'; + +module.exports.klaytn = { + start: 165171284, + methodology: 'TVL counts Canonical WKLAY coins in KaiaFun\'s Core Contract.', + tvl: sumTokensExport({ + owners: ["0x080f8b793fe69fe9e65b5ae17b10f987c95530bf"], + tokens: [WKLAY] + }), +}; From 8c8ea4dc9e142d4696f2f6a55f4fd7fbd8683525 Mon Sep 17 00:00:00 2001 From: Adolf998 <154962952+Adolf998@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:49:50 +0800 Subject: [PATCH 0536/1768] add BounceClub subproject Club Farm (#11783) --- projects/bb-club-farm/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/bb-club-farm/index.js diff --git a/projects/bb-club-farm/index.js b/projects/bb-club-farm/index.js new file mode 100644 index 0000000000..c483544065 --- /dev/null +++ b/projects/bb-club-farm/index.js @@ -0,0 +1,15 @@ +const { stakingUnknownPricedLP } = require("../helper/staking"); +const BBTC = '0xF5e11df1ebCf78b6b6D26E04FF19cD786a1e81dC' +const stakingLNNGAddress= '0x997A1C457acB020CF668BB7d6f05A184854CD3ca' +const LNNGLPAddress = '0x2d2011408d0E76c521Cf6169E004c8BF893Af34E' + +async function tvl(api) { + return api.sumTokens({owners: ['0x05407cAe9FdaF5e8cC395089207E2E72b8Ae739b'], tokens: [BBTC], api }) +} + +module.exports = { + bouncebit: { + tvl, + staking: stakingUnknownPricedLP(stakingLNNGAddress, LNNGLPAddress, "bouncebit", LNNGLPAddress) + } +} \ No newline at end of file From 2e45a08facff61f5ba065edc70ce7769af6e0135 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:54:06 +0200 Subject: [PATCH 0537/1768] Feat: Openeden-Tbill, add ripple (#11753) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/openeden-tbill/index.js | 19 +++++ projects/xrpl-dex/app.js | 43 +++++++++++- projects/xrpl-dex/index.js | 7 +- projects/xrpl-dex/package-lock.json | 105 +++++++++++++++++++++++++--- projects/xrpl-dex/package.json | 3 +- 5 files changed, 161 insertions(+), 16 deletions(-) diff --git a/projects/openeden-tbill/index.js b/projects/openeden-tbill/index.js index a14084e080..49d1f46a36 100644 --- a/projects/openeden-tbill/index.js +++ b/projects/openeden-tbill/index.js @@ -1,3 +1,10 @@ +const { getCache, } = require("../helper/cache"); +const ADDRESSES = require('../helper/coreAssets.json') + +function getTimeNow() { + return Math.floor(Date.now() / 1000); +} + async function tvl(api) { let contract = '0xdd50C053C096CB04A3e3362E2b622529EC5f2e8a' if (api.chain === 'arbitrum') contract = '0xF84D28A8D28292842dD73D1c5F99476A80b6666A' @@ -8,7 +15,19 @@ async function tvl(api) { api.add(token, bal) } +async function ripplTvl (api) { + const timeNow = getTimeNow() + const aDayInSeconds = 60 * 60 * 24; + const projectKey = 'openeden-tbill' + const cacheKey = 'cache' + let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) + if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !tvl) + throw new Error("stale/missing tvl data"); + api.add(ADDRESSES.ethereum.USDC, tvl * 10 ** 6, { skipChain: true }) +} + module.exports = { ethereum: { tvl }, arbitrum: { tvl }, + ripple: { tvl: ripplTvl } } \ No newline at end of file diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js index 069894e46b..1e422a115c 100644 --- a/projects/xrpl-dex/app.js +++ b/projects/xrpl-dex/app.js @@ -3,8 +3,11 @@ const rippleCodec = require("ripple-binary-codec"); const { PromisePool } = require("@supercharge/promise-pool"); const { getCache, setCache } = require("../helper/cache"); const { transformDexBalances } = require("../helper/portedTokens"); +const xrpl = require("xrpl"); + const NODE_URL = "https://xrplcluster.com"; +// const xrpTBILL = 'rJNE2NNz83GJYtWVLwMvchDWEon3huWnFn' const fetchLedgerData = async (binary, marker, atLedgerIndex) => { const xrplResponse = await fetch(NODE_URL, { @@ -126,7 +129,7 @@ function getTimeNow() { return Math.floor(Date.now() / 1000); } -async function main() { +async function xrplDex () { const timeNow = getTimeNow() const aDayInSeconds = 60 * 60 * 24; const projectKey = 'xrpl-dex' @@ -163,4 +166,40 @@ async function main() { await setCache(projectKey, cacheKey, { allPools, lastPoolUpdate, lastDataUpdate: getTimeNow(), tvl, }) -} \ No newline at end of file +} + +async function openedenRippleTvl() { + const timeNow = getTimeNow() + const aDayInSeconds = 60 * 60 * 24; + const projectKey = 'openeden-tbill' + const cacheKey = 'cache' + let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) + if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds) { + lastDataUpdate = getTimeNow() + + const client = new xrpl.Client('wss://xrplcluster.com/'); + await client.connect(); + + const issuerAddress = "rJNE2NNz83GJYtWVLwMvchDWEon3huWnFn"; + const subscriptionOperatorAddress = "rB56JZWRKvpWNeyqM3QYfZwW4fS9YEyPWM"; + + const issuerAccountInfo = await client.request({ + command: 'gateway_balances', + account: issuerAddress, + hotwallet: [subscriptionOperatorAddress], + }); + + tvl = Math.round(Number(issuerAccountInfo.result.obligations?.TBL)) || 0; + await setCache(projectKey, cacheKey, { lastDataUpdate, tvl }) + client.disconnect(); + } +} + +async function main() { + await openedenRippleTvl() + await xrplDex() +} + + + + diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index b21905ccdb..2d20b6ce86 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -3,11 +3,8 @@ const { getCache, } = require("../helper/cache"); module.exports = { - methodology: - "Finds all AMM pools on XRPL, checks their reserves, calculates TVL (in XRP) for each pool and sums them up.", - ripple: { - tvl, - }, + methodology: "Finds all AMM pools on XRPL, checks their reserves, calculates TVL (in XRP) for each pool and sums them up.", + ripple: { tvl }, misrepresentedTokens: true, }; diff --git a/projects/xrpl-dex/package-lock.json b/projects/xrpl-dex/package-lock.json index 646973e4f7..f55185a857 100644 --- a/projects/xrpl-dex/package-lock.json +++ b/projects/xrpl-dex/package-lock.json @@ -9,24 +9,69 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "ripple-binary-codec": "^2.1.0" + "ripple-binary-codec": "^2.1.0", + "xrpl": "^4.0.0" + } + }, + "node_modules/@noble/curves": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", + "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.5.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "license": "MIT", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/base": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", - "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", + "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.6.0", + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.7" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", + "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.8" + }, "funding": { "url": "https://paulmillr.com/funding/" } @@ -44,6 +89,16 @@ "node": ">=16.0.0" } }, + "node_modules/@xrplf/secret-numbers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@xrplf/secret-numbers/-/secret-numbers-1.0.0.tgz", + "integrity": "sha512-qsCLGyqe1zaq9j7PZJopK+iGTGRbk6akkg6iZXJJgxKwck0C5x5Gnwlb1HKYGOwPKyrXWpV6a2YmcpNpUFctGg==", + "license": "ISC", + "dependencies": { + "@xrplf/isomorphic": "^1.0.0", + "ripple-keypairs": "^2.0.0" + } + }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", @@ -82,6 +137,20 @@ "node": ">= 16" } }, + "node_modules/ripple-keypairs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", + "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", + "license": "ISC", + "dependencies": { + "@noble/curves": "^1.0.0", + "@xrplf/isomorphic": "^1.0.0", + "ripple-address-codec": "^5.0.0" + }, + "engines": { + "node": ">= 16" + } + }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -101,6 +170,26 @@ "optional": true } } + }, + "node_modules/xrpl": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-4.0.0.tgz", + "integrity": "sha512-VZm1lQWHQ6PheAAFGdH+ISXKvqB2hZDQ0w4ZcdAEtmqZQXtSIVQHOKPz95rEgGANbos7+XClxJ73++joPhA8Cw==", + "license": "ISC", + "dependencies": { + "@scure/bip32": "^1.3.1", + "@scure/bip39": "^1.2.1", + "@xrplf/isomorphic": "^1.0.1", + "@xrplf/secret-numbers": "^1.0.0", + "bignumber.js": "^9.0.0", + "eventemitter3": "^5.0.1", + "ripple-address-codec": "^5.0.0", + "ripple-binary-codec": "^2.1.0", + "ripple-keypairs": "^2.0.0" + }, + "engines": { + "node": ">=18.0.0" + } } } } diff --git a/projects/xrpl-dex/package.json b/projects/xrpl-dex/package.json index a7e910c8e3..ea7ef196a4 100644 --- a/projects/xrpl-dex/package.json +++ b/projects/xrpl-dex/package.json @@ -9,6 +9,7 @@ "license": "MIT", "description": "", "dependencies": { - "ripple-binary-codec": "^2.1.0" + "ripple-binary-codec": "^2.1.0", + "xrpl": "^4.0.0" } } From 31867c8748a56918a5a7ef5e4c8d2bdf4a40bca0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:54:53 +0200 Subject: [PATCH 0538/1768] Refactor Peri finance (#11607) Co-authored-by: richard-nend --- projects/perifinance/abi.json | 3 - projects/perifinance/index.js | 106 +++++----------------------------- 2 files changed, 13 insertions(+), 96 deletions(-) delete mode 100644 projects/perifinance/abi.json diff --git a/projects/perifinance/abi.json b/projects/perifinance/abi.json deleted file mode 100644 index 4870780e86..0000000000 --- a/projects/perifinance/abi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "totalIssuedPynths": "function totalIssuedPynths(bytes32 currencyKey) view returns (uint256 totalIssued)" -} \ No newline at end of file diff --git a/projects/perifinance/index.js b/projects/perifinance/index.js index 9daf0fe4d5..1810f4bbd6 100644 --- a/projects/perifinance/index.js +++ b/projects/perifinance/index.js @@ -1,97 +1,17 @@ -const sdk = require("@defillama/sdk"); -const { totalIssuedPynths } = require("./abi.json"); - -const BigNumber = require("bignumber.js"); - -const ethereum = "ethereum"; -const polygon = "polygon"; -const bsc = "bsc"; - const periFinanceContract = { - ethereum: "0x3a9a93A04eFB22e632632Ab584fF45DEB7321aC8", - polygon: "0x7C4cE79655Ac1e84400bC5962b4B75c2b86Bd974", - bsc: "0x82995a4170318f5E26CA6b650A337738dcc8114c", -}; - -const pUSD = "pUSD"; -const tokenKey = "usd-coin"; - -const totalIssuedPynthByChain = async (chain) => { - const currencyKey = rightPad(asciiToHex(pUSD), 64); - - const { output: totalIssuedPynth } = await sdk.api.abi.call({ - abi: totalIssuedPynths, - params: currencyKey, - target: periFinanceContract[chain], - chain, - }); - return totalIssuedPynth; -}; - -const getTVL = (totalIssuedPynths) => { - return BigNumber(totalIssuedPynths) - .div(10 ** 18) - .times(4); -}; - -const tvlByChain = (chain) => async (timestamp, block) => { - const totalIssuedPynth = await totalIssuedPynthByChain(chain); - - const tvl = getTVL(totalIssuedPynth); - - // toFixed(0) just converts the numbers into strings - return { - [tokenKey]: tvl.toFixed(0), - }; -}; - -module.exports = { - ethereum: { - tvl: tvlByChain(ethereum), - }, - bsc: { - tvl: tvlByChain(bsc), - }, - polygon: { - tvl: tvlByChain(polygon), - }, -}; - - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method asciiToHex - * @param {String} str - * @returns {String} hex representation of input string - */ - function asciiToHex (str) { - if(!str) - return "0x00"; - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; + ethereum: "0x0207157a7c154bFdEAD22751474c68660A4a540b", + polygon: "0x8f151e700772d6e8Dc7dA8B260c9e0C3eCbF4174", + bsc: "0x2Da103C31c4A80f828ea4158bD090e926003e8ad", + base: "0x0f2Af7246e1FcbEC5e334092B1F0D91BDA924faD", + moonriver: "0xB2f5Cd646Aab5f887150945576d51a8B5902F288", + moonbeam: "0x0f2Af7246e1FcbEC5e334092B1F0D91BDA924faD", } -/** - * Should be called to pad string to expected length - * - * @method rightPad - * @param {String} string to be padded - * @param {Number} chars that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -function rightPad(string, chars, sign) { - var hasPrefix = /^0x/i.test(string) || typeof string === 'number'; - string = string.toString(16).replace(/^0x/i,''); +Object.keys(periFinanceContract).forEach(chain => module.exports[chain] = { tvl }) - var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0; - - return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : "0")); -} \ No newline at end of file +async function tvl(api) { + const contract = periFinanceContract[api.chain]; + const pUSD = await api.call({ abi: 'function pUSD() view returns (bytes32)', target: contract}) + const totalIssued = await api.call({ abi: "function totalIssuedPynths(bytes32 currencyKey) view returns (uint256 totalIssued)", target: contract, params: pUSD}) + api.addCGToken("usd-coin", totalIssued * 4 / 1e18) +} From 49b5e6e67274b0ed93a77d1b61c5498b4ad70271 Mon Sep 17 00:00:00 2001 From: 0xton <0xton@proton.me> Date: Mon, 30 Sep 2024 16:57:43 +0800 Subject: [PATCH 0539/1768] Update: Torch Finance Rebrand its logo and name (#11759) Co-authored-by: grace0950 --- projects/torch/index.js | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/projects/torch/index.js b/projects/torch/index.js index 27943f7b33..37c7e5e307 100644 --- a/projects/torch/index.js +++ b/projects/torch/index.js @@ -1,14 +1,34 @@ const ADDRESSES = require("../helper/coreAssets.json") -const { sumTokensExport } = require('../helper/chain/ton') +const { sumTokens } = require('../helper/chain/ton') +const { get } = require("../helper/http") -const ROUTER = 'EQCaEOMOR2SRcXTVSolw--rY62ghCoCRjn4Is3bBdnqYwIVZ' +const DEX = 'EQCaEOMOR2SRcXTVSolw--rY62ghCoCRjn4Is3bBdnqYwIVZ' +const YIELD_ROUTER = 'EQDYU6gxBxFT3arWR-N9RFTfqAoQKyWk4JMgTBNOM2KL18Dw' + +async function tvl(api) { + const tokenTvl = await get('https://yield-api.torch.finance/tvl') + + const tvl = tokenTvl.reduce((acc, data) => { + acc += Number(data.tvl) / 1e9 + return acc + }, 0) + + await sumTokens({ + api, + owners: [DEX, YIELD_ROUTER], + tokens: [ADDRESSES.ton.TON], + }); + + api.add(ADDRESSES.ton.USDT, tvl * 1e6) +} module.exports = { timetravel: false, + methodology: `The TVL calculation for Torch includes both the general jettons + balance and LP jettons balance. The price of general jettons is obtained via tonApi, + while the price of LP jettons is calculated using on-chain data (reserve0, reserve1, + and total LP supply). The LP jettons price calculation is handled on the Torch API side.`.trim(), ton: { - tvl: sumTokensExport({ - owners: [ROUTER], - tokens: [ADDRESSES.ton.TON], - }) + tvl: tvl }, } \ No newline at end of file From 15d52b82086558cf6ae0135e19292e3716932c43 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:33:02 +0200 Subject: [PATCH 0540/1768] logx v2: track base --- projects/logx-v2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index bae5af35ad..6a4a62f445 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -5,6 +5,7 @@ module.exports = { } const config = { + base: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e',], arbitrum: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd', '0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6',], mantle: ['0x4417613C0fe034f7D333BF8a6247EaAAF1d51965', '0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8',], mode: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd','0x8BF17893f08C570fBA78E9268d3aFc61f42557f1'] From de9e0c164838ae9c1aea587b75f4f1e5964c8bf4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:21:28 +0200 Subject: [PATCH 0541/1768] handle stable pairs correctly --- projects/terraswap/factoryTvl.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/projects/terraswap/factoryTvl.js b/projects/terraswap/factoryTvl.js index 06c8723aaf..e6c929eaa0 100644 --- a/projects/terraswap/factoryTvl.js +++ b/projects/terraswap/factoryTvl.js @@ -36,23 +36,33 @@ async function getAllPairs(factory, chain, { blacklistedPairs = [] } = {}) { const [addr, balance] = getAssetInfo(asset) pairDto.assets.push({ addr, balance }) }) + pairDto.pair_type = pair.pair_type dtos.push(pairDto) }) - const {errors} = await PromisePool + const { errors } = await PromisePool .withConcurrency(10) .for(allPairs) .process(getPairPool) - if((errors?.length ?? 0) > 50){ + if ((errors?.length ?? 0) > 50) { throw new Error(`Too many errors: ${errors.length}/${allPairs.length} on ${chain}`) } return dtos } -function getFactoryTvl(factory, { blacklistedPairs = []} = {}) { +const isNotXYK = (pair) => pair.pair_type && (pair.pair_type.xyk || pair.pair_type.custom === 'concentrated') + +function getFactoryTvl(factory, { blacklistedPairs = [] } = {}) { return async (api) => { const pairs = (await getAllPairs(factory, api.chain, { blacklistedPairs })).filter(pair => (pair.assets[0].balance && pair.assets[1].balance)) - const data = pairs.map(({ assets }) => ({ + const xykPairs = pairs.filter(isNotXYK) + const otherPairs = pairs.filter(pair => !isNotXYK(pair)) + otherPairs.forEach(({ assets }) => { + api.add(assets[0].addr, assets[0].balance) + api.add(assets[1].addr, assets[1].balance) + }) + + const data = xykPairs.map(({ assets }) => ({ token0: assets[0].addr, token0Bal: assets[0].balance, token1: assets[1].addr, From bd7be245f768cbf4abd94816982d142a332b50b5 Mon Sep 17 00:00:00 2001 From: GENGE Date: Mon, 30 Sep 2024 19:21:54 +0200 Subject: [PATCH 0542/1768] feat: suzaku adapter (#11787) --- projects/suzaku/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/suzaku/index.js diff --git a/projects/suzaku/index.js b/projects/suzaku/index.js new file mode 100644 index 0000000000..a706249524 --- /dev/null +++ b/projects/suzaku/index.js @@ -0,0 +1,15 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +async function tvl(api) { + const logs = await getLogs2({ api, factory: '0xE5296638Aa86BD4175d802A210E158688e41A93c', eventAbi: 'event AddEntity(address indexed entity)', fromBlock: 20011312, }) + const COLLATERALS = logs.map(log => log.entity) + const tokens = await api.multiCall({ abi: 'address:asset', calls: COLLATERALS, }) + return api.sumTokens({ tokensAndOwners2: [tokens, COLLATERALS] }) +} + +module.exports = { + start: 1727654400, + avax: { + tvl, + }, +} From 7691af72693a769861da47a863cd203c2577a321 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 30 Sep 2024 22:18:42 +0200 Subject: [PATCH 0543/1768] Track Bob & Lisk tokens in Uniswap (#11789) --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 10 ++++++++++ projects/uniswap/index.js | 2 ++ 3 files changed, 13 insertions(+) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 5f339a813f..3daa97ad9f 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -181,6 +181,7 @@ "lightlink_phoenix", "linea", "liquidchain", + "lisk", "litecoin", "loop", "lukso", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 07d985fc41..40c014bd96 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -53,6 +53,16 @@ const fixBalancesTokens = { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, }, + lisk: { + '0x05d032ac25d322df992303dca074ee7392c117b9': { coingeckoId: 'tether', decimals: 6 }, + '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, + '0xac485391eb2d7d88253a7f1ef18c37f4242d1a24': { coingeckoId: 'lisk', decimals: 18 }, + }, + bob: { + "0x541fd749419ca806a8bc7da8ac23d346f2df8b77": { coingeckoId: "solv-btc", decimals: 18 }, + "0xcc0966d8418d412c599a6421b760a847eb169a8c": { coingeckoId: "solv-btc", decimals: 18 }, + "0x236f8c0a61da474db21b693fb2ea7aab0c803894": { coingeckoId: "universal-btc", decimals: 8 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index 1f7de184e2..734655327c 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -89,6 +89,8 @@ module.exports = { mantle: { factory: "0x0d922Fb1Bc191F64970ac40376643808b4B74Df9", fromBlock: 63795918 }, polygon_zkevm: { factory: "0xff83c3c800Fec21de45C5Ec30B69ddd5Ee60DFC2", fromBlock: 8466867 }, xdai: { factory: "0xe32F7dD7e3f098D518ff19A22d5f028e076489B1", fromBlock: 27416614 }, + bob: { factory: "0xcb2436774C3e191c85056d248EF4260ce5f27A9D", fromBlock: 5188280 }, + lisk: { factory: "0x0d922Fb1Bc191F64970ac40376643808b4B74Df9", fromBlock: 577168 }, }), filecoin: { tvl: filecoinTvl }, } From daa66614acefc355dd4c774b32e66757acc52ca4 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 30 Sep 2024 22:00:38 +0100 Subject: [PATCH 0544/1768] update staking contract --- projects/bank-ai/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/bank-ai/index.js b/projects/bank-ai/index.js index b50971fb18..4444b6cbd7 100644 --- a/projects/bank-ai/index.js +++ b/projects/bank-ai/index.js @@ -3,6 +3,6 @@ const { staking } = require('../helper/staking') module.exports = { ethereum: { tvl: () => ({}), - staking: staking("0x140Fae0A43190A3D0Cbf8DBdB347200EB84E81d1", "0xf19693068120185664E211F619c4F0530cE07088") + staking: staking("0x804Bd4F1c9B5D7864d6F215644fb931349EEACA2", "0xe18ab3568fa19e0ed38bc1d974eddd501e61e12d") } } \ No newline at end of file From 1ccc057757f093d18b2d89d95019e27fb88bea77 Mon Sep 17 00:00:00 2001 From: "BT.Wood(Tang Bo Hao)" Date: Tue, 1 Oct 2024 16:28:22 +0800 Subject: [PATCH 0545/1768] feat: update fixes methodology, add a flow.js helper (#11793) --- projects/fixes-coins/index.js | 17 ++------------- projects/fixes-frc20-staking/index.js | 19 +++------------- projects/fixes-frc20/index.js | 17 ++------------- projects/helper/chain/flow.js | 31 +++++++++++++++++++++++++++ projects/helper/env.js | 2 ++ 5 files changed, 40 insertions(+), 46 deletions(-) create mode 100644 projects/helper/chain/flow.js diff --git a/projects/fixes-coins/index.js b/projects/fixes-coins/index.js index 4cf80a4fc2..924a420ba0 100644 --- a/projects/fixes-coins/index.js +++ b/projects/fixes-coins/index.js @@ -1,5 +1,5 @@ // Fixes Inscription Protocol - 𝔉rc20 Treasury Pool: https://fixes.world/ -const { post } = require("../helper/http"); +const { callCadence } = require("../helper/chain/flow"); let queryTVLCode = ` import LiquidStaking from 0xd6f80565193ad727 @@ -59,22 +59,9 @@ fun main(): UFix64 { } `; -const queryCodeBase64 = Buffer.from(queryTVLCode, "utf-8").toString("base64"); - async function tvl() { try { - const response = await post( - "https://rest-mainnet.onflow.org/v1/scripts", - { script: queryCodeBase64 }, - { - headers: { "content-type": "application/json" }, - } - ); - let resEncoded = response; - let resString = Buffer.from(resEncoded, "base64").toString("utf-8"); - let resJson = JSON.parse(resString); - let flowTokenTVL = Number(resJson.value); - + const flowTokenTVL = await callCadence(queryTVLCode, true); return { flow: flowTokenTVL }; } catch (error) { throw new Error("Couln't query scripts of Fixes coins", error); diff --git a/projects/fixes-frc20-staking/index.js b/projects/fixes-frc20-staking/index.js index da5d742b81..119d797cb1 100644 --- a/projects/fixes-frc20-staking/index.js +++ b/projects/fixes-frc20-staking/index.js @@ -1,5 +1,5 @@ // Fixes Inscription Protocol - Staking Pool: https://fixes.world/ -const { post } = require("../helper/http"); +const { callCadence } = require("../helper/chain/flow"); let queryTVLCode = ` import FRC20Staking from 0xd2abb5dbf5e08666 @@ -11,7 +11,7 @@ import FRC20Indexer from 0xd2abb5dbf5e08666 access(all) fun main(): UFix64 { let acctsPool = FRC20AccountsPool.borrowAccountsPool() - let stakingTokens = acctsPool.getFRC20Addresses(type: FRC20AccountsPool.ChildAccountType.Staking) + let stakingTokens = acctsPool.getAddresses(type: FRC20AccountsPool.ChildAccountType.Staking) var totalTVL = 0.0 let ticks = stakingTokens.keys @@ -59,22 +59,9 @@ fun main(): UFix64 { } `; -const queryCodeBase64 = Buffer.from(queryTVLCode, "utf-8").toString("base64"); - async function tvl() { try { - const response = await post( - "https://rest-mainnet.onflow.org/v1/scripts", - { script: queryCodeBase64 }, - { - headers: { "content-type": "application/json" }, - } - ); - let resEncoded = response; - let resString = Buffer.from(resEncoded, "base64").toString("utf-8"); - let resJson = JSON.parse(resString); - let flowTokenTVL = Number(resJson.value); - + const flowTokenTVL = await callCadence(queryTVLCode, true); return { flow: flowTokenTVL }; } catch (error) { throw new Error( diff --git a/projects/fixes-frc20/index.js b/projects/fixes-frc20/index.js index a7ad4625df..332ac4ca58 100644 --- a/projects/fixes-frc20/index.js +++ b/projects/fixes-frc20/index.js @@ -1,5 +1,5 @@ // Fixes Inscription Protocol - 𝔉rc20 Treasury Pool: https://fixes.world/ -const { post } = require("../helper/http"); +const { callCadence } = require("../helper/chain/flow"); let queryTVLCode = ` import FRC20Indexer from 0xd2abb5dbf5e08666 @@ -46,22 +46,9 @@ fun main(): UFix64 { } `; -const queryCodeBase64 = Buffer.from(queryTVLCode, "utf-8").toString("base64"); - async function tvl() { try { - const response = await post( - "https://rest-mainnet.onflow.org/v1/scripts", - { script: queryCodeBase64 }, - { - headers: { "content-type": "application/json" }, - } - ); - let resEncoded = response; - let resString = Buffer.from(resEncoded, "base64").toString("utf-8"); - let resJson = JSON.parse(resString); - let flowTokenTVL = Number(resJson.value); - + const flowTokenTVL = await callCadence(queryTVLCode, true); return { flow: flowTokenTVL }; } catch (error) { throw new Error( diff --git a/projects/helper/chain/flow.js b/projects/helper/chain/flow.js new file mode 100644 index 0000000000..33e5c9c6f7 --- /dev/null +++ b/projects/helper/chain/flow.js @@ -0,0 +1,31 @@ +// const sdk = require('@defillama/sdk') + +const { post } = require('../http') +const { getEnv } = require('../env') + +const endpoint = () => getEnv('FLOW_RPC') + +async function callCadenceScript(script, isNumber = false) { + const queryCodeBase64 = Buffer.from(script, "utf-8").toString("base64"); + const response = await post( + `${endpoint()}/v1/scripts`, + { script: queryCodeBase64 }, + { + headers: { "content-type": "application/json" }, + } + ); + let resEncoded = response; + let resString = Buffer.from(resEncoded, "base64").toString("utf-8"); + let resJson = JSON.parse(resString); + + if (isNumber) { + return Number(resJson.value); + } else { + return resJson; + } +} + +module.exports = { + endpoint: endpoint(), + callCadence: callCadenceScript, +}; diff --git a/projects/helper/env.js b/projects/helper/env.js index 69b6c82ea8..d36f8366ab 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -9,6 +9,8 @@ const DEFAULTS = { SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', APTOS_RPC: 'https://aptos-mainnet.pontem.network', SUI_RPC: 'https://fullnode.mainnet.sui.io/', + FLOW_RPC: 'https://rest-mainnet.onflow.org', + FLOW_EVM_RPC: 'https://mainnet.evm.nodes.onflow.org', MULTIVERSX_RPC: 'https://api.multiversx.com', ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", From e886c33206eeb8fc3c1c965345f26dc24138ba3d Mon Sep 17 00:00:00 2001 From: crispyfisherman Date: Tue, 1 Oct 2024 15:29:29 +0700 Subject: [PATCH 0546/1768] Update TVL data (#11792) --- projects/doubleup/index.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/projects/doubleup/index.js b/projects/doubleup/index.js index 7cf3171866..0537218bb3 100644 --- a/projects/doubleup/index.js +++ b/projects/doubleup/index.js @@ -1,8 +1,6 @@ -const ADDRESSES = require("../helper/coreAssets.json"); const sui = require("../helper/chain/sui"); const UNI_HOUSE_OBJ_ID = "0x75c63644536b1a7155d20d62d9f88bf794dc847ea296288ddaf306aa320168ab" -const SUI = ADDRESSES.sui.SUI; async function tvl(api) { const unihouseDynamicFields = await sui.getDynamicFieldObjects({ @@ -15,15 +13,22 @@ async function tvl(api) { const unihouseIdList = unihouseList.map((house) => house.fields.id.id); - // console.log(unihouseIdList); - for (const id of unihouseIdList) { const house = await sui.getObject(id); + const houseType = house?.type; + const coinType = houseType.split("<")[1].split(">")[0]; + + const housePipeDebt = house?.fields?.house_pipe_debt?.fields?.value; + const housePool = house?.fields?.house_pool; + const houseTvl = Number(housePipeDebt) + Number(housePool); + + api.add(coinType, houseTvl); + const pipeDebt = house?.fields?.pipe_debt?.fields?.value; - const totalSui = Number(pipeDebt) + Number(house?.fields?.pool); + const _tvl = Number(pipeDebt) + Number(house?.fields?.pool); - api.add(SUI, totalSui); + api.add(coinType, _tvl); } } From fa9c448db7332f6a6fbae49021524182ddce0df2 Mon Sep 17 00:00:00 2001 From: mrben1 Date: Tue, 1 Oct 2024 21:31:21 +1300 Subject: [PATCH 0547/1768] Added Ethereum tvm (#11791) --- projects/apestore/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/apestore/index.js b/projects/apestore/index.js index f4350642fb..419a1d1d86 100644 --- a/projects/apestore/index.js +++ b/projects/apestore/index.js @@ -9,10 +9,17 @@ const routers = [ "0x0bf8edd756ff6caf3f583d67a9fd8b237e40f58a" ]; +const routersEth = [ + "0xA7d854eAf481846f7dA8CC863a46aC1F67b548D8" +]; + const tokens = [coreAssets.null]; module.exports = { base: { tvl: sumTokensExport({ owners: routers, tokens }) }, + ethereum: { + tvl: sumTokensExport({ owners: routersEth, tokens }) + } }; \ No newline at end of file From ec2a8d8ce5fe2486116f650d522d10a540e17759 Mon Sep 17 00:00:00 2001 From: Josh Levine <24902242+jparklev@users.noreply.github.com> Date: Tue, 1 Oct 2024 02:11:39 -0700 Subject: [PATCH 0548/1768] Rumpel: add re7LRT and re7rwBTC (#11790) --- projects/rumpel/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/rumpel/index.js b/projects/rumpel/index.js index 27c6607c6c..2bd21af778 100644 --- a/projects/rumpel/index.js +++ b/projects/rumpel/index.js @@ -21,12 +21,15 @@ const TOKENS = { SUSDE: ADDRESSES.ethereum.sUSDe, USDE: ADDRESSES.ethereum.USDe, WSTETH: ADDRESSES.ethereum.WSTETH, + WBTC: ADDRESSES.ethereum.WBTC, WEETH: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", WEETHS: "0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88", MSTETH: "0x49446A0874197839D15395B908328a74ccc96Bc0", STETH: ADDRESSES.ethereum.STETH, RSUSDE: "0x82f5104b23FF2FA54C2345F821dAc9369e9E0B26", RSTETH: "0x7a4effd87c2f3c55ca251080b1343b605f327e3a", + RE7LRT: "0x84631c0d0081FDe56DeB72F6DE77abBbF6A9f93a", + RE7RWBTC: "0x7F43fDe12A40dE708d908Fb3b9BFB8540d9Ce444", KUSDE: "0xBE3cA34D0E877A1Fc889BD5231D65477779AFf4e", KWEETH: "0x2DABcea55a12d73191AeCe59F508b191Fb68AdaC", DC_WSTETH_COLLATERAL: "0xC329400492c6ff2438472D4651Ad17389fCb843a", @@ -43,7 +46,7 @@ async function tvl(api) { async function sumBaseTokens() { return api.sumTokens({ - owners, tokens: [TOKENS.AGETH, TOKENS.WEETH, TOKENS.USDE, TOKENS.SUSDE, TOKENS.MSTETH, TOKENS.WSTETH, TOKENS.STETH,] + owners, tokens: [TOKENS.AGETH, TOKENS.WEETH, TOKENS.USDE, TOKENS.SUSDE, TOKENS.MSTETH, TOKENS.WSTETH, TOKENS.STETH,TOKENS.WBTC,] }) } @@ -86,6 +89,8 @@ async function tvl(api) { TOKENS.MSTETH, TOKENS.RSUSDE, TOKENS.RSTETH, + TOKENS.RE7LRT, + TOKENS.RE7RWBTC, ] return api.sumTokens({ owners, tokens }) } From d6ed363f121aeb190715eb9a472e1815c5bf8644 Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Tue, 1 Oct 2024 15:31:51 +0300 Subject: [PATCH 0549/1768] Add WETH tokens to CrossCurve TVL (#11796) --- projects/crosscurve/index.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index ebdef37b8b..f2b03fc101 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -14,6 +14,7 @@ module.exports = { "0x390f3595bCa2Df7d23783dFd126427CCeb997BF4", // crvUSDT "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3Crv "0xc4AD29ba4B3c580e6D59105FFf484999997675Ff", // crv3crypto + "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH ], }), }, @@ -29,6 +30,7 @@ module.exports = { "0x82670f35306253222F8a165869B28c64739ac62e", // 3c-crvUSD "0x73aF1150F265419Ef8a5DB41908B700C32D49135", // crvUSDT "0x7f90122BF0700F9E7e1F688fe926940E8839F353", // 2CRV + "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // WETH ], }), }, @@ -72,6 +74,7 @@ module.exports = { "0x03771e24b7c9172d163bf447490b142a15be3485", // crvUSDC "0x1337bedc9d22ecbe766df105c9623922a27963ec", // 3pool "0xd1b30ba128573fcd7d141c8a987961b40e047bb6", // crvUSDT + "0x4200000000000000000000000000000000000006", // WETH ], }), }, @@ -93,6 +96,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0xf6C5F01C7F3148891ad0e19DF78743D31E390D1f", // 4pool + "0x4200000000000000000000000000000000000006", // WETH ], }), }, @@ -104,4 +108,36 @@ module.exports = { ], }), }, + blast: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x4300000000000000000000000000000000000004", // WETH + ], + }), + }, + mantle: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111", // WETH + ], + }), + }, + linea: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", // WETH + ], + }), + }, + taiko: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0xa51894664a773981c6c112c43ce576f315d5b1b6", // WETH + ], + }), + }, }; From 7033f91c6f0be542a46ed0f9bc1ac5a21e452ab0 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:50:41 +0200 Subject: [PATCH 0550/1768] update swBTC --- projects/aera/index.js | 76 +++++++++++++++++------------------ projects/swell-swbtc/index.js | 22 +++------- 2 files changed, 43 insertions(+), 55 deletions(-) diff --git a/projects/aera/index.js b/projects/aera/index.js index 762598907b..68c73fe61f 100644 --- a/projects/aera/index.js +++ b/projects/aera/index.js @@ -17,22 +17,22 @@ const config = { ], cometReward: '0x45939657d1CA34A8FA39A924B71D28Fe8431e581', vaultFactories: [ - { - address: "0xfa6295a04f99815e8fa65240ed2cf9ad383c50ba", - fromBlock: 42027977 - }, - { - address: "0x3c14801dc6402e0560d69083f2b238b4c4b4dafe", - fromBlock: 42835719 - }, - { - address: "0x49b428ea1cd536e7d103e9729ea14400785e30ec", - fromBlock: 54062542 - }, - { - address: "0xa1c908cf7371047649dfca9ece01327dc6db3094", - fromBlock: 48024333 - } + { + address: "0xfa6295a04f99815e8fa65240ed2cf9ad383c50ba", + fromBlock: 42027977 + }, + { + address: "0x3c14801dc6402e0560d69083f2b238b4c4b4dafe", + fromBlock: 42835719 + }, + { + address: "0x49b428ea1cd536e7d103e9729ea14400785e30ec", + fromBlock: 54062542 + }, + { + address: "0xa1c908cf7371047649dfca9ece01327dc6db3094", + fromBlock: 48024333 + } ] }, ethereum: { @@ -51,26 +51,26 @@ const config = { cometReward: '0x1B0e765F6224C21223AeA2af16c1C46E38885a40', vaultFactories: [ { - address: "0x8a7c03e9f037ba096f1fa8b48bfd65c7578327c9", - fromBlock: 17642780 + address: "0x8a7c03e9f037ba096f1fa8b48bfd65c7578327c9", + fromBlock: 17642780 }, { - address: "0xbebb92ed09688e64dc38c240b600d0b1d504ee56", - fromBlock: 17694550 + address: "0xbebb92ed09688e64dc38c240b600d0b1d504ee56", + fromBlock: 17694550 }, { - address: "0x6b8d4485e11aae228a32FAe5802c6d4BA25EA404", - fromBlock: 18143506 + address: "0x6b8d4485e11aae228a32FAe5802c6d4BA25EA404", + fromBlock: 18143506 }, { - address: "0x9500948c2BEeeB2Da4CC3aA21CB05Bd2e7C27191", - fromBlock: 18192390 + address: "0x9500948c2BEeeB2Da4CC3aA21CB05Bd2e7C27191", + fromBlock: 18192390 }, { - address: "0x38896b4ac8420b8A2B768001Da44d11109F1797D", - fromBlock: 18737324 + address: "0x38896b4ac8420b8A2B768001Da44d11109F1797D", + fromBlock: 18737324 } - ] + ] }, arbitrum: { aavePool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD', @@ -87,10 +87,10 @@ const config = { ], cometReward: '0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae', vaultFactories: [ - { - address: "0xaF2762E1F75DeCdb8d240576e7A2CEc1A365cD46", - fromBlock: 203397910 - } + { + address: "0xaF2762E1F75DeCdb8d240576e7A2CEc1A365cD46", + fromBlock: 203397910 + } ] }, base: { @@ -112,10 +112,10 @@ const config = { ], cometReward: '0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1', vaultFactories: [ - { - address: "0x5CD0Cb0DcDEF98a8d07a8D44054a13F2c35C53E1", - fromBlock: 13582859 - } + { + address: "0x5CD0Cb0DcDEF98a8d07a8D44054a13F2c35C53E1", + fromBlock: 13582859 + } ] }, } @@ -131,9 +131,9 @@ Object.keys(config).forEach(chain => { const COMETS = config[chain].comets const COMET_REWARD = config[chain].cometReward const vaultFactories = config[chain].vaultFactories - + const vaultCreateds = [] - for (const { address, fromBlock} of vaultFactories) { + for (const { address, fromBlock } of vaultFactories) { const logs = await getLogs({ api, target: address, @@ -142,7 +142,7 @@ Object.keys(config).forEach(chain => { onlyArgs: true, fromBlock, }) - vaultCreateds.push(...logs.map(x => ({vault: x.vault, assetRegistry: x.assetRegistry}))) + vaultCreateds.push(...logs.map(x => ({ vault: x.vault, assetRegistry: x.assetRegistry }))) } const vaults = [] diff --git a/projects/swell-swbtc/index.js b/projects/swell-swbtc/index.js index a419de3aee..61f3308a3c 100644 --- a/projects/swell-swbtc/index.js +++ b/projects/swell-swbtc/index.js @@ -1,20 +1,8 @@ -const ADDRESSES = require('../helper/coreAssets.json') - -const WBTC = ADDRESSES.ethereum.WBTC; -const swBTC = '0x8DB2350D78aBc13f5673A411D4700BCF87864dDE' - -async function tvl(api) { - const totalSupply = await api.call({ target: swBTC, abi: 'uint256:totalSupply'}); - const rate = await api.call({ target: swBTC, abi: 'uint256:pricePerShare'}); - - return { - [WBTC]: (totalSupply * rate)/1e8 - }; -} +const { sumERC4626VaultsExport } = require('../helper/erc4626') module.exports = { - doublecounted: true, - ethereum: { - tvl, - }, + doublecounted: true, + ethereum: { + tvl: sumERC4626VaultsExport({ vaults: ['0x8DB2350D78aBc13f5673A411D4700BCF87864dDE'], isOG4626: true, }), + }, } \ No newline at end of file From 50d37d11afef02502d4985a7dc5d2824ea80d37b Mon Sep 17 00:00:00 2001 From: Sujith Somraaj <35634175+sujithsomraaj@users.noreply.github.com> Date: Tue, 1 Oct 2024 18:22:12 +0530 Subject: [PATCH 0551/1768] chore: update superform adapter to add Blast & Linea support (#11797) --- projects/superform/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/superform/index.js b/projects/superform/index.js index 68eb5431df..ddaa4146a2 100644 --- a/projects/superform/index.js +++ b/projects/superform/index.js @@ -1,4 +1,4 @@ -const superform_chains = ["ethereum", "polygon", "bsc", "avax", "arbitrum", "optimism", "base", "fantom"]; +const superform_chains = ["ethereum", "polygon", "bsc", "avax", "arbitrum", "optimism", "base", "fantom", "blast", "linea"]; const factory_contract = "0xD85ec15A9F814D6173bF1a89273bFB3964aAdaEC"; const fantom_factory_contract = "0xbc85043544CC2b3Fd095d54b6431822979BBB62A"; From a7594a48a0519d272b98aef0327bedc411d4878f Mon Sep 17 00:00:00 2001 From: Hamza Bhatti Date: Tue, 1 Oct 2024 17:52:40 +0500 Subject: [PATCH 0552/1768] Added swapmode dex support on mode network in a51-finance-v3 (#11795) Co-authored-by: anassohail99 Co-authored-by: Anas Bin Sohail <50760655+anassohail99@users.noreply.github.com> --- projects/a51-finance-v3/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/a51-finance-v3/index.js b/projects/a51-finance-v3/index.js index 7d3e171b29..5b18a09575 100644 --- a/projects/a51-finance-v3/index.js +++ b/projects/a51-finance-v3/index.js @@ -40,6 +40,8 @@ const config = { manta: [{ target: "0x69317029384c3305fC04670c68a2b434e2D8C44C", helper: "0xa1d8180f4482359ceb7eb7437fcf4a2616830f81", startBlock: 1834975 },], // lynex linea: [{target: "0xA8Dc31c8C9F93dB2e42A5472F580689794639576",helper: "0x965356eb2C208Ce4130E267342cA720042Cce7b2",startBlock: 4518443,},], + // swapmode + mode: [{ target: "0x69317029384c3305fC04670c68a2b434e2D8C44C", helper: "0xFFD9acf25F2D930BE88D486D588ecBa7a418DE0B", startBlock: 11042629 },], } module.exports = { From b95ebea36085496ec1cfc12acb439fa51908e2ab Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:29:47 +0200 Subject: [PATCH 0553/1768] track corn-l2 --- projects/corn-l2/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/corn-l2/index.js diff --git a/projects/corn-l2/index.js b/projects/corn-l2/index.js new file mode 100644 index 0000000000..99289b89f9 --- /dev/null +++ b/projects/corn-l2/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owners: [ + "0x8bc93498b861fd98277c3b51d240e7e56e48f23c", + ], + fetchCoValentTokens: true, + permitFailure: true + }), + }, +}; From f6c131cd4fbab6f2bdf3e16fc16e9964d414c8f8 Mon Sep 17 00:00:00 2001 From: TJakubek <39831436+TJakubek@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:11:07 +0200 Subject: [PATCH 0554/1768] chore: add enosys v3 dex on flare (#11799) --- projects/enosys-dex-v3/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/enosys-dex-v3/index.js b/projects/enosys-dex-v3/index.js index bc6987e740..2cb8d3c469 100644 --- a/projects/enosys-dex-v3/index.js +++ b/projects/enosys-dex-v3/index.js @@ -2,4 +2,5 @@ const { uniV3Export } = require("../helper/uniswapV3"); module.exports = uniV3Export({ songbird: { factory: "0x416F1CcBc55033Ae0133DA96F9096Fe8c2c17E7d", fromBlock: 69857654 }, + flare: { factory: "0x17AA157AC8C54034381b840Cb8f6bf7Fc355f0de", fromBlock: 29925441 }, }); \ No newline at end of file From 457c8c9d6ba687fac6e20c72ab977d97623c89c3 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 1 Oct 2024 20:13:20 +0300 Subject: [PATCH 0555/1768] Add GraFun (#11798) --- projects/grafun/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/grafun/index.js diff --git a/projects/grafun/index.js b/projects/grafun/index.js new file mode 100644 index 0000000000..90a4d867a2 --- /dev/null +++ b/projects/grafun/index.js @@ -0,0 +1,21 @@ +const ethers = require("ethers"); + +const BSC_RPC_URL = 'https://bsc-dataseed1.binance.org/'; +const TOKEN_SALE_FACTORY = "0x8341b19a2A602eAE0f22633b6da12E1B016E6451"; + +async function getBscTVL() { + const provider = new ethers.JsonRpcProvider(BSC_RPC_URL); + + const balanceWei = await provider.getBalance(TOKEN_SALE_FACTORY); + const balanceBNB = ethers.formatEther(balanceWei); + + return { binancecoin: balanceBNB }; +} + +module.exports = { + methodology: "TVL is calculated by aggregating the market value of BNB tokens held within the Token Sale Factory smart contract.", + start: 42593135, + bsc: { + tvl: getBscTVL + } +}; From d427208d06c98eaf63a3290724cd718ac208e8c0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:14:57 +0200 Subject: [PATCH 0556/1768] refactor grafun --- projects/grafun/index.js | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/projects/grafun/index.js b/projects/grafun/index.js index 90a4d867a2..fb73c3eea5 100644 --- a/projects/grafun/index.js +++ b/projects/grafun/index.js @@ -1,21 +1,8 @@ -const ethers = require("ethers"); - -const BSC_RPC_URL = 'https://bsc-dataseed1.binance.org/'; -const TOKEN_SALE_FACTORY = "0x8341b19a2A602eAE0f22633b6da12E1B016E6451"; - -async function getBscTVL() { - const provider = new ethers.JsonRpcProvider(BSC_RPC_URL); - - const balanceWei = await provider.getBalance(TOKEN_SALE_FACTORY); - const balanceBNB = ethers.formatEther(balanceWei); - - return { binancecoin: balanceBNB }; -} - +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') module.exports = { - methodology: "TVL is calculated by aggregating the market value of BNB tokens held within the Token Sale Factory smart contract.", - start: 42593135, - bsc: { - tvl: getBscTVL - } + methodology: "TVL is calculated by aggregating the market value of BNB tokens held within the Token Sale Factory smart contract.", + start: 42593135, + bsc: { + tvl: sumTokensExport({ owner: '0x8341b19a2A602eAE0f22633b6da12E1B016E6451', token: nullAddress }) + } }; From 5010fc1e34f395a011102ba585c3b64905498040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Soares?= <77671016+FSoaresDev@users.noreply.github.com> Date: Tue, 1 Oct 2024 21:40:39 +0100 Subject: [PATCH 0557/1768] Astrovault adapter update (#11801) --- projects/astrovault/index.js | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/projects/astrovault/index.js b/projects/astrovault/index.js index 793056b5ee..9d3ab70cf7 100644 --- a/projects/astrovault/index.js +++ b/projects/astrovault/index.js @@ -2,17 +2,36 @@ const { queryContract, } = require("../helper/chain/cosmos"); const { PromisePool } = require('@supercharge/promise-pool') const { transformDexBalances } = require('../helper/portedTokens') -const STABLE_FACTORY_ARCHWAY = "archway19yzx44k7w7gsjjhumkd4sh9r0z6lscq583hgpu9s4yyl00z9lahq0ptra0"; -const STANDARD_FACTORY_ARCHWAY = "archway1cq6tgc32az7zpq5w7t2d89taekkn9q95g2g79ka6j46ednw7xkkq7n55a2"; -const HYBRID_FACTORY_ARCHWAY = "archway1zlc00gjw4ecan3tkk5g0lfd78gyfldh4hvkv2g8z5qnwlkz9vqmsdfvs7q"; +const data = { + archway: { + stableFactory: + "archway19yzx44k7w7gsjjhumkd4sh9r0z6lscq583hgpu9s4yyl00z9lahq0ptra0", + standardFactory: + "archway1cq6tgc32az7zpq5w7t2d89taekkn9q95g2g79ka6j46ednw7xkkq7n55a2", + hybridFactory: + "archway1zlc00gjw4ecan3tkk5g0lfd78gyfldh4hvkv2g8z5qnwlkz9vqmsdfvs7q", + }, + neutron: { + stableFactory: + "neutron10rtkhawvvqxp5zmdqn0ehcsygxjgtj64vrg58v6wnf9tn00uu97s7qfcdq", + standardFactory: + "neutron1r27at895fhu6sdj3v8jjra0n2pvu7jxrr3m90py058dkmm83wh8s9qkxw7", + hybridFactory: + "neutron16yn2gcz24s9qwpuxvrhl3xed0pmhrgwx2mz40zrazfc0pt5kq0psucs6xl", + }, +}; async function tvl(api) { const { chain } = api - for (const factory of [STABLE_FACTORY_ARCHWAY, STANDARD_FACTORY_ARCHWAY, HYBRID_FACTORY_ARCHWAY]) { + for (const factory of [ + data[chain].stableFactory, + data[chain].standardFactory, + data[chain].hybridFactory, + ]) { let allPools = []; let pagesRemaining = true; let start_after = null; - const key = factory === STANDARD_FACTORY_ARCHWAY ? 'pairs' : 'pools' + const key = factory === data[chain].standardFactory ? 'pairs' : 'pools' while (pagesRemaining) { const poolsList = await queryContract({ @@ -48,7 +67,7 @@ async function tvl(api) { .for(allPools) .process(getPoolAssetsState) - if (factory === STANDARD_FACTORY_ARCHWAY) await transformDexBalances({ chain, data: poolAssets, balances: api.getBalances() }) + if (factory === data[chain].standardFactory) await transformDexBalances({ chain, data: poolAssets, balances: api.getBalances() }) else { poolAssets.forEach(({ token0, token0Bal, token1, token1Bal }) => { api.add(token0, token0Bal) @@ -63,5 +82,8 @@ module.exports = { misrepresentedTokens: true, archway: { tvl, - } + }, + neutron: { + tvl, + }, } \ No newline at end of file From 88cf7056ba94ecb11700832f00b69673392066b1 Mon Sep 17 00:00:00 2001 From: MirthFutures <69535002+MirthFutures@users.noreply.github.com> Date: Wed, 2 Oct 2024 05:06:43 -0400 Subject: [PATCH 0558/1768] Add Rootstock Chain for Beefy (#11802) --- projects/beefy/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/beefy/index.js b/projects/beefy/index.js index ee8c5d5e8c..42a2fb0324 100644 --- a/projects/beefy/index.js +++ b/projects/beefy/index.js @@ -34,6 +34,7 @@ const chains = { ethereum: 1, optimism: 10, cronos: 25, + rsk: 30, bsc: 56, xdai: 100, fuse: 122, From 06da5b698e09550c157aef6f920fabedb51b23a5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:36:41 +0200 Subject: [PATCH 0559/1768] update logx v2 --- projects/logx-v2/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index 6a4a62f445..23f27b00ee 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -8,7 +8,9 @@ const config = { base: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e',], arbitrum: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd', '0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6',], mantle: ['0x4417613C0fe034f7D333BF8a6247EaAAF1d51965', '0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8',], - mode: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd','0x8BF17893f08C570fBA78E9268d3aFc61f42557f1'] + mode: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd','0x8BF17893f08C570fBA78E9268d3aFc61f42557f1'], + bob: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], + sei: ['0xc010f83ae18dC5f40e888898F6605F075686432e','0x0B3b4FAFDe8baFde82C3BfD38538B7aEe4407498'], } Object.keys(config).forEach(chain => { From 76f86fbe2ad9042e1cf564952d9d46052cbd8748 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:41:24 +0200 Subject: [PATCH 0560/1768] minor fix --- projects/honeyswap/index.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/projects/honeyswap/index.js b/projects/honeyswap/index.js index 5d94a36f0c..99d67f7e88 100644 --- a/projects/honeyswap/index.js +++ b/projects/honeyswap/index.js @@ -9,12 +9,6 @@ module.exports = { blacklist: [ '0x4f4f9b8d5b4d0dc10506e5551b0513b61fd59e75', ], - log_minTokenValue: 1e5, - log_coreAssetPrices: [ - 1/1e18, - 197/1e18, - 1824/1e18, - ] }) }, polygon: { From 9867ef964d8f256109153fc6b22d4be33e573062 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:34:54 +0200 Subject: [PATCH 0561/1768] fix astroport classic --- projects/astroport-classic/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/astroport-classic/index.js b/projects/astroport-classic/index.js index b15e40f8b5..1b505234f7 100644 --- a/projects/astroport-classic/index.js +++ b/projects/astroport-classic/index.js @@ -5,9 +5,11 @@ module.exports = { misrepresentedTokens: true, methodology: "Liquidity on the DEX", terra: { - tvl: getFactoryTvl("terra1fnywlw4edny3vw44x04xd67uzkdqluymgreu7g",) + // tvl: getFactoryTvl("terra1fnywlw4edny3vw44x04xd67uzkdqluymgreu7g",) // it stopped working and team no long maintains it + tvl: () => ({}) }, hallmarks: [ [1651881600, "UST depeg"], - ] + ], + // deadFrom: '2024-10-02' } // node test.js projects/astroport/index.js From 6645cc2c8f6f874cb4158186bbc63cb7504991e5 Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Wed, 2 Oct 2024 20:37:12 +0530 Subject: [PATCH 0562/1768] added new pools (#11803) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 57 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index 4119f2420f..13fb78e13b 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -53,6 +53,20 @@ const ALPHAFI_CETUS_TVL_IDS = [ token0Type: ADDRESSES.sui.BUCK, token1Type: ADDRESSES.sui.USDC }, + { + poolID: "0xd50ec46c2514bc8c588760aa7ef1446dcd37993bc8a3f9e93563af5f31b43ffd", + cetusPoolID: "0x9ddb0d269d1049caf7c872846cc6d9152618d1d3ce994fae84c1c051ee23b179", + investorID: "0x74308f0de7ea1fc4aae2046940522f8f79a6a76db94e1227075f1c2343689882", + token0Type: ADDRESSES.sui.SOL, + token1Type: ADDRESSES.sui.USDC + }, + { + poolID: "0x6eec371c24ad264ced3a1f40b83d7d720aa2b0afa860a6af85436f6a769842e1", + cetusPoolID: "0xaa72bd551b25715b8f9d72f226fa02526bdf2e085a86faec7184230c5209bb6e", + investorID: "0x651acc1166023a08c17f24e71550982400e9b1f4950cc1324410300efc1af905", + token0Type: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA", + token1Type: ADDRESSES.sui.SUI + }, ] @@ -83,7 +97,14 @@ const ALPHAFI_NAVI_TVL_IDS = [ expo: 8 }, ] - +const ALPHAFI_NAVI_LOOP_TVL_IDS = [ + { + poolID: "0xd013a1a0c6f2bad46045e3a1ba05932b4a32f15864021d7e0178d5c2fdcc85e3", + investorID: "0x36cc3135c255632f9275a5b594145745f8344ce8f6e46d9991ffb17596195869", + tokenType: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT", + expo: 9 + }, +] const ALPHAFI_POOL2_IDS = [{ poolID: "0x594f13b8f287003fd48e4264e7056e274b84709ada31e3657f00eeedc1547e37", cetusPoolID: "0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720", @@ -91,6 +112,13 @@ const ALPHAFI_POOL2_IDS = [{ token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", token1Type: ADDRESSES.sui.SUI }, +{ + poolID: "0x430986b53a787362e54fa83d0ae046a984fb4285a1bc4fb1335af985f4fe019d", + cetusPoolID: "0x0cbe3e6bbac59a93e4d358279dff004c98b2b8da084729fabb9831b1c9f71db6", + investorID: "0x705c560fd1f05c64e0480af05853e27e1c3d04e255cd6c5cb6921f5d1df12b5a", + token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", + token1Type: ADDRESSES.sui.USDC +}, ] const ALPHA_POOL_ID = "0x6ee8f60226edf48772f81e5986994745dae249c2605a5b12de6602ef1b05b0c1" @@ -127,9 +155,32 @@ async function addPoolTVL2(api, alphafiNaviPools){ } } +async function addPoolTVL3(api, alphafiNaviLoopPools){ + + for (const { poolID, investorID, tokenType, expo } of alphafiNaviLoopPools){ + let poolObject = await sui.getObject(poolID); + let investorObject = await sui.getObject(investorID); + let tokensInvested = poolObject.fields.tokensInvested; + + let liquidity = parseFloat(tokensInvested); + /* + in the code below, we are subtracting the debt in the pool from the liquidity, since the borrowed tokens are supplied back to the pool (as part of our strategy). + we have current_debt_to_supply_ratio in the object, so current debt in the system is (current liquidity * current_debt_to_supply_ratio). + we subtract the above derived debt from the liquidity. + current_debt_to_supply_ratio in our system is scaled by 1e20, hence the division of 1e20 in the below used expression. + */ + liquidity = liquidity*(1-(parseFloat(investorObject.fields.current_debt_to_supply_ratio)/parseFloat(1e20))); + + tokensInvested = (liquidity.toString().split('.')[0]); + + let balance = BigInt(tokensInvested)/BigInt(Math.pow(10, 9-expo)); + api.add(tokenType, balance); + } +} + async function tvl(api) { - await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS)]) + await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS)]) } async function pool2(api) { @@ -141,7 +192,7 @@ async function pool2(api) { async function staking(api) { let alphaPoolObject = await sui.getObject(ALPHA_POOL_ID) - api.addToken(ALPHA_COIN_TYPE, Number(alphaPoolObject.fields.alpha_bal)) + api.addToken(ALPHA_COIN_TYPE, BigInt(alphaPoolObject.fields.alpha_bal)) } module.exports = { From a12d3c3c30490531f4b43e32b5b76559dc2288a9 Mon Sep 17 00:00:00 2001 From: silostaking <155597697+silostaking@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:47:36 -0400 Subject: [PATCH 0563/1768] Fix reference from ustake to utoken to fix accounting (#11805) Co-authored-by: Bob <> --- projects/silostake/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/silostake/index.js b/projects/silostake/index.js index 101c07d4d9..0a54e7cfa7 100644 --- a/projects/silostake/index.js +++ b/projects/silostake/index.js @@ -36,7 +36,7 @@ Object.keys(config).forEach(chain => { // Logic for calculating TVL - just get total ustake. let state = await getState(chain, hub); - let total_ustake = state['total_ustake']; + let total_ustake = state['total_utoken']; api.add(coinGeckoId, total_ustake / 10 ** 6, { skipChain: true }); From 45504f63f55da6d5fc9e61f68afb5bceaff150a3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:18:01 +0200 Subject: [PATCH 0564/1768] track https://swap.country/ --- projects/harmony-swap/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/harmony-swap/index.js diff --git a/projects/harmony-swap/index.js b/projects/harmony-swap/index.js new file mode 100644 index 0000000000..93d1e4e2ec --- /dev/null +++ b/projects/harmony-swap/index.js @@ -0,0 +1,5 @@ +const { uniV3Export, uniV3GraphExport } = require("../helper/uniswapV3"); + +module.exports = { + harmony: { tvl: uniV3GraphExport({ graphURL: 'GVkp9F6TzzC5hY4g18Ukzb6gGcYDfQrpMpcj867jsenJ', name: 'harmony-swap' }) } +} \ No newline at end of file From 8fda989a7fc503d0510ec640547de31a642d4f7c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:35:50 +0200 Subject: [PATCH 0565/1768] update mimo #11809 --- projects/mimo/index.js | 45 ++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/projects/mimo/index.js b/projects/mimo/index.js index 20213b249a..a39a0a9387 100755 --- a/projects/mimo/index.js +++ b/projects/mimo/index.js @@ -1,39 +1,36 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensExport } = require('../helper/unwrapLPs'); const config = { - ethereum: { - vaultCore: ['0x4026BdCD023331D52533e3374983ded99CcBB6d4'], - collaterals: [ - ADDRESSES.ethereum.WETH, //wETH - ADDRESSES.ethereum.WBTC, //wBTC - ADDRESSES.ethereum.USDC, //USDC + ethereum: + { + vaultCore: [ + '0x68E88c802F146eAD2f99F3A91Fb880D1A2509672', //PAR + '0x917b9D8E62739986EC182E0f988C7F938651aFD7', //paUSD ], }, polygon: { - vaultCore: ['0x03175c19cb1d30fa6060331a9ec181e04cac6ab0'], - collaterals: [ - ADDRESSES.polygon.WMATIC_2, //wMATIC - ADDRESSES.polygon.WETH_1, //wETH - ADDRESSES.polygon.WBTC, //wBTC - ADDRESSES.polygon.USDC, //USDC + vaultCore: [ + '0x78C48A7d7Fc69735fDab448fe6068bbA44a920E6', //PAR + '0xc0459Eff90be3dCd1aDA71E1E8BDB7619a16c1A4', //paUSD ], }, fantom: { vaultCore: ['0xB2b4feB22731Ae013344eF63B61f4A0e09fa370e'], - collaterals:[ - ADDRESSES.fantom.WFTM, //wFTM - '0x74b23882a30290451A17c44f4F05243b6b58C76d', //ETH - '0x321162Cd933E2Be498Cd2267a90534A804051b11', //BTC - ADDRESSES.fantom.USDC, //USDC - ], } } -module.exports = {}; Object.keys(config).forEach(chain => { - const { vaultCore: owners, collaterals: tokens } = config[chain] - module.exports[chain] = { - tvl: sumTokensExport({ chain, owners, tokens, }) + const { vaultCore } = config[chain] + module.exports[chain] = { tvl } + + async function tvl(api) { + const ownerTokens = [] + for (const vault of vaultCore) { + const addressProvider = await api.call({ abi: 'address:a', target: vault}) + const config = await api.call({ abi: 'address:config', target: addressProvider}) + const tokenConfig = await api.fetchList({ lengthAbi: 'numCollateralConfigs', itemAbi: "function collateralConfigs(uint256 _id) view returns ((address collateralType, uint256 debtLimit, uint256 liquidationRatio, uint256 minCollateralRatio, uint256 borrowRate, uint256 originationFee, uint256 liquidationBonus, uint256 liquidationFee))", target: config}) + const tokens = tokenConfig.map(t => t.collateralType) + ownerTokens.push([tokens, vault]) + } + return api.sumTokens({ ownerTokens }) } }) \ No newline at end of file From 3db213ebfc4ff4cbc64bfe971ec013df475c8335 Mon Sep 17 00:00:00 2001 From: irlpotato <166589843+irlpotato@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:39:51 +0800 Subject: [PATCH 0566/1768] feat: update deposit cap hallmarks (#11808) --- projects/treehouse/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 535ebabaa8..23d763f43a 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -16,7 +16,8 @@ async function tvl(api) { module.exports = { methodology: 'Token balance in vault and strategy contracts', - start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM + start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM, + hallmarks: [[1727452127, "TVL Cap Hit"], [1727218691, "TVL Cap Raised"], [1727408927, "TVL Cap Hit"]], ethereum: { tvl, } From 471f47b8e768e11237e7731baec37f137bea27d3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:40:52 +0200 Subject: [PATCH 0567/1768] treehouse: update hallmarks --- projects/treehouse/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 23d763f43a..d0091fa3ff 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -17,7 +17,7 @@ async function tvl(api) { module.exports = { methodology: 'Token balance in vault and strategy contracts', start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM, - hallmarks: [[1727452127, "TVL Cap Hit"], [1727218691, "TVL Cap Raised"], [1727408927, "TVL Cap Hit"]], + hallmarks: [[1727218691, "TVL Cap Raised"],], ethereum: { tvl, } From d3063be1e57630cbcd7e7b901d56aa29e107fc2a Mon Sep 17 00:00:00 2001 From: stephen <991266+stxphxn@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:56:18 +0100 Subject: [PATCH 0568/1768] feat: Add Etherlink to Symmetric (#11806) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/balancer.js | 18 +++++++++++++++++- projects/symmetric/index.js | 5 ++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/projects/helper/balancer.js b/projects/helper/balancer.js index 8ab6be241d..4167dbc582 100644 --- a/projects/helper/balancer.js +++ b/projects/helper/balancer.js @@ -1,5 +1,6 @@ const { sumTokens2 } = require('./unwrapLPs'); -const { getLogs } = require('./cache/getLogs') +const { getLogs } = require('./cache/getLogs'); +const { cachedGraphQuery } = require('./cache'); function onChainTvl(vault, fromBlock, { blacklistedTokens = [], preLogTokens = [], onlyUseExistingCache, permitFailure } = {}) { return async (api) => { @@ -51,7 +52,22 @@ function v1Tvl(bPoolFactory, fromBlock, { blacklistedTokens = [] } = {}) { } } +function balV2GraphExport({ vault, blacklistedTokens = [], graphURL, name, permitFailure, }) { + return async (api) => { + if (!graphURL) { + throw new Error('graphURL is required') + } + if (!name) { + throw new Error('name is required (it is used as id for caching)') + } + const query = `{ tokens(first: 1000) { address } }` + const tokens = (await cachedGraphQuery(name, graphURL, query)).tokens.map(t => t.address) + return sumTokens2({ api, owner: vault, tokens, blacklistedTokens, permitFailure }) + } +} + module.exports = { onChainTvl, v1Tvl, + balV2GraphExport, }; diff --git a/projects/symmetric/index.js b/projects/symmetric/index.js index 559ae7bccb..dd34bfed56 100644 --- a/projects/symmetric/index.js +++ b/projects/symmetric/index.js @@ -1,5 +1,5 @@ const sdk = require('@defillama/sdk'); -const { v1Tvl, onChainTvl } = require('../helper/balancer') +const { v1Tvl, onChainTvl, balV2GraphExport } = require('../helper/balancer') module.exports = { celo: { @@ -23,4 +23,7 @@ module.exports = { taiko: { tvl: onChainTvl('0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD', 371729), }, + etlk: { + tvl: balV2GraphExport({ vault:'0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD', graphURL: '4y4fC3k9DMrJ9XYY6Z1Qi8DXJkpRrQuQCjh7zBRhxjQr', name: 'symmetric-etlk'}) + } } From 81af5ac0eba63dbb7ace262a2b3b7c63deb64694 Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:30:03 +0200 Subject: [PATCH 0569/1768] Add folks finance xchain (#11804) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/folks-xchain/constants.js | 59 ++++++++++++++++++++++++++++++ projects/folks-xchain/index.js | 35 ++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 projects/folks-xchain/constants.js create mode 100644 projects/folks-xchain/index.js diff --git a/projects/folks-xchain/constants.js b/projects/folks-xchain/constants.js new file mode 100644 index 0000000000..ba7d50782a --- /dev/null +++ b/projects/folks-xchain/constants.js @@ -0,0 +1,59 @@ +const HubPoolAbi = { + getDepositData: "function getDepositData() view returns (uint16 optimalUtilisationRatio, uint256 totalAmount, uint256 interestRate, uint256 interestIndex)", + getVariableBorrowData: "function getVariableBorrowData() view returns (uint32 vr0, uint32 vr1, uint32 vr2, uint256 totalAmount, uint256 interestRate, uint256 interestIndex)", + getStableBorrowData: "function getStableBorrowData() view returns (uint32 sr0, uint32 sr1, uint32 sr2, uint32 sr3, uint16 optimalStableToTotalDebtRatio, uint16 rebalanceUpUtilisationRatio, uint16 rebalanceUpDepositInterestRate, uint16 rebalanceDownDelta, uint256 totalAmount, uint256 interestRate, uint256 averageInterestRate)" +} +const HubPools = { + 'avax': [ + { // USDC + poolAddress: "0x88f15e36308ED060d8543DA8E2a5dA0810Efded2", + tokenAddress: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", + }, + { // AVAX + poolAddress: "0x0259617bE41aDA4D97deD60dAf848Caa6db3F228", + tokenAddress: "0x0000000000000000000000000000000000000000", + chainPoolAddress: '0xe69e068539Ee627bAb1Ce878843a6C76484CBd2c', + }, + { // sAVAX + poolAddress: "0x7033105d1a527d342bE618ab1F222BB310C8d70b", + tokenAddress: "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE", + chainPoolAddress: '0x23a96D92C80E8b926dA40E574d615d9e806A87F6', + }, + { // wETH_ava + poolAddress: "0x795CcF6f7601edb41E4b3123c778C56F0F19389A", + tokenAddress: "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", + chainPoolAddress: '0x0e563B9fe6D9EF642bDbA20D53ac5137EB0d78DC', + }, + { // BTCb_ava + poolAddress: "0x1C51AA1516e1156d98075F2F64e259906051ABa9", + tokenAddress: "0x152b9d0FdC40C096757F570A51E494bd4b943E50", + chainPoolAddress: '0xef7a6EBEDe2ad558DB8c36Df65365b209E5d57dC', + }, + ], + 'ethereum': [ + // excluding USDC cause bridged + { // ETH_eth + poolAddress: "0xB6DF8914C084242A19A4C7fb15368be244Da3c75", + tokenAddress: "0x0000000000000000000000000000000000000000", + chainPoolAddress: '0xe3B0e4Db870aA58A24f87d895c62D3dc5CD05883', + }, + { // wBTC_eth + poolAddress: "0x9936812835476504D6Cf495F4F0C718Ec19B3Aff", + chainPoolAddress: "0xb39c03297E87032fF69f4D42A6698e4c4A934449", + tokenAddress: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + }, + ], + 'base': [ + // excluding USDC cause bridged + { // ETH_base + poolAddress: "0x51958ed7B96F57142CE63BB223bbd9ce23DA7125", + tokenAddress: "0x0000000000000000000000000000000000000000", + chainPoolAddress: '0xe3B0e4Db870aA58A24f87d895c62D3dc5CD05883', + }, + ] +} + +module.exports = { + HubPoolAbi, + HubPools, +}; diff --git a/projects/folks-xchain/index.js b/projects/folks-xchain/index.js new file mode 100644 index 0000000000..9e78218194 --- /dev/null +++ b/projects/folks-xchain/index.js @@ -0,0 +1,35 @@ +const sdk = require('@defillama/sdk') +const { HubPools, HubPoolAbi, } = require("./constants"); + +async function tvl(api) { + const tokensAndOwners = HubPools[api.chain].map(pool => [pool.tokenAddress, pool.chainPoolAddress ?? pool.poolAddress]) + return api.sumTokens({ tokensAndOwners }) +} + +async function borrowed(api) { + const HubPoolsChain = HubPools[api.chain] + let chainApi = api + if (api.chain !== 'avax') { + chainApi = new sdk.ChainApi({ chain: 'avax', timestamp: api.timestamp }) + await chainApi.getBlock() + } + const targets = HubPoolsChain.map(pool => pool.poolAddress) + + const [varBorrowsData, stableBorrowsData] = await Promise.all([ + await chainApi.multiCall({ calls: targets, abi: HubPoolAbi.getVariableBorrowData, }), + await chainApi.multiCall({ calls: targets, abi: HubPoolAbi.getStableBorrowData, }) + ]); + + HubPoolsChain.forEach((pool, idx) => { + api.add(pool.tokenAddress, Number(varBorrowsData[idx][3]) + Number(stableBorrowsData[idx][8])) + }) + return api.getBalances() +} + +module.exports = { + methodology: "The Folks Finance xChain states are saved in the Hub chain contracts i.e. Avalanche; TVL counts deposited total amount values for each pool, borrowed counts variable and stable borrowed total amount values for each pool", +} + +Object.keys(HubPools).forEach(chain => { + module.exports[chain] = { tvl, borrowed, } +}) \ No newline at end of file From 7f5a9589763c9c9e178a5e0c72fa9b8b063d3baa Mon Sep 17 00:00:00 2001 From: Chris Ricketts <6156768+chris-ricketts@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:35:26 +0000 Subject: [PATCH 0570/1768] add: amulet-finance project with neutron tvl (#11807) --- projects/amulet-finance/index.js | 91 ++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 projects/amulet-finance/index.js diff --git a/projects/amulet-finance/index.js b/projects/amulet-finance/index.js new file mode 100644 index 0000000000..2ff8f98074 --- /dev/null +++ b/projects/amulet-finance/index.js @@ -0,0 +1,91 @@ +const { PromisePool } = require("@supercharge/promise-pool"); +const { queryContract } = require("../helper/chain/cosmos"); + +const coinGeckIds = { + atom: "cosmos", + eth: "ethereum", + tia: "celestia", +}; + +function synthDenomToTicker(denom) { + const parts = denom.split("/"); + + if (parts.length != 3) throw new Error(`unexpected synthetic denom: ${denom}`); + + return denom.split("/").at(-1); +} + +async function getVaultStates(api, vaultSynthPairs) { + const { results, errors } = await PromisePool.for(vaultSynthPairs).process( + async ([vault, synthTicker]) => { + const state = await queryContract({ + contract: vault, + chain: api.chain, + data: { state: {} }, + }); + + return { vault, synthTicker, totalDeposits: state.total_deposits }; + }, + ); + + if (errors && errors.length) throw errors[0]; + + return results; +} + +function getTvl({ hub, mint }) { + return async (api) => { + const listVaultsPromise = queryContract({ + contract: hub, + chain: api.chain, + data: { list_vaults: {} }, + }); + + const allAssetsPromise = queryContract({ + contract: mint, + chain: api.chain, + data: { all_assets: {} }, + }); + + let [listVaultsRes, allAssetsRes] = await Promise.all([listVaultsPromise, allAssetsPromise]); + + // synthTicker => { underlyingTicker, decimals } + const assets = Object.fromEntries( + allAssetsRes.assets.map((asset) => [ + asset.ticker, + { underlyingTicker: asset.ticker.slice(2), decimals: asset.decimals }, + ]), + ); + + // [ [vaultAddress, synthTicker ] ] + const vaultSynthPairs = listVaultsRes.vaults.map((metadata) => [ + metadata.vault, + synthDenomToTicker(metadata.synthetic), + ]); + + // [{ vault, synthTicker, totalDeposits }] + const vaults = await getVaultStates(api, vaultSynthPairs); + + for (const v of vaults) { + const asset = assets[v.synthTicker]; + + const balance = Number(v.totalDeposits) / Math.pow(10, asset.decimals); + + const coinGeckoId = coinGeckIds[asset.underlyingTicker]; + + // ignore vaults with assets that don't have a CG mapping + if (!coinGeckoId) continue; + + api.addCGToken(coinGeckoId, balance); + } + }; +} + +module.exports = { + neutron: { + tvl: getTvl({ + hub: "neutron16d4a7q3wfkkawj4jwyzz6g97xtmj0crkyn06ev74fu4xsgkwnreswzfpcy", + mint: "neutron1shwxlkpdjd8h5wdtrykypwd2v62z5glr95yp0etdcspkkjwm5meq82ndxs", + }), + }, +}; From 115fcffcf82afbd76d7cf9f27ce858bc44977d3f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:58:23 +0200 Subject: [PATCH 0571/1768] track movepump --- projects/movepump/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/movepump/index.js diff --git a/projects/movepump/index.js b/projects/movepump/index.js new file mode 100644 index 0000000000..d0223b9a72 --- /dev/null +++ b/projects/movepump/index.js @@ -0,0 +1,15 @@ +const { getResources } = require('../helper/chain/aptos') +const ADDRESSES = require('../helper/coreAssets.json') + +async function tvl(api) { + const resources = await getResources("0x766ec6a18eed729b6b62f8af38f7a62dbc847b84bec29063c8b0d46830a82401") + resources.forEach((resource) => { + if (resource.type.includes('movepump_launch::Pool<')) { + api.add(ADDRESSES.aptos.APT, resource.data.real_aptos_reserves.value) + } + }) +} + +module.exports = { + aptos: { tvl } +} \ No newline at end of file From 5d36606633e511f72a2eeac4f5a34d3cff868bf5 Mon Sep 17 00:00:00 2001 From: Chad Date: Thu, 3 Oct 2024 19:28:36 +0800 Subject: [PATCH 0572/1768] Adds ynBNB (#11810) --- projects/yieldnest/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index 45adaf4573..b0658cbde4 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -14,4 +14,11 @@ module.exports = { api.add(lsds, bals) } }, + bsc: { + tvl: async (api) => { + const ynBNB = '0x304B5845b9114182ECb4495Be4C91a273b74B509' + const ynBnbBalance = await api.call({ abi: 'uint256:totalAssets', target: ynBNB }) + api.add(ADDRESSES.null, ynBnbBalance) + } + }, } \ No newline at end of file From 704bd837aa372cca728ab44d0116820714e3a8a9 Mon Sep 17 00:00:00 2001 From: Jay Welsh Date: Thu, 3 Oct 2024 17:37:02 +0200 Subject: [PATCH 0573/1768] feat(silo): support new L1 deployment & Base deployment (#11813) --- projects/silo/index.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/projects/silo/index.js b/projects/silo/index.js index d2d47ae58f..c2659f15db 100644 --- a/projects/silo/index.js +++ b/projects/silo/index.js @@ -10,7 +10,7 @@ const config = { factories: [ { START_BLOCK: 15307294, - SILO_FACTORY: '0x4D919CEcfD4793c0D47866C8d0a02a0950737589', // Silo Ethereum (Original) + SILO_FACTORY: '0x4D919CEcfD4793c0D47866C8d0a02a0950737589', // Silo Ethereum (Legacy) }, { START_BLOCK: 17391885, @@ -19,6 +19,10 @@ const config = { { START_BLOCK: 17782576, SILO_FACTORY: '0x2c0fA05281730EFd3ef71172d8992500B36b56eA' // Silo Ethereum (LLAMA Edition) + }, + { + START_BLOCK: 20367992, + SILO_FACTORY: '0xB7d391192080674281bAAB8B3083154a5f64cd0a', // Silo Ethereum (Main) } ] }, @@ -26,7 +30,7 @@ const config = { factories: [ { START_BLOCK: 51894508, - SILO_FACTORY: '0x4166487056A922D784b073d4d928a516B074b719', // Silo Arbitrum (Original) + SILO_FACTORY: '0x4166487056A922D784b073d4d928a516B074b719', // Silo Arbitrum (Main) } ] }, @@ -34,7 +38,15 @@ const config = { factories: [ { START_BLOCK: 120480601, - SILO_FACTORY: '0x6B14c4450a29Dd9562c20259eBFF67a577b540b9', // Silo Optimism (Original) + SILO_FACTORY: '0x6B14c4450a29Dd9562c20259eBFF67a577b540b9', // Silo Optimism (Main) + } + ] + }, + base: { + factories: [ + { + START_BLOCK: 16262586, + SILO_FACTORY: '0x408822E4E8682413666809b0655161093cd36f2b', // Silo Base (Main) } ] }, @@ -88,11 +100,12 @@ async function getSilos(api) { module.exports = { - methodology: `We calculate TVL by interacting with Silo Factory smart contracts on Ethereum and Arbitrum. For Ethereum, it queries Silo(Original)(0x4D919CEcfD4793c0D47866C8d0a02a0950737589), (Convex Factory)(0x6d4A256695586F61b77B09bc3D28333A91114d5a), and (LLAMA Edition)(0x2c0fA05281730EFd3ef71172d8992500B36b56eA). On Arbitrum, we query the Silo Arbitrum factory(0x4166487056A922D784b073d4d928a516B074b719) to obtain the addresses of Silos, retrieve the assets of each Silo, and then calculates the sum of the deposited tokens, borrowed amount are exported separately`, + methodology: `We calculate TVL by interacting with Silo Factory smart contracts on Ethereum and Arbitrum. For Ethereum, it queries Silo(Main)(0xB7d391192080674281bAAB8B3083154a5f64cd0a), (Legacy)(0x4D919CEcfD4793c0D47866C8d0a02a0950737589), (Convex Factory)(0x6d4A256695586F61b77B09bc3D28333A91114d5a), and (LLAMA Edition)(0x2c0fA05281730EFd3ef71172d8992500B36b56eA). On Arbitrum, we query the Silo Arbitrum factory(0x4166487056A922D784b073d4d928a516B074b719), On Optimism, we query the Silo Optimism factory(0x6B14c4450a29Dd9562c20259eBFF67a577b540b9), On Base, we query the Silo Base factory(0x408822E4E8682413666809b0655161093cd36f2b), we query the to obtain the addresses of Silos, retrieve the assets of each Silo, and then calculates the sum of the deposited tokens, borrowed amount are exported separately`, ethereum: { tvl, borrowed, }, arbitrum: { tvl, borrowed, }, optimism: { tvl, borrowed, }, + base: { tvl, borrowed, }, hallmarks: [ [1692968400, "Launch CRV market"] ] -} +} \ No newline at end of file From df591108b2154a13235659273bcf1dc8aad7b9ff Mon Sep 17 00:00:00 2001 From: Lucio Cesolari Date: Thu, 3 Oct 2024 12:43:50 -0300 Subject: [PATCH 0574/1768] Add Infinite Trading adapter (#11788) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/infinite/index.js | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 projects/infinite/index.js diff --git a/projects/infinite/index.js b/projects/infinite/index.js new file mode 100644 index 0000000000..9d9e1d84f0 --- /dev/null +++ b/projects/infinite/index.js @@ -0,0 +1,44 @@ + +const ITP_VAULT_ADDRRESS= '0x23371aEEaF8718955C93aEC726b3CAFC772B9E37' +const ITP_ON_OPTIMISM = "0x0a7B751FcDBBAA8BB988B9217ad5Fb5cfe7bf7A0"; +const VELO_PRICE_ORACLE = "0x395942C2049604a314d39F370Dfb8D87AAC89e16"; +const WETH_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000006"; +const OP_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000042"; +const USDC_OP_TOKEN_ADDRESS = "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"; +const ITP_STAKED_ABI = "function getVaultInfo() view returns (uint256, uint256, uint256, uint256, uint256, uint256[], uint256)"; + +const getStakedTVL = async (api) => { + const { chain } = api + let stakedTVL = 0; + if(chain === 'optimism'){ + const fetchVeloPrice = await api.call( { + abi: "function getManyRatesWithConnectors(uint8, address[]) view returns (uint256[] memory rates)", + target: VELO_PRICE_ORACLE, + params: [ + 1, + [ + ITP_ON_OPTIMISM, + WETH_TOKEN_ADDRESS, + OP_TOKEN_ADDRESS, + USDC_OP_TOKEN_ADDRESS, + ], + ], + }) + const price = parseInt(fetchVeloPrice[0]) / Math.pow(10, 18) + + const stakedBalance = await api.call({ + abi: ITP_STAKED_ABI, + target: ITP_VAULT_ADDRRESS, + }); + const staked = parseInt(stakedBalance[0]) / Math.pow(10, 18) + stakedTVL = staked * price + } + api.addUSDValue(stakedTVL) +} + +module.exports = { + optimism: { + tvl: () => ({}), + staking: getStakedTVL + }, +} From 1a0c8c339a60ee3e8a2e9c4a5b7dad54ef4f6def Mon Sep 17 00:00:00 2001 From: "BT.Wood(Tang Bo Hao)" Date: Thu, 3 Oct 2024 23:49:23 +0800 Subject: [PATCH 0575/1768] Add kittypunch on Flow (#11794) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 5 +++++ projects/kittypunch/index.js | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 projects/kittypunch/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 40c014bd96..c145b7e0bc 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -62,6 +62,11 @@ const fixBalancesTokens = { "0x541fd749419ca806a8bc7da8ac23d346f2df8b77": { coingeckoId: "solv-btc", decimals: 18 }, "0xcc0966d8418d412c599a6421b760a847eb169a8c": { coingeckoId: "solv-btc", decimals: 18 }, "0x236f8c0a61da474db21b693fb2ea7aab0c803894": { coingeckoId: "universal-btc", decimals: 8 }, + }, + flow: { + '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e': { coingeckoId: 'flow', decimals: 18 }, + '0x1b97100ea1d7126c4d60027e231ea4cb25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, + '0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52': { coingeckoId: 'usd-coin', decimals: 6 }, } } diff --git a/projects/kittypunch/index.js b/projects/kittypunch/index.js new file mode 100644 index 0000000000..013a8ba469 --- /dev/null +++ b/projects/kittypunch/index.js @@ -0,0 +1,5 @@ +const { uniTvlExports } = require("../helper/unknownTokens") + +module.exports = uniTvlExports({ + flow: "0x29372c22459a4e373851798bFd6808e71EA34A71" +}) \ No newline at end of file From 8ca123be3a5c24dcd6069b65be1619feca5f5fe5 Mon Sep 17 00:00:00 2001 From: Saber Coder <45599139+SaberDoTcodeR@users.noreply.github.com> Date: Thu, 3 Oct 2024 19:39:09 +0100 Subject: [PATCH 0576/1768] Add Coffin.Meme (#11814) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/coffin-meme/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/coffin-meme/index.js diff --git a/projects/coffin-meme/index.js b/projects/coffin-meme/index.js new file mode 100644 index 0000000000..8011665f05 --- /dev/null +++ b/projects/coffin-meme/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require('../helper/coreAssets.json') + +const coffinScAddr = "EQBozwKVDya9IL3Kw4mR5AQph4yo15EuMdyX8nLljeaUxrpM" + +module.exports = { + methodology: 'Counts Coffin.Meme smartcontract TON & jettons balance as TVL.', + ton: { + tvl: sumTokensExport({ owner: coffinScAddr, tokens: [ADDRESSES.null], }), + } +} \ No newline at end of file From c0af7c23e9e7ca2b6116eac52c13363c34197bcc Mon Sep 17 00:00:00 2001 From: quan-hela Date: Fri, 4 Oct 2024 18:24:43 +0700 Subject: [PATCH 0577/1768] hela: add cytoswap (#11816) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/cytoswap/index.js | 7 +++++++ projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 projects/cytoswap/index.js diff --git a/projects/cytoswap/index.js b/projects/cytoswap/index.js new file mode 100644 index 0000000000..fd11aef503 --- /dev/null +++ b/projects/cytoswap/index.js @@ -0,0 +1,7 @@ +const { uniV3GraphExport } = require('../helper/uniswapV3') + +module.exports = { + hela: { + tvl: uniV3GraphExport({ graphURL: 'https://subgraph.snapresearch.xyz/subgraphs/name/cytoswap-mainnet', name: 'cytoswap-hela' }), + } +} \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 3daa97ad9f..0018aa266e 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -142,6 +142,7 @@ "heco", "hedera", "heiko", + "hela", "hoo", "hpb", "hydra", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c145b7e0bc..1cad1c98d8 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,6 +40,11 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + hela: { + '0xf5b85320a772b436cb8105441a3db9ba29437b4a': { coingeckoId: "usd-coin", decimals: 6 }, + '0xd3442073fa7ccf8a7c39d95dc125cd59497aa078': { coingeckoId: "tether", decimals: 6 }, + '0x3a035615e101373fa9ba21c5bea7fe4026fc40b4': { coingeckoId: "hela-usd", decimals: 18 }, + }, heco: { [ADDRESSES.heco.WHT]: { coingeckoId: 'huobi-token', decimals: 18 }, }, From d03fc68e79d1c99ddc36b4b11593855ed7e12626 Mon Sep 17 00:00:00 2001 From: joe-wachirawit Date: Fri, 4 Oct 2024 18:46:23 +0700 Subject: [PATCH 0578/1768] yay-staking (#11815) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/yay-staking/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/yay-staking/index.js diff --git a/projects/yay-staking/index.js b/projects/yay-staking/index.js new file mode 100644 index 0000000000..c228def2f6 --- /dev/null +++ b/projects/yay-staking/index.js @@ -0,0 +1,16 @@ +const yayStoneAddress = '0xe86142af1321eaac4270422081c1EdA31eEcFf0c' +const yayAgETHAddress = '0x0341d2c2CE65B62aF8887E905245B8CfEA2a3b97' + +const tvl = async (api) => { + return api.sumTokens({ + tokensAndOwners: [ + ['0x7122985656e38bdc0302db86685bb972b145bd3c', yayStoneAddress], + ['0xe1b4d34e8754600962cd944b535180bd758e6c2e', yayAgETHAddress], + ] + }) +} + +module.exports = { + start: 1722488340, + ethereum: { tvl }, +} \ No newline at end of file From d0dcefb83be20fc880d614b400cfc13cfddbae0e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:50:30 +0200 Subject: [PATCH 0579/1768] sdk version bump --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4f55f846a..006772e551 100644 --- a/package-lock.json +++ b/package-lock.json @@ -997,9 +997,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.92", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.92.tgz", - "integrity": "sha512-t6A4qSX9y1VPIaiVE7/O1UPrkDmljjiGv8DrtKZuzuCpwMsL2uMDNIn5a8WLnQizft8mUV3YY4aojx6WC7L7Sw==", + "version": "5.0.94", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.94.tgz", + "integrity": "sha512-XlR5Gawx/uQXvkWZN962DBGXz2+6W4L8NaDIJ3b04vkD2QRhBYAftTKZfHgsYqBh/dFCOGQxh5P0jM49sf8dFw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From 34c4042f57eff81901a8b9a35444e9c4d3852004 Mon Sep 17 00:00:00 2001 From: Henrique Date: Fri, 4 Oct 2024 14:57:27 +0100 Subject: [PATCH 0580/1768] feat: update bakerfi arbitrum vault (#11818) --- projects/bakerfi/index.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/projects/bakerfi/index.js b/projects/bakerfi/index.js index 11aaf5cb15..ef0652ad0b 100644 --- a/projects/bakerfi/index.js +++ b/projects/bakerfi/index.js @@ -1,6 +1,6 @@ const config = { "arbitrum": { - vaults: ["0x5c1b2312FaE6c0d61B6A15A8093842E9fE5b1e44"] + vaults: ["0x4c6d58749126FEBb1D28E8B8FdE97DC3107996d3"] }, base: { vaults: ["0x37327c99bBc522e677a97d01021dB20227faF60A"] @@ -8,17 +8,21 @@ const config = { } async function getVaultTVL(api, vaults) { - const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) - api.addGasToken(bals) + const bals = await api.multiCall({ + abi: "uint256:totalAssets", + calls: vaults, + }); + api.addGasToken(bals); } module.exports = { - methodology: 'Counts the number of assets that are deployed through the protocol', -} + methodology: + "Counts the number of assets that are deployed through the protocol", +}; -Object.keys(config).forEach(chain => { - const { vaults = [] } = config[chain] +Object.keys(config).forEach((chain) => { + const { vaults = [] } = config[chain]; module.exports[chain] = { tvl: async (api) => await getVaultTVL(api, vaults), - } -}) + }; +}); From 0f443b3d83953f1e4289b371c0b554e626ccbf7f Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Fri, 4 Oct 2024 16:01:44 +0200 Subject: [PATCH 0581/1768] Add new SwissBorg wallet (#11820) --- projects/swissborg/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index aa11e0cab8..28c2ba62c4 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -18,6 +18,7 @@ const config = { '0x178Fb204c1ff2Ed7d0651C522A3a5B15480Eb76d', '0xFbA64167e4f091Ca625FA79aa6f83665856f8Bf2', '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', + '0xe2484A7Ac1b9Cb6D8E55fd00e129aB913172bea6' ], }, bitcoin: { From 36b03e44ebfedb9e4dfdaf8336458bd9d2251d8b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 4 Oct 2024 16:05:01 +0200 Subject: [PATCH 0582/1768] colend: add market #11822 --- projects/colend/index.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/projects/colend/index.js b/projects/colend/index.js index 5277668404..e8f8e3d646 100644 --- a/projects/colend/index.js +++ b/projects/colend/index.js @@ -1,7 +1,13 @@ const { aaveExports } = require("../helper/aave"); +const { mergeExports } = require("../helper/utils"); const methodologies = require("../helper/methodologies"); -module.exports = { + +module.exports = mergeExports([{ methodology: methodologies.lendingMarket, +//Main core: aaveExports('core', '0xC3F120f418f9541263eA3F4a5a4120eb3f28EfA1', undefined, ['0x567AF83d912C85c7a66d093e41D92676fA9076E3'], { v3: true, }), -}; +}, { +//LstBTC + core: aaveExports('core', '0x71B2C1Dda32E4c35f02301dC611043F46CC8108f', undefined, ['0x8E43DF2503c69b090D385E36032814c73b746e3d'], { v3: true, }), +}]) From 513125a5b4927747f8d6497ed9608523cf0bb644 Mon Sep 17 00:00:00 2001 From: James <157150672+0xJ3@users.noreply.github.com> Date: Fri, 4 Oct 2024 22:08:39 +0800 Subject: [PATCH 0583/1768] echelon: add isolated pairs besides the main pool (#11819) --- projects/echelon/index.js | 47 ++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/projects/echelon/index.js b/projects/echelon/index.js index fd13d9e715..ff5ede0918 100644 --- a/projects/echelon/index.js +++ b/projects/echelon/index.js @@ -2,23 +2,45 @@ const sdk = require("@defillama/sdk"); const { getResource, } = require("../helper/chain/aptos"); const { transformBalances } = require("../helper/portedTokens"); -const contractAddress = "0xc6bc659f1649553c1a3fa05d9727433dc03843baac29473c817d06d39e7621ba"; +const mainLendingContract = "0xc6bc659f1649553c1a3fa05d9727433dc03843baac29473c817d06d39e7621ba"; +const isolatedLendingContract = "0x024c90c44edf46aa02c3e370725b918a59c52b5aa551388feb258bd5a1e82271"; + +// main pool async function getMarketAddresses() { - const lending = await getResource(contractAddress, `${contractAddress}::lending::Lending`); + const lending = await getResource(mainLendingContract, `${mainLendingContract}::lending::Lending`); return lending.market_objects.map(obj => obj.inner); } async function getMarket(marketAddress) { - const market = await getResource(marketAddress, `${contractAddress}::lending::Market`); - const coinInfo = await getResource(marketAddress, `${contractAddress}::lending::CoinInfo`); + const [market, coinInfo] = await Promise.all([ + getResource(marketAddress, `${mainLendingContract}::lending::Market`), + getResource(marketAddress, `${mainLendingContract}::lending::CoinInfo`) + ]) return { cash: market.total_cash, liability: market.total_liability, fee: market.total_reserve, coin: coinInfo.type_name }; } +// isolated pairs + +async function getIsolatedPairAddresses() { + const isolatedLending = await getResource(isolatedLendingContract, `${isolatedLendingContract}::isolated_lending::IsolatedLending`); + return isolatedLending.pair_objects.map(obj => obj.inner); +} + +async function getPair(pairAddress) { + const [pair, coinInfo] = await Promise.all([ + getResource(pairAddress, `${isolatedLendingContract}::isolated_lending::Pair`), + getResource(pairAddress, `${isolatedLendingContract}::isolated_lending::CoinInfo`) + ]) + const { total_collateral_amount, total_supply_amount, total_borrow_amount } = pair; + const { collateral_type_name, liability_type_name } = coinInfo; + return { collateral_token: collateral_type_name, asset_token: liability_type_name, total_collateral_amount, total_supply_amount, total_borrow_amount } +} + module.exports = { timetravel: false, methodology: - "Aggregates TVL for all markets in Echelon.", + "Aggregate TVL of both the Echelon main pool and its isolated pairs", aptos: { tvl: async () => { const balances = {}; @@ -29,6 +51,15 @@ module.exports = { sdk.util.sumSingleBalance(balances, coin, cash); }); + const isolatedPairAddresses = await getIsolatedPairAddresses(); + const pairs = await Promise.all(isolatedPairAddresses.map(pairAddress => getPair(pairAddress))); + pairs.forEach(({ collateral_token, total_collateral_amount, asset_token, total_supply_amount, total_borrow_amount }) => { + // isolated pair collateral tvl + sdk.util.sumSingleBalance(balances, collateral_token, total_collateral_amount); + // isolated pair asset tvl (supply - borrow) + sdk.util.sumSingleBalance(balances, asset_token, Number(total_supply_amount) - Number(total_borrow_amount)); + }); + return transformBalances("aptos", balances); }, borrowed: async () => { @@ -40,6 +71,12 @@ module.exports = { sdk.util.sumSingleBalance(balances, coin, liability); }); + const isolatedPairAddresses = await getIsolatedPairAddresses(); + const pairs = await Promise.all(isolatedPairAddresses.map(pairAddress => getPair(pairAddress))); + pairs.forEach(({ asset_token, total_borrow_amount }) => { + sdk.util.sumSingleBalance(balances, asset_token, total_borrow_amount); + }); + return transformBalances("aptos", balances); } }, From 8840507447fec9788f6eef34cf9780b7ab7680c6 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 4 Oct 2024 16:27:59 +0200 Subject: [PATCH 0584/1768] Fix: AstroportClassic (outdated) -> deadFrom (#11708) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/astroport-classic/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/astroport-classic/index.js b/projects/astroport-classic/index.js index 1b505234f7..f0b4b13d11 100644 --- a/projects/astroport-classic/index.js +++ b/projects/astroport-classic/index.js @@ -11,5 +11,5 @@ module.exports = { hallmarks: [ [1651881600, "UST depeg"], ], - // deadFrom: '2024-10-02' -} // node test.js projects/astroport/index.js + deadFrom: '2024-10-02' +} \ No newline at end of file From 4fe936579e573232977287eb065bd2344445119f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 4 Oct 2024 17:30:16 +0200 Subject: [PATCH 0585/1768] lisk: remove blacklist --- projects/lisk-l2/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/lisk-l2/index.js b/projects/lisk-l2/index.js index 40f48c841a..9d4cb7703a 100644 --- a/projects/lisk-l2/index.js +++ b/projects/lisk-l2/index.js @@ -2,7 +2,6 @@ const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') const config = { ethereum: { owners: ['0x2658723bf70c7667de6b25f99fcce13a16d25d08', '0x26dB93F8b8b4f7016240af62F7730979d353f9A7',], - blacklistedTokens: ['0x6033F7f88332B8db6ad452B7C6D5bB643990aE3f'], tokens: [nullAddress], } } From ad129a0f84ce335ddc08de681a6b259ba05cafaf Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sat, 5 Oct 2024 11:37:16 +0100 Subject: [PATCH 0586/1768] Order more chains (#11831) --- projects/orderly-network/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/projects/orderly-network/index.js b/projects/orderly-network/index.js index 134328ecb1..961147687c 100644 --- a/projects/orderly-network/index.js +++ b/projects/orderly-network/index.js @@ -11,6 +11,10 @@ const owner = '0x816f722424b49cf1275cc86da9840fbd5a6167e9' const tokenAddress = { arbitrum: ADDRESSES.arbitrum.USDC_CIRCLE, optimism: ADDRESSES.optimism.USDC_CIRCLE, + base: ADDRESSES.base.USDC, + mantle: ADDRESSES.mantle.USDC, + polygon: ADDRESSES.polygon.USDC_CIRCLE, + ethereum: ADDRESSES.ethereum.USDC } async function tvl() { @@ -37,5 +41,17 @@ module.exports = { optimism: { tvl: sumTokensExport({ owner, tokens: [tokenAddress.optimism] }), }, + base: { + tvl: sumTokensExport({ owner, tokens: [tokenAddress.base] }), + }, + mantle: { + tvl: sumTokensExport({ owner, tokens: [tokenAddress.mantle] }), + }, + polygon: { + tvl: sumTokensExport({ owner, tokens: [tokenAddress.polygon] }), + }, + ethereum: { + tvl: sumTokensExport({ owner, tokens: [tokenAddress.ethereum] }), + }, methodology: 'All the tokens deposited into Orderly Network by chain' }; From d7240b4616ea753c7237d142ab6024adb8bb9062 Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Sat, 5 Oct 2024 22:16:01 +0800 Subject: [PATCH 0587/1768] Add Bitcoin Address (#11830) --- projects/solvbtc/index.js | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index aa3b4beeb9..443f2cfd75 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -1,26 +1,15 @@ -const abi = require("./abi.json"); -const sdk = require('@defillama/sdk'); const { getConfig } = require("../helper/cache"); -const { cachedGraphQuery } = require("../helper/cache"); const { sumTokens2, } = require("../helper/unwrapLPs"); const { sumTokensExport, } = require('../helper/sumTokens'); -// The Graph -const graphUrlList = { - ethereum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-prod/version/latest', - bsc: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-bsc/version/latest', - arbitrum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-arbitrum/version/latest', - mantle: 'https://api.0xgraph.xyz/api/public/65c5cf65-bd77-4da0-b41c-cb6d237e7e2f/subgraphs/solv-payable-factory-mantle/-/gn', - merlin: 'http://solv-subgraph-server-alb-694489734.us-west-1.elb.amazonaws.com:8000/subgraphs/name/solv-payable-factory-merlin', -} - const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; const bitcionOwners = [ 'bc1pjrxeuc9f3zqtx92s3mnf6202894jzufswur957l6s04rjns6dumsyh6u89', 'bc1qdpwl80flfh3k6h6sumzwgws3ephkrmx307hk64', 'bc1q5pzsptd5whcljevzyztavuqru0hugd5ymgx5ezksdqug3ztrjvmqauys2q', - 'bc1q437jw8wqph854vf9dwxy4c2u6daveupjm5dqptj469gxw6vcpp0qfpr0mh' + 'bc1q437jw8wqph854vf9dwxy4c2u6daveupjm5dqptj469gxw6vcpp0qfpr0mh', + 'bc1q47ur7u0xh943s44kktvhr602sm29exylzn43ru' ] async function tvl(api) { From 7f5da5c3d2fb0bc32989e0822c1afaa1dfbc144b Mon Sep 17 00:00:00 2001 From: irlpotato <166589843+irlpotato@users.noreply.github.com> Date: Sat, 5 Oct 2024 22:22:42 +0800 Subject: [PATCH 0588/1768] feat: add lido in-flight redemptions to NAV (#11829) --- projects/treehouse/index.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index d0091fa3ff..0ef88333e0 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -1,10 +1,39 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') + +async function getInFlightLidoRedemptionNav(api) { + const unStEth = '0x889edc2edab5f40e902b864ad4d7ade8e412f9b1'; + const strategy = '0x60d2D94aCB969CA54e781007eE89F04c1A2e5943'; + const navHelper = '0xf22Ca896427677507a9EF99D30B261659775ff56'; + + const requestIds = await api.call({ + abi: "function getWithdrawalRequests(address _owner) external view returns (uint256[] memory requestsIds)", + target: unStEth, + chain: 'ethereum', + params: [strategy] +}); + + +// NAV of lido in-flight redemptions in wstETH. +const nav = await api.call({ + abi: 'function getLidoRedemptionsNav(uint[], address) external view returns (uint)', + target: navHelper, + chain: 'ethereum', + params: [requestIds, strategy] +}) + +api.add(ADDRESSES.ethereum.WSTETH, nav) +} + + async function tvl(api) { const vault = '0x551d155760ae96050439ad24ae98a96c765d761b' const tokens = await api.call({ abi: 'address[]:getAllowableAssets', target: vault }) await api.sumTokens({ owner: vault, tokens }) + await getInFlightLidoRedemptionNav(api) + const storage = await api.call({ abi: 'address:strategyStorage', target: vault }) const strategies = await api.fetchList({ lengthAbi: 'getStrategyCount', itemAbi: 'getStrategyAddress', target: storage }) return sumTokens2({ From d18befbaa1ec833f647334c476b72fc0da277129 Mon Sep 17 00:00:00 2001 From: Aleks Wojewoda <66192641+alekswoje@users.noreply.github.com> Date: Sat, 5 Oct 2024 07:32:52 -0700 Subject: [PATCH 0589/1768] still getting error (#11824) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/env.js | 4 +++- projects/helper/tokenMapping.js | 6 +++++- projects/mswap/index.js | 5 +++++ 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 projects/mswap/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 0018aa266e..d3f693a0f4 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -192,6 +192,7 @@ "manta_atlantic", "mantle", "map", + "matchain", "mayachain", "meer", "merlin", diff --git a/projects/helper/env.js b/projects/helper/env.js index d36f8366ab..aaae27ed92 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -15,7 +15,9 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", IDEX_RPC: "https://xchain-rpc.idex.io", - ETN_RPC: "https://rpc.ankr.com/electroneum" + ETN_RPC: "https://rpc.ankr.com/electroneum", + MATCHAIN_RPC: "https://rpc.matchscan.io,https://rpc.matchain.io", + MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 1cad1c98d8..aedbe0fe58 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -72,7 +72,11 @@ const fixBalancesTokens = { '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e': { coingeckoId: 'flow', decimals: 18 }, '0x1b97100ea1d7126c4d60027e231ea4cb25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, '0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52': { coingeckoId: 'usd-coin', decimals: 6 }, - } + }, + matchain: { + [ADDRESSES.null]: { coingeckoId: 'binancecoin', decimals: 18 }, + '0x4200000000000000000000000000000000000006': { coingeckoId: 'binancecoin', decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/mswap/index.js b/projects/mswap/index.js new file mode 100644 index 0000000000..ec7fa7cde4 --- /dev/null +++ b/projects/mswap/index.js @@ -0,0 +1,5 @@ +const { uniTvlExports } = require('../helper/unknownTokens'); + +module.exports = uniTvlExports({ + matchain: '0x338bCC4efd3cA000D123d7352b362Fc6D5B3D829' +}) From 58379065b6dc8c36a4fa917f1716b6f4477a0a48 Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Sat, 5 Oct 2024 22:37:25 +0800 Subject: [PATCH 0590/1768] feat: add core chain UBTC (#11827) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index aedbe0fe58..b1c07cb681 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -73,6 +73,9 @@ const fixBalancesTokens = { '0x1b97100ea1d7126c4d60027e231ea4cb25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, '0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52': { coingeckoId: 'usd-coin', decimals: 6 }, }, + core: { + '0x782e2b85fda9a8224c17b191fc5de1e085a962b2': { coingeckoId: "wrapped-bitcoin-universal", decimals: 18 }, + }, matchain: { [ADDRESSES.null]: { coingeckoId: 'binancecoin', decimals: 18 }, '0x4200000000000000000000000000000000000006': { coingeckoId: 'binancecoin', decimals: 18 }, From f78abb2901eb34332f9567d73b0821a4b327a947 Mon Sep 17 00:00:00 2001 From: Aleksei Lushnikov Date: Sat, 5 Oct 2024 15:41:54 +0100 Subject: [PATCH 0591/1768] symbiosis adds Gravity chain support (#11823) --- projects/symbiosis-finance/config.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/projects/symbiosis-finance/config.js b/projects/symbiosis-finance/config.js index 46832f3c71..3797ad81e9 100644 --- a/projects/symbiosis-finance/config.js +++ b/projects/symbiosis-finance/config.js @@ -4,10 +4,12 @@ const TOKENS = { ethereum: { pufETH: "0xD9A442856C234a39a81a089C06451EBAa4306a72", LADYS: "0x12970E6868f88f6557B76120662c1B3E50A646bf", - XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28" + XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28", + G: "0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649" }, bsc: { - XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28" + XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28", + G: "0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649" }, polygon: { XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28" @@ -34,6 +36,10 @@ const TOKENS = { fraxtal: { WETH: ADDRESSES.fraxtal.WETH, FRAX: ADDRESSES.fraxtal.FRAX + }, + gravity: { + USDC_e: ADDRESSES.gravity.USDC_e, + wG: ADDRESSES.gravity.wG } } @@ -50,6 +56,7 @@ module.exports = { TOKENS.ethereum.XDAO, TOKENS.ethereum.LADYS, TOKENS.ethereum.pufETH, + TOKENS.ethereum.G, ], holders: [ '0xb80fDAA74dDA763a8A158ba85798d373A5E84d84', // portal v1 @@ -65,6 +72,7 @@ module.exports = { ADDRESSES.bsc.ETH, ADDRESSES.bsc.BTCB, TOKENS.bsc.XDAO, + TOKENS.bsc.G, ], holders: [ '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 @@ -410,5 +418,15 @@ module.exports = { '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 ] }, + { + name: 'gravity', + tokens: [ + TOKENS.gravity.USDC_e, + TOKENS.gravity.wG, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, ] } \ No newline at end of file From d8dde39dbf9dfe92f476600764f4f1a432417be1 Mon Sep 17 00:00:00 2001 From: Pecker Date: Sat, 5 Oct 2024 22:45:07 +0800 Subject: [PATCH 0592/1768] Add TVL for the Trado Perp on Flow (#11825) --- projects/trado/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/trado/index.js diff --git a/projects/trado/index.js b/projects/trado/index.js new file mode 100644 index 0000000000..5923a87d7f --- /dev/null +++ b/projects/trado/index.js @@ -0,0 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); +// perp +const USDCe = '0x7f27352D5F83Db87a5A3E00f4B07Cc2138D8ee52' +const USDX = '0xAeBE92ebc1a67F810Cb35fdcdA6398f6136DCD50' + +module.exports = { + flow: { tvl: sumTokensExport({ owner: USDX, tokens: [USDCe], })}, + methodology: `The TVL for Trado Perpetual is calculated based on the value of all stablecoins locked in the USDX contract.`, +}; From 2a436ec7fa2712d6816317378e0671c2fcaa73c5 Mon Sep 17 00:00:00 2001 From: chainupk <121842069+chainupk@users.noreply.github.com> Date: Mon, 7 Oct 2024 02:32:19 +0800 Subject: [PATCH 0593/1768] Obelisk BTC proofs for oBTC (#11833) Co-authored-by: zhenhao goh Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/obelisk/index.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 projects/obelisk/index.js diff --git a/projects/obelisk/index.js b/projects/obelisk/index.js new file mode 100644 index 0000000000..e318451601 --- /dev/null +++ b/projects/obelisk/index.js @@ -0,0 +1,33 @@ +const { sumTokens } = require('../helper/chain/bitcoin') +const sdk = require('@defillama/sdk') + +const staticAddresses = [ + 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', + '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP' +] + +const abi = { + getCustodyAddrInfo: "function getCustodyAddrInfo() view returns (tuple(string mark, string btcAddr)[])" +} + +async function tvl() { + const api = new sdk.ChainApi({ chain: 'ethereum' }) + + const addrInfos = await api.call({ + abi: abi.getCustodyAddrInfo, + target: '0x9F836f8A27F1579258388BFab16ab16E278B1a2C' + }) + + const btcAddresses = addrInfos.map(info => info.btcAddr) + + btcAddresses.forEach(addr => staticAddresses.push(addr)) + + return sumTokens({ owners: staticAddresses }) +} + +module.exports = { + timetravel: false, + bitcoin: { + tvl, + } +} \ No newline at end of file From 09df119d2e3b484c03b348c4da3ae6a2ac7155ed Mon Sep 17 00:00:00 2001 From: David Lee Date: Mon, 7 Oct 2024 03:32:35 +0900 Subject: [PATCH 0594/1768] Update Level Money with additional tokens in farm (#11832) --- projects/level-money/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/level-money/index.js b/projects/level-money/index.js index b9166c984a..87789f2b31 100644 --- a/projects/level-money/index.js +++ b/projects/level-money/index.js @@ -6,6 +6,15 @@ const LEVEL_STAKING_CONTRACT = '0x7FDA203f6F77545548E984133be62693bCD61497'; const TOKEN_CONTRACTS = [ ADDRESSES.ethereum.USDT, // USDT ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.DAI, // DAI + ADDRESSES.ethereum.SDAI, // sDAI + ADDRESSES.ethereum.sUSDe, // sUSD + ADDRESSES.ethereum.USDe, // USDe + "0x57f5e098cad7a3d1eed53991d4d66c45c9af7812", // wUSDM + "0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5", // USD0 + "0x35D8949372D46B7a3D5A56006AE77B215fc69bC0", // USD0++ + "0x15700b564ca08d9439c58ca5053166e8317aa138", // deUSD + "0x5c5b196abe0d54485975d1ec29617d42d9198326", // stdeUSD ]; module.exports = { From 9d7632f6a0a8e976cc447ed8d5e2a62477d93f67 Mon Sep 17 00:00:00 2001 From: quan-hela Date: Mon, 7 Oct 2024 16:27:14 +0700 Subject: [PATCH 0595/1768] add Bridge (#11836) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bridgehela/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/bridgehela/index.js diff --git a/projects/bridgehela/index.js b/projects/bridgehela/index.js new file mode 100644 index 0000000000..cf3011562d --- /dev/null +++ b/projects/bridgehela/index.js @@ -0,0 +1,14 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + ethereum: { + tvl: sumTokensExport({ owner:'0x8094816e435b8ca77f2dfe240820c6c6ac784900', tokens: [ADDRESSES.ethereum.USDT,ADDRESSES.ethereum.USDC] }) + }, + bsc: { + tvl: sumTokensExport({ owner:'0x8094816e435b8ca77f2dfe240820c6c6ac784900', tokens: [ADDRESSES.bsc.USDT,ADDRESSES.bsc.USDC] }) + }, + polygon: { + tvl: sumTokensExport({ owner:'0x700d0c48926af78c2c51f08c667f27ce6548386b', tokens: [ADDRESSES.polygon.USDT,ADDRESSES.polygon.USDC] }) + } +} \ No newline at end of file From 10c3f0e1d12932e9c61329a5ee565ad402c90b46 Mon Sep 17 00:00:00 2001 From: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:45:28 +0400 Subject: [PATCH 0596/1768] Added base pools for maha.xyz (#11835) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 1 + projects/mahaxyz/index.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index b1c07cb681..0020cd03f6 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -50,6 +50,7 @@ const fixBalancesTokens = { }, base: { [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, + '0x0a27e060c0406f8ab7b64e3bee036a37e5a62853': { coingeckoId: 'zai-stablecoin', decimals: 18 }, }, op_bnb: { [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, diff --git a/projects/mahaxyz/index.js b/projects/mahaxyz/index.js index 7bb6e8ba04..683bfdfc35 100644 --- a/projects/mahaxyz/index.js +++ b/projects/mahaxyz/index.js @@ -22,6 +22,21 @@ const eth = { zaiUsdcCurveStaking: "0x154F52B347D8E48b8DbD8D8325Fe5bb45AAdCCDa", }; + +const base = { + usdc: ADDRESSES.base.USDC, + maha: '0x554bba833518793056CF105E66aBEA330672c0dE', + usdz: '0x0A27E060C0406f8Ab7B64e3BEE036a37e5a62853', + + // pools + zaiUsdcAerodrome: "0x72d509aff75753aaad6a10d3eb98f2dbc58c480d", + zaiMahaAerodrome: "0x6B22E989E1D74621ac4c8bcb62bcC7EE7c25b45A", + + // staking contracts + zaiUsdcStaking: "0x1097dFe9539350cb466dF9CA89A5e61195A520B0", + zaiMahaStaking: "0x7D5a39744608A809c850f63CB1A3d3f9b4cAc586", +} + Object.keys(eth).forEach((k) => (eth[k] = eth[k].toLowerCase())); const collaterals = [eth.usdc, eth.usdt, eth.dai]; @@ -36,5 +51,14 @@ module.exports = { ] }), tvl: sumTokensExport({ owners: pegStabilityModules, tokens: collaterals }), + }, + base: { + pool2: sumTokensExport({ + tokensAndOwners: [ + [base.zaiMahaAerodrome, base.zaiMahaStaking], + [base.zaiUsdcAerodrome, base.zaiUsdcStaking], + ], + resolveLP: true, + }), } }; From 890e594453a4e6d6ec27dc6d218e587d5447a0f2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:57:14 +0200 Subject: [PATCH 0597/1768] track fxdao #11826 --- projects/fxdao/api.js | 27 +++++++++++++++++++++++++++ projects/fxdao/index.js | 7 +++++++ 2 files changed, 34 insertions(+) create mode 100644 projects/fxdao/api.js create mode 100644 projects/fxdao/index.js diff --git a/projects/fxdao/api.js b/projects/fxdao/api.js new file mode 100644 index 0000000000..84b016c641 --- /dev/null +++ b/projects/fxdao/api.js @@ -0,0 +1,27 @@ +const { SorobanRpc, Networks, Address, xdr, Asset, scValToNative } = require('@stellar/stellar-sdk'); + +const VAULTS_CONTRACT_ID = "CCUN4RXU5VNDHSF4S4RKV4ZJYMX2YWKOH6L4AKEKVNVDQ7HY5QIAO4UB"; +const rpcUrl = 'https://soroban-rpc.creit.tech/'; +const server = new SorobanRpc.Server(rpcUrl); + +async function tvl(api) { + const response = await server.getContractData( + Asset.native().contractId(Networks.PUBLIC), + xdr.ScVal.scvVec([ + xdr.ScVal.scvSymbol('Balance'), + new Address(VAULTS_CONTRACT_ID).toScVal(), + ]), + SorobanRpc.Durability.Persistent + ); + const balance = scValToNative(response.val.value().val()).amount; + const parsedBalance = Number(balance) / 1e7; + api.addCGToken('stellar', parsedBalance); +} + +module.exports = { + timetravel: false, + methodology: `Takes the total amount of XLMs locked in the Vaults contract, the XLMs are the collateral of the issued assets by the protocol.`, + stellar: { + tvl, + }, +}; diff --git a/projects/fxdao/index.js b/projects/fxdao/index.js new file mode 100644 index 0000000000..d90f5cb24e --- /dev/null +++ b/projects/fxdao/index.js @@ -0,0 +1,7 @@ +const { getExports } = require('../helper/heroku-api') + +module.exports = { + timetravel: false, + methodology: `Takes the total amount of XLMs locked in the Vaults contract, the XLMs are the collateral of the issued assets by the protocol.`, + ...getExports("fxdao", ['stellar']) +}; From c8d1c8addac1ffe757da1a32431e30879374e76f Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:09:59 +0200 Subject: [PATCH 0598/1768] fix: Openeden xrpl (#11843) --- projects/openeden-tbill/index.js | 6 ++++-- projects/xrpl-dex/app.js | 12 +++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/projects/openeden-tbill/index.js b/projects/openeden-tbill/index.js index 49d1f46a36..888ba0787c 100644 --- a/projects/openeden-tbill/index.js +++ b/projects/openeden-tbill/index.js @@ -1,12 +1,14 @@ const { getCache, } = require("../helper/cache"); const ADDRESSES = require('../helper/coreAssets.json') +const tbill = "0xdd50C053C096CB04A3e3362E2b622529EC5f2e8a" + function getTimeNow() { return Math.floor(Date.now() / 1000); } async function tvl(api) { - let contract = '0xdd50C053C096CB04A3e3362E2b622529EC5f2e8a' + let contract = tbill if (api.chain === 'arbitrum') contract = '0xF84D28A8D28292842dD73D1c5F99476A80b6666A' const [bal, token] = await api.batchCall([ { abi: 'uint256:totalAssets', target: contract }, @@ -23,7 +25,7 @@ async function ripplTvl (api) { let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !tvl) throw new Error("stale/missing tvl data"); - api.add(ADDRESSES.ethereum.USDC, tvl * 10 ** 6, { skipChain: true }) + api.add(tbill, tvl * 10 ** 6, { skipChain: true }) } module.exports = { diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js index 1e422a115c..b895078a60 100644 --- a/projects/xrpl-dex/app.js +++ b/projects/xrpl-dex/app.js @@ -196,10 +196,8 @@ async function openedenRippleTvl() { } async function main() { - await openedenRippleTvl() - await xrplDex() -} - - - - + return Promise.allSettled([ + openedenRippleTvl(), + xrplDex() + ]) +} \ No newline at end of file From 43556dbe582a621afc67dab9908a4c5013dc354a Mon Sep 17 00:00:00 2001 From: webmass Date: Tue, 8 Oct 2024 10:13:30 +0200 Subject: [PATCH 0599/1768] InverseFinance: update treasury (#11842) --- projects/helper/unwrapLPs.js | 8 ++++++++ projects/treasury/inverse.js | 3 +++ 2 files changed, 11 insertions(+) diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index facf05dcb6..9051760454 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -777,6 +777,7 @@ async function sumTokens2({ }, resolveICHIVault = false, solidlyVeNfts = [], + convexRewardPools = [], }) { if (api) { chain = api.chain ?? chain @@ -828,6 +829,13 @@ async function sumTokens2({ .flat() ) } + + if (convexRewardPools.length) { + const convexRewardPoolsTokensAndOwners = convexRewardPools.map(poolAddress => { + return owners.map(owner => [poolAddress, owner]) + }).flat(); + await unwrapConvexRewardPools({ api, tokensAndOwners: convexRewardPoolsTokensAndOwners }); + } if (ownerTokens.length) { ownerTokens.map(([tokens, owner]) => { diff --git a/projects/treasury/inverse.js b/projects/treasury/inverse.js index 078f9d88b5..f842e26bb0 100644 --- a/projects/treasury/inverse.js +++ b/projects/treasury/inverse.js @@ -54,6 +54,9 @@ module.exports = treasuryExports({ blacklistedTokens: [ '0x21e83dbfd8f11d885eba9f9ba126da11ae0671b7', '0x265befe2b1a0f4f646dea96ba09c1656b74bda91', + ], + convexRewardPools: [ + "0x9a2d1b49b7c8783E37780AcE4ffA3416Eea64357",// DBR tripool CVX ] }, optimism: { From 070cde7daa6641b7eeef74ef99bd331581bda089 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:17:18 +0200 Subject: [PATCH 0600/1768] track superdapp farm #11841 --- projects/supr-staking/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/supr-staking/index.js diff --git a/projects/supr-staking/index.js b/projects/supr-staking/index.js new file mode 100644 index 0000000000..9bf5f10ed0 --- /dev/null +++ b/projects/supr-staking/index.js @@ -0,0 +1,14 @@ +const SUPR = '0x3390108E913824B8eaD638444cc52B9aBdF63798' +const ROLLUX_SUPR_STAKING = '0x400aDCba906EA6E87FEC276f0E0C0857F71A85F2' + +async function staking(api) { + const bal = await api.call({ abi: 'erc20:totalSupply', target: ROLLUX_SUPR_STAKING }) + api.add(SUPR, bal) +} + +module.exports = { + rollux: { + tvl: () => ({}), + staking, + }, +} \ No newline at end of file From 221d80e95c831e627d0f64345dc32acb3e8cb0ed Mon Sep 17 00:00:00 2001 From: Gabriel Thom <61333600+thomgabriel@users.noreply.github.com> Date: Tue, 8 Oct 2024 05:22:02 -0300 Subject: [PATCH 0601/1768] Unore: add rollux support and remove kava (#11840) --- projects/unore/index.js | 62 ++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/projects/unore/index.js b/projects/unore/index.js index 09b5f13902..e7f41d598e 100644 --- a/projects/unore/index.js +++ b/projects/unore/index.js @@ -1,42 +1,43 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens2, nullAddress, } = require('../helper/unwrapLPs') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') -const ethSSIPEth = '0x29B4b8674D93b36Bf651d0b86A8e5bE3c378aCF4' -const kavaSSIPKava = '0x112a295B0fCd382E47E98E8271e45979EDf952b6' +const uno = '0x474021845c4643113458ea4414bdb7fb74a01a77' +const uno_rollux = '0x570baA32dB74279a50491E88D712C957F4C9E409' const config = { ethereum: { - uToken: '0x474021845c4643113458ea4414bdb7fb74a01a77', + uToken: uno, // UNO token for staking only tokensAndOwners: [ - [nullAddress, ethSSIPEth], - [ADDRESSES.ethereum.USDT, '0x442e9fe958202Dc29d7018c1AA47479F2159D8a0'], - [ADDRESSES.ethereum.USDC, '0xF37c0901662f39039AFBd3c2546e3141c091e014'], + [nullAddress, '0x929F524473D7B86acc0ADD87B1874Bdf63Cf0Ab1'], // ETH SSIP + [ADDRESSES.ethereum.USDT, '0x442e9fe958202Dc29d7018c1AA47479F2159D8a0'], // USDT SSIP + [ADDRESSES.ethereum.USDC, '0xF37c0901662f39039AFBd3c2546e3141c091e014'], // USDC SSIP ], pools: [ '0x076E2A501FD0DA41E5A659aB664b2B6792B80Fa2', // UNO SSRP '0x8978d08bd89B9415eB08A4D52C1bDDf070F19fA2', // UNO SSIP '0x442e9fe958202Dc29d7018c1AA47479F2159D8a0', // USDT SSIP - '0xF37c0901662f39039AFBd3c2546e3141c091e014' ,// USDC SSIP - ], + '0xF37c0901662f39039AFBd3c2546e3141c091e014', // USDC SSIP + '0x929F524473D7B86acc0ADD87B1874Bdf63Cf0Ab1' // ETH SSIP + ] }, bsc: { - uToken: '0x474021845C4643113458ea4414bdb7fB74A01A77', + uToken: uno, // UNO token for staking only tokensAndOwners: [ - [ADDRESSES.bsc.USDC, '0xEcE9f1A3e8bb72b94c4eE072D227b9c9ba4cd750'], - [ADDRESSES.bsc.USDC, '0x0b5C802ecA88161B5daed08e488C83d819a0cD02'], - [ADDRESSES.bsc.USDC, '0x2cd32dF1C436f8dE6e09d1A9851945c56bcEd32a'], - [ADDRESSES.bsc.USDC, '0xabb83630993984C54fd60650F5A592407C51e54b'], - [ADDRESSES.bsc.USDC, '0xeF21cB3eE91EcB498146c43D56C2Ef9Bae6B7d53'], + [ADDRESSES.bsc.USDC, '0xabb83630993984C54fd60650F5A592407C51e54b'], // Zeus V2 ], pools: [ - '0xabb83630993984C54fd60650F5A592407C51e54b', // Zeus V2 - '0xeF21cB3eE91EcB498146c43D56C2Ef9Bae6B7d53' // Ares V2 - ], + '0xabb83630993984C54fd60650F5A592407C51e54b', // Zeus V2 + '0xeF21cB3eE91EcB498146c43D56C2Ef9Bae6B7d53' // Ares V2 + ] }, - kava: { + rollux: { + uToken: uno_rollux, // UNO Rollux token for staking only tokensAndOwners: [ - [nullAddress, kavaSSIPKava], - [ADDRESSES.telos.ETH, '0x6cEC77829F474b56c327655f3281739De112B019'], + ['0x4200000000000000000000000000000000000006', '0x7393310FdC8ed40B35D2afD79848BC7166Ae0474'], // Plutus + ], + pools: [ + '0x8685C2b4D2024805a1FF6831Bc4cc8569457811D', // Athena + '0x7393310FdC8ed40B35D2afD79848BC7166Ae0474' // Plutus ] } } @@ -46,10 +47,19 @@ module.exports = { }; Object.keys(config).forEach(chain => { - const { pools, uToken, tokensAndOwners, } = config[chain] + const { pools, uToken, tokensAndOwners } = config[chain] + + // TVL (Total Value Locked) - Excludes UNO token module.exports[chain] = { - tvl: async (api) => sumTokens2({api, tokensAndOwners}) + tvl: async (api) => sumTokens2({ api, tokensAndOwners }) + } + + // Staking - Includes only UNO token and its pools + if (uToken) { + module.exports[chain].staking = async (api) => sumTokens2({ + api, + tokens: [uToken], + owners: pools + }) } - if (uToken) - module.exports[chain].staking = async (api) => sumTokens2({api, tokens: [uToken], owners: pools}) -}) \ No newline at end of file +}) From 71a789860b3c27a9de4fe5fcf0a2c39a507874d6 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:23:17 +0100 Subject: [PATCH 0602/1768] add bitcointry cex (#11844) --- projects/bitcointry/index.js | 47 ++++++++++++++++++++++++++++++++++++ projects/helper/cex.js | 1 + 2 files changed, 48 insertions(+) create mode 100644 projects/bitcointry/index.js diff --git a/projects/bitcointry/index.js b/projects/bitcointry/index.js new file mode 100644 index 0000000000..b28662a5f8 --- /dev/null +++ b/projects/bitcointry/index.js @@ -0,0 +1,47 @@ +const { cexExports } = require('../helper/cex') + +const config = { + bsc: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + '0xeb4b2ecaa3e732da97d5fa922634138b9c2be6b9', //broker account on Binance + '0x57078A682ac277D444D8CeE278Dc6E2Ff0A52eA8' //broker account on gate io + ] + }, + base: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + ] + }, + arbitrum: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + ] + }, + ethereum: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + '0xeb4b2ecaa3e732da97d5fa922634138b9c2be6b9' //broker account on Binance + ] + }, + avax: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + '0xeb4b2ecaa3e732da97d5fa922634138b9c2be6b9' //broker account on Binance + ] + }, + polygon: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + '0xeb4b2ecaa3e732da97d5fa922634138b9c2be6b9' //broker account on Binance + ] + }, + optimism: { + owners: [ + '0x13CB26668e11b39290AcaE7Bb8BFF1eC0B4dcAaD', //main wallet + '0xeb4b2ecaa3e732da97d5fa922634138b9c2be6b9' //broker account on Binance + ] + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/helper/cex.js b/projects/helper/cex.js index 1ab2338cb6..279a3ca7fb 100644 --- a/projects/helper/cex.js +++ b/projects/helper/cex.js @@ -175,6 +175,7 @@ const defaultTokens = { '0x59769630b236398c2471eb26e6a529448030d94f', //NKYC nonkyc exchange token '0xbf5140a22578168fd562dccf235e5d43a02ce9b1', // UNI '0x25d887ce7a35172c62febfd67a1856f20faebb00', //pepe + '0x2024b9be6b03f2a57d3533ae33c7e1d0b0b4be47', //Bitcointry exchange token BTTY ], eos: [ ["eosio.token", "EOS", "eos"], From 275625d9c6f4027978508ddbc31816e8c2d6bdc0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:24:13 +0200 Subject: [PATCH 0603/1768] unore: minor fix --- projects/helper/tokenMapping.js | 3 +++ projects/unore/index.js | 1 + 2 files changed, 4 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 0020cd03f6..05ec2b4353 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -81,6 +81,9 @@ const fixBalancesTokens = { [ADDRESSES.null]: { coingeckoId: 'binancecoin', decimals: 18 }, '0x4200000000000000000000000000000000000006': { coingeckoId: 'binancecoin', decimals: 18 }, }, + rollux: { + '0x570baA32dB74279a50491E88D712C957F4C9E409': { coingeckoId: 'uno-re', decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/unore/index.js b/projects/unore/index.js index e7f41d598e..1e142ca38f 100644 --- a/projects/unore/index.js +++ b/projects/unore/index.js @@ -44,6 +44,7 @@ const config = { module.exports = { start: 1626100000, // Sep-20-2021 07:27:47 AM +UTC + kava: { tvl: async () => ({})}, }; Object.keys(config).forEach(chain => { From 6a26bd47cad7bad466d30330519258d69be0ddc0 Mon Sep 17 00:00:00 2001 From: pitfidev Date: Tue, 8 Oct 2024 15:50:26 +0700 Subject: [PATCH 0604/1768] chore: added pit.finance (#11838) --- projects/pit/index.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 projects/pit/index.js diff --git a/projects/pit/index.js b/projects/pit/index.js new file mode 100644 index 0000000000..dc7bf29106 --- /dev/null +++ b/projects/pit/index.js @@ -0,0 +1,37 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { getConfig } = require('../helper/cache') + +async function tvl(api) { + let data = await getConfig('pit/' + api.chain, `https://ydaemon.pit.finance/vaults/all?chainids=${api.chainId}&limit=100000`) + let strategies = data.map(v => v.strategies ?? []).flat().map(v => v.address.toLowerCase()) + let vaults = data.filter(i => i.tvl.tvl > 0).map(v => v.address.toLowerCase()).filter(i => !strategies.includes(i)) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) + const calls = [...vaults] + bals.forEach((bal, i) => { + if (+bal === 0) + calls[i] = nullAddress // skip empty vaults + }) + const tokens = await api.multiCall({ abi: 'address:token', calls, permitFailure: true }) + + tokens.forEach((token, i) => { + if (token) + calls[i] = nullAddress // skip vaults that have a token + }) + const tokensAlt = await api.multiCall({ abi: 'address:asset', calls, permitFailure: true }) + bals.forEach((bal, i) => { + const token = tokens[i] || tokensAlt[i] + if (token) api.add(token, bal) + }) + return sumTokens2({ api, resolveLP: true, }) +} + + +module.exports = { + doublecounted: true +} + +const chains = ['sei'] + +chains.forEach(chain => { + module.exports[chain] = { tvl } +}) From 48ef2553eef5910605290271d4fd313aa81623f7 Mon Sep 17 00:00:00 2001 From: Jing Date: Tue, 8 Oct 2024 17:03:13 +0800 Subject: [PATCH 0605/1768] upgrade cadence1.0 (#11845) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/increment-liquidStaking/index.js | 11 ++++++----- projects/unore/index.js | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/projects/increment-liquidStaking/index.js b/projects/increment-liquidStaking/index.js index 50b89e3ca2..e5c6176800 100644 --- a/projects/increment-liquidStaking/index.js +++ b/projects/increment-liquidStaking/index.js @@ -1,11 +1,12 @@ // increment liquid staking link: https://app.increment.fi/staking const { post } = require('../helper/http') -let queryLiquidStakingTVLCode = - "import DelegatorManager from 0xd6f80565193ad727\ -pub fun main(): UFix64 {\ - return DelegatorManager.getTotalValidStakingAmount()\ -}"; +let queryLiquidStakingTVLCode = ` +import DelegatorManager from 0xd6f80565193ad727 + +access(all) fun main(): UFix64 { + return DelegatorManager.getTotalValidStakingAmount() +}`; const queryCodeBase64 = Buffer.from(queryLiquidStakingTVLCode, 'utf-8').toString('base64'); diff --git a/projects/unore/index.js b/projects/unore/index.js index 1e142ca38f..c3ab008095 100644 --- a/projects/unore/index.js +++ b/projects/unore/index.js @@ -44,7 +44,7 @@ const config = { module.exports = { start: 1626100000, // Sep-20-2021 07:27:47 AM +UTC - kava: { tvl: async () => ({})}, + kava: { tvl: async () => ({})}, }; Object.keys(config).forEach(chain => { From 5382fb6559a2f136a8778c9e81afc38efb36f7f4 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:44:58 +0100 Subject: [PATCH 0606/1768] add starknet wallets CEXS (#11847) --- projects/binance/config.js | 2 +- projects/bitget/index.js | 3 +++ projects/bitmark/index.js | 3 +++ projects/bybit/index.js | 5 +++++ projects/coinex/index.js | 5 +++++ projects/gate-io/index.js | 5 +++++ projects/huobi/index.js | 5 +++++ projects/kraken/index.js | 5 +++++ projects/kucoin/index.js | 5 +++++ projects/mexc-cex/index.js | 5 +++++ projects/okex/index.js | 7 ++++++- 11 files changed, 48 insertions(+), 2 deletions(-) diff --git a/projects/binance/config.js b/projects/binance/config.js index cda29f2f6a..101d6c3e65 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -282,7 +282,7 @@ const assetList = [ ['ETH', 'OP', '0x5a52e96bacdabb82fd05763e25335261b270efcb'], ['ETH', 'OP', '0xacd03d601e5bb1b275bb94076ff46ed9d753435a'], ['ETH', 'OP', '0xf977814e90da44bfa03b6295a0616a897441acec'], - // ['ETH', 'STK', ' 0x0213c67ed78bc280887234fe5ed5e77272465317978ae86c25a71531d9332a2d'], + ['ETH', 'STK', ' 0x0213c67ed78bc280887234fe5ed5e77272465317978ae86c25a71531d9332a2d'], ['ETH', 'ERA', '0x7aed074ca56f5050d5a2e512ecc5bf7103937d76'], ['ETH', 'ERA', '0xa84fd90d8640fa63d194601e0b2d1c9094297083'], ['ETH', 'ERA', '0xf977814e90da44bfa03b6295a0616a897441acec'], diff --git a/projects/bitget/index.js b/projects/bitget/index.js index 82a4da501b..e328c28be6 100644 --- a/projects/bitget/index.js +++ b/projects/bitget/index.js @@ -132,6 +132,9 @@ const config = { kava: { owners: ['0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689'] }, + starknet: { + owners: ['0x0299b9008e2d3fa88de6d06781fc9f32f601b2626cb0efa8e8c19f2b17837ed1'] + }, } module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/bitmark/index.js b/projects/bitmark/index.js index d6d4c6129d..83bd3e816c 100644 --- a/projects/bitmark/index.js +++ b/projects/bitmark/index.js @@ -20,6 +20,9 @@ const config = { bitcoin: { owners: ['37RJkdkzPXCMYSTq74berJYj9FmNn7wFP5'] }, + starknet: { + owners: ['0x04de639e634c071c3ce8b1c69fac0500aab5ddb25a08fd0f757176243e4c0467'] + }, } module.exports = cexExports(config) diff --git a/projects/bybit/index.js b/projects/bybit/index.js index ab051ca4d0..07f7f29103 100644 --- a/projects/bybit/index.js +++ b/projects/bybit/index.js @@ -148,6 +148,11 @@ const config = { "kcwo3rimcnqf" ], }, + starknet: { + owners: [ + "0x076601136372fcdbbd914eea797082f7504f828e122288ad45748b0c8b0c9696" + ], + }, }; module.exports = cexExports(config); diff --git a/projects/coinex/index.js b/projects/coinex/index.js index 93d7b69dd2..5add34adb3 100644 --- a/projects/coinex/index.js +++ b/projects/coinex/index.js @@ -41,6 +41,11 @@ const config = { 'TFp4V3S9JqJyQAMMCewyn4aAaLueJwzS7H', ] }, + starknet: { + owners: [ + '0x00fb108ed29e1b5d82bb61a39a15bbab410543818bf7df9be3c0f5dd0d612cf3' + ] + }, } module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/gate-io/index.js b/projects/gate-io/index.js index 7c7a175956..b988eb12b9 100644 --- a/projects/gate-io/index.js +++ b/projects/gate-io/index.js @@ -108,6 +108,11 @@ const config = { 'rNnWmrc1EtNRe5SEQEs9pFibcjhpvAiVKF', 'rNu9U5sSouNoFunHp9e9trsLV6pvsSf54z', ] + }, + starknet: { + owners: [ + '0x00e91830f84747f37692127b20d4e4f9b96482b1007592fee1d7c0136ee60e6d' + ] } } diff --git a/projects/huobi/index.js b/projects/huobi/index.js index 2eee4134fa..b26b1f88d3 100644 --- a/projects/huobi/index.js +++ b/projects/huobi/index.js @@ -155,6 +155,11 @@ const config = { '0xafdfd157d9361e621e476036fee62f688450692b', ], }, + starknet: { + owners: [ + '0x03fd14213a96e9d90563ebe1b224f357c6481a755ee6f046c8ce9acd9b8654a7' + ], + }, } module.exports = mergeExports([ diff --git a/projects/kraken/index.js b/projects/kraken/index.js index 89911dc81a..0379ee4e27 100644 --- a/projects/kraken/index.js +++ b/projects/kraken/index.js @@ -38,6 +38,11 @@ const config = { 'bc1q75tsfq2c5cqp2ss32qksmnzd9yea2mjsjktdmrz900dcmg43ck4s66sgjx', ], }, + starknet: { + owners: [ + '0x620102ea610be8518125cf2de850d0c4f5d0c5d81f969cff666fb53b05042d2' + ], + }, } module.exports = cexExports(config) diff --git a/projects/kucoin/index.js b/projects/kucoin/index.js index f158e6a2fb..0b02a707e0 100644 --- a/projects/kucoin/index.js +++ b/projects/kucoin/index.js @@ -217,6 +217,11 @@ const config = { '0xd6216fc19db775df9774a6e33526131da7d19a2c', '0xfb6a733bf7ec9ce047c1c5199f18401052eb062d', ], + }, + starknet: { + owners: [ + '0x0566ec9d06c79b1ca32970519715a27f066e76fac8971bbd21b96a50db826d90' + ], } } diff --git a/projects/mexc-cex/index.js b/projects/mexc-cex/index.js index 9c9323c29d..71d693ac0d 100644 --- a/projects/mexc-cex/index.js +++ b/projects/mexc-cex/index.js @@ -38,6 +38,11 @@ const config = { owners:[ "0xdf90c9b995a3b10a5b8570a47101e6c6a29eb945", ] + }, + starknet: { + owners:[ + "0x069a7818562b608ce8c5d0039e7f6d1c6ee55f36978f633b151858d85c022d2f", + ] } } diff --git a/projects/okex/index.js b/projects/okex/index.js index 6ce916b78a..ca5cac2b2f 100644 --- a/projects/okex/index.js +++ b/projects/okex/index.js @@ -567,7 +567,12 @@ const config = { owners: [ '0x834d639b10d20dcb894728aa4b9b572b2ea2d97073b10eacb111f338b20ea5d7' ] - }// + }, + starknet:{ + owners: [ + '0x0269ea391a9c99cb6cee43ff589169f547cbc48d7554fdfbbfa7f97f516da700' + ] + } } module.exports = cexExports(config) From f442f168ce8a7e3c33b9932977c9e290933cbb51 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:48:43 +0200 Subject: [PATCH 0607/1768] update myx --- projects/myx-finance/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/myx-finance/index.js b/projects/myx-finance/index.js index 5033e2c8a3..4e491d969b 100644 --- a/projects/myx-finance/index.js +++ b/projects/myx-finance/index.js @@ -4,6 +4,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const config = { arbitrum: { vault: '0x8932aA60A7b5EfEFA8Ec3ee899Fd238D029d10c6', fromBlock: 175954437 }, linea: { vault: '0x03f61a185efEEEFdd3Ba032AFa8A0259337CEd64', fromBlock: 2390784 }, + op_bnb: { vault: '0xCB9724cf580C09f3Cd7391F7fE20b5BF9cC4C428', fromBlock: 35581884 }, } Object.keys(config).forEach((chain) => { From 0d4c60b8669526ec7ef8ff2ae0f456975ca1bdf4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 8 Oct 2024 14:26:38 +0100 Subject: [PATCH 0608/1768] mint chain --- projects/mint-chain/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/mint-chain/index.js diff --git a/projects/mint-chain/index.js b/projects/mint-chain/index.js new file mode 100644 index 0000000000..6bbbe77044 --- /dev/null +++ b/projects/mint-chain/index.js @@ -0,0 +1,16 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + '0x2b3F201543adF73160bA42E1a5b7750024F30420', + '0x59625d1FE0Eeb8114a4d13c863978F39b3471781' + ], + fetchCoValentTokens: true, + permitFailure: true + }), + }, +}; From a5345d7f659bee3a963d2ae42f38c3f37d9d6511 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 9 Oct 2024 04:18:42 +0100 Subject: [PATCH 0609/1768] add native usdc --- projects/helper/coreAssets.json | 3 ++- projects/navi/index.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index d3daddaafd..b7fb1ce2d2 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1404,7 +1404,8 @@ "USDC_ARB": "0xe32d3ebafa42e6011b87ef1087bbc6053b499bf6f095807b9013aff5a6ecd7bb::coin::COIN", "USDC_BNB": "0x909cba62ce96d54de25bec9502de5ca7b4f28901747bbf96b76c2e63ec5f1cba::coin::COIN", "BUCK": "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", - "SUI": "0x2::sui::SUI" + "SUI": "0x2::sui::SUI", + "USDC_CIRCLE": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC" }, "grove": { "WGRV": "0xE85f139488c689038028a3EB8fC38dcC29D4C340" diff --git a/projects/navi/index.js b/projects/navi/index.js index 97d3f13397..88e0bcd3b4 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -7,6 +7,7 @@ const decimalShift = { [ADDRESSES.sui.WETH]: -1, // WETH ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, // AUSD ['0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN']: -1, // WBTC + [ADDRESSES.sui.USDC_CIRCLE]: -3, // native USDC } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" From 4c16c3f53c9452ae99e1e51257c939e458ff641a Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 9 Oct 2024 04:55:15 +0100 Subject: [PATCH 0610/1768] update address list --- projects/wbtc.js | 724 ++++++++++++++++++++++------------------------- 1 file changed, 339 insertions(+), 385 deletions(-) diff --git a/projects/wbtc.js b/projects/wbtc.js index 7413a97659..fabf04576a 100644 --- a/projects/wbtc.js +++ b/projects/wbtc.js @@ -4,391 +4,345 @@ const ADDRESSES = require('./helper/coreAssets.json') // WALLETS FROM HERE https://wbtc.network/dashboard/audit const owners = [ - "31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", - "31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", - "32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", - "32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", - "32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", - "32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", - "32m8wzKabRRF7o6JRXN1srLSA5FzND769o", - "32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8", - "32okkzumvdoocdjN18SzbnTTNd2omQvvt3", - "337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ", - "33C6kjmmGp2mrS6coGn627an3xpiRpEyhX", - "33DM5s2vPgX2P52DpurbXdVYa8dGwDCsJ3", - "33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ", - "33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb", - "33epzdB4nk3FWHtUpHMQrzTWxiehSti11v", - "33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8", - "33xk2gq91LNUaip9bPnoECtfaA1RjAcrSo", - "33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8", - "343uVxqsriiveWxekC6s3mNaERzsbfke3h", - "34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q", - "34whRPeeSYTPcihybfXmkG2uoShUdT3d2d", - "35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e", - "35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB", - "35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59", - "35SZSm1CDcz7p27Hj78xZACv4Ak45EKGpf", - "35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR", - "35XnFgLYBuYogTx9HHGbJCRGfyqyC9ZtDG", - "35ZmRhYBwDfvoASsw35KNJxwypvsX9xD14", - "35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6", - "36WQ2FEUnTmt67xXNZgQMSFQZjK6AJxLCZ", - "36hbDz8GSBpQdEf2UzcKieCNxSA3HS17JX", - "36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE", - "371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd", - "37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz", - "37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi", - "37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh", - "37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx", - "38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv", - "38MHxNgiHENWExwCe3EEWYmfvgFM3i1WVW", - "38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD", - "38TQEEGTmmPa1rghsYGwZhapiDQsSEnkub", - "38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm", - "38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF", - "38rK7BfeiegdchggPCk2CZc3fuy8ozwzPP", - "39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ", - "39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm", - "39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE", - "39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c", - "39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2", - "3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit", - "3ANaBZ6odMrzdg9xifgRNxAUFUxnReesws", - "3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm", - "3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T", - "3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA", - "3BY62gfDUmuzMp1T9Wx4LnMRk3oNbQsKyQ", - "3Brhg9KYdB9oDrUtvKJ9k7mbn7zzHnMV51", - "3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb", - "3DKc1cFmTC4BJFcoyeN7fDp1oavTM4SvuX", - "3DeAGDRtQ984GazpLqfpS4kRW8NXBei5V8", - "3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4", - "3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd", - "3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2", - "3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1", - "3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT", - "3G3kGKAD5BgWZu91ejMXsW5LxEMhKZj46Z", - "3GbZUJ2oaUG3rZTvAwTCqpsNMWGm6j62r1", - "3GnY2SF2DoWRwWyQb6jThRJ5xYzNWFfd7J", - "3Go9rkgYQ3oLXfbbiDFENXmWZXQDaMjvtx", - "3GohY4RNGXjRH5KhByj5m4Amxq9jTsGfBr", - "3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm", - "3HLxZqoEHdGPV9oFZQxVfG41z1uP1LrNaJ", - "3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH", - "3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy", - "3He1eqsBZM5kbtZGuUDX7ysfEVWCjweZtJ", - "3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU", - "3JJpCZCk4h4TpQeU7SA1yhH768Xgbtdbfg", - "3JTWYpPz7JkvhnAN7XKzYK31AfmxEUzRb8", - "3JbEPhuab1Gx6yrY8dD6wF1NrVAn3eG8CD", - "3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t", - "3JfZb6DbsRaQExeHAYmFa3s3azckqdyQr5", - "3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5", - "3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s", - "3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth", - "3KUrPEGy9VFeQHZYJSGZpE78X5zf1n48pP", - "3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7", - "3KkkHYZywtjNy2eoVvL1xLo2Mnzz3gaDqQ", - "3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse", - "3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT", - "3LYNPfnfmGRQcheXUZFRNEYPDDmLvDSgAE", - "3LoYYxQis416ykPKGNuWe4iLdfSPWCHjgd", - "3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq", - "3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1", - "3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", - "3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", - "3Mzdh31vo6wUPTWnZ7GncPPWXA1WDopkhm", - "3NNsvp7bfeihJTiGbiL3t6jH3jUbRERsB7", - "3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", - "3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", - "3PggDrcp4et9phMamnSenN8HeNPP2YCuCX", - "3QB2qhnj5Xxwhh3GKcfwQDSkL91BCCn5cp", - "3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", - "3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", - "3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", - "bc1q02hdwthfslrempcvrgnrelsluszmt20qjaahg3tn2plse5pc3evsskz9g6", - "bc1q07jp79h30qmh39pkdmntaycwezmfl2njzvp85z8sdthhp2cus42qrwzglw", - "bc1q094s5w7semhdkcgzxrhxe6am449prjhsend8p83fhk9jv6rnr0eq6af0pp", - "bc1q0asc7qsj90esjzfmgz7r79tc5vd455yugwx0q4eqdqhqs82t0s2sfhtec2", - "bc1q0de5mlkcvundsnzdsmj6padctjh25jgsq3tcyu6d2qcgjnz0h8us2sws8a", - "bc1q0nnem9u53fcxcnmuutqw7j458hn56ljte34edvstjfyz8rfhxyesju3hhx", - "bc1q0s0enxvmfvfg3dj0rza2el0vz7p3a6xk2juv7vztw22l4g35rknsmv58se", - "bc1q0tckafgtukhn78d32ljl8c3hr0an5jq08599gf08mqxeqlahdg3s5wvuz3", - "bc1q0tvp3naff0auk3p4q99k3s9ltlf2w97uclrjspf3lvjkjywsj8lqvdx46f", - "bc1q0vthrmhktt2mhew5rq6e5q3qlj573uxcfqry5h9ea3gh4l9fz6hq999wz3", - "bc1q20mxuuv6ta5uy6m3s34lzwgs6p4qme4wyvv9y2cawd8a45y84susw2c9rk", - "bc1q2420wgxmqkxjkpkkdd9hxflxuqxhuqnt7atg0w3q3ypv0qfel0yqtanfuy", - "bc1q28pdpztsjuy4lqsa5hs249vq8ftykkt06aa8w97hgjxuvqz30trqqz5jdh", - "bc1q2j0ks6v6swlavvg20adsdn7hf9avm0979jc003g9lkg9dx0trz3sma7q62", - "bc1q2njvavlw9esncygac77d3jxjfwu877f23gxa88x33vjf3xa24lqq0xxetl", - "bc1q2nra9wwwq7pu4cg8zwycp8dzg9hcv8ywlj356p4ahjy7l80khphqvjdyfy", - "bc1q2qux9ad0egep5v5f2sup5hyszrl3nrfzyegmnmccmw7yk9chplhsy5sn4l", - "bc1q2wd3mfdcvjrxlccpl7wrzunzch7xaymtfzuvvx2tld760j3x5chqgsget8", - "bc1q33qexf56q60lxfpjhvgkj0l0lcgsapa7lsugkcwnyrceuw7kd89qsmy8h7", - "bc1q349jnpnefh952da4unfapsd3a6zmhgw8ctd2nk4ut40r37ax0d2qn0dluu", - "bc1q3d9jgd2yfx49986hjek9ulcj55umf6uyssrxqdmma7w7f7cyhc7qqyqvzr", - "bc1q3dyv677fn6feur2qjaqjdcftzgrmrwa7mjnvq7y8wxtka4ceu8tswfcvwm", - "bc1q42vvtdvdkdzj7glr6mtd52vgxddagktxusha6dxl2fes2dernqwqzff9k3", - "bc1q46uyezygewcl972rkp6z4pdtay669pxwrl8q70mgnda4cyf6yz0qj6rcsn", - "bc1q47z7kxma7lp7chnkaucee7ey9qds292kylz6rqvdlusu839ved9stns32j", - "bc1q48j4p67jmgpdpzxtu5tv3rendwvf6jjtqs2gt8ed96syxuqrsdfsl788un", - "bc1q4fpz2ntr5zlz6jga924hmaqc4a86s8luvfym3ff0qqr6gxykp60qeqqdn7", - "bc1q4gs9f4nhla3ufe6sumn8k0smcc5vxr0524nz3d5nhww70dr703lse46rmp", - "bc1q4gvftsdjy8wd6ga8c3a66rg4q6lxqvgak6edgnz7whs690vy2x8st6at64", - "bc1q4tl9hjvv3yvvsgqdajd492etlg8phrtml36ee5n0dt3mylmce23qnd5fdm", - "bc1q4zvuejph0q3z2c0narhgjtz6w47h6rst5eyyvr270lxh4tfqzluqrx4h4f", - "bc1q5a0t7av9xtay7av70fdwscsnx62rssut3mg7dclwmmsj0nxq5z3qgm8t49", - "bc1q5j8dyy5u94j0ulfg98l6jwsgjfq7dna0wwcwqvjcmwkgkwtcf30sm856qg", - "bc1q5ltp433ew9q98antza5s68h46g404eeaj6jkg4u6799q9dmkdngsmh6zny", - "bc1q5mq8f6rh85jwk0agf8huhtjp6syxcu7q4dk7alda9c2cedflj8js0u8j9f", - "bc1q5s4sa6s4vgst2pt97gvnxrmh9z8xa2j7kj370400fpx06pkk9uls7vzaaq", - "bc1q5sn9gqy6hd46yw545946f6a5crqryskhs9gge5z3gkp5d9luezmqllv7wz", - "bc1q5wj7yc27dzvnejeq9h543d6xt4cd90q8v8569tpzm6g5k3k252wq9jwuza", - "bc1q5xfafyynujpe4xm3sau92sy8rar3auf80vz3as6cjrn7pyvncfxq34hhcv", - "bc1q63yjt8zpr2kcegcmjr3vyqukm9zhlr432mcgss027lzs36qeh7qse8ct8w", - "bc1q67r0cfzcaqqm70sr00jq9fdyaplwcg24rtskylppej2qpgscjw7q5nrwf9", - "bc1q68mfyj37aurdzxwpq93vka6qkvhmcjl02l66va6vy8yktegp6nvs5knqe2", - "bc1q6e05t64zsdffvjxgw9njyxt5yhgq7xt2xxsufxk5npfcz4aewrgsyccu28", - "bc1q6hcsftu0hmm7q67cec272y8sxwhkq0pnpymshuty9x8wmymmjhdsquhzh4", - "bc1q6j7yxe948zd35xsrx3jucflxeq65unmrwusrm9a6c82lj459zmyskn5xk3", - "bc1q6kumts4ps94pyp8mfdn7yyy9p7y8n0wvgq760xpyk2r005rsh0dqdxxp22", - "bc1q6lmpnckv0zkdkv6xkvd2m2uy8mxetnz9g3qxkp3kpkvfhnsv0w7slkje25", - "bc1q6vk4rdxdnuklg5m4ltm866v6scz6lyuxdhj50qp6p4en8vtt23js9wpzgj", - "bc1q6vs72ztq8xchew26exy4kdnjxzrlxz43ny4lfckg95z5ka6ge6rs4rc5g2", - "bc1q6xr3ys66ry7jsfdfrlz82kfkwwnmdqtjh0ctm7y974kvufrwwezs6clrgr", - "bc1q6yk7s5g8u2ev7k9sw4zdazlfxj4vtduxgpekxvttzhju00c0yshs7ymvzl", - "bc1q6yzjmcudjlvq5nc0un27kfzwr283u0wdm53kqhelsja428t8jjfqpxc32j", - "bc1q76gspqpw24cqsptydstwy3egft798n2zq39gxfmfuxd5fvhh8p9s2s7c7f", - "bc1q78df3e2evtq70ntdcmcwzn0gs8a9zrlzh3p3xfrrt7p7s589pqesccuz22", - "bc1q78tqk9mn587sgnqqthsyrawmwpne7ssl4a4wlyasq4c9jqjtndwsyj22kn", - "bc1q79crmsa0k8g8k735nqqlctxqhz6eeugw2qv3x0sskdvsmsvjq7rsujhrr9", - "bc1q7d5q7e53k4w3c6n28tjrdvmlxl8skxutykk6fs9fgh79h0k9xc4sr9hzuy", - "bc1q7du4789yhw996lqwx6scre99sfzy2e53ax9502daxscsye7vvmksy8r743", - "bc1q7eaej94t49psde7mkmy6dd7vgn8f0zg45yqalpysy7u47y3z00lqg3x7fn", - "bc1q7l6c5ddseh5h54680ae0ufkx29y6rnl5yr8vhr6nfwc5smk8p0ysexsgsw", - "bc1q7pnj8k3tphfvcq7vrzlja5vqdqp7xed9rfn9hdl4ehgq09la9yhs5dpurz", - "bc1q7ps737rkza38ha5ysg3k4sjrd2xauexthkw23lxt74lpr70gum4s2jp8uk", - "bc1q7ta8kheq8ellkn6fmmkzxj47vq0uqcd53zd8n7g45hl945d6eals3d4ljj", - "bc1q7wcl3plp72cghpd6lapucmxtaa5fq4w4wmhswu6xjqhrmt9jsh7sfapsw4", - "bc1q7zdunrqm74erprv46nyryjkvl5nuymgmn2ek3x7mgck48umga5mstxdl9p", - "bc1q8fkquy9luszzu2mlsad3fsjgx433vp4qx69wswz5skhz65txv2lssgaua9", - "bc1q8mfdkttc6n804j43jmcqkftdug7yje77a55qeyhsy5ej7ca65wgscrvyd2", - "bc1q8nm7r22vw6lnmzl52lqvnlrft6hm36ye0087e984feavjmej4spq8y57z9", - "bc1q8pqeaj8c647ascnjpc582dzwfw8xstvyderzxzvc2dk09j8d4rasvctr5f", - "bc1q8uldtn4rnr23djmpvgwacs6tcazepkflhmej9t5r3afc9lldq4mqrl6zna", - "bc1q93rsljth5uxrpye4na8688r043lye0ny7uyexr4n24hf9wlgdmns9zcjn5", - "bc1q95ptqclhvj9vrsfnexfd4fs3l95dyyrt3cq3qyfpgxsmfuhspj3qq5gcqt", - "bc1q9988y3xw3mhv0tnrugu8c2vsw7e6f7ywrdaya6wcrcertw8rz54snxgnl9", - "bc1q9cs23smvx9c4q6eqcjpxgp0yrw6ar62w2x4mwe4dd88hqsfg35yq2pfk3y", - "bc1q9d6ayjfl3jagylp7x86v3dzzk65u0gt34mw74w9fxh0nyaf24slqp6sat4", - "bc1q9ehldvjkmd3s28m7922w6mun083kpjqfr9q9cal8zkqp0yaxyr4sy8v4re", - "bc1q9evu4ywa2tmhxt9x3fe6nt0e5ngxmq7kewmdvuk57j4c53ak4zjsj87pw7", - "bc1q9f5cecrwtwrfrvgxde5c04serf3txc8mdx7kgk3zhen2xp22zgcq5dngyh", - "bc1q9fftzadztvgpe90hnwec9n5al44xkuw6dc0n3mtt8w9wxyeg3rlqwfn527", - "bc1q9r4slky3fsjnen39u3fh6d22pwvk3pduj3htwyd5as3hywe2d49q6zyk05", - "bc1q9rrkgd0x5rv57ftysp3t4e35zhma2ejcjj0per8cg89um0mn0acs5hqh5k", - "bc1q9xne956dj0szmxur2up3xg4jl0ktjxpkggr7r5kw5tth48n4pemskcd9mc", - "bc1qa0mxdj0yehl3m99c8tsgepmngz0a0yf96v9al3ejyvla97hysjdsgzj59x", - "bc1qafrg9lt04d9wvurrgvr7l8p4cn5f07zh86d8rljeh6fzqegxe44sj82x4a", - "bc1qah2zmzd4atalqpds7ke86h7lvv49xqa43cyk28y2lwsus7sujd2sndplut", - "bc1qaj7w4a7kxvkjdgz76mc2uy66825ngjhqtasqd6tgssrajc68dk0qqkd3hc", - "bc1qak00ktehfya8j5vg5xcq7dfa2rae7zfnvjgs9jm0fsxa7a420rjs4zcp6t", - "bc1qanjru8xgu07kq6w0meyvydsfuvrlt75f4uekrhkuucp73w4gq0kql9dh26", - "bc1qatg2m52vj24zxvu92azvphxs08xp59prr86fcgdg42sp85v3qhsqsw88rc", - "bc1qau35ge0tgqlqvhn3pyv99ckukaxh9kes6e3jfpc4vw2ssfh3fpeq4dec6j", - "bc1qaygehcvv8334c6x9e42shrjz88kpnhw0gycz5fque4w4rjck6pnq7msl6g", - "bc1qaz28gc8e58uj5e80nu9j0yjws4zy84ahqlnfqd9ryhvc7a80vlyq430rvv", - "bc1qc058aal4cj2kk8e3tvhwu95cndy0lzr2zrxe49f3yasp693nyh7slfcgpl", - "bc1qc3h2hv8wnld70ujx8dyrmxs0ly27xs7us09y6e226yfl5vrgc2qsrxuucz", - "bc1qc9wlxjgu53ua5efqyjfwhwr3cn89smxq230h574v56edwmw0f0vq8qaakl", - "bc1qca7rh32jt8kg4kqtkcu98uucjlsslzsreh7tchk6hddvwe8kzzjshpppat", - "bc1qcf7wyjzz6f32je5vyk6pvketf5ykyg2lys66vwm43mc0g0gchzasy0k2e8", - "bc1qcmslz2gwsenf0xn9g90gvwkzympzxxhwhp8vrckudj0w5pdndwss92v3h4", - "bc1qcnp9057urvh2rrm09eya8mrasea7yys9q3q8hxs7unyct7nydtcsz57ajd", - "bc1qcnx924c7w3e8r42q3rvup60lw64gyn2kd4fs3pwckw7zw9966aaq568nz4", - "bc1qcudwp0xdlldgw78t6zfcklehwqt44a0hqt6n92k6uplk2w6q33fst0kdnv", - "bc1qcxzdm5pcfqnam3umsxsnwfykfx8j9rsl4nhrfqnt55qeg9q3625qvvyyuz", - "bc1qd3lvm6evz5suedhlwyrtf9cjrqtaq9unwe6423yl3j3exmq97a4s0mpzwt", - "bc1qdjxc3z0m2q5mz7lr67pmuq8hgqmhds6nmae0fkk2s07zge2f9jsseutev2", - "bc1qdm5rxs4w29c5u8wg7ppeqssgjrql23c0gsps7m0ctr6ratcl2a3sjnnq9g", - "bc1qdn29e8sa4xmwf0c4r6xkekea2mwt73d2qjsdtsne5j6gd9ujwysqmfh59v", - "bc1qdqs2zn6hrhvpxrtp0t82xfk2jv2j445hu7gguzm0ktwzdq5zzflqth7638", - "bc1qdvpvz88pq46qnvcz6jz08nmfldwhf8nx2v6x4z4tc79mpy8smkvqc9t9q8", - "bc1qe6xyfazpkry4nje0wmhfnv6faxfuu2drx4uryejdl2mhrplgeujs3knff6", - "bc1qe9q66vu5yyuzedfzugdh3yj5ask3n4wpx8pghw7ff6x7dd5p0gqqf66rxd", - "bc1qecswgzwg3sldnh4cwdfgly7f05sp2sela8g7hg0y0vp8l7t9nueqarz5w9", - "bc1qemj5cexuhn0ld93drv40kqfhvl2dag5vgy3d9vv4dar0hl6he3xs4fpjma", - "bc1qemtc7ddu4fvngf7pg8c5sukqswt3fr2zcnqnt7pju6a5fyrz7e5q96x25r", - "bc1qesf0u9lu5petyuukl9zq0g86wf2k69yehys2n4te7pf2y2csqpgst0tqhu", - "bc1qf285u7ygu9f2umg33a4c9wtdkfpahpt5kvqazk6arzktsw6vwguq02eckh", - "bc1qf2dh6acfagsayfprjzwzzysn4d4rdudkd6dq2adu2wj0t6ty8vlqnse73k", - "bc1qf3ret54m7mdevr8xwv8msstpcx6978vgwzfxkw3zjmlydfk4lqxqekert0", - "bc1qf42d25evlz8m503fgdw3trkzq9y53s5kwayfwjpvas26q2cnlt4skltleh", - "bc1qfdpu4yp2zk7xmm6tpfcatxe4gax5ktd0g9ra59jzcqtqkldrqe4qn0qqc2", - "bc1qfjrw5r0wttwu0u0gewyfcs2v37mujcxlhrfp7pqt48zwtjt2fs2shqjw2d", - "bc1qfrn20wgnt6l0a3qq4fxca8c66cuyqmvrfwkwwqhkxnf6z5xuxnpqzdzymf", - "bc1qg47q9u0ctw40jf0p8wswc67tcr96wel065f735cdu3e9aypqpumsvt4lun", - "bc1qg7egerrjv5ka0axjcwzh2rnkldr2k5yace828glhjyc6yz6s46sq6jk8xw", - "bc1qggrjslsem6ep9x4yxvyfdtgcxvyf9z85srlxpsuucrq6xsvaz3jspha83z", - "bc1qgp74f6xyajxznu2hnjh9txmzy7k7et3pkh9rc6enxt68fh8lw5js78s4d8", - "bc1qgpf2ar68l58zau2alfdnuw6afhm99k0nlfsrvcacd3jzpjlhq96qhxaxtr", - "bc1qgtldvmct0wa0569crgedr3ccrlydxfrymk7rfmalt7ehjqx54axsfv00gg", - "bc1qgtlgfqdyw60cawws4lvnesva46lgmyx2hhfl9xcnqp5m45u3dq3ska8nl2", - "bc1qgu5wpteehuuq8dcdd30d7la405j9r8wa2ttzqawt73lt8aec6kjs6u33r4", - "bc1qgzq2gq0l5nuxlaj45eyp4v3w6scaa9hx6f4chg60sufwmqwe4c7sp9tcng", - "bc1qh08szja77tucpmmwqmvyk72z0kjkqwuk2r327w7vwwh0f7997u6q3du9ga", - "bc1qh0yftewpsf8s3pyln8s6ky6qd6c7n643gndfhmkp7uczayua2mys9u6gw7", - "bc1qh3kulsckdz7d5ar3taglhqz4sa3wuasanyypuxyjscwzh0mm3g8qe9danw", - "bc1qh4qr0ytwjz7axxyrnl95la36jdqlygqpnul7wxx6a0mwzfmg9tkqkgszc7", - "bc1qhdaulu7pyhdhz4ty35v62gkx56nj2l7e6rz3x799sztdklan8n8sx863nu", - "bc1qhh2t6x7z57svrxdtl83xzdfz8melaueg7jmtpmsma40g2cfdxkes3lkd95", - "bc1qhjjcklsnjs0aseena8mmvlu7kufmeuhrlfz9l7dewpqsn43s707qkd7dny", - "bc1qhjxpm66t2k6v7c5zk6u2sdh8t36kas4a5402sqw82ewdpzuutf2s38ra4l", - "bc1qhl29w3rzcp9q3623hzvvnuksst0g48347qm82tr8ng3dfm9r0yvshlmvh2", - "bc1qhn7h9l2ky9l95sq7rqgaxp6c8ka0r5vfrghaln2pmeu67x4zpzzq3zcccf", - "bc1qhr5qw998er3rerm0lawlzzuuux6kja9zm4ryjls0aq5anprwuugs0yfcdg", - "bc1qhrgwkqetel4vpvj2azyyyhdvpg9u8j2dqz0svuwzh3vx4pvjf2dqtkt4uk", - "bc1qhrsvduw6j20dh4mseyf38zxqzd642zd6vmfjg9lmjj4d25qlvj5sv36ajm", - "bc1qhszm6vgtkhdn9cex8xurjkxjs2jhte0teetdnu4clr0ecxm20u5qhghyh9", - "bc1qj233g3tm9jejsnxvz3a06zqaqwwj2356f2n2sv572ggpahmmmxfqflfcx4", - "bc1qj390dgucrvx68jfad2wdpfhfuynvztgy9sy9a7009wmpecsdlu8q8zh0k4", - "bc1qj5dr2574mxgrxqxahymlvwna345d6d8424tyuqy3v2zhgu55j7fs2ezzq5", - "bc1qj9sat2haxfa7lsga96cxu26w9k4nr7z6sx4m33uzfq2x53sagcpqfzzjdz", - "bc1qjfmxg8fxqx286r254f3frzgra4sp4n5p2zczfsnrpkhdnyjyrhfqwul5wh", - "bc1qjnf3kfl592u85jlkvv99ms2qghv7yycrvg9902dtlh4lnfywg6wq5stn90", - "bc1qjnt2w6jx3ttx8dw0gt3nflm3ld0n2akkrkjzp73ua3kxzyhsj4jst848l6", - "bc1qjr7emlhxssap2npu5szrs5fa3cgxcnrd9gh9e3mdxzhdpye4puas7dp5pk", - "bc1qjsqyvnms83kvlnhc7r8phce0wj7j7nnvh8ye8ejxynke0uujwvksn2lely", - "bc1qjwjq6t60fwfsr7hf80yrhyy9lrvfjl2l9lpdwsw6sds4ph9uuglqjj53xx", - "bc1qk6ctvhc78eg80v989xmt7u5mwefewt728d9s0jxpgvqxa2m87xxsnu0wzw", - "bc1qk6n59st3mvj6ns0juv3vsdng48aszwdt7gyp0xlt8mrfn5qc9crsdx8dv8", - "bc1qkayh60m2uc86cere4z2gz03g2ayg2k726klqf0vx7lq588xzz0nqjvrg0q", - "bc1qkeh8sh6hzc49097j6fs8lgkfxpyas7wntelwnfqk4xhzccaj0nfq73s3f0", - "bc1qkjr6ew6d5nqf2vpxd7vm4w5lps72c8sxnc7hxnwcs9psqvpcmqkset3kdn", - "bc1qkka8ku2z79wq7wtkr44qmp6x3gftc9suju2q3ncw0xdy2nwj37jqu7hec8", - "bc1qkkhxgzvlvhymm2eprt0eukr3gw23zmarcuw087td9l34tmuprrysh643xt", - "bc1qkqap38eq4y8auh6z8yjwrj8r2p77n6xshcp8xpy2kkjcu7lhfyfqntsrjh", - "bc1qkrh06leyzgp84z0v495c0gr68tqn9ewue3lendpcrdz8htz0yw6q9aqyz3", - "bc1qktk40875p4gcafun6m2yzfxsrdt6d5h55c2zhd45wfefkusux27s38c764", - "bc1qku8s2753ttheldjrz5v4xmampnetjp3vy30m7j0nd3348e2m9rpq26l3ef", - "bc1qkvtt6kaw688mzu7txj9q3mn9m60pskv62gdz5j5kugd5fc7f8dfsdsfsq6", - "bc1qlftdm0w434ud5nz5ktnmak4gmr7k4x5qajmr5pvuh4vz9m4e8ljsujemsu", - "bc1qlk5g7mtuyxdy3txqz7q24yjffcdk6g6mr4ks48afv5234hly3hvslw8aje", - "bc1qllpem4drxvxu45r7aj7aqma50cylmaup07eynehs6v3f8zppcw2s00v3rt", - "bc1qln0rhtex8dwmqgex2mzkm47c437tunl6kw9amq7s4dye57fjk44s8x264n", - "bc1qlss2xnh3hsa78pedunw9qsm9nzpczrq90dtcp0sqknt3xkf5wyzsjtc662", - "bc1qlv8j6wgysv9xdpqtfau2lq5rcju0v4eyazrlawpgu8pwd2usz0dsfqc9up", - "bc1qlv8t6axsf50pe5wnt4x4xhqfudkumdvx3rc38f9kj3q82qhqy6lq626v47", - "bc1qm6hw09d24eqlz0x5r5txlpsrqvpf250fd5py3s4uwax6gwtdjfrq03yh9z", - "bc1qm72da6c6sq6a34rkwxk9sfpmy9kqea4dv33280hm5ghfdm4myvaqxnhcrw", - "bc1qm8z7nqmtmrurzcz82yec3sgk5rz67tm5rcaklqxajyxd348vppes86jvuz", - "bc1qmcvwrhj556capug3q5xzhwyhq82cps4l6ng0w573v6rl8zgkrlmqwh9386", - "bc1qmfzk56r5xvgfztej8fkg7rw76wy5qylh79shsaewpltfq4pz2qss5ajj7r", - "bc1qmhjm7sca3qwyujgfqtg3vw7swzxyg7mkxe4e7uzdef5ftc2kejwqjp7q7p", - "bc1qmj4g65rdqztaea7aqwnht5v2fhajmjat8j0q75nencrq2gu8q3ds5e0k5l", - "bc1qmr28gws3f589wmxf870mee4mapyzrv2209h3c992hhv3nn7ppctqhejqve", - "bc1qmschx4zu5yd9y82jqs6rwse3lftuzu97j9x76wdtx2avtee0g56qppefym", - "bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa", - "bc1qn55zpxs6fzjju36zuvkndzjfz0glhejtv299krn96sahl2pupthqhjc49k", - "bc1qneexyhzwx2g7ugw7m93kf48d6mdpt76gghmnr07s7dq7nhlwvc0shnryqd", - "bc1qnnx8uu6tuw5qlnqava2vjzrlsrwlaws7h6med4ndhtghrw8r5vcske26rv", - "bc1qntgp8cuk9sp2xadzc72h20qt372nvkjk5pmknvu9zntnf0yly5dqy7ev8j", - "bc1qnwa48yav84vzadrk79ulzrzu8s5epl7sfqelxufnpls63j7szx6s4n20hg", - "bc1qnwh5kqa6u5k2zevq0dfwn8z8mux4sz6t23g4xqeaf2lrd6zda75ssrs0gx", - "bc1qnx38lf4ds0lrw3s0l9fc745l0x3xdzw3w8stmxdvwu3v0n8jrcqsxm34ls", - "bc1qp798q5d3n8wsj3x345c7v65u9fwfe43e9vyupllmrrjq5k5n39rseze5vk", - "bc1qpa3ggjgfsr4cule3c42ns4y97k9z38whpx5940uw4mn6taeaaqjs97t28r", - "bc1qpcywcjgfel39zc762pmwayj9wu3v5xly0kjtdx2n2w0pandsce9q5rr54q", - "bc1qpr7fnnc9gan8vd9waym2rc2td24s72732wltnu9rc0yxhdssqaasr3up6s", - "bc1qpsftpydc86wxgga26r6nfq5tvrh5m34055kdrp25lulqu70shunskxflr3", - "bc1qptacp904tazvu54qxty5qunnwqhcm84ydrt39r9c4cqzkqrtju6qfd7eyt", - "bc1qpvwcac0hah03lepsvrx8zu9gdyvprfnckga4cfjg3ctaflwc4xvqp6hw3h", - "bc1qpwhmpvrau7f82hlh6es4wzedcq2rx5aqx5ue4ajsl4r7h29udx7q2ztulw", - "bc1qq5d4g9gcrwmwm8w965cwtkdgu60sl7fteahhtelzhna7rm29q0uswgca9t", - "bc1qq6jmww5tpr6t4cgl577d28cjr6mpxz85d6tkh7kjn2njkyd7flrqyt25yw", - "bc1qq77frdehk027ur54wzhhpg8dtqwpdn3emaxv42kxxlzmttrznzqs7mye34", - "bc1qq7m25904sfa4qn0na5gfssltjdmxwuvqxfl73dunza4s4cysqh7ssale4g", - "bc1qqea6940qjuhnuqqcu6u5ajeh3as8drwwwey56vxp90d05gzx72psw4ngua", - "bc1qqf4k7r66y3g3fpjlq6g46g5av5qgqvjpdhu6lhg68fwzm4rc4v0quux3vy", - "bc1qqfkncsw0gzr3vdyearnvt9w3ckuymet0v495dk5hwpfyjfeej42s28g3uz", - "bc1qqmsz5fe3dqcg7wxt3wc9s69td0yxnhlj97pvxknv8s25yuylawwsc99267", - "bc1qqsse9hgmx3w56c5suhkp2gqyxqhh6acc6wf0gnd7fjtp97f7c8esmhtj4x", - "bc1qqtmu9k5pakw4q4p242322x5tjy6tqtjj3u596nvksxjdhw789gfsmuskwz", - "bc1qqtyxkv77ce6s7hqw2ljg6axaxf4463q2krwne5vlxhhk3x7laasq3vqe5x", - "bc1qqx37qn2ca3gpjtuj5dkh8l6u4dh9sujn66f5gwe5maw7cvw47rmsej5kwl", - "bc1qqzq92mhj6a0v8kflqx6t0p3g47pdrqpv8f8gu7uk2a30kxxnplns4ez65a", - "bc1qr9kjw52l7m3nxhprgkt99nhrqtem5erzay6jy3j7xzyge65z3v2qse5xdw", - "bc1qra0g63370unwjrjpx4f267xss94zgxp78wqyc8gavqstnplakmfq0yq9f9", - "bc1qrg5y53hvpnu78pvy70v4s0qe52rnx3298gdvc7t9lsu2lya7deuql4a28j", - "bc1qrje4nstr7yy2qvmrfazlnjcsd3573fh6j9u58t446mn3ltp8e5vqgz8535", - "bc1qrjgp0ksa0wmhdfslzta0cem3s030jg3cxf7xfqtjcjy3jstj8wnsenhgs3", - "bc1qrmhgzejkazuezzduws22wuk6atlsxruytyh9ynx2855qpfezy5vskdznmv", - "bc1qrpcnmqxe8q4mq3n04qdy657wu23qxu8x5pvc0yx9adwz0x093gtsh5r2cv", - "bc1qrtyl2hpxu4lpl8x7fz6rlwvd43v6a9ynvqjf2mr7gegvnmdc0lxqas83mx", - "bc1qruqm8ef6lukm3kew536vxpys0nsrkdqqq7gn5eyjz6fsdee55frq9ksm66", - "bc1qrz3dctwmkkksya4n0cfhfdej480vx9shkt9vfe63qg0crmr3x68swt9jn8", - "bc1qs3w6eh4wqxphz769jlkglhdrmfaz4pj668aag2qrhcmrj74a02psr7mx0l", - "bc1qs6edu8cf7dtn2fq4earyhagryd3zsqvkdlaj285xptzjrq4szzkqz3fxze", - "bc1qsh9f8ackh9etwqjy6hd3vcqnc8wy9wnynsfypyv0p8nxesytkqeqtp7edq", - "bc1qsl92pxqza6xmw26xp6783slr46eh7wfdeyxnpyg0ammfcrc370esjrcfma", - "bc1qsmwlvh7v6wkg9kxtgh65q9lat00xx68g7nqycn8jdr5dudvqe8ksd4mxg7", - "bc1qsu0lfh6ae4pklru5cs6qscf9z88m4ckljlcxyqp5qfcvv5ygg40suzkygv", - "bc1qsvgk35j2tgq3anjydqlccunngrqur9pk3hdlfpgmd3kq69njaqmqdde6r0", - "bc1qswcfs3404reuplxzvmnxv23r82jzttw7ugm4gzwdwddpqa985mzs4ex3wv", - "bc1qsy0tanmqylsxjzpfecms96du4vp4tursfh9fyp4w0ff5aky7qe9sclj6f4", - "bc1qt5fugtlsp402yta0xvl79rlxc5epx9nd926f9dvct5r3uzuay5gqwyq55w", - "bc1qt5hqtxfktkuusrpcyus2zrc4x28hg23l35pushfmj0dsvmfrv2lq5vu9au", - "bc1qt8wuxew7ly35fvu2xaytmjvr6dlux5d05p9qahzw6h3axkc5p2ksla52xp", - "bc1qtahzsvs0hrt22dmdt3268hpdh9eh3rlxprac584x8l9s2df6jefq5nse9k", - "bc1qtcx3lve9uscxevqv0ekj2e75kjy6mqn0aedxq6xrtxv9td0jm7dsj7vtuu", - "bc1qthgusw4jxlw2e9h69r8hpv22df47dups2gmkzlgp7l8ww27eew6q7ewjvv", - "bc1qtjq2ypqq3kamya3dsfphy7mdqwp5nc4adaxan6mqdze59d7ptu3qc9ryth", - "bc1qtllzgt5hsxvnhga8tq3nars4d94c263q8dm8vakrq6r42648vhtqtyy36q", - "bc1qtr7kzsz669mfn8677ltxlm8c3t9nkzskj2v3lexx0kxhamzg7zxspkd8w9", - "bc1qttkf88qadw9mlvnfftw37gllk8q7m3jmfxrugath75rl3ydpt9zqlfjzzl", - "bc1qtuvqgvkjnq0gw4cc6p60yc3y6j7jzz937cs0wy6w09h5dyg36d0q8xsjlh", - "bc1qty4wtp9zhvtjuj7p36vf4avs98l4vata8634m3z4ys99t5qlhjwscslcg5", - "bc1qtyaqju2ar9x2v6c4jf42j9x9qzjcwev9u8uys524qnhznths37zq27ppfm", - "bc1qtym0jxefs7z9vr5y50gdsmtdfgcfyr9rxema6n23jw4cswulcu6qsj8t92", - "bc1qtzn5ktk3hhhgaweupzt9k6k9m00jws3xn5teplwupfy2ltl0xcjsl4g02l", - "bc1qu5pttfk0s407dtr7ds2e547ugq80ay4n82qpvwqzsvlccdjcp84qxpef24", - "bc1qu6jn53gw9t3j62lee0ht0p3dhtkycg24gj5kcp230jq6fn4jcsnsxjxn6h", - "bc1quezt5y4lqf37guytyf8jj56eywjvsanv7u8fq6q8p46hg02tc5vsyx3let", - "bc1qup8qwemtepa2wf4r8w599lphxq6f38s3ta8925eu7y8zvp4x6v2svqrfq2", - "bc1qv85ky08r24v3cnysh8hk9c5ftg60f2kwellmzpzlqnwfawgtdqesghlznz", - "bc1qvax0qf0zgycnwyd2cmgzsr65l6mldc7r3wm4876xg4u7rtywp2dsw034tt", - "bc1qvcwzkv448c9rz60fas5wqgnrl5gzvh0nnacyudqcsxhr0j9fa24s48m79n", - "bc1qvkn8eymy7c2rpw2c5x6x8td4hrul6vx79y4mtd4zzdxdrxwk9q2sv6rnn8", - "bc1qvu6u5tnjk22sggwkp2j3vlxle5mq9xz8v82g7j57k9ele02wjmkqz9vrvt", - "bc1qw0lsnwv0sga0n3rcpaxtjg4z6jhf0xu6dyhdv7jcx9d8gm4phtesr9vywe", - "bc1qw5ue35s2rms9wz2ajxu4h83uzaylax7jqwp3h3cxamj9j05dgw9q6nnr24", - "bc1qwu39fckqy2cl9z42994xyhg657q7txajwakf9sdzt4f3caluk3fqz3zl94", - "bc1qwx5sl8mls6hkmumjnekf6szuzh979cmgzsz8dqm3xeayrxfgz4us8m8y4z", - "bc1qwzy2ezy8zskmuu2v6y60w5uqe46qeql94may8fetnl9uyahlx0lsthg04q", - "bc1qx628pacq3m5px4zjjagrtpc8a6v3my5l06rxcrl5xr3vfv4s00cqcxmlhy", - "bc1qx6ws8f6p3zzevs0rf5kvu7e074snfmr8mms8ezgreg7kas84l7ssptyejn", - "bc1qx9yj7x4xmek7rm5styss3vcdth48p6uqzjdfsua9s7v430jq2r8q0j4kge", - "bc1qxaj93j90njr4lwrevjhg3zr2qyr0zerw0d8fxlxhep6c8uu4jqdqhlqptt", - "bc1qxpa34lagwsvq5t8ul09y2hz2dh0flkampx8lqyp3jdt4lpwaxx2qe2uvxj", - "bc1qxs6nw2cjmctjeqjk5lhr47uv6anmge3ut66gmuexcryrymusqt9s2tvz62", - "bc1qxuv7ge2hcfhzykp49g2pxz69p99d0aujx5wupud28tulftlc0agslcmuuf", - "bc1qxyx06rxxprx9plp009nvl0f0ft5e3af3tt53n7pctylafqfltwvqyk7sfg", - "bc1qy2av32x3tkfucu25dqfh4nqkf50ayng43ervl7fcwg4crcu3queqtlcrsa", - "bc1qy7efv6fkened6hnhzydmcd9eatj20dsnc4px2gtmkedc0xznlcxq6n04jv", - "bc1qy8hl8khkpcsnjqvgna6h8249x4at9vjern9meph0e5el4g0nudlq7kd773", - "bc1qy9f5q32h9rmem40nd06e4l8cxwqlttuale9s6q076aymt0dayx6qekhfmp", - "bc1qy9w004s6gek29k3npgmxq8huqx48l2gatx9yqlu0rchxzlnn7nlsn059c2", - "bc1qyr5df2mhp3lfjrd2sjx56eqm7netrtdtwengw657k7k6hnmyedlqwfx472", - "bc1qys46dh5q94lykgqrvthhh52ajsk7s4c5ex7p9t7tvqe3uxheq2us3rwra2", - "bc1qywh2j5t52zhqhvlqymsw78mq9lfrh4utf47ufhfpkgfzj3trqaaswuak4h", - "bc1qz2fe23n5ykggw9394gxly6jqxk23rmhxesvd7q9d3sfee6cqmycqha09qg", - "bc1qzchnul757l7q2yrhtv2gga3h560vfjdj002xcstcd5cvspa3puks4h7gu5", - "bc1qzdah777dzr46n8wwdmr2y8etxzt0e66j90v4f9m2dj2wzjk3mtgqhamaj5", - "bc1qze2smuhn3k3yxq49fzsmz4pfjemnhpsjt5g3xc8slyh42edy23zsxjsr73", - "bc1qzk3kkegykpk0uzyekqfyr4l4ky62hx7tt9cx4r5klv98x3f37z0sr26gaf", - "bc1qzlhsk5ftpz6uaxgmm8hel59v7avmn0q8wp9gaaxdzzkde7ryumeqdnte02", - "bc1qzm3t8m5fcnz8t22kf2lyr97u2wret0pkjvzngldnqq5su434tsrqxjncvj", +"31oMgrBjhbAr1ZZjFUFYfDT1ZYvx3Qp9qL", +"31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", +"31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", +"31sADuWnUApAxzXJZTaEziCn9DhZVUajwK", +"31sW8NHLr9MELRdoGPWrEk6wBd1pj2uzkB", +"31x6dwHmXYHqd7YiwvJNPX8ryvDj8Cdht1", +"32Cav9GPxma3wRprn2FtPQ7gxmCZ8ZEmzv", +"32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", +"32Ver3t9feJgByfNLF8pggtNFPMf22iC3Q", +"32fN3YjNhtAzUjBHfTVFtiPBFPgy1MkBAC", +"32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", +"32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", +"32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", +"32m8wzKabRRF7o6JRXN1srLSA5FzND769o", +'32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8', +'32okkzumvdoocdjN18SzbnTTNd2omQvvt3', +'337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ', +'33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ', +'33PbQFD2eAouKnKVTBvZTFWE2pRzLgJdro', +'33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb', +'33epzdB4nk3FWHtUpHMQrzTWxiehSti11v', +'33gNdUGQTBT7cUbNx4892keGA2L64ixrfJ', +'33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8', +'33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8', +'343uVxqsriiveWxekC6s3mNaERzsbfke3h', +'34CyVpeNgNNEoBdEoSSH6aTjrUZDavaUtr', +'34MPipmU3suumfX7WxTUTxmLX2uVK1Np8R', +'34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q', +'34Qg9U75RNPqAmZzF2amJ1XNGQyVek7HkQ', +'34whRPeeSYTPcihybfXmkG2uoShUdT3d2d', +'3573rMHLB3VABY7VaXMWhRoCBVspLGC4xV', +'35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e', +'35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB', +'35LMppVy98ofPKeUXUk79FUSkVC8yiXHUF', +'35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59', +'35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR', +'35bXvntqjj5LnEpRVqU9bLcAPtT9crggYj', +'35cv1mcZBJkvkjY2KQSdmbo7Mq7E2yEVZD', +'35dn2Sfsi9qmqZke8SfSVcaggED9uJYQhn', +'35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6', +'36RYMHxKrvNvrFcovZVXEQWC11LLbPE56V', +'36U3VfLRN9kbQQXRGwP5SGUYebSB3MqVnp', +'36ZsF5YgJDW25eZKS6gnZMqW4gr6wv9xp1', +'36h9DtMdqYWTxSg1yys2exZPFQoQXv8QRL', +'36jGhq48YgvjJWtEpqrc57QzXcBJQyCsS7', +'36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE', +'36m2gCFRpkikK6AXUQGKLabKmd8PMjwx1Z', +'371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd', +'37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz', +'37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi', +'37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh', +'37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx', +'37kFT7mcJqgkqKbd66VbgkHSQgnys2V7hp', +'38EovPeRhGniW3cpYLJwptCqJkx9Y1Pg7G', +'38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv', +'38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD', +'38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm', +'38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF', +'39P2pJ9EmN3qmPAm1TTZPzp6T5LSsJq3eQ', +'39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ', +'39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm', +'39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE', +'39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c', +'39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2', +'39ydxDT3H6KygeXQn8f1tYXk6BtCTrsutw', +'3A25qkpmhCrYGEZh39wc71u89dSXGCYSvd', +'3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit', +'3A37hJV9JPWR4UMCXC3QvKSeVGiRwgGtiU', +'3AKea5UYSyMc2oRRdQYhkn57nXWMm5woDz', +'3APCmmVbkpKSmLkTbGUvdPUyfqA4CZ25a4', +'3ARRJS9VNVkMdiESpxq2AGfpZUQRUvdGgd', +'3AdKaaTBFPQgpFen9YERPmrfV7QVvkYQfp', +'3AfJyKGXVBUcaWdyJeWxsasq1dHPw8pRZz', +'3Agd6vor95XcHvf1MPKE69KEpNbZTKD6JF', +'3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm', +'3BCWh8prqQDsZDi6Pmvut9HJrhii1Vk7Ak', +'3BCm2gVB29QDFLWt768jjTwKoe1N1QVwSU', +'3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T', +'3BPbdokvatbZEFJHuVUstG9zeSDLr5RdvL', +'3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA', +'3CDy1xZavmpd27jV6TZm5teH8U6hrdXRES', +'3CPEGQzA227hHR2jUf66MdgBJ5wPnDdaW9', +'3CQBneh4TJtHGUP4QS3mfJc75NoiGgKwV3', +'3CdzzKFGY7ZahrMCM1tBgoxrgSPUWX4RVY', +'3Cr3vRcZD5q4XbXCVTo8sFCN9Xb7z5isth', +'3CrWGaRncSudU3EZPEhvWqeU2PG1xutr5x', +'3CuoRMhRXvsxdYsNL4kmKDJyAhaDB7SmBn', +'3CxK8MVHuqXW85z4MF7A4FYk8k6jKPFgPW', +'3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb', +'3DJNy9xMcMsNdmdipTgqME3TJCRkv7uS2g', +'3DhbEcm1SuJjTRxZBXxHyceYGm7GdRB2pM', +'3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4', +'3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd', +'3EedqW1fD4QRFmrPgkZZZvzHRzj9f4xVSX', +'3EmKqHZhXic3TymhuY8NLS7Bdk91erm4V7', +'3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2', +'3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1', +'3EuEvwodW88xEuwecsLb76x16tLxcUZAxx', +'3FDtvkk7hpZq5GuEJxt3Ps95vjtdDEfJ4T', +'3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT', +'3FHRnMSaGMAaLcoHbA5EVcEuYVxTEZdTyp', +'3FKkCxSZe1c4xZiVyJVBTbvzs9Lj1snqVC', +'3FVsTChmR7WYgfnU3CAmrrD3kqmaRMaJCC', +'3GE2pWumzKXnNMA9PFggsBwyk7NYSJvGGg', +'3GTk9xdRHnPQ61Pm7Jnv2Z8hsXv5FMVyeY', +'3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm', +'3HGSCuXjnfEncUCPQ4GzNrv3BHcmLZFdeT', +'3HHLh4HSK8wj1w3YW9i4Chdnuybgadhpz1', +'3HM8YGKhwwnZKmrUEoGroEgaG3dv8xkVZz', +'3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH', +'3HaHcbNmhJKgJ3dtbm2tg8XH87BJkRx7QE', +'3HauLvRoUBueiiLwebk19w6rnUTYJkdwNW', +'3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy', +'3HpHptRrwK5x9i7uULvk116QhsAnRJfJb8', +'3HziaqLNy8PpyQFLdwr2yxCjwEjRUjN6Eg', +'3J37HnDBzWN1sm65mbD9U5zvKrp2bzhuYJ', +'3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU', +'3JMDjCYxxi5MF3aXRx8Dg13Rign3masTXj', +'3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t', +'3Jj1juATP11jHfBvRiu3BbzdJCNeRskqzJ', +'3JqwUY7pUwEWu2hz6mwzZKSQnvKyRRXCQM', +'3JvmhjuxvLVM8NQzAwwMvzWAK6zDLQ5Aor', +'3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5', +'3K43ux5cCAxfKgymq5eHnHS1toC9nrERbT', +'3KAGrSyTsKLckBgN7AiAfojbScfjGAHwFz', +'3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s', +'3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth', +'3KWe9k7TG2j7xNw8BP9YHXBeHy1knC1xGS', +'3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7', +'3KeG7RzDwGaTywRfQgPCQaeyMgi7C89eQc', +'3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse', +'3Kx4doXvL4UhDrKJqn8FoS5wVU3VeS9ebM', +'3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT', +'3LbLR4uiq7RFrWgDKHfdgktAC88qtwY2Li', +'3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq', +'3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1', +'3MLH54DXCtmydRocRZz9pEkfTTGWribBa3', +'3MM2BiaXBACfKUtVsyNr2RDXyNEhunez6v', +"3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", +"3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", +"3MkzCjZjodyaBXz7W8i9NTjduEdykdkd89", +"3MnCLWSq31hetgbVA1Xn1VxVVb31SPeSKa", +'3Muz5dT5EguQgTiXgQ1eqJYNkjjQuSMgsb', +"3MwfxJqsy943oqYhbdKiaBrFSK9xbyiAi9", +"3MzRi499Cbcr4795iRnznfC97EFji23h7n", +"3NW5tDLFceDb1a75QkGampkuuceZ3YPMUX", +"3NfBFZRgKfHVJy7rSTutZyGpa5M2GpRdwu", +"3NmVi1xVYZj5YXU8wcQyoUfcVRCLcYhqqQ", +"3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", +"3P4EDeK5fxCLEQzM7iQ7n95DWgG1cXSaqG", +"3PRCCQMdWwjEKy89iVdL8LouknsgygwWpL", +"3PRHbh8ajUXv5wPD11CxFRs1hWBo8vR3zW", +"3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", +"3PkGNCt85M3aNQkBqiT5Psgmz8FjNujEKK", +"3PnoF45bZhJcPKGLf4nQzyQVAEFsxBxQQa", +"3PxV5m54ZwMDheUyFecvRVQHJK7WG1t49V", +"3Py2iN5SEwSCtT5QHkDU1qhbvmdmMZ8cpK", +"3PyK2LYBfYMUXsa8sMhTSHQZ8StQy3Xoz8", +"3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", +"3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", +"3QbVP6bTSXN2tXG66MTKtHtiJ1coKXnrjP", +"3QdyHj1i4y5CywEFWJ5PwoqGzDxGyJGPeb", +"3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", +"3QmVyCw6YnEvt1jXLeF5863uHPLRaKhWs5", +'bc1q02kjkf8gp628thqdfrm54tay5pjw05w297d6p6ez5andhp9gf0nqjaa2e4', +'bc1q02py7892mlqafaz9wevclp8ve4dl4z6hy4sqp973sz2u4fvpxnmqnzfc2f', +'bc1q09z8m23n7w7gtqsxpgwun0zvra9jwzf4z9c48cezq36q3zvmsuyqdmyjkn', +'bc1q0vac8d7jkyds2ux4jqwu6mu943z8keyxq4twaw8p8md8j8rtj94s9wrrl8', +'bc1q20yv979atkvtmecs5kj88a0pmf85ht500pmp7p2ztd54tz0u60psj7c702', +'bc1q26ds9juuyjtsek5czqasrvmptf46xan2hfyx88jqzpz2pzly3p6qrwd6e6', +'bc1q2az30y4lst2x9wlu77kzzdym8n9qr77n0kqmevs4ahf7dmzw624sck5vm5', +'bc1q2ssdu5v40zmntqc76kaxw0xf67eathhpg59xczh9vpp2qlf3mdrsgr49s8', +'bc1q2vlwakkk247pnppptdv3kgxj23yptykyd3ge9vvlk2w8h98v7pysmmknxv', +'bc1q2wyzh5ex2cr7wcth0zsm7ueycg2rkfw28fy2g6axky6r9su9zcls8qngt2', +'bc1q32phcv5dhwkw59xljxsz2nw8g4he4ssduw7c6d3d6005skfy9gysa6crgk', +'bc1q35fxxu53qsmv77cjt6ucdj5wu4r8rae8eakq5j5v8nzgjtcmnpvqp6g3sf', +'bc1q3aqsr7dsajmslelacclkgmmyhd7t6hkeevpw50f5areathvfmwnq4nwt3y', +'bc1q3cpmjfcfkh8t47q99y5wgwxzvhsw8lywzgvnvnlrlwe6h8xcqw7qjwf646', +'bc1q3cpz06gvfatn0rgamwk7lws7c7qyt4napdr6h7fsj54zg2fy9wtsahl7xt', +'bc1q3eff85qd4rhuu8gvn933fvtzg0ys3y5amchq8wzhhylhqvfh8kxsu4kde7', +'bc1q3l6qerg2gyzxpuk0mmhswkgedrqcqe3eesyhatwauyv980syulfspttjcs', +'bc1q3qw5de93m5ukxra5md872kjyl29arplm8c4vrh9jggsxp88kk2zs74u39g', +'bc1q3uzg46kmqexn04rkhsd74t34225tqv88xp3jglr2hpxxu5ujrwyq9amgrx', +'bc1q424nhx6tpljt65aren3q5hmsx4dwt22g9574lpjnlvtc309gtkhqdtwcss', +'bc1q47vlc3v9vfqh2sr8f47ukaws408wcr95r27t26y9qxgc72yzg9hs58yzek', +'bc1q4agva2hg94cdr7xdeg4e7wekq0vkrqggn4kqruns85e69xtx750s7dc2hy', +'bc1q4ma898qglhvqsjs725emwtmayr0pwj9nmgguqac44styjpjc04ws8hwp7k', +'bc1q4nalse7wwqe6sx3slmkyywetlzn3tdud77jesadx02v885qjs74spqtg5w', +'bc1q4xmshjnx7up2940zld0dls42jnec86drca3ph7cjhtsdlfgq3ycsntpvpw', +'bc1q5anhs0xpsayee84r5yqazljkfn9k92d6dkjfpyq509sfmsdkhfts2vh8l8', +'bc1q5d93mqzlntc95687tq2un302rnfa6vnlnche7pdxzuypyl2cewnsqrzxc2', +'bc1q5nzdfhdjv6dh5r2pgdmtxhvkan8stl2h7zrhth908slszrzu2snqm3ds3q', +'bc1q5qv0gtcfdumqrf9fjhd82uud7whpsam7j9e2dq3k9jy3mj2rm3aq8yj3u9', +'bc1q5rxwzkcl9hux2ltuppg5jl4c4ld52l3hk7kq8g6qqnjluk6kq5xqp5dpzd', +'bc1q68r3tjqwch4q5nyqf03a3n3ugcef75klsmqfa4g72k63npwn59hqj2d6hh', +'bc1q6aw25ef99245cxc4l9m5nvn5fel6tmrze3nfxtstv08yf5jkdvfs5rrajc', +'bc1q6xdt8tmlp5p6exvsmuf62yswm4vnk0rmm950sdhlqgyxluahv3qqquz3uh', +'bc1q6z0cm8gzhxz87e5xdlvkpnldj9zspustx7hedll73zg4n0hqemhsrm4d8l', +'bc1q7awsmqawsstwlxtt48lt6y2hv2qjsju85jgz07yr4hhdcu5df0sqwxc63z', +'bc1q7h0eyvjp58p5wz563p04lhjt2nef9q089mcdchr9jzz74lq5wzusqckmj2', +'bc1q7trechgv0g6kgwdcu3wsxkqn9lrc6edzdgvdvpt9a9rg04l7gtvs26hps3', +'bc1q866pgqwgxvuqvqmkmcfh8n52dtgz3fv3nh5cq3mufqv0ssz8q93qc2eadh', +'bc1q86aapgzcr7078499tlhp4aatylujug9d2rxwccaekmjgv8j6f93qljjhx6', +'bc1q89mxkg0dhr3m6vs2gzr3wqccwpzrmnpsldnjc22ztldhqueawtzsq82ydf', +'bc1q8nr29r27mlkvj0duseshuw5vueywt4640tyrt9jusrk0c9kz2klqg4n66l', +'bc1q8qlz3znvuq0mk62j0dld5hj3a5uf2y06tcuvtz2x3gffs6gxejnsx2hfk7', +'bc1q8sw5c5sx3s0r5tujaq6hahnjq88yvrdhepss7qdfaz5evjux6nls63mnuw', +'bc1q8xamcp8xc3rdh4vqtexgrqfmwlkw0mkruz3gkwaw027erjsrnd0see34cc', +'bc1q8znctxhsh6knhp07z7ufw8zusucef9vxq7rjrhgf0wecxl7aqcrqz06gmu', +'bc1q93hcme2prs7upr9zkdakl85jje3leg8g2qf70kstacjuyzy95xkq7h35ft', +'bc1q99gvfs8e2fsd8zw74wdg4fmfg46n2uf5pjlpt87h93qar044rspsxwck6k', +'bc1q9eammdvuqyhswd3wqp84d56ah0hyuus62smarhsdw3l3rycjgrhqsskvuq', +'bc1q9j8l760q75cep90p9gq6dsj3p9d55ewpwkhcmw8dnzcd7tmfg03sc0vmqh', +'bc1q9xlm3uydvuu3nn8dan0zqyr7e6p3pjh7gxnw7jyv0tujl44dgt6sedtus3', +'bc1qagrn5sn73azr85navkf0ukh336qvktfunejkzauu9adsuvfvpklq6qut3m', +'bc1qasluf865jx838k9nad2r2rnp04w3txqtyu7kapuxrv0m7rv90sxqhvjxuv', +'bc1qc342v9mt8j354pjyaqkweu9nrztcj6cc8udgyezk7dxhjddjcn8q7w9fuc', +'bc1qc46r9xy82z23s6q9lglhzf60fdxxq5y26x34kdx7dx8549mdtu4slym95w', +'bc1qcd7jv45swrxgwlj55gfnlxf3tvsm4ek0yer4xac5a909jtxzrgvqyv5v0p', +'bc1qd7dd9qc0pehqx5a2arlpmlgh30xpfufx9hpf2kfrnpqz2x7jl0xqpmcru6', +'bc1qd8wk5eesxtynkrjx42temma0spfy0955tr5e5lp267aqhalvpjwq79l4yh', +'bc1qdj65qknp4cnvxagp0pqnjl3g7d3s8gzxqzrrlh6gutju0ytdfwmsfeetdt', +'bc1qdt0gu9n7ykyvyhe4v7cmftugsn5qw59rm4tdxn4f8vxs6s694n8qp9u2az', +'bc1qe46f05uenszej6hvzmxjw8fxyskc6utv4cueeaa77jjea87vjh7ql8wgd5', +'bc1qe4we3wxhj4f0wy40ftfxfvawmt4hgkgvtmpnn3lv5wme8yzfrltsckhg9g', +'bc1qer4qvha5nxz09qn7gt7xntvrz2crnaxrd7ju4nmcjm7r9uerc9xqa9gdxd', +'bc1qesmtfxs4n4ws86242uqpztseyh7l5tgswd0zce5nggaky44t9c4sfwczj2', +'bc1qetecvjtaya283z7zk9lftqtv03ajx27ekz6uxjpscpap7crkvgmst355jn', +'bc1qeuz6l0qusf9pd923v8w086j8umn765a7hqvu4su0dfq90ckym47qhvaux3', +'bc1qezmmhc5k7ccnc6q7l8dhkg9phcnehysq2y3ahdzzcweph5ang9xs0egasc', +'bc1qf5p8wp6neu0raugt6t7zhm6vjhy3taf8q7rqwuhgdmdnhvpz2c7s8xtrtx', +'bc1qfcxzh8ag5pv37qywg8wylherg64k7skz0qm0ghc36x7awrd8xszsfxc4k3', +'bc1qfenuya7nskcjlyxpg0gttrjap9e5gtncxga0vvl8rekyeup55n0slzlhr8', +'bc1qfeuww8le80ae7qat3kpzspsh7pa8na3qx9fuc4qpdt3w5q3dkavsc02wk4', +'bc1qfn70w8peuvvywupd8u667g832necv3w6sqellzvd7aaj8l52nhhsfzs6a4', +'bc1qfpwewuyg8erj2cejamms0682v7ncgdgufdq8efa0maef3uzunkgsvdwyzm', +'bc1qfugah0e9fw9ze34dpqf22yxqxnxh49wrcq9d3kuqc9dydfhn4pjsjqfpky', +'bc1qg0amsvtlglecc6x46rzjprjh7wscjzlgqu6n52zw9nz0cck2r5sqwew946', +'bc1qg54vzuplejd6ymxlma6q7rfyc9zqqes8wvz4xs09mhpclak9z73sf3x3km', +'bc1qgs30czhkxhxn5qsunlzac0xeznyaxg267p5t8gjupzg7u97vz4zqyuf60l', +'bc1qgsgj3dh8dztq05v9dzethjcpjqtptm5tsrruprz4w7awzpfrku8qjjegyc', +'bc1qgxww03juwr8vfp28tzpmyyku3j6hxrgpl0v6natkk2ucwu4weweskcqvnl', +'bc1qh4r87gzpcx3lz7faz349yvp8yr6zyr2706m2xzsuwcwlptkqsj6svkaqtf', +'bc1qhagykgzhhh7yt5knsypklpqsgdelrvw5vz73erujapcgh3x5wxrq8c0y9x', +'bc1qhgfkccy09hr7hlky0jeyz89afan8qh66wa26t4se4mlqda6298hqrtk5zr', +'bc1qhkw43w4cvzec3836hqrdmxksm20l35yk7gnvysqprd6gareztfsq4uplfs', +'bc1qhm46vtwep0awkdphurmc2ku3lfp8l7z9f6wn9va42lc3z24zd2fsvnvzk3', +'bc1qhpnmnswf8ls2q97vg4qzlr2a6c2xpr46zp59e7q9uh5j59ask2ysld0euq', +'bc1qj2dz58v8etgq3aud24yrgffk73d9cue80kfswl58d5w4vvhdfsyskxtll5', +'bc1qj38tl824hkgl7qluy32lklp6qfd9d9zqa9qlyeh28khfh9grxwastu3xnw', +'bc1qj8vt7h7ufrgqlhhcu22vl3jrvx3kluml57kha352k9fex23jphvsuwme6r', +'bc1qjgua88vymvkctq9t4mcd4q4mlqnr3r07lylp90f7epc9p6qcv6asteyjec', +'bc1qjpgs63vqgfkalm8janwmelw4mr4wg50axnmx5ueh4ru2xnl3lg7q80yl32', +'bc1qk8plwr04uu6mvpcf3wtfmg579ztqn59q7yfx39drl9r97q4wcx2q43rvw3', +'bc1qk9fhnvv7a0nxzxxj503v7mfy3uwdugymj09ugkrda5895cfxa5vsnzp8l5', +'bc1qkd53jhtmhwv74x2c8hnnfzspatcjdzk0h3f2czqzrav0yxpd5y4szkslrs', +'bc1qkn3s4hzjthfmt68sk30m69knjauwphsha2paqzexjjmlfc6h7f3sggfn52', +'bc1qksptar8mpay2mfwzwep3aqxevnc8jj8d4rd82v3v0hm5p3y93w2q5eufa8', +'bc1ql26wgacxjhuefzcph2wpsyftqzd07kzkczv60d85hj7280qkrz2qlgrhf7', +'bc1ql33nnw3ngcf343jtmzpe8ps8809nqe0530rv6neu7cefkz6dtcfqn3wzav', +'bc1qlg2gcz8hzfdt49jgs0438c7ahg4967nfkflzj3m0r5dz3xz7njrqpxxj2j', +'bc1qlnz5vejmvv6sdy9k3c7a07nlf6c053g0ren0m8kmmsrx677nyllsg6qr2m', +'bc1qltg30ayn5wexka07ta2x5dnfjf20rqnemf4sfnsase082yfqetfq0s20hv', +'bc1qmfjm5hlgjfw3tc6cz77nzjcc5xg5mjhrlm6kqewczapae2yhucrs5c0qvf', +'bc1qmfwcwfntr2adas7yz5l3wn6pnm8rj55l8fk5vgny34wld6d0vfcsg48tta', +'bc1qmfwq5cjm55m0kcfemjyv6rj8nfunslfjtuhyqawksw892dhvu6wscem2t5', +'bc1qmmdfeczme4q99ccpmgfx3zxwwwff9nnjhdux47hucwttrjdpqj9s2x8rds', +'bc1qmur9p99tzxtrq0232tl6nssyejrmwet3m265xg0cgl7uh2qxsy7q0m8fvu', +'bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa', +'bc1qn8w83eglpp7xdtgyjaysgrve5cjjr2yfhsq2x5xyn6cmvup0uwlsq2t5xl', +'bc1qnpnpcn4gwssvkjpe27zzfex2t997l7garmc2s8fenmk0fpydek2s6zp9yz', +'bc1qp24kgu3r5n3q6k03230yj6dzr4styppjlvtr3ptdsd7sxql8pcgqwall05', +'bc1qp27x9j8damzuxc0x7cqkcaf39q4825aafmx3g6mlvh2wd5tzr8kscsjplw', +'bc1qp6cmqa7hgdean0z8jl7uf20rzf7wgvstmjlxekft3l2vn22zwl2qhunr3h', +'bc1qparrejjdyc8hcd7hgljlx53wy7ncrjkaz670w3ef0ade369y22eqkujzy0', +'bc1qpdthtpfcmju642wq4eqxl4uz5hfgtztvtv7u6wrdepnkdsugueusujpg76', +'bc1qpp5wu443kdfur2vhzwms8d46gq8c2vgu692sgyn79z56gkq4mkvs07gjkd', +'bc1qpvvt2md0t7435mc8dmlgd5euyc0636vlw8ew25e8pf83uc68km5qpvqpfx', +'bc1qpwtgr4rld3wr39r762ngvuk8qgvgkrrxra4jdnmn06z4nfgh4vtsluyd3t', +'bc1qq3p9mqvegpadextyqzxy46ukf5yxc7ej50ksq3w63f895q0t8rzsfe5jym', +'bc1qqces3upduq6e0c2w0k6mr9n4tkgvzkggteuatqc4eyxawwkuxzpsfgdxzh', +'bc1qqjmfwnxrjx0khaxf8qa6ccnz7s94k9wa8lelpdy2fn6jf9ffks8s5r4frd', +'bc1qqlm6edz9azp0d6y4mjc8j8an4q8du2jajgwj65mmz6nkk53yannqvtnvnn', +'bc1qqlus6fyt05kewddukpge8u0lszp4ffn49mqnr3pvrh2whptf2fhsy6ynmn', +'bc1qqvf7qq7wvx6pkp5aqvzdxs0rgqkjgqe7ev63hnppxq05t6v3w5ysskzjs5', +'bc1qr20qujcyr87y3uk2fgkq93u0jtzl6wa4el90we4txgcwgx6avxzsuj0wcx', +'bc1qr6cvgewvlts5f9wa8u3cpnlmth0mzn0x96ap34hknpaayuyknrlssqfq3n', +'bc1qrm7nze8cqyazdlhmw8ffeusxucqtvyw3pvtple0047tdkupdnmustkla3w', +'bc1qrsayv4jq9uf6rpmwsxan3yqxuqtyelwt7k8298ejl8h9tkrunthspnlm6y', +'bc1qs0q2svqpeaka6f8jakx74j4rydxdmxq4wz7xfy45m6t8xfxzy0zsckrym5', +'bc1qs48aaups6tzwcs372yqhakcjakfgf6w6aguj0w7gex75vrnjegmsp5hx8n', +'bc1qsgthnvghgs9wl87kzhkx9xda4xyu35cxfteupjnvxv3zuvgtdyzs9a23te', +'bc1qsln2s8xu7sv84wj5sv2pjnfpev8lkcqpzmzukmygcll26vf0kwfs6awzkj', +'bc1qsp7twu469a8p3enevzwdnjhrcmtmc7ljydqxxp4p69u4ggj9wazqa9gsgw', +'bc1qsrms3khzhupjxph0u2sy6sz8c9q4g6nqm3dy53nrlagw3lc5zmsstg8pft', +'bc1qsuzvly8z6kr080at2twdlfs8j87gu08kmwlfstafm2lajdvfclyqtvq00a', +'bc1qsva32zdzx7cd9996qdlxkpl0dnyk4s44myx53zpetf4u7rfg89fswjzza5', +'bc1qsw4hj3dvqcvtntvsflx8474f52nt6zer5k9pyem6n6g27p8nc4xsrj5fxc', +'bc1qszmwz85wktn6k7tg953pugtedmssguaavl8qukv77s5u0g5mx3tsmw6pg4', +'bc1qt3mw55ccejx97tyjdl9dhe60wvextxddg8udxz9n8q8efwhr37wseag63j', +'bc1qt4ck5563ra7r3xjqlfqm7au407q2dmc0p6wvgyzy239nyyn4vsesfwwsa2', +'bc1qteyfers4wvfhp6apw4s720tzvp9xafkvvfh7k0sxmu8vrxvt2m5snw45v8', +'bc1qu4g30hr7lz3qd9jn68x4f2ycl3s533jdtv96g5n96d40kac5l5tshhkvq5', +'bc1qu5k2h4y9cynds4j3t5d94xg78zpzhx3elk6w93e28xmxrnn37wuql9xf4t', +'bc1quljnxvuryumd7c44u7f8dwflas5aghecg8ln029v2s7ffezun86qn0wyng', +'bc1quryt5u9j5rec96c4h6xxatn74nqcen244q3dtgwtpjkma36vvrmq9mjecg', +'bc1quxy0mlwssdmzsxgk2ct42p09ef7mc9qwmpdjuzy9f3h3ye2k6jzsvmmrsh', +'bc1quywrhxx6t7mkqshcll3q99qrqlal73l668wldgrcxpa4yvuj2x3qrhsg9m', +'bc1quzwyq3wewr74vvgwa6nqfj6n6rsc2tsh046glq0n76x9alcpgmzsf24s6x', +'bc1qv0u3a7jdaygq680cu52puk4xrrr4ckpjqqgg88x66cmfnrfj5c4sre60e9', +'bc1qv837fuujjlu50z3l6y48vxkv4vd09vve58t92welmxy9lnu5l2usp6hd0j', +'bc1qva8lqtdcemj9swc6trk4je45xzckqhs3fthst2hy0k3plywfeq5s639wn0', +'bc1qvfmnrg59p8a3csj032uyzl3mdtv5y46g3mx33krz5kweyvq78f5swvdmna', +'bc1qvqaqr0jyxf3nphux7gla78dqa9psfpyy0v8med9t63f0x6n2k40s7knecs', +'bc1qvtckv82yw4efeu9ez8y37rne5ghzxeqjl3cqnsyxf4gm3zhuhc8swt5u3h', +'bc1qwdgyle9p2gcvyn22sg2tg6jaqkxewjz5xfj229p989dcteu42adqnau2lw', +'bc1qwfeq7rehmzm5434vaa485s98788cmyyrac2w65nulvucsg7cueesly7x05', +'bc1qwfydpavg240d4j87nrg0ayqhfzwrt9revzw7a9dpyxujnlpu2xus07f6ud', +'bc1qwvrrxxqhc6l9zd8rwj39sl8n39v69tju9sfc59dqxl3fjx8jnfqswzs93f', +'bc1qwwkwppejx79uszdgfrpaaqc24wepvjy729xhx2zyd3qyf3ftfqrs672m9d', +'bc1qx8xlxd6qnmqprgjs6yr4nd870tt4d8yuupwq4qhl3hh24ulpmk4qem46px', +'bc1qxfkxl66ee59xpxr30tcexvh9zgtvf7gwtyauj29n6txj7c7a9e9quhcaaz', +'bc1qxlj7ls9zptgj779w0gzfvt8chpl29xdcv5qjqdw7g462uf0c90wsvkw74y', +'bc1qxnxp0qdzx07jw3tskcp79xzs7p6p2wpwx4sn7myrx8vgj42f4prsrlcknw', +'bc1qxqnj2gdznm37yhdw679nx6rqs44hkd2lddj2gn4uyaa5htmjvmzsyjcu7d', +'bc1qxtf7mx5scgetaaz30w6ngndq8xctegjacvphz2tgky5r9et0q5uqwyks8t', +'bc1qxu9s6qy6hld9uvd75em9t550q7ppezsmkheldsyny0pzj9yd7e6sqg3qv6', +'bc1qy30syv0sqafmkt2m4h6lf9tjeddurh9cypa9p8wras2hfjf4y4uqzdz5sk', +'bc1qy6tfy7k9cjp40m2lcq2s8wrsn88jdn3ffj5ph7uvwxuamfntaylqk38dwp', +'bc1qyc4v5dtapyta9mcu5n5t9va72rzd9g75z83qxxm90ne4vzhgleeqf9lcfl', +'bc1qyd5989kz0jgayxelnz7wlnnk5gyn36v7cecjrkgvph4260aew2rsqzx3ua', +'bc1qyujyd6q7dtnh76wchgavwgxpklkwm73vqllududlx2uunx28zdhsxnvd47', +'bc1qyvpmf6uv8xgxrvcwc5w630d4vg2s9ztpd64fe0e9ylxtuy34e4lqnmv3sq', +'bc1qzck7505r8ahwq9g4xuwr60lpflxv5h75y0jntgasd0t9g7psvmqsr902f8', +'bc1qzgw25sgrn45909quqlydd9729ksj32mfcvwzl44ekf2kkgctz09qvr779j', +'bc1qzha6dcp9mq8ne7s3cxgp052qzux3jg25fp7cxpshrz0a0005h3gs30vqpf', +'bc1qzk7gnzhyqcl9x7f52lckdhlznv94k87gpm3fsafvn487euaymmasz95cwa', +'bc1qztewvcfe424fxat7s2uautmy5ctnsnurul474e2emexfnlj6upsqem0g8d', + ]; async function tvl(api){ From 6f851bddda3c69e3cc0cfc9d1f44a1d6ef4e5a22 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:07:02 +0200 Subject: [PATCH 0611/1768] track hyperdrive #11859 --- projects/hyperdrive/index.js | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 projects/hyperdrive/index.js diff --git a/projects/hyperdrive/index.js b/projects/hyperdrive/index.js new file mode 100644 index 0000000000..6986d20153 --- /dev/null +++ b/projects/hyperdrive/index.js @@ -0,0 +1,57 @@ +const ethers = require("ethers") +const { nullAddress } = require('../helper/unwrapLPs') + +const FUTURE_REGISTRY_ADDRESS = "0x6668310631Ad5a5ac92dC9549353a5BaaE16C666" +const GET_POOL_CONFIG_ABI = "function getPoolConfig() view returns (tuple(address baseToken, address vaultSharesToken, address linkerFactory, bytes32 linkerCodeHash, uint256 initialVaultSharePrice, uint256 minimumShareReserves, uint256 minimumTransactionAmount, uint256 circuitBreakerDelta, uint256 positionDuration, uint256 checkpointDuration, uint256 timeStretch, address governance, address feeCollector, address sweepCollector, address checkpointRewarder, tuple(uint256 curve, uint256 flat, uint256 governanceLP, uint256 governanceZombie) fees))"; +const POSITION_ABI = "function position(bytes32 id, address user) view returns (tuple(uint256 supplyShares, uint128 borrowShares, uint128 collateral))"; + +const config = { + ethereum: { registry: '0xbe082293b646cb619a638d29e8eff7cf2f46aa3a', }, + xdai: { registry: '0x666fa9ef9bca174a042c4c306b23ba8ee0c59666', }, + base: {}, + linea: {}, +} + +Object.keys(config).forEach(chain => module.exports[chain] = { tvl }) + +async function tvl(api) { + const { registry = FUTURE_REGISTRY_ADDRESS, } = config[api.chain] + const instances = await api.fetchList({ lengthAbi: 'getNumberOfInstances', itemAbi: 'getInstanceAtIndex', target: registry }) + const vaultNames = await api.multiCall({ abi: 'string:name', calls: instances }) + const vaultConfig = await api.multiCall({ abi: GET_POOL_CONFIG_ABI, calls: instances }) + const vaults = vaultNames.map((name, i) => ({ name, config: vaultConfig[i], address: instances[i] })) + const morphoVaults = [] + const morphoVaultInfos = [] + const tokensAndOwners = [] + + for (const vault of vaults) { + if (vault.name.includes("Morpho")) { + morphoVaults.push(vault.address) + morphoVaultInfos.push(vault) + } else if (vault.config.vaultSharesToken !== nullAddress) { + tokensAndOwners.push([vault.config.vaultSharesToken, vault.address]) + } else { + tokensAndOwners.push([vault.config.baseToken, vault.address]) + } + } + + const mVaults = await api.multiCall({ abi: 'address:vault', calls: morphoVaults}) + const mCollaterals = await api.multiCall({ abi: 'address:collateralToken', calls: morphoVaults}) + const mOracles = await api.multiCall({ abi: 'address:oracle', calls: morphoVaults}) + const mIrms = await api.multiCall({ abi: 'address:irm', calls: morphoVaults}) + const mLltvs = await api.multiCall({ abi: 'uint256:lltv', calls: morphoVaults}) + + const morphoMarketIds = morphoVaultInfos.map((vault, i) => { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const packedIds = abiCoder.encode( + ['address', 'address', 'address', 'address', 'uint256'], + [vault.config.baseToken, mCollaterals[i], mOracles[i], mIrms[i], mLltvs[i]] + ); + return ethers.keccak256(packedIds); + }) + const positionCalls = morphoVaults.map((vault, i) => ({ target: mVaults[i], abi: POSITION_ABI, params: [morphoMarketIds[i], vault], })) + const positions = await api.multiCall({ calls: positionCalls, abi: POSITION_ABI }) + positions.forEach((position, i) => api.add(morphoVaultInfos[i].config.baseToken, position.supplyShares / 1e6)) + + return api.sumTokens({ tokensAndOwners }) +} From b1a7b770bef641e7d84342d752e1f6df0fbce668 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:13:32 +0200 Subject: [PATCH 0612/1768] update hyperdrive --- projects/hyperdrive/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/hyperdrive/index.js b/projects/hyperdrive/index.js index 6986d20153..adffd93fc4 100644 --- a/projects/hyperdrive/index.js +++ b/projects/hyperdrive/index.js @@ -51,7 +51,10 @@ async function tvl(api) { }) const positionCalls = morphoVaults.map((vault, i) => ({ target: mVaults[i], abi: POSITION_ABI, params: [morphoMarketIds[i], vault], })) const positions = await api.multiCall({ calls: positionCalls, abi: POSITION_ABI }) - positions.forEach((position, i) => api.add(morphoVaultInfos[i].config.baseToken, position.supplyShares / 1e6)) + positions.forEach((position, i) => { + api.add(morphoVaultInfos[i].config.baseToken, position.supplyShares / 1e6) + api.add(mCollaterals[i], position.borrowShares * -1 / 1e6) + }) return api.sumTokens({ tokensAndOwners }) } From 1cb37466c7dcb606926febd93b3a3d4968ea1332 Mon Sep 17 00:00:00 2001 From: metahubfinance <144872751+metahubfinance@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:25:17 +0700 Subject: [PATCH 0613/1768] add metahub.finance (#11858) Co-authored-by: Binh Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/Metahub-Finance/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/Metahub-Finance/index.js diff --git a/projects/Metahub-Finance/index.js b/projects/Metahub-Finance/index.js new file mode 100644 index 0000000000..9108edcd6e --- /dev/null +++ b/projects/Metahub-Finance/index.js @@ -0,0 +1,22 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") +const ADDRESSES = require('../helper/coreAssets.json') +const MEN_TOKEN_CONTRACT = '0x94b959c93761835f634B8d6E655070C58E2CAa12'; +const owners = [ + '0xF3Bc54A6b9615569194a203f852E64476f70d875', + '0x58e353BA88F22d6955b99Ee3a84826751F5B01be', + '0x126b40E61efAE1ef7b86ed3ffF4083369E3DaDF3', + '0x8Db60A7F9Ff1C92288C905fE780aE4D6f69Dd72e', + '0x0C6feFB39a0fe19054490F18C3Cb2412f407F650', + '0xf72d1642a6ce6e8b50597b6dca636488e14b666b', + '0xf416E1c9AdeCc1F8AF16E5fc26b06F69520A613b', + '0x1a0900f58ed4c558a0b35f184276ec9383ff29b0', + '0x56485038b32a24C7f5Ee1449eaC7f444ca4b21F2' +] + +module.exports = { + polygon: { + tvl: sumTokensExport({ owners, token: ADDRESSES.polygon.USDT, }), + staking: sumTokensExport({ owners, token: MEN_TOKEN_CONTRACT }), + pool2: sumTokensExport({ owners, token: '0xD12bA2A40289Ed8728682447DC77D001F03675F9', resolveLP: true, }), + }, +} \ No newline at end of file From 5f4af27a1677b80ed6c25dc227d50597b8a8674e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:36:15 +0200 Subject: [PATCH 0614/1768] track raindex #11856 --- projects/raindex/index.js | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 projects/raindex/index.js diff --git a/projects/raindex/index.js b/projects/raindex/index.js new file mode 100644 index 0000000000..0dd2e88ab9 --- /dev/null +++ b/projects/raindex/index.js @@ -0,0 +1,50 @@ +const { cachedGraphQuery } = require("../helper/cache") + +const orderbooks = { + arbitrum: { + address: "0x550878091b2b1506069f61ae59e3a5484bca9166", + sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-arbitrum/0.1/gn", + }, + base: { + address: "0xd2938e7c9fe3597f78832ce780feb61945c377d7", + sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-base/0.7/gn", + }, + bsc: { + address: "0xd2938e7c9fe3597f78832ce780feb61945c377d7", + sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-bsc/0.1/gn", + }, + flare: { + address: "0xcee8cd002f151a536394e564b84076c41bbbcd4d", + sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-flare/0.2/gn", + }, + linea: { + address: "0x22410e2a46261a1b1e3899a072f303022801c764", + sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-linea/0.1/gn", + }, + polygon: { + address: "0x7d2f700b1f6fd75734824ea4578960747bdf269a", + sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-polygon/0.4/gn", + }, +} + +const query = `query MyQuery($lastId: ID) { + erc20S(where: {id_gt: $lastId} first: 1000) { id } +}` + +async function tvl(api) { + const { address, sg } = orderbooks[api.chain] + + const cacheKey = `raindex/${api.chain}` + const res = await cachedGraphQuery(cacheKey, sg, query, { fetchById: true, }) + + const tokens = res.map(t => t.id) + return api.sumTokens({ tokens, owner: address }) +} + +module.exports = { + methodology: 'Balance of tokens held by Rain Orderbook contract.', +} + +Object.keys(orderbooks).forEach(chain => { + module.exports[chain] = { tvl } +}) From 187de560fb376103bd816ce2f547e9f4bbc999a8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:39:24 +0200 Subject: [PATCH 0615/1768] update level #11855 --- projects/level-money/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/level-money/index.js b/projects/level-money/index.js index 87789f2b31..9eb0149786 100644 --- a/projects/level-money/index.js +++ b/projects/level-money/index.js @@ -2,6 +2,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const LEVEL_STAKING_CONTRACT = '0x7FDA203f6F77545548E984133be62693bCD61497'; +const LEVEL_RESERVE_MANAGERS = ['0x70D544F75c2228D68EE04BC63e6e4Bae8F31fCEF']; const TOKEN_CONTRACTS = [ ADDRESSES.ethereum.USDT, // USDT @@ -20,7 +21,7 @@ const TOKEN_CONTRACTS = [ module.exports = { ethereum: { tvl: sumTokensExport({ - owner: LEVEL_STAKING_CONTRACT, + owners: [LEVEL_STAKING_CONTRACT].concat(LEVEL_RESERVE_MANAGERS), tokens: TOKEN_CONTRACTS, }), } From 244c13b034327212d5f6d38cdcb7d1cd59072784 Mon Sep 17 00:00:00 2001 From: gaawai-l Date: Wed, 9 Oct 2024 16:40:40 +0800 Subject: [PATCH 0616/1768] (JasperVault) add tokens & pools (#11854) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: Gary.Leung --- projects/jaspervault/index.js | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/projects/jaspervault/index.js b/projects/jaspervault/index.js index a327a6ec8b..f6abdb3bed 100644 --- a/projects/jaspervault/index.js +++ b/projects/jaspervault/index.js @@ -1,19 +1,31 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs") +const dlcBTC_arbitrum = '0x050C24dBf1eEc17babE5fc585F06116A259CC77A' +const cbBTC_base = '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf' module.exports = { arbitrum: { tvl: sumTokensExport({ owners: [ - '0xE980FD1dEA4E93c25B7f5B27351CF069C4f63a41', - '0xE26f15B3cc23e8a5adE4c10CCc69e50520eE2a89', - '0x5954B84F4ba745E1A85E9A5875ce3bDf863200ba', - '0xaaa5a76b9397eE41309CC15Bd71a5ae99662d6cd', - '0x3cF1A20AE73ff128D3A40F4492fdE59F2B2D1e8C', - '0x1eb466780e412C796A7BEdA541CfF47E0571A000', - '0x1DDD814589376Db497F91eFD2E6AFF969822a951' + '0x5954B84F4ba745E1A85E9A5875ce3bDf863200ba', // ETH CALL + '0x3cF1A20AE73ff128D3A40F4492fdE59F2B2D1e8C', // WBTC CALL + '0x1eb466780e412C796A7BEdA541CfF47E0571A000', // ARB CALL + '0x69ff3c3344C4F945205ddeA9A66c99c0A07D8aae', // WSOL CALL + '0x7A5A597d5c1D09F919e91Db5A986A4Dd2DEc0Af4', // dlcBTC CALL + '0xE26f15B3cc23e8a5adE4c10CCc69e50520eE2a89', // ETH WBTC dlcBTC PUT + '0x1DDD814589376Db497F91eFD2E6AFF969822a951' // ETH WBTC dlcBTC PUT ], - tokens: [ADDRESSES.arbitrum.WBTC, ADDRESSES.null, ADDRESSES.arbitrum.USDT, ADDRESSES.arbitrum.ARB] + tokens: [ADDRESSES.arbitrum.WBTC, ADDRESSES.null, ADDRESSES.arbitrum.USDT, ADDRESSES.arbitrum.ARB, dlcBTC_arbitrum] + }) + }, + base: { + tvl: sumTokensExport({ + owners: [ + '0x37a4f273B341C077230aA2d967590b8a74D37598', // ETH CALL + '0x4FAF5c3809E8Dc966Ff7AeDDFb501AF6f85Fbeb7', // cbBTC CALL + '0x8aB7037c4073200c907da014C626222624E1Fc47', // ETH cbBTC PUT + ], + tokens: [ADDRESSES.null, cbBTC_base] }) }, } From 660a31b5ccb9dd3ba8bd07853657e062aa745b10 Mon Sep 17 00:00:00 2001 From: well Date: Wed, 9 Oct 2024 16:41:26 +0800 Subject: [PATCH 0617/1768] add project donkeswap (#11853) Co-authored-by: smith --- projects/donkeswap/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/donkeswap/index.js diff --git a/projects/donkeswap/index.js b/projects/donkeswap/index.js new file mode 100644 index 0000000000..280e58c343 --- /dev/null +++ b/projects/donkeswap/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +// node test.js projects/donkswap/index.js +module.exports = { + misrepresentedTokens: true, + methodology: "Factory address (0x4B4746216214f9e972c5D35D3Fe88e6Ec4C28A6B) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", + sei: { + tvl: getUniTVL({ factory: "0x4B4746216214f9e972c5D35D3Fe88e6Ec4C28A6B", useDefaultCoreAssets: true }) + } +}; From 8de84a49080b401b738f3356836c951d20b7ee28 Mon Sep 17 00:00:00 2001 From: smithmonnnnnnn <130979786+smithmonnnnnnn@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:43:06 +0800 Subject: [PATCH 0618/1768] add pool2 tvl statistics of donkeswap (#11851) --- projects/kryptonite/index.js | 88 +++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 21 deletions(-) diff --git a/projects/kryptonite/index.js b/projects/kryptonite/index.js index d2584d3830..dc3a8ad3c5 100644 --- a/projects/kryptonite/index.js +++ b/projects/kryptonite/index.js @@ -1,5 +1,11 @@ const { queryContractWithRetries, getToken, getTokenBalance } = require("../helper/chain/cosmos"); +const getReservesAbi = "function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)"; +const totalSupplyAbi = "uint256:totalSupply"; +const decimalsAbi = "uint256:decimals"; +const token0Abi = "address:token0"; +const token1Abi = "address:token1"; + // node test.js projects/kryptonite/index.js const config = { sei: { @@ -23,13 +29,32 @@ const config = { lp: "sei1hxh76ty0fk9esq3qsvrhzz6fsvmh55j59xnduswn6dfnsyjs06vqcye8yf", pair: "sei1qgyrkxvnydcvtzj8w6e4n2p07pykxw4y25ntncz5a4puz6fd6e9slq6jgk", staking: "sei1400dydwghdkpxz9tqzv2f9nr7p04tvwawkvxsxf9xqvylec593fs73vr53" + }, + { + name: "SEILOR-USEI-WLP", + lp: "sei1lahjp2h2wchtncxsszpjeu5kr77wmn6uh354hu0l57pym9p3mvys8qnpp6", + lpEvm: "0xe7d76b9affb1f7a7bcf0b9206386d570e16bc17a", + pair: "sei1lahjp2h2wchtncxsszpjeu5kr77wmn6uh354hu0l57pym9p3mvys8qnpp6", + staking: "sei1ckske9cf8kw9ea66n5p3xpnz4ns3ruw052zcyhdsqpm54jjy3t9qjn7c7l", + wrapperLpEvm: true + }, + { + name: "STSEI-USEI-WLP", + lp: "sei16pe95h9uujjdp660tzsuv0utp9zymw926j604lx3p53rsy2tjh3s7ypvnu", + lpEvm: "0xa543dfa5c278d0d8499676e17b7f6bfd8ce18e39", + pair: "sei16pe95h9uujjdp660tzsuv0utp9zymw926j604lx3p53rsy2tjh3s7ypvnu", + staking: "sei1488mn0n3j3dv36nk9t2zkz3c5x8xsmfkmx36qg57z2xnkl6a5tns6stzm6", + wrapperLpEvm: true } ], coinGeckoMap: { usei: "sei-network", - sei1ln7ntsqmxl8s502f83km9a475zyhcfhpj7v2fsm3pcmckdyys3tsktx9vk: "sei-network", - sei1xq7g6asf63mkv7t5jkfu6uf8jpzkvwnu4zl2kh4cfvk0ynxvvksqf7z3d2: "sei-network", - sei10knxlv9e54z0xcywdhtycc63uf970aefeec73ycqwd75ep9nu45sh66m6a: "kryptonite", + "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7": "sei-network", // wSEI EVM + sei1xq7g6asf63mkv7t5jkfu6uf8jpzkvwnu4zl2kh4cfvk0ynxvvksqf7z3d2: "sei-network", // bSEI + sei1ln7ntsqmxl8s502f83km9a475zyhcfhpj7v2fsm3pcmckdyys3tsktx9vk: "kryptonite-staked-sei", // stSEI + "0xe5085112160fF75ee89a540Cdba570eAFdAF7f57": "kryptonite-staked-sei", // stSEI EVM + sei10knxlv9e54z0xcywdhtycc63uf970aefeec73ycqwd75ep9nu45sh66m6a: "kryptonite", // SEILOR + "0x89aeC21572F6637cCbd0d66861AAAC46Dd775ed1": "kryptonite", // SEILOR EVM sei1hrndqntlvtmx2kepr0zsfgr7nzjptcc72cr4ppk4yav58vvy7v3s4er8ed: "seiyan" } }, @@ -64,26 +89,47 @@ Object.keys(config).forEach(chain => { }, pool2: async (api) => { // Logic for calculating the value of staked LP tokens - for (let { lp, pair, staking, pairInfo } of seilorLps) { - const lpTokenInfo = await queryContractWithRetries({ contract: lp, chain, data: { token_info: {} } }); - const stakingState = await queryContractWithRetries({ contract: staking, chain, data: { query_staking_state: {} } }); - if (!pairInfo) { - pairInfo = await queryContractWithRetries({ contract: pair, chain, data: { pair: {} } }); - } - const token0Obj = pairInfo.asset_infos[0]; - const token1Obj = pairInfo.asset_infos[1]; - const token0 = getToken(token0Obj); - const token1 = getToken(token1Obj); - const token0Balance = await getTokenBalance({ token: token0Obj, owner: pair, chain }); - const token1Balance = await getTokenBalance({ token: token1Obj, owner: pair, chain }); - const token0Staked = token0Balance * stakingState.total_supply / lpTokenInfo.total_supply / 10 ** 6; - const token1Staked = token1Balance * stakingState.total_supply / lpTokenInfo.total_supply / 10 ** 6; - const token0CoinGeckoId = getCoinGeckoId(chain, token0); - const token1CoinGeckoId = getCoinGeckoId(chain, token1); + for (let { lp, pair, staking, pairInfo, wrapperLpEvm, lpEvm } of seilorLps) { + if (!wrapperLpEvm) { + const lpTokenInfo = await queryContractWithRetries({ contract: lp, chain, data: { token_info: {} } }); + const stakingState = await queryContractWithRetries({ contract: staking, chain, data: { query_staking_state: {} } }); + if (!pairInfo) { + pairInfo = await queryContractWithRetries({ contract: pair, chain, data: { pair: {} } }); + } + const token0Obj = pairInfo.asset_infos[0]; + const token1Obj = pairInfo.asset_infos[1]; + const token0 = getToken(token0Obj); + const token1 = getToken(token1Obj); + const token0Balance = await getTokenBalance({ token: token0Obj, owner: pair, chain }); + const token1Balance = await getTokenBalance({ token: token1Obj, owner: pair, chain }); + const token0Staked = token0Balance * stakingState.total_supply / lpTokenInfo.total_supply / 10 ** 6; + const token1Staked = token1Balance * stakingState.total_supply / lpTokenInfo.total_supply / 10 ** 6; - api.add(token0CoinGeckoId, token0Staked, { skipChain: true }); - api.add(token1CoinGeckoId, token1Staked, { skipChain: true }); + api.add(getCoinGeckoId(chain, token0), token0Staked, { skipChain: true }); + api.add(getCoinGeckoId(chain, token1), token1Staked, { skipChain: true }); + } else { + // Logic for calculating the value of staked wrapper EVM LP tokens + const stakingState = await queryContractWithRetries({ contract: staking, chain, data: { query_staking_state: {} } }); + + const [reserveAmounts, totalSupply, token0, token1] = await api.batchCall([ + { target: lpEvm, abi: getReservesAbi }, + { target: lpEvm, abi: totalSupplyAbi }, + { target: lpEvm, abi: token0Abi }, + { target: lpEvm, abi: token1Abi } + ]); + const [token0Decimals, token1Decimals] = await api.batchCall([ + { target: token0, abi: decimalsAbi }, + { target: token1, abi: decimalsAbi } + ]); + + const token0Staked = reserveAmounts[0] * stakingState.total_supply / totalSupply / 10 ** token0Decimals; + const token1Staked = reserveAmounts[1] * stakingState.total_supply / totalSupply / 10 ** token1Decimals; + + api.add(getCoinGeckoId(chain, token0), token0Staked, { skipChain: true }); + api.add(getCoinGeckoId(chain, token1), token1Staked, { skipChain: true }); + } } + return api.getBalances(); } }; From aa64e6d7e201acc8f9e820052ead3934b28077d8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:45:49 +0200 Subject: [PATCH 0619/1768] track sparkdex v3.1 #11852 --- projects/sparkdex-v3-1/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/sparkdex-v3-1/index.js diff --git a/projects/sparkdex-v3-1/index.js b/projects/sparkdex-v3-1/index.js new file mode 100644 index 0000000000..0b7f09c0ce --- /dev/null +++ b/projects/sparkdex-v3-1/index.js @@ -0,0 +1,6 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + flare: { factory: '0x8A2578d23d4C532cC9A98FaD91C0523f5efDE652', fromBlock: + 30717263, }, +}) From 1e13b8e0e366b3d83747182b713ca650c0213c5e Mon Sep 17 00:00:00 2001 From: Dmytro Pintak Date: Wed, 9 Oct 2024 09:47:25 +0100 Subject: [PATCH 0620/1768] Add Crouton (#11850) --- projects/crouton/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/crouton/index.js diff --git a/projects/crouton/index.js b/projects/crouton/index.js new file mode 100644 index 0000000000..66f73f7a0f --- /dev/null +++ b/projects/crouton/index.js @@ -0,0 +1,24 @@ +const { get } = require("../helper/http"); +const ADDRESSES = require("../helper/coreAssets.json"); + +async function tvl(api) { + const pools = await get("https://backend.crouton.finance/pools"); + const tvl = pools.reduce((acc, pool) => { + acc += Number(pool.tvlUsd); + return acc; + }, 0); + api.add(ADDRESSES.ton.USDT, tvl * 1e6); +} + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + methodology: ` +The methodology for calculating TVL includes both the TON balance and tokens' balances +data for each pool. The calculation is performed on the Parraton API side. + `.trim(), + + ton: { + tvl, + }, +}; From 1f17e483585589e9cf729a179c55108886083014 Mon Sep 17 00:00:00 2001 From: lukeInAsd <143388268+lukeInAsd@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:47:52 +0800 Subject: [PATCH 0621/1768] remove one native bitcoin address (#11848) --- projects/bitfi/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/bitfi/index.js b/projects/bitfi/index.js index 4421b9d984..6645c2fddd 100644 --- a/projects/bitfi/index.js +++ b/projects/bitfi/index.js @@ -17,8 +17,7 @@ const owners = [ 'bc1qw4vp94e9egkaxc04qsu5z9aq5pqpku2p6pzer8', 'bc1qqg3cdyadq25zn99sdprr4lgpsxg2za998eygy8', 'bc1q6dtp7ayaj5k2zv0z5ayhkdsvmtvdqgyaa9zs53', -'bc1qaajdlp5yrj5f77wq2ndtfqnmsamvvxhpy95662zkzykn9qhvdgys580hcs', -'bc1qcmmkxfp2rawrp6yx55rez9jcqdnxtam8jhu2v2d9kz46upf948wq2usauv', +'bc1qaajdlp5yrj5f77wq2ndtfqnmsamvvxhpy95662zkzykn9qhvdgys580hcs' ] module.exports = { From f77315fe5714a80b67f043bf0816fffdf84ce7cb Mon Sep 17 00:00:00 2001 From: LpcAries <101619245+LpcAries@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:48:53 +0800 Subject: [PATCH 0622/1768] add trado-spot adapter (#11846) --- projects/trado-spot/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/trado-spot/index.js diff --git a/projects/trado-spot/index.js b/projects/trado-spot/index.js new file mode 100644 index 0000000000..31d1fe9852 --- /dev/null +++ b/projects/trado-spot/index.js @@ -0,0 +1,10 @@ +const { iziswapExport } = require('../helper/iziswap') + +const poolHelpers = { + 'flow': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], +} // liquidityManager contracts + + +Object.keys(poolHelpers).forEach(chain => { + module.exports[chain] = { tvl: iziswapExport({ poolHelpers: poolHelpers[chain], }), } +}) \ No newline at end of file From fae8c674fd767a997b8fc2d093585d357b465336 Mon Sep 17 00:00:00 2001 From: Manoranjith Shankar Date: Wed, 9 Oct 2024 14:20:30 +0530 Subject: [PATCH 0623/1768] add: Estate-Protocol TVL (#11837) --- projects/estate-protocol/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/estate-protocol/index.js diff --git a/projects/estate-protocol/index.js b/projects/estate-protocol/index.js new file mode 100644 index 0000000000..b526c2747b --- /dev/null +++ b/projects/estate-protocol/index.js @@ -0,0 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { get } = require('../helper/http') + +async function arbTvl(api) { + let ep_tokens = await get('https://estateprotocol.com/api/public/property/list') + + // Filter out tokens + ep_tokens = ep_tokens.filter(t => t.propertyAddress && t.token_price) + + // Get total supply for each token + const tokenSupplies_arb = await api.multiCall({calls: ep_tokens.map(t => t.propertyAddress), abi: 'erc20:totalSupply'}); + tokenSupplies_arb.map((supply, i) => api.add(ADDRESSES.arbitrum.USDC_CIRCLE, supply/1e18 * parseFloat(ep_tokens[i]['token_price']) * 1e6 )) +} + +module.exports = { + methodology: `TVL for Estate Protocol consists of the accumulation of all properties prices, each being tokenSupply * tokenPrice where tokenPrice is given by the API`, + arbitrum: { + tvl: arbTvl + }, +} From 00b87cde7407661727ffb5ed68ca3aa3d217a565 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:01:07 +0200 Subject: [PATCH 0624/1768] fix binance --- projects/binance/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/binance/config.js b/projects/binance/config.js index 101d6c3e65..a53e1c9594 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -282,7 +282,7 @@ const assetList = [ ['ETH', 'OP', '0x5a52e96bacdabb82fd05763e25335261b270efcb'], ['ETH', 'OP', '0xacd03d601e5bb1b275bb94076ff46ed9d753435a'], ['ETH', 'OP', '0xf977814e90da44bfa03b6295a0616a897441acec'], - ['ETH', 'STK', ' 0x0213c67ed78bc280887234fe5ed5e77272465317978ae86c25a71531d9332a2d'], + ['ETH', 'STK', '0x0213c67ed78bc280887234fe5ed5e77272465317978ae86c25a71531d9332a2d'], ['ETH', 'ERA', '0x7aed074ca56f5050d5a2e512ecc5bf7103937d76'], ['ETH', 'ERA', '0xa84fd90d8640fa63d194601e0b2d1c9094297083'], ['ETH', 'ERA', '0xf977814e90da44bfa03b6295a0616a897441acec'], From 67190a7f3adbab02476a9b40e5cef5040a7d7e3b Mon Sep 17 00:00:00 2001 From: webmass Date: Wed, 9 Oct 2024 11:33:03 +0200 Subject: [PATCH 0625/1768] Update inverse treasury missing lps (#11860) --- projects/helper/unwrapLPs.js | 39 +++++++++++++++++++++++++++++++++--- projects/treasury/inverse.js | 8 ++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index 9051760454..6995cc4cab 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -778,6 +778,7 @@ async function sumTokens2({ resolveICHIVault = false, solidlyVeNfts = [], convexRewardPools = [], + auraPools = [], }) { if (api) { chain = api.chain ?? chain @@ -836,6 +837,17 @@ async function sumTokens2({ }).flat(); await unwrapConvexRewardPools({ api, tokensAndOwners: convexRewardPoolsTokensAndOwners }); } + + if (auraPools.length) { + const tokensAndOwners = auraPools.map(poolAddress => { + return owners.map(owner => [poolAddress, owner]) + }).flat(); + Promise.all( + tokensAndOwners.map(([pool, owner]) => { + return unwrapAuraPool({ api, auraPool: pool, owner }) + }) + ); + } if (ownerTokens.length) { ownerTokens.map(([tokens, owner]) => { @@ -920,7 +932,25 @@ function sumTokensExport({ balances, tokensAndOwners, tokensAndOwners2, tokens, return async (api) => sumTokens2({ api, balances, tokensAndOwners, tokensAndOwners2, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveSlipstream, resolveArtBlocks, resolveNFTs, fetchCoValentTokens, ...args, }) } -async function unwrapBalancerToken({ api, chain, block, balancerToken, owner, balances, isBPool = false, isV2 = true }) { +async function unwrapAuraPool({ api, chain, block, auraPool, owner, balances, isBPool = false, isV2 = true }) { + if (!api) { + api = new sdk.ChainApi({ chain, block, }) + } + balances = balances || api.getBalances() + const [lpSupply, lpTokens, balancerToken] = await api.batchCall([ + { abi: 'erc20:totalSupply', target: auraPool }, + { abi: 'erc20:balanceOf', target: auraPool, params: owner }, + { abi: 'address:asset', target: auraPool }, + ]); + if (+lpTokens === 0) return balances; + const [vault] = await api.batchCall([ + { abi: 'address:getVault', target: balancerToken }, + ]); + const auraRatio = lpTokens / lpSupply; + return unwrapBalancerToken({ api, chain, block, balancerToken, owner: vault, balances, isBPool, isV2, extraRatio: auraRatio }) +} + +async function unwrapBalancerToken({ api, chain, block, balancerToken, owner, balances, isBPool = false, isV2 = true, extraRatio = 1 }) { if (!api) { api = new sdk.ChainApi({ chain, block, }) } @@ -930,14 +960,17 @@ async function unwrapBalancerToken({ api, chain, block, balancerToken, owner, ba { abi: 'erc20:balanceOf', target: balancerToken, params: owner }, ]) if (+lpTokens === 0) return balances - const ratio = lpTokens / lpSupply + const ratio = lpTokens / lpSupply * extraRatio if (isV2) { const poolId = await api.call({ abi: 'function getPoolId() view returns (bytes32)', target: balancerToken }) const vault = await api.call({ abi: 'address:getVault', target: balancerToken }) const [tokens, bals] = await api.call({ abi: 'function getPoolTokens(bytes32) view returns (address[], uint256[],uint256)', target: vault, params: poolId }) tokens.forEach((v, i) => { - sdk.util.sumSingleBalance(balances, v, bals[i] * ratio, api.chain) + // handle balancer composable metapools case where the pool contains the LP itself, we can skip it for our calc + if(v.toLowerCase() !== balancerToken.toLowerCase()) { + sdk.util.sumSingleBalance(balances, v, bals[i] * ratio, api.chain) + } }) } else { let underlyingPool = balancerToken diff --git a/projects/treasury/inverse.js b/projects/treasury/inverse.js index f842e26bb0..366b64fe13 100644 --- a/projects/treasury/inverse.js +++ b/projects/treasury/inverse.js @@ -41,6 +41,7 @@ module.exports = treasuryExports({ "0x7e05540A61b531793742fde0514e6c136b5fbAfE", // xFODL "0x0a6B1d9F920019BAbc4De3F10c94ECB822106104", "0x73E02EAAb68a41Ea63bdae9Dbd4b7678827B2352", + "0xbD1F921786e12a80F2184E4d6A5cAcB25dc673c9", // dola-inv uni ], owners: [anchorTreasury, treasurymultisig, pcmultisig, bugbountymultisig, fedchair], ownTokens: [ @@ -57,6 +58,13 @@ module.exports = treasuryExports({ ], convexRewardPools: [ "0x9a2d1b49b7c8783E37780AcE4ffA3416Eea64357",// DBR tripool CVX + "0x21E2d7f66DF6F4e8199210b9490a51831C9847C7",// inv tripool CVX + "0xE8cBdBFD4A1D776AB1146B63ABD1718b2F92a823",// dola-fraxpyusd lp CVX + "0x2ef1dA0368470B2603BAb392932E70205eEb9046",// dola-fxusd lp CVX + "0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c",// dola-fraxusdc lp CVX + ], + auraPools: [ + "0xA36d3799eA28f4B75653EBF9D91DDA4519578086", // sDOLA-DOLA aura pool ] }, optimism: { From 53b82cc99482e9b8b9adedbae99ed56cda660946 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:55:03 +0100 Subject: [PATCH 0626/1768] adapter lst btc xlink (#11863) --- projects/xlink-btc-lst/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/xlink-btc-lst/index.js diff --git a/projects/xlink-btc-lst/index.js b/projects/xlink-btc-lst/index.js new file mode 100644 index 0000000000..6dd544cfcf --- /dev/null +++ b/projects/xlink-btc-lst/index.js @@ -0,0 +1,12 @@ +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); + +const owners = [ + "bc1p78mvfa550t7acg6wm9cl9543zf68ulhqkxex5pvhv8wnw4qpl3gqmpjy2s" +]; + +module.exports = { + methodology: "Staking tokens via Babylon counts as TVL", + bitcoin: { + tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), + }} \ No newline at end of file From 0044a28fc74cbb57a7368c4b276b570d76ed38e8 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:28:53 +0100 Subject: [PATCH 0627/1768] add solvBTC LST (#11865) --- projects/solv-btc-lst/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/solv-btc-lst/index.js diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js new file mode 100644 index 0000000000..d5b02ea697 --- /dev/null +++ b/projects/solv-btc-lst/index.js @@ -0,0 +1,18 @@ +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); + +const owners = [ + "bc1qpq80t9phhkducn2p2mgg4vrnsp8p5q3dm9t9hjyqe7unvu5t2fesvy4rzr", //Solv node + "bc1qjg8234tdlsg3m5hm7fqtc5xe4vdv5fn353vh404qlz7s7q8drevqapsz67", //Dao Validator 2 + "bc1ql45htw479z2jxdhn3lwtcjp452hn2jtajyqc8ps6ac6jvgk563fq3sj3jp", //Satoshi App + "bc1qwukfufwmq437kry9xcfxmv5sv7vnq9scqyhfcrudt3xghdwvqmuqennqpc", //Infstone + "bc1q8dyhmkmzpug3c9dcj45ycy2sa4aetsh53ssd7wk24pzv7ufcar8qywhvxe", //Dao Validator 1 + "bc1qn95r70zlw4ylyp6luytg3j5hfnmpds8vcle6a4svwdghjqzahzssrqyzfw", //Dao Validator 6 + "bc1q7j4hlsyv7fcze74fa56g8nxpegynze03wmqrq6hwd83qg3vpz8xsv4u2y8", //Dao Mining Pool 4 +]; + +module.exports = { + methodology: "Staking tokens via Babylon counts as TVL", + bitcoin: { + tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), + }} \ No newline at end of file From c7f11c330c38b0078cd598aaab0c4037385774c9 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:44:29 +0100 Subject: [PATCH 0628/1768] Update pstake BTC wallets (#11866) --- projects/pstake-btc/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 6079a8ee24..0609a8fa5c 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -1,10 +1,10 @@ const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require("@defillama/sdk"); -const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay"]; +const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay", "bc1px92pntcj0wd5076nnymp787a7qczsaauuefgntxngdwvkd584xgsaagem2", "bc1pxhkczd3jq9nq50p2xll99edhxlx5dj6ztgw5pgtzszjtlvg7tl4s8ttf04"]; module.exports = { - methodology: `Total amount of BTC in ${owner}.`, + methodology: `Total amount of BTC in ${owner}. Restaked on babylon`, bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owner })]), }, From fd55824341ccf0b1da31d90cfa40a3302b644d3f Mon Sep 17 00:00:00 2001 From: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:10:11 +0800 Subject: [PATCH 0629/1768] feat: support native USDC type (#11862) --- projects/bucket-protocol/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index acf1fb3b23..9628e67f09 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -7,6 +7,7 @@ const MAINNET_PROTOCOL_ID = const BUCK = ADDRESSES.sui.BUCK; const USDC = ADDRESSES.sui.USDC; const USDT = ADDRESSES.sui.USDT; +const USDC_CIRCLE= ADDRESSES.sui.USDC_CIRCLE const AF_LP_IDs = [ "0xe2569ee20149c2909f0f6527c210bc9d97047fe948d34737de5420fab2db7062", @@ -36,6 +37,9 @@ const KRIYA_POOL_IDs = [ const CETUS_LP_ID = "0xb9d46d57d933fabaf9c81f4fc6f54f9c1570d3ef49785c6b7200cad6fe302909"; +const USDC_CIRCLE_PSM = + "0xd22388010d7bdb9f02f14805a279322a3fa3fbde42896b7fb3d1214af404c455"; + const USDC_PSM = "0x0c2e5fbfeb5caa4c2f7c8645ffe9eca7e3c783536efef859be03146b235f9e04"; @@ -69,6 +73,9 @@ const scallop_sUSDC_LP_ID = const scallop_sUSDT_LP_ID = "0x6b68b42cbb4efccd9df30466c21fff3c090279992c005c45154bd1a0d87ac725"; +const scallop_sCircleUSDC_LP_ID = + "0xdf91ef19f6038e662e9c89f111ffe19e808cdfb891d080208d15141932f9513b"; + const haSUI_Navi_Pond_ID = "0xef1ff1334c1757d8e841035090d34b17b7aa3d491a3cb611319209169617518e" const SUI_Navi_Pond_ID = "0xcf887d7201c259496a191348da86b4772a2e2ae3f798ca50d1247194e30b7656"; @@ -107,6 +114,9 @@ async function tvl(api) { const cetusLpObj = await sui.getObject(CETUS_LP_ID); const stakedBucketus = cetusLpObj.fields.staked; + const usdcCirclePSMObj = await sui.getObject(USDC_CIRCLE_PSM); + const usdcCirclePSMAmount = usdcCirclePSMObj.fields.pool; + const usdcPSMObj = await sui.getObject(USDC_PSM); const usdcPSMAmount = usdcPSMObj.fields.pool; @@ -184,6 +194,7 @@ async function tvl(api) { const halfStakedBucketus = Math.floor(stakedBucketus / 2); api.add(USDC, Math.floor(halfStakedBucketus / 1000)); + api.add(USDC_CIRCLE, Math.floor(usdcCirclePSMAmount)); api.add(USDC, Math.floor(usdcPSMAmount)); api.add(USDT, Math.floor(usdtPSMAmount)); @@ -260,6 +271,9 @@ async function tvl(api) { const scallopUSDT_LPAmount = await getScallopsLPAmount(scallop_sUSDT_LP_ID); api.add(USDT, scallopUSDT_LPAmount); + + const scallopCircleUSDC_LPAmount = await getScallopsLPAmount(scallop_sCircleUSDC_LP_ID); + api.add(USDC_CIRCLE, scallopCircleUSDC_LPAmount) } module.exports = { From 8a60ad20110c29bb95256db9f873de68d4fdb391 Mon Sep 17 00:00:00 2001 From: Priyam Anand <74959566+priyam-anand@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:40:33 +0530 Subject: [PATCH 0630/1768] superlend.xyz tvl code (#11861) --- projects/superlend/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/superlend/index.js diff --git a/projects/superlend/index.js b/projects/superlend/index.js new file mode 100644 index 0000000000..651e67ca89 --- /dev/null +++ b/projects/superlend/index.js @@ -0,0 +1,7 @@ +const { aaveExports } = require('../helper/aave'); +const methodologies = require('../helper/methodologies'); + +module.exports = { + methodology: methodologies.lendingMarket, + etlk: aaveExports('etlk', "0xEcbDd440C7a929d7524784Af634dF9EB0747b9e7", undefined, ["0x99e8269dDD5c7Af0F1B3973A591b47E8E001BCac"], { v3: true }), +} \ No newline at end of file From 08a963a2486c7ef677cff6858e05c17f57c6b931 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 10 Oct 2024 00:44:03 +0100 Subject: [PATCH 0631/1768] staking reporting incorrect amount --- projects/corgiswap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/corgiswap.js b/projects/corgiswap.js index 059f6df969..c7a1445a49 100644 --- a/projects/corgiswap.js +++ b/projects/corgiswap.js @@ -10,6 +10,6 @@ module.exports = { methodology: 'TVL accounts for the liquidity on all AMM pools, using the TVL chart on https://corgiswap.info/ as the source. Staking accounts for the CORIS locked in MasterChef (0x60E5Cf9111d046E8F986fC98e37d6703607d5Baf)', bsc: { tvl: getUniTVL({ factory, useDefaultCoreAssets: true, }), - staking: stakingPricedLP(masterChef, corisToken, "bsc", "0x1881bd6aba086da0c5cfed7247f216dea50e38ed", "wbnb", true) + staking: async ()=>({}) // CORIS returning an incorrect staking value locked }, } From e19086a34e22ebdd31bf7f19e66d6b002bad7f2f Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:02:43 +0800 Subject: [PATCH 0632/1768] Add solv-btc-lst bbn owner address (#11872) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solv-btc-lst/bitcoin.json | 4022 ++++++++++++++++++++++++++++ projects/solv-btc-lst/index.js | 25 +- 2 files changed, 4031 insertions(+), 16 deletions(-) create mode 100644 projects/solv-btc-lst/bitcoin.json diff --git a/projects/solv-btc-lst/bitcoin.json b/projects/solv-btc-lst/bitcoin.json new file mode 100644 index 0000000000..8172b6dcb6 --- /dev/null +++ b/projects/solv-btc-lst/bitcoin.json @@ -0,0 +1,4022 @@ +{ + "core": [ + "bc1qpq80t9phhkducn2p2mgg4vrnsp8p5q3dm9t9hjyqe7unvu5t2fesvy4rzr", + "bc1qjg8234tdlsg3m5hm7fqtc5xe4vdv5fn353vh404qlz7s7q8drevqapsz67", + "bc1ql45htw479z2jxdhn3lwtcjp452hn2jtajyqc8ps6ac6jvgk563fq3sj3jp", + "bc1qwukfufwmq437kry9xcfxmv5sv7vnq9scqyhfcrudt3xghdwvqmuqennqpc", + "bc1q8dyhmkmzpug3c9dcj45ycy2sa4aetsh53ssd7wk24pzv7ufcar8qywhvxe", + "bc1qn95r70zlw4ylyp6luytg3j5hfnmpds8vcle6a4svwdghjqzahzssrqyzfw", + "bc1q7j4hlsyv7fcze74fa56g8nxpegynze03wmqrq6hwd83qg3vpz8xsv4u2y8" + ], + "bbn": [ + "bc1q47ur7u0xh943s44kktvhr602sm29exylzn43ru", + "bc1qng3xngmafngs5gn5qrvww87g8kwuzhsdamz6ys", + "bc1pegk6p2fqlqs2lf2xtvx029sadua9yafvj0du9kuw4zmlfthmn0aqvfae9k", + "bc1prc3qzylqj9xjga5v24ceuuy6u9ndd6h8rsqfah5j4lqy7qe8dthqvch3a5", + "bc1puysx8894gdeueffvrsanesdwkzr8tf6344cf556xxs74d07j5kcqfyapm2", + "bc1pndf7fa7uq5t4qnnxkk3qvzfd6qhnelsgjmjm2flc2v8e2g98cqhs69zyay", + "bc1pxvrn9ecxs47dvpl6qw4zwv4cgsvl9c4d5kmy4uk6h9x5rxukedfsydeq2g", + "bc1pmfax76w4zmk7v5hthn5u07v9hjtfvtpj2ry0grkt0rv66ydk7desn0wlxe", + "bc1pvwjkr0724ckucdvrtxjzml9ka7jnzzjaejvwfnn8a2avvpnljthseg2a0e", + "bc1pmwj40lq0vvkxqmfxsyks8mam9gfvhwallmm3adr69r8zs9d3cmqsewk678", + "bc1pwzwd3g77aud55fptj0w7mjmqrn0wy4qwvtqhr8kuh8mucnwr5ntsuj935q", + "bc1pl4248rram36dyh5d5j2jxyjg3klztkze85cf76gprl4khah75seqp26hvk", + "bc1pgqg527pxquhmck0pelz6qckc57nswhsxfcl8hqt0ch23jpmqrghq0c4kz8", + "bc1p5n2c8yw6vhfgymnt6ey6xnfrq8576alvdue0ezzrdpmvk64mgzgqt2l5sw", + "bc1pct6rmtj9v4znmj7epl3yamqrzgq0ajz4u3xtm8tfrmty0ckyc2js9q43hs", + "bc1pzprnya6zq56yt3yzn7d6e59c3nlwjdnq8jka5qjgz34krzgatm7qu5cf63", + "bc1p0903alks7pa7szd5xfxnd34aaplqj4v4are4anqhuzmd5366r72sh67ryv", + "bc1pdlmdcg255m8yt6zsce5pf8jvw20ez76gauymvx59um8p6cndl5hqmaguuy", + "bc1px9u0z5ua6es28d6e0ep8zs5c7ppug2p6vgrlkxtm73fx46kc744swaukq5", + "bc1ppl373h4975naqp0cx6uza4c9a6qpjj9sw6cp6pmdclrrpjtz58nsxjfjr4", + "bc1pj74n7zn5mjf3jfu57t7u9lyyj70k6lm32v2jcp32mdjr2z3mggzsq79jcg", + "bc1p02xuvg2jzl4hmhhas0ffcm49ndcr9hxart8er0fq42q7343m5sgs4a0nsk", + "bc1pvy3uzrdrh0km7d08hkzxarxle0rtduzm72537ap7pxjtmn0emy9ssan8uv", + "bc1p6ks5syj90z65avm55asae7ndk07xctmyx4lnfunjakv3ty08fx2q4lazrs", + "bc1px8ca39fwgnrfu7pd8j9nv9j2e09p86mn3vfu9kmq7gkegrjnh4mq86w0yf", + "bc1p484296r69cnq0fx6g38v74vdsfyzpvp6qyy59d36vdmeplesv0qs9agns5", + "bc1pcv5yw7hp42aerwdt3lljrk6amf6ykagkflfev4yxelququdnmvzs93p3f9", + "bc1p4eglaqngh5e86srh4tlf6u0j5ctdhye97jf8vjzuggdvszahuzaqkkh8p7", + "bc1ps43y3j57vjwdsmp43vxunxtvwhlagafwsca7y8dufu9dgjztzddsl5q5ky", + "bc1pjh0fcjsph23x9jw9qk27tg6xgj5n5y79rtcysusdmdyf4jtpszdsqyj2v9", + "bc1p7xxwz7z36h2xsaqg64ctqm6qnz6nrw37qc8zj2934v669vagh8hqa2y99p", + "bc1prjgr7heeqdza7tg4x7h2a6npx20uvxgrdhknq3u84gdaprvf32cs4klyh0", + "bc1ph6hq4xcux2966l6c3j8ylzesdqmp70hdra7ttmt3phnfv9sn9z2shm2vsx", + "bc1pz5cq7sqlqt5sfcclp6my6y2r2rwlnnz4g05s9hz53v3g8xtsde7q5s6ydz", + "bc1pepmvmtgeehqmaw8pp6f7u22qqmppuytnrxjhrj3jwteqmlakg4lqyyead0", + "bc1pnjsahj0gr7zky8xxnr22dhk88v0dvl350pxqtl464sp4asu9k84q03psll", + "bc1pccyp883ueldcsfmsn5n49xdxjnv5k46k2m3qardpqtr64jv7rtpsmjar0g", + "bc1pzhy6458hllmzwl73gq3w8j5u48c5juugx3n0ca8zzz66refa852sylerur", + "bc1pahu4wlh5dc5h75jcdrsu23v7zcpjkyqlngu3a3es5d3skxyn9udsmzng80", + "bc1p2hec4gmqrxweheqx69g8qwd7nc7leeuglh09rssa6vvnedj3mrlscjk6lu", + "bc1p7lck8ese8fp282vn2y2ajmjw0eh0f96ulfdwxe87572psedcwtcqlaf2t6", + "bc1pac69krqkhtwmvcw85sjm2lv5m7mky7jkgzagp2jlyqqlp96qgvpqavv8tk", + "bc1p5ggclamj4xpdhldkjwemp3cnwc5y8c4sssujzxg68ds2kty88dxs964zwh", + "bc1patr47x6ztvdpl49k06z9ahdz2cudppn3lpmt64gyel5k979yseuqj6z82q", + "bc1pm40shkywg5rsdy8vnkc2p8er3a083vw085vheckrv3tpenlnl30sp4883k", + "bc1pv8ugrch82jeqzyq8u05nypv06ag7utfe8f5mlw7uxjfkgzwp9cmqxe5xe0", + "bc1pl6a9zq7r7c9c0mnahjnca5f68pw2hgkr32596jcmwyz7kt0yzc8seuqcxr", + "bc1pm00xjquj8497g2x7n09g2k72s2xfwyew80z6arnwddjlz3esnn7qk0g8jt", + "bc1p78w5cn9wqnsmp4pmemtdvp605umr0lvvtmd7gvtnqwyjcxf9ures5hq84u", + "bc1purnktjcuz6amh96cddejx96sc000jn7e9zyt20ff3plmrpva03rsayfjy3", + "bc1p9cmf37924l9ka6c8u8lla3vz79lsr38k4rdcqtl2wcmkhlavyvesvl5qex", + "bc1pl7rhfxf8a42xrrk76ujy0x3cwtqqu3nufhprxxp7rg6asgqlc7sqapx4pv", + "bc1p5peav9tgux0xysgs6q94k2gcqh9gvvzakcnctyqe7y2udl56czas20xmty", + "bc1pmpaehysgknw3mj5t8k9kuvuq6upptx39rs53c3sx76my65h8uuvs5hzccz", + "bc1pk89l2fd6068w25p8tmsjx5mvrrejyatjyx66q7x5q8untfry3d4svgp7ca", + "bc1py0rd08692884cyfw8dywt2d2dnnx5uz6xwnkpev7dh278hm2an9szf0ugm", + "bc1pyjnns0prrum32j8vg64nm9yzsk6qmyke0mcz4g6yt4jhudnkhclq567mxl", + "bc1pkf26ga6du6g8hsye7u9p8mcm73xgafc5ulzgtuc25mf40jrp06rq6t6xud", + "bc1p5cfvngjfam9rsx2wp9ud5qhjte7agre25p6e792yhm2eeppuezusfue3wf", + "bc1pz3tx9f6kwm2hku9ly76ldnljl7qyqfqr6eadcn6j0xn9k2e5atvqfr6c6s", + "bc1pf2p6j3tttlg6y7fcxghdecv7kdnuwyhap9vyzxcykldv85ctxm8qfedd9k", + "bc1pnew9k74q30kcz8472gwtudmg4gynn6kyscan5muufcpjwlk3vcks8fyyz6", + "bc1pw7cxatkf6uze273uc4gu0s7pkthkxdhzsrats464y2lt9tzu8t5s8w94v3", + "bc1pdgrgj3rm3qx306j9e4ey9sn4ngrnrtqs83xf6fv86pnzthnnz0fsyfuqc5", + "bc1p7zvpxaves4u626m4k5m45ew2xx0pezwmnvf7uzn8q5jma7s8fg6qc9zkgr", + "bc1p3sm0kep9pv2ql0fq2fs8h84u5xv5zu4qcg8xqk0x75zwzzd0kksqreea5r", + "bc1pcsqmwl5ug85njhm2nxxmwpkc39cet7ff8f2z9a8tnpq88umqz28s90hnpu", + "bc1p6f8tkamhkz374k6zrn4q26x38pz73xc3q9ps78kee5unwn3jrjkql0ph8m", + "bc1plgdccx4dgntezlexzd6aweqned4kq62xc9nhpy4ul5u7rth653ms9us632", + "bc1pn6r99gggrqeaumy2jqt398atw3aj6pthkgeyy85qhjpds87rv3dsxq5c0p", + "bc1pamzp7tegxtqrppudsvpdlfse488g7z8qwmx2j22pplskea7ggduqgt7z7p", + "bc1pert8ey2h6xr00atux64gl025x4srvtg8wuq9huavpmr46cqep9jqwhlezk", + "bc1pgkjfyvklgja33657ndf5eh4k6gtrlvwvznc800jqw3zsxya0uz3s2jrzf6", + "bc1pc549fmxer7lx8nszxunr6m7n8dkajye3z3vtddgs7wm5a2v2mdzs5mwx2x", + "bc1pdfda5tqrxsezlyh3d82c2vcwf9zmrjxv3eaneacypca3rah3wtuqkkwsa6", + "bc1pjn6pehyvgpna7wzkfl43plfzx8ruwm8ejhsu53mldnq29dq5sw0su2mgd2", + "bc1pa06z2quaxp5g54en25nvd8un0fu8aavellr4wuc3a2vhs3h2pagqn5wzwh", + "bc1p4ddmvy05j8su52qv58nyhja59yg7vwmcvd6ak4hh53hxll396jjs6pvwug", + "bc1pytpqywes3czlx770kpku04jlmlrgwpzd9vc5mf9dd7dxttnlgcuqwkvu0d", + "bc1phctcm9kku3a4pypa9g84zdhlexuflzun9mqk26d3g56npazhr9hqkawgga", + "bc1pheg4zs3j9gd2c7fmd990m239347l38a2tzg28jh5hewyn4yqfjkq8d6mjk", + "bc1pwlc3zdnp4umdqgva44tr2lqcmdxlu58dtx4w4esl7vg7cl4c9d4sj589zl", + "bc1pgzce5pq5gs0fgfxhvgaqylg6csl3p0w5npkpp4zdq74spjh0znmqs6msel", + "bc1penhupgacpx4z73yw5upxlss2k6sm4pl9eephqqh0ky0q30c0jras4etu92", + "bc1p5h4d734rwc8d4h3pg5czty5avfapyaq5g0pvuz7g5ff7tpyq6zvqvjgrxl", + "bc1pd59swuvuwjpcqeqdcut9pxrxpdehmn4eunwyfmy76g26vwzcgfhsa8zsrk", + "bc1ppnhpxhsnevur9qt5dd05aaewmy2cqjc6nhjcr2x9ky0wxgqqe2kqa9pyq0", + "bc1p8crplmv4nxc5340mwcnh5dn9f3wsxp5amnr37q49hul8t3ny3cdqyntwru", + "bc1pqdmqrvlnlgfanmsnswyqllt7nnw7s3aa86al2y77755zlxw5ue0q5mpld3", + "bc1pj8srhw886ya9jjtkmdkhdg84t6pr3xvpxr3u299ue6wm59g8cctqvkhnp6", + "bc1pceyyxxxgdtyvfm5kfgfv2uan3eskggwsp7psa6w5fw2m4y2x2elq7vt9yd", + "bc1pdy8hzdm5euxuleee3hqgjg9ngcaj7v9dhnq8fewcy2h9yfm6uwuq4h76hf", + "bc1p9rury4ru04ufle0564mvm2ld9v2a36kzc9mrxda9np24x5rdxj2q4pj35z", + "bc1p80q3dedea7ry4usafypwxdyuqhp4g0phru6v84lvr3pexcxv4t6quvnuk8", + "bc1pdt52whc5xz693y2cwts50hgku7psqkvudz3u2rh5wdm509ws5w7sm7xury", + "bc1ptjkz67r9f27mh0y3zskk2d7pxn0ydncjw6yuf6fgtyj9v4s76lrsy9ctl4", + "bc1pcw5yz5dmsj4n03524zlssnjan63sd9s9w5ra5zz36ytqlrvl2v5qc0gyql", + "bc1ph26f3y9255z5r49tpaz9atdhx56er3v7s4atguerr5f0xrt985pqqpvl76", + "bc1ptuvmtgzyhqqcs5t8tr2yervepnkd048e06tqkyy990emlc70g7kss42gqs", + "bc1p2dxaj20czkzgay3pfw6gsaz8lsdnw6lw8ulv3rradq8zy5sf4zxqs4ku0t", + "bc1pyar78glmk9eccp5rdzypwy3dm9alegnflsqf095e6kxt27s2ktjskm0tj6", + "bc1pf9nfh27p4etgnquy60rzu2cdc5mqx4e3p0m5rq9xq52p7yxp30psg2swqt", + "bc1p2eapnq5yj2n29x4nh5u54vfqssn6u4rxtvs5rm55juplzgftmh5q2qrmfd", + "bc1pcnsdus6ctl6m7d9ykqu023tt76n9nuz3zhrs3mrhk3due2pmtt7q27shux", + "bc1pt89qdhasl8kn3wdvacvn834nzk3lgl85rfxls26lwcz6hv2scynsd3dx7p", + "bc1pmjw09w876ad70aqt92hww3qmfhwmngnuzx8h9suxhdgnvsmn0zpquvq0hd", + "bc1p52rtryn7z7cqr0s9gc6wuwguqvnwyw8zvhd4p5ca2dfg80jlzupq57m4x5", + "bc1ptgwqvzfsgglf3jjlp7fh56cexreqxe2v37caq5j6uvwng5l66n5q5dk9mg", + "bc1ps9ln3slu5j46mjmjg0wgfswrmv3uanh4lywevvtqvg2luxq8ygds3pgpgz", + "bc1p56v6exd47k5n96vljr9dknv4zkxds342t2p5u262ay75rfv873eqrk4j5n", + "bc1pp6jd9r3wq0fdqx0jzzujqjzmzp9fxqsp9xdxd8wg0dnhavg2xv2qpn5776", + "bc1p9fls8jrlvlnkdm033ujpq7x3t4meder74xc8t00w54s8s3txcdsqu4c7c9", + "bc1p30dje3v3ya408454xjh5a2nwth3xzt4yj94t0lfutcgsd3smdyys77hkj8", + "bc1pv0p3j8cecujr6v7altpjzdwvr0emntkyx5xv8fnw6guzxnp8k02qdj7xrt", + "bc1pgd4zdkmj4080reh5lfp0gyfq37v8sy7tmyfc5mmr6kr002r9ksgs7wswk7", + "bc1pgfsga38vyj5090nfltq8t27mm2wt6cvfrxej0jltlsf5p0c5j75qd8d952", + "bc1p8w35ydlxg4chut79e6t58fgh2hwpr6jlmnvtpl0788kc7kh9yvxskwmxcc", + "bc1puceee6jcr4qykfuccgxhdfaey4qa6grg0vcglty7myttqh9q8zxqxgnwqf", + "bc1plyjsgqwmp4w99aqfstqqauz038sce7u7y0lwq0l3jeerwxlr2xqqq2ws04", + "bc1pg0rgta2kq53qsgfh56uvrp9yvlfu6v4cj2wrgk3y4dnqeuseuvgqg424um", + "bc1pxux2ex4r0wu5yyjqlcqjkatcyeev6v47rsl2ld5awc5dayd6txtqw5t7sp", + "bc1pvcyam7t3y5f26kd0j5lj58lelsfffnx7k0nlrpz2fvvyvwvux46qj6jc6t", + "bc1ph0d53rw5cg5vj67w2a0z6n24llwzj2faneelt3p536ct0l8ced2sywfupn", + "bc1pmrys06x7qtkxhv38dcc8q22zfwazxj4uz4u40edjj7c4kyzx9txsjf668g", + "bc1p6dh90jtv07uk9jlzcr76ss25l0uknqvdn9m0el4lt9vkmqjy6p9syhwwjt", + "bc1p346d28mqyga0ecuhpg0yu650ghg7rtlg2cly54ulh3fr4mzprnws077s52", + "bc1pwt6qdqg4lu588gw6l7hjkqkd7j94rpyv65gzg70x440estednh4q989lcc", + "bc1p4xk7gcrmrr208pzclchrn57q7d3k5lvh9q68u42fx66vqu3vng2qxtsj3f", + "bc1pkcu5c2gnvzpvqts5nusfl5ujmp9l3z4925kqgl70w92q42ahl22qldel03", + "bc1p9ny4k3ewhhchndvz9vsk2zmsmuv03t20vhnym3ygvfdtq5dmtqkskk28vw", + "bc1pvtrt4xgw2qwcn9n5nx45v3kzqzd0a94ytl6stwv74ujzp78d7srqtgvemn", + "bc1pfcd8kg8felqxrvt93xdcv7qsymz64k3we9h9xy2k2qehjnmejhrq29w0m7", + "bc1pr9gpgzwgmyjz8gwr3eft4zrg8mtcfdfrzu2fmhwjtgmklvakef7s2cjlgv", + "bc1pft6r70j3jf97m0cpuvagv6x0whserppq6eh35qzlmhg4lkt04wgs50gccm", + "bc1p95wsf8lxt4f38a3l6dfm9gnajc94tvucaju02djssatxdsdn9fwqqeckm3", + "bc1pfr9y0tfgwcveffql8ayeuu7vtchq2mxmn483k27ps0lp7n0ml9rqp3vf53", + "bc1p925mnfz89x8nk2pga2p040sqqlrtcun0entxc2rw0agjktcmmcxsclswta", + "bc1pvkyrc9hwmwqqzsgttq758rnee0sqwn7fqetgql35klc09a3k3fqsz085dy", + "bc1pzzzj8pnmkcgl8w3c5dkd6rm658ewsl2cdpfd7hwl28qaaszftpssrrpqh2", + "bc1phcqtn5yj8766f3j84ezmukwz5k7pnu475kjsg3ee7mm0hqsf9jks2ken22", + "bc1pqsdxnw0v2nrfgh4m5tuep6e7y344zj4lmzq3pc29fyw5ag9yhs2s930urn", + "bc1plkm4en6dm5f3kfaalyedtsymwll4hrhw0qwdn98dq5nul07ufv7qne06h3", + "bc1p50y09ch0n5nf9nylm48dd558lerct7e3drnrvk2k03mtkw72zgysdl3y90", + "bc1pcvk7xthjepvk6gve8vuw707jlg06wcfjnvnq7pgq4r3xztsl0yks3pxdyc", + "bc1pdq3fpms3z5vd6z06357dpunh206yefc5hjyln6vq2zz64jr5j3ks7ta4hz", + "bc1p42kvrm7tvcya5j53rcmulx3zxnpr7nktfjwvj7qagncg0r6h6fdsymwf0p", + "bc1pwaqs9ehjs0sdtanv2ej4jdg697evzj44tjhn2hgr8eqmj5pc4pjs6x6x3n", + "bc1p04jk7zevnluqrtmntrrm5s0c4tjc8msal4005lpg36ukl07zqycsxqesgr", + "bc1pms0agx034etjpvdtjvk8vyyc8r3zccuu6llr2dz8h6th399c9cnsqljxzz", + "bc1pnz7e76qt68flhmj0p9jqx7sh992qg7hxctmn6cfmhhlrktmux89s0m6934", + "bc1p3lrvyd5m3833lnkwzw4c26nf0tm5gq3mvmllm0jwsstcugyz3ulq9xrzg7", + "bc1p04wn8tzdarl43s3etlhgf8uy4pj6k2hpzuz7uuqz2qmhx944lu3smdd2xn", + "bc1pt745dhq7s2pra0pmu7td9ka0ty537efhwdvdzyann49rxy48dftqty355q", + "bc1pugpxs9tv86r9d2vxgz9ylga63zcwmvzrey93j9g7xwva384xexzqzyxx98", + "bc1pdjrywm3qkeg7hhxpnx7l20nsngczexwc7pn49tgt6v2tagm0mddqg6ym0c", + "bc1psygln6lsjvxht8yn60nfn3qylyyt907ck8z5kw3ld9gy8c9g39qszdrjpe", + "bc1prqwak3vtlfyed2qnn4jwu8hf29q2gr3xalnc6xurazx2ms89j52syzyjh2", + "bc1ph22yj9agn08ulz33y40ah0e60wwa59yrewrcgamhu43y2ephmfyq0w67q2", + "bc1p59h7lf2sy8lslrznq6025vjq5sazcz3shv7lp8pnwmdudwue9q9q0m8kty", + "bc1pk59xad6mwg7umdrulgukz7e8540jlwx7am54c2h67pat9n40mmeqwjv68f", + "bc1pa2zp8048wf80tn8d3q69cu4p05592c4spm4ltfpf4fxfdppyuswse5jpxg", + "bc1p3jr0rl9z8824tx5xj2yknkzgf9s8yz4m472awk2kddnt4ydrr3cq3tvxpj", + "bc1phv53aj0ez89q84pxghsg0wt7ugj85ugw9k0mq87f58524v8636ts2sg5fw", + "bc1pndm92xtc6ua55hgyw85348xum7sgc7azhayfgd0tpa6e04mf9hfqwnpnct", + "bc1ps0qvwazw4vgj9s7lg7pk4n8mkneu3kcs70ey9x9cvns7s4kjv3rqumph3d", + "bc1pvq2zqs3ejjfj2uuuu976g96xdmmv5fl998dngnx9qk9n7kdcgtnqd97aje", + "bc1p3hltp5anj2v8ghjwvzzqt0e0nvhz8adw29kcqrvw87n9x0stx74stj6en4", + "bc1p4d82365h3x8a3glrlqk5ryqfyrqqntztepvcehync2972zks4h7qkpdfty", + "bc1p63dul2all9dej4nlcnf5745f5qnwq4ddgew8r8kyj8vf2nku6u6qfu7zy9", + "bc1pa0yjxmzd7uzvw0wyehkky7h27xxh0yynl5u7xu63rf23m5w2q7jq4vxdyc", + "bc1p59el3gweapsx78jyse6m47xma4w9up3cdqpqjwm79cd6xujf0hwsqk7vr0", + "bc1p3z254as53699lrltt5e2f6gx7lj7eztmq7fe8prtt8qynrp8gg7qpnn2cq", + "bc1p0nz0kc932au5ayp7x4e8evt36apl37rnw9gvvsjz7vdf6wmvff5ssvgl4d", + "bc1pmwqxyeksdmhvne9lja75k387n35h8jp02uapjq5v9su974pr760swp6le0", + "bc1pyhnfrxfeaqhce2h5aplyp3wv9u594pddu4xjqup2ewgkj76uavmse8725g", + "bc1p4jsdfu86fxvthpprtj884ckkadg4m2pj8j94mq3cyp9zvqqznmtqdhfjkp", + "bc1pdtkw9seqtwcvayzc56q6vtndgmwcfmqz2ntfusn92rur7qnrvghslfr0nr", + "bc1p8dwylkr2ylef73mqh0udkus06q9tu5wq33aqujaecv3fp0kvc6jqm4w3mm", + "bc1p6hfmw6vjqnmndl6cqjp9kc2myuhhmn4d88ynkh0k2k8zmum024nqyygrcv", + "bc1pnal7fzt7ar4levpfy7fgl85cpymefpp3uqnkznvwz5z04a9v7tfqmd4jmk", + "bc1pjtsxw5l2fzuexcq4ylgz8khtxhee5nwqq532kkvj9ku68axvqpsqj7jkkc", + "bc1prezdtaktvr96l8kseqpfspuh77aj9j2nvz5xn97wjulhpu6ekklq20gtz7", + "bc1px75w0llkydcnn0m89grqkdncsu6nq30nngllpsvwk53864zjx6fqn2s5rl", + "bc1prdyhvusedvvz4e27h2kfdql0mfyuz3ac0wr3rgehlvzveda3wwls2pw3z4", + "bc1pf952ujhr8h7k3af7h3nj00xw4c0cxq3cc9hd4g0q84aa2vqjnccskghtyc", + "bc1p9gp2salvpx4naf2c78dv7ezeaf36h8n7fc6k2r8k5w60vs3q39rsy634n5", + "bc1pjgatuv5sfhj4x4fg64g7zc4qy4mk0w47q24hzumz2x56tgkffcyqzx4npc", + "bc1pqwqy7jz322xut6yrg85qacwt4mdzc45xt48n94czuupmme8phvasx4suk6", + "bc1pc9u56drlwfj89t4vxheh92yk09m0qf4nwz40dfyvqs5amesfefaqzy6w6z", + "bc1pcetkmewlcz6mcgy9rdl4k9ytk7656meswjzfs2afcu29x8zdn3zs9308th", + "bc1phqd22utexvkskzpjsrv479a4ar2vex5e7vqcue4gmesu5yws293qjwqv2a", + "bc1punw6n66dfch7nnqkd6dug9qu6yaspt6rhajv6qvh62zsys2a8y7qxen2kc", + "bc1pn36u2vy3h6geetfg5fmqdycwny7de6670afhk6e8uprnw5hjkj9qued40t", + "bc1p03uzwqj04wds6aenp6mmw8a65mh5nlf0wvrvtcl6devnywz4alqsnvzvwc", + "bc1p77xjcmcpe9qzjy4q6253mq7jyn0uxc54qw530qwwahujlld0w0cqwucjnw", + "bc1pztee9cad79y26kll84aqflmanj7a0mrcm0004dgsyerpe7vtp24qsrntrh", + "bc1psue9uk3nk5ayxsn6e0lw4mp8rm6p0ktwx23m58mn9spt8g20r5aqatjlt9", + "bc1pvdhy62tpkqdh5f64ustkxlqqjp67khrpy0zcg7y9nqv49yfk2g7qukm50x", + "bc1pqqt2m8zy58j3m8gcxsqzhugxphsqjs2uhfwjq8wjuzp3aex9s2aqqg0p0g", + "bc1p24hhrduvt5u9tmw4au4a3y4pxn2xr4q5w6xt6zw44y98sjfghepsr23qyh", + "bc1p6gaje6furj85amjjshdgutyg5fer8e4dqnqp6y9skyng3uknn7hsc3ck37", + "bc1pgtpw82mncf8dg0x54q5ejx97p557a0nuv75z7vxneqvh5cl5hrwsy9fj3u", + "bc1pxjgudxsy6rsa7xwk29m7hqcmvralh93vqg4v6fwv3gn98gvsaqjqkfyjhv", + "bc1pdn03l9q72tr82c7dlzshvryz45exqsx5thfld5sql8yxnchl4tfspqr4cy", + "bc1pw0k0akp59rfmqdnks0pztr36zypcp4aevq0v4vr9ehff8zzsa9gq5u842y", + "bc1p6zveulv8uqx5y2rsatmpegnspjud7etl4sjr0gsw6mtn7phdpltq75yssk", + "bc1pfqnf4vu2rzx85r2ugg7nex2sh760ft4ls5feuxh95d4xyhwhgh8swxsy0j", + "bc1paugk98agg8a5v663kxrad77kaykuwjezpdu809felzt3304s4wcsk4rt88", + "bc1pcq5s6qsydd2fgztahu70y94gu4szdqydxzt09ycas9tkwnd7kcvqkj8gkk", + "bc1pv8ucqcw5v3n6e4vsvjvd33gms23332733f4d3lsqtscus36akqwqekmpue", + "bc1pv4hz5ngv98gae2quyg23c349c5ek8d84xkz8weajpv8w69332dfsza4093", + "bc1pdujw3fq2cajjl2kd6m5ytllq5tr4v25zmzv3agwjz4947tlde7cqjdngzw", + "bc1ph2j9hd9wlzt775xtkzvvphqlysgfdxngaakke0uyksvvnmjtjrdq97994q", + "bc1p45x0k2amp44hrghh5qhmkucwv3y67enx3lp45mss35rkd62kfupsca47gx", + "bc1puu7k27tdvv8vcmgddhypzcclzuvd7t8yhdptmd9ga2272qpvxyjqfe9jkm", + "bc1pkq68hhx4n0se8nwfcs8qlys0qvavvh9aqc62trm7et46v0nhz75qq5cftt", + "bc1py042wclfyusfseqxjw88p8v6lyzvy2jhtj0jk3us6fepn0sxgm0sjz850h", + "bc1p8jejyqnez7lyyuddwpqqd7lye7gxw0extru692ekh88wyk77rxrqtkudhc", + "bc1pfenjurqsc8rxylv7xvhn94nln7rzls8e0dg4w9d53ddw5mvd379q2ufqsp", + "bc1pqv796aa3f36g96sewdh7v0xt52r02l9694tl9uy9wpa9ma6nxg5sgz97qw", + "bc1p4fk07fmzvskmq7rmwek32h4jh24py02k0hq848qspedqwm4rsy4s0ks639", + "bc1pwcpf9378h8zk4w0ua8py4e9pwm6pg7ljjlznq6qwcrrt29ayxa6sgq0mml", + "bc1p7xuv039yskzlred7r84vcqhwyg0yshem83jr005l6ke7xkaxpdjs2mhug3", + "bc1p8p4l069m8fc6y423a9wjkez3pqedvvx37ynwtnrzne9nhu3cdduqwzrld6", + "bc1pfxtta0l56pewwxtqln5r7atw9xsd8dr67rdxgaraqz7mt0wg3e7q6d9ewj", + "bc1pt6uddr9ezekutk4cvxx0u7whylsxn2ecphq7czqx6dxnx60kf60qhdp7kp", + "bc1pryn36neq2gdwuthecdhzulkl4af8l9njptmgrq2u832ke26yv7rstttry9", + "bc1pesgxu8eqf4spp2m3xxrd5tr8a3406c2s6hdmnhgfrf5l6rn3yels6ed57a", + "bc1pt0wpwetdhtuam5gt0as02ywvgpclkyknu9vgph0w7rqfuwg0utfq02yptn", + "bc1pft80mv9j84gw5984vw6tysnmuzc7zvp5gt048sguly5g8gwm9zrqxm5kfs", + "bc1pldn6x89f2p7mzj5u9uuxrt96guhee0zqctc77kf69adxdqnt4naqllyw68", + "bc1px25vhdfjwayq8wgxape462k2clerj70w6vwq90rtpa3a7l0jjtes3hc6pp", + "bc1pddxlhpwxt7vun7qqhx32anqahndcxx029g6pe28lauv3f43q5qws65lh27", + "bc1p7qalatsr6a3au2dpp60s8j4vn2lum6mkhuw73fmhxyuh9xc8ah5sh55mqx", + "bc1pqhj68nvs9rkvl9wxp53tgk7s2xeq2erej5qjx8wpuaxfqqhr784s623t4r", + "bc1p7njk58d9qy7khyyh65vy597v4py6046n287fet796lgml9y8ykgsxhvrz6", + "bc1pkucyev53w63eexpmhlzp0472cfh7zlj7th6ceg05u8fypc39a69sy3mlns", + "bc1pzs4cq92tjwp4uvrjutfczz27rjp4vddffezanyp50rl9lqxzmh9shgx0wh", + "bc1pxxng0dxqn2ydt046teemxqn5l40urnu4rh0jdjpgpth3afta4ytskgetsz", + "bc1pdzshtz3yx9yezgn4hakqgzkg8c9nmx7kgt9wtkzt3qqv48uxr6sqddv6jd", + "bc1pmlktfhu4qv2dlwua3l494lx9fet849y2f0s8jznh58292y9y7r0qj9vqhj", + "bc1pl4ktyykmc7twcwu8avvf2d8vc3qjlp7lhrxl7kc7n082va7xcxfsvth2c4", + "bc1p3g605etmvrhv4ykxnjudmap43plja2v6xz03cejaf0nfad5cw3cqa5zan4", + "bc1p4hqltylkzt9p9hsjjgcqe75qp4xe5s2fp5xady6rwfj9fxhu52hskz0qeg", + "bc1p8wxmwyn3ms9fs0vfzdkpr8vq7crmeh6ppljj020phrtupeejugtqvpe6a0", + "bc1p3fumwgsa5ynegnz8rxs2a62m8jzumuvj6k3mje24v952yma0c9pqn86emm", + "bc1px0wcn9zps7pj3djqwv6uvpxha34c7y55cxh2vwsylqatjsp34gcqvks7n2", + "bc1p0pm9kth8rff8usezgjc0u9ymcwmpl3002xj3ga8vqe6ayyy2xvcst0q5td", + "bc1p0pr3nrfrexlt8ldjm6uk5f3z4twm40g4y7ry47ud0pq95ru54xgsgl66ck", + "bc1pcqrqekqg96c0462gjsv7y8a0dk6kztlgvhl8h3tr2z3ucwqrkzjqylzwc9", + "bc1p9dngjnt57kkyjf9wn37h538ndq5r66cca6733rxk0zv252zgtnns5djskn", + "bc1p3wxpwcqw4dnflnlcj78zf4jcgdgru9zwgdqdaqlnlwpch72rhh6sprlaj0", + "bc1pkfcmkhdfk7xajyua7hf65dcarsfstdwlt979eh9lzuvgyeydajaqd6pgcg", + "bc1pv56umkc59ez2z4dzhm96nzutn92hdykysywza6au25m5fl37p8gsn2zunw", + "bc1pdty9pmn8lqzrhj62l3vz0pylr92k3288yhmhddc8p8acw54fv2cqj89ygn", + "bc1pga7fhyl6r7ml93h4s659faqua5l8uvmz0c07kfxcrrf3c7amcvjqrhyxmm", + "bc1pmujve9jkytyaw4axkud72rd82xsk0zt57amkjm4kcxumnwlaganqlp4d2s", + "bc1p92vvtewzmsz48vnsznqej8lhwg7khr9edzx36ld25zlttp05nh4svglcl0", + "bc1ppyrq6v8c5ac7e2h0d03fpewva6a5uszgcmfh0fzlxns006fu9htq856adh", + "bc1pw7rhun77zdgecjfs2dhfp3fp9y2yqy30vnay0y0drukvhlwy7z9sv6rkf9", + "bc1p0v99ynqu4j3cgtfp70eyrrmsk70jtm9re0ym673k0apr40gapkhsteg6uu", + "bc1pg8zaxanhydpjmpt7c205q5xhlzcvp66vl9hu5960ps56j6c54yuqhjk3aa", + "bc1pasg9wke3vd644srfku796mp5m7j823wacq6pqve8zrp0e4yqxe8s6d9gep", + "bc1p52apmxfzj086pft2ap2uu93zpgvznuj4z76m7f9qa73f6xdydxkq67zzmm", + "bc1pusqzu8ffd7a0x4eavvsl2pergqe8vr8244jdwjltxafn5aqqkdes9vhxm4", + "bc1p9lhgjm4s85mz49qf5x5qh92g8ntykzvau7k3uv8nk0ghur65fc3qcxmfce", + "bc1plvspcd7mjtmsdjt5yghlvql3e480uchzc95ht3u50wzhsapwfklqv8edkx", + "bc1pcghe352cxpjfrymua3t0hjj6r46ax9n9nvp6a2k085nuj5taaj4sdgkf9h", + "bc1pd547eem6dwc4rshz57spswv6zsndxmz2kumm9mdnq5dm58htnccsn6pm9h", + "bc1p92sn8kg5tpfcegz9wvswsdfjtz34r7ew594jgrd9kdqugkgk2deqpu9k5w", + "bc1p2dqxndgw9v7sxza8rgcrzj39gd7htxj28vge882h65vf8aanul7sht495f", + "bc1p4unsdr63z7c87nmnlx3s2rqq72wtjn4mnpfvcj5x58hc749fstnshq9cnp", + "bc1p8y03aaatxvdy8hhpd9za0ykpwwk9y5wch5tmmt6q486kr3ke9dtqv60mgh", + "bc1p9730j4k7sgeqf3h436c578h9k27sm6jc6jvgcjnjsmnjpgcfgncqcfy9u9", + "bc1phefhskl8mwjawztzm64hqt52jdvsjqy6nvwl2et688ajz5lu72zs3w6e3l", + "bc1p8hku7cjqav4z8p0ye22vrl3zunqvlyz5dkv5hrwcyfz48q3l462qp4g7j8", + "bc1pvrrk7qgqwx4xspm8tpk9qrz66eh6gqtzq3h2xvhaqhftvxztwxuq9egwmr", + "bc1p66jc7pgk2732pgke6fv86jkuymxheypcsnmrrx3eyzttdnkmrryq06a6pe", + "bc1ptxh4vqql4yy5795v4szdlydfykg8av2223cj8uzx5wtfc0t48pyqcj9shz", + "bc1pj9eeh6ckxdd5yyrkprxpu7ev4awdphpgdtdsmmwa4pz5gst07uhsms5ukg", + "bc1p7ef8wtmckxrxc9tu8hxxr2w0tr323ea8ey02ctuyk38ted65794syjkzmw", + "bc1prq7jrkn8k7nd84xv4z9a7f5eun64hzs5py2a0e6wm0wn2kt6ftzqvup8x3", + "bc1ph9rwk244l0rxk68f7p97y3754temtj370s0z6dq0xfklkdtxjk7sgtsqy5", + "bc1pjhzt3gdtqppn5usaguzq7la0ru94vcueh4cxmvdst5arwm3puvmsu909qt", + "bc1pmq9ar6dzhf7h9qpwhg7928mxk5342yrf6zhtyj4lhyxtusl5smssvg6haz", + "bc1pr69xnls4k27eexjcaq8pmp89gdlcmn6vkadrwctp95737qrfk6sqlggwhk", + "bc1p9rc6e4r479cmpjx9pj4279cchex7aeh3rfjast8td0vjnzyv74vs4n8e0t", + "bc1pg3uu04pffs4rxu9ws8xr64jmrkdmgpdmmg6jmehtgrhuf0lpr6ssgl2yv5", + "bc1p0csp67tasnjzujev6r4jempz2m9hfzcq7qgrx9nm7w7gazntfses7da86k", + "bc1pzvehggl50vxsnnjcl2w9zj2fpnltn63pxjudmt82hgsgt6qee8wsgaxll3", + "bc1pkjqvmhp4dmfvsmk9ahylaqwlpgtp4kwk8x6s4dxuvyw7es6hr0esgy9rh0", + "bc1pg36lfl0gplk70sq2m34rpvkn6t7dwqq02yrn74etdd40sfzvuhrsac3ata", + "bc1pfrg897cv6cpjeuwdmqdp20pprjf808cnvzpqdypa8lvdc0ka255qthrgvd", + "bc1p0jqd20vnuckq9z6ku4aenqtx424pseu46w02upx953z0cnq2elyqgnphkm", + "bc1pfntn9jardp5az43nq30jhf75shrt6ts7fapguccdk8slzxqlslyshu9kx3", + "bc1pvgej2eukc983dckfsu2t9jfz29j9naplj2d95cpkk5gzr7zv5zaqamzgw5", + "bc1phyq7rqvjyunkevcx793hvq8w9gn5qr4t5wa6t7zsg30me796q7aq8ayerh", + "bc1pxltgr2ljt7dm6rc4w89e6fwasw344zpgd4rwges3sdzjw864d34s4zzupg", + "bc1pyf2y26fr8a0xexs90qcueks0zzng04wuzxsyutfjz4dlmtha0cgsajze40", + "bc1p4plcznp933vqffqtgsklwg3zl2ecdc0a8emj0k4z9d43slz8h86sd5wwmx", + "bc1p44usm66fam27wfpgujx7j8swt5a0gxse33vnqkvx9z4upwr06u9q3a8l2j", + "bc1p7ff54qzn7gezcqqsv9w7xr674q60zvz2yfycu9accs2w0mvd7ppq8pdg83", + "bc1plau3k3h60jhrnpnycqv3pq3zfa7pzzj0c54aajw2adc7elux5yjqfrz4rw", + "bc1pxp4ngj9j73x4hqggfv2qksz2wqewq6649y0d48vurajuj859tjpq84eynp", + "bc1p5pygucqvw5xv6d3rgkyddpqtwt74pk0ewpsrnmqmr8puwymuvfhs8vyjta", + "bc1ph0p4g0azsd9nk2aewphqnjaj8rkjjhrrztl0emx3m2spc00mhjksnn4c4k", + "bc1p6ls0av6uwr9mkl8qdq3lxuhjkw0qrfgn7t5g43qvzck38869d8vsyxekj4", + "bc1p54zy2xp22msqnewsppnpnuv50rxwf4qjqa3wp0uprayl6zgegrws7pc53t", + "bc1p0ndrrquq2wp82z967yrwyn2e08keml8ww9uvq27uw6lgtar2e7nsr4t74p", + "bc1p6az04ufkud0scyvn379ffcv5mxayxxpwuf7pesp8u4kkmg8epchqvlstu4", + "bc1pjxpq77a0r9wnk4vs4lg66dpf8vh68wm7ux24cl86f9uenvrwp4zs30aagv", + "bc1pglzdr6ujgule883elwuugruxrmdequdrmawm8wmllueclteh8nqsylmtdr", + "bc1pgxhpxgjfaaukrny06a8hphemr6dslyp4lmgn77wwawhh3pec6gzszyp9de", + "bc1ppmxz5cykgjq330n0u2wm7mkc7jwc6806qa0jcjduu5mjkhqsp8wsedyz55", + "bc1p3ju93w0mm9n6uxcv5550gkhewxmw32wf32qm4m494qtkqjm2xfjsmqqukn", + "bc1ppeg27hrsvgc2lt70h6rvcfnsce2xlfmdap3lls26suke3ntltgzq0q7wl2", + "bc1pquut4agqljljxhwd3d2x4ag4tkdmeqs6c8x2nuhuez8t4fxhzq8sy35rhf", + "bc1p9n85224xv99ph5jzcdta6fw44cl000ccp5mzr7at22q70zrkh3ds6qfqw0", + "bc1puae2flsuxc4nkufz5hv072p8evmrvght4klsyjmds0fz20ev8rnqqqmg2v", + "bc1p95yg2sxx8u9lwnguve5h7x3f9gv2hc6a6p7yld7tdxtx6qa39u6s2dpy7p", + "bc1pr33070rejz72hqwf9hdupj2025sh54p6n29qf3q5x6wjccp2mazsq6yx9h", + "bc1p35aamz94yseuhz6lxz4xad5qrgghfyawtmfl8qy99442zntcwcnsdtk6h5", + "bc1ps730ku9j4d63qp5yee0n0jtztk354x4vdgdr8r8z8m3wl0mf6fnqlty8fz", + "bc1pvcwjyxr8zz3lz60tzedzcqlen08q676ysk482mxn50gly0rw3l2qs6du65", + "bc1plq7qmwga20vh42sxkmsaeywpvx62a8w5hap59zvh7qhrk7mmqqqqajq30z", + "bc1pl6cdl4t83r2qfn3auvx5p5tqpejar36j0raeenexw52e8y5qkwvq5yguwr", + "bc1pxwxhgvh682dpamz9guh9k6uamw73sw6kzu572d9cppqpx3rxjjtqmv3l8x", + "bc1pltput4k2pwm5eg897l9lakv62vmtes0lngt4gc4s5w9nztwyunxsapywef", + "bc1p8yfy3yqy5sqsxz88su42jv6q4ms2ma4pjswqrnrh9f2m95emml2qf63lzc", + "bc1p66hktk2qqp60g4pecyljan6uwr9ggxlhnngl42075wddhen4jnasfg4efn", + "bc1pzfhhcxuj6wskgzuqv6pw5qraqn2lt7yufvmtw4m6davg4e8uht9s45q4qd", + "bc1p2qgmhjs0u75jegpza5c7tkzkl9d60h23dflsy296fzgwq3pssk6qh7z4p2", + "bc1p8225cdenwcnt4lt49rj6rxugqd9lnnc6jdzdp3xxv35564zp3grqf27px7", + "bc1pl5kgcy6f25hejyp56mx6vkc56rfqh87m8n647096qzv3jhjxnruscm3nps", + "bc1p3pkd8hu9txt4esm6wxcajh0jtzvxj5p9fe5g7scr80dylmck5xqqxmd35t", + "bc1p50wr66y99asxx6hvfqud6x9wzw93c7kg6huun8ewvpx8lqf6zjpqz9e3ce", + "bc1p9kt2zka86q79yqwd6qr50csq5y8r6mlj209sx5cuwfv6g6ke3g7q2a8nrl", + "bc1pt727ndyc737xn38tymzzffp5gh84gccr4pwxwllwe3674aupcwxqakhvjs", + "bc1pg86a3593zxdfyz8ch9kf9zqx0sfhsvp57xl5jpwzaa03zh8l3kfse8el34", + "bc1pv3nvlaq9jjd2y2kut7kz2gkd5jcndc6gxh78ce3q0tt5x4qujm3s7lejlu", + "bc1pcjasvjw0lx3kxnvsngrwayask6exwacy52wmk6r4zfmylrulntlslshj98", + "bc1pdtj39239x07hnwc7ljcd8yh05lq4z2u5ak0ufnt6wqntnctzxntqf8e8n4", + "bc1ph6x98uys065pjt2g2u5w5xkxpn2uchn3empwha8ap3u04zusge7qk2zmmx", + "bc1papyfvvz03egen2kzqe3j4qs5tjxlpl2776pkyfawwvpmvtgajvwsg52fm7", + "bc1pqn0wpawpdlamj6f3ep36x2s9kntjsdatx4qrczl9z4eq3rm5hsjq2jl07k", + "bc1putwv9jaqfa6qsyqjkue9yv5nusmmp05tkp09g8sgr8d73tkcphhsh678l3", + "bc1pkxfkhagt49gl6vynmczfvh49m78rv24tsn8fvt87qsuy4vvszcxq3kz675", + "bc1pfa94cercpl53ug5r9p3s8q5nhk2lwvuwy3zlnd0gkmaamky3cfrq4qu3q0", + "bc1pys3k877mkgnd7h8dm09wuv670e8nnayp5zq0gqy3tk79yvl5zwwqp6ak5h", + "bc1partnuzkzp7ka9qajxa6d838fwhztnfhg07z0xlkpr9jft57uyjqqnlpe8l", + "bc1px30f2w6yevuqesnm82mzcpwwfvnu9aczcm3j95r5k5g8vjkeh00qkpva3y", + "bc1p7swgywh4enh7asuzg6843s6d3e4yx5wv67s2f0eku7hzpazf8yyqqfd68n", + "bc1p5v2gulnexc9qmrdx778ehee0ezw34mq48ldfh2xe6zr0h6v76vnqg7fnyl", + "bc1p9w2wzt33yvt72dxy8wr6kptzayvx5lxdjrawl86srwaxajj52a9q2ha889", + "bc1paxuqjm78e00mf2yua3yjf7glmzufqk2yp3vd3ulctp9eusumuf3s9v3vpn", + "bc1p9dh728mnsp5hev7a6rhjrgeads7l0634dzdrccrfjvqt55ucj08qjcta2q", + "bc1pka524tr069yyfdck70v4dv85fasqzkclkje5537swezf69w8htsshm2ngz", + "bc1pcvwqgytngcwf3l5crcpweju7fn4v99xqdwrhxufy6hu30vc2790qf427f8", + "bc1p00r9vcrjm2kkhf78w6xgpfv0zqft0vwavwd6lqp5zq8d5xe8a29s9052g4", + "bc1p3x6hq7xhgj3k3kwpq25hlm3zus29avuueu2xxl8fl47el3v46c7spgcupy", + "bc1pkdsw2uly9fqamfdz6wtmlghpzrgczracrah9tv8lt55ph4n6zjaq5mdyh4", + "bc1pau4jc5j2vyajp3f2m5yskk4hg4myutex5spn5z4xhmrgefjulzjs95ugl9", + "bc1pfhjls3nzzqu24q3a6vpv2rp5g0wv9cna5gq7zmhhs6wkps0ex42s3kxree", + "bc1p7m6nnz0ucga7sxzczl7lzj6542c6xmlkjq7xveffagp0nh5adxcsn7m2pl", + "bc1pyy6smzrvxvvhfdea3mx58rg0fe4j02gv6ew23ulh50vrwzvunlzs0fgypw", + "bc1pw0dn0skx8tvcd0e5680ml4tpe48hxfll8q2l5gnnyygqeqvcl36s5dgzgn", + "bc1p9awx9qrvak09dz652784a2rwkywmv4ek3f0fyun4gpef6tn7gkds365lcc", + "bc1pjvckgd248l3kdu0ktedhvd3wwd43qplszntd6ddwlhyfxxdfngyqc3e35x", + "bc1ptc7xjcyatxjgy7k5xl94rmyhzuk333egw5xsuyklhdn9vllhf9us6fhapx", + "bc1pave0fwq8njkq502nf5ezjtj622d27fkjkt09gdg7f5ms7d7uvkestgxfr7", + "bc1pdefyxz5kduq7dj0tfc7wdt9zcvguhf5wzua0df3lrtpkmhyxzhmsc4rw6s", + "bc1pyrsxkrtpn4fwfulsag89sgzueqcnyuklqd8su3r3hlemnjcluswqvrq85k", + "bc1pkgqnc5y9hmz750g5jexcpx74rf0f77g0nea9s5zcwx7eexneu9mq7vq3t0", + "bc1pf3mjmglsye57hhksumqe2md2zwlg6m6da7sctcy3eqqj3npapyas30afmx", + "bc1pllzfndmn8n9xvl6rvtmj8kx6ankg3vlg946svqu2nneu6xh99wcqjpz55r", + "bc1prsgww0trtrzkregavfk5xkehjmjv2uqxuawesenxftkqyff3p3fquy468p", + "bc1p9hqklzlf4wsrzqlkwhfgltrz85erhf2jyj0d48tvapuz3zg6s24s7fs9fh", + "bc1pldaw8jjlp8nsn6k4qulpuppgpdzzhlsgdxv46k3a024hsak9gkkqv722s6", + "bc1pp6n8d0ee6xwaw637wtvhqc5hdgqj75n2dsdmn2tnqdzkzwd6hnwqas64rj", + "bc1pd2dsc9ty2npppsrjwgkk608xekz73643k436dzrmuc6m93lyeq3sjalnsx", + "bc1pk9ncg6dp7xdcn9sd2278af6g62sw3kceuk2l7753fr2rr8m0zv0sej5rzm", + "bc1pmcupaetgs0kqqknmn3vs8nfw3nadxttkw3dped5fhg4tvu8kmswsynyyyj", + "bc1p24p3wnapyc0mxv33lejyxae42wvxh7d9ysvkcrcg4k0f2f6y0skqhenr55", + "bc1p3ca5rce8v6cwqa5qswcw7pcgdc9rrqlyhjr6rjtgjur2d3g23m5s5n06f7", + "bc1puudya8ye72edluh85jjzjusmlect4ggtkwjwldst44vuk43xhqzqdkre6u", + "bc1pua0yzmrws3rvsmpg3cec6v7uy9thhe32zxv5p79uveq0s8gl6p2svv8flz", + "bc1paqwtuvwyea8nu6nz3v4vcn78dew7k5zjag76m5n6s9f3favmanqq7xst44", + "bc1p8yew9d2j652wtwkyh7g23ahh29tlvtm24add9n9cp577cyda47ws9j7er2", + "bc1p2tgmqqq4jk7z9nxyvv6n72fp8p30qlv4e4urqkxx3twvxhy9000su4ep2j", + "bc1pxvkywr0qmjt6vc66zvtr6lg0f3zz4l68p2ksr5ef5mk2u4k287cqqdaq65", + "bc1ps05zhafde33mk24gzyp2ztv4y5pu5qk83estqfdn8pkl3ql7x59qk0efd4", + "bc1p545u57nh63w62a6tm0hke8dn0a7ukwyvt79kh3t8fxlswjk57jnsf2f9ee", + "bc1pee2evuaqewpfjkl6dcmqmer6n2el5aa8lrnfr0g3dgaf20zqly8q3xe9zz", + "bc1p85wrensj2grg2ttrrxsslp02633rqmlk8g0fx45z39v7prsmuhlsxum8yt", + "bc1pmlu6mfh7wuuv60jthjkgr8jk8le755z90scvfzk9uq27p494lr0s05hagq", + "bc1pnkzcvdlycgyn0s3ge2fgyk5wxj59sp5xr6dn5lw883rwwy4h53fsyyuux7", + "bc1pvfvzys79zw42qx6q8ueekn4n4xlkyxth2npuqdvutmx9gy0x4nvsk3smsq", + "bc1ph3atd33wzrq2j7ju3neqqnc5yug6zk3tjkadpfprjf6chnw7yrzq5knnmg", + "bc1p9wx8waf0un5fnmh6kgh0j60pu06ql7y0phg2p9syuwgkeja926wsex8hq4", + "bc1p3053a5f09hn7t84tcxe37thnmmlh5tlkz7wz66g870h4qzhf0vzs0gwv9j", + "bc1p99egpy9ja2rpgc4gmhzdkvwht0j6aqlz747wjt2dd42sajtjc3aqjtuwz3", + "bc1p8ds8tgqypjm998564z2tfq47m8knddyczkr8edseqqgxax0t7qjqdrsctr", + "bc1pyfkmpnze4sf66q7xxdpppcfn89ctp5tf7m5qnaxwlf99nt57grjqvqjt4y", + "bc1prq0sm49jxrh6w2w5l7wcpg4wk9v45smeezhg989gvcx3ncddn2ws0kpvm9", + "bc1pxaxrjn6uzkdzz0u3z6nafs6mvatc8xf8ce7sw8jayayj7j63qt9stksrgm", + "bc1pdj0s88n0lcqkvca2qjzurwqlplcmg6mxwyyj3qawlrvrv0x524aq0qvsjf", + "bc1pu9dsefqvu7lamx584klexdt3kw7nla06ztuawfdm0fg32qffyuyquf8crh", + "bc1pc4ws7u5e3v3w3969xafuths8x5fxwdnk58gldqw35eehzjhnlqaskfz055", + "bc1p4f3vylfns7qn2yh56562ydpqs9a3nv7vk7c73zzqyuk6lletpfeqjhl4qj", + "bc1pj4jvk0j97s4vxlrdfvy9g55s9aakwchwnclyvft4gh66z30n3r6q25ged2", + "bc1pxcfn6auh7vn77aqu6gyd47au2v9l56yvpjhvm8sql6jwmjy2te5s9sqj23", + "bc1petm90u20fm57thwztqgw53ajet2zdx2cfum4fjwymcy6fd8k8rws8655tr", + "bc1peyse58r0z2jg48uga0fnwz2xj7k2a96dlzww265w2krva8n2qd2sgzew9z", + "bc1pa74gv0djt45909e0ua5rk2w6e348hjngy9m8atwzxzg8dzukawssq6k0ec", + "bc1pfq320jl35vjtr7negxcqzg5qgj79xd9j43nw9t67v604eugw4gwsxwvx5k", + "bc1pgn4ulr8pru4kr73pwfvku4z3mmrum0fvhn4leg9n920xw6rchqzqnpzj8c", + "bc1pkrv6eue7vqh302828w52epcy5zq90d4q205zhtlu2ny9t67t43dqlzk789", + "bc1pstmy3a0zcy59ywv8t5nfrdmstqcr30ryuj6nlcp3vydtu9p0l50qjca9ks", + "bc1pqmxygwwx4xc9nc02t8s3l8jywcuyceepf8s23pwhehwa8vg0zy7sp3ygu8", + "bc1pnaeqlht3wqy8tzrrxcruzn0ektnnltvphmmgthw8pwkeayzmzd5sgs8zel", + "bc1p5d26jmvrj2jn09x7654mgghu3wpt9gw28xl8r7vq6nlglj6tpchsc3szxd", + "bc1pn73ydhvk3sc7ergdrqsktpyvmappvuk04j0dvk76skz9dlhcdw9swc3e7t", + "bc1p43dtrd78q7xz25c95ejnsmrw0q9802atqq202kxsgrvhv27gzfvqs9jfdx", + "bc1phplg0y6he6a24w0r4nkvfjghcc3mny56xr5et9kpt7lmjf87j6rs4fzfcg", + "bc1pzlssawzqvph946gqc2n23thp2652v06z7ustca0xs2pqfj483gxs4xfnxp", + "bc1pclt53fwyvpjz07wghruhcfd57jum3ve3uzmqmgx8cgau254w25gsvxaue9", + "bc1psujc45jcqd2n49rtdkrv67x0lquc97446hc8juzs37ddjf9r38yqj5sz7z", + "bc1pteud695haf7ldgkm0p3v0r0mqp8j8nmgxjwag9yvwj3d7d2v0h4shfpdue", + "bc1pqycyp0kmmzwj7rugvxeqx6d50swjd54ygmev4f85rrvnkvs90nhqsa5rpc", + "bc1pmhe6340p6vzrjyg9q3l2f5zcy34dk7hdx7750d0unwr3ytnrq05qm8m9f5", + "bc1pvekkgrh289nq4e3rzug8v4wjxsymup7lsl65e2fg4mz57hf92z9sjq7w8r", + "bc1pnmtjvrw0jnxa05l42ptquejlxveq65egzem29ku6s67h4jy37xmse4chu3", + "bc1pm7vrmv9ngwh753hl378q7r2ypgyyw38su235lrszsyegpd52lgmqptyjdt", + "bc1pjsjcx5edlu36y6rqv8lc0cl5auckgcah7sdhxv5nlw0k469wm28q0wxv6g", + "bc1ptu4gdtzpmnre70zcfyvktpfevtgg0lvcnx4kq249k7erec89n3lqz79urd", + "bc1pzcr47rt3l99hh0d3spy9utk9vrfhduhlf3h93ws33cpsj4pxvxcqh7pclu", + "bc1pka5jpcg9anw7hs4m2kzv4xtnpuvh95r48du3mq8n0yqa3davw65q02lruf", + "bc1pw0k0l3w5wnsl92p6kz9dehl5g2z5msdfl0ah5savtyvdug2pyqns3fkp8u", + "bc1pnaj5t0qsnf9fxq9gxyq6u7z43ferfav8pj3azhafw58nyl9ayljs9p9r2r", + "bc1pe2ejawaz6348w4na4jxxynaehhydctnpavkeddnkxf6k0tnlg0ns0kl5uw", + "bc1pf5m387vssh3c6rwsl3l859tclunmhvfnmq6g4aqzcq00wrrsxtpqw70ylv", + "bc1pdulnxhyk4t9zldysq64hsd937ev6nkeljs59hmdsx97nugdm3xfqlxyu3q", + "bc1pj00uzlqns3trme56arn5px4cfrhtkjx3m0t0ysu8gm0fcjmp6akse42aq7", + "bc1ptnwz4wj7yere5kv5wnrjs8hgndd3sjq3ehgmpghsmwp3n67gdx3qd0hehd", + "bc1p83wuxj0f2wqnf99enhrgg3x7vegr88n52h49l3pllz39lvdsvxks74mk69", + "bc1pmxq49n8997gp6z0tnsujm2puf9c99jttpnt2tpu0mnlyaykejc9q2rgrde", + "bc1pkzu78c38q652nagacarc5j6lu0e0f0mc8lv99eqqqa06v2mhcccq5a4jud", + "bc1p3qnr7zhz6njy82h438380r32kg27xacsuluu62qmmedy65trlvtszh6jnk", + "bc1p27q0rc4vkzucq4s0qlvt7s2m9jalk0ugwrqeh5j0ekp3m9fux8kq8krfuz", + "bc1pm7mlrzsehhzhnd6wktrcu4gu555znel9cuvylz8rcv4uh9atnhxs32pjru", + "bc1pjkf7062c47aeznv3g6z8y400w4hylg7zc5tey35hvljr862mus6qqk3glq", + "bc1pd6qvj0rlmratk7hwp0h3xdsxn5yfhl4mp5ka64eumawh9v8ylyjq44v0al", + "bc1pnmgef3k2qxxp3aw4uzl8l0uxds22kgjwh7m905wn87js2esz3yrquzm20p", + "bc1pulg9kykmkrjagtwvla08097c2jatnaj2pl35zuqp07vgen3gj44qj7v8re", + "bc1p5yxxrlf3tw6cmqas6wj3kdx764emedmjc0fha87cpxpsjhduqsnqc332re", + "bc1p7zc7jph68a9cg0vpeukkyju3sq6sg4wlky95vp5ujs8grtln73aqt6rzzl", + "bc1purz7jhsp2glnu7qtt2ah7r0aepdv8eccq2ckp06equvm6zth2avqwuncdm", + "bc1prg67nsh0xtyzkkm8ecvqqk3l59x7mdkt9kuh3k5asam4698c040q6e9ehg", + "bc1p9adyvcsqem8y5tdntvvk428ms8jpkfnc6gxvgff0td39404u68tsjhdtwt", + "bc1pchef7ct5ssn5uyg34ktvxk55jwds32l85wqtvasjs4myu3y3kqvsenflr3", + "bc1pazf6q6shxtp7dy6y9c7k3rc9wa8p6dvz5e30wl7nv8l5zhy3jpfs6vzquq", + "bc1pqxn76jkr84qsaqy2x0p2xdfnecmynpcvzhcnx77uazm4fvwez8vstm8wf8", + "bc1p3mn7l8mcfdmkuvzx0p3hmp2qk6la57ac3z0qjfgduxn5es567ayswrzx4q", + "bc1pd6ejpx5xd02r52p24wug27u9a06h2t740we09560lfjaf3ulmhfq0ty0qu", + "bc1pm7pqd6xtgl496whvuazr72afw8tqhwne28s77r4f63vzefjlsrlskqmva7", + "bc1pdy3hn774et752mp57hzeqkuua0mdla2wuv7egjne22f53yy9suxst70y5g", + "bc1pdzf9x7hlwq2n8u8qmq8rsj04evqd7q2st8cl42zygfr6ng90swvq3tk4fp", + "bc1p2eeuz385lnd6l768ry650pfh2c3689sj2h943jxgazt6x39ywwfsm3jet4", + "bc1plxnv4kwe8zk0hgck6ntd9q0th4e38hntkusq6rjqlr8reztmzqashu8c68", + "bc1pqtwyv9ygfc3x0q8en29xz9ga0rjzekz9sz7f2zc3m6uj8g3xu7ws2mreuc", + "bc1pdxshwd3h2mgajl4mpdz5322e4tvp4hvxa375qul93hsvcgrwqm6sukulz0", + "bc1pf57e97ldq3rgg2u649gypanznw8h3emnes4gg2av70m3etgsuz9shy59zw", + "bc1pmd4wrtzy3f58mamv9mvfn45hem3yuf6l5y4cf5jt28pm2d3cnqeq5drhjq", + "bc1pehgtd5zknmmtk636rx3eerumxymgxjs5e6da4d4nu008g4flpr8s4zch92", + "bc1plqev3rm2g54g9u4qk7gg4javaae6hx0mt40nkavsztfytvgj8w2quaaxj7", + "bc1pmuj34wrc6zrw4ffwdc44gq2m2r8mkn9nsa7x5d5sufqcsfp2sj6sk9v98y", + "bc1ptmd2rxr7lxyrcu8ufrd73gr9p5rjnpk22d9s7v87qa8xxvpdd3lser6dud", + "bc1pcxdhmvmjgv9d2d0cem8u6jwytf554ywynlvnepzxhc90u5pwzu4q9a7ptp", + "bc1ph0a3z6c9n26e7d034pea2zdp95yd022daejxs0hhpp9r85k72qfqjumprp", + "bc1pdj8g7pns3eaxssxkgku8jxgwqq59a5jwwnzs2r45g8jhwqn7aujszuwtdf", + "bc1p8yyztuxmvm0eekdp0035eh7n0chg2s3d57sl3szaelzhfde5vs5qy6xqun", + "bc1pdgkqpl70adw7ptrcvrwhjvcqf7vju8k5ajqhluk90erd83ffnr9s7ujl24", + "bc1pmpdtaw0680vk80dug22unsav3673l6y8nn2yn9ddp3ep4azqm5vsnr3hvt", + "bc1ptvg00kzfhgdaxqvfwqqkz739a79f8u0kra2045klhut0a0dxd32q08h2kq", + "bc1pgppju5wjul0z5qphpnayrj50243e8q3fdr49ahd9dmqwqrqdlmuq05fjqk", + "bc1plcl5y40hck9l0uq5z27lwwqun822uq3pxtd4syse4eecu8jfge6qwyuuxg", + "bc1pzpdv8sdvyd97catgs77kgrdmrq2cvmpp3292xwg8l9fd8cal3kyqk5qu4z", + "bc1pg2zy9uh7tpv2347yce9lld3884xl8ha8n7m0nyh68w463kzewvssfuknxl", + "bc1pdyrfj3psps4qrmkzxj4yu6a0vkrw0zvdeka293qh49d0wlgppn7qr4knlr", + "bc1pp3vp32t8d4dqvj6crgw4s4gyewa5g2d6469dt2974lyy5f9hs2csqtemgu", + "bc1pnnkkl6m0zqrxdavaqe6ghmcjrm3uqv0hs7g6l5fzx22kf8tavyesyg2hn6", + "bc1ps0k36p6te7uwrzqq8zugz7w4ma0vs6k4jhl5xxul2r0uzlkfn7asgahauq", + "bc1pzw6f4zmrqsudkvtt9emw6a8cp67k2jjkgafx9ay4rgx04rr45ves2mvy7r", + "bc1p398axj4ee9mp2gj0gpef866kxp6f6xvfmaf6heafm6n5jwk3q7fqen44hr", + "bc1puf8rc9ynr362jwjt3qwqqn0dnjn76wtlhynkqcjv24m8ykjldasslzq6l9", + "bc1pyt8xy8clyvc666z9zn9ar5nvwmrmfrhtyl8rvrzmhar20y4qyw7qa2m0q9", + "bc1pgzzqj2vxp5an303x0ydsgflcd7z0mfy84a33fadsvpqgy9tscpjqq4sa5u", + "bc1pk02g2lncxru8ag5gge7vq7nkcxw8w73h7rlrfmhg7xqkfgcd88qqhu4djm", + "bc1prdd7chuc6lsedqsr2fjrr568tym60qd6nr64u6gltyztf7vm2pzqap8xvl", + "bc1p4eluq4fj5yy04j7syndpnqdudvq05tmnhgawv4lcppdyfmn92nns49xsp7", + "bc1p45kyk32vepyf64cvs5t9lmnzpp5f8urhjk980t687eea2l3xt6ps49m9yn", + "bc1phg4dyalu0h57q3tnrssxsa6xj0ue3wksqj8dc7tp2z8jpny8arssrjwmqz", + "bc1pnfr35wf0267vg062ds9r3hwvnq4lndnt7slujtxzsg4uz20gu2mq97vwcx", + "bc1pnptteh33cascavljcyxtfqfhsgnczhg3y7r0n55nhaz85kuz8j5qrt3qu6", + "bc1pj8cygx52z54j2lmrxmaanqlpujvuytqa2a5j0qq5vw7c70d2j45q44rnhd", + "bc1pdf8h506y8nklaz2jdd0m09g66y3lwwu24axs69etz4xd4d8aqlzqpd6sn3", + "bc1p9250mnhu7mu36ewqns6xh4w6hc4vquevutuv546eytqldyws7l0qh3ask5", + "bc1pvygxru7e2w8tym7vny8x5e9xtgtgzwcketjn4zxyff2afhrd9vjq4cyflu", + "bc1p3n9u95mn9qk5gn5kxevej98rutmntkl7qft0rskvkls4qf8sazsqx5xym6", + "bc1p30zzfk3f8egwkpwn00lps57sxc59yqzte5ef5h06dr2pnm8dgyfs8fqrl2", + "bc1p7ye5ppxewhkec8n4fqjl25nvzgmpmy9vn96tdvm2p9d7w6wc4lcqfnjl8q", + "bc1pn55ef3xrsav2d8cy9ga9c35936l7qx7n2uw9et2tgly9s2zjvfws2lwnr6", + "bc1prna0gr485wkz5hucvq06k9228uc57xhlza3wpew4ahhn2d680tgsvp992d", + "bc1p9tcqnqf6wwcm7979au3a8jc37a6mshuulk3dasey0fl6g682tkys4y64fd", + "bc1pvjvhk370u4hzfd7mavsuuwj94szfsnmn23gsgm0ln8zr9zkyzhpqh4cm0j", + "bc1ppqrkg6yjjzat6qt6r5g8dtg7sszsd664jvaae3ytan96kqh0jgwquur54s", + "bc1pwjmrv3zevuf0x9y4xjfhwugfyplrjyu63e5f6ja3hw20vej2tkzqh720ut", + "bc1p8z80fgm2ygvmvsdhndhd4g5mda26g05cwemztdddctuhx0n98drqhfl2wz", + "bc1pwcwdjjgtdsek22f83nntru8evapx6lpd7m9gsx8wtn8e3l5n3uvq0h6axh", + "bc1pvjstcma4uaqek324ympqvsk02dr8vlfqwv559yma6kme7g0tzwyq5tcmxl", + "bc1p6l7kkthll25a3untw89940yz9678rwza8dc46h35nk0zw5gyyvnq0gnlx0", + "bc1phds835eyz252z04re0t55fpp9xvpd48pl49d8nda0h0dwpuaj4lq06e5ss", + "bc1p3g8vxydu4fvc8u7ea7vjed4ejmlfdf52fj4ewj4aarqajs722qhsg5lpjy", + "bc1p0cceenxdlqd6sypplg7e62ks4m5p5fv2hltz7nk0lrhus8jkq43q5tttcu", + "bc1p98f5p46ej49wh3q9d5y6wrpp590nglwa6mk3j7x88nchg9eldg8s3s23uu", + "bc1pncemqcdc4plxfqwmjvvssrcv764qe386q9w5z5hnsxs2qrdqcflqhecfj4", + "bc1p97w8pnc2huhf6nmnhf6y9n4hpwtwgx6nv9l7gc6xfznvp9v0flfsfk50wl", + "bc1pqyscadtf73l3hautzjl6rfmuxncqusu0att79s4l02y3zlwy59xse0g6eh", + "bc1p30twd8xexayl3ygrfwwhu0vju5mjyxmk4nfdzx8thu7qhpq9g8rqdvs4y0", + "bc1p85kyhzmafkz44lktyavdkynulrn7rznem4ncmag07y3jwruy3z4q5tzaa7", + "bc1phh8np83j5m7ktngqyyl5lc8nt22vzlsafq25c94juyh4f35w9v9qk30urf", + "bc1pufd7dtr5qrjffea6ymjw5ehxgyp889hx9ekx33r8ltga3c8v9c0qlazc0m", + "bc1p3muev5jahvgwwfrx598g6v9ygqhuz82gyevjczhkwstxkx9nap3qqtrp3h", + "bc1ptcqg49texmf0y067mny207sl9zs3ptcfng38w7ts3pum56fxgaxsctum8f", + "bc1pxldmvzsszvcfhmwr6f59f854r7jchdllmt6395eanwaf2ttlqdfq4vh7sv", + "bc1puxmfn9sa3zds7lv504p4jajcutz04l3yn36uexag5xs7rk4qnfkql7fj5g", + "bc1plrqfgzqth9mkjwevqvmaxh3xesy76p569t72zu8xl6usqstgqm4syhd95z", + "bc1pjz78zhmghfjns9rfe24kwzcesglumzycxkrprsn34hek047k2qqsaju5xt", + "bc1p79klcu0mytks6cpwgq3ljpz4n47hgkmy2h7sndww8zhkc264dunqeadjgg", + "bc1pzpgqqrahfcvacdygvjkqm24af0xkpcg083h04vmatuhw8r08zpps0r2wfa", + "bc1peh6tspwdgf3wpwqcqn4txplla98uv6hvmmrwh5waj59d2y99yqrsl2c5gg", + "bc1pj469csqt2rt35kcftgl8c68wcwzqgmga90jxx080m5ddgj0ymqus4yufk4", + "bc1plmk3w4v4tgta5jtf4hky8p5vrstencr3qpzwnk32x5gpjxj42uyqa88c6l", + "bc1p7y2fy4gugsuxra3p8hp5dap6xxn6jhku3fa59632xjyezq7a59mqyemx9j", + "bc1p3y8z5zsets6872ffknz8vn7tccaqeug0amc8mzxx06qc6cpa8mwq8kx0cp", + "bc1pz3yhwelh6vt44jrgkt390zuw6vad4e6a9pkuaf7v4nc05kcd95jq53gaxr", + "bc1pp74cec8y83zqtgquarsv35q6ash7tqd5wcx3e3k4faqky2wwxhhsysh5jz", + "bc1p8f5a2j58x89t8d5huj3n4h56xx788y6gdv8hn908ey09a4za0g6q3l8ccq", + "bc1pw7keasr7vtyzzzvkeguh944celwd0zvkkkrkvwu88jecujrwkysqhzuvlw", + "bc1pdrfdzzxwpwjlfyf6uk6w4uy3fh4wsj00gpe6vp6gj35tfn5y6f5s0ndxt8", + "bc1ph3mrrshmfxmdayl7d8hsayhkzz4h8lyawev6j3deg8fw20mlwlnsv4unjr", + "bc1prqcw8cqkhdqa4gwg23pcm6fzgjp6vfar83epv4ej4eultm6puxuqr77ck4", + "bc1p2pluudczc5kk84204vvvxu3aa3cu605ztasn6z3up83xcn8jagpsfawfs3", + "bc1p0stzh8hevt8p7h94unv8ux9zwfn0vdsuru8sq9tk6fa2hdrparhq0aj3gh", + "bc1pmk5dnugtz00a8hsp44mn0thjsm4elhlw8hpq4ne0vffzwlels2kq9a7sl6", + "bc1p000xkea7hpe44jpzgtf9h8l54dyadwgtj6n5zvn43kar93ahsp0s9gqcdw", + "bc1pku200yql0zhy932s9p0hcrysj7wakw79l2j0lst7lxnu3rkt0jwsnkdgv4", + "bc1pq6wk0fhqh4lg2dckm0gxh7fl90nxjuzgdwmj6rtgksa73pytejkq63y2v5", + "bc1p8gkmtetdwjydd7lep3p2uuuvkq78jwtl6lr0q2kr9wndxnpsktms3whgu3", + "bc1p96w4tnrxmvuuq9dq48kjqeagxa0r9pxsk9t2ddz0nap50xs790jspt4x0r", + "bc1p4zmd3fqkycuu0yszh24ctkw8lg6lyufw8697w43qt2xx22mzgxcqgu7wjf", + "bc1pnqc5zzjzm65ea8gw3sf26vfy02jzd98cyh25zc9n87nejjacllnsh9jk9k", + "bc1pzmek0787jdsz3uaf94y2qpt2esdqq0amqlsd6yffvjr4t769qgxsksnhh0", + "bc1pszcnu8qpyleapen9dkxfyujpkrrkrsulf782meksjqsmeewqz7csk5zx9g", + "bc1pnt8v2acupc3th0h7jjzpulpzdqxkj6q75x7ap6ggj528cdlf5rgqq9lpvu", + "bc1puzzg494aj6ph3rnl2y9sj0cxdewqrgt3gw2g96uq89nc87s0pa0qx7djkl", + "bc1pcqazx92mhae5g4awazf3ejjagalgr36zhx80cnsh0sk570qz6nlsmdkdt6", + "bc1pmrnfnez5fxscvtfz9r43s223fqgz23g6yk4lnmg44uyg0ql9gasq55z238", + "bc1pw0j28l6us2jgmmxavny9c4hmd43pntv25lurjqkws65nah0w3z2q9adc22", + "bc1p64cte9z059rlzy3whg6ttgppr8nreyjnl5ga37gmwm7zmjcq353sfe9hda", + "bc1pkkggl730qf33u6mj5pg9pqxulql36srzexd635znt47hzj4r8fyq45d869", + "bc1pnv2urvskz2ehta0a55esrsauwak2p97kpn5s5p8hucu55czryr4q4685yh", + "bc1pky6n0h0sn5lgqdzx2g58u6w543xlqlrswdcddrfsxd36cr3e98ysnlhpyd", + "bc1ptdteqejdq7mlw8qv5cwljm76uljg0gv646lfw4ak2gpufht9hfmqm3r0rc", + "bc1p95gezhmn44y50jqvu33aeyemgpahsdlgxnm4yqql02dyrmgpkg2s9m5amf", + "bc1px3gvxp9zrj7646d0py4t37p3r3lzfgdwl5djgedcjc29n05q2e3q94jzsy", + "bc1psfhn5sdm2f49e6n5n2mf4hc0yedrl9p4uy5cuffw867e9zqggu7qpzqmcz", + "bc1pdtd0yggnp44324eh8z3uwjdcmspycyxqcrav0pgm67cdqvk97yrq9fycqs", + "bc1pw5hmaqt825nu8uyfmnuyx92j9rcy9n9ezp6pnyv5mw2yw9f7yxzqzfvdus", + "bc1p5hyn68sxxl662yku05hknmt2ml8l87u7wuw2lvs6szgdasw98fyqtpqzv5", + "bc1pyadq3yuwr2ags92s8yd0dcaafdzlccx0vgss09pen2y2qgdh8gtsyddy74", + "bc1p3laxh88zz43m7dqdz4jxjuggyuwhp026afqew06ez6w0r87paraq7nhusv", + "bc1pas3m2pgg3sy6kn8drtugluh55acldzsqupwjawsxjtuzhuwjejpsdwmamq", + "bc1pmygd3y0e2jjk63vtkjt0cu92wj0039nxzvlnlvgpr9tezn4ylcmscr3nsk", + "bc1pjchn6xdqhcnv0l6zpzcmllhel0kntxcd3387xu99nxjdeglssc3q3j2yz9", + "bc1pu67n7jmxujp5tydy9zqrsfj22mssapvzkff4prj3w602mc3w2axqh76rcl", + "bc1pwg6yzl4y7psk3lqtxw6tyc2wu7f4xqv69v0l0etn7mda4wf0wulqels7cq", + "bc1p5hkmrvkjn6rc06cwx3hhzp6u7qkpp3u7lu0u83r9haaaad7976qqx8yp0l", + "bc1pqml2e0hwfqff9snzuell6g2f78hg96lckxmkshrr4wvccshvfzhqwzmrkd", + "bc1pzec0cjexcj46s0gy6jy3rnf5hagflgcc7mqkjn5sx7xrvxdj8vyqwpjgjh", + "bc1pzc00dz6am4l6tn2lzc4kf3xmun7g63nm9dgaa3er6lqha6vq7mfsfsrqnj", + "bc1pr3946q02jfkytxm50ckxl9nudlfmvtgust834hh78tvh6gjcpcdqj6z20a", + "bc1ps8dnkudljyv80h273t5hn4wjqqehry4p34edrt2kvst7084lve0sr2z705", + "bc1p3w6kc48k5ls8727gmukr6yt6zhs8fd0a87dlkf43xvh6x3ha7ccq5kakth", + "bc1pxv66k7d62jhnggvu2nfmxt38msnatuxxhj3r568z6k54q39rzlwqasx8zh", + "bc1pv0mxvl307nac406sl3arqjyfj8nq5yrjytd6c06k53wc9q4ww2vsnsrddg", + "bc1pfq5sfw295f3sevzmw8ygfazudea7hr9mjr3r9kmd05jw3tpx8jgs5999va", + "bc1pneegf6vwfnp3335gsqe4lzmz3zx8nn4js4sgped2lhalpdte2vqsvs6tyq", + "bc1pe9t2fly34mk85wwvyplhqtr4t822ylckyhywjg57skxc6vcw3r5qczu8et", + "bc1pqsmmd3r7744wz3prehuqm4qq29k5ca2qd9xwzdvalycl3f048waqde2q95", + "bc1pr40xzexumhejkuquudx3e9xkl8kg6ka3jug6lkh4uxe7ma5s66ssk37f0l", + "bc1pj0yshvk5vapzj3t8cfwkt5cpxk8t9ua582ewptjjajfzlg6w68qq0l8vyk", + "bc1pj8z376v5ymj07d8ck5xtj7cye4jhg7j45a8mcnvh5yeh9hamzlrqcwjjm9", + "bc1p0pfnlmq2j2rqnlp47z95lvycz9me358u7pxzpgex8jzl0k3r7uyq870x4h", + "bc1pcm8h0p9qd3vahyxtet20h7yqmscsks865ajfr272fputdeycpm0qk7jaxd", + "bc1p8nlqryaa2h8987pgu6tt3um424aqkd7w5623vzk70qg79sw9yh9shdss6d", + "bc1pskj94vv5w9zt4z5fg0tr45vfmun8jr34f4yhjyjcqlv3llduzupqxxty3r", + "bc1pqhmvfgvrccsdesqjdvsfstn2zey0lvn7vqcyaykyh97y50cr3jxqmhxdzn", + "bc1pdy7hh58ah867h8dfchgx2vuupjvzzt0755vkn23ppnfjkfjh2nnqgg34ek", + "bc1pmcaezyjaq68ftsf322eh5dkeh55kyrknf7rnyzstf0jrsu47x6csdpn3p0", + "bc1pxxzj7a3ydgzu0ntmhu6psk685n23n224v23e8mtnkqd0zyd4xxas3rc6cs", + "bc1pcqrsut6ak02u7sk3g0gkds2fpvz84znpmy6pljcl8j8vms0wqsxsj7254g", + "bc1psw608kmrqal8yk9dskc48ud9txeum6n4rx0sdw86vythyz6t3neqh8emjx", + "bc1pry8nluqc036cey8mv6sg3eehsh9t9e3pnc9jatavw8f0ttrw8dysg64fv6", + "bc1pet3zg9nvuphxl6c7cdu3822t258a5yxll0fskayuyhvhx5huxlfs2ewvru", + "bc1prkj38e8kteav0fxnjwh2zp2wljxef2uadj25qux5wfckms5fyh6qwguqvk", + "bc1pz0ymzhcdddp80prgq5gmkjm3nsakvxan9ksdcjq009fzup0zy36qzz378a", + "bc1pp5s6xvkedv4jetmw4zq28agj9x7zuwpgz6awyamtdnqt862azdgq3jrz8w", + "bc1pcrefr5l2pm699tppgfy7lpmddxh6x4k7d6xmcf39qkswtj9mne3svgsw9e", + "bc1pdkazc6v2f8qp0r575zf92p7xxj44ld4npmq49gvqukrzgppm7vms4t7h8f", + "bc1ppf8lcd2ec566cdqhc05rmfjgf7h2xxuhnad42gg92lvj9ydjf8lq740ymu", + "bc1pffj4qfkccpwxtjezfcp87p39a779mdpfzcxer2u3ald6xf9wc07s66n083", + "bc1p6q90vh5fnzazar9v9j7hvqwc2azjyje5r2dnuaralyhpfcn4khvqkmu4ey", + "bc1pcu5sapkfkvhky95juzqvh3d3qs3wjfadf7te3pcfej4x7p0q3qwq66zpjr", + "bc1pfy5446anx33836rp9vttlkqu458menq8hqtzmu438hz456tj92rsx762r4", + "bc1pavvena630nl4x03yt98236q59gm9v92fkfvmshmk0s2xgwevajqs8gjju8", + "bc1p6llx6006cztcr2pk0v4m6tvjl788lhs2n3exu9tct3ty0u6gu05quzjgz2", + "bc1pr7pvqd3763esvs5uv7gczfuky383hu6e5jxqx4fugt0sqrrslw2s4rywzn", + "bc1p8zd5klgevqphzzhm2ug33zha6rh8exkzpzlgte3yypvrqgas0edsre2f4a", + "bc1ppkvxvw34g9gpkeh4tm7ndhp8ga5j3slzn066pwr9hc34ugswdefsjfahr0", + "bc1plydhlg0z68d6zelrnc5ljjkffxnwkktqn4e37u2r32h9p93mcazsdzqzld", + "bc1pmhq77n836jphl4ktslapkg2scwyfhgeyk4pm4fejxvjj526mm5sq8tuv6a", + "bc1pu7apcjeedwzd8faqfl8k6s3tzhzr0cs5m7uj5kt30wk29ezwr8vskf5nzh", + "bc1pskplnjcmp6cldvmhhec626j6lf5cs6ahfh64uftp3exhkxy3xnwq578727", + "bc1p23ndm3qg8te663xvwq22s7gp33e3xcg7nahdfgf6jj3cf97vxz6qx8y7ll", + "bc1pv6s2adeu3y655v8nqwca9vdmkkrz5y53dftv6qydekzs8tj3s6tq4a0ja3", + "bc1pzl6f4c52wn2dhyqayqfpzkw7zxtvwrhf234xtfq3fx986f6tda2srfewf0", + "bc1pnmanfpv58403v9pyvnxjlwdtkphnevve25qd3us9jt4c3lx4tkrsx6er5w", + "bc1pd2xsq25lug6mc62pss265xn355x5hqeen2j8c2z0te4vnpm3euzs98ft3l", + "bc1phzff0ys7t98haxyhwg27tglcjqgxkcs0r7l4chxkxvlrp3vet2uqq9f6yd", + "bc1pzkzctcvcnz7z9gl8qqpmw6gvhthcsagvx2h56faacp5vyqn05txsg99gdh", + "bc1pezyk9tsc5jljhgke25fu0jfamd8f3we39vszkcsgwlezqz9qsrss5uy5lg", + "bc1phxtmz65u4fdyz50s5jvdzw3c8hqyq922a5vre92hl97v9whyk68qgxuzc0", + "bc1pju3gsm8v9a89p0hlj5e0l46u7fzaaxmgqfy4ra3cs38yf6nq3xashqcll6", + "bc1plzkad75dahrmcpap0cequesdt4t5wy992jy7repkp0fcpyqzee0samzpy9", + "bc1p575cmh84602meq4f7tnhwd42q6kscn75t772ygz02a675wnzgg9s34ejq7", + "bc1p09x63tmdg5rm9rmt8xw3lzql26q8jvgyfa4tv2fnzq8lyy3wd2sst3gzkl", + "bc1phrptdyqsgvhwyrqzqt0p6427hgwe66uyg5arxjqvmu4ux6duunjqrwvhvm", + "bc1peul5saw957024q2547x26se0lryqzqtuw7lqjeqkr79mhdkprzeqgj0uw9", + "bc1pd5wv2dwnkrv8yfncgdgr3utxgsqlreu2kd9j7rpry3dz988km7ysrzzc7n", + "bc1pkh0r86aq25sqdr92ejqqm3r7ekvnpmm5p3l6tpzpk26fyu8fvekqn0h5tm", + "bc1pcqmau2qwvlx4u9875u80e24ta84y5m7a6y782nlpppxq89h20kmsn3wglz", + "bc1p2x7cm0uzzdjads0sn3d527f0mwkqss26dj3dvxpv8ltunzlkgzasdl7n90", + "bc1pp0eq7xfj3y43ee0rwwexhjj0w8uv3vf3wy0kj666q8r49u5utz2sl33prx", + "bc1p90myh8p4tk50pp8eqtuzcdq6ga7t5uxf90hpaetwup3qpd3hw2msyegyw4", + "bc1p8trk77wz08yuxmfk65gq6xm3zf9p4dkde7lr6un7v3glxepyterq06lefr", + "bc1pfd4wzqerxkcd5eg3mljx0csanzv76egd0fmf6vt98wwft6s6pzgqdq43l0", + "bc1pnynengy3vdt9aj5g89algsk3j33jv0d3ah5fayxkdumyllqh2rcqrj3mk5", + "bc1pkpacyymuz3gyw7893tpfh4lq4h2cwucurz43mdedgyj09zwcjhgq4m2c78", + "bc1p5j7x7cp7j3s3ra2t2klqhalw3luv5k95nk84m7t6gzxsm907kcvsjp3g5h", + "bc1pggsta9862s0w7jxvutvpweceu5438syc6x27gy3nqtzz7ansm0lq883pr2", + "bc1p0hgpq2ncxp72dz2y7k6ke25lfy70rfsnn4xpazt8k62m7q48exesdwfzx9", + "bc1paq7lw7y3ky4hxscwshtqhyt564c8nkrvx94huv8vc6lc4u6eecfqxu47wj", + "bc1pfvdvcvzjdcczh4dzcxwdf5le29s4z5lewlrps83zjvfxm2n2g5gsmj8hmd", + "bc1pksn76xp5pj70mlzxa3wsetrddvxv2fxcprlysg83ayevvkh3l82spcgmly", + "bc1pelxprdh62vpfuzh5q2a466gupfldrja7tqnfme78c9kak4jvw38qznkxgc", + "bc1pw48wu6cf4cuhau8k26jn58p4g4z9qtutmplk4djy83cqp6mgatasttjp7g", + "bc1pxfwf597h900kth5tdnd7k0yqdqm9jtz4kjj9ln882cddzlpu6essgug2ys", + "bc1pc8z3d7h6qv2te58h8n5gnkntaflfmz06ye0rqxnh73qgmvu4z8aqqpuzn9", + "bc1pgaujssxm54pv8y7tww6s6r4rdhe7wmp8hnvwe20mw3swl58rrq4ss4xjgn", + "bc1pe6fxh097t2dpuu3gjcpy3c2rydu8l2nnqnrqq0jjjcem64lzguqqvlv3ca", + "bc1pfnsea6zauk2wf0zmz6krmyhhky4vmt3enh39f9sga3kkrg4uwzrsvnd7ts", + "bc1p6ta7wze4dqhv52a67260ygyplqq4p9up68lecwnp63a46lvvgvyq4wua0z", + "bc1pqjm8hlpw2g8rpmrcgucmkv8uzyfhdg7900x2jxrdz7w5j9x2kyksh6cx2e", + "bc1pcl9ptuyfvx7zmm9vv92uc0r86hdug7jgyszgur7rw57wav6kfyvs9wl309", + "bc1p47lmltckulduu3rmmmrx3ukqs0jjhs3cehsm40zenzxstknc0ans8vgl4h", + "bc1pj3mk70ulmypspfd3zx3dugpzxxnhzc8c4qyjg0p0mqhx9fsn245qpymdy8", + "bc1pjgdcmmmw8nzzuuxsydpr4we5e5c56scuqqpz5adhch3tykjsdt8s797lry", + "bc1pf92wgmnu7lfyuvaxpd7fwzcumxtdz29kl9h2gftrrs5vlp8ux8wsej2jyz", + "bc1p3cn63wt3setp5jsj46k5mgmkp4lt6wga50zzvxx7y8e9366s0c8skwqfeq", + "bc1pqxcwk8ppvzpffafr54ck0eekppn7ltjdh3gdahky0nlhg6jkd9essa8rmm", + "bc1p260hnfe7nayveh6jh00tka6hnyfndkjsx689u3mtf5kweqjys3msjyczu5", + "bc1prpta4u38h3nsp4hvtrlhzvcuja8m47mdyqky264m43ssfyeduwzq99v66j", + "bc1pace550yd7z4rtqmkdzks5snk0ahwu7qt0a8d70a8shht9hpevsxsjz3auk", + "bc1pdcv7qmd7va2cwnp5srtyw9nc740a60nuf88ns5senh0yaxrh3taq5zpp70", + "bc1pz0gewgdxp6sqenngyrakaaraxjayft5z7j34y8keqqkym9wvhdpqq4wjn3", + "bc1pergpql0czq7e3p9amgpm585nnhx5uq9djecawg0vgtwn84hk2e8q9ku305", + "bc1p96ujyfc5wrllk9pvdme0w4xxy7exnn8h8n5mnenctejwsu8sfg2sswldsq", + "bc1pwq3yp55349unygh4pwrzf3n8klphjlppgt2dwulmw44n3men525s9h5d5f", + "bc1pdmnzuc2frz50h22ctlm8azgsjpwlum0u35nh7q6dcgmq2hza9y4sxvd4aj", + "bc1pv76dpammh86wtde84cmxtn3h8eenlqv6eeu7js207hsu24jenkqqmxq4d7", + "bc1p7m28t4qcghy4dk7yflfg74luxgh4n0lkk7qc3prf9put26yt9xcqzaw7r8", + "bc1pwl5wlyml8kmk8vj9arfhdjvy9hk6d24f747qq37dz48ksnakaanst55yt2", + "bc1ps305600cweq5ccxpwetcl66y4thwvg4sn0n5luzh524d9vl2nrqqwl2ups", + "bc1pfa0jyrkxc4t69vv43sjee78l9fudlypmplmdu37e6edn53fc9f9spvy93z", + "bc1phzcmrds6ev6s7ucl7pgd89zkgp4qn7vvargjqla99cx20jplds7qdkauwl", + "bc1p8nxa0ehl7ft72evpf7f0aj83w7khqwx797d2hm4mh0l958wfcz2s3cdzgu", + "bc1pyptlrh8x2qgpnlkchgmnn42p6dpyuh4wnm0psj9zp8k0spf36lhqpzsu4m", + "bc1p70l5fv83rkcgrqzf63hx307utk54ytw6wat5xye5zlr60ehf33usc4yz35", + "bc1ph2xydj9l9qmmfkvdtt3zhe5k78g7x723t30ujkfcywu2zwxmvxlsshe3x7", + "bc1pwd2v90l7v870kczmx7mpv5kfsx63h02cn87qg098ka3j4g8fsjhsl0gfye", + "bc1plm5hyad5l2mmulswa5lzxf5w7pmkur6ckh06q7p8pcj9et0caavqp8xsfq", + "bc1pc2rhfhnv7566e6kxnp4yeaug8vs2el3g2wzctwu7eva9ngdse7cqfrjlly", + "bc1pgwxqnvyg9mxd2e7dsy3tu2zxxssz5gc0n0wzcql7r34r8czj48vsv5a5xt", + "bc1pye09zjz4v7ajk0ukwud35pgk5z6ahzsj7wuc9h0d3vv59s4vyp0q9heyhe", + "bc1pl52xl9rlvquz7te2fuj5eygmngzna20qrl8ahmnfsezqxy6nywyq89dj8g", + "bc1pp0yqc9fpg7u92srrxwmz5zrfzt05d7lk6ez6jc4l7y5thks8tq9ssc5729", + "bc1ph8le8engcnmwsxdrtelkxlr3hmq3gnnrwphn0fk8a58hnv44ufkqm5a9hk", + "bc1pzfjqm009ruv06mc7tgpr27gfh92nddqtw3fsrn8rtx5eerg304xsvkhn4g", + "bc1pjla2aykq570epsg3xhctk9g8cwjg5sj8zmndw3e22tpuagud79lsk99hqm", + "bc1pzndtnpzhupza6n6y8ap3etq6cdd73dp3yrxrwj97eupcth9rtn8q9vnkcn", + "bc1p5nqx6u5a62hcryw76q7ah4tjfvr08mc3gh50yqhs36rqg02w04hqdtve7u", + "bc1plrlqug049luvuv58vd36uc7zp2khdm0ufnr0ssvula67xhlqeveqzvkx82", + "bc1p6atz9nv87uymd5l5kg4rm0npdsc98gqvtj99wx9cscyugwuyn85qlwzppj", + "bc1pcr05p7efxeqr3u3efcw7qynq6vghqd70tn4d2gcuewpq2c7zy6esl6wfjs", + "bc1p9qsr20dl9kh6lkgs8ucqyjkfjr3nwmnxgqntr8l6vyex2lcwmpns7a6ra2", + "bc1pz843qcq00edw8wlrh2v6ef7zt82qquk0l85dan4y5cs7jx7fennsgmf939", + "bc1pqdsnqz4qjzs7ekdm0y3qgs8us8hxl749748a5svh553qnd4rvelqpmew63", + "bc1pjklqkgeuj36ue3z9nnxzz5sgzfl2cd7jks4dfqgfs7juzxgj449sls7v3g", + "bc1ptutttxrrfup8p9z0rc4gx4h40mmhudnaf495g4jzh477nvp0j24sxp8e54", + "bc1pfhrhagltewad6lutm2v6tjllx4fnkh0hf29xam8hxf0mezg9suzqsw83ht", + "bc1pmt4h74sfkpqadz35hrtyfhfctftz70nnf8gzxd40pkern2shesgqvv0tc5", + "bc1pnccjyrcsp8466u5n8qtmc8f45hlqx7xg2qr6p78ptvf7gguh45vq8qu8y0", + "bc1pe955faprm803fr9zfqg8hwqcdsd9hpv70gjufctq0kvaqkkhngysv4yn52", + "bc1pklshlfu99wgdujxccta6ezwn990pq20wmqw2que40zrykfju9qgshzdeg8", + "bc1p3g96uhl724c4hhx34pn4wgghxzufkrsch5mka8jvhc6l3vwqhqtq4f4w89", + "bc1pf42ct8rgnwmzut3ev57ntn23nymw0d0upvx33a0xw7xry6v8ac2seawhp9", + "bc1pa8rp0rkalxkqrppts0wxj4dwwr435qxsz6q0vup9f8ahle0prd2sx4aphz", + "bc1pz33r2qprlvdlljwylxymt9skcuuefyktdyrhhg4hz67e85fxxpvsjmnckr", + "bc1p38m7rufpy8uapnqan7ey8gdu3y3ja7pq2zwz8ef0kxre7u8l5xuqh27963", + "bc1pw0796kwkhpt3pnv45qzurcytee8vy00x3szmtndwnp2ms68qfrsqhynfl2", + "bc1phw0fuqfytqutqpdvcpxs0exugpe2nvka25q5hplalux5muxhugjs5x36g2", + "bc1pes870240wr00u8mjv6lm8z67yydmh548qmr668f2z6y0hmglyaxsv92x4a", + "bc1p9vwl47y77amjtk8ry9hfgkmzs644jy920au6pv2tslrqvyh5eucqslanpq", + "bc1p2mrvp865xh6x3gdv8wczx7g2klxktqr4s7pjpxswqayvgz5ecxyqjcxtuk", + "bc1pp5q77sx0j3jzpdgdqaqvpmnjsp724jhfynce5jxtm6cuemdu54zq6z7399", + "bc1pcvdv24jk4yr6u2ghh7w9nlqrezxne7p5f3uk2ec6mveeszrzudhqdpx8np", + "bc1p0fuwm0wygfum6htqdw8vhuxrzgkae9hretxfltjcxe70t03nu02sdsyx0d", + "bc1pjwe86h2nkv598mswyzdkj0ghaf4wehedf5mp3p2yy3pw47n6qy3smt4w6p", + "bc1peh99jzfw6jxmwqqj2zccr6xw47ng06regdm9h5x89jez04l7r6wqaw7shc", + "bc1pu4t3ra34arwxr39gp9dctzxr8kvl99rnmtlv65z90c3k4rmy0xhs86dy3t", + "bc1pem5zam8ht04tgs0vc0g3mwwykdu94ymusttw5tzztgt9s9p5g60quvcmav", + "bc1p9h89t6dll0k2ax9w3dep3t8dwq3h2zdde5fgppppkxw330gxmums5c2ge4", + "bc1pwyyfrj0hrdgzwasrc8ldjf5ls397puwcv5edrdudqzhf7tctvkdsdlcz3f", + "bc1pkks2ey77kyvjtapj3v2q0nqnpyfvq228jqnl99t6nwgwpwfmygeqjamyut", + "bc1pfz666jmt8007hrd33g3u720tjcr29aw3ewxe454s9k30scm5mhcsgw4epj", + "bc1pg9qlg960zqge6qppq6mq0ygyuxw9znz28ezmrlhay0rvs953jx2svtv94w", + "bc1p80pcpcwxj5xn6vr82a6nqf6st8852uv4effdkj2gx42kck8ma7mst07t4v", + "bc1pe4pak9ly2gal94mc4hnksu3lks9jtwdaz4wyduzfk68alxats33qtte250", + "bc1pn4p9k2yp89kgdl4cpf6uk6cajmuyavt2qkuuga4nthcajk7w5vcssmzehj", + "bc1pesdr9jvn3szytta2ka6ay7qsplft97jy29ccyfqq6hn3re6g6trqpepmxk", + "bc1pvk056mhkh8u7x7ma7ac7zr8y2x8v03jdrwpkyfmlegyymmz6vgrqwal3j8", + "bc1pxv6awl5z4cw70duczwsyzr8kxdpx75tygqs6g908h9436q6e6wjqtfdm5l", + "bc1pf6c2mmzpsnrp8w9m2jg5aek2k7ays9y7w28lqyd53zhxqfp0j8xsyl7q2p", + "bc1p42h42cmw9z7wapxvwkunef640gslu2k0483hu4yzpgfxy94f8wdqy7xuxz", + "bc1prq75auknjhe25w28ljrvagx2yfv5km7eduwmfwydc97a6fa2tpdqztsphr", + "bc1pzfrc7lar697l773qwh2qzde8mnq8xqg8etrd77k380jhwqae2yjs3ww9ch", + "bc1peweh5ah6zz9fgu24psfgrfa20dvjnwpf55augpfpfwda6kdcrj5qnxn09z", + "bc1p2pnnjhskeec5lx7mvl2qz0kghvvj4dx9rt4gdh85wdn8h79qnnjqscz6zn", + "bc1p6c3l6ysvjfkqe55ykv48utgcnskntxez55pud49t3ewgtrmlyyrq7adwjm", + "bc1pk32vd7rmymj335qpqgd3fwclp2mymu8phka43xze2xdyl2yry8uqe6fzgm", + "bc1pjmjd3a69y4jqqztcawp4sdh37gh6sw8ey7mff4ekwjv4m7s0lrwqf2hwzk", + "bc1pgx34dxpg4wkl8msa3qdtz3vpazzdwjtwe5kcd48g3l78y07jq3gqajzs2s", + "bc1pxqcr6n6xtqy96868e0uc86w6rceltvka35humrg9v73clyvq8vkqhduelu", + "bc1pqw289jkuqp3yt8rffmdlrcxaq3m8g86mqwls66m3euc0fgre4m8q4j60nu", + "bc1ptjuy3f7mcgwvlxlps2k38u9mzqzm6cqdt2q0p7rdgapw7fq4hkmqm5t0vy", + "bc1pra3nmzrp832tu4eyrpnv2qt6h3c7mskr8jya7u02sydpes8mmm6szcytxq", + "bc1pmuy2e6gve20dnyyezqykn4jentu42kssq5p9wr24h6u5jd6e0crqwhs2xc", + "bc1pfryvvrur4hm2jl5m5kyel4r5e8gcgakavwhseukydnyx340vmcxsq9wacn", + "bc1pu0srzwzd4qse60wl370sl3y0jl0v0j0g8fe32j690zwwws7q280s0yuzp8", + "bc1pq8gc70jy47lsmxyg5fqasv4zcamumywegt2lysluhjrpjl6p39usq9lqyv", + "bc1pjpxplh52efchkduregt08pkm03psqj2pxphwqzx4wqa9wkr37fhs3um2pv", + "bc1ptzjwzxvw36ghlmcjj7z36njfnrr9mf95gaananvkqjjqz6t7gvnqr5axng", + "bc1phvy3fnn5c9h8t25k4kh4hvr938r4ddn9u4hsgu2l6h5waq8m59sqjz3m9y", + "bc1pptqgu802vguaftmu33yf7709cnx43sqamlp600g0y9ms9465su0s00gw5g", + "bc1py3mszqgqmmt4gfhddmkp9gfjdyr5mvale069wrcy4rfhs7c2h4yqqveksn", + "bc1pkwztp9vmm4nx7uum4r3u8kwt83s2mnkx0z9pdqvsrgm774q72rjqyhx3kp", + "bc1puv40z32wdqemw2jqx3qrnqm6jy66drff80z8pgpt6ktndwzyz0mqfs6qms", + "bc1p8z502u5gn3pzav75yqqaepapd0at9ujx2te430zuxuqevwvvxn5q2ktl6n", + "bc1pytlnmvt7cz04jd3jgetwuz9hxk8qqugsy4pvhjkqr60l49n20yasgmuwy2", + "bc1pmjw8mmltt7trqdmhfyh3hcx7q564xhct6mfd4z2v9sjdvxw7a22q9uxed6", + "bc1pyaf864zafe05qc0qt35glj6puthw3v9q04mftphhe0sfge2mef6schlfzy", + "bc1pcc4nwdmwgg2lzvmc4ugz27lhy4g3wkpmcdwt0kkds9sedxl389pqep9zuv", + "bc1psha2dtplr0v6wtq4k75q657wypyuzhhghe0q5rgsx7gvkz5t8mjqmu8gmm", + "bc1petya5tsdka529wvtcjztm8y9msh36zmn3rtkdlpfm8twl6sy2v0sqpfa3d", + "bc1p3gzupn56fx9j2tn0hfyqaq77pw2nrsfckynawcnyhq0mae48r6pq5ccewn", + "bc1pd3jmt2kr0gx2xyhawehc5v87ycuxyhweteuj7ctywd3thmrmt62qeytk72", + "bc1ptf6396p5n7nsy89j5uh2j2jpstnzpyztzftjl76mche47wlj2wwqel2hen", + "bc1pl9t8ys9eaw728xxhc8m0zc9kfyc6h9d5r4qvt2qg3qj6wz49s7nqfgc4jl", + "bc1pgf9xuuvyjsl0wdxgujfdawt2xdvy8jq55vkm9why20830uu4d2wq8t353c", + "bc1pxtwe7zc65xxw80x2pnxaxh82js4t0cn0wc4l97cnl69qd0hzjknsusk46u", + "bc1pn6pz4trjqn2m4ekzlhnejtevj9yfa4nada22m8je60le8y9d82jq56l2vr", + "bc1pvxa2r96z5pa50twqdr96uwy745vaygc8aahwzznux6nx4meyzz0s5qwk5l", + "bc1p2kkcan8ksfgsn7na5dgycde3pw9nk67acx7v30gt2tvmxysvzd5q4u49dr", + "bc1pydgzytmvx28gv94q47dq8zmtaqzmhlkql8y2mqa8jc8vd29g4luq7e96sg", + "bc1pk0fuk6s4mc8kzl98w9yrnysswy5n2mf30wjt9nv82qsqymth24jqrp3pvq", + "bc1p7y5ku04zgcfc8e02s5nsgjlhp7cm6cwu5csd3sajcs5627ple3nsp2pq4v", + "bc1pfglduutlx9t48pafq6mlm3h9sphfgpqepk7dy8zm9fy47yax6cpqy6x9mh", + "bc1p7xak5k0nf3lawv6mp2kxjgeyazpatqzeepn874gp80cry3fxck9s707jtu", + "bc1p48kjmzfx4pcuwetzkkgav48e5vz7r8psw4famj6utfl858q9ngfs0fv5ns", + "bc1pxhyy06xw73t47lf83d5n60tx5htysejwwhzrma2wga9ht7ey4uss2qrktp", + "bc1p9rd6gcfqs2qf43l0zgfz3nq82rlfhfmgex6h4jltzc0w4xqc5jpsjzr78x", + "bc1pu27khs3gklg2fqdkwpf32pmaue5md4njcwav5xe98f35pqrtvetsyqyg5u", + "bc1p02w06zf6cj8d3nljcnyenr63yejemsegkht9mwq662pl0ge5304sj26zkd", + "bc1pc6amg6tht4k4yjqcteyq6vcnc04g0wmf7l3j4udwmxv7k2wkt30qmn4w53", + "bc1pwvu9aga40j4geu4qzv92w82akj8eugwzrz06wq9gz9dcq3ewgp3q4vlhze", + "bc1py0cm2magqkzjfsaufnkdjrwdqxqezez3j0gfdkfra6wpv4nq3w5sv8qghs", + "bc1p3n253zkpdg33zg8u6q98nrvq5382a6aym4s5m8kuzcmyqy3u59cqkvx7xt", + "bc1patj50qgx5036zaw8733k8esfdwdcp0wha59e4evjkd9jhg8wwwtsdve6pg", + "bc1pqu006lspq00cqp33trmcpgynrhnt7rhaat5dg8gwj8plny9pnyhq2dapsn", + "bc1pz5k5xgufac8ucar9j4wv43ex2sxmmtftthmysezvjw4sfl5wze8qjkeght", + "bc1pknceqxa6hnz9t2wqa5nwsw8l6pykzgvdfesus4383flvpjec7jjqejgcsj", + "bc1p3h4raekh7e0w76kll9qcslh4ejc7pcfw7d6x3rq2vwhz586r3fqshgu8lh", + "bc1ppsah42380fz2k0wceec9adwe3arh3xg4aqh7qshjq8pqs86f53eql3s420", + "bc1pl7684gykqy6dvnzued658vngj8h3x97nwgvqr3lfwxmzyvvm9vsqc57yez", + "bc1pe6dh9v59ltemw837lhl5er0q6uqp0dr898kmzahktgszzwcwwydqqwtgu3", + "bc1pkukn02nuwylrh0wwhtqskxw39skltpcv9ezfe2yn3uu4epztu29sa8f45p", + "bc1pqjd3kdh2c3vtrc3n8uc8ztw72gngqu68xx6y76msrpaslc3s39ks9trj0u", + "bc1pzaymzprvyfdk76l294367zdjcjf7ywhs2vzxsmhnxx5k59a9pjqshvrkvu", + "bc1p7ctfw5csgwq64rqcqk7x6qk792emssn8jw58ztdts7weheg93ekqlpk4rm", + "bc1p9ndxeyxx9jgvlxfysr9plckujm68v4ewaqang32jx2e6pvvatv3q4wsc7e", + "bc1pm7acxx0trvvvyah6dac286ajsmq0tp4wr6mtyvyqp8shtxy4mfqq8tm87h", + "bc1prwufl9kncccy23gx0tdqzw007g7zcvlulh5047rddffl2jn52k6qmhygm3", + "bc1ppyj08ut9r8lve43nx97rngfxuxf523hr2nzy8mt3qh5a6qkx0yrqhn8wh2", + "bc1pw6wen4mqclrk6vtuezk3me83qk7f23g47km0udn6mfq4qwzes0ts9x6m2y", + "bc1pnugfrt4jjtff5y4qrnztg07wpnywyrf3h362zu0cxv6vwhq8uusssmgxcn", + "bc1p6stqmjqqmnj5wry9ehxee0r7s8mkshxuahuqfrjz4ju4g30exv3s2jwvan", + "bc1pu864yj65uwg8ttvpruesusdw35lsdh8u5xy0znmk4mjddw39n5dqhjl2n9", + "bc1pwngvjkrn54ly8yrh4t7ujtlrv6p4ml8hrv4ptnq3s2xuxrwtjh2sjvhh64", + "bc1p6kztjg57623nw8n24nvecddy7jc542alpvtk652n07f2lwydxe6q00a52h", + "bc1p2908je0tzve54dunuzrj2evmaa0yqzprxjgc8cah647xaz5zpdrsydvh9k", + "bc1pxs5yrs3eltcel7hgms0senwyzpuaqjv4trmc4c23dnk54z40jfss4s3vag", + "bc1pp5hd0f6ef7e27jzfyul3x026klk6ryvt6uzyyjvddr5m0e3fs4wqsx2kyj", + "bc1p0xzs8jwwfdlz3jns82r9h70zreupkk7zxzhr8mhun3qs0egtemjq338lqy", + "bc1pyugzu0evdty7q285c9ufj3ccvgq0vuzt52nyugttv6rdx6ftgqjq2npqv7", + "bc1p7wg67mn7nq7vvfnrhsftwnxzcg7rquag7pl8q0nwtcdwcm3c6t6sgxmf2s", + "bc1ptup3zd25zljy7es68mywz47felu32jqv5kak4p0mw86tvwxt7z4qyxzl9j", + "bc1p3kklgygwndnvhhf7muqyzfr5m87hlmeugq3yf54kek26exwnat4qxw54vd", + "bc1pq99tz7pxpznk7c96excf4qujjd5cagyt4qqwl0rzwx7w8zxke85qug9wq9", + "bc1pt2627l943mc8n4y3lm2zfuf2artgfgtey47pxa8sleekdpm22cwshga96z", + "bc1p866c06mal4dy78ths09ka54vhf2quw9uj6jygthx6etgqxp7kseqa44yrr", + "bc1p764762ghg553kjn7tqvhq9n2jpyyht9w9y7s3zp9lm6xs5lu55nsf3mk7y", + "bc1p8u6nuafgk357elqeeze8x7esqkg0qnut5dp8ykcfyl7c5t4kr67s83zszh", + "bc1pl9zhx58hetvksla9rs9nmgev0yd606lfllp256fv94qh4h7tc6jqhpxrl7", + "bc1pj4h66snht29mhk5evxhag3msv87pg4mp083sa7q6tf8vq59daadqsawstc", + "bc1p045qnp7k0sltpykzr8y6frslu6twcr3jmxhgz27655myehm3utasrvumnf", + "bc1p27t2wuwzmf4ykx46g7pzfrd86pxaxqkzgzvyd6sgsa4unsjaszssz05shm", + "bc1plhyxn39298948p7xecazyy70q6nufkl6twp8rz37sv4qmpwrltxsk3kpzn", + "bc1pkr765vy7xwmsxvsge7jdjulk8hamvxdqy0vqah2l36knxhs6vhrsza9pu3", + "bc1pmq6cjfzpmrktrmrzu8787wcd4x6ee9lak9yat2746tsq28a9amuqa6sdss", + "bc1p2rk33d202z2pk3ah7kw7eklqswxft5n9vup9yhpexchmzn5wk8pqlpje5p", + "bc1psynd6qvuthnxn9qeze02stwzy8avc5h0lej2p3rkeejjvaw04agqs8hrth", + "bc1pycgattsus2dy4qa85rvvs3e3snnkadjzg24hnfah3yj6w2zpuacsks7yud", + "bc1p8rk5lp6nhx9kn3slzct92audsw0xt9gnywvccnj6x38k446spn2sus4kr8", + "bc1pvsjuq0w50jkzr4zhxwvng6jeylvs4dn8na96534wet8t0g0drw2sgmxcdm", + "bc1pymqaz92n3rsdwmn9429kfqyc2d03ghgduepsyueszlnlnc5xrw8sudw9kw", + "bc1pdjt06555dadst0y4xvurhvg40hxmamnff7tx60jnw9pd5hjvy3usqt0y97", + "bc1ppmansxxs3q352dgqadctkpqrezjut27waal55h87dewcqzjlfdrq8d223n", + "bc1px30t7ajy04zmg67ymjq9ausuauxznkp3gjer9rcy335uakf6p2wsy3wg3d", + "bc1pdnf4q4lcclw7tcvfy8qd586ksfdurzq93cl06mhj08wqnurh4utst6p6zl", + "bc1pwxgf8a4tasprqpzfzqce25x08l42s3h04n0gqwxgqkh9xz56ljaq03fg4d", + "bc1pshytv52rjy4dhj6zwjj7x57z9e0gg8tcqdhz3cuejn35fvcvrquqg3th3z", + "bc1p032g2rj48wns2zm3a3ldk64frkhawmmezply2dhu40vd6uyxnkvqqkc884", + "bc1pepptv3kh74v76tm8ar2zvlm5c9ypd000jrdd3qptc8qgcnwvr6xqf7w4xm", + "bc1pz2chfs9huygthhyw2h38an2zfj8cpfnskzcrgfczt6uu5gjeya3spusgd6", + "bc1p440fzq5lcj3xm2z6gcuam09yta9dn4c3gf94nt67js30excvkgqs5wpzgu", + "bc1pqkdp5r70td23kute84dwmsn5uugt5m3va0lxsslujrr7pxjuz8cqznl6ch", + "bc1pjf84casnd9fcaqasml9aewh5eee8p7kwzge3tvs59euypz5xgvzq32c78q", + "bc1pshsnh0944cueua0wfms3nn6jgv90cy4wx385qgnlffe7atyxe95snta40m", + "bc1pszqjj56j95vy0jvpjehvzkf7xa8a3rj5fyh0lzawxs8wee423xfqfflk96", + "bc1p6vdufhh5u3zh4njj5uvatxpraeg7k330fdufv0etjd7k6cay8p3s3s9v4t", + "bc1pf4ea5kqkkpj2zps68wyqeu9nhetpwe5u8gs9365ycfxgka6skvdskysssy", + "bc1pef59j59acjptjv26h7rtmnu8njpvewtfwggfa085xr69t3lju0xqv60wsx", + "bc1ph9jm6vegdr9fx038xwgcn2gd8xqvjac767t3dpappn5uav4x9v8sh7w5hv", + "bc1pwkulxea37faqg9dxsvxn98ftu9gq759hncrnmm5j2t9234vxteasepe3qk", + "bc1pnu4x84sfftvngjreygfwlts702z32zy3mm73hcjsh7we5pfnjqqquqehwf", + "bc1pdmrm9ldmlvluz8sv33mqfxzr3pj3ak2elzrr8vy8vj36pg797weqsgsstk", + "bc1p55t8yczfrnpsu76f6rduwws2edvasqh37wm22nkkyf6vc2thu2rqwk326c", + "bc1pu69lj6wx0257t7r9fh94gvtrf4vld5mddjvkavwdunx4zdjnt47skvuxf5", + "bc1pn8elw66uhjjfkhcxy3478nu8ayydmjwh73ukpc3vzxeyk35n3e3snhkr9l", + "bc1pyan4sq4dzmam3sny3p2dyhd8p7dswxf75q9lgwr4vrzu38lc8a0qwlyz6q", + "bc1ptx95t72qa9ss3859zae36vrnfs6cjlfaenuz6u4m5vcgh8vylqcqmu83h5", + "bc1pzk3gcp7lwfd0j9fcu3mw4uvm0n2ntxs57jrfhmnxulesxu2ve27qrrvvhc", + "bc1pppdjnv0gq084u2twrskv4068ugxt29cjwqxeuj9fj6gsqjhflsnqv8krfr", + "bc1pu62wftwghxur62twv4rfy30xtkr0e004mc4c97a0anl2huanyxfqls35e2", + "bc1pj69lx45meecwg4u54pe0eagd59m8p85h9wdsg983zj3aqefac7lqhjd6ep", + "bc1prjtv5q6mucwjn5g44lprymnldvg9jznu73fp86gkmtgm7y72t7ns0ar6dg", + "bc1prg3geyqmnfdrnl86gy8547lzgjjlvwq28f4w2tm43xmclgm4kk5qlt2cvg", + "bc1p00zfnc0takkfulasfhwsavlyj5kd5gq4ysrfn2sls0e93pp6c70s7rc7l0", + "bc1plewwvec09wuhy928rtam6gczpshhtl94j6sv4vaqsn6y5ztgm0gs5ysndc", + "bc1p609zec26jv9djhnku9fjtsk6uevsxzewc2nv0z55xhcpc6vj7f3sk3afa4", + "bc1pywe73q2k45srrcx26nd2486frxpdz2cv2v5yllv3mumgd9rhp09s9l9372", + "bc1pyy3vn87vdxfelcka4t98n35vcvaar0g9npnduvfjy2gsm9fk3cjsyqz0hr", + "bc1pq805vca8yecx5a93x4amejup4lqqtng6f2f6j3w8jjjm7wjtxezqu9mu5x", + "bc1pnc4hamlf8r062qxdn4m58660h4xm59dzvqvr4354q943cw2p6xzssenyu0", + "bc1px659n20tm4xcdduczjcgs2ye56qnp5ald2xhst37wsucjs9wl5csq47rxt", + "bc1pfqteh4f3qeuhf28zsz8z8wksfkl7j0tt6ep7u7mahddpqpua36ls8cwyas", + "bc1prxt7t6eqezvv5ad36htejzg3ydxcfdszzaapddwpzsedvmrqtnfq74klux", + "bc1pa9na6z6cxpgxckg9apktcskz5tqwad2r2m2vs335gdvuxmf5yqrqmh0x2y", + "bc1p27l8unpa97l8zmg5cu0lgkytv7u4jnkhpt3yknc5kmwuvh7yfh2sws3u8a", + "bc1pkqldqttppc2dt9ap435qft2xuw5r0s0v7rql5twa0lyzfwh90y6qd02lxr", + "bc1pr07a5v5fvsk7jj9fz2cjtph96t98t9kzd08yx4lyrx8u8t8x7uksx2clsp", + "bc1pq9free4lwk66c5d67qlee6fdud0f92n3tz2m9thfxmuvup95fnhqdn5kkt", + "bc1pyzlkjlwvlesucmpztvf7e30d46a5pr5tdhz4mskm6hscq9l0ultqg2tpe2", + "bc1p9u7fv3xlv069ztfpjatdqavdk9mfyl9va6hhxsptxpg2stqng6uq5fctee", + "bc1p9fpzvqc6eul25vtkucdax8t3xggv5r2h48vs8lfdvvjkpp662jlscu742e", + "bc1pnms7xt3uds9tk4mma5v8yxt763wmrwfnvq0s0p6j24dphq0wkv8q295yjy", + "bc1pftgts26xdx5pgqzkx4qre0apszf3wr785aaq8w78q0vu2devn5zqfv5tsh", + "bc1p3xfg574cljfsvhw6s3z89mep62ap0lcxcw643sacnuuw0grvc7as4re8ne", + "bc1p39q8lz5h8a8mjayfmrxjg6n7luqhxav4dtd2tflna0es34tg69nqjvxpe9", + "bc1pqg5e368uzrtsxxun66uqq4mc6hlxy3ac2untt8cw5r0yzgu5lvzskqgsd2", + "bc1p38wul568flxqyzt9tj5erjmwgsdpvmxuk93nsvtjza9etm5382yqpytqqh", + "bc1pnrv6tsjwxqstz6utpawjufqqrd33dgzur9c0ggfz6quc685ue0hsep3xrw", + "bc1p7602q3vhwj2lzmr0q75kpu3nl6g9lpkxgrvmv4kwgvl6gh0yu2yqpp3qal", + "bc1pg68fm6wxcc5m756hgf2y3ghuse2k0afeax4dfhp7dksy242lkyqsmhuxsn", + "bc1p8lv87ztjt6j27hglmk429sgt2hue4dygk2au33hwetkrtr9qu80qpkcpqs", + "bc1prche96v58glzfccncqa7suemzjd5rxsaes4w4mspxnqqk76dxtrshe43yf", + "bc1pnnhzdxeqhknqlyml27zqx8a3dwuf90ekuhsvksg8zw5kjapq8ggqjetjhs", + "bc1pc5zvc42g2jdj727vk4hnrmhecdgta4e0wu7dsf0th80993u635uqln2w8n", + "bc1pmhat0qryatmgjt70qne3ku6kl2lrp5spm8lah9s9zamy956yledqqpraes", + "bc1pand5ueg3hwcudc2ycu8tmr05z6jk6p6sktajxgphpqjupk9agp0sajvw3q", + "bc1pxek6dak4tkq4uk73clhzx0dx78etvjhyh2n80hwm29kd5p99c35qgrg7sa", + "bc1pjvl2pze0j6x304gwduufprqkzx6wa5gaffz0zd9n4dnly8q0a33q206nja", + "bc1p6j3ajewqapy5gwd9h2c6mgxrqz876fu5x5hp6w6uy2cr0n7ltw2q5d36ll", + "bc1p5dsvdw57nppd8zytfeq5u4catwxj58dnf59juhhczcdrhjyp3c7qecqs55", + "bc1pnfg9w0slty43cemmsrumhcsfxcfy5hh94n62ehvdht9ww3slt5ms389ptr", + "bc1py8mvd2j3vqph5y28scxh0w57m30fdah8qwvttw7467k5wc3rhpmqhmaj8j", + "bc1pr9y2zn0ylt2mteq5lzsw8m4pfw97xhnw06gxj4a29xj8qekkp8wsca9269", + "bc1p7zg4jlnn4gfh9x3j64ezp52w5xk9ehzmtjsnk07qzvgc2kmg3aeqkltukp", + "bc1p47e9dt0cvt00l6g2qfwdfjqtwpsa5nju43a386nsa4j20qa8z92q3nf7yd", + "bc1phx64qxm2umllk93zsvjwn7r472esmawlwwlak3tk5375vnfndf6q7wy3rv", + "bc1pxnwfgk8kqcaq76tsk4qn3cr8ey4dfr9e7sj0a7zqs32j78fnv0hq5aj8cw", + "bc1p279lftul80cpdn8cmnqng9pglyc647nyamzrrdvl847tnyvyn79qw328rh", + "bc1ps5u284m59ay808nz067nw3eq6ma6y8yyjdkqgxzx5q0l0pk6f8rqm09epx", + "bc1pj36uzy379frz3537l20xl04d53u49d5f5q32lhagwvl0txmrn3esu0kvnp", + "bc1psxq05ut98hfss75v58quvdnaq0tzhrhccmr7uvx8m4wexu3kypmszmjfxy", + "bc1pp2xw65thhw0gcrk79vfju50myt3hw7slwmdep4h8h0ydyxm0dysqj3cuty", + "bc1prchuanu78s4x8mdl70q5x66pw6cckglerluqjqafsf56kqcn4fhsxdf6n8", + "bc1pkfex9y86lqwy65u2dwsclwu28xjnna24dr5kg5582thvnrw9wq2qjytfrv", + "bc1p537qm8a9ltqd2xlzw7reqp303ryxy8p3q8qgc4wns9n0squ0f49q8mqpz4", + "bc1pwkcmzvnvk5gnwena4s7040xy6rtkr4ye0catg5kmzmxultda8fssuqw8ss", + "bc1pa8wm2pn05nduwt57tna8w3lktus7qutmnlqgmxy83uey3pj9v0cshtw43h", + "bc1pess5hw8jpcxun2l32y9sz7t3xkwvzee0xd6wesw3hdk833eanxjse49t7w", + "bc1pyzqfv4xzj22yxx93j6z7sj0hvku5hcutkk3jg92l5f3lashjn4hsm7ht2k", + "bc1py6frf7qz0kdwptxnem83smshqqlzlujsm7kpp9qwwmfeswy42x4qgdq8jd", + "bc1pkhw3mzp99gusp5d6rjsm2z3uc0pfyk92naf09nxfdpk09d25qcrspcsvh7", + "bc1pd2g6lewh8d84t8kp8vqmfk98uxqe7y8tj8zuta3cn6ncz2ga79dq2yms6j", + "bc1p4ug75kd8za6y3hv3ju7cthka477wrrsd4scsyvhltc96wh2lxhlsfvnvmz", + "bc1pe3fsttw2dnsa7v84z03wwz2t6wag8ftlpdutylut4t5yyrjgamrqjjd7jy", + "bc1pjrlk3ffs7pegzececgcy7u8kd37qhrk3xmn5qry2k9e9vzsznlxqw9a2q0", + "bc1pmh0sdh4p2cyvz6xdr90v8kzmlje3rf520u6c56centnd5h0tjzrqkeacur", + "bc1p92d00e2gm0wk2g84p2lzcrevxnjngftymhsfyvr70m0u0dma2lls4gsndk", + "bc1pjy2fe8tu5yjsp2tl5xn46qafz5x9fm5d83854pn0und4lkctva4q9k2psc", + "bc1p0ts4jzffeyas65qxguvz5yp0vdklydas7jn697qpqs736cdgwe0qc3rvcw", + "bc1p7yrpd3k0tcjy7kkr3zmltw4y2g5t3l67yvwm6l64vnr598tthwsqsjt6gv", + "bc1py95knq06rhwyalcwrm2uw3reqjknagh02a48304q7nwppkhfjsnspuajny", + "bc1pgll4afs4jkqctrmsn09rauw6tlkq0dja353qvdca0zvxa0mhq0mquk3x8u", + "bc1p65vtmc3at9g4444f6fuptxcmxnddyz0jhrfs3l80dgx7tp2wuemsc5469h", + "bc1phkd4x9rxsnjve279u5w5vfyf5sqm7qmz276n3xgse26awjj9hj5qde7u78", + "bc1pw7eq7cepre58kgzgcy3td0pm3zeydpyy5fl7eqzvraa2kutxuqmqkhzqxy", + "bc1pp5604c3grvks445akswqs0jgnscc43jmxtjt3f8723v848lkv0esfvfcpv", + "bc1pra5v20pfwednz7kg9yg0tu0zr3lsfypx5644rs3lcpwgcaht7czs3m0euz", + "bc1pfssmvpfu534p3rxhzwfdmeh4unp9cqpu4ynjy45my2m0qj46gpsq0sefxg", + "bc1phtulj7rwsumndkhp7yfrvxafae9gj2tay06wcayxcjg04572sz9qn7vdkv", + "bc1pgf9hmp3js3zmef5q9lndrj0fdurfy4l09qyug9qj5fehls6n93esehahhg", + "bc1pxw3lfx2n0y85gyng03p0qwepngqvwph7m0aeppckwp4dsqk3fu2srwceta", + "bc1p9c367w80x05k5njphmz0z72wl32v79h7m2sl2ua909lkm0uvg3xq0ppajp", + "bc1pu6f3htlqa9dkad2u2tzsla8ral6enx8cw3wev8dv7zxwdkrlrv7qvyhvs4", + "bc1p4ulyw7mdma09auz0af2m7qq9k7q8shlvfp5jne8l8u9r39xtczgsc4a2s5", + "bc1pg9780t6h7aj4d6g7uxh2q4kcnmwg2sx80j663atcyqux9sqwcajsg0s8mm", + "bc1pq3wazhndh38vx44pexxu468w0wzkylgnuj26wfveq350ugl0uy8q9k2x46", + "bc1pmr9hcs2rusjnk3q4pxm93kx3aazhhncxf5gumnsx6fppwnjjjkdqkek9eh", + "bc1pxhaupsl82fpjsj2xfpfl4kmvyrzfr0l5er6htp0p94gvfxagmxjqft8eag", + "bc1pctjfuf7qpsfmtsawcfftgk2vm6k648d6gma0srsey62eyzp7eymsdllscm", + "bc1p6jpnl5xy7jypvmxux3tl92xz22ny0e9zxu4ypahse3mvv0f5jv5q97js6z", + "bc1pamhxl3ek5st8mhwdf44vvc0ghkk4fhdkv8ntly873g08ng63jg0qdpzjz2", + "bc1p73ptuq2ypk7vtjdequ8n6qfz3elgsjyhyxc9z032j8qw48gshrzs53x7wp", + "bc1p6ushc5zlx44l80whpeytxc7m8c2cxundcdfjcxx2pum6886neetsdnk5cx", + "bc1p0fdze7x975rhh9mymvpujnk7mt68dtme7tsdjlfmwv4y23fyk7ssu78kke", + "bc1p7gtyrwskr3rdapsvqgmu4dtnj8nrhnn04ym8j078020mdztsr6xs99z392", + "bc1pmh4el044r4ksukk02fjdwljkk0v9hkgcav8aasmacesqadchnvhst0zsww", + "bc1p9lr6sz3xhjes6rrzeprwcr8fjp635yky7phvpcgwlnpphmc7wmpqf9vzcq", + "bc1pjj35kxlghhvpgwv4dwjvkl5jzrl2fd2vkx2her0lp8ulkz7ylpps3mnzv5", + "bc1pu57psmu9djwzrhhgus3ha7nvup3fu3j0dmv7mm8cscy65rxxx0lsfh7p8k", + "bc1pz4ymlq98mew9zqjrvnvdm5dvxyvdm2g6klynm93m5j4ykvdvvats7x88gd", + "bc1ptxuz682r7hs5fhjxxjdc5cg9u70mgxgdp68j537ggqch8cdrrqysypdcn5", + "bc1ph5gaemtwfzqw2p5ltmqnhh43f768rtmzvdtlg7aam9egxr85pv6s2t3q3a", + "bc1pzh7kuqaw93m4e72vfvec6yhsc4wn6n9jglyzenvgjstmwql92n3srhx7pq", + "bc1pj7p7vsqxkhnqckcra5rzsk8tyfeun3tk57mktvrgc3guzy67a6xsa3cnhz", + "bc1pftnxcal4t0acjmgnd0xfp0yw7w72scewm3dnxudm675g47f52ujs20s8t5", + "bc1pzkted047dqtaehwa5d47mkkkjc8d9ljwffgcg2luhvfrhqqhhn5qujlpp7", + "bc1pnsxgrjdd6r08uwjr52q8tgkwy0s39zj7rhmxffetegxsvy655zkquaygxl", + "bc1pjgxy7u4hkyfnjczkgzq225a2qu5pum0kgsv7cv7t0led2n43xehq5pxe6r", + "bc1pjjs5qqhmh5tn655dns3lu98j4jucd9ptwghyzvk9d7jekm5qew5qy8phtf", + "bc1p73terxl52u39n7z47pp6g5jn28a9awqlhl2cw6hx8p2nht5k4ypsh0jlhw", + "bc1pyf46mfspz6qgf2kr6d03df5wa52pvtxt6e3rxhwax37f83xaapvs9vze27", + "bc1p0lx035gdve8tgqmsdaf59egxpwk424h4y9w6kh9w5gq89vuzjyksae4ff9", + "bc1pa5ddsc4lc88canmaeeft23x0lsvf0kqnde5v0akadljkrxh8740sxkurl6", + "bc1pedll7m8mmphpnhnuemdm3mynj066km3mdlcjl6plqgw66rn76vysy9zugh", + "bc1pdw6gd9cvjrlw3pafcnfdstl88qx220ch7060kej7dtyamd6lh8ts7xs5wr", + "bc1pjc5cs6egcsfyg9lxxywr85jmpjhp6t7aanplf270s5042sgsrewsuzyjj8", + "bc1pdad5mumjlmk089raszpdkdcjtklv2znys979pef4c9ynp8nal2fst3m5d7", + "bc1ppha2fc6hlsy2400rrg3xmn2hxs62wha0s2nuusrqgwtxzu6htcdqhpzx8u", + "bc1pfyy5klg73dp8vjfgtcm0hxsjmvntwqpnjy9qu46jejs2kcfspxrqfqfl9t", + "bc1pw9f3sn8247p3dkt5c4e4n99vkydcum44d92nqahzwqw4eju3u6fqxup44k", + "bc1p3p8ff47l52fwwtrsms80eygyfj8ggu97f79mn5lt6z4eslen4s7ss428dj", + "bc1px2ca002yedaqnfky2qfuu7w0mnjhvdxjxgtwqdfq6dfz6flakv0qth3zzn", + "bc1prcrxa4d2pynh8hsafd5v59ex4ca8uztqhnjs6x8u0nrse2qwq3pscdff6w", + "bc1p7rm2shfl9l698884wvy8rxd8k87l87v5gh9nrdd0et8elr99jh6qanqh5w", + "bc1pnv884m2w67faa46pmxq8ecqd6ga3llytlcnp6s4ztzj2nww078vq765t5w", + "bc1p5tse578kvgska97dpl94mcfl08ane2f8h0998d9zwul5r2e23j9sprnytc", + "bc1psc2rs48gmscdsx4267udng540wypccl5uex67pr7qseu6ssva5lq3qzxgj", + "bc1pst6uer9plm70jzyzn36jy6p4s0zjv5r3t0gxnlpzwf5nsscfucrse2mxd2", + "bc1pu3w04e5s64sygp59vn9z0chscfkha329legsg4ag2hc5j4xthvsqfyw57v", + "bc1p3lqaggssfnzu9xupg3r8x00gf0u5myt4z2mps0mf0edwt8h2jpzsajadmf", + "bc1pke2j047u5dhakvsr0wr0xjqmwzu34dxl49raq3yv9zlsz3qw89wqh2666x", + "bc1p2ls2zfejc8m6dv5xymfuhgxs6jtcgc2x59vrqd62qtw8l2u4e99qqmmwan", + "bc1pdjhe6drpcurlmgxd5h7m84qg3kqarszm8wgv428klj5qe4kdnhcsgyq2cq", + "bc1pz47acs379xjj046ly26d5mpskdv3m0672kqz484h87yusx2etyeqx7jr0m", + "bc1pf6kpxa27e9w6xph7u4qem9qcyxuulj5cutwl8ks7gvuptxtqf8zqksr9kz", + "bc1pr8xfkn4368v04hplavxgjsd4ln7hmyvzfk998k6f9c73nr0qfw3qlkety9", + "bc1phmnj6c5s24mag4z2nzusw0s4k7aahmr4w9ztpn6ys6htuj0n8gtqz9mdre", + "bc1p995ajeeqf4wf7q4g3zvx5kj3kvkkpdn7pxx0cdqj4npp25uradystfv3tk", + "bc1p3f04c5jwvzdw7ent5vnfr28hns9kg2ajmvax8m6w9yrqcrhptdsstsxwtk", + "bc1pksutxnzpm5q0qnv3jtj65qnjr8ht7u4hcu3efy8yp732pnhxxxwqnsgc8s", + "bc1pm4upak8f5nlym0dmgg3v3r8w6c30jn0zwffcssvjm8fjdd6ldseqnjpk60", + "bc1pjtzaefwf6zds894ppngzuvyx7fpj7c6ht8eequzaxhlz8ghqxvasksp5h5", + "bc1pfa6sq48j87q06syz3z5vpkmykkkegv4uajrex23t0r3d23s94pfsmy6vr9", + "bc1pvphqhvgxu6ngz3nr66a9n4t7gze3f0fx6g3n0vwdgt4lj9z5jsxq209jcu", + "bc1pun8zew42h7ajat7wnjzhzc4qsgs7adpytyf7auzlk840wyeaygeqy7vlr9", + "bc1pt5kdd2vng55l9w3y6jt2art8qn8ak8y0mzrxaqp08jk3fw9z0nkqha58xw", + "bc1pe72svy722dm3p4jhukmfa69m6p4qswkaha7jej42rwc86l5muvqs6e75y2", + "bc1pl6yhm4znppqfktuej8j6hgd5a3v8dva9vnlnahpsg8wsft2xdkeqguusrf", + "bc1pen9yy67zg75jaz86sctzddct5zqml067qxks3qzhvjdqthxeephqk9496l", + "bc1pspycrdqaw75ml7l4usajgaevtle8fvlda8c07q7l8ldzzum58znqn3hxt5", + "bc1p5rngwhkcs8yk8ga7xnkn86sa36h7cutjdjj6ej5zv7rqnrdvgwcqkfv48t", + "bc1pvkqaf4z4h5a6pmq68hp63redss9598vcx6h9ny4yuyawln0qeklq59dny6", + "bc1pyg53wuhcmy3xdc5uy6e66uwanf5syqq8xa09sfmdc6jyrvecen2sqs63s5", + "bc1pjk6e957mpk0hektny8jrxz3gppz0m8z86sa6xay4uc84ravg676qlvclrw", + "bc1p8kp2vzcrjan22m5r7v32rsx4p4pw52uldp5w5qfl6nfg363kcazqdve2vv", + "bc1p4adcnnajckncg2efc5cryc52lusxdn553d9dhhrqvls69qu7fx4spdsnjf", + "bc1pj6add6807lv6uftrrwsdwn3qyzktsuwqp2fa6rncr67xesp0nwyqchs287", + "bc1p74p7ptevktwwghdv25yl4khrd4uxs6cq6e2dper29mn4k0vxrn7qpvnm5l", + "bc1pg8zlrt37rw9dq54q29jg3jewwzlwvxxefhmfcggez8v60w4ph6ysfutg2t", + "bc1pr8dkk5jpjfdd2ngpzrgzt7chw7z4cs7mvrg6c7p09lg4f33ffx5qc9p80p", + "bc1p870fqzccmnt98r7y5d709qkuez40xl28k2x5vgxy63mrnhax6k6qy2jmxv", + "bc1p6dp0twmyhvvyhtk2uecrygvrt6jvqs2hgyrqzkpf8cht83p06geqd4uzd6", + "bc1pcq634lxref3fu5hgnmkephhcn9esphjyxw7d7r7493mdj44pcpas3z5m7z", + "bc1p4adwa8agva62l0gffa5hax3ruhekk0xne48grjuf7k445qgmwjnqsacnzt", + "bc1pl3uxhlg9yef6rvfsa7xgvth34wgjhpjcak8a573ncl9p30c273uqhhddl3", + "bc1phlmrkn47e6l9m73yyr04t58zd9rnlg3fmutytwv3vzt749phq9ushmg5pt", + "bc1phxkes8n6vx3vkpdq4ra39tvt5f7l5gd6fgnr69nfqlgu3n47n63s4esmts", + "bc1prva5dcedh62ar8ptcwdq29xwp9uyzfvq2y6u2dknls6anne9hg9s6s53fh", + "bc1pu6wd9nejfmaxxrywvwx45gl9rsqhkr9qkzn6pydlvh8hyald0jns0exwll", + "bc1puk4l6czs7gtjaz0zcrnh8cml07lyvug6d9zny2c58uxkhmk25k3snt67m8", + "bc1pvmswnge08hegk2l9qv5t6cq9cg2fmhvxqwhqsu777hpmnmsf84wqp7dv09", + "bc1psp2dxlal7cqqdfextusgfqkx78xry54e4ncw8jc9lzqz0d36yfvqvjdpu6", + "bc1pts8x8gpe5jv68l0xw4uvsm3akujv2ma8qnp6p5a6vrqnrg8yehcqucmkcu", + "bc1p733hm4c49839ms03elm873kds8272mv9kxzv4h2ywjv68956nfuqdrk4rg", + "bc1p0n9m8gncl0n3zg7qatpzgyqcad30ppuhttx73ey55z7eh5pzg4vqjwc338", + "bc1p32caq8up72us0pwrdtd3x4a629qg9g30u2k3eqrahmwuynkk6f9q9ekcxw", + "bc1penaw4alay3s7sqwdxauqa6hvynzkugwel39wr9gmrau9826xcm7q79pq28", + "bc1pa58qj8cnetusynjs6cs0qargzgjaj50ngt54s4q4xma6nlpuf9vqqhhhfx", + "bc1pu3f6tymjh53naplkllf2g5582a9fr2r2njv65pfef0y4uaytccvsdlfrnn", + "bc1p903n99zcpagf3yy4hz5rgrdgkhk3w2y7e88dqp94k6y32vv3eh2smf60v6", + "bc1p6g4s207qvh9xzue5mt3m89sdu6fpvhaqd326v8e576d5cpvtlfeq0ajdg5", + "bc1pj8fzhmugtvwk29k25jkjaju6hx7zxs0x4u6f4v8qz57e06txy3fq3tafuj", + "bc1pumu9y2sdq3f0kr5q44vfmsu587mma2886am5tvrfsp8yxp6l4acqyus2pv", + "bc1pzv2a2a6feddswy53yuhrdgms3mnvyrxrqxe0nhrdjlauah2khkmsr2c8ad", + "bc1pftc4wns3rngfgj6yjv2nj62c6atjcl89e6dpursr9y8d7cekt6usty26v0", + "bc1p5w7ws4nq5fztzlstu0hcd9a7cr39avf5fj0c74r0cvswezx32fysp6s53h", + "bc1pt30wtkeznjxuef674h43jma45m3s484l7m4ammk2gaxd368rxxrqzc7js2", + "bc1pm70rt3uktvt6fqaj2swun3syxhls773f7j2lutxsjsj38dh9ztkq53ks5e", + "bc1pkzymvuwp44ludrf96dau93d6p0h2ekahc2musykt2sdgjhfgj0zspk6w2z", + "bc1pna96k6kxsl0c4aw4fkch7fudakzhzyh6ajhcg8nee9xayjwm77lqmmfjs8", + "bc1pvul4y0ehc6k68fx08px49v24mt6mfhl02zvxsf4k2hevgcl0z54s06wzt3", + "bc1p69585rn045gjjlxgp2ldyptv005p7ge9zlz49em850rwlnzpxamqmzt7hv", + "bc1p6vv2rq47uckuuheug0r0dhujmgfnmwrf54scm3sw7c66dzkca3aq0v49mq", + "bc1pq3jl8llknxsp8sa3sc3nfm6gg6ha8phxj62akx4a2xrhuecwvrjqqm5f4l", + "bc1pvcnwy9llyw7v88d6ulq6zhkq0rpk8rx45n64hsqx8rjc565cs3cs4wexcc", + "bc1p68nm8kfeq8s8qwyrv5fslq648vfctjj5mfny3mav04wfj39ap9vs2zw6ep", + "bc1pdd8pldjtzgx6c8yu4kvgtdr7fpfnlajffanj3csnvsxu4ah43z3svudwcp", + "bc1p263f04u48yprwl4nqs4c0jp6lwhspgm0yfpzwlp5rn67p3k24jysgtqusd", + "bc1pdmdlwrdmp89mk8yphce0k8yxfg6ctzm36qekwc42haqqy92mtunsfgklvq", + "bc1pllw2t066wm6358jvelex4lh9uc2d4hmwzslgmkgffy5rv5x2n68qhcgudv", + "bc1pavsqeenwu5ra2h396quthpzd972ct08swcz06mk7x9qp7pa7k40srdq5sn", + "bc1p5dafhugazrmtyfle2g56cqq6jvf6ulyaxkvxyh7ugzlrrldhjlrsanh8uz", + "bc1p2jm0jn9n332eef9qhnzlmuk4rwc7k34mrg6zeucvpvd5n9ejcm7sk8w7qc", + "bc1p55qym404q2zz9wq2xeex7fj4z3q2eg6zm0yxnp3hluhwtcw3e4jqts9ae0", + "bc1p2399vmtqtkalsh00dt9f7cjnvpz93m7uy7vsrqqef02jugugf6msqnqzyz", + "bc1ppgg8kmjj4n5vrxdxaz66yk74vxhjws9jv6k4m2j8pevyjdq5ztus67u992", + "bc1pj9g8a3x7swhgqcacqls2rjcw4cs47nnqhcd3npg04hfxwlmq6auq764jpd", + "bc1p29xtwnfeuqlswfs6eqr8uude69appw04pytefkmlan39ph780nuqs9wfsd", + "bc1pannq0wkdc8dxvlx9xd46tqujwcq7zsefltz4kyfh3tcvnz9w9ahqa6w494", + "bc1pns4t54n0xd7rdr5h534umnd2qxlffdxrkavuxgkgtsyj3km46h0q2ufcjh", + "bc1p432tptu56mxmumsvrwde862jz6dy0pfxd4d3hpguhnrkmdlqsw9snu9ucf", + "bc1pfv7473vlw49n8wy0gmvcpumsfemzw3g6j6kz5d53nlr882wh5uhsvmxh2a", + "bc1ps9r3jmj3m6ft02l6thj5adcfr0cn3alhgmsx7dc87vx0hpux80kszj3xpv", + "bc1pg0tzwv0c37uqgwexsgtxw7l9dgynac6lwale2erdetsgkmllpz4saexyv8", + "bc1psfuhggz87fwswc295wfxhvv05y3p3kvlp2sjtfmstqvmlxlrhgesvlerue", + "bc1pxr8gu7d8cwk26k4evzsq7mdqrwgy08ed0mtcum6kdtrkxr29ntqqd2e0fh", + "bc1pexqdzqztgm87hzz8fm8pvjveh6nf7l36mkszm3g09z727tfc6gyslvmshd", + "bc1p2kwvc96hzu6mrfwftaz8p38tg9eeujpl0qjjwf9vrsg4744vutwsn8wsfp", + "bc1p3j5elu9f6ksvdtk4snysqrsarswc7suvzjp7dk0vgpzmpkqvj7gsf8tl8l", + "bc1ppk50hna8zutmjz4p3hyn9y87nete9ghd7xcf8ln0k4py3snf6r7sgqpkhh", + "bc1ptc3plzf932vzrac9qzt7nay7zhj96wlmzatv62ug620r0ls4fqaqe63u9m", + "bc1ptxl89qt48agv8fz9hlf59ztn8xg48vv0zkwu637p4tr2pedgl5zsar0y4g", + "bc1p23y55g3f2m8xe3cjac942pq3y94lfculwznmr2up9v52d02qjtcqfs3zdd", + "bc1pgynm8ay7zxyegptax43p5zhkyvezxdep2gcw9xjknr9vjmdcc5jq5rptu6", + "bc1p9nqf3tqzywsarrd02zzuq92w5u6qxucfguuq87vltv2eehujd7zqcjduyr", + "bc1pn4f08r2v5l68k40pf82jlgh74lrtp0g4z5q34ek92kmmqcpym4ys40xfvx", + "bc1p6aj5u8axp5y2qrp3qgq5zrw0lk7lg9el6rm6mjhu39ekt6x4yuwslaxma7", + "bc1pp34aa30kn95d43k334zv3dvm0ux45ffnssdfvjax3tgy9zrtx7csfu048g", + "bc1pp84c4l8z0wmhm40uatpcaz9g9la77teud6d3cadqxd597fzqy6dqftrsml", + "bc1pz4wjnl6hkhy4uydfp3gpgwrtflvx0rk7pta0p7sefu5yfazh9djs0r2lmn", + "bc1pu0xaslrfrgk9cxufrf4x8gk67v6el8248jt73pyaeql2k4w8dxvq00gkgn", + "bc1pqmps55g20s79jpdtjgqn7ldczm7g5vzx2j83wrx886at0g2eujtste40jw", + "bc1puau82hqhv6gt4rwn0nc4ua5cdhndag6nd78cmcjuamf7qyhe3mtshy6gu9", + "bc1p26rsu9023lppg0hmk68qnz504tk6qpqwhffyg09a8wfvqcjvsgps64xt2s", + "bc1phc6aesdarupffz064yup8ck075m2da6ju3ru9vsdrf6uy3ccmgkqarsn0e", + "bc1peq3ga4cj5jxz8d5q04aclvdw368glv2ud6wfj4hnrfq3f32v3fgqwd64pq", + "bc1phquee6hpfvr8qjagckvv7l484eclqpf55hxnjy2g4ua877r7f0lsv3panc", + "bc1pla8u6372v5jyzymmjr5sntqpsv7y537tsfrh72da2c7e8dqnk7lsj8fnr6", + "bc1px6c843phuvhayd3rpjpghzrun8n5kmnmnr0fz7jy7xyq0gs77jeqw33zjw", + "bc1pfw6cp4z350nj4z8kmnw7p0c02dhlvumyluqjkk6s4wuf3uvluqhq0kajwq", + "bc1pezxrkx3gplzvc3ylu46agercg74axvjhtcdyezzg4u6xt0wcnyqqjnlg8w", + "bc1psv47eqavwdz98p63vawdkl04g73k06kurzt7z5esvpkv5tl3ptvqtlt5cx", + "bc1pmkx2tqftwgpektk7yptzm496m00ess9mcu6h9h2fgdd4vy280pvs8q42zz", + "bc1pw2h3khxmggqjq06m327f0a96hsyls6h3j3c8xyzeg6nxeecpnlgqq99f0g", + "bc1prxpwkx0a8sws636gfh5svd4tmynyfgjyu562umtqhgjs45j5v7rqf3mec6", + "bc1pnked4v3v92dp49xds2pmp90zppjc2j0yuqtf5cn2a6xrs9ehlansp4n3qg", + "bc1p8aq6tyma56vkjxpn38a4zqyj09zu8ahkc5ens50ldeg7ny0flqhqlp5g7j", + "bc1phjps4thgthj3cqtrmz06vzesm3uzds0pxncsjjv6g7twehu5225sk8qeuv", + "bc1pw6p6jltwaa7dq889jln0lpr7pgpcspyf7lav0ku0na2zhpp6fpzswgxaqe", + "bc1pfegsw4cezu3ckxgth986xcjafq4uw796flpn4uw3y524yayypmesxuzeys", + "bc1pe7yw66taxf6ssrnfquaelpj7c5qfgzx9hesrlcmv4f9apk8cmggs2sy2ta", + "bc1pfh26ms6gcvnml63qgjx6ctw5y3hx0r9dqugqpmdsxjxdpzs3hclq78k424", + "bc1pzvqtc5ae7atgfdxg9ssw8l2phen628w9rraylcdq9j332vgpvp8sdpvur5", + "bc1pwzxpfrdfs22xs5uw0yser6vuw490r9kvqrqqc4fsxa5whssr9mlqqum9kn", + "bc1p8v29lz9t3f02pfmu02p3wllnpp7pdg7u2pp8sz5hcyxyasvv7a2qp84mfp", + "bc1pu5t3k809zewussfktup9m9vastgyru88ts4hdxt6mj05kykkmswswn3vav", + "bc1p7gkskdgccz8gfxj8q4c6zkfdtn6xz8rmn46rs002wpy4qerqpwlqnfnlrw", + "bc1phq2m9rrf6etm9sgs88xzxclvpg6hwlrtsyyanp8rm5rdeg9u9kpqqvh0vq", + "bc1p3agkcchg6dt2glgq6298rvz8jyv7eg0yt42fac5z8s85f748m37sgpf44q", + "bc1px6dnxer4hlxct4stpxx4a3h5u36aug7klyah3zmulfgg8cavemyq6mjxr4", + "bc1p90ksdjyvc0m77vkl6nq527se3u0pk3f4j0x2a4annl4987p6rlsq5qvert", + "bc1pmzd37p5d9wxtvxqtt8frr734gjxju32cq3mjp46uwkyhuws4r3lq4snkq0", + "bc1puh3gyw8cfr636k7x8zdn4ppxnjagaxgmangp8hrc5n4kp0ux5zds2urvux", + "bc1p8k4e92w97j23rd0lxpqfqyjzc5jk7u5cu5jtm2quqxzpra62jcrstr6axq", + "bc1pwn0az7ald5j8qj3kmznwj29pftqnwjps0qwp426xy22422rz8zaq9rm6lt", + "bc1p7lnvaj4cxqfqwc8gkfpuq6hqmwz3fryxppd3kf5m8spjwumc6kwsdgxfxd", + "bc1pmsyr3j2v7923t6hhlrsqtfuvg55exxgyu48p9wvjeu86vtl2dj5qjw4jhr", + "bc1pmayqthn48yg0tg2anwnv4x7ddrez8vjk53tjuajp49aqlvv09yvsc5kzxc", + "bc1p78h4e9l375nvj4mf9kseytvfe7h8ycwu9p95s6ha8q9z7ydj4vrqqs5vc4", + "bc1pu8t62aa7m5c39p3grv5ja77ypzcnfcrwxmu84jgpqtmzdz79ur0sd02ssy", + "bc1pa36ty6mvqvdp8d4jucpt76hagzdr5tgjzptq82k395gd8vtvgd5qrglq9w", + "bc1pnkamxcuv493sslwhzehceepexq74fvtypyjht63s54wx5q8pdvzqz0ap9g", + "bc1pluhznkcn2a2zahm9md4uunwzxd2fmm85fezdh7yhf67r8yytm9us69y069", + "bc1ptntm9q9qmtqvlgf3sfrsh6rfh9smk8lyks8awp829h0e7mv2wpkscf946t", + "bc1p9ntdyzsx00xdy9fkd047w9n2zspwmdfr8hfm45v53pj80k9x5t0qynq0jy", + "bc1pze425j89lxk5muxa9uartwq83yan86j8trk446e9zqlnal2q4tzspapee4", + "bc1p7p4kercncnguxjkeykmq0cr8mdv7hykmj6afvh87mr0zwu72hguqa0d8yt", + "bc1pnx7gpk3renm5upgzusfl7ykzwrmua293nlfdy2plhfxwvtr86pcspf5p3c", + "bc1pz0sgxpf2xz4vdv2hr7pxhvpzzdghu0utts24hqyy6vz2etar35yqcgyayc", + "bc1p28g9mjxvl2d9ljjr9rua5a66xcv9f9kdjg0cdcnhvhc3740qjvyq5h0z37", + "bc1pne8z9g8gg4vvn9fh4n2x4ecsa8wh9pa62d4vkqazc38vnztwngws5c9csu", + "bc1pch5ucgd267vvaxha5qjhvcu4dys4q8ez003vm787zdc49360dcaq7wfsph", + "bc1p9h6xsgjs8tlpsjj038yxwxpcr62jlzc53v0cfne2r4ptsj3ygzzqrf3agd", + "bc1pnh7hy0qfneq2sp0tha68zdcy0v8j8765n8zh9va4x866f52xn75qvxwp87", + "bc1p8e3wr04vz0v82r4uc2008c6lmkgfjp725kh23pjpyrd4q7fv7hgs3zvv2w", + "bc1putwvdqvnhfr4r0r272u5p30lgy6dyrckr82dlavcpeaez7dgph2q26r76m", + "bc1pgjnq9rs2gjt39ewyawfmeelmrqqy28frz2sz5wzfrm6c3c40qqlqd0wzgu", + "bc1pjzh7ntay2npg4qjsyu7hfghsyvwm3j0qur9u8lnythrkvlg4epds45z4xm", + "bc1pmzhyf45mja5futq7p9g438c0wpuqg7tdhwc5cdgpzzzd70nr0rgqgncw8d", + "bc1pdv6n2w9g7rvg2t0gq763ru4yaehdxqw99zuxr2v9a69ha9w0x7yssm4h53", + "bc1p4dzlvn3dmusf7zvyf67xad75h5h328fklqqrfz58wrt5nqkcg98qtl08t2", + "bc1p60h4m3rgl4sqpucrx3xn0qh2fls02wwvg3kysgcs28tkrpm3jqqq4pq9p7", + "bc1p9pzz7963mpj063avyywmpc8hpcp8pxu95ewf9mz5r6m7hpds24tssdwy6r", + "bc1pf98jkj3meh9607c6wq6a08uwauav6dtlp40sll5gssn3dd54l09s9l5qzw", + "bc1p9pvedd86qa2ahgy39u6jjqactsv25k3xxs875rvzgf2rmnxq6ulqxgzutf", + "bc1pku50y60qakhu7cmaqa6m38c93h38x2wsaxxuzmemtdj3xw2g9wts9cdcw9", + "bc1p5u7sh62hmy73ayvlwn4g38kjqgywhjddcyhehkp2gjml3fnfxpyqrv02y4", + "bc1ppp8u3tp3ung2j725g4kx54m8he9rzetvp84d9uvt605hdhl5y6lsg7302l", + "bc1pz34wh7e98mkukr9pm86ca7pnu30rmtzxtwd67tgmj3qe9qy4y9zsyh7dau", + "bc1pga2p0584ye23cj0grdyf3pdj43260ej2mzqysr28ccyz4fjguk9seg9cyg", + "bc1p9n87c6cklyhr4ce9epmd74xxrsv2w259asjcc9dhxege3xlfj7ps2r706u", + "bc1pq72ugav54m89ht8gcj6n3dcccxrl2h3s8nm57lmgvvfdvg6s8zrq9s6e5l", + "bc1p5gg6y7snd609v6kjt7atwxcpepwp5h4tqlvnuz8teurc8uh7fkyshnxqgj", + "bc1pdjtkhzf5l7yx2wvpcfzjzj9ylg5jev5vwqasy4fr4v39qr0d4c0qlyuvpf", + "bc1ppr0ac5vecjut6880f8wd7umtgzvy8d9e9kc3zk8qgjmwxgcfhdcqksup3p", + "bc1ple4dw92wkm35297pgelyrswdxgtp7a8fx983kr4em8vza97s9q8q7zk9fl", + "bc1pfj6fpxdw3g7nefz6ky84kc4pjhwpvjf080v7gz2xxny9tnhxmycq0xhkmg", + "bc1plap5rnzfylrk5asgrrzashz8xrq9wcvw4axaxwjehnluarjzdhesg0npqv", + "bc1p8w55tv7fqadt4kjrq0run0zvf5vq3882l5ya2h7nhc6ds4dd7t3qnsgv6e", + "bc1pse87qu4ktjd8nd5xadlypuzdz3jwf6nk5dlg05qz2tqn48jtpewq3heq82", + "bc1pgfc9xqseefutavfk0p4ywej932efygn33az28a0gw3qehq6xz0ssl42dac", + "bc1pzez8x7wll98hzx6jpzztnjtj55tp2yeqvk82n2lgxnfval8qv4ssv6zttz", + "bc1pn03jy8yreyuuw5pe969rpnxn2vfjy2l9jfsxnc5zz4efr867g79qdyr2jm", + "bc1pd8cnda4qpvkq9a7dyx2t4hckwh036wtyxpn3c9nln879tdaxdqjqafj70d", + "bc1pqjk8ucnzq96krkll0a4cjzjt989a9776al4n7dndsu2cvqcx5cuq2dp65m", + "bc1pzkt8jth5nn65j92dzezl9tc6fp4l2lvvhcwjhqs5a0u6d4v4a20qyklz9z", + "bc1pypd075ly92rskd4jxw47y646due02wf9x8zsefgukflwkr2pepwq8zujmn", + "bc1pn623t2luseq9fgte50n3y6f87jhr44kqjkfwjvk3pf0jdk5ygplsfrnv64", + "bc1pnte38rj4e5wh23qghs0ay422ev2tvgs5nm0w7d5gyvu6mhn5yjms6awlkm", + "bc1pdk8jr0wxgn8dl85m9vs2wq3kp8a2zkfuk5er7u8f3svrf0mtqnkq4vgrk9", + "bc1pum6g87tzk2wkqxg5g0peke6ex05x6ha78545y92w8y54pvle9ujq6r5r3v", + "bc1p57at50q5qjdp0adn27p98sdzcdre92n3n4w3k77te24gdk5hu5cs6sgup6", + "bc1pszz8njztqn8lmttg4dh5f873vten3zg5eusntyr2awsx7hmwt4uqa386lx", + "bc1puwmy5ylm9y9e7j5h4x5qv2za0zw242uprp2nvdp98zmwk5hftvtsunpcnc", + "bc1p4nlr2laqhng3r84nqjt2q8jq0f6hh4plndt7za2dwsy4w3zwk6cqxx5cj9", + "bc1pugdcjy8z77y879gd9jty0g9k60uvar8xq3ng5fxrzathzf7s5fkq8l6g4y", + "bc1p97eanq26m6hencrk0g5scrx9k6jfsfqyt9a4uk57lzxcncvcf86s3v2drd", + "bc1puv9hn22j7vzgvryedjtghl5lr7cupcltpqyrf2ssarq5ley0recsc5v0v0", + "bc1pp9z9pen3cfju3leuma6nmr8vnlcavkhsy3zw4kvelpt39s73ragssyfrpx", + "bc1p3fwur8dph8rvx458nfammx2j8l3rmafpvvzs92qhyywa7zm84afqpak6k0", + "bc1pu7tkcr6esytu75u37v0uk4cfeyrrxcthknjn0fszngpa4fd5e0wqh2terl", + "bc1p4zmsau0kw2huugn4jvrc5ewqu6rryyt736djd4jn34ks55smv8wsw493vz", + "bc1p20tkqc2g0gf6u8res5cq3nv3m7r23ecu4jcnw708n20t0vefc69q3q24kd", + "bc1pvmyfhrfc3ptlhdz0nwvgls5qeved9n6m8uugunmumg4r90xmp5nqmpaa03", + "bc1pcd9cdulshwc4gtnk0rwv09l2e5q5pjk2klk8rplg3yu8922mmpvqhyzkr6", + "bc1pj8jeew2v5dk068h9akuh8uj0lfvqechw42xrcg8546cxzxp64pfs2l8mwl", + "bc1pygv02klguv3v6rp3l32808rwnpngc79skfhgnpljgl8zje37m83s2rs9ew", + "bc1pfkmvn6s8j8gzvdx4ww77xycp25ssqxc7jeynams5mhhacnehp2pq82juj9", + "bc1pwvgw4e3020mxcpkp3uyze7wwgstpv84yg4tpc7635z9vgv5ft4yqfqgdmc", + "bc1pxpmlgdl4vu7a6l8f3tk8s0lgk7qxnws6cljrvpw8f9w6pqz8sy0qap26xy", + "bc1pkludv0sk3d2c2qugqs8xx0hp4q6usasynr828g2kvz9vmu80yv9qmj8gvh", + "bc1pa5lhvlvzqnvqhdmdz5d9qdq7scf2uhsea20qsdxds5am3xd6uhgsgt89er", + "bc1p4kklr6zyp0pq55cuzcfgps4j5lmfzvpdl9ahvk4k6sk0x6nmkqxqcy4dde", + "bc1pjmmpc8yvsja5wk3ta94pfutt0djxtyljyueum252unk9tshsctjq6etcfc", + "bc1p7ws8kdq72uech3hxzjgpj3w05cpn47upytsxvxtqrn8nfaue9f6s3w4qje", + "bc1pnnaqfacf5l95z78ghlh4t2upzcc2m0k6fv9kmnmqcyajgcypz2tskeaqmm", + "bc1pcf3jw6ageyzmuxmy668l5n4z564vsx3k7374454qt00du5gprt3qwmcpmg", + "bc1pfgaxyzsguw0jyrqujzylzz57n8plefl96cpq5jueehyzw6n5reds9w9cl4", + "bc1pe99n3ysz3xe8lfuc4urv9ancwafed5qqar9stssd5heup0yxuhkq86aj4h", + "bc1pjjpnppztrduksrte7h956pwgeqkh9cpga86q426cxdynt7frvcnsf972hg", + "bc1p9qr0wjkx5fsf5ajusnju2p6q9fnluvv7j0l5m42te0tnag7ld9ss6khdve", + "bc1p84x0hqd5ef8kettyhj8eu60583ya7357p4qw0agwkg63eqg2wsssycwwcr", + "bc1p6mwfe7lt7gf8qhfywnggpn6w4005sk0yjen500mulxnftueh2jcq6z3k7v", + "bc1psqgszaa4340esqk36ctpz6q6fun9txkhgz3synyqj8s6havmtxfsv5u2za", + "bc1pjcnd9sjnre4e2xhf4xcyenhnf8ewx48z0rz9t2ecjyg64ctktedswk3f50", + "bc1p7azf7xpzms34y2l37t95lg6f625qpfu85m2rv42tzmpsfh39wqlqutpu2w", + "bc1pm6eq2kfqlxrx8y2suflz0xxjh0l709gmnj6auhfugu8np99f6ktq9uvmhs", + "bc1plk2qlxvnnu4qr5hqanafspt227a0ydx6lx6dd7urctrju4csr62qvcjh30", + "bc1p6mr3vr6eek5uf5eraw7cgde5z37gdvmcu3zr7llacyh5ezxgpgtqc82t3y", + "bc1pt4enfxr75zuaqxsd939tdvn5lyx6wx5f54tf9y2cxt0592uprfvsdsp4xd", + "bc1pgaznvhgw6vzfve7tdqwy0jhk5x3u322mj4uxpv9s6l2jq2jf0jlsv0lpma", + "bc1psnmv526tnluf49amjv35xlc97pqda5akcw02yklt0zr6qjfmkg0sx50v9a", + "bc1ppcynqdznva6v267pz99eadlvle0x3xgngz32y3ejxpvj95fxeg0qxljh3g", + "bc1p8u0dcc5wngs6zsv60paweyxlzqtxa5ekckfrza4ua0ttfg0jnnhsnx9kr5", + "bc1pxmu3wg8x7xt3vth8l4e9tqxm9a4zrrhptr63nct5u3czftmeh7gqc379ck", + "bc1pc5vj28n3qhzeltmmsj76t76cvf22vccq5hcfvkv8ydgm7gnvs9pszdrg4c", + "bc1phzdwcnq5066efvljtp3t6h3tyze5wvjqd7vkalz7ecc4480m5veqkx966y", + "bc1p6dfn5hsyf7jdw3vup5gulxmukulusyfz7qmjq338f2ky09djhdgqj5fpl3", + "bc1pc2vuhmy737dp9ncstm9pt3en0xa9fpla0qd77j2s56ya5km6kysqclfjtz", + "bc1prnvnms06m9844scjupurgcgzlyd4py0dacxlc7zkzm2p2dfan75qdtus0y", + "bc1pkyvlwzlfh3jdq5shsx7n5543j6kz3wafuh543dl3nettp20mqeys2h9n9w", + "bc1pdq3jtaj84ge44easpkhf9wcghe790dlunuxa7533ujtztkujvldqpw8q6w", + "bc1p5vl6x8590nujqy2qtzaza0l97hh55ne44wg0rva824ym25ncjraq5frwpe", + "bc1pagmscwv4gyhzurz87s4t6azx6gxwe9qrv5hrqqhct9vs833wzqjsc32u55", + "bc1pxycxnsv99gwhdstzc4y9u038zy4x8znlec4qhwhgqen2v56p347qh30rza", + "bc1pgle48kdwyusnvvy8092vcfeus6fw2ljc4gmgjvg9s6uhmun0703srj3mpx", + "bc1ppf7z3u3shnjcwy5fmpalx5a26ccfmk0exksxhj5g50nenpkzv8lstmqhxh", + "bc1pzhhyqknw6sha2hu4cyzygkac3cj73pjc7v2f4zlznczsmnusm46sv3j7ne", + "bc1p7hgh5cz8ddrf03eu96qyzprsg9pntrtaktru8vrwdpn4zy2yy87q8tg4gj", + "bc1p4nc0pshysyhjjmumzlhx40pwjj8mmz5p42mq8rd2jjnw968grc5qmj5ajq", + "bc1p4kkmzlgspp3k84y4uxd5szkvl2mhfgk2cq56yy4sgy3cks4k5vjq7p7sth", + "bc1pj8ryqrhz94ls57ylgjza5fws3uzxnxp9czmzea83wjq4kpxsxlvsz8l92e", + "bc1p420eeyynae3aksknv23tqy0mjxqvzw8wxxr6pxwcmlercsv38c0s336xzn", + "bc1pqtd8c7fctxhwft46j7h0m9zu77qahgmpw3922733s6vxna6l4wpsgzmyq8", + "bc1prmgwz64psd6knlrv9kgp8478gnpszu5na42t2tksz7s0rvxr6tes9a6qdu", + "bc1pwdzg4au5ylvuwpdck8sralj3a8rwyact00ly3cex2zkl76c3a0lsc3vl25", + "bc1ppyytekdvxrcmulssjm7u8rc4cu04sxkzjs603f2u52t4hgnqdc7qxmhu0s", + "bc1py0w0yv80ja3ahqlr6xm6hy94fkucq8ptral8w6dks4xjq3zu80sqjqtq90", + "bc1pmlrrqwnltg5ea8xnwu5fgwxe8gkfeufvdrg6fg59m4pd4ujkvs8s9tc8vj", + "bc1pyudj2tdmmacv9hheckplu3cgvxk5w8kkq97lj3cvu2q2pmnmwznszr3w83", + "bc1px82zehasvdtecn9w8dqr8cn3gvqk4kar3fqxkqgsfysvza4ec5vsvkhc7n", + "bc1p8hplc7p42mjrndc8eh5uww9f4rtaedeaz0cy7f02edydt7pgqz5qd0mflg", + "bc1pgxpf0gugscdjnw36kcrrxzgfkxepa398fm7qnr07nl0n2lp7pwkshvdp54", + "bc1pw9s0md2x79qt2l5l0zetjuyrc8fre4tr3klhmznfypcxme7gkvlst5ef5y", + "bc1pxly26a2nyffn4axcmya3w2arspj2gs09agxz7ekrv3ghwsvvqwwqeuprhn", + "bc1pdktzv97m3q9ahhwe6wddtsp4w075ksw95km2vwdlsmlsph290mpqqmgnzy", + "bc1pfp994usn4pzdpqdahrsjl2t95l9a026almq3v0l7rwrps3203y6qhwzvx3", + "bc1pmah5jmthr6typ4zrw07smqae05yeffqkr3xwk2cmkxexxrcqp9ssqwyayx", + "bc1peg3mfa5z3k5a6y66qnx8pn059s5q59jctwv99xre7tfcgw29u5lspdyjvu", + "bc1phfu40843a0jmayy9tt3j85pr29kw0m5suuffxrfq2272f4y4akeqxcmcca", + "bc1pryhgtrcx6y83y0m6jtclwzrnzms4jluglyl803x45hw03wcuylfs36kevy", + "bc1pru0l6ut7z6sq5kna2wjyvf6t07e6cc0rduc3tgwzjqlelzszfjpqztv3nn", + "bc1ptl052vwc7zyc7vgjfhc78qt4ly6cenmj3rgtvwempumw60x43aaqqa7trk", + "bc1p4nfw4rnqkhxs6yg4tpqv0jux9r5thekrjczzthtc43erk7rv6hfsr8dvtx", + "bc1pycty8mplry445afzz2m6yjah5d789eg2re4ek3cc8u36sauhcv7qn9c0zd", + "bc1pp7g4k5e9x0kdxawqxxvp2y2l6nfv69dagqzwljfsjkaqkfn6qh5sdwtyc9", + "bc1ph0f2k35gu9ulau7kkpvrtjmfl9n5y2csm9dgygde8x9h9hzwh9hsslg8u5", + "bc1pf6vkcx8yhptjvmq306z6xldpd65skvfxkrqvrwl8fsftwlrzvj3sufaew9", + "bc1pw9nqk7ef48hs8ravdrred0h9r9h7h8y6uf6pvmtel644y9dm5fhqlhjl0k", + "bc1pql7sfnq4t9rwv7xll3wa930stwvat7ev3arqjvxdvw7yfvgnnqnqdkz6wt", + "bc1ptrl7lwm0mtqmumvy43vzuv222cs5f69kef4mqnj4uyayrt2msn4q7nuu65", + "bc1pzkg3e8wgww7rlxs02w93pq05kdv8rfgskkpg7ucgznvu44rqk2vqhyru26", + "bc1pcuh7w9nfjnn4la5qhew8khzkp29lyrk45rq5g4yp69juc28uc7cs3zg7ca", + "bc1pm2uy0gvvwln08mmuna4767u6wey95yuhlps0msrutcuryyppkgzsneynky", + "bc1pjnqu5jkff4pu5446k2sp3ptdyn350850vvn4c7mh656x4uj04e4qwplna2", + "bc1pxguax8tl8gh0dzxlg9n9wlaud0tqs6awgeul72m2hs2k06q0whtqw0tjt6", + "bc1pakhcx2wz64l5nuc27pp5h9hwnqe9wzkt0vv5kfxh3wla7fk3rc6q385002", + "bc1pzff2pf0yht3vpv7qdcfwdwmmtnkt6zyp9ag4wp8f33ksv2al8g2saulrmp", + "bc1pzqlpwkc4vj5ymfhmespk8s5gknxnjht2uhs5w6gyuu40e42qds8q97j3uk", + "bc1pr04yr5g42xtxgshycqxvh75yfn8u496zqgxfm5rq2hdzz6rmv9fs0tlyf9", + "bc1pwatc5lg7ju2lte0re2evmmd2rth294pzper69cy5y8jw83523w9s5tsynl", + "bc1pzshepxpkhf9kkefyq0gt3ef5a7nxvfydshtuvvxy0r8k05xvczas4creqx", + "bc1plse2kyg5qe0dxdrk85ery4t2vcc042vfrgqsmg4ywwwxwzegjf5s6y6uxn", + "bc1pu7a8ymns7kh95awh6pa9gnfwgum0praxu88mqksweeevtjxz9res29pe2u", + "bc1ph2pr5j9v084t67925r96ykyfwxz2mfr2tvhf4zx9chp2f7hpf35sydlqhx", + "bc1pgsj3srqhenk393dyj8guyqexn977l25n8zkgxgzs92mke2hqdtnqwkycjj", + "bc1p799f7wc482yxr6c3uczuemz9cswxasc36vgdklwj32sz9qc3xetspjzhlg", + "bc1p2fxjezyajpznevse94dt2f29pjm896g2keqk5ajsjlfrdst7myas54cktl", + "bc1p9l7uvlchm60k29p8vv9njcvx3pe9ftmqyn9w3cvq96xyk8gx3zas2nr4l2", + "bc1pvwxs2xe2pvc7p0fpcztpwlya57nwz592y58n433hwrtqcm00rgnqf9qec9", + "bc1p9wjsm3td3c8fj39umwlxvggwcma3mv0k5sfhufr5dyg90avrc9hs2p2crw", + "bc1pltv0fr4d93ud2kyk70lzp7s5cpqdkh796w56zkqerze2z7hv5wqsvfw66j", + "bc1pa6k2rmh4tjjsezxw4fkwef2kaz6lfp0p4ql2xmavx4tdf3a7n4xs2z8kun", + "bc1pw577ttuxwfvkxeg8cx50g8t8fscjgksrptlafuvdts68f0fhwt4suevuyv", + "bc1pjpq6rfx48tuhdarp6366z56ng847zn0mqmz2nd3k7ks58hax8ddsz6a9g8", + "bc1p7s6683zqljtlarskj48z4ckya5pk4f8tgdech5m02w5wwh6mam9q9nv80u", + "bc1pl3x49dhfw7k73uqw7lupy866vnfdd0nl4uur9thh8wf8vhggua8s06kmqe", + "bc1pljza7papqasd39x974529498d5ywjv3stgtgtjq8umcsf4xucmjqkxmsf6", + "bc1prkmkv6wxmsy5huz9s5uzjnse5qf2mq3c94aq9h9pneuaw076yrfsgupkhh", + "bc1p0xnx6hd9yx39ew9ysw6s5ejzl5s8tejsa2wdpk9v4zsysuc4tddqkrdfmw", + "bc1pvyqgzagvtvhmtrq7ju3nvgungje8s7emd72thwu9enkjskm922fqnz5svs", + "bc1p9e68u8uzesl7zracd0pl0w6rgw6lp4pyk9894alvrnu3rltdxcfss02rxz", + "bc1pzardws4r4ewttl2746md0dkm3cnzurjxlduypzs7ke0svpkk5vwscxlazc", + "bc1pjfwcy86uaxun2u57t7a8sa2z94lmfv85u50dhr9mdr664gsa52rsetcu7k", + "bc1pckm59q5dqg2fzc52u865t3ay8qgn342eqhjp70qnak0xuky6wmcsjj2zwp", + "bc1p8l85l2ge2wrw9neu0f59gzuvfrwkt7fhgvk0kxvgkpweu0zzux5sfm9z6c", + "bc1pcsk9jeah9t3ueg7zrhe44gppcf9nl4qqrw934dc8rsdcek8f2r7q25fmqm", + "bc1prhjlzpynaa6lmp0ppsdsdnxpwskmxv32j8tf2cw8mn9tdywgyupqgvnec8", + "bc1pgehycp0fw82y8kynewhz338autxt2fcf9ycwshp0z5p4ynu5gtpqe4ms9g", + "bc1pymnf7zlty8hdjygqaa025w4wr0nslqft2l2ymesluzvkvuxtgwzqhrmalt", + "bc1pyyjy68j7qzdqj4z4yfscky6ul599qwtl0qm69s9l648a0enrfp0qz30x8q", + "bc1pzv9h5jy7fa34q6966dkpughryud0w52c2fw096krnz4g459yh47qfc34tx", + "bc1p6epnwpnmj8w367msa7ykguql9pnunmp4ds35jpw63wd66jmghyqsd3rsfk", + "bc1pewhxd587vdk9tk5hjl3q8rrts70rm9het24cuy82mf9ddy520w7sfyr0y3", + "bc1pta2nlexn2g9ussk64znlcf5jdzwc34dg5lvg978mnu46f6zuxmws5vdrrg", + "bc1pt9esj9egz95lnysx6pymyunwcp95uk7dpc3vkhcmjlj7795neyfsjdf5fm", + "bc1peylyky46dtda8re29n0pxgc328wlan4gz7g984td8nu25tg2lh5syv54k4", + "bc1pruwfhr7u4cw62vgnvxxd5q75gmrqxszejfy03qdzydnx45p5aw2sgfkl35", + "bc1pfnq58zgknh7akv8702lejwmkqeezxnlu0xlyc2pa07natl9whylsrrcyu4", + "bc1pew9tcrxj29zn3asysdfjmar43uazmpv9a6zpuvnvuz6h6a5nqjfqqfaj5p", + "bc1pzyd3qffasp224ehnt3v9vwswxj8h2qeptj2qp57ssf8fce8vydtqusl5mn", + "bc1pavse38jlnnfjtn3q0yldjudzhgy2qst0tyum4sjkvy4n62f9k65sxf36ar", + "bc1pej2mzhkcw3th65gsu8er7ww0dp7uh7ft62qeqxdayyzkm88uhxjq772d4s", + "bc1pk9j52zxk7h0qgtujxla8t45rna5qzy82dqjc5456y3qm52pehpfsxv38sr", + "bc1p98wy4447353k7mgu3h7m52vkykl945cudfpf03g87q3pz0e8cfgsuktz4s", + "bc1peyrlk8j935calt39u3tz2hhh2j92fll4ksetw8f7p07qpcr0f43s6qg68u", + "bc1p45gls7qdvgkxjzjhkf9gzcl8syl0zf4apzpmlzcv850ucwgjc83qul42cr", + "bc1p0rga2kw8fauv9xp06pnx9xt2lzja9n7kk53mdd22g0flpeprqjwsr7e84l", + "bc1p0vtqgwa6q39vfz76drl7ycay7qt3e5u0vh98e5h3xsu4ll9xfgsqcazxyw", + "bc1p0auff5w9jx7600cdfx23fjw7wl27q5lqxehqv6ped88mwuvs7raq20hvs9", + "bc1p9c6srecxwfs237g8xl3cpw96sznkhy78sy8nc67xh5suyd6u3y0qm3ycxl", + "bc1pj96hspsfk0esfnkmkgywssgwk39utc9kx040wnhgu8lxgkne6tpsphxj4q", + "bc1pscjpryr9xkhnej6kuwy3dw2nkvrh0qmg64pqyrfuq4drcmyh2jvqu23m3z", + "bc1p6xwqeeh6f3ydlfdrc9gug5tunhfwt6url444kzjw5wamer8esmes9cg8sd", + "bc1phylvxcqmez5mwp8l8gcz9tgy7p0e4t8dtfew8n5zl4dqt8v6824sr4fapc", + "bc1pwhs2aszlv89plc0ragvy65a693ryhq57sq54dggx95c8y7k79lnqs26p7h", + "bc1psqgenr8peypcy4f2l0nw7ztw0gt57kqtmxgpp3ma4uk3ed6tcmkqde5j66", + "bc1pdnszn8zuh9r4ze9zy0l5yy8zplsftpnjptk9h2ws7h4c8vcq903su02f74", + "bc1py08tjpd9njmsjzzhgcnwz2tdeaqkun2c56vsxdgg0qfjvvtr5rvsxcykl8", + "bc1pvczp6cn2p3wymr35kz8w9u2pja95trfy3uxg4le4yxdzsmkhpymscpcaxv", + "bc1p5500z5hnm7ykpj0mefnzqpdmpslfr69j2l4kk6vhmjcwnvansdtq6wk0tc", + "bc1pp3qf4lf3q9nu5hhchxjrn3qmu4sked7edj0rnn20xq9kmgnkhg5sxmmckk", + "bc1pm8gaxg0czwdzc38tjy3r2lk22gxxyzfgftcc4lnm6gax8v7stjesu4d9pm", + "bc1pu0nd5nphc2hqxq5tam83ru6frgrvtvehkxx993eev7mqhtnqd73qggmeea", + "bc1p4tufkw6x63dgt66qk3g36l4azrca406fuqd37pxc6t8np7apxxyqwln7m6", + "bc1p6vsn38ghm92y8q5ruf0k6cwwh2nmmc0ll697ne0d3jjurcf2vdgq4wmqx2", + "bc1pxvn959y93f7kgjnnkkcmclvjv2szdl8e3wylx779jqz97ztj6xdqdw3g3d", + "bc1pjsszynm555swwpdygr3t6quq7e5aluyh4nnx2xvunj9r3q6rhcnquu3uj7", + "bc1pf4m0m23cjn0s7jr08dtxg3phy0q04qjgsvfk2q4dt74x6nc40ejqaewlfe", + "bc1pdrjxn4k6a3tnk2jewtlpy3cfh2lq2a6l3g4z947v5hugu497m6xqxg4zmw", + "bc1pnujsh3g4s6emswjwtnkfx83f4fr2aak3mxzz9l7vr5cnucwv20gqfjj3jd", + "bc1ppnslu6swtwhlfpfk43gem4njas39kk3e3gxx8xgexyy7jueu7r0sf3750t", + "bc1p096wguteu5pmdknvvll4r96xsayez3lezlsp3w37s6tcv79uh9pshq4z5c", + "bc1p8cw9esumjcjzycjxmxcrux9rctmnk6kshaquk8c9edh2786ds9yqcsns6c", + "bc1pn39ja8jc2p3450asdaw7h9yect0jrqltmyhqlc02gdadf9jufmsqcpl6q7", + "bc1pv7tfwnhf8hfgphdx482lwjp3t4u4ralak2law75f5jy7drm4fl0q495qzm", + "bc1ptwjs68pyxgcepw5stuzcu3sjs54pvpf6fz4yh8ccx3ks9rxyjvys0jv2ck", + "bc1pa704qpn6922gnrp2pa0r6kwpv5efg6yqzy2nkyefqyq7lrrf2juq7sm2ex", + "bc1pajwj3cl978dgjvxpmdfe64wheaf2h6lh8ypdkxjkfpjkaex433yq6mm0hl", + "bc1p4np7q204cw2n0vd75lhd9k2lwzlthmvmhra8mcaefsr0t5r6w09qmuk45r", + "bc1pgzm382l5cvtuw0zvsjettw9vgt2tpuzx2zxlc64kmu34deusum4qarza8v", + "bc1ppjxhqzkd8g72cr4lv8k379zhwj0454s0dv6mv8ysedcl0wvw9xnqwpla80", + "bc1p0fj4jlh8u0vcw8huywzex5tvyj99manyn5jdmzuc6949m0nlvp3sj4uyfv", + "bc1p29ffmjv6tyq42ca4yd5swf0yw5ns7ngq7d0822k8gpjkhljfqvzstfxfyy", + "bc1p8xfkauqjkvsqaslujslccagyetwsm2jgpjvyyes80xsxn47avzxsyku7ee", + "bc1pwys7f5eneap3x3pvjeqruh9768cklaw40mnwel4m6k2luekzr4esn4gvrl", + "bc1p7dv0t6xs9d3za9x6eg8dg7ua0kvzgpua72ultcvhvqg0zjh5eyestdsr9d", + "bc1p39jpcya3h200as2zyhtvp5t0neemft6u9asgsjmgal7lw9acjvpqhn4ar0", + "bc1p3d90yewcfdn4cqzzpese3nvvp4dcz75c0cf2kua7x40557xyxqjqs59gnr", + "bc1pk03yltry00sw4susztura6x4fr5hx8rqskar6ypqlrhwmqt8qwhs99pmv0", + "bc1pgg4d5z4l4ajn4x7n85ush9ars6gfn07kdfp8cdthz46a8wm6c9hqvxfss7", + "bc1pqkhq4ak8jvh032kenhvpa6gq6judrn6mtvst6yyq6r8m9jmx6mgs6tcql8", + "bc1pa97j0g659exe6z2dgjdnn8q8j3jn9gwa24v35hx2lca8mde9ry6qlhjvyc", + "bc1pyscjmxplvdzf3wamkamh0vp5rvzlr85qgftus9t8rmsxx83nevmsq99xnd", + "bc1pg7gs4j5frvjqcwwtt5m7jlgz33ucs82j9h4fmae8awmqx0u7afrsplcne6", + "bc1pkyun6fast8afcn6fjhn8m2t7gd0qffkp0knxmj89d2ejhdldq4dqzas4x2", + "bc1p406js35qf2a5q3wnmprv0gevxxw5sj03n6hc49k704kyqam53aysnujx8h", + "bc1pvjwx2ha76a7puhjcvxrc75vhpfhyw6ukuq2sgffq3lntvnlnlmes6vvfrf", + "bc1p62sw3yu82fpxqc6ytp8cxzz7gn83qwggg2kc9plpkgz6z8w5z4dsefry7x", + "bc1pjmc62uwfhwcl6pyh7r0hg0lpsdawdjslz9qs0zup34wt97t572dq0xycqq", + "bc1pkx0pced4n8yz5jkqzafl89mjdlrg2zw0kqtmluumsqytjc9qzfcsucfk7h", + "bc1pjpmlma7vfv8zhd8g490y97y0ep4rmrr42fyagnql2xrkmm9xa77qt3mvjy", + "bc1pjyvgvffz4nzwp9j2kkcy2sfmp2qk470k6lkvg4ny4w45wclap4sq6ltjgu", + "bc1ps673sqw0zau6ne6p6pl0fwqm8z0jd8c00uuv80t2gwm56608qzqs5rgnq0", + "bc1pse20z3r243nlfucac0crpg825ava6ejnl9rz0h3su2d2xce7ke4q3hhyql", + "bc1pgn0xzrc4u7ls8gs6hhhg3z0920cggxm2arux024z3m27tp85rnrs08truu", + "bc1pd9q05zmg9vk2958fh98jn77s76d7y3kl76m4pfgl826krr7f0ptqyyhzzr", + "bc1p8z5vmxd5eht0a6qtlynrnds0akte49ah85nr94w543v0tj9kmjas7zlw52", + "bc1pnfdagz3k2nvfxmlzeqynjlwht4sudv75d34dq83jhs8kre0g2c9qhsc9z2", + "bc1prdudjmk4frra8fjsfuryt7jk9nawwh4nhus06lysptctryxg4dmq6lwaxu", + "bc1pygf5purc0dy3e8vwr4ar8f4mmzyvekdxggf34uf20zm7vaxfrfssptfxv7", + "bc1pmtvknz2jmgr0024ght58sl63ymqqhv35w7acfcaqzlp5w4zwy70qv9cdf0", + "bc1pla7d4qf7r8ml6pfsp98qe25xs8tvwfuc9c7lf5afkzmejtmxvwxq280dqr", + "bc1px6mm5rjpmwgqvyaf6ay67h22rr8a7rmkx2wsf3zytkqz2xn4tmhsmngpt8", + "bc1p7uz35kzgh878fmlxp306xhkae3sm79ymhwfkw7hj24u47cpdv5ksvz42l0", + "bc1plej46gq527ahsuvzdcj97lc6ulncy37hazhg90623uxw7wtvsx8qwr7jyu", + "bc1prsuxuzgs6dgpdpzlnae8fad9lvda9asx77567tssf3kg50pmyjuq4yzfa7", + "bc1pys5gc6npsjuk5qdgrdfffhjpzl9c7r224u6sdfg42ce6fptjzj3ssxat07", + "bc1pktsyddvveua4gx0sd5tts4ce52fml0tq950zcy9kxvy7648wdnpsv86enc", + "bc1pwyf323xw4srdnen6mftxa0ls5xwhnevwayq4y4uk054s0t24qvzq0ghc3g", + "bc1pmj9udsf5zslqyepwyh774me37hm6dxv2arewy0qmuuaq4664jrmsmpme68", + "bc1p4vlnznqlrp38wxx4ufhjurp7yvm9kyapuxrcj7mdkmfhz2lvrfcsv4mvrn", + "bc1pr2geqmvpu5jvzljkj9aft06y69djrqve5e88snua0g606nmh03zqkxunwh", + "bc1pxtgsl94dcyn98w6m658xw2getzu3tgkp3z9cwvst8gh5getw87nq0ekgg6", + "bc1pp5k56a7af5f0wk3dwdvf46n959qdg508tuy7m7k6g36u039y6twqffr752", + "bc1pu5l9p3xqrgtmuj28cjh9x4ck2unsxlayquskv8xfhj6ys8qr9pgqn6fz2r", + "bc1pyak8rmc9q33x23u32dregvughv8j9js4dqnumv5ywrqxtcgpehxqekr6s9", + "bc1psj450ue82wy4t0lxcfvnes8zypdw3av9m0373tpcuethym6t2agss489g0", + "bc1pv80d9sp0qnjvw77hqcpktcytzkh38f49004rmksdr6jztta23tkq7ulkk2", + "bc1puelsf8mc9taz4uhhz9x8hzzlwskj3tm9pf2vq797kl2ckfhs35js49jntc", + "bc1pa8tjyflf5an8xf03846guwaffhjfcqkva22qavuv596dz4dmua2q59jrgk", + "bc1pvf9zquaxtaw3z6xyq2e0zxzgdnyjkn5696s7rmqve5yw29dsy2zs4jlmc3", + "bc1pnq3wys2xhnszcwdstjcjp73chdwy0tc696efjm80ux2tlm6sq87suac4sx", + "bc1pqs6rzgp9za9epy2wafz62m6zjemv5ffju5lzc39dalysfcn82phqzcunfw", + "bc1p94rg5s6t4l99hvudjqppn3nfx9v9vsa2m29pre9ppdj3ld8347qs2gyjy0", + "bc1p6msp94rclh92ula34dpcrl6jpdwzgljqmgg09h3tl4wzsas74vpqehce94", + "bc1p2wtl9ehlw00emsesd0sw34mlmt2k5dywjrq7fdntkcr7ga3m2ywstd6ymn", + "bc1pdxvth263xysd465vdxhyxhx2jnnsss59kcmrt2pp5etze2epzmtsw792er", + "bc1p3k89cfqjw06l0ql8ljr2uv250en8e2nlhh5vdv7mmysd7e0lgu5qzysfdn", + "bc1psm8frdga2a33nws69r6rqm48vv0gh6wee527czule3c4qmx0k2jsd9y35k", + "bc1pq5csm5k8xpfqx37afhfpuptwyp964m54nwqjq53m4rae7zs58z8qmxmdex", + "bc1pzxqgljs5skw8hnvcqgp4tfxql6ks33mwhhluaeh2gunu74uhpa0sf09mea", + "bc1pp6ml6386a7t47nhgcn2qk4rlhefyh79pwwa52hf4nnkchq2dk7yq2452xf", + "bc1p8v4hcd6j5tu76kljaqrpkzhp75zs5a7p37m9cs4hyd5esjtrn0msmhup94", + "bc1pd0v28gvt6m2hlpelw2sl7z777x9v9n97ge4u3sp7977xufa3dv5s4txfl3", + "bc1pw3y347v3rxhp8ztr84lul2fks8v9wty4wk26r78whsqyaqjrndvsxr67ph", + "bc1p5alkyt2qgjax4y8qg5h7s920l4makzq3uefkj3r0kuyvm3vm2h9s0tarz6", + "bc1pkfgyazf79hvckk6242m375mv7698sxst23jfk0qwanc4zkmcyplqzfxgr0", + "bc1p8sehylhmgwtlhuxqa2pej3ykwdz9h0307y4gmnsh6cjpa6eeznzqfc3pqw", + "bc1p7cqcgm32vprxppld9peeygzk4c3kmj0qvwhcfxze2t9kj96psf4sth8tyy", + "bc1pt39wk5djujehymhtgjfzykdzvuqd3lkpuemrqtygv8wm9djx8aqsduw030", + "bc1pmjlyvg5n68y0yfld8lwp82zjuwyall3mfsmnwd6cj72sr40k72eq5p9qgp", + "bc1pz4ghldkzu5fu6qq58z66xkwtuetgcnsdqgc2rre96hprlh79ehysfy967j", + "bc1pzc2evaxw9qpe43h36vqx6l9fs6337wgjsj79yx6jznu7qkn6z3lq7k02g5", + "bc1pczuwf8237c7dlll44tlnqha0d7zwvtvef42qnswhc24vx843jp2skmkt5y", + "bc1p92ah3ra6nkyuad6j7xju5hzm608msg6xzykk345zr2tyuj9c53sqyg7qr2", + "bc1psaymg39gwzza8yryep9k952weejj6424qx20mjjqrxz2tv4p6grstdk8wh", + "bc1pzhsrmpf868v9dsr6n0dsqvk7e4cszj5p06ugwwd8y2w28xtz4szq9e46w4", + "bc1pqp9j3hcw9vkn4l8ts94szserm2z3cuk9q03da39pu0qxgfq3ruaqer4mh2", + "bc1pptw2w9ejw0823c5zesn2329kepklaqrq9jjj2g3efrpr78lweneqc43adg", + "bc1ph0k6htl6gcz2kpm8ygha7t9sglplu676nmny2gn80jr62cu4fsrsm7mv4d", + "bc1pk68qdw0nplxt0sprpumd5vwgj22rwt837fsaayurqc84pumupw6s89fn5d", + "bc1pk4a55veamu36wjmfjh40c5zjwkzghpt4gcwj2prf8yrrdw4hfg5slfh33d", + "bc1p32yumrdnx6cavsr9jstsany8jgputufd6ec72tgqzgejnyjdmsqsjgtzkw", + "bc1puln4zwnapfgwdmc5wg6m720v5v5gzfg7jklss0erwa6pdgvc5v2q3m0alv", + "bc1p9gr9j27mhwp4t5k5dfkgdmshhrxxz5srjtaf9mzhax54l7yygcmqcqgmc0", + "bc1puc73jd0dqvpel8h2qeaa5rlydve029hayc9n4nmgjt3ccmqwruwsdj9exj", + "bc1pl0tuxu2976rm3ewsn6j42849qe6kh9k86w87d4zr2a6yts2qg9lqsplwa9", + "bc1prj7pgsqx3lf88855kw8xwqk5ta0zm7rx77mx90kf8aqq0ru7358q3znc50", + "bc1pvcm7u55c9gmhxpqwzjds24hcga3fk47jnvynjze829nwamjzkxvsvs5krh", + "bc1pzdp2fwwchx0wkuyeywwl3uq2j0x7044z32h4pq9pmtexy08erp7q05qfe9", + "bc1pcgyddyhppmjxjkyj36mlrw88he679kn94uy5rte5f9s50zheceas6udej8", + "bc1p56gym58dll8zdpl92psfwrt8qy2dsy5037y2wn8lxluqm923yvashkg8v5", + "bc1ptggqft0xzsj7au0vp8ce9ac3k2hkmcyk8l3yxc4smgwpd49wrvqsj7y9g4", + "bc1pwmy88aagytz3x65qrphylafxpgka44fa3asghn5tv08keh7g0w6sz5wsrx", + "bc1pext2z4f3p2jq7t0gw067zqyd20s0c8fy3628e9a6hfssjfuzx4csfaey0v", + "bc1pzcj28c5um7u7mj2ux654wjt7a6qls5ejfwvzp9xhscdem9jp9tpsr34qpk", + "bc1p26lwkfm44w07q5calzej5veqyf2pg2qrlvujl8zdsrs74mmrrxpstljrnh", + "bc1p3q27z0glgw8jyz8cry0nm5jwa7f0rzucs2a4c3r86mylqwp4hrhqmznx77", + "bc1pd6yvc6hscln757z9lc9q3yl2e4k69el0r4ezzvtjszqmzx4ktz6qkgm0t8", + "bc1pumm6gvyxpard0lydrrpnl000ga0srrjj6y8f43tswnmx7r4r70ts6zqdcx", + "bc1pg47t0qgxv44nwegzzzxd30df7e0p3vl7l0svu9fng9v4yqrf7rpsk3vg46", + "bc1prm0mljasfy9ttd5h33mpq5e6flp4wjd4ut5sq9rt3szjlfrhmkcqxdmhx9", + "bc1p0wzuaxh6jk6h25e0ndfe7c2pyc8gwgav7gvneqkfr0ju33uzkehqwamk2d", + "bc1pur524zvlul58p62h8anfv2pznzu4rvxdvanll9w7p8lsf3mvaldq32jr5d", + "bc1pfxcnttq3whv4wz6r54tkrgcl2w2lfv78rg6ayt7k6vqhmegj48sqqhe2mh", + "bc1psc6cglnhtmq60ps9d6xkxmkfawdpdrq6s20kf8cd833rcp6flhcska7fkj", + "bc1ptdw7fk5uvp5yn0r8qy6sh43nwny3mhds5l6pxhtka5ngwt047e4qvstl8l", + "bc1pvuf7yql8uuhjuzzptdfz3r7t9scgf4a9y6x6yg8wqcem6mm26dpswlvf7z", + "bc1pc52t8c7a7jcru58cu7th04tcvtww6pc7ln463mr3csrefm9xlshsp2dapq", + "bc1pkaxrzv88sfgmcucuteq82xhtskpdwp8frxyd54a2ccaj7h6qhk3qxddt3s", + "bc1ptlqx23px5w3v2tzazw0psmvmgmr4l4j8gyxwzpjwrqjzxa58lnfsgkcyt9", + "bc1punj4p7wt7kcyy8dhlxx3vfgnhhzwz7jcw24trgjd8d0meadmuugs3d3eqc", + "bc1pseha2yzs562mx3y9xcx8s8yudz4r7akt4tyc02tkvd9s25qgfrvscwj3tj", + "bc1p4xlh7xgj7g80gpch7y8enn7d2s5wrz6use6hgqwyzkfzd2vt0zns3wpdt9", + "bc1phyw25wmfjdh8tvq6v0ht6hgjvukt5xfkjf40mm3r2r70r3tfcvzs28nah2", + "bc1pcqjlgqdm7mawmala0lz7em4a5cl35czjjj8e4lck82yh9e7adjns4nfrgh", + "bc1pyxmk5r98ef80txs06lylk6f32rzcdg64m00nn7cel7s0a6gu6fvqar5vre", + "bc1prjkjlasrw59yhr2ervq6wkrpepxr7pvprl9pczxfhfjx2zeevpqs642dwh", + "bc1plhthsun93qquev864xhdvtqhd0ehzy0chpu92xglzkm8hew8rwqqkgz4uh", + "bc1p6hc6h5amugdfxsh45fj0tmrf7j83cszzseaqkg7guus5wcu3h5zsp9gker", + "bc1ptju8q4aqnmvtjc7kfhrwpxgg5xvfy54a9lwujkfnf9389ugf07mshv745g", + "bc1ppl6uz339q4ajm2qn2efnsr48mzsdn2szyjgdxvg9lsp4dmv3r95qv74d74", + "bc1pe5ekmrlfcdj9lskryg0j8rx3hxj45dtyk6vrhwc89xs2l8cdgpwqerxeze", + "bc1p9g4avztlf5ld9zeulqd4xk50hm9zup2qsks6hgdh5dc0gdvrm52s5mcf5x", + "bc1ppypfp8tpg0ag6q59rut2hcdshxeucvdvq7kdmda205lr0de0xzkqagesc0", + "bc1plz8xqkk938dkq480v5vdr69a6u9haav3sfhdfr30ysd0lxt7gsestajysn", + "bc1pxvhavw7j2mcht85syh4hhedxs84nupln7nuumaxxwlhyyvqlrp6ssgcksh", + "bc1p2dg7nxlf4wx2l0gcjvjcfluzka55kekwgu590h06sg5hdm92x6sqtdkjtq", + "bc1p2uwyvrx009dzkm5qy27vh65e2ks4l4pea4ms46l4mh24l8pu56hs824afk", + "bc1p7meeqvvsdya3ulpdmlpuy46qv3a6u3fr8vz4ac5v6zt9zmujr8rqx5wjph", + "bc1pg2qyxrj67k2d2upgz9w2auz55jkrtu37afd8wyhqmu0zkrq3mluqj5nyqa", + "bc1p73m23x6z4nek6j3ex98n5hrlfl8trymq045x77432t4ugt286vcsl8e0ps", + "bc1pm35qq593089rq6xagr487srmgrgzmhhwe9gdg69nkqwddz2axq7qrdrwcv", + "bc1psjmfpxqg3jlu36ndv3acqm4lyg8myq2v2ash0mwsvp5mgk94fzusmqlhs6", + "bc1pxrxphnamzx77r8wh3zcm7fsgt2nhxk249kpprvkvhs53wxg4ha8q9qyeyd", + "bc1p4cpz6wlvj6k38724xzcturxzv80tzv467eyef68dch4qqc8dgsdqy5vj5y", + "bc1psy35lnzttttmn8sr357gf5zwuvn52j3st933g7qv9heelzu2s7yqnqxt2e", + "bc1pxmget853hjxa4svmgmq2k8xzwdgcwtaxz4s84sky4x2t7j3mvajqpm8nhk", + "bc1pkplv3pu8e2ndn5ggn6kmaw3lwp8f6flkkvtgpertpjraphxx0vyqpp7kyz", + "bc1ps6nckjnmje595ayzzchkwn9zaxct6d8ctpztwsv2pm0r5tvleq0svmc74u", + "bc1pd224ew6al4aqn0m7fv9gvyw6t3zu95pzrufuc2sr057grkp5symqmas8ke", + "bc1pkaa094p672npnwfxae2f3gmgwt92hayypccdgqwadt0f34nup4gsw268ky", + "bc1prk28w0xazdvaxx5c48csgxwve9thantyl50230u3w2suy78ju8jsxss7h8", + "bc1p6cl45ze9hwk5ccce70kxyqxff2kda0z88gwpqnzard69267ev05qyr9rcz", + "bc1pjxcz9569kkfp0qe6fl4y4cdv4x88g2jkzwahzj3uyzhqa6ettutqu4kfew", + "bc1p68ugf4r5lkkwm8ymdwyekhtjjfzmcjchyu6xyp66xgq2s2eu2hdsajljju", + "bc1p0puc9j4mnps48fj99a0urvxuawrju3m724avq0d2smu9lr9dm8gsssyacn", + "bc1pyj7ur42l3p7aejlqd2c8fmpau44zj69dl2f96r59excaulsyn4esf6t7h8", + "bc1py6shyu9wf59m5dl9ulf8jtf5aw0w3zaxgw758y0u0nm7z4npcewq7q3l4f", + "bc1pxe9lh0trva6nezre0x9eft8vg4rhpa5kzkyv9kv0jkyjur9lfwds7umg9q", + "bc1p4vvgnmcm70s32xfw2sjejkv4cey3w53kd23jsk4psa0359zwd02st7v0f0", + "bc1p9e975v9dcwpr739xsnzdgze8z5pqjklgsj2a87sx99wmx3vrmptsfs7y24", + "bc1p658mlas9lfj9uz4m68u5ue359gnyj3l6ckztdu6f78lznlgs00vqwdvt03", + "bc1pfq6vna3tdankzkh6v39fknzxrtfekfu2ndpzgn7q22wssyc52rrqz960ye", + "bc1p5tsue4n2n4mtd5p7zwpfy9h9vul48eel4e93v4hz30fjxf4na6msr5lzgt", + "bc1pn2a2flsv9r7mkxpdqsv5sdjp0lx9feel07sw89ukj4kqkmuf4knqc4x9j9", + "bc1p75wdhd650n9v0asmtrp77hllk72ynpuxll9hs8gpvnxz7xl7cdksm8q04c", + "bc1pum6tdqpg4uwf390l92nxd0gwy669egduuec7k7jgl45950dng5gs7eqxd6", + "bc1plcu0lakjy6cm375070p8awq2wj5uvjlhkear50mg7dghjy3aya6s6rhrv6", + "bc1pyyvphduhgd25ykuys0z8kkjaj2cxv03scf3lmy3gn4dqurg3umaqu6z69y", + "bc1p2pn8z7cxfssfwp4r0asj2n4dxmk37pj8vydlpc89vl2mdx6le4ts06mcd8", + "bc1pdn3rynl8cspzzwgezmp3xq4h837fkylx3022fw3vcp8d53ke6j8spqsjmr", + "bc1p2su7v5jmllhzsgdznv360e5pjvndzq34hk9dre5h5njv4e0x46qsefanyn", + "bc1pfxdgxrafyjahnh89pmvct28cuj227u84dmc4ejq9zaxvc36f4ngql6sjuy", + "bc1pwqrc3ftfms7xxrg9u8ftrxu8v0elqg6dz7sjsguwtmuz2w3pcelq8ncgc4", + "bc1ptxjc3fsarjqdq6me4k5hv3nnezuk32gkx6k777sanllvth33fmxs00d634", + "bc1pttzpl27jydqg664k8r2hw99yqxeccgrj0dsjfv4g9m6ltedfdmtsyheg88", + "bc1pgh3lzhm5gx9krrrrvlwfu9nayapmv42085kxkhhf4xcsjj0naf2q944mre", + "bc1pjze7tywhaggcm7l6669295jsv8eu9c6w5rs29njtkethnvavculsklhp8j", + "bc1pqqg5zzkvaakp7npxj8s98guu5rfpfg0mfaxvg20h0qwpzzzplpws8qcxf3", + "bc1pascavneft0h6ec8tx48lc8vrcuq8quhvrejpfpgt22sujnz8pkksqrwwg6", + "bc1pvc47kfsw3k5hl29g0ymd4vearufwva934cu36fmsvwm50jh8gm5qzzxfzn", + "bc1pgrghp3uh588p50z65vsnn3wn6xw46vy2u8fmsm2n44yap6tlfu2q6cz26h", + "bc1pdppmk3wfjl8gf8vlnsseupkcz27p3mwd3t7ecz6unlspr9n3xd2su9eev7", + "bc1puxcyayxaag4pav5t2fuxysxz5q96w4wezhst70p5ftrz08nach9swrjsp6", + "bc1prhltpqnzj32lzyaaqjz0p2a2c8ttvf386vy3hflku4wg8a2ma00qd3esaf", + "bc1pnkv8ntw4scfh6fxs2wyg0cs9v7wf4n8hag9nam2xqtrdt97c6pms7ps2vu", + "bc1plu0k706cf323zusy23lgcp34q57trmnlumv346xypxeghqet4s0qw6tkl2", + "bc1p0486kq8ya96d9agl60j5upvcgjz0t0jscqfz00dv55gp8fr58qtq0dqr46", + "bc1pjjqhpuy3ypysd4ft2eyvcjqwrvfgm7ndhqu74dqk30sal86cg45syjmhqm", + "bc1pd5tpzdtq88rqfj96t5n99ac3xmjdpk4yxtr6x3ewsx5gmxj8jxsseqamnl", + "bc1p0dy47zur0pxtud4k785demv2cey95rud5yhqcf2e2tmzzfm4nkds2vgj0z", + "bc1pe7q4n7jygcxu7el975zasj6dr0qwyyg3cte0zrdut7lhumyuemls3maptr", + "bc1pwt7kn2l98kegmrdw6sulewua0h988wn2nq6jhntmc6hu8aeg87ks4teet4", + "bc1p888v03j0qq7wt99t53echxze0se9ju2pjxjxry3jctc8pc6h2ycq34tduh", + "bc1pyselgvvu96p60pum8hcgnt7xh5qs7aty9l77amhjn36v0jeygwxs4v7ay5", + "bc1pd6mv6xdy8fc56qas0yg7ysrjw8a868suwms2rlnqhehezlhm5grs2klmlg", + "bc1pucj53un6zn00pqzt59f7uashc3cswzle4n6t70wgs20waf58aa0sjpj9p0", + "bc1p2xa5qsehhs3qjaz6zm3eaqch49e8km80uexwcfxg6wtg432rlv7scdjjq5", + "bc1pxr8gmflzhh4nxys93gjq6xznuhgcl68cp4mpwjpc6apefecahxts85gv53", + "bc1palxr2qr2y8hv7wxskf235va9mdnqdjeg2r6znvpmlpnth5wmmemq60c6rg", + "bc1p7dcljdkneu8gm04sgrg85jkhz5htpa2vpqc6rf9s5ghf6vgdvrsqrnzxst", + "bc1pd3r540ylaknyh69vle3kjw4c6fjxayl3xa99w20zjryqlqsc8d9qszdqc7", + "bc1pll9swjj447kceznvezapfxcvsk3yeggvscwxufl9s9xftc66mrxsggepu0", + "bc1plp8z6q5rzn3x5zyjrm7tg73ynsl3wkncu0wq2jdnlyv4lpf7yueqsym8wd", + "bc1p6afs93upnkhcg0gfe497hae2358vmpdgu8g3nadscfxnv7p7ztfq3keqc4", + "bc1pctxke465mc747z5eamhgt9ppj7frv0jc68w8erd62rmrer56hutsq2xmtc", + "bc1p2kddqjxw7tnymckcg68rhrcypx7mjxl78uvv256le24um53p4r4q463jmg", + "bc1p7krznh9xnxg80m5enpjpz462xkcgahk5dv8ua9g0r5g57x4td8vs4lkaah", + "bc1pr7vnuny64tlwgzla9g7y8emku2wd04fclexyjftrqf2uef509w0qus0n5s", + "bc1prx3wekty9uykm9s4hemu80rstxnqpq55rf75528lmp8v9xy0klzsf7xx9j", + "bc1pntyv4uhmmcajj6gt8s5mzq7aqhedu2wqpnfg2g44kae4v5zn9h9q7qzz89", + "bc1pseh88rhfeczgl2j7n0fwfw4ju7mmfhwtuhs40vfuy90ga5gadcnq0g48pl", + "bc1pev8gft9e33vt9ssp48jzpdf8463ur0mq58m0tfdaumydmqzrrslq9u5khk", + "bc1pehdwypzm2na0uq5ae5vsqtlqx8yzsg2vplxar76sgws8t826ns3syy7nvf", + "bc1p6g280v24uc6wpxq9jv5lcpfx3595cg4hch8j54fhct28hkt43gsqwr7rp4", + "bc1pp63vn80nf8yv2xvc6u7y0nkrr5uh66lw4mycp94hqmzz8l7gcznsldv6sz", + "bc1pu6uy0e65tas9gjjyzx0mtd9xys0vr3kpkls297jhyaf0fm0tkjsswqx9pz", + "bc1pqvd0pj40h26g32j4cgnkn9m879u0axs4s26dnwnps03xvrl55dsqjff65y", + "bc1pzc7zrkdq0swvrk2ushq6jeyyv02jstvrqm7v9ef6hcvy0j4crczs6ya68u", + "bc1ppx40ay53fj5tefcxxkgz5czjjdjvz6sq8hlq2mp30nq3vw8f03mqptutx7", + "bc1pu6ygdxeqnpt7f2w2xyxg94m96rf6avmp0y5xfnyv69n3qcjf5dhqccusam", + "bc1pp8md3dl30pxnj5l739fvzj4p6069nhy0tln87k4ctedkysm84n2qqwzm45", + "bc1pheyfu8qlm2f8uz29w46479y0zgnzq53prrmmfzqzyra3g08y58wqmckas8", + "bc1pj9rnp5px2mmsykha9zzhfcprgywpft2g84wx2hffpnt4npusqcns26n6y3", + "bc1p8gkwzddp98wakfyw9wepjc4zsltjw5vxwptq3pksnvns4jepjcwsncwk2g", + "bc1pvkxlpqecvmymaa2jur2slymtefkkry4pk2t2n7jpc2s9jx73nzds00ukua", + "bc1ptuccvpe76ks7lujkas3d6dxhhnt5u96ldcu95gmcw63xyxpjm96qgmkdds", + "bc1p4muljhhvggqwrd44xe56kx9jmj59874v9d0vkdl4cqh9m2ly2kls4w2mfm", + "bc1pvqrs2vz2l8mghndmd4x4dm44hszuf6lt7e352cf2wxj9l4c27cgsmv53nu", + "bc1p2hhpmzauvwz32mqpssgn6wthf7h9t9rnmcpmny6n5e3swga9593qd2naz4", + "bc1p2jppdvskr32lrqn9z9z06ju9l72xpa5ezsz60n83ndguf6x4clqss88lln", + "bc1pcadryq2502fr5v7vwqpq8tjfca4ztzhewrdqgu9m3q3v92u5qr6q5e8n3d", + "bc1pvr8eghejuhh6sd9h99pjzrv92xr6ednywewdmntg7ennd4ehnq4q2rtwqy", + "bc1pcu85a7jav89h7k58ap9z9tw9dq5sfjed9dd8ygj7mdwr55dys0tqkrp06d", + "bc1putjg02awsl6hzggn3m97gszeujsqdg6r9wxa03djg5fz6p44cf4s0dd4ws", + "bc1p94vtkd0kah5dm0rk4r7cyr24zjg3m30p8g5lt63c70nz2kdjr3tqf85hrm", + "bc1ptc8kkez65x8tvmuw948jpzpkwgsv58tn9c80f9rfekrr45ecg49qurpzje", + "bc1pzypcm2yz8rkcrevddhva3um2pqv62dgs6unvf8zua899h0ctzfns2m7gkh", + "bc1pzeunj4rtx5dywjwm3cxj08lq5ax26xvz0ngg3ancp587qlsmdn4sme6rp6", + "bc1pt0erd0hm7drdzw5z6q5xw06qp0uv3rd3y45mx0p6aqn8w4ptntfq3wkc9l", + "bc1pxrhuuq6jf3zsx3kwq4csruu3es9q6zjmpj2xn398yqtec5zgavaqcqqur0", + "bc1ps9h8ymxcl9q68dy6uef0uzhh2kjnqcem6974whzvut4cug5q4qnq6fxkww", + "bc1plnwds8ekfmaf9zm5qmdnr0z0vgechz33fvscjk48ap26tkjg6edql5ee83", + "bc1pc9y8zj6544yvyx3gq0xs2gqa337q3pq858n6txsklwvn3j8d5g4q2zl04g", + "bc1pywvd3kj5pq747am8ln20ajv7zqsqunjemruanf8zdjthseqvk67s3tg87u", + "bc1pagq5rs3f68w4fld2qfwmmy9lyf2pamprfruscfpjlpwuhjz3j6vse5lwmn", + "bc1pghpefz8z7km75zwd4l7chl24dvfpu9lln2deqtpr37ejzx6s77jqhfdfsq", + "bc1pvj6t3kx5w80w9w3st86zamtwqa245jk4u8ljrxk0aw6muqwet5pse975mx", + "bc1pe9qmce33r3j6x8qnah8nqd9u05mev0vsxuq0p55r6jt8dzck40asutlw59", + "bc1p2jcy637jtema6hqztfskp5ypr9dhyhrgtwwuc36d8y84ysgxrf8s5ag833", + "bc1pnegndgnutk53uxw5qrtwz40mlf9sc2kd9ac4zxhjv0hvedun35jqy8an50", + "bc1p6clcc4sk03grpf03u28na4ffdhqshqnn9ea07nj5jqghuu7va05qyd2ktf", + "bc1pyf9ee8z8c724l27pfpwx3q5ehw0hanyvx2vxm47002f5c7t9wq0qmx2v2c", + "bc1pe2ryq9meg9l946v3d6mps72q7fpfszsxyn7q5w68pjssvk7m5exshjxkrj", + "bc1pdx909heg3tpw0c84r7wr8sk6gz64myx6fss86frjhjk9kcg2yvrsh32uq0", + "bc1pq23cnjqhtqcn79rvnz3ek8dv2vnkq38dajeg5a4pu9pg3aewllrqwmrh6g", + "bc1pquk0qv66wcsg2y8umjcdvv3t4ptvjnpdvxznzd9ad97aff0ywtdqq7uvmj", + "bc1pemltkveqhxhet7n72urasjqz2egf2asn9sy0swy37svyayp8jjgqtjjftn", + "bc1pqhnwl2j7ac5thggcpe6dqcuwfj2vmyg63r5wxv4ckldpskzpunhqsnnkwe", + "bc1p7lrl2w8wsc43qwp57j96hjakyrmnua2hprepkcwglhzs3y8rrqqqrq9ywm", + "bc1pp7jtxtukl6jpsgfulkz32dc0p3wwt3vawxfdhvds2kffm66jxuwsjvyrfp", + "bc1png3nd7rj24cnpqeappwly2sw9zyd02qns2xugfdspeaws9k6auysx6l2pe", + "bc1pt42h9530n0jc9u8jjxjewmrgu8m8785amau0r4w6teaamked0eys3fmw26", + "bc1pfytgv4qj0q0vmv3gmd8r6m7wn806qejjvnrm2d6jdlpxkttzdw3svskc5s", + "bc1p2fs7kh7496f9g9uh372u6e7hxnv5pafpzlvjvwx807tawtuuu7cqjlk78k", + "bc1pgep9cwg537m46tckwu2dh4x79005z2actrp70470ajquzdmjwe3qvgfhml", + "bc1pc5c97eyzs7a69lu9tszyqvykh99lxn0l4f34k8wk63xf54sha0wskz4g02", + "bc1pswh7jqj8uekrgalqv69cw5lrkv8rmygnxgyfj2nqz4d3420xgudq09w33f", + "bc1plmznh7ffyq4a6v39d96l9g2g6s7qhlza44nfn7ewu07883wkyadq3g6szl", + "bc1plw2zklz8y6fk638w62zxqqmdrq7ndm24rwyucm9a0hlm5avz0klqf3zyfx", + "bc1p333hz9yl4r0dfugxtpydmyhwqpre534pwsee6hzazasvyzv8fdxsy36cgj", + "bc1pxq4ptzuqv360nz0ycsuyzq9srn4m48j5zyyfkayyf4r09ayh5xpsnjyrt4", + "bc1py6zfuearlx5qnt6zskc9ffeq2dcg84kd0hgasjnfjmuesqrtqf8snjx4ep", + "bc1pyxnc028nckmqm80hrur4xwccvk9ls673y3s5c53k4pkdwv5khz7sgakrpt", + "bc1p2fd7lkmh4u7gfuu3e2vw8u6ayvr7achmr6w0ya6c6sqe8lgysjmsjvlv70", + "bc1ptr0z4rdjtw8uqq55rjc5vd7yccpme7jedmpy97kavww77lk2muzs08yfq6", + "bc1pwm7hrdz0rxvxu0v7g3ynqaxv6fylvt5p6rdkmqkw5wfgpeah7yeq79zk8e", + "bc1pxtxearj5wm28txdctplvemxwch60gvq3kmz0yxw2ysxq6v030frse5zdxh", + "bc1pwdt6g9s9h9wratvhu7g8slqta4ez6m8pw7fzutufczhwtyjrlq9s2xyxrp", + "bc1ppy295s0j9su3n72ve2tklsnqz3lv2x7mjnaaylvtwsrxj2959zrshj769k", + "bc1puudu66gk50v9rv64lg6fwvteqtfhymrmemeny76n69h4czlh94ss0r8uq6", + "bc1p3j7mzlf8m5u72slffhgnkgvjygd7kr52gpc54jkxs34zh0gyc9csg058lf", + "bc1pyuderschcuvuc2s8n7egha5kamakrzl0qjvu3cz64enkr765ayzqsu3wt0", + "bc1pnwxjpqwzd640xjdww7qulr98rj96kg0l80l0rj0rjt48ngskpsqsu0ys5h", + "bc1pxa2df4eggalturg6d9vxuygrrvnay620k20w0f39t8vc4vmff2fswtp9x7", + "bc1prls7d4d4vmg6p54edzksqlqktlv6v9z9vk2afxy97jh9nmzak7ds3hv5ky", + "bc1p5q726uthfss04msvqpz4jdgr3a5uy6rqyfp0cccrsg48drlq3fqq5gvta6", + "bc1pjzexfp33tsc07n2ka60dkm6nf0fhd40fc23s6qv6w70qq03rej2snw52us", + "bc1per09vmh7lxuzeeq2kazvpvnyjaquas4vyfuftmq97cxexcmsmnjqe80vm8", + "bc1p93ayysz34uvc6p9nmrjlfj4kufxvs0s4l23favjykdymtxs5dwuszrqyre", + "bc1ps9856we8ey4tzwmzjqah9mmw3fg42uwake0q27h26068tf0azhcqywnz4n", + "bc1p2g640ajuuqd2esjfxw9puw2tdzdwxlfe7yzh85fzhwe0pjnmum8s4e56ne", + "bc1pc4z8t666asahpnswmhg57mrgpeuna4xaplcnl47zche89st73xxq5pjhns", + "bc1py4g0ljh3e0032fsdutg7ev59qytwctqul0rl5rt50jpsl3753mnsnygyul", + "bc1pjcgrp7a38vrl3fxep58ad23d6gnr0wq4ql6ut5fgk3m595amjlzsqk2auc", + "bc1pm0579x0ffsm0vpqtf05cx939up0ddn508kk5393ryen8g5g6wvfss3gp6d", + "bc1ps935dt282pd00x32ve2ywgh6walxjj3ns8aefq6exq0pc4sz7ghs4489kg", + "bc1pf3m2z8d7jjr7jgxgqrfm5jjsxgnugxx74ksv4ech80sus3sh5efqhd9zpr", + "bc1p8zrx7h2yx77gy8f0k7vlvzwyxv2ny02ajukqtevgl9nzn847uxys5tdn6f", + "bc1p3qu3f3vl979kpddtsl0998ksp5ey5mcuwyhp2ch7eprhwgx4ru8s22p9sl", + "bc1p073g668hshzgwdcvq0tzyqnfvprw8ap7e9008frxyfcs0lw632qqv7plvf", + "bc1p5dwwc4p9lds8avkyn9880lzlpyzw74vd3t5rpta7y9t3s8spxqtq36hr7d", + "bc1pgq8s3vpxgd5fu4p9rxk5f30ps745h95ydfu8hl4a0xrncyglgxls8pupfl", + "bc1p32xktp89tdy26sp6c0sew7ayjan3jnw3g8p76unqzu0mufydffqs6cuj6s", + "bc1p6mc46ujjyfk0cus2v4xf9m980k74v4y03nysg0ygnrd5ke53a0sq897r6d", + "bc1pxp7pwmy2ypgpausscmhjdyp395aaepvv7rrjz3q7y7zen4r5grnqmgquw6", + "bc1pnxtw5emdqcfc8ekn05vwr7ss2xvl0zm0t7xggm6a7usc4g6hf3nq8vp8z6", + "bc1p8c062q2pwjqu6ym3qnhcxtl5mlx3dyunlluplqrp8gz35fquyrks577wmq", + "bc1p328smfmkyzg45wm4ejjhz42e4xdzzkxlg3gfjftvqrmn08a2szsqr7tg7h", + "bc1psrpq3lsvu63k7agsf9pnn2zzjgjs9pwynxqa59rg0n9u56xre9js3vkepv", + "bc1p6v50nm5qen25ja48aaut0qfe3ygn7m90eaxuqw6ypj2mgvylzp2qw7h5kt", + "bc1pfl555a7nzkyamjrkn52hua2c557dl59c3299eklw2q0tuh5x2cysfp84ts", + "bc1p3vdvstuze4rxs94n7uejjqyt72uq90rgysla5vxvlgslw6r36xtsnh9s4x", + "bc1px9h2f4myfsjqvqj2smh4fylhrwk02eq2xu9s662f457fqky79mjs4wac7y", + "bc1ppljqg273mhzdn7uy0vdhnrfv7ud7pyrnnxqtvq4gavw8mzjq4uusvl8g35", + "bc1p0apqnq4n4qd2dj7ma2yc06350psdhvmeg8pllatqds5g2jcp5h5stth8aj", + "bc1px8kza04awcxzq73u04d9e4atwj5pfq75ha78nat0wnm3dj74uneqae9qze", + "bc1pdwqzrryz3sgam73czkvs3fvpd35vesyjelpla9mz3ck69cy7785ssps00a", + "bc1p9d0avg8nxdfgsmvkne4yj36ngra5dmmpru4wdnwy6awu9d4cqzmsj2aafy", + "bc1pcv988xfn0dwyr4naa09mur9rk4pnuhg9cf82wrjljnppwlv9h2tqxusfav", + "bc1pnampa8zj4rsur9k2lr3hrpln9q4tyfr7k7cs809rf9jfxtw0ftmsa7c68v", + "bc1pn40llsj84a50kwaz5slneqy6x868mmtk2khrp47x5dknx6xxxawsq468ck", + "bc1pzzuvwgsjp622yx2csr79q0mhuv2vadcp8jfw7lysj75zvw5q47vqv5vqx0", + "bc1p89m3j4vm295fdglwqjqfu9pday3q2d5jyyhn3mp3tgrj0477fumsf072sw", + "bc1prkmq7r4cg9rv7x38gskxzmktgcz4csc04ahmrkwz0pf0yev8znxs5vpwvh", + "bc1p3hf2nc4h74nj0rejse875ad342459gep58nzcugmgmn92nafx8zskx2fnl", + "bc1pn8djtut056slna0pful3y3tnl7z9cwcfyf6f3xzal4c9eh7he8nstphluq", + "bc1p72mtxsvvykr2vkgualy8vfwrlq358w2669g4yqyxzvatpyyd9ezsz2qpc7", + "bc1pjp0jkn4w6rxh4gu4m2r9l7sjqevry2enhqgl87dl2mhlq7lqa86shkpn99", + "bc1p3ztthm736ahzyt3fukx93j29hexp86k3uhlykrrr5muj4llj6ncsn2kak9", + "bc1p4u3yvp5j6hum48q8mm9elry3ftfnetfwn77pc4el99syr732x4zqa3dmjl", + "bc1pa0wp2nhgf2fuv50ccaftkfrk7gj66z4cfghpx8h3t0tvggkzxpus60x5f7", + "bc1p4rzjmxepy2e09azth8kdkgzupzjt7ywspcznmj23j96a60dvxpdsufmaw8", + "bc1pqtcysy2k4r9kehe4t423dwa0s0xsvpux5rjczxhc3tjgfpmmgvnq20gz7m", + "bc1prehjjjfhpyvsravrxtkhvzfsj4sawjcl8zz9mgh8cht0pnfeadeqj4zs8q", + "bc1p2meysrr8ycejzcdkfjgycnyz40cpdrpj3kh0e6p6wjsfyks45q2qcj0dwe", + "bc1pjgjkq72mj5nrg6kw0cdwry2sv0j8e7k5x565e6700d5atl7wz64q32ulwa", + "bc1p9hdmzp57vemj98rzc8zsk34yxaqsvxua2uh9076s0zqz4fj8eqtst0l4l0", + "bc1pyc0rsvck0juk27lk29smyl5z8yta2pv4zj7lmufkj4yt3rpfkhnqn7nchq", + "bc1pgswgvrmnfm85n9gq6z5pklnvel2mtckphttfv486kt5u7lxgdwzq0hhfm8", + "bc1pstvgdg8mgvtfw03t55q94d85t9c9vezdqhgquj0h5sw2awz5ssasw3cjcu", + "bc1pw5ttyh5ua4qzqad2tf0qexcw0f96am09f0yn4c6eynvujf7vudeslerjnf", + "bc1pkyxuftxptj8nf09qx5ea7m8zvy96x7uuhhw6djwjuuxymqxwxj4sjha5mr", + "bc1prs9l6eh83y5djk7y0gavta3mga3k0jgvsutep7cqdrl82mym6jfswqk8ng", + "bc1p3sxepc9s8ynezjsvxu3kf3tctxdf5aq929x35yanqs44r8yfxvjs4kp74m", + "bc1pljkwpr6vr07tx734sd9ggzeaq63wa4awxv9a8jxyyedwgpha9rtqh55tgj", + "bc1p9hs5zekvme38y68vf4h96tawttx3chkq3n86d90hvnlgwghqg3qsy4u0c9", + "bc1p2rdvts45y5g66h8gafqtvr6c9d8tllnkv665vsz9n4gevn3zuewsxpl9wt", + "bc1pze7q3pepg5nqrfk6kwgetmepwl9090cml0427whkrly0pay4mpls23davz", + "bc1peg7zjkck5vejvkwzdcktznkfwszlpjxdje67lzdp3qf9cem99egsdjsklw", + "bc1pk0va5e4ewj436gvlyfqjty53zr05wsvvfqw7awy079hzt6w0vyjs9s5mpk", + "bc1pywhz97wsgu42khrv6h0dvq0amcd9vzgdap6xk3x62xph7j5v83psjj9q77", + "bc1p5sg63ec7pfc3wmhu89fyhxt7eng3syhmzgd6txuk8z0g7m4vz40slr54y3", + "bc1p6k26u2wljwa346ee4pxyj37s5jsdsqcw2tgp27yrfm7ercc3x43se3jzgv", + "bc1plvfqdy9d59g3ugrgvlrgz4fz6l6x4y7vgcz78085qe4dr9xytxdqq5fu84", + "bc1ppgq28vs7w650zl4e3mxclteexlfsv8s599gwanryxqc43huqqmqse9q20a", + "bc1p3gvepvdzewj9w98zp2jtksgjc07chzke8ww5qv2yrsq2m8m8qrqsgp5n2e", + "bc1px2mu4cwdg54cedz77anulgrtc68gy65zs98sgn93aej4w9hgcv2s0xlj8s", + "bc1pf00edmzpgvnjsk3sdswnzmzzjeugjfet9c8d7nggdcm579w4ktrqygz053", + "bc1pqzhn4agvsdt9uk6gwl0se69txgg8amqvjedyqmq3yp0cqk63305ssjxm8z", + "bc1png03j5dcglmx350gmt7h3zjptkwyeu3daylmqhrk6cel7lv2m2usfz247j", + "bc1ph6tkcpqf9za25txtrdgg7n80v4jtd9ctjt925aa4hly8vk3den9s45jnul", + "bc1pxzhcu0qxk8tk68hcqk5j0hgs4qgsehvwdjrfe7rwmzd4d227fajs8f59hg", + "bc1pkq9456k4sumth8ljspk9ene3zucp25zrg7zrrk6pyp40qdfm2glqt6pezu", + "bc1p5rknsnjxuysmumtf2vgquc2fu4c8fmczqgta7kh9u0zwtrh6sp9se2tcsl", + "bc1pxk2t68f88emzx69jmwrfranf8phrunp3xchxzmntzhyegx2c0q3qakrs7n", + "bc1pgyq2qrflxakj703a20qurezz6sk829q57npakz0ngwceu295euwsa6sxz7", + "bc1ps4ldvqanezu6aspajteu048url3fpxxvdcu23p42kt4sd6n26hjq9kmrpn", + "bc1ppufgmtkfnv0akan4a4fcxa5wx6xltj7uyat8gjxllfsweaf2lzxqaudkxa", + "bc1py762lsztgjps0dymjs97wx9s7j9m8swrv46lf686lrcy8s30rm0qdyaqpx", + "bc1pmxyu3d2s4yzvmkedzzj9n0rlnll6yxguplatgxn9a5xewhf8je9sxqgwl8", + "bc1py7d9qp4pruywqy7pmu80e33qshnyxvfd56dqg8848qyx63u0jvpqkqtlkv", + "bc1pn76thds9tt0vfwxhw6su9qdmu3nzhcxuf483y02egs8jt4j2sesqcs6d6h", + "bc1p3rzshqmjv255s4npnsf8t9d7m4agzhg7ddy0zg5j02px0p6etufqzl5f7w", + "bc1pn4jluq5caqc5fgfe5cztgszwyuzuqggc0p6adr8x0qx4wxjqd69stazrcl", + "bc1ppc0g3tf7e3jkzs52s2szh3ngfg6x44ns9kgtvcs2ghz2xhpuspysjsya5n", + "bc1png8gjlqmhcquanzlmhx8gc8pwjsccjad3sn4sxjfwmy3kpcxfl4sgzv4gz", + "bc1pzxswmdptpkgpw23hz3jzj9v0dsv6mykcxf66a7a8ecgvyeh2lwjqruu3zn", + "bc1pkwaxtuv7qmfwuk0m9yvax4h4589kuslnc2jnx59ckqd2xzzxzj5s8fpxlr", + "bc1pz366uwau8kdwt9k5wjxme5g5935sv7gqkt7w0hy93er0ckjjlsnscz9636", + "bc1p4tmprycnhwfts8dnrzcchxqyrvtmvylxhcst4y7qan79t2yc008s4whhnw", + "bc1p3r3jn9lvw9lp8w9sw75kgzvc6a5e3l5d74axpuu5pdhcngjn3xlqseda90", + "bc1p8s39qzuh4lm4jsn7tejmfh5qcz2pzvg3jeekx439sxl6grd34vqq6gqrwq", + "bc1plc5u3eh2sarvytngu885mzwj4hc7dvjjvk929uckdlcwuqtnewqsuzd565", + "bc1p0zlzynhd2mvylfqt0mt9dttscaqwe4stc9qzce4xdghu72r7fwmsrr2jvg", + "bc1pzge8p9qesavc9gz6ylh68a8j2av6vk8d0v6y3jmrd4pdru2ljgksve86ua", + "bc1p2mlgdm2kylyfyvvxmc6pd6d2l3eqnfer0ytsk4f9ah8k0944jcrswgrz2d", + "bc1pxcqq85jmj6ygkwrtfu9yu5h98knu5svuq88jf2avx87le28gq3gq823ayk", + "bc1p9jujhj6kvq3fuh60lhpa3wurjx6uy5hwnfm3z9lg6xecddaqxk8qp65j00", + "bc1plntux0ml25lj4t8awv6spdt90eumuecm06pydgmhcrvdxnes5q4s9aj3k5", + "bc1ppa66pj6nmtcsuu5avcsvqj959fezx5v2nx89h663k56r8zfvhqwstv8qvc", + "bc1p38m6kdylx6j0wf3zkfhr7e0uluz9p8989p5sr9cr45x69v3t5yxqd235h2", + "bc1pzd32u5rjy7ace9mk5mfepgwfxkjmfctz8ef9zx5cssfqussfdeys735k8w", + "bc1pvt95cg8ppx34wnpze8we4n0qdmqv2wanpukvyj526j4eyzd875wsj2fhmy", + "bc1pssct66sz3vsqeutcvzjxq2xr6jhzcxf9dwrtwx7s6m48m98e4cds60nn6g", + "bc1pe36u0mm2kxqj0qtzv0rjl7mewy498mwu3ak3gjsaamqumzv2jppsqsfhjg", + "bc1px68tf6n8dh2uezktv0xzhmsavc0kxzzgt5z5aw8085j0gqrkk4zs9evhgy", + "bc1pym76snmsdrarkrwuw690c3dp97nka0f4zkt3xxkupwulnsjgf28s9qsphs", + "bc1p0qe2gt8ju3xl62f5a4mww2kzeg2v62xxgrgqaxf8aahd6u4wdmmq4f09tf", + "bc1prde9a7wc5ztcwgdr9tc55jwzx73we8lyaputtl8559uhzdysnmrs79vqz3", + "bc1pyrzhu34ftpa75jevmz2pyy0tseqtdmrd0ujun6h4s0s6ml6kfzksgvjjv2", + "bc1pz4gjuh9lzey3c20nx73vu0fr7yyk5fh68kkv7j68jrllczf69jrq2w6ru8", + "bc1puxdesnj7p9hlz7zyeezua9kz558usme4hncd35xfdqfcxddadkys7usdfg", + "bc1pslxwu8z9yd3jgejs5n3n7cka2vu2cndyrv6f3lamf4ec7m0yw5hsr6zn5a", + "bc1p9k5hvre3tykz8el8ftdmaf6l0j7q6s90tyuknj3t7hfd0t52dlzq98288y", + "bc1pukz39w4sz8tr4dkpmh3k9gtf97gkmd5f2kgyjtt2dj33k8vkdy5q4kf3cc", + "bc1p42s9l8agjfderlzw6d98qyra23g7c0zvzhlydsxtgrp38p5xjnqs5m2nnr", + "bc1p9p8edccam2hgzrvfq9tf5qjesvp0e7mtrel43qevd0t8xfknvslqndlhqp", + "bc1pww4td7hzmnptgz9v0rvs2dv3z3dlpkyk7l90qjsylvlyaar6e2ps6pfvty", + "bc1p6xhmtggkzuhl02d3ff769pr9fhpm555mlndp2xas9nnzwcks77dqn0ejhy", + "bc1pvtxaldhkc2n5artxlduncxvmyjggngeyplkufcanmcw3vgx3tuaszswdne", + "bc1p8zzsfnhmslvzvqa3zcy0ayurv8knusm28mtyvrz3fs3npppendfslkv0cg", + "bc1p4m5wxt939zq49qqqq3a8py40wre3ypltfz5vwtsed45wxnm4cp3qznjq7u", + "bc1pugxh3p6h0mf98vn3arlvvwqjffez0nxx74v72jcwt0n7zye2m40q66dwft", + "bc1p545we6pl9kdkj7kfap6xrszcw50jnlx9zkuajfqyn8ry0dj3fduqkh7lu5", + "bc1p8wahcnevsz4j665g4jaldqtyz8pq77w43smd5fqv8fadrjs5rcjswmufdr", + "bc1pexcw0lndf0seusfwjf77q7llhc6k0heahf5k409gnu3rn0vewu4s2d9rfc", + "bc1pw7st5lc94t0cdrnz0lw24ua53jmewh4rvzaggp3dnzwdhneqht9qmsz244", + "bc1pp3d7sd63dwanwu7m7c0nlz2l0qkweshuxej5mgl7px29lgym4j6q3h9g2v", + "bc1p7djtret8ey085eeghq98lf42tfqh0n56y33jtxykt30wmmtxftvq5csqqs", + "bc1pm694wgczsxdv57s7fdaapyvzrdpxnyejmh3jdffwsuqywr5565dqqt4ahd", + "bc1p02586zzfnxxk9env0hjsvucp3utsade8wev3zymaytpfj8m7507q9mkps2", + "bc1pxyepfw4k70s48g09y0gmuvzfqldpq6pkwse5nrmcckdtpxft9ctq6svtaf", + "bc1pprgf2frg8g3lvaqr02atwa8wn7app8nnpg9nf3nsx0u63sp8y2wsfcpmwx", + "bc1pevfncamaxmthgglkkwyj8220dj4myv7x2tr9gka0y8u33cp9cdzq4s3fpz", + "bc1p3yjvf9gfc4qvm48nk3ae5zywrlvlah7l4eks4eq53kjdmnrj0pmq7d5ylc", + "bc1pe7l40cthelkhyxyy03y72u5d4p74g97d5lcl2pvcekxek0fanv2secftra", + "bc1p33gxn44v282w377hqsm3qptk8gq538zdmsr8lv5nhj2vtn0vak7q796zgf", + "bc1p7aza6mfpe5y6edvqxhrqz5mc05u9w0xrqu25nsv4my8jaze3pnhqj7f6mr", + "bc1ppq50amn266f3g8407pdkqjtshfq8ythyjl24pwe87jnswlzggucq9u78z2", + "bc1pswrtvkl94nqpmm5vt7wcfw2rpk6lle758stxeczssgnamg35qw7q4rphlh", + "bc1pg8whv5zt0yk8kpe7te9q4akmjqhzk96pq9zppn4eplggh2z8m4eqqx3mfx", + "bc1p3necgfznc53u7wl47f8y928jkme399jdt3dzysevdvqz5kgzz5aqz7qvv4", + "bc1pxg77p5xc55ean8z50gx6crx64cc4vvsfnrzx62mdpshdq65mjynqyqt8rl", + "bc1peztdam2yhw2d2jlrtjyk0c3hc80u4tyd78rqm05kugzmzgdna6hqlq97hq", + "bc1p0pwe0dwwqs7fkr7e0kztwwj80qy7jvz2na6le2hgkej4g2vufjksgktxt9", + "bc1p5gq4r9hh96z8xvcy2mah8kxupkvv6tdaaltghsvsr820e983xy7sc65vkv", + "bc1p5lqg0hf7tp0tzwphhnvm32exwx3r39yn9ntcjxne4k2q6y66564qzv3hrd", + "bc1pg0wj566a3lpxw84k3sh0m5cahddg24w4575cas5uwcynx2h3jxqs2mldv2", + "bc1p0qy2gl3qpt2fd29udq3j8fg2qff4r0xcul4y50482dekpw7uql0st8ahzh", + "bc1p8j5rrfuy8qu2kmrjy5kl7lm6uun87q7fd4wcdy9hdn4sd8779uas89g9ea", + "bc1pr7nqc7qagfllatk9tfylktmewvxy2j8p590lgdv72khw0cq9e69qvmvaaq", + "bc1pt3ez298y6tys05y46mv4ln6jj85htmum8rd97r346k0aqvjq8gdqtjq3us", + "bc1pp9wcln0gfhwufzfmt9frafc8mcpsngmnlfkjakwmtwfyfxfc4ycqh80rfc", + "bc1pv0yyr9s3uyj4yy273q9lamx3e7j556j5yytnxvzc2ece5zv30ajqhkxe7a", + "bc1pl667g7ys4yhetsgpa2du8wvn6rp0h90c27734tqduu0874qjk5lsn9ykza", + "bc1pszkjv4zzjw2rqem0vuynrhxtnk4hgwtf67s5e6e2fawwjtm9g44q29k770", + "bc1pvvqpzmvwyycz4x0t95de8d6u8vx7ydjks2pa9qakrp2kugk4qcgqan4x3g", + "bc1psxx6hkq5j7klqgk3hll8z4w2xjgdtyj4vfn4zzrnwec8gxre98ts34qvk9", + "bc1pkht6dupa69vcsaq30qedqdpg940ywa36qww2n4d0ct4n6vufgyeqaskcdl", + "bc1pnpw9200dfllszq676p8qdkewekzktf0ddu44k6xqasef0jacd7msuq5e3l", + "bc1p0c29jjuprgn8lsj60rud27kzu7f898ax857usjtnwhm9zr9vjrgsm55pg4", + "bc1pcsymrz2lj3je6qtlz4wm7834fhfjq6p8kkcjxqz0nlgu5t9v755qrskd7k", + "bc1pvez8qxzhemjykslf300v80juqsc0lhr0mk8p0fkwuusmu0f04ghqzv4zxy", + "bc1psk83aag4xql8q08563hpyf9lvw64a7dgvsj5wllvunkypva3hxksyhxcea", + "bc1pxxgfuggttc6eux5tau7xm443erz25edl3ewm9lemusmmc7zhgd9sv302q5", + "bc1phjumzd5xz5pjfm22v8elz6ah82nsq0y7wpxtjptaw8rpuh6umuuq56xkw3", + "bc1p6d7v3v4y375v06s7jmy9zz4266fflyug2mjhgpcz6hm9446y88xqdl0uvc", + "bc1pj294esckuextsl2slajxmdwvqvcvy4gpkhfc83fl0kjh3w03ahwskz8u7w", + "bc1pj98ksyr5jgqd8p3qkwm89gluvr9w8pe2kh8avvu02rw5gwl7cu8qj2c7w4", + "bc1pvdfp4lq4k65c4k86hcsven9hy5y4w8dwmzrmsc4pc6g7r93nx26qnput5n", + "bc1p705aka2gugypqa9yjn9keczf2txcxdjdval2dh20r5gvht9q7n6sp3rlxd", + "bc1pq7vc4x6mq0lv5xf4hku02h4a9xt3fn4zfktnrhfm763600ewtszsa2nytt", + "bc1pyl9e62pz7jjv83n2cuqcsd07zqwhs9ctj5naghpn0y5nsq20kmdskcag8n", + "bc1pckxhd6ef0jfnxq73dc0jr5quwkzddk9psf3fkjm4gtq5e9c64mwqvffn4u", + "bc1p6jjeflpvrnad0fvfcmc3m4pt9h28vuurdx9tgca58c8e2j3kf45q6qg3hx", + "bc1p8dn2esupp4lp8slqpd734ex3y3nvxuhstcf5p2ene900emtcpfxq3r27e7", + "bc1pgqrus4kjx2avwdq6zva7ts40dgcls6syevmzvx8xz84zqxmhzhmq32pzzx", + "bc1pzlvvpdfpden8xmxhzdp9vlkzpvr8am4p6aqd3tdf3uf2z34gadmsgsfuyc", + "bc1pqwxdzmsmzxst6dn746fhrqhc3waz74jkce05euphg3l4g6ewlqgq6u95ae", + "bc1pp0g5wkr2nj85jvv50gf2we3g7ztu0lzar97f5gjyyd0ugfr8wt5q72kjcd", + "bc1pn2gyuakpzqh4djw2xncrqqnfvexazc4salz7jn652uuylc2sttps9cxnxj", + "bc1pgs7ldvqpqptrmvjfjkz0k23f8vpfpzu73qfy7w0t89redngmdtxslzmzsc", + "bc1psxgh2vcslmk64jegr82guqlhjw8jcuatsmylxnye340mfg496w7s66y0g0", + "bc1pfd4atnmup22t4ffu8lvxn7k3990cp2kxf6s4d9gv2fhlxlp8k92spxc5y5", + "bc1pjj6emywy86y8lf7aqamer4j320tv89arhpdaluh0r8wzkvx4ukrq357r9u", + "bc1ph028qmp88eqs6jlckmynyzye7g4uq4z2cxt0hkh886aryzsysyaqxh8rta", + "bc1pew6gzgw9xmm9zqjdss7mdqx2ksga7sttte4hczlfg2ckw0v843usxyv6kd", + "bc1paqz4ese2luqz6axrn573a6j24g94htqfkaw50w625sdetf50lkyqylwtl0", + "bc1pflwlevehucr6tn4k0mjmhsn45mnwh2trhhs4csqtlh26vw0anxqsfahquf", + "bc1phl2ck7zq8jfw66le4f2dm74ezg9avt3me7saaeee9fk7w2j5nhwsv6mw9j", + "bc1pnkjnjmjnlw86hgzj6fxrs3cndp2f3a2a5gvlct3slh432j9ec78ssumn7v", + "bc1pv82xfr4llr4cv929c78gr453q9ng99prkf894kywdx7qklwmcyxqmjr4uw", + "bc1p9fdkzlse3r3xqfjdwr8q28v7vda38ufu2kvlcxye5c9tmr38y35q2f80lq", + "bc1p4cahtr67dmmprnhsls2fkcz4gt3fysyn726m25m8dx5uweuv8rjqhqdtxp", + "bc1pdcf76p9ke9g2nxzd0rjqh87akv5x42fk35c5zw3raecz0e4fyasq387mlc", + "bc1prc5avt3kxtxfewpqsvffqc0n5tj5wmkrkpkknry8razglg4c4vas2evjmq", + "bc1pd58kmdd2p32qzzpktufq6c28d36wz9jpje24ngkdzyzt67z7tv6q5tv6cv", + "bc1pdtrru2rquvpsp0uchnxvpd4dthwcd2yxv67w7d5ruq40gudfundq6utf4p", + "bc1ph39gmlazln9ewjan34tcusrp69vsscf8wld5w9fekptan2axwgfqccjgh3", + "bc1p2m5v54shd74tk9vkgla52yl4zpg59x6xh2jqxll5tmx50nlt3w5qux4xh2", + "bc1p2p97c94r7fvzwqkn3rterhl529cnc4leptfjpe2yw0ekcqsd0k0sszf7yt", + "bc1pv5sgz09l0w4fw9vsgzxswg038gjga0vcrsw56v7u5dlqwf65a2kqkru4c7", + "bc1pf6prmhrm6axs0vlzwlsnsukxfgj0gegd5e62j5sc8y8z3mz7xvksu80ney", + "bc1p7pnys2s3ykqwjgz8uytye9r3s49clx9nqudz0l3ta0evqs7s343szpjdag", + "bc1p08wghrjwqm8222594ed6utp6mekwdkhh8sqmppuhdnt0g6gtxknqkm7zls", + "bc1pmr48gultn797rtvyz0lpc5dw8q47p67w4fpmnw7yg9uwt4k4f6xqu7k7ma", + "bc1ptf7wdahu2et73hg7t3cvqyk72hutpyn60c792h7s0ptjll0eazlqyqwxye", + "bc1p0jfm4ueu0l98ueqayy5udl3nk6affmna7fvajuzgefwa6crsd22sl3eczc", + "bc1px64qf6fpe60w2k6ke0e42fhu5wyrj7wkk47rnjy9akvp3mn67wnq2zk590", + "bc1pz9yntq5fp77cp6ewqyg8krsmqqtuvc9uazaxzc2pfwldyuevmsgsmr8l6f", + "bc1pmcgy0zkmzkrds42x3qcauje9adnzw60jxmfz7ja0vezen0tga5zsdlaula", + "bc1pplwwgu8dznclmehmz9p9yc563uq5hsp0aw8krxxtjnvw84h63fzqefecyc", + "bc1pmqyke0d5xtx20p2sgw6kdeza98qt7pxvjdcd8yxz9g06xlwql3qqpl4zad", + "bc1ptzcwtanml3ep7vsw4qdukaxgrfjzpejtygjdnmsl38ck5m9dejyqfmmzj0", + "bc1pwj36alxphh83fnhsts8ajfaehwus6m2ljl2kqk4vdyaqfkuk9q7sjlgugu", + "bc1pgdn0lect49s8q60v7kqfqkglraxd5lcrt4gnzan34jgv693yrm6sq66d2c", + "bc1pst55c8p5qpsmuzf30fn4a57tzuq08y2nyvfl5danuxq93pq8ccwscha3jc", + "bc1pmwkzrk2t85gstxf6v23y0sxgmmzxsr8r5s6vndt0sqms4x457vas5n6q37", + "bc1ps76lgx7nwgxmc5wc3dngqznre46f80srd9cjtsrar2ydch0ev4eqyyhz9h", + "bc1p7meh4eh7vzz4nue9pu7fv50hlznn42ja0swekeaq0uam5dj0tsxqkt592m", + "bc1pdlyy7k2hc9a3pf6cmtayf56v32k9z6nspkzdegy8pj9stqwqr62q576uqt", + "bc1ppq8c376neqqazm38v9lxg9aarv8v2exw2ffmhvv8l6xezlp0l72spq8l4k", + "bc1pe9j925dnegcg7aw2yygp6pksuv69u6a2rctu3xqmcygcxp7pw7qsfzwa8v", + "bc1pf5570tmzewepfeak5p8yczz9rtvxfv4ujx0lafnwyuwlru9dwpks04pe2a", + "bc1pgu5l6j8kjmhpte4pyg5saskta57uhse5t9fhhcu0k9jttsdezymq4a5vke", + "bc1pzdadqdvupvrz5rtp8af0dxh0704r7us2zqcry8xelhhs4x7qpq6qkuddnl", + "bc1p660fxj2lwdgpzvgrq94mqkyhkapwhsdgxh9ljpmm605kuxpg0suq9e39tn", + "bc1pc579cml4uvqxelhh0y0zn35n0clfv0gfqzw2jugfkqfg4p0dxqkq8v52a8", + "bc1psv4g3shvwt3nqrz3lqmqwuzelalkrk07lh72nmmj990qrfk6azgswshxnp", + "bc1pkwvah7m33cam5d88cc03gxy8re7j5rt4przm6ud25fww6f90xksqur6lzm", + "bc1phtw40xghllqlsp0c06xgre8hzfgqjuqm664hqme8t4cxmf3ymt7szwf3ws", + "bc1pkm7rmm5mwk2yvwt2mmr9uny7387a9r7t5x0fduj03cdjhjn4jfvqjm5zq4", + "bc1p535a4skk6uxz9l489gurg7rwzvzlewc8fqgq3sj079nkf90t3zys9gwn5e", + "bc1p28f86dmc4846rzus8rutkk2x2asrhzcqh3v9yys8rezfkv0w2w8qzv3vz8", + "bc1pg6ad7gf6cl3dn8y9cum6pzutlanlxlqnn38kv2jgcz5sqc3j5s0q92gpw9", + "bc1pwmd4dw0gadjuj3meyeffnpevc7tnscps2c4w8lqaqgvm454r6lzs87xafh", + "bc1p200cd6zc84k0nhvpnu8esdcp9u3mup2sve5dsfx7zeqcjrddeqpsvg3jst", + "bc1pwp0q847c966fuyzs7jrcp5hcztyad8ttsnyj2ttmn8cnx52w9p9s9yctze", + "bc1pxn9vpt58vqclha965r9a3spg8qpsvkkq54c462kszcgmyua00yuqhqp6sn", + "bc1pl94hlqrdfvs8fwwn0nd60h5u7rtzs0gz3q3tdfdk04zjf2l5453qk8y0w8", + "bc1pshxe2u53heye8v5xg9luk5x2h9qsghr5f77rzrntqrmwr9a303sqd77dkh", + "bc1p692rr978frg6s4h7uxnwh42e37dhj7kq6kfmgtahduvrksaaw0mqxknrru", + "bc1pkwy8ck5jxfy69fsx0t6eq86qy036wyu02kt7pkct0rwpd6tgmfnqe4r4fp", + "bc1pwzzyzx3tqgayv7e44zch983mxm4h5y5g5dall737zppss5huczasyvc4g7", + "bc1p4q0h05ssvkrprx6adz3xaj6td43edzt3t5vz2wh2ntjtvkjlsxhscw7ler", + "bc1pgv8yts9y307nvlvyvxjrj64lhmmvdfg7xtxfh94nnwl2wfr9s7gq80h6ck", + "bc1p2s537wqlrlddxvq82fdszv24gd7x3q8e5nku3ztnjsg79d3hatrq88zeh2", + "bc1phpwf82jhmrumhskwrxln3quqpnvqsz2f50sk056xnscjw33ljkfswjyg0q", + "bc1p5lukd4km0fnrhmh0jdd2wmzxyvpyx8mhr5tgev0833q43r6tmh4qnampe4", + "bc1pxrmmp9caxyek7ehnxxkpmrryual48wfeg8frgrpc6ruscxyptwhsvcufce", + "bc1p9vjv26lk7y6wczlu56xktulm9f2m5q44ca5al6s087l2nzy6es4qs2a9yw", + "bc1pjfmt6lap7smmm9vsdz7ddty8ap57e9kz59qtcu3d3xkt045qr95swnrwrq", + "bc1p5gt62pm7v92w5sspyjl6ym0z5jp5xagup9jf35jqccu4sfy7zc0sxd7qxr", + "bc1pw8efx62j3t7surt90dr4p0xgsdn9dgkc5n0jpt5nrtjdj4efa60qx90xwa", + "bc1phtma9dh764gvywd7xc55ejgf4j4mjq9kkyny929ph0q4scj8675q3hwf5l", + "bc1p5y6aph89unlwtmm72953jqkeu7x5pzt4hfjnukrkyz9p8v37yfnsn2c07k", + "bc1pr02hah3lz3lehzv7zug487gd547fv9jmkkc8ghrc7sz2p9t8rq6q7hcqc8", + "bc1pvlxz0lz6dqcnm0mch0ytuf2scfa3ytgeqrmpwqs8pphazyumsy7q4k8mmd", + "bc1p7wduwcj7uvw4gsz7xhuhqh397msgkgud7r64zymgaqjdkq33vr4suk4tke", + "bc1p2587pjzycp78vs8p8ry3r3wfv229snt9qpwm29kfhr9p4yr07lwqdhk2pk", + "bc1pn37cph40e7r7umlvp8l5hlk427dvs2gdp20wc29ucpsanyxqlxzsf6x25v", + "bc1pu85vea6ru6n3qel2mvkcu7afklf6el586a8qwvwqekuqcxcy460sk77cld", + "bc1pdtrafeavgs8s7funwh2ccrw6q38jj4fgnwe2r33nrqp4hf3290mstc3tdu", + "bc1pmpqrq22nd9v6dtqy8cxmcw0g20ytcctj07vuz4lf9hvgy5t0zsjqelsfjr", + "bc1psymn9gyfvqqpfw4ga0ql46d8f0qqsvgrhdr7xy40ak57nmxpeamsa4jrl3", + "bc1pzyq6vetded0welckpd24canjv2vylnhfstqldheup857ryex3c3ssd593a", + "bc1p7mepdykc0achlftylmpn6d7yk4er3ny0kz0xacqsjvf39q323vls5a4nkq", + "bc1ptmlrw54vktlx02fp3drzq4ncwrwu4t2qpmyrs43xlax7eeudmsaq6l9dsm", + "bc1pyjw6gqm0kuk5ztvyp6r6wp8jmed5jqr0fn4ad93cyvlwkrnrrprsse5k2h", + "bc1pjzalnxrq6ha6wqzxaladeauzav0gpfcxfs39nekpxe6twk2w4ptq89gva4", + "bc1p3txqxcsf7hp7g9yz2arnhhr8la42llnhdz95yxxhmn7f5nh3xlas65yj7n", + "bc1pzzt0n2lf3hx6esvjmn7v3zs55vqm668xl4ad9nlemgv3t3ekutmsmx2fr2", + "bc1p8x5fg6mpg25n47e69m8p85cdun4a086guqnn9rtj4du7d4vz4l6sg6060v", + "bc1pl9nw90mdrw6neje8kac9943he8jgh96s8d92hpgld58anthjey6snsaln0", + "bc1px4q9ey6m955r5qtjm6lfkam99k77t3gkx2qr85r3hg4hfdycn3zsg5lrk9", + "bc1p2e6cwy2mxrejwe9wxwmyz0vmmkzwfhj9ggy0fn0lqc39c0l3q8nsy0xndz", + "bc1pw8gyedeu4uskhppsc7893gptl4t9qdr0keg8x89j0fzx5xy7cvfssyfxdk", + "bc1pz30dcag9ve4hakmmd0zmk7zqpkfw37lwyxf4qzedv5cwhtpdngeq72ld8s", + "bc1pkl83wgmkyazp0hjwcutz2zujgg4rtcyzkwmynxvsy5s447tuwh8s8syvch", + "bc1pya3tew0fc3ch3aylu92uvlyhdc0um3d9hcps89d58qcgvr7wkw9qnypm97", + "bc1p07c5qdea6gs4a58rp0tr46zgyk5zsandxz2lk2xvqpea72thr40sz64sec", + "bc1pjysaaftgtlt7zzh5awr8pvjplzwlk5q7j7fjjqscw5h3hkmpqsnqt9pr8g", + "bc1pujrxhpdztsem6skpx85r45g4qjzn0s2nar8epf44wdt4hndmpnrq0hkr9m", + "bc1pvs9rj343376279ut8ktn7prg5mn7f6lkfsvu7vhq6ve0t7zzhgrs9wneur", + "bc1pzcf0x5hjczz4xdxltutyxy8xsefv2ed8lh935fwww7fkuqh30sfqgjz2tf", + "bc1pspjj2n97ra6n3ggrvwnew4dkxqjn83zkmxpt4rkl8j9cjc2c2y4sk3zk0r", + "bc1pqtfvl830f2evvamjr75mpq4va2afta2zw4hgdyae0uha67x3amqqyaqzh4", + "bc1pmgsa7upt8vtxddqhnam9ws4jt5qtrlsl6trk6kweanvepj09nayqpec592", + "bc1pey45vvqugj9nwnl02qsw04zdk46tdtfkk8ret4pl792qnvckydgs6gt53n", + "bc1pq8gzxa62pq4ska983pnm5ukynklwee6lhkush8ha7vej9952sxrqcl8dcy", + "bc1psl0vjff9ssd40ldjg84duzuef7mly4vym7azyjucdypesewn2dfq60h0lr", + "bc1p58095a3r3whvjs8lwe3uyw7fsaujlf0pj52aqxx85m57f5v7ksasdj50n5", + "bc1p9h6khlg78ghle7mvfmq9d054uwmw02edwcfgagljszmaxpsxx44ql8rkhd", + "bc1p8gp6e6ly2nl0y2we299zmrr3e2eq9y2akalskjq08nx9z4765g6s0dat6z", + "bc1p6h87ckegnzkdsvcyjfm8za8edhpxwn5x5vkt2emv4r6gad3lx2eqwztrqx", + "bc1pgpkwzw9l0f52h357kf484dwlf7r7v5ksuc4jk2052q8n0pkd528sg3pu5y", + "bc1pq43xuj7mrglgg42fg8khq06ldqv2fm8gzupmpl8y6zx9drdpff0s2uksq8", + "bc1pfycek0jcncllaqgrujdytfzfd094x5gmhy7dlej70eskgpyyqg3qw8my4y", + "bc1pl5tflllzpc7a0xaj2n0a47dx35nf0zav9frz4rhrtc29c6cp8qqs5m7yje", + "bc1pwkevgua9qm9egmmakkqx5yu57nzn0g5d0t9ut8eslmqx2x6ad6fqdq92fq", + "bc1pf5jm7jnt4kmjmtlc9yygr8a85ugueje2rwlgjqa0nl2rd5xmgsnsx5phzw", + "bc1p66dl66waee222ezzcc9vufaf0wyr3xnragrdjw80p2chqmmhzl3s9248aj", + "bc1phhqwhaj6f3dwgcdfm4craengelul02vmj3p6wyjn2depeyx54nlsj4u9kj", + "bc1pf3hxwaljlkjy6j9mrar6dt70l72gft5u2pn7plnjxfj2d9zhhuvsudsn6k", + "bc1pkqww0kx0w4f8n0dkcc29ww7u9kdht0kqpsg404rdjjxtj68slecszngu08", + "bc1pq0yfkytzv7a7q3us9xnjrk5250lxg6qynzx7gkzs4hvhksuqtytsa9q29g", + "bc1pphh6tud47ah5tezpwy7r6tmz9jvgp3wt8h4qndeqtyrurgg7r8hq40rupp", + "bc1pkthjrams6pzu3pzawe8wr22ejntehjuxnauvu5cf69pu4zyfehgseykzw8", + "bc1pda0ewlsn8r00yt2pku7c8tl3v7hse48sfk6z6grdxvn0vxgsaxfsjx40qq", + "bc1p2mmfz47u5k976dmvz8s4dmwutn8wqzzjapc7wu3ng8c6nmwru79q8ayut8", + "bc1pgck7t6ha4ucf5ql202sdvw9ypym6c3gsu374nh2t4jdepcm4lcsq096598", + "bc1p3tdpuccwveyqwnyemswsrtrkkmf3f7n2te2jzfnljnjsjd69tvfsk9j8ue", + "bc1pqx4mvyvsfrxrd7cfyw4h37eyn6tpdxz3sgxykzf7h7ndhmvx405spfzcp2", + "bc1pnhlzne7r20sgww5nnurhkncj7l5p9hr72rl8fdvs5wm7rfzph0dqqdxu6c", + "bc1pnkcfzyrwwte7ng65m4lvr57hkwcmeg5a5upx8575pw88mv0kj94qsj96fx", + "bc1p8hpmhjql44nc2xa6qkg2j02gwhgaj0nhludtgl36drqdxc72ua9qdyd57a", + "bc1phrd3ay5875kes72e2erxuvxx57fpejhtulcn9m7gcr265tk6j7rsczs5gf", + "bc1pqrlasulc6luvxdaa9crgmq0yc0aqnq3nvv6vcccwl3mpzpezh3vsc89t3t", + "bc1p43qjktjju5hgc3u20gdj2wu8yemh9gdarj5usp2fv9ehla76w6psa25lgs", + "bc1pl9gxh7slw3kflhe2ey7chvhujd4yxfsssezp3rctw277vdr8ky8sps36hx", + "bc1p6wuxs402u54tw7lnfx5dx6lkpd2hvwh8zax7wsg5ylw0xsmzv5ysrha5mf", + "bc1pr03v55k39u9yqj2lqlaqm6azefj5jeeymqjag89m2wedt5qkzsnq0ug3ns", + "bc1p3wrsecnj4qtfmk53r8mgukal6py8z2nmveuwrxa005rcfc8h2cfq73mwp5", + "bc1pth679cw0a45289hal34c0nztmamr24pam4qgttrn53uhunutvuuqjj0r3r", + "bc1plggge22plrgs2h70hu484jfzw94n0ay2uytcnar2gjk7qa7zmmtq9au6ly", + "bc1pzmk3syjcnr8mwfdsezmrd2q95xch0dgd6q98zyrkvrfvurue9ycsecthq3", + "bc1pcwg7mkpq0kfjxyrmcm8ggnk7zksz2mvspkufmuucztztdx3xv94s3gqkwe", + "bc1p7ur3f5y9an6vjjzhf59w3yp9excg0dxq5xlleps9cs2lg8fgwlusm4vjjt", + "bc1p7fw2wt7shp35v4mkhkzq9ya2ynxg66y2slxd5xx88hxjud88g54qfdn397", + "bc1p7e0m4djcyuwf7w3ee4635rq9gaucxrhk99mnw0yh5wj05wruq65ses347x", + "bc1pauw7yy6xxvw64nl3wmn3tr9lkm6rt8fcrgy2rcgnk6avlmqj2qkqtne3qr", + "bc1pry58xvmjkh0pq8w2t7a2zdn8xnpwucv0r3wsgdmrjnxujdysfnrs03r5ee", + "bc1p3lmt0mr4zz5uvpkw65j9d5hqgkkx390c2sj94rs3vj2g3pnklews0557r9", + "bc1pkurpvyl6gu7yrcd0thzl44ry468dkmgyskh2lgxztz6n9tf7aekqv6wvcl", + "bc1p4dnjcf5jsmsyl4py5f7qs5mmtek8cry9ukr09cqx2z4gc7ydf2dqxvdsf6", + "bc1prqg5wgxq56q334tv094663fz4p4wwc8pn0sk9nmn4lqgandkdckqwfcjv4", + "bc1p0ncse376xl5wgad5krn5lmtp862s6fpqj0l0wcawygdz87u96l3q7u8xy2", + "bc1pt3p3r6htd57xf4z3c47qe3nhnf2n0xdtuvwdehtpawpv8h6azl6spxtf93", + "bc1pvs6w68cupphlppntsnlxgmy8zjafluna60dutzrnq42vnqhjq6esazl350", + "bc1pd2798zh64685lluayjlzr4m000jd3kruxp5qqn62lf874u0q8rgqwxrt83", + "bc1ppev0y920l4z25jz98f0vyrggjhc3yu5ylguw9fvsf2ft5nskgxuq5rst62", + "bc1ppnet06spl4fuuywvm0z5uzjhfcly80lf0uvdph0u2lgsq5c2zdksymjgrx", + "bc1pzjf8rzvjhu5qvexcetavg46dy2ln43qg0vk5wmxvuqvp9ndxe3zqc6ny93", + "bc1phymfsknwt9efwkw9mek5wcsz5l02kapgca8eczmeh4j9f884jczq7nh2f0", + "bc1p8gwnxt5f4fazu7fhsy0dj326e2uwhqlnfn22027j4jw8juaxe52qex9xkm", + "bc1pplv9rkw7kefy4rh3r94djr6f8lsnyehxcflvjcclsc6kgke89z6ssjvdyu", + "bc1p49c2dche4ahncdr8vhmkcvjqnddqv6fzue4c7qrudnhlpnc3xs0strkcrn", + "bc1pfluqmamaewf6np90r3w2tqa3cuetmar38rm96f4zl22lavcxcu0skf4md6", + "bc1psnzfl0hruqvwdawss08n4krk0ccuyv64axssll46u2kk84se7gdsntmz0h", + "bc1px3hlrekar7g0ehx3vrvvazgevaues6dvvzqxq2r6e825wkw9j8ksx7q2sq", + "bc1p2qj0823rv62rwzzv3yqh6tjy4uaj05gzkgu3ufjke6y0dzs7zdtq0pe3wz", + "bc1p07pp38txkh48npy9m9lrgqnku928ad2deyszaur6ca96nr888qnqvmacec", + "bc1pswzmwguw2wyhmxlqxva77nvlx9a9qqzw9937pcy8chk7t6tcu8fswc7uy8", + "bc1p3qh6jssgg5grjy4uaf3hj0ka0qzdxc38d55nuld9538ee6exgswq9ajs6k", + "bc1pwswjppwjrqp0qrlmkqrnp3eyz9devz0ezgc2xx64j388yyme2mjsky5x9s", + "bc1pfvxqqn2944ahwyfq3j9ufx058zqlj0g3qj3afcuhc7hxrukuvapqzr96sz", + "bc1pqyyjvu0qu5y3xzkyqx233v4wypf06ez3mt92tlz9ds6tah7k74assnz4kw", + "bc1pl6werrsap3rxdmdztakkvm2k06ps9ff3nesyl6nxpntpxdztp56svw4036", + "bc1p5my9er7ytkxxt88t93qcun2aj44emyg28ckq36de0f8km75xwxsssrc74f", + "bc1psjhtm9auyxtk9g7y9hpq8yd7gyss9f5tqryvehj27umduldlvxgq35ww5d", + "bc1prl87me0nan7m9u8q42jsm23ctmy40m9uhugdsz4pmdm988krz4usam5lu2", + "bc1pyty53scxh0jjx7l3wnhk5yucfnu2etk52jf9hxkm9pxwgd36yksqw5q7h8", + "bc1phqqe9xmfwerpahsx875ja6xefg43r3qeuw5cl39s7txamygzhpxs273dta", + "bc1pqageg9p5vfrk00admal7y5cfdjjwr8lecghx2rm4ke358plj7y2qmdsdjh", + "bc1pzqhdchhdy2z74xqkl6fvmx5rxh8rset5njeffq6zcgcx356zjmkq4h6tm6", + "bc1pr32zl7n97xf6dj8gkllcp9rnyxkcu6tw358e42f04g983pfswnysrr03ww", + "bc1pfnkq9gkeafzdvsr06jaq6dl2u6vm2qmvpyedf24sf62gfem03jysdkgqnk", + "bc1pg26csnqhxxw33pgwd5tl2xy0th32k70zwj0cc207gf9vpdvsxafqcjm7kr", + "bc1pd6pgagwnjj8r0e4lvqldw2pj9tc8ueq98x4teeu8tn4pdn9xjygqen25j0", + "bc1pjrt9azvm6lxr4uh9v5cjv3d2r9jwc2zkx8qapvu6qytfn8v6hejscy35nz", + "bc1pqkfmxlweyhrpwnj3ehw4vjy7lnkrllt0l3cydw9vmt8dc3q60mcsg56233", + "bc1ptr27wm4yrfjug36a59yjewlw02u2ak9jna6f7f26uy2wpksvwr4q2rm9fm", + "bc1p62uvz5800uk4hdnrqpeeeerxexswjl3h9tgm4w7zj9wzrsysuz6quvlj6s", + "bc1pazuyekl0yt33vwd94qztvs2xew6ww25uz9kwm4fgd439qm2epa0svr7day", + "bc1pndfx2cr5dqp02v89vtuvhw29l7kkwzar9kwhxt77vrs90csfyj2qrjcqq3", + "bc1pea7c62dnafdyrgupghcv2xhej7nv55tshcg2qflntlkgp6kwcw6q0dgrln", + "bc1pg79ymm0mke8ke4g96lam76pw9pqqk03fzazexs7agafxvqzsacxq8gkn9z", + "bc1p0c64kactywy8jh38wh5zds3drslkkwnrey5pqqfppl0rdsdn507sqjzkeg", + "bc1pasywln9fqaaxek9arkzvdx4a9lxdx4s0j6z0gsp52a7mugv4axyqne8qnm", + "bc1pdurpm6s54kv3cux0dz87hdg7mh9pq6ee4k6890zr662djl0v438sydl8sz", + "bc1pu4w25dgt03w3rk5axvajd5nhwhsn04w2fvp3nlpl2x99g3uwxffst8ep5u", + "bc1pn07x22dym0ndx8fqfy7trnhyu4qd8yu7pn65n5ayluupc672h3vq6p25ar", + "bc1pwc44xwq2cucep8j56yrza08yrqwhg32txqmf4zy4jkksl894lp0sp4pnmd", + "bc1phq03w5ple5ljqq4x2scghj0dhqwveuxzzz85penvlzgxgxzhf4fsynvcge", + "bc1p6vhksm9tzh4dvngquxef58vxu8a0jp90rf08ltk7dd49q9pcqkes43a8u3", + "bc1pp0dleah2cdl96435pf2y3lk6s0f9a9628dlfrp0gwauzjh04dq0q4cs9qn", + "bc1prdx75rmnj5uwvl95dvdpvx3fwgq8tr8wvnfyf8rdcrt4yaf6rr5sjgamtd", + "bc1pg8zmz770e6awev70lr8c8rruwccfja0xn336d7lx4fptj4nf76fsqpt8dh", + "bc1pggsrxl7xhtayysqnl7ekctm58t68szgjtut7da6d3ay4da4phlhqd67zps", + "bc1ps6z77c20068fj3uge3pcqafcvllgjkr28hlgahh223njzl3c8htswd0ggm", + "bc1pzsvd9kpkuhgcldmahjy9rjnnrm72sehfksmu9pdz5uex647rh3qs4wmr2z", + "bc1p0tp996hytczcavckw8xkpvyjmh968klw783p8yxyhmqeadj8u9jsnsqam6", + "bc1p58s02dysj45977vpsn3vzhedhx9w2jg2xt5hj24t0aruuzczu6as9u5wk3", + "bc1pamnedffw4gp8uvjykmp2mzr22cnmyvylt6sa47d2v45hrwpffc0s5pk0ge", + "bc1pu84856v8drpxlmuc3czwkta9zcpw4s8n4qgnjjscmgg5zmhsn33s500wfs", + "bc1pklflgrrpuw9vwa6f2st2ycj65enhcyrepxc7q7q432l69r9fq3sqc35kd9", + "bc1p5zr4hhzytncrxdg8jsdsczjhegn465ex3ul3qtthr8f7fafsuweqrgnmzz", + "bc1p8h3g7suadtxlqpcs8aekn4v0qq3kry44t0lqet3kgvn2rhpzh6hqkydnh8", + "bc1ph9v244a74up3n3rtxfmvzhg9pls5r4tuqtyzp5eqwuyxcpxy7dmq32ptu8", + "bc1p8e0lxxgrvnevxqplaf7ks3jyfz2zwm8q7ez4lql8srwjnkxxpzcseudw8h", + "bc1pvxnkzcyw42zrrjq9km8p6ff03wh4ngeankdpy94c6vr6nusdeyxs9g0e75", + "bc1pfxtg9s0a8gen58xhhk5xkwwhm33tgyaeaz5xma6849y8grq9ydtqpmvc96", + "bc1pucejmzxrmzmx6y3u7tce0ml05cv8xz7gar9pkdwvwkk5g08e7jyss2gqnx", + "bc1p53ufzad7dc6vz26nlu6r9pvwtk2p4axechc5xvr729k6upl9xg6qxdv282", + "bc1pvwfjd7av6dn24wkmfr52nhc87j20p94p47997u2eslycy57kcucqasq06t", + "bc1pndjn95nnyl3neflmm7scal0pxypjruzxgdtnurqzlspptfz6u4mqcke0r4", + "bc1pfld2uc7j5p8uu6d09x3lwxmhwgxlvlgftf6y2vkecnd04hsu93aqeglgxl", + "bc1ptvwmku0md690z3p4f7xe2u7pas8ex4m942pfkxmpnpps7qadmn0qvewzl9", + "bc1pm52nxfurj7slna0k7qln9fjvava0zy4zq0naj6a66cnwjjafk3hsw04pvc", + "bc1pyuhhugzhpr2nm4kzyk3jqthum6cv808zsvk736ml6kpmdxvml4fsgvztm5", + "bc1pj83v2m70409wufkusdj9m2awgqcmk2g66z4zw20dz2clgg7f7n5qjrgst8", + "bc1p3spdklkz5wln4lq7jl0f986wj0unkftfy5zgs5c7hluw5ttd2n8s0jadfz", + "bc1pg9ylzvjshpfg4htrv9rnxw0sdmwys2gjx65a402mxsks5lm34zus9pru2j", + "bc1peqcwd8628cjype94luwjtj5rsn5xrdy0txntnv3me58k0zw6p4rqsw7sdm", + "bc1p3v0k9y8sc3jtwegr3zk2f6gpuqsuv567zr02xfs72epfuzagqnfsaudvdd", + "bc1p7nmhh4xne2nhhghu7ahzq08eyqzezsfeyrn7j7zk6wfxty5w598quq3at4", + "bc1ph5wg6xc9dscgt3zqee653hrerk8jqdc7cv3rjyp6p8dxkzssqv8srrvlxc", + "bc1pw2vy0ckx0axqkdw93jsmpslwe3as8lveekr444w8cx3ls6uwsmgs8jd75t", + "bc1p7m3shwsj2m9d03ud0zt6h2kg8mjn0cmt27q4h7aed38lny33v6vs87hqze", + "bc1p5z0mmjwhr0tn9gf5lvmrknmfme8mhledj6gzh3k7gtzlsqhe8rws7flaej", + "bc1pz6duag8vlxh89h7venl9a7993lh84azn0ytkvjf4247v4t5l8wxs3qtsaw", + "bc1plj8zpzqgvzhr9fqxvs0nwssh8ydk7frce34t497q2ethqp6nd3ksl2h6wq", + "bc1p2k2vrkcvds7e9mwe3wdkhvedpckdknq2q72fckamz7v59dhyufws9gjnqr", + "bc1pkjqgqltl089vlvn54f3xeldlx9flr6r9p7pzvu84z98qu26hxflsfvz8v6", + "bc1pysrl6laqz39lc5m4ku9z8tpc2lgr83txw6ctdamkex52g0msxraqcl8r2h", + "bc1pv4llct5c5up5tfrpluvz4phecl3kh5mf253j5vc9cdn32kdsemwqy7chel", + "bc1p7g78ephf8wc43uerpy4hkazh2tcpus8p0vg6a8acum7k2f6tasnq0jc0xl", + "bc1pg9v5np8pnsdwhl0gf2uaxh5e6rm2p9c7llqzacfn0hwjhzmvtd8s4ycfmh", + "bc1pdawrxpnjhe0r5sjefzczcv0dc455ta0xztv8a6q9fyfz6k4qdgvsd7k3h7", + "bc1pyw6ucye7vl8vvgje3gl58734lehmk4vnaufrt879kxwhky2z2esqfugpku", + "bc1p83n5f490q5029htffcd9hzv42u2yxcenhrrpwc30gwv3h54zwyhqk323ch", + "bc1pgj4psc8zfdwcpdcwdvw9cyd5vu7w2aqhs303v6775dcvq8yj6fvqrl2j6x", + "bc1p4xyxwpx45u63kuy3ljzv5xfysy7hznkrp5xctz2c7ynqsn3szdjs8rqzlf", + "bc1ppsqpka7y0yem6w7fhac8y92jqfvd7r60n2dz7w45e3lw20qmetsshtl66n", + "bc1pvnr5dxnpew29fky8ryv8aaup7nww6te2g8g7933v0qusgp4qrarsrrs2vf", + "bc1p4e9rxkd6epja2338aylaxdpkznt88apuv2d2jc6gvwujwpysz0vqf4vz6w", + "bc1pd4xws7ydc75jmd6h2lxefz6hdquweus7qe05rt6pkvhahmw3cdgq80qq8s", + "bc1plzzzqlv9wn3yg9vvkjweslxfkc4yvf6evmz38pwqwqmvwnmny5ascn9kx4", + "bc1prxtlfpjgj4zq7gzdfyfmu3he7zfgsavhsk6pag8rldvp2fy7ttvquna6lx", + "bc1p0ea24zgt5aq86wtw0m4rkz2kgyd6lq5lzz5ezylnlf2ge2vd3jkqpwcy20", + "bc1pzxajecyhtwshkdv2vt47dqt893grzajnq2mzlje7mv5qhrl5wl2qz9tfda", + "bc1pzjl7qhydsdpe5tmqn33fuv2uf2q9dcup0adhsusfwqmrqunq7dqqakk776", + "bc1p2luhdt77as7s3drt2k8cwrr0290nphxrsrew40kc73qshtrkgjaq0wq8vq", + "bc1ppmu0kw45y5az0nk3zztsuqzunuamn6tlusfsm3knggt2x4lca3cq9xa4rw", + "bc1pq6ra3qyxhnhdt85yyek4uqssa3umvrjl6jve7llk02v9ehh2kdnq0dftms", + "bc1pxmqnnjs9fdgkurrtrp05fv82a892kzlpca07lzlxsysldhq2xc4snytjnw", + "bc1pnfnu27nxw4wkt7vkkmvsung0dmyedxrcqpqhhg84st4z4h4t6djs8yuugg", + "bc1pgsq59mm7mmx4q39a9l50pxt4cm0tty493l2zp30g3yca2m3a3agqarxyke", + "bc1papx6qwwvk5y0aetcs45ss7ulnnk5kgsylgf93n0fvt2dur8tvwksmds576", + "bc1p88pnzmtudp3hc8lc3py8vlu7dryz9heazm06tgrcyl5ql4refspsjx35h7", + "bc1pr8d2pk8q3avrlwn5wgq20j4ytflrlqnkmsqvgl462qxd8fg0770qxef0zr", + "bc1pdm25vehkn82mv5gu5endnulljfraft2ljfal2cmc58gsuttzk6fqd6k8al", + "bc1prvtmfnd6m9fxh7jgpdw8mgc8vy67k0jmh7r254r4svc3kl0jx7nqh7lu73", + "bc1p2ht5kuvmjcrcjjwlt9yj7fzkczkhz42k0fyy93g5l3q4e4gdftds3uvk40", + "bc1pe7xsjc4uaqtzlsjxcsxwfx295pmjp04fs8s5gc62q7yem5nfx07qp7ju2x", + "bc1pnz85fsj2wcpcnh5dwzz5mu7zjtkc7vf85qcavja7gjjhvc0fuukqdrze5l", + "bc1pcmvk8awc06am7smmgnypwr6xzzv5gcu4ylgrj2yzd2hrawzu6e9sqlypq3", + "bc1pn9mql75zmrc8kdy04rev7r5mls0jus77r9mr2xzkez6wr8wjc6gqkt0srn", + "bc1p7n46zzhctvfmx2ret68ye42z9p6p0y4uc349e4cmu349uh9d07wqnznmxu", + "bc1pu3q9725682n5aefh4wvl8fup4duhpznzx0ra7n39q5z9mmde8ccsvv88a7", + "bc1paln2sq65gaksyxhp7cm49qrd63r30ppur7788wqxuwtlz5aq2xdqwzjhht", + "bc1p9h9apuq6gx4u4w8xrf588mecpdkm5mr89maldt95wtul8clas6eq63sjz9", + "bc1pwpjn8vjkxhnq4etpf65aprm3a6hen28sjsq7cg78sqz8jhfese9sk4afxl", + "bc1ptqa8mzqr4z5rpfv6kwdmxa69wdc50ljkvszrnpq32njtcat3g2aqreawm0", + "bc1pu9h587extp4m2spuzr4d6hwq0uahg70ezjgqhv823xf2w99tcgtqvn66mg", + "bc1pstg7y4u6furvumann4lphtu3aduq2wsrskjxaehn3j99wyy0d4kqnzz2zr", + "bc1phlx6r32c9xu9spugefgffeyfr8gk7zmcqx28ucqe5aucl0cs5ltqnsmdun", + "bc1pxgya3u8s6tjfjtvag5yln3fvcp7tsx42pjldld7z67r302t6jhksamyvm7", + "bc1pft02ezu7qqdk04jjuc7j2wpwwr9y363c7f5slhrqv5lfrng9rmtq3wlq5z", + "bc1p4dlk9plswlvnmqmfp2f4ukkgg5ckra7lqxqhpplam4m7rurwpkkslfd9h8", + "bc1p5vs69gkm38kcc0yfz8cujl4yf57fky0h8zz4q3kx0znj5husvh9q66s7v5", + "bc1prxm5ct5rl8ykjxq67dxtrre8x5dnxlmmnasxwhnm0pnnc7wvvfaqa4wd6w", + "bc1pzfulacp3k8tmc3nqtxf6h4889z464hg0hqgv0adszk3kh38w9nvqggsgzs", + "bc1pedhn38p7mf4sc0g0k9lf49l44775yahx2pe8qcv6p2qwyvlq4wcsactmpx", + "bc1papta06evrw2egdqvjdx82v0x4uxcxsn6caml6m0up5sschcwrcjsjrr2ca", + "bc1pffuflh9czc4ssyd6ff2q2738al5yxlar2udsuna0xtuawrfunjas0h66la", + "bc1pr4knm4suzpjp86maj80uxl5amncmpvh7y5kmr6z366cfjwyh9rus2uhmwh", + "bc1p9zp80ajc6tuvmd6r9fq9d7cxzlp6x9vkkdf62fxm66m0sg93rcmqe2mhzm", + "bc1p3pmfskm2h007zhepm2gga5hcv2hs7rvp5vgnwgkzvs47r8jt2c6srtq2t5", + "bc1puerxseew5wps86edwv89ke7utevdc99yjyhqemf0r3x6d54umuwqpc4mst", + "bc1pnadvamzkyf7c2rs9za0vw3hhcr8uxkavtwqvnzw0l527tacmf4nscygpsk", + "bc1p7g8n85z5v9ttnmuyz7jk7c6jdn6tdgx4hfg4tccx64208zp6ef7qqj4xjt", + "bc1pzs74aprlul0rwra529atg98gak9jdvz8qrxz9va8we2z82sc60aqr5954r", + "bc1pfnnmfjec3swu0n50h3z9zq82c9zfax6x3w0t2455htv94xgc7f4s3ruyx8", + "bc1pafgvzsd3ttk7dq9sqcm4we0qral0d39lzm20qfwt8grzkx5v2ejq8h8t95", + "bc1ptuh36m9rpl4xny8s3zhtmdzjpsekmz7wanup6d4vqh62azf5ussq8y6uew", + "bc1pczrfrd9upwakp4cm75vd8gmjjzvwwv5cvmuhcregcq4st7f53u8qhpkca5", + "bc1p9djeke7u2td5f2q5n6qvzh5rw8jqtuxj2d8zcg45qavkvtsr27lsckz7rl", + "bc1pvr069f0tcl69d8wc9yd83ys63cmlmg7ee58psvcul63253qqnm7sefhu2k", + "bc1pe8s43k5dhytvws4gscrun3eqp70nrfyseaa99g9j4ut2err6zcmqu7d8gp", + "bc1plxshk7dvmrqsx9kusl0gey6uf3puvkchxdnhzvymawyxmftmg0lq5vf925", + "bc1p9qy84ly3jc3c4r02spldehxhajvm2cgyr4x0hpz802f77edlc3vqeyw3ft", + "bc1p6h0h40kmpsswcdv2ys4cy9fl9ffw94zjzprrftvvz0n3y95x397sukvs5j", + "bc1ps5fwcfevl7z72spht35f5wvfzw4ypqnkvx4qctpx94rw5thzzg2sgqnqwh", + "bc1peg78vdvca2g8k2eys2zm5z8nzq2tzsmw67650uumv0720cyuagdq338tvt", + "bc1pjw8fcuqx680x94hjsxx7r7vvrd5jyc3t4rszmwqx7ks5k9my52dsla5lqy", + "bc1p6u92y9ygphl3qnj02zfy7x6p99s5fky0yv82d589r0tclej4ptrs80ltyd", + "bc1p7fjc8yxcu5at6auk37m6w9pj2ral7gzdkent9kqugfzd7ke9ufeqkcxca6", + "bc1p49sfym5sk2nxrf0jmjgvc8vzkhxv9z9t0plxp69fexd8agcck3yqwq4uyc", + "bc1pulxzwax4cg3e87tlpxdglrlzswprf254jj8tllmt6j50fraesz7sud9vvv", + "bc1p2v2ylp3ndfycuqx9usjd6e5pw3r05d5m98chxe7syxz3xf388v4s4kdh6h", + "bc1ppqnhk6yftrdyszs6904jgv0r8m78ed67zdrwuf7yh0f28ku72r3qjsmdlr", + "bc1pmwjeqacw3r5jh4kvq6dzn8mq6qpx9jcj7fsshsl4r5qj5l8z4aasmaez9x", + "bc1pzmr3a2r474qx6xy69ypf4g4rsvsru654m8df8q5g3ttjfyhpnfdqs5xqh0", + "bc1phrgkhhqwc67f3rdcmz3mj9v9kgeacgz4dvdphmqtvag6renegv8q875val", + "bc1puyun4wdffwtm0nh5uqxzpgqyeygj8ztqv9fc3mx2vmeuj3rse6usqqh2dn", + "bc1phhm4c5jqxl40y93td20u37wux3t8edg90yhnq92zxw0vyzfz544sepr87q", + "bc1pysxpfmga3ww3s9htrwhu5qp0g5pyn5u53yahr38fve298e7lu5gqp5mnt2", + "bc1p88nlt5evfyzvrrnlm5xa9tyyrvmfntg7apaa37jl2pprk6p7hdrql9esng", + "bc1payqd6jprjz4kzk6tldwyy0cqvdxd026na52aem3u00upt0du3cdsp6q0f6", + "bc1pkvper0rqnwpnqysccw03zlkdd8mlqn6l2nnu7ln3qy8xe4qtp0fs4y0jdp", + "bc1pas4zdxtpg883mqvp324e0za4jjaye6tncqzhq65c7a527kjx0x3q9lx2ws", + "bc1pa6ewmavv2gzfn384ca5qf5df5ra64am27uw70cd8g758wvsjswwsmdfxeu", + "bc1p4qp478jyyv9nlvw38euvuts252pl4hf2ns4vd7ec9smjyd7zx7hqhw2ajm", + "bc1pnwdrv3vexfes2lg7pflu6tg478a8mte3vxdg90mrgvnx2p8cnajs7z4vx9", + "bc1p9ypmwdrq7nl2qkl399jc4r6vrszk9rvnvdcnpljecvh6tyn6fscs4qhx4w", + "bc1pr7mallltd8wwkcq4uuxfwrgnr493hznmqmh3de5xlfn770szjzfqqzk3uz", + "bc1pvu4mtaev862tj5ewutd6n50n6amgwvtkz5237zzjycp22th7yx4suhc7ye", + "bc1pp04av545tnqkkw0sguvq4kavamel44npkv5qyz8cxdmm7wckuhrsz5t45x", + "bc1p98ggtwsmfsn972appsfydlekqqam0pmjtm925uqfmsrmuq5740msrsaqjf", + "bc1pphdk99n3fpf7jm49audkeflfycr0urjck4tam80v2nxezjkhhyaq63rzz0", + "bc1pvuvdeu3ysdy8g6hd6uchnx46tkf3r03dptjdcgn0n3ycdqcakths5sjj7c", + "bc1pr5pjekvcxt6tn2w7qy73z9ea6r3gk8fu0h0wzatva255zmlpz9sqwtq6m7", + "bc1pukelmt4ra6k9j8tqhh29pr7p4v3ytpppjkwnm27yawenkeq4enhsc0ydgv", + "bc1pyner8q5kgu7msck4389kgmyuch8dlgr493xds39vf0mzx38slz9sm4m83j", + "bc1p7sfpsth04v56rfml2pju643tlpmwtqzud4mpwd2pnt0ay2ucghxq8r9plu", + "bc1ps486vvjgz77805cfkyz3x6qn0743k2anav2seea7naj6rjlf3k5stgqff0", + "bc1pt0jvrchjeu4ww7aru884mva2qwx2taswp0y0gk0d3zlenh2d3g2qzmfjss", + "bc1p68c0jyl43x2j9jh40pjrc8h9qczy7nnxrzsesufu2ruk4v04pt9sgzxw5r", + "bc1pm4qtylfje9mmz3dzm0alee4fnejpgukqk2f827dd2023dqvr4drsj9zz92", + "bc1pv3n524yk0swv594fze84d6vyx83a0pwdq42gvkv8ecafp8w6k0tqh9jtm4", + "bc1psjaetz3ldsxlf4q84cklrpxy6arf0yel9e9h3pyj0yf9gn6aengq5njknl", + "bc1pdq74sewd2m6uwxs20ehuhfxkrjd0m2t94e5ay74w5jw3mzax6w9sya9rvw", + "bc1pgzx0unxcz8qr7y6v34w6utp4qs5knwdwewu48tfctlljxyd4207qmw2tfj", + "bc1p25v4wkw9jadcuxgg2h6un2fw48mq9r5nmgk0ktzak85fsxk04rkslktpz7", + "bc1plzjnv2xem5qup6pgnve6rt8d40nexq2tvlr2utjy22vu00a80klqyrtwlm", + "bc1p8clhql7kzjd6rswktetkr0l2tnp50qcwvhv47qncnrefv3aru5dqdlqvj2", + "bc1pj5lur8g6rj9darzjwvt0rp0ck277pgy52ecn6jxvwyql4t86t60qw9llll", + "bc1pexlaeqsw7waydtw52saxjcxex9vuk229dcku9r9q57w2tm24hwzqlrlk73", + "bc1pnzrdct2767t86pgtnz73h6u0f0728t60dwgvy4jpqt4d89xypcps3kvr7z", + "bc1pq6hkhs6hnp9fp7zgjc9684rtf6lnx49s44c88n4yxn020mpvhvwqaaxx5d", + "bc1pphq458ehfh5geyyd68taxwca2xajqjm22agsn9vc6m379ktftf6s95qm6y", + "bc1pprfgk6vwvg73k3je7j0ymjldf7y3vhh6nxk22we7tqlm7vq06ufqu5gcg4", + "bc1px42fkwndqc0zc9hmd085aqe07v82ey4hm6y3njqmatfya4ahwsusvskult", + "bc1ptl6ksp6pkgenlctjec9uhfl6d9h7dkzl9wcw7vuxwdgvhdnhtjrsdz08nd", + "bc1p90tfdqhf4hd9lrawww4qfzzffhqsk2cmgszmap4jj3dcq2mqz0jq8m2afh", + "bc1p9qzetvw242vk8ul2pcpgf4k2dd7e7uucusye2r4phy64ld0vpuqqgka4we", + "bc1pyvvswvsng7km7cvw3y3jeqfgcyjet42kkcxdttsjz9exahslgahqxdrrmp", + "bc1ppzm4hl2dyhxhvqmpm79c3vzzc7al5qxrzf6uy6vyfdsnppvc73fquc4p07", + "bc1pq9h9r89mf2qdrta8acpsdhu2ljjmcl8nl83n4zfy6py8mk7eds6qcaf6y6", + "bc1p65u0e6dtmwk323szx580yq6wgc0v88rfc4vhacpggmpy47w5da8se4qxct", + "bc1p60zfhtg2z8g35pwde5es9r6qctpwagqnwl67zgqvtwgj89muv7rs2kqf4h", + "bc1p2ye8w5gg56v4qsstpvwpe2kqz5vth5xrhd2qdeudc58ehqqcjfjsruy2qy", + "bc1pjq9rqhk4na5paps48s9zjklu739nrhxnq8eadsujeh2vukprtcas924vql", + "bc1p9rlzy8q8ck4wulnlmdej67zwy69jrs3ada4luhja3ecct2cssngqlsqvf4", + "bc1pujyqun765y37dv74jn29hrpmxfsetn5s9kscwlq3n6hnqxmkutfsnd3rwq", + "bc1pvu5rrw7gkze5us2k27vvyhk6rc37sfsch596nvvjxahuagz3y45qef2aen", + "bc1p3ndkqje3hqzd8hr93mex9uy4dz06fssklmq8zddx67r3vslvnvkqdjp2p3", + "bc1p7eju6z308gqqxa666gawdqr2pyrpvd3jgdlxwesesnq747cajs3slh5ngm", + "bc1pzeseltwem8m7cprnquhqalgg00xc7k0mydyc8gtvejhrf7fj7uhqng7h9q", + "bc1ppzcsn3mmz5zqqfldacfyx7smzf6t2qe0n6tdvsclwdr5hqfrak9qc8m8me", + "bc1p0xazd7hsvcsl0hxjah26p3dmqxyvl3ere5g93x3t8t0rg659jrssuydcc2", + "bc1pa40fa6hfsl6khrdh470x9f0lah2s60027kv602dxvdq4edvacxlqg26zf5", + "bc1pzw0rtad0hj05hswgzp66u5tjdnjgp6j00lq9su4c73ala4jn9eqqtrsf93", + "bc1pz8nymlwg4wlj935g70w7g5z3tesyg7n3hq52wrx6sh598rfcyj4ssdlv8x", + "bc1pjt24nzqkce0aaw5gkuluu34c3zqasldac0jgx6uzylgryuvcgnaquhsv22", + "bc1pcy75qcc8yfggy7eet4u8thu04x7wthtzcmkxvpfedclplgzm5ejs9vyzuv", + "bc1pvdngh54yf7j7z2kwf8y74vx57qtmh5yuwptjwd7vgv6hencqu8gs3amzsm", + "bc1prhwml40g758tcmkh84ulhzjrufd0pcwggdte8gcrfkp69uyv2czs8jecwf", + "bc1pdja9lms90lmyxs0z0m2s8480us5f96hs4xhq98nqxj0ea87rnusswrzeqy", + "bc1pdhjc0mmg3svd3hphyq4a48a4p5uy24tzerhv3yuduj76wvzd6wzs50xp74", + "bc1pv2tuvj9sdujpl4aauhxh3q8x4d0jmgzp06htla0600a3a3whracqcj5nj8", + "bc1pucn6lqry6g4eg9s3dxejk348jznjptj3v02pmgv7fug4lxzv5khseqjcht", + "bc1puzgnqjfmtzvdmynqg2fag245z3q7z3ys4ravu7rrmhpcjhfty9tq9nfj8c", + "bc1pynt2gafunmzy2er9rsqjcenddqa4xqukxkcwykemma3mapwqa8yqttgek6", + "bc1pm05ujqp43pkf6ekyjnqz96rghf7chjd3n6kdn43gf0dnqcqypvws50ajlj", + "bc1p3cafqfls4l4qfettw4jnzjauntxtap0r66az5246j339n8skkwjqawfh9p", + "bc1p0m57kvl64dlgd7f7pdq0r8tvzrmu2jj98fl5vgmxg4jfafkkk4qs9wc5ax", + "bc1pu0n2uftrym43n7wsem340y3lhx27vl8ztvye30s8hg3av4xr548qhj2qka", + "bc1ptcg6at3kcnqzcfp7pxw9qrdhc6hn79zn6hqlkz6u0scdga3ndwespg3cn5", + "bc1p99ydr5h373qgmqad0cr6xdyznu7c5wnj7hfyrvzk8z38xhkxzglsk6jxn3", + "bc1pm99dvfzwmek6ghyss0g30k7pske8xawrx8u4r5tj36v6kz56dwlsl4wka4", + "bc1pnn743qv5jdxrl2wyrjktx2r8ea2yv09wjwj8rx5xj0m634t4nr9qlvgyl7", + "bc1p2mtw4qnkk2zj0vjpr47hmgnsuy9y3kd37zvyglhfu7r9m3hh4wys9h076m", + "bc1pm3pa2aq5xpnv6c9x9jrkt2gs4llm4qqaj8j49tzhqckx4wldv4rsst6zk5", + "bc1p584kjnmfm2tn4hv839gy0609pq8humg9alcgnzh40eztexm98j5qwzutnr", + "bc1p0aws9qv0dvf3d2t6ajm0ve6lqt4y66wtu9xtfe3sk9jppc53v8nsl60h7y", + "bc1ptwzxtzqsga200cva29dfrnsrud56u5hvsfahxut86aseauxjkvzq58petp", + "bc1p0x70k8xjfz4rdwxx7qvgvjmzula8h3jcm6twffua97ygqqu80ras3ptlvj", + "bc1pnyetw3wqc88f74vg40dsguuewgaslc5zqhw3pgx3qqzws9flmfmqvjr9r7", + "bc1pzutrmlpgj0gqme4vcy9za2rzrn35ma8y0kl9fhtan4xwswkafznss7jfa9", + "bc1p54ulclxwq2py0ehsvec02s3v743ze4y2my8epcvz5zzs949d06rqkw4dc8", + "bc1p7fyxptj4u4rh2lp85zk95uqs8uwq4m8kqyvcu6n94qj68umsd4jsnfuvwe", + "bc1pzd0sqeyhw67z8guxcv834r62g76hsjcnzhrztdyh5cjued6934mqgj730p", + "bc1pfwwjhxemy7m2q9gt7qk7fdwtzrq8llfr6claqkcwd7lrcg8fnv9q9kl702", + "bc1ppt3lqw4wecn9lyd57vf5tge6a2g04ke7dyantmywsfafgk35qyzq6t9gt7", + "bc1pvs63cafehn8846zxwxzg2hs0pvyqau2xdsj8wz57k3j790syvr9q9cev7u", + "bc1pm00c05lamzuqxtp0muz8jjkvfu96fl5rwp0ht9m9dwu33swtagdq9wwv97", + "bc1p2cud49kpp94hk2lu7nrkvudl296qxd4g283xu2m03dp9j8jpu38slsee5y", + "bc1pvcntynng6c7jtr22rmnxtswul7xx2u3um7vf4q5gaenmnmw42ersxlzxh8", + "bc1p7sla83lmdefsusj6qr30yl539msp750jvh7xsmwdfcazjv2j4cpsc7get7", + "bc1p52plr7tmypmptmmvctqdstu3t66tprrq9g3dc6fnw69d3vgvaa4skf78vz", + "bc1pz0jlt7lwlan6jg4h6ayk8udv6nsvm46lyhqkrdtwxf8xm7s0wg8sr6qlw7", + "bc1pu032fxemrnsaglqpmy0rd3ypt8txph5j86r6sly7kt2yy5ckln8s0fqnek", + "bc1psce02hypz0j45ncje5t7k3hcnepzkfgr0n4e03suuqzduc22w0uqnf9r6x", + "bc1ps8q5r8kjekmep0aynw8yqn8vwklw8ef8krcgz2y6v8q329rnxuqqrymk2g", + "bc1p6dlmugnh9nxpk46z2e5tgyms8jp280szcxwaehcccpp3u4jq6p7shj69u3", + "bc1pq4dlqd38mc7hlfu0zh5dk5ppxfsw40eu58ysgpa200utcjph37tquru67x", + "bc1pvkzk283dyhq36t8q6jq32uyurlxp26gtuy84j3ygardckut4q02qctzk45", + "bc1p47v9lptq6g6jhp8qcfgeqjrp6xyvc532sl065n5ufcdtvslnc80sdfjssn", + "bc1p2g0qvtjvr5wqr075hwa6u653m74j0ppukt04qalf0je4n0gfusms2g8xuf", + "bc1p2mvhd7lq3zqcvwwlrmexd34kxsa3e9pk7lsm0se489nv8clfcz6scu5sqv", + "bc1puerfey9gryjr9fer3pa3ra8nw6fz82tk8g0x3pkex63rhu5zkrjqukchg9", + "bc1pyxeug9k85vp5j4vgfuutywgxcvqsud95dhrhltafmt8fhlg5h8mqau83pl", + "bc1pe54kkclgjx70gl7qcj4axc8f9uqjc4x5rh6t49qx7njzxzmplaxskhkukl", + "bc1p5xrgjglwk89v2yznn4xgu3wsur4hvafh5krhjes3rnrhd899qg7qn5yl6m", + "bc1prhz6paex22xc2mmjgv8y5jzjlg3hej55fr7qssvgfpa0m7a8n8vqxv3vkw", + "bc1pm8a02zn698zxp2hnjjuxvd5775dg9unsf45dvl8q8w54xx3rr02qha2pw3", + "bc1p8q7p9q2cagfv7rj633eu3hkrwq3n3e4ftjnh8cjdvs3rhkdxaahscelu3e", + "bc1p797ehgrhx0llnmd34n5yawezkrqe8wnus84y95jlsfcyqdausu6szn3wdk", + "bc1p454frq7pvf7qgsynzkafcwt57wfsr0e0sap3prrdce0va9z55v0qclnw9r", + "bc1pstcdyg99832vtgdxqrfgj374v6p95jpjur40ma06zjk3e3krpjwq5j3xq7", + "bc1ppqltesxs8n6lsufqzy0960j6hp8agd3fhf7z0rhkev5kxet5ktssz4v3km", + "bc1pz96v07d6mcacmyxu7hm7cagxss8hqp0wvx9umzhy7rjn6j5n6mysv7udvg", + "bc1pv67far7ualw9q4ud8spqfd4set7ez6lu65a999v7rrzje0n30nnqzvxeqw", + "bc1pr4m3kw4ytqcw8zfll3fn64w08ffh7lvl626fkn6tz96pmjup36esqeyvuh", + "bc1p99662qgx63tuvec6dgh9sucsg455v2rls32ft90zzd5nckz6tr0s2hcgm2", + "bc1pvgzjgx54ey3ex0jm26kl0jvmyaaemlyltrm2qhpc32hxkkd5d2sqlr39ch", + "bc1p0u4cdue8hg0f7es23259c55amw6m4pn46g4e7a0ux6mxpjz9ss0sc52fdw", + "bc1p6d5t6kgy0qr2xn0s7j5zl20tjlhwghs67p3jp8vqgrfsmjavtsnq7eyjnj", + "bc1pywm700pydkckkcf20tefmamz662rahymhkkq2k7l2ju3rd4y4yyqnvfc5r", + "bc1p6jfg8rq573me602arsjkdqmxz59scu2yl2qnx4cmjj22yhs6qm5q339278", + "bc1pgqa6am73a8dj3ufj8vdfez80fq9llkh6gacuzuw2xu98zwzmjk5sfs2lcm", + "bc1p3vuaak2s4gjx996samrsfpav4yeecx9p64hrqu8f24pt2gycdjhsjq2vmj", + "bc1pyr9aj0k8ushfrcz8ymeqs848tlh87ww927yqz3taac2me8jjzupqz9vz4x", + "bc1pa7uj77eszv7hdl7lzeretnp45z7ycuempzv9exqrs2vvq4zyg9tqfu80qv", + "bc1pl6w0p0f80qn7szewl5p9asktqsdtxfhu3rw0c3fasejqpcpzcf5q3ucu5f", + "bc1penywgtzmk3af0npy08exwwp3hzf0zv96q3hwpa29xs4dhgmn5t8qy0pruv", + "bc1pc3cyzdnhm3fd2nhcws8j3ggk9hjw3cxlzfrk0dx2ksf3xmrnz6ysqjm6s6", + "bc1plcmsngretf0mkwju97yh5077jzvl87dpga356ezm9txhc4lsq57qy6hc6m", + "bc1p0e0psxv5cyk4cvufzhtvamnwvmcayuq9e0jg5rc76p0vlnzjhmuqnxkj6g", + "bc1p9tvd85rpq50v9uk6tstulne8gqv42nwe27xwzg86hvlh6gw2fy4sun756s", + "bc1p6adwtd6hhyvr0fgmwrynvjk4x7mzp9jem34tqsfd80pahdvs7pjs53r0hq", + "bc1pa08pkvzn75jntfvxnfv8dv7yrg22a8xjcepxa32tmsgz2fl462ds8hsgv7", + "bc1pfdzkz2jh5v83w8mpn3lw98lepuukna0xrr4cqx5flm9rmvrwqw0sfefc3k", + "bc1pn4hu7c99ftsxuadcath8q0ef8js2ftwu9jw02ftqz6e6rls5r3fqkdmvtq", + "bc1p3v6yrd2v95u86cm7zz0hhryq4sc0a3227twlyynrz2zlswl0ukuqp7nwl9", + "bc1ppyxj4pyja87g42h6t9fhftzaktxcejg8fjaw887ayl9svf6z669qdmrfp7", + "bc1p6pqe4w9gw6ufry3htqaqt7jllfrjj6e24vtyshdjz39qxeuye5hqmccztv", + "bc1psx3syq2ztfj4e2w5qeaas5xggl9jgd0ptrer8hm9h4xsf4r50ajsrl69gj", + "bc1p2fqh4wgptfxyuc25s3w8tqjdxtlmz57jrpdjrta96jhla8allf2qkvv4fh", + "bc1pf9nq7dq9r6m5pz54sswwvmg5lq2q97yhy66pgempzywnlmg46g4q08tfwz", + "bc1pckrhyn0z3uedfv55k06xr3fkml3nf9tknqss4kaxt7w9pavnk48sl498l9", + "bc1pnm4laucrsm3sd84a7trx0czvq5pw2wkn2nlue9d83gf5ujl0ws3sqx9xxj", + "bc1pyxtxnrs49tasz2efyvsslygf37326jxhmla59wedkw53uymfqvlqluzc8m", + "bc1pcdck30w7s7fskgvzv3h6hrkye29ljj79zk0wya6ka9rg40z5qsjqmkjz47", + "bc1p4kj8y8wnfn2eryfyqp5mvrxxty3ggnplnj684ew2hh2d499an3esyvu4wk", + "bc1ptxfuq8cs460ktr4xjtnsjdzpzaqxupnvmy5t8c226z66ff3a0fuq5mc607", + "bc1pvs55pn6qp7xkjjyqhwyrsfguq84acqayuygtxup5y49ud2ly5n8sqfaryv", + "bc1pg0w6fdnetjeaszv6w88c7rkwhpsjdhjj6uy08wp9l8gljnwf3d9sxc8ktz", + "bc1pzjnlwkzcpwpk9y2vw6873qqtyk7ewfm528qpwthhh5xrkc5tcwnswg3mc0", + "bc1pk0dc3z0zk4sgtu5ur56g4wntnlyneldl2wkzr0ejke4gy9uxzw3qdqc9ux", + "bc1puw5y6vnrql5emlt5kushtlazrmdv832awf366z76ssa003mey5ysngv692", + "bc1ph49xr79grp7767ackn58f39xzegglp2rc5auqqxew6fn5xnc0gps6j3zr5", + "bc1pvrtvcn8yg2udaxhluy9vs7anlshdpwddag8n6r7fjfw2xfwf53sqqg9ztj", + "bc1p4dd3qt4kchyj9sq0m2e25qqdnu6p6pxj9z4ldc0w3c63cf02wfes2q9tzd", + "bc1phc99ke2zpxme024ypyexwx6vdf69sdtg2f0kh87h76hmm2fr2ytqlxg66c", + "bc1pk926tctdd3hkzdrkna7d0h0g7cpq09plnscdhsff35f9y3nkrf6qxn5syz", + "bc1plp3700kxhemr53njwgpdeeswc3uxmtszftuv3etpp9mmvz37utrsfkzagx", + "bc1pqdq5qsk3z0q6lu0g0hd3whxjr30nkm8wpz5l9fnmj3aphhx9qjzqj3c5ca", + "bc1pm6kpus962fuj8vs4vmapduzpq0a883lmep8y0f5088yj0tsh5cmsfu39vk", + "bc1phc687g300jmxf7zuv3mqhy3u2j4f67379766k0jfk92mu60dagvqslzk93", + "bc1pkz4283nasgx65vlw96nc29wxsrd99nfu4k7a46u3pzvzkrwtp5lsnh3ee6", + "bc1pvafvsad3vspnujp2rqu8fze0nfsnejpsavu58f99wqn332q5a9hsgj4dwz", + "bc1p69pa0asa63vqtn2xcaf8spgd82sn38djdx6gyvkxg8n64hsvugpsaf7zqf", + "bc1p7ddd282rzt0q6kzcen4gcdannwgm8v7s6j4p5qd273s3fh652gmqq7qx4p", + "bc1p8np7evhucpu3jd3n70sgg8lag0mxjva03jatykdd5mpnfuyqfuuqes79vc", + "bc1pxwmjlgsx2r04qfwffzce5cmplz7kqvk7gpe8c22qn85w0a2qlchsljz7rt", + "bc1pa26jzgj5a66urstksaamk6ehrhw699n6gv43sv0u3v6zpr4llwhsv5kkt8", + "bc1pvatjk0mxjwqvunaterpts2xfg599kkrdza0k3q6m7m0xmek4j84qwpnwpf", + "bc1plk4f2xwa7q7sgsw3jttpdn7vzyk52xy5syl8rjm4d9l902rumyeqklqq3u", + "bc1pxnh46j4pdaq7gt8wwggtsm0x5ngrdwrewa36jp4dc20xucuj42vshn5j5r", + "bc1p8zv8k98a3lmh27jgsmvz6x9k38z2pwgv5dxtchkff5ht3fuunevqj2pqgf", + "bc1pxap7mtfmve66zj6v26p4cnpftsu3gmvmdzgjpksvfrrjvdc9gn0qvejwq7", + "bc1p8x6p2akp4cn4gcxgc4gxqhjk3pg3vlezqxp3rvq4vy2qvzmp72cqru4sqg", + "bc1p8dnd2gsz99s38mlffmelgg550e8ez2k4ap0r0s87jnsasf2wlz2schg5s7", + "bc1pjhdz8mv4q8gjnp6f5ajpkf9ghur576xj53dn7t4tuqyvdldzzcnshnyp46", + "bc1pyl2e4amlvhmvykckt25pxyefm8xew66l2q5f7drz22wktjxmpm4sjr4c9h", + "bc1pnn6ppplhksp6pqut2ygctg2wdc9mqtyxr79ws32fjjxxzhqx4kvswshm4k", + "bc1ppwpc84hzy9gsgcds9gcusaa7z95vyr9jrzhekqymr69yg6myg9yq3wfsfz", + "bc1ptdxgxelf36mnvhjd83nxqy2jp9e5und7npnwv0q8xrvu5skt6zuqeq0chu", + "bc1ps6u6sst42hwv59xrcslsr32ypnpn7sjm88ww5c2vpcsyehe3m5gqe336xn", + "bc1pa56wv8gajuy0tnyzfw79ugt770lphaysa854rv96js8v59lfx4mshjll82", + "bc1pdf6c4tk6mt5p7x9x6rth4y74f5tnh02gs64culzj79hshv05f4dqtltjs8", + "bc1pdm40958tg0rq8qzmql0kh4tw7mmkmtx5xdpaa4ngc920rcfz94dq3zmu7q", + "bc1pzswm9h2rfclvlxr4297tek8dey5tzzxsqsht9wnvsczys9p4an4qxy002x", + "bc1pys5mq9jr6uy74j9j20tdk3nqxwckakrpl5gxsrddka58365c2gusyy9vuq", + "bc1plfrg6u93ajv7yjtr5aru8n02jh8fadzh79rpd05vfzkz3lqlwsmsywuy0j", + "bc1p3sgcq9e39vycs3j28fj4u8ukdvsy2sexq6tuvu4hdtmyqrvg454svkswgz", + "bc1p5jjarqcmz9fkpl3pyr5ghdjnk39zh6wlmndfavxz7jvusvk5gtqq9leu8f", + "bc1ppqcspnvhurwqj3dyrxxzj832y5hgev9kl0dqpllcuhsjy4ph3dvs36j378", + "bc1p738rpk9ny4qfgctj3mlcjlpuhmksqtxsh9g6srfkkq6akshz5cxq5rncfp", + "bc1pzsqa736mvdsmu3tcwquqd6r04vsrsq9f9yqcyv0gka6k2hmqnggsf2u5rv", + "bc1pjlt7j2th90q9qjwtlhz3grcw5cz724zdxfzyeqr2hdwvzr3msgqs2445wj", + "bc1pa06dawzadc347q93gry7fcyqce7zh29v2ewd0xpc759c8rv375csx8shmn", + "bc1px877phmzherguj4ea7d25t8u2t7ku0qg2fl7rfugat04vgrn8pysux8g3a", + "bc1pcazae20waze5d9cfdfd4qpanmjhkk4k92zcrawsckp7h39jfdd8qe448az", + "bc1pxn6ue5mcntuv40whgdjhk4h6vzjxhslvp73nzfw2k3h7h42zedestvu0kq", + "bc1pay3vkk6cez75unfdfgzptqtyu35ytmvsqujkc5pjsujx0lvquykqsue9j2", + "bc1pdldmg02mr449rlc0vmhkz5dpevz4t2qcvqth47qs4mxzvzv4sqnqk83t4c", + "bc1puweh0eh2umrehhmzta8wlxqwuht5eq6p69gmuwk6zlkj59rh7c8sqf0dpy", + "bc1prvk4zf8gm73ave5um2k8nlf4vq5t4fa6g3g8tlnj85k3w2g8m0pq8ulzg6", + "bc1p88g3tjakhpas4hvhsc646a72zw8jqfkwqlyk593dfxlh55lgfpxqfnw7um", + "bc1p80kypsl93zc3c96dw2lf0323p96nu7gykfxzsesxcwwaxlealgws3a50kq", + "bc1phmc334c88ujsxgd9feanys89lr3e7wf62xwus9gklay4dehjfuxqls48cg", + "bc1pyew479vvtxspwmpe9tt3ppqdyzvjl8h4fl7jfe9qt3pdcyzr6u8q7dc9ff", + "bc1pdrezvsjedg48uzpu706ml9dpuqc5hm4cclslmcw95r3hd0tyve5sxpkjj4", + "bc1prcyswqse0uf0pqam3ulklg6fpfjfuwksvl86yuyutwvhr2wutrfs0296y2", + "bc1pxqj6hhvd053lg08jnz8z0z9zv3h2uhy3s52zuyflh08tpjzwwtuqe3pa3r", + "bc1pt4wwz7xkenfga9shvr77l8v7mn9tfawkdu9dcyyq3q3wduansnmstnk59t", + "bc1pns8pl94nc5sk0h6wqme5th52kzmz9mwvu9xlwseqlvcqq7rczcmqf02qzq", + "bc1p8ettehsc7sadyxcg5uvy09hm3rs7v85u9fu0qcmnhmlghpnchk0slafv7d", + "bc1pl66sd7fa6qc003aexqlzl4qggckhdffgkgcze5z4ulsqa6sfrzwsmqjm4y", + "bc1pyr6ec33zymagp33altvrwk029xvzlttdf058prtx7kt0g52c8r7qtsl3dy", + "bc1pdzcpkpfhggp4hstv6rgh9rxylhdglw2c83ect2ssdgt39wztalcsyvk7nq", + "bc1pnnsw7s7jlj7qut3ntc3t0ay5hpt8agkymvyt5s0un0u8fn2f3c8qz3tlg6", + "bc1pjtcpvv23p3fw7fphwlyyydyxv4f3z2wl5tn0l4et4jwlqhcy0puqwpnjah", + "bc1pgm4v3lt8s5vf3d6tfp32z7srl0kdsh8jvsv3hlqzkgyazd3cx5psuywsx6", + "bc1pc5d4eys7kgqnuehd0p9knms3xrl55vztfd9rnd8hwc3q73nvuenqld06za", + "bc1pypxlgezp8pfwkcn8gjpp70395e42ymc6cta7g35qkxzc9jwwtc4qn24asz", + "bc1pvtvg359vm7wv6g3yqzn9ucs6kuwursn5my92ewt5fwq0rqksldks9alfqa", + "bc1pe0jhjmtm3j2yud0gv48vgu754qdrjls72taxda6nm7j8g5d657hqjlppqd", + "bc1p20pyuatmgn4nd22cwl553vwym3wtnpp6kc6xyk9ls50vf5sh8u6sfe3rsy", + "bc1pjlesqeu33c84lycstjpk7evcuhkjcngyaluq0ej4v5zwj3mleqesvkkypl", + "bc1p4txyr42km4mjju4y36xhn4le4ls4hwrqmavawds0rx5xzve9kuusdj34k9", + "bc1ps3zdhw3gdvzytwxyp65nkraa5cwjxfhc2rnf9ht4hngkxt0l9aas8ec6gf", + "bc1p25gtzx9m80ner59qx5cnnv9vunp6wy8zkak2m7qmy5ga3sq928yql60p58", + "bc1pm3sw5rrkf4zxgm4n2j5m9234lydy57vaxkk9n2e8npn3gy4xe4usel5rf3", + "bc1pnuaxkymdjejkpgp9f9nasawy70u55e9x654vcdc04ruuxey85w7s4xuydh", + "bc1pjweaw0kt3h9casktjevyg5wr8cycsz2x7s5p0ppyasnexz3jfanskf6w9r", + "bc1pdalyerx6dspn59efd25mz48wsc4nuec7wqhfvx5hmveq5ylsv5lqr63svw", + "bc1pjff4dwkkpzn2nf5jhmqwdkj63kzrfjrsh9l889l2n02za9rnmd4svluu7f", + "bc1prmtdyp9n4cgz66247zwm96265k3lszvlf9kkk9kc575a2zyssq6s60rnaa", + "bc1p8326835rpqy7v66z9pgxxw7uzg5kemn8tf4t6tdlarp3ycg6r69q7mcmgg", + "bc1pjw296r8l6dlg9cwxwduw9ug85vyfscqpmd9s6q25jy0cxa830j7q73re9a", + "bc1p24z9svd7hpnmhmfr9cv4dtrgrt6np9ngvz65d897v4wzwmgxfuasestk02", + "bc1p8w3gnyzza6z0ypghywd3am5p2vmxfd60as9xsvrd9zxn0cvyfpnswnkqmu", + "bc1p3885kxmf60m7f5kctw4tq6p3d4ff8cm2fgkk7ad9lzsazsw58ptqenvxt5", + "bc1p6z7szac8zn2cqxqdq5z2x7dtu5ey3hp39zek0zc7ljla0jfkf4kqwschs4", + "bc1paf0w0ehqw5wwutxukpp9ltp0xe263ytyjf8raw899mldgu9cyjks9x79zw", + "bc1p46j8jfkey8mcfvlrl6fg8gfaygvdvfv89sphsytp39el6edk0jqsu6sk9p", + "bc1p9drv8nwg2mn0hdq5uk40vjx29zg98lj4yl37ted5dwh6qetlvh7qkwe3pw", + "bc1p6qaxrrpxjk2qls9tejuxaak8k0cfcczs7q6x09zwep57xu0u3rsqpawv9m", + "bc1pm5eslhxrc8qpsdq8edlrejkf5g0rxht4pcv5938l575r65f6x5nqks9kcc", + "bc1pcgrajphpya0xdx205m5mhwp69crn6hr3djnd0ttcda27268mu6hqkp3jxg", + "bc1pw7tmwvsavzewu2dwg4t5artqtfa4heffyvk6asyxv9ced7gfjlhqm0k3tz", + "bc1p297g8fdgj3hfduys5r8c7wkjwskmecpgszqqz5cdkv75649qxr5qcx7l0t", + "bc1pymadq3zmf7n8k44msjyt9k9l74jy89wg6zj6gxqktc5c36qqksuqay03el", + "bc1pgv46jehs9tlsvhxfzugy6yhv60vtgttqhg4n4kjtr96gn40pcdpqc2apfe", + "bc1p77hdcemwkdsmshadfftxkxj5n5jphav39rdtaj6k55mshwatnspqp0z4gf", + "bc1pkr4rnt347s7dtwp2ntee8w7k64k049rwk3qz9eu3judh3vs562hskglrnn", + "bc1pwdccfs6la2u2fgjyrjj0ym842l0f8ga6vtvn6nra0gkzv6vrwneqv2xsvg", + "bc1pw6ksykdf9kv22mvkgafc3lenwjz7wl98c76vfx2y5vu203q9aknsdj7rw5", + "bc1pxu39j67xvhad26y8gfq4kwvynpp2k5ga33mcn43da2hgxw5gwefqw4zj2u", + "bc1pw5qj47cza90gv5fj4scks2cu4xe3tv6nejqxnetkxxvn7jqfjpys9xsdpj", + "bc1pj2fahw30cck48smaq4nlpf8n6026p4gl2cvrs2s74sa0npuszsysfy49q4", + "bc1p3kxtnv4vmvqh9wc6ylx884ttyjradgq5zgt4m4rse3gw6kayqwhq2p0g7z", + "bc1ppcftkwd5s9cwu759nveafjepfxyu7mzur00cn3ad0t0kk8q73flq0dvgzr", + "bc1p2l258uarresuxelpweqy8a9ucmeffehejzkq3qcp8ar35f7qcs5sykcg0t", + "bc1ptdhlv8tp9063kzdjustmv5c06ntedus33pa27u0m2gqn29her6ms5kct2s", + "bc1pec5356tsqkcqyzl6ervfqvhey8kf0yrc5n3g6f2htma58vues9ssyx3dav", + "bc1p5cu3me5wycxg07pcx0kn94u3f2ht0cssjm093s5dch2rec0r7hcq4n45qu", + "bc1psjqrr3kaaqk06hnyfwq8kwl4ra3fwhm4v6sylpg7uj358aj0u9pqen0flq", + "bc1pudsxk5y8aggt9ft7vymqp3c2kt96kef9ep5j3kx35v5d7d4cczgq26t704", + "bc1pax8qxt7gsl20ml3sq3rlpcz8mx43zg2m4dsvwp20x67a0e34yyxs47ejtp", + "bc1pyxjy3t8vvgy3xlkf5yfkzgdx8rkjjtf7lp3zlky5yu22qmns8jps3kr7j4", + "bc1puaf37slxfxfs35ye04zm69ylk534adder37xlt922cy64jd354psc6g78u", + "bc1paepmgkm92j799hgyqjmnp5gc6kpquqxr6fkyeejryvafzpuy9nzsrqmg0p", + "bc1p9h4zygr04ej37s7znpapsyxy4jxe5ul3eara03wecz5fhm9xpqas99hsju", + "bc1prhd9fp7xahmsfcz0stj4u09x5f9wl7cvh0hap69dhacqc6p9lnhqeyjj7a", + "bc1p9k4qyh9wjtghsrfr8f3l6q0tzvsv4604mysrkz7xvtk360mysh2s0tdu7p", + "bc1pc9memtrreq2aekm0zevxk2q5jksedy7xn0u9gfmqqgn4zkl96z6saqrq86", + "bc1pe0a6xwdj3rgucqd2xf4nqtq2xw2rehzvw9rgar02t9kw46jgzees6sdylm", + "bc1pdwuc677vtwx4nk8egeum5jre37pfxkvv4pywx2xadlpmh60snfwqr7hf6m", + "bc1p0anj752lauj5hjtqpfn2wj7j5u2y8ny4pmgrnw38apej9ssd3x7qlvl7s9", + "bc1ppyn044regh0a9q3lratz7tf5luhxz6es9p65wsaczl5r8lxf8ccqrnsrw9", + "bc1pz9afz3jw257ml0hl0jgr6z4jycqmzwjh98z7fnq7l82j942q66mqe9al7s", + "bc1pmt95p6lh8x7vg2t0r0p5x0y6axav5zejq2v39ypj9pfd3wmpjemsck0ycx", + "bc1pdndqvvt7tvnnhvplt4plj6h5zgzk07f4rke9pvep5gcleqjdwn9s8u4e0l", + "bc1paz2zpl0j8xgk8na89dzvj6tu204v8hxfz3pe9d88mhw54wcl6zcstzlenv", + "bc1p4fz7qm480jalze2cgnjccaq2z60frhrpzv0gwd5galsxrqtcrpgqnltpwx", + "bc1p7k77gmemswkcuuufkcmxkh43vtwvneqauztx99m4fuvrknzca50s370dqm", + "bc1pkxy2yy0lxecud5cwk3840e78a0nl9zpqangttmrugjklkfqye42stvxvep", + "bc1p4rx3djf4n07e6pgudh28r7tcwp50l2rdtunvyqwl4k6x4nzsnsvs7fjvtf", + "bc1pc9gkslr497v88r2jachm6sh94jl06veu5m6sls0t7gs6anu623yqs3hp7e", + "bc1pt383r4wst62q8xaccs6hr93s6l7jhasp3kf2dnly65ucmy5jre2q0lhnhg", + "bc1p4w95whf9pvueszxvk2gcgmqrmx048dgaegafmlxfhz3tf9qmf6rqsz5yfu", + "bc1pjqzrzeud4spxg7u8w6jymwt6uct0mwz2sz2h3f3v27fmnwlsk36qecfky3", + "bc1p9q96f835tfpha2a9lndfqyhpj6znjuguy9wp434l3n7kmy6nrnaq9k5pf8", + "bc1pjajpyfjgncxksxj0960kpswjk5vszymk0x5y89kddyfgakr8yfdqy34jjj", + "bc1pjm0u3k4dtyv3xkddda503pauzu9rnkgsr9ra44rpfe3anj5xxxesvu4uqp", + "bc1pf4axn598ywen7k5thukfcjdxa0u0rmunlj2p22c6pvyhagetjy6q2m572u", + "bc1pjzm6v97xwkq24gcmqg83jl77ntc93zmrktu3gupdclz5fu02sq2s68wlqj", + "bc1pnngjwarkc2umycz7v46p7efxtw7wx3qk4uvrwk80vt9fyu5r6h2saltvke", + "bc1pnggncxjwmgtzwprwf3lm4qsjtthsnntqw6nsg5k5nawlazqrc4cqnshfqp", + "bc1p9zphzk4zhun3kvdl2ern9wpdm27g8ww7n0hwcjrh9y7ta60ezvjqvuf47y", + "bc1p3957445czsr2rycapf0y8hu9d823g6laauwa2henv8cu2h5fgy2sphtclz", + "bc1psxmvzyslpy98ws4xcu227sezk0v27ck5tp2jrv4kc72aq4lq592qvuq479", + "bc1pygc9j8qppvvrqwukfd46mqdy0qhkdsxqpzee949rk832kf7a3ljq526ehk", + "bc1pvddnshuclt7uxvqdrqrgdechu4e75rq9y7g4ux4wy5vwfz3m983sdykn24", + "bc1p0fh3nngfn7l2te33tarpq5kerwjvatc7qc7xjmwfsdzu7qh4dynqmkmrl2", + "bc1pfdfag7nkkwz65mdcst0tjyn6g6lxjrw5wyg86zp8mn9pgpv5fevsgmfg2y", + "bc1py76e7jw58y8eka6253tskwjah6qy6cmwev6j0klhus2h0mtg7qnq4h46we", + "bc1pjtwe8ztf0tvs5hqwrchxrzsjpa5d3dclh9qu09pgm2q6mmkrmngq4hfc5a", + "bc1p8wdwjfa3hqrmzns5s9teaa66pk8pl0ld5a287frah9rganace36su87zt6", + "bc1ptlk0kwkd0t6x4y6d0vp7jc2wjec7wzd6l2twh0w8xht0h8fw680skfzydk", + "bc1psc2zs5076ft88a5w2rfeqed2l9cnyxk9msvxvwq7tq7ln5g894hqe5c4s5", + "bc1pdfxfjukwx5ch00hstfpzm7n45zgl9xj0u230vf77ypqrkplaymssethrm7", + "bc1p5auhjhwjl33fj97l9msz86xkz85hz5uax64nu752pwn0t3f0se4sdpeh87", + "bc1p7zzlusw888yaj2a3km5s6q3nacksjy8awc5ynl5we4dgqhcrgsxqvats65", + "bc1pwnkwayqek3txsu3nzrn6wlv7xmy7kvcjg9qdxf57c248y0rxlpgslwz7jl", + "bc1p20pfra09hcksjy5ky338vw8hjw0g8wxgzfzrncsc25pajt3x97aqcjp0se", + "bc1pjqua9afj3ce2llc8a62qh02yq8y80kv0klq0r9v9sv5587x56ynqs04xzr", + "bc1pfm2pkfrtznzr0rez0v6vdgzfujnp5qsj2tp8gp6q8032mzhm3saqpy4ydu", + "bc1pddppfv7n98a3cs4hdx34scmktgw4df5zcd2dhrugrhanth2zp78qxsgc54", + "bc1pgeza6djfjsjagjzqcgucnnqcn8y2unduuse92du63kgqyghglxnsqysklg", + "bc1pdf0r6lg3ulktv8euk8hppsdwzv2vnpfwl93m3f40xs865kafgulq96cm9a", + "bc1pdhfq70ramyt3uj2hpn7ty6t80ppgh6kmd7k027j9n9ccdxahzuqsa8ywd5", + "bc1pu8h3qj7j877jlv2s0ntqy0cz4faprc03s65tt34anyk0rhvv2gmqjmf6sd", + "bc1pukz2tq70qzhtnpuks0xmm2tsdrgxrej332pmh5cfjf8x9ttgwk0q2rdaw8", + "bc1p722drnh7rnkjcg48wz563a9s3pk52cqs376dq4f69w9uzv6smptsj9w5wy", + "bc1pp6tyn8yvn53mj6kyu8xyk6kaw5mgfz7k89ayxtlg6t6dd68thjxs0yfylm", + "bc1p7c7qxdvlqnew6zll7vclwmukr2wap66fe7upy7jp30xvnsrd3wys2xlth2", + "bc1p9c8cc3676aswayj4pewlp5gms2xawn5s62hkx0u96s078gdacvgqqyyxmj", + "bc1p2gfcp3f00e4yy8gx0pght06fv0yf0kl8k377px77q89hautncscqvurkun", + "bc1pa28ux00jfd8y9d8yk700l80m62nq5llws8keas724lrz4lzpqvhqazlp6g", + "bc1p8wvtzu8jqyy9epkppc8sw5pfgqcjmt0aw7p7fnm935cy6695t8zseggkqc", + "bc1pqgpn40sqccn70uz9r0xwkeh58gsygeec6qngzuezg5vsfgzrdl9qyasws4", + "bc1p6heduzekv5vy9cpcxvq2gvx4h4xzl5lp0k43ah0xjjtp5h07p9uq0vrmra", + "bc1p0nme49e6xfj8g58tlk90sh6xlxazp4ysvjzr8pr2lalr2v4rf9dswx7mpa", + "bc1pn22fd606479cn5r2vsu0kqqcd4fju0l92seszcf6m2jv9vwl49ls5q7nny", + "bc1pnwah8mlp6n0x6j9sv56xjp7a2nyjyg0dcv4u5stvkw3ysw4hxk3s29cn3x", + "bc1pz5d9eef5qwyd0f52lqu2z8n5kv5vajcfsjvh5q6uzvjhzkq9a45smvpjfj", + "bc1p9h4ms29qvch5snq007xvak2yp8zxhjdyk909efgg5ky4eg7s23dsa7epus", + "bc1p29v9fd77x8kl9ngg42gz8mxrlw7zad28gas6n7s4s5hyar2mpmgsk35474", + "bc1pqhyqgku4u4d8y75ug4khhdyyfvqmhaevfk9fsxnevhjhe79mu36qe2mdqm", + "bc1p5ecw69l4gwmuzz3vzjam7r8arnzgjcs592v0tqhq9y35xvu8glvqhazszl", + "bc1pwf40r7dkwgseezfp93z9vauzjfw536fvncs58qqcf39kr6uzseas0eh493", + "bc1pc403nuz293hpxaem3025fzemntt55dc89ehshvm0fujthu3ks6hsy7nu28", + "bc1ph4tq5072xnnysewzfrxy6nl8dkta3hjxzlu2nexwftw38uqqny4qch37dg", + "bc1pvztgqysrsgwehfv72n592ca65edmdgjp4y80twrnspg9mkq2rq7qeuf74a", + "bc1ps89ttxl9nuxjtqm38keafu3hc5zf7xfjxt0c5z2ku507pqyhga7smhtzwp", + "bc1pt7g45gnye5e6apgj69mdk40kf28dtzd2whr9ty8wnhl2n6423k5qrkv6l3", + "bc1p982x6la2mv0uqs00vlq78xjm4ueghk9tfqtzkdqr8unc74vur4jsvd5vre", + "bc1prgernascqgm7rtxc5qsqlu6kme675jajz00fgycwhpdm37y9ka9q5w9k59", + "bc1pacfp5tfzufgfwa09mvavfvra6kjqwp5g08hpa4rj3a7jhmprrr2sseh4ef", + "bc1pgjcfxp0pjf9rkhdnquc9h5xrm8vthfgr3rdng44t9zqt9l5cy4zs63f0pj", + "bc1pmps7y54catvd7r08uu9av6k6mrak754jrjhm7gy753u8kfxknhgq77gf37", + "bc1pzxmlk06f49vcn4mw4kddvcx2f5jdhlk0jtt77wzg7kljq35n7w9s8cdmmx", + "bc1pfh85m7dzp3nwf77scl9qf9jxsrx54fa6nl4y26yq6zvwwu7wwpys8qrykr", + "bc1phndxaq0paf9gempw7e65k8wxdxqxs8cpky3c0rnvf5hwyhvdvwzqfcxruk", + "bc1pep2cddpqaalgwm6348x2h9nlkye34mtuutk0fvlr0080jewd0x9q3r6d2s", + "bc1p90jlg3gfcsz4qx9w8fl2h65zhs7us0d2h3e2mrguv0kyq0lt36ps279t4t", + "bc1pwrkmf9uxzmcq0sef3gw8mp2sstyuc20glm4hhg0fd2ayv3qnhcvqra60f0", + "bc1psvcy8f3cy8pkdxy0gehuw3cjn9fn57lfgyugsywe9h4rrqajnsvss9y6gm", + "bc1pn0s04h58vwh2yuuvlpssk6squ9zef4ttz5zkalzdhu6uz5xagvwsketarl", + "bc1pjnqzg5c66q35hsej0hwnedtn7jc84dcm9quch2lvv0sw84773daqelvehg", + "bc1pkamgavruhda2nde62a4lx7pqw9ztm2j9r8v2ewm8qe0w4p4hcu4qd8gzkr", + "bc1pdxu3k7n0n3ygltcha4cevkgdydcj6uhayffgprekcs7u35hx2cpst967jq", + "bc1pd74q6mn8k7h8jdxlhkwqrw985cnqzprcngna596xvp2sh7kglg8qzgsaqd", + "bc1p7u73kynhcr7dhfstju4ek9c95epum278z8zxl25895ra65dd94lqf2xq58", + "bc1p5lsps4kcyuxwxjqfvdzm6zjasczael88n0x7th9luw980fm8cx8qvx4g7a", + "bc1pw0xp96knvnzga9f4k8xdn7gmuj055gcckyf64ntmxqz6madxw28qhvgxqk", + "bc1p46j5v70afz6fu4xraj7xz9mnc0hrsly49dpez3jh3wkl8dzty28sz7hjgx", + "bc1pu7gkduxww9h8z8d59huhtvkgem6s23cwxztut7hv975rdadpnjhsjkuqzz", + "bc1phrgqgzg2m2387tstt0h2z58wm0x5z6kdacedu4swpctgetjz7qasx4qvwg", + "bc1p9tzzchhpkrkyrexxqhpznlfy7k6gdkc6v386fzg8jc4zve8y3uzq9eqqgv", + "bc1pkrnjeq7fyvtj78a0gtef54w42ma6jf4n4lzajqu2wk6efje3065sva7lxl", + "bc1p44cfew22t2a0zp7g5gnd3sejfvvp3rldffcn94q38prq5e3pcp4qx3yrv4", + "bc1p0hxgpywhtkh2p833cndr4mz2uarrsq2plkwqdp2aq5ufu23sjydsws8a22", + "bc1p4acqmh49a698vdvwptz2fhg58ar34a5ufhlj5ddaa9kut000dvgsxlkrvu", + "bc1pja0m7x9zgzg2678gvjlm834kp67s5e30yax3dau69d2p33pjcwjqdkadr2", + "bc1p9z93qkgvntswna72vwhupj3cm4apg56pwh059xu7u73ap496vhdss45czx", + "bc1pcjlq5sw384gg252ymjyu9wxrknclqk6npz6c3ka0zkq9rt256sqqrg2x5k", + "bc1p3927nw9wf3t0xzaxplp4yputmn3paly208dvqhevydm43afs2tjsflu7uq", + "bc1p950r6uxszgeskmdsu64vnkxfskzl8x7w2cg2urr4jrflnsxqr0uqkmgfta", + "bc1prqxcek9ruv5s9ne0j5juvgtz9h2cdesg4x8r050p3ghuvgha54zsjv38vq", + "bc1pnwm2f9an2dhpa43jud3l8cvklfntaa6cg2n9wznupy25xaaww0tsf8fydd", + "bc1p0rj8p9x9lgktxvd0yra9zr0y4cw624r02q8kru5pncnymx5vse7qzfecpl", + "bc1prutgxucqqsnsw3qmqk5q0e58epm839f2waexfznvp445p5zuwhvse6krvg", + "bc1pdezz59aua3suud5rk7a20wh8sqhs2ml3k53a5pp39yevldua5ctqc9m4h8", + "bc1pf3je33lg7t5qv05jj4ucey4jufjhjuj8hlvdpry3p4p3wphvug2qs0592j", + "bc1p5pf5f07wffs6wp49r6ah4nzt6e7za2w74jx3ah6mrv59mu0g0nzqhajwzc", + "bc1pywj4929s39r0tcmyq7lpwzsgpmgymz4yy8trprpkjs5rghgfhfvsdjjw45", + "bc1phwlwtm2us7jw069nqqhl837ed85fxqkyhkxj6wggej0525n3pgzqyh2gtl", + "bc1p8xytttd4kkjt8naqt5959dzxa3mqwj3w5mjlml9qlwlvf4gw8hlq5p2j4s", + "bc1p3f8ygd94c399klkswf6x3j2uh6ez382072an2je8c8c492c3avvs0zzpv2", + "bc1prs9z340kxrws707ac5max6whf0luuw4atvpeateaggw3xp99ueqqn5ccqc", + "bc1p39yjkttuywfym7pf2ry3kmr8m7ke8lxxw3pkgesynk0alq9q24rs960yhk", + "bc1pm6tklk86wcqv7qznchk87zyvte8yx2chqm3jndsavjty0ra4dvpsqwlq00", + "bc1ptrgvvxspx2t4hxqwqw693q9jjys7dzqf5a9s0vlvv5ffy4ru2c0s9fkhdz", + "bc1prfzse9jkh0g3xtsu0mp46lk6y2quzeey97xne76ekaf2qwch48asa7n95r", + "bc1p26789e7ktfdsmdvgf6dl6tppz9kva8l548cx0drjck69um9e36wqj7pdnu", + "bc1pnszmqkmpkcukjjpmt56we0k440a97jsgmpkz8nvjr7r8zmgczshqdajv0w", + "bc1p6m7keujqz0l97pyxkhpzc9m4slhtad2hf9c34fkanw3qg4gkk59s84ekpn", + "bc1ps6zlx7rayffsds0ueuqns4mwcvp2j09xp6jwgtmq4wrnlqm0x7qqj220sc", + "bc1p92na5dm5san0d9dkup5udsu0sypduf98yhwuqg2xmdn57rqlsyrs3j7s99", + "bc1pnay5eq0zahy6l2ucd324vyn7x6xeahdz05dvxhgpggxeafkj6vcqnuwv8t", + "bc1p6ufgj3m9cyy4fsje7d837p9xpz2lhd04r70rn5rwq4j7fqnh88kqenge8s", + "bc1phj0w0c3kv2exa9zsduqf6le2z2s43x53zddm29zq8fm3scjue9hshv32jz", + "bc1ppf976gpayx9wysk46ecrjc7fq0ahyt3axxaacl8966afc2n2qqnqcg4l6d", + "bc1pv0yxgamspm9tzcrk2xf9nv6jg4s7jwj2ca0qek9fzgl60axtwh9qwnyn48", + "bc1p3cwm692gudxq0ecfs9jppnnr68agza7vl6kez0s3zaurnml4p0zqec4xde", + "bc1pnvtxpgh4kqwmnzdchkzken0nsnq0frdq3z7l6xwuc47ql4kp0als4zyt6a", + "bc1prxk8ghc55hjc345vasr758ue9j9dym9gykegwu726zee0g79aqmsd5cqqq", + "bc1p6t9apd9ayx5rexus53knshyaarz428ym823dmwwh5rxh5jdax50qy3xdgn", + "bc1pwfhqhx7e8jtc8lpmhned7jhl6zdgjepywxhe5t6l72ha0vylh3rs66kg5w", + "bc1pc68nl5kggupwz3v3awg84a28rvu0d7a7jz5gd23ele45n3jrulaqalyphq", + "bc1p29t8gccgl9cj858ejzz7yj7kmgf2xj04aj4en9yc62mktmys5a9qz645f7", + "bc1p6s6rzus6vp36ts3xfletfe8vshactyapvjzmc2yx2jrl2pny2qms3u4xej", + "bc1p0k9ktare2456cny02u4jq057z06hpy5c0ycgy99x8wzed89wcysq3svscz", + "bc1pq9lm54nwxc402qccue5xdfh7tzcuvx0e22k459fjtar78v02ahpsk4zl30", + "bc1p0p3awnz2qhpwf0k6yhr0lqj3k4llyw5d39kk3v306g4yfyhz6y7secqfzu", + "bc1pgx3xweyg4gmwgdc9h8e6nkk4xs7thm3jq48g9350c3nytx5frupqw2et7c", + "bc1p6d2av5pyz8skfl3vaqk5xx9xclwkyfxlh4auj5g2hr52xt2exnmqsksu9g", + "bc1px09qldpfmq4wvcymzfcgwddaa96fklfn2vhk9mszxgrmw3nfyvdq98map2", + "bc1pkpyj7mjfflavw5f2vuc0w6r6q6fxwt3egkptehnjd7wg7c04pzlslps6tp", + "bc1pgkuym99l4q9m2uk45q35jsfuqc2s0sk375vcyspfducwfghh5fgs5s9z7j", + "bc1pfqas693mumf5yz095lc3xm8clr4uc794dcmj97uef6x0twx8c9tqsymsup", + "bc1p0zx42t8mjr88l6f9ywuz2yqtd5f4f4p9dgj2g3dg2k5fvzl3fg7ql78wqn", + "bc1ptk9tegqxsfswlueldw9fgd2xcpwadq3mqcw5ctmy2nsn3m8a02vspsklw2", + "bc1pylhavzjsyw6vx8lqe8v3atv0she6g6vv60twn9fla5cu98wwzmps925j2v", + "bc1prj0sejev254x5xz297uquhuhqtscc3sr3d945xrh2xtms3sfy6qq62msg7", + "bc1pa8svjpzcas7aktmxjzl9hwsvnftncsp9vxmuu4z8xpa8ujyj3ckqspsytu", + "bc1prxpvxmj4fkvr42j5rllswuzwkkvdsptuq9kttj4rnnq527dartpqfzqw0m", + "bc1pnvj7nv8d9pv6zdnjyrpq447rs6yp8eeaj8jutq5pmxsz82tpmkvqudsn2x", + "bc1p2vgfglvf48029n64q7vdh3987t2c5an358hdcfcg96zs5wgrwc5qzju3sh", + "bc1pztvh77gg7qemr0xl9r52at7huuakhzv9hnttrxmdsuusf9ul8mqqp770vh", + "bc1ppnarnfmkrgua0tfgnq0m0q3f9s6tfxtz82zchrjr6t0dkdxrmhuqylfz6r", + "bc1ptdwvxh3rspkfd5d30sht04myqvnnl7tu4xefj3m7nt6l3w7slzqsdl3e02", + "bc1pffygnda64kcjgfqnxy3tr0404adw7z3qea8nc5y37dpnphw3j78stsh8z7", + "bc1p5epwrgcwm37vye2yl9hkmc0w3kufxuaj839hxmdv9ug3a4v782hqyvc2hz", + "bc1pv0kx725yzchvd7jw7qpdek0l220wgg6tn3vgmy7ttxyhu4gpa0cqqh69gt", + "bc1p8tw8epxzhjkqleas35c0yvvgnajwppwzn6yyqx8ltgen2yat6c6qfdsgj5", + "bc1p4u2tunj5sp03ltrf7pefauk7qdwesdheuwnvc24s6xguvm2spfws04vlct", + "bc1prf6syd440udlxn3066z06h0377p2nnjl6n532kf75edt6gmc34nsldn5t2", + "bc1pk2vjynwh0pflq9lrznr2pj5g5ppn4xuxsvygxu0h6t9n05hr0qlq9j2s3l", + "bc1p7e5sh6wpx2ysz8xnt4k58pyxlmjsyyvp2wcm8wwm28avdadjly4q7ey2s9", + "bc1p4khp6r7l8796snfx8nu76py7axd58dwwupvd8c4r0d3ah0chpwkqtazlkd", + "bc1px0s74n4086lmmwephpk8rn92mhekjzklzjhvkuh3ume0hx5eat6q6xcrny", + "bc1pau630cf0wk5g54w7yjmj7e9jpca9fc75vwwg8nfe3vcrgee4nnxq52w2ra", + "bc1pzhtmjp70m0wvxztruzmayyls57sf4gxva40urchxwj66uc3qdg2szgrv03", + "bc1p7g0qt8lnx3whz3k6wyudg34090xsyujm0fpdaw2fmexdzqgxl80qlze9fg", + "bc1phfzmlygaqrx8wl07fsjpql4gjc5rujamy2a9a4ts5q2z7l0p6g0qkaz88d", + "bc1psjhet7j6pgknqtp2j8nu3wl8rfzkfgx4ltpwjatlpsgs2glp5wwqn8f2uv", + "bc1pckp77y28s6yr39jcu8tvj04glveg3z87zn7vl9k0tuwrtxt6krrs080gqh", + "bc1pyxunmpf7yqguwvvdejp0ecngkv74rfnleemqq4hzdxcj0my52yqq9cvfvy", + "bc1pks8znye3hcejm064mjwcu0w4ncd4wxz77nzs35l4g5zuhvame06seutajr", + "bc1p0tx7qz6r5y3yr228kjgmma8xdfgxwuawrr53map5xqcqf00246yqn7lc53", + "bc1p2uwlhwl7s9r5ek20smkwk8h7kqu23spu26swtf8gmh6qh0t9ruesnayfq7", + "bc1p3kck740uespvgzjp0s83t5l8almwutdrm34rghhrywzahe8258fqsu7mqg", + "bc1pa0r48cmapkh3xhgtv5f2cl5pr7u4xzhe2a8yc9e80nvc8sqms65q4gh77r", + "bc1purtev9kd2lmrz9942cenh2m975l8d2xs5gdulhxp20wz2zzlxr6quwdt0d", + "bc1p3lwg0rx5656nezq7r3g0wku0c8hlm6d3h89epxpnze9st4p33tyq8h5q92", + "bc1putlrv8aaekfq6umcgnt5mx3tt4nx7tgjtqhjwhvseprxrvvtr5fqxadz7w", + "bc1p63878d3qassch0wl76d7v0ly52twu8ynzs7zxfp2symvq4ccqpkspj4xs8", + "bc1pju5xc99h6v26pws7k5kmwuqg57nalpu8n7vwwxhm4wl543rqyuxqsh6klf", + "bc1p7n4x2pnkwcx8umuvc3sm2ppsn30q42d95eq48q67auvgw3tu5m3sw083xh", + "bc1pmekczn3lxmxgl2c9fx2p9lqjxw6hkftgr69pppvv0gzfdufnxpzqrrhkfp", + "bc1p053jqn4gmqsy7vhhrvesel67a2v33cjc0jn2e57p2nqec23fepzsr67x4x", + "bc1pdfg30vwxt5mdqsj7wcnq5j2v0vhqr3v378keeftwmr5jje26c0tqer284l", + "bc1py4v2prj5mldm3pzn0z7uhyk8pscnrpy5qtpu8cc34qclldj7dwsstlw9nt", + "bc1pv32kdmzcgxqecvj7xrt2l0yu9h88jfx0tv23ekn880xyszcmq6rsvzcx8r", + "bc1p3jjluyhux5n3xrnd00759t47xm4faku3prt93zqwk2w824wa8hsq899f0u", + "bc1pjd736pr2trfdnnerx0j576hxqazgay06f23tty4sav4yutsqr0es7uxyag", + "bc1prm4af3cx9jkxpajqvv4xaxjjl5c8gftywyxt3frvk6w2a0m6nzfs7kvae8", + "bc1p2gl7lleqgwe4vmyd0mr696lxcr4meykwgpcmcr086xdjhercwn3smv9tkj", + "bc1pc3ma0j49dr8avqcclnwgrcddz9ryvfa2tvh9gr633hr8d5kz3s7qlenl34", + "bc1plfpzhck90fyultmg69285q6nyxcxqe06xejuwe4a0d5szdpfee0qr96ten", + "bc1p8dc4e5h836u7gv4hds7zzy2qmrgzmrtqdrd3tykhh778za0y6z5stxqhyw", + "bc1p9xq4gzx52cfwmpvg3qhyyky03qtqtd73awhjeys4773cjnqjh4rqxqz3kr", + "bc1p7dmlqqd0fy8g6ru97p37md0n9xtxxeqtn6j2qgejx9gz6pn360ssyp65xd", + "bc1p0hnzqtp6wgscservmk8ap9qfdvf6yjvllng44m42q35uskcry4hq9uxpmn", + "bc1pnr402uukdkl3yxek2e9z3yelj08swqtrwgjk8xga7ye9ff9jy09quetu46", + "bc1p8jk6jd90mrs3w2vhesprkf266esfqnappsktzj5jqxu75thfkv9qugv43n", + "bc1pvga7m9d23rzy3mdca0gjx2dpy6a3ans766cz8tg62ws9z0wx5utskw7zu6", + "bc1pvqlnu6le2lldwvyxsx00e9798want58575cs9m6lm6g83rr0r0asdv0em8", + "bc1pdueh47ke294jrltwe6ccunqesf6r536ejlav5245hc546chseq5qh6xlk7", + "bc1p33m0unzvgz7pd8gmj9mtwd09jdzutnvygn35xtensh70p53tkx7s8nvzl8", + "bc1pmm5nycztt9zk5auepsnny5yn3es93def7xc0v2y3xk42nfpdugkslgqpks", + "bc1pyhmjf0jpwhhudg6wvujhnntukfs58x8lklcc6qdng496224ruxnsvylq7c", + "bc1pzadeyfm5gjs62pxd58fwqenngxp739wrgtksj6w8dlk6c6rn3ceqwkd885", + "bc1p4tpfr9e0fmdklapsm2c04h4j8jgxtx56dm44jgu2ase5g0a3twtsvnk6ku", + "bc1p4wu8jnjgd9umt4054vcg6jrymk3w5f6g8na7ur9ds63qq3yklytqg95evd", + "bc1ps2t75228md4vg0zpppnhj6n0synl9440skjhujvex4c3x4pr3vgqvrq859", + "bc1pgvd4qcdd3jzclj0qkr3ywgvfaxczsrtfugw8q7w9nzyz6kq3lafq0ftxtv", + "bc1p95q7wj053hs8nr2qm9t3mwmlr2yyuttsy65umh9urwxzm7stp3eq0pug0f", + "bc1p37738u5e3nyxax05xqtaq04ms5ftxefzzjjn67spwkk5pa32gy7qqvfmzj", + "bc1pv9xxk6tw6pnexs6a5p8cck93yy5enc4hnq3evlj2676yqk7mfgfs50kx2k", + "bc1p8ujucx098vad0ql07zxk3nd93e9nqhmnw9tqa53un8rmm0y226jsvtwmq3", + "bc1pyjczs6mk6exu2nqyzc9rfyp2yhs9ymn2zaz66g7myas4095ss3cqsshluv", + "bc1pkxh6lp7qx382t459uv74lpxk3yk56ejwwwxgmtdcyna07gpw2pasqj3f33", + "bc1p0uukvc6m4y0t0xw8lhr2gfwe6ca55klya4a532r920y3w6pekn7q3fvysm", + "bc1p8n4ysprg5zehn4xpkerptef3hk0q83latuvkedh4ch9ermtzuu2q53f99e", + "bc1p4gvw2ucsyk2x30zlwr5v4t4zpnlecy6x7j60e7jx99tezhq465gs3f32kd", + "bc1p87408770hde4zms5gh406sfduzz2v2887tqcq4kq7uua26ckr0nq7x33je", + "bc1pvjrgpzc0wexvzefgqd000czzvjuxfevq0u5ugeg5l3kz2sa3tsfsmac9nl", + "bc1pleljhfukev8y8ws8eul2k48z8magsauv0x82qx3sfqc3nh3lsgyqvw4hy9", + "bc1pepkwm426f4ewp7xhj9lpymxz28p36z5xdf520dsxww8um8e8wc7sc54z62", + "bc1pjv2r6lfzeunec7kng25qzl6cgd36hghc0nvr3e9mee64h8mal0kqs3rkyl", + "bc1plep7sxpakvlhm9783vfwx7sq37jrmwhj7vjjxer7ympgd0peecps7dcwns", + "bc1phcrlp04g0dry3vyn9rjv2edk54nh2yf7y2vguz3wuh2aqzzp5kyqr0dnk9", + "bc1p8j7zrl263cf6hcfhewvecnshdrtvp5e76cp8e655aq2tw724lj9q49ggr9", + "bc1p5uwzjh4fljjh7dp94dfj69xx330z040n5duelnu79hqqvdyxzdjqkqgleh", + "bc1pcngrad0cy64dljuayvlsume0usmhtlr3l6ag26w5dcml3q5k6t0q2k994d", + "bc1p89mtd2ujerzmkp4jussyj0nuxkm0f7x0cprldmlgam7a8xz8jwhsja8gpk", + "bc1p8f2ctg6l968l9lyv3eqjqd77k62yd37fwmpa8dgfgp0u7n59qu3qfu89n3", + "bc1p9u30qm0t5j3dsn94mpelyffpddnd5hff2xcxrq9q8acuppcn72lsqnwtxj", + "bc1prq2gldezs3wnp3h0gzyskktvek6q043gqrhu3jhgxfe75glm2ggqnkjkar", + "bc1pzjd2gfdv6vg8ltky7ym5mzxfyulehw5e5qgukcqluw4jhwhsst9qykcxux", + "bc1p64mhcws6r2qeesvfksk8h665e39e3ua4w5gnhm6wx5e9nadknntqvh220n", + "bc1pa0kty84h7qmc23hfjhqm22yzlkprvgwrl000ft92ea07yywxhqtstnwx45", + "bc1pn2v487h5qsly5ct5uf4d03ukm90hwms2pe5f0v357wk3006excvsetwk4h", + "bc1p4kuufqx89zz9j4mp9e08y6lsx67h2ururefnkqh3yc94gqxpszrqpp4maj", + "bc1p5xts5ycajv98a5tpfwj3pegm6asph9t4kjmkq9ednzs9j4meh5ks5cl2hr", + "bc1p9rfddxupghcpjuh7f6mg0v59qt7stuftzy7x37q05647ae5p9wlq2zzg7g", + "bc1p40df6m3h859ljn7knh38fmpz4ylp7x02d0he7yh3hp03h9lepcjq2ge7yj", + "bc1pt748hkdmc9nyz7446n7nc4nukhxzn5d7zym8tw2s2w8gu277xj8sn6w5ta", + "bc1perdc5grmfrkemxa96egmdkl9ymzghtvekja9u3gu95w0nhnvyvdq30ktg3", + "bc1p2ph75uuvj4phx4vgklpvyjhku40qm3k4cqayvp5xcxu0pg4j2q2qdl5cl6", + "bc1prvkvnvm22ddee46vuts9t3uaun7uz6hstuejtxwvnwnu7hn0x6gsp42zg8", + "bc1p06r25uls809rv6zankllda7czekdnuxekm4adm7uc94epyh4q7yslvcn9s", + "bc1psc6q473sn56j4sj6uvqgugj0xeq6gxxqmvkc9n2rp4erd63svz0qdmlr42", + "bc1pe6jfsz00t968sp2088lclln4rxf4dl8u023w7t83ehh8vj5wwfrq06r4nd", + "bc1pp5qfvpzdmj95rj74zrkdqj33m0j9gcjxa2a9w6z8pkdpy9v5f9uqt3qp0x", + "bc1pc3273me72gx3d8hqrt4teqkghcjh92dmq9xud4xzmyu3qtl23wxsgh0szp", + "bc1pt9jcn2ynmguygpte7ptse85gmtgvyd0pr6dvh8a4xkrujc0zs3cs96eqcg", + "bc1p4t2l9uuqs2xj4smgfchnt7g2x8nzd0yr4pnycevklx4mm578x3pqhjh7yj", + "bc1py4m5qx2efz2twywczg8484gsmnej5leyhue46xa5p0cuj8nn9enqzhcx05", + "bc1p8ydwpr8g8e2h7gdlsqxxdls4l9ns3whnjtdjlnglf97k9evla4rsjd0dmz", + "bc1p4nz34tmrpwr4khearkc69wrsncpryslnwsnyp4s5ar3py0c0fn5s8yxqa3", + "bc1phdk4r2w54d66csfrs63vvuxnsxqfu6ytcxn7fmy3erylpu98qhlszla5ne", + "bc1pc3gm7tjld7lm024372u3a0lepgeywkl8gyd26tj20mf947ey6mwq72zjk4", + "bc1pqlmyqh2x8yc6tsq75uelek47syjl679aw3yf78pgnwneukfkpkrsq0vngl", + "bc1p7afulk4dcvr54sgh04c0v5sq30lltrp00vxhrnln8255gqja4dqshznwy0", + "bc1ptjfszgnnk7y5hlc8dkssj52k52mpfutmvxakd7lj29wwyal2vypsflg22d", + "bc1ptk6rtztrfq09qzccczhh3p04f62zjnx3lwjkd4j3hafmlffxg0zs9nc046", + "bc1pu6km8w05v82vd0ak9lu7cxylfy7ecu48wnvzezvmsa9eme647gdqup3th8", + "bc1pk3hqxvrzafpa477wcg0cj0ey3gykfpmqqk46ajaa9ktn8vlvgmvsulythe", + "bc1p3k607aj9r2yewen8ccs3a7nlg6d5nvw9rxkh2slvwa58k58m26vq9qd69r", + "bc1pu2fcyrts3xzjzde0pukn8v3kfssg800u5aetvvwaw77emm4wsmfqlaggff", + "bc1phta4er2temk59jraae4cs5gdm7qm60suhju0nqndasddj9wln4pqm3wssk", + "bc1p4cz7mrvs6qwm2zrnlxt9ze0w72tm3d8rd7mr0j3unw2mvqkaxrmq0gfly7", + "bc1pwvqnxzd9y5cvmrrpvf5pmdaqvn655ppt5gpcyqa9lztcksxeyepq38a3jr", + "bc1pru9v0guult26hln2nuzlmv4uxsx2mle4f45rk9e95lf65g8f5pnqhlwzpw", + "bc1p2uc96wv4ksz7zpg98nmumen7sesk935an3lqjgvf4vd7cpls84uq66jk4x", + "bc1p4tncukn859anvd2u8h5hj3kz4tkxx2sygy0d94rglrq3wr4ds8us3r9ztc", + "bc1pqfsrmsdnejazzcl0k3vczyt0308ra60ens34x9wpdr9mmt9jhewskstx74", + "bc1pwc6pw65wxc3kyzdqth9yw43t6nmn73uqugyrvj4sw0qe4cw7gwdq95zk90", + "bc1pugcqyj6k4gv5upnug4mfc0ht2rwc6r6caq6zfu85k4f6gnrs8v6svdyye2", + "bc1pxa0mk26yxn2edne2lkzk2d60kseafddmm2x54wkm77t3esq796ps6232tu", + "bc1pkdy3n0wdgjwtvnc0ul38lmsgdpdchqauvnggjq0tcsljjkqgaghqneeer2", + "bc1pymhsrhg6mz6emec5n3z5t6mwlcnmatrse9ndw4hvpnn67alpfqkqqsstlw", + "bc1ptgdh7e2axw3q0ptvmf5tm8rgduflp4pw8jrdnrmunw5dpnl39ucsq7zset", + "bc1p5pyt0rd2pqsdkjut84y0smuy5f2qmp2psvke3f876d09ua4gfvzsxxga0p", + "bc1p08yfun8ygfxh53lwhx5kshuzufv99sftlynhu7k6eh5wa5ezju2sk5v57a", + "bc1pf4hnh5y2y09n20au4qwdns724llcwmqw8t5x23g2vyed2qv8r76qc8n2t0", + "bc1p9sp9nezfxf88rqz2dvjdpq3d8snp629sk4h5pzyxek6562depygs3fnpft", + "bc1pww07ym94ec0lae9z2rzrd9p3qjemgxhwrrnmj077vcr2sxa0mjuqxx2xqh", + "bc1pfxx25sknf5rx00vzm97s2pkkfrcdlgz85m7a3kkcqnazhfmamgms58dpgq", + "bc1p97309282sa03ss3p7eyt2khttr2atwzz56kzx0gdkyssz3etm5cqfa49za", + "bc1pysu2r565hvc58trjj4y43jmu4p8saz4hqh3lyf8240azapar8cfqzk4lya", + "bc1pm0mv32l7na2h48w25qslqtjfhzyr5ewpndvqtf4rpwqu0vzj7auq2herca", + "bc1ptpknp6tnaxzc4u3wlu4407hc5xqkk8dxgd703ydm2vtvhychhv2su5xtf9", + "bc1pwa0ez0ltgpft2906p5ga9vzumx6lem22w7apedsvqlr82aw3c3fsdphqx5", + "bc1pep8y8qd5naex59nk2z0tdgwrxtr3yk4x30gn4eg23wgx5a0w3efs8s9k4f", + "bc1p0ug557eudeew0yt5g5vqedknex94qype5p76m4use265a37kghks43yyc5", + "bc1pcaxge6rl7hnypa49ht8yqczrrss34fwc7ytg2lts5t68ughqny2qxjh5rp", + "bc1pdqysx4ess6m6apz3esz3hnf82xc3te2k02ns733dw6kxhnqx2rpqvp9zlk", + "bc1p8e2z5unkddqznu78apy4t9uqfq4nuchyjym6ncg0qjcehu7vz0ds0plh8x", + "bc1pe59p0me7gtzxqknk0qx9cu6ng747ncm8ymakpvwl37t62wcs6tfqr8tehm", + "bc1pg4adt6vr7u287pc8mu3qf62mqgsjj2rs3syaseg24l6lxcm2zn9sc283fy", + "bc1plek50uf0rscta6v2pm04rt7rjar6daf2at8p555qqvx674cfmecqmy95dj", + "bc1py9phq2q7fa7xrth80kyprez6me39dmtsv330vhs78u4mh4z82zgqg2f22a", + "bc1phv5r39k4szzmf7ze05tq8fj9qgwxjmcszp5qhnlyqam4lwmm3w8qmxyqzj", + "bc1pk2rmj68v930euk2jn6zsd25ekc9yvrfqwtv4nyqs73wa60d50hrqh9te9w", + "bc1pxsw6fkkt5xtph2neeksagz3n69a9hz592kalk96w6ke5fpwjy2mq9qnkwj", + "bc1pn2lswynsl7az9gquvy5058xfndjvnjmmze96snkpkfe4rq7qpyxq66qn9t", + "bc1pu2yhrf4cl7rs0gm38wrl5ftrgamf3qlwfh7rrxq3e94ekyfqsrasffczlz", + "bc1pq3shvgsw6mmhs5f4xxtt66pszn4rglpusvzm6qkxs3qqfv6ks7nq3r9c6s", + "bc1pddt273k0hwp93llfl8cshkw6w7qq5g585ddmrre24ejxx6u5c9nsw8pxsz", + "bc1pzgcna4uxf7e58gn2ue8azlzx2yv3t3xju220dct2dmm3llpg8c5strukff", + "bc1pzn3jhpta3645ehmat25dy07wt6xnfqhghd30s7j6ma477xz7lgnspxhz3x", + "bc1p5gnx844gge063wu4awml0nmhgve59wwya62qznh2d8tf59c2yatqys9tz9", + "bc1pqwjdjdv63pvyfjmedlh95tvtupstqlg3dv2fdy90upywa37e9pxstly695", + "bc1pqs99zpjup8xhrtr6rvn037heq0g0f5hray729al3lceevlm9k55qh6580a", + "bc1patayjfuwxkrg58nw7fqnt9shgwxrn785skr4ze0apqcwhxdg5mrsed0r4e", + "bc1pcwhsahd2sjdx73nyuhdrsz8h2w00rhc96jd5y0e6cvadk930l96qal2mfu", + "bc1p08g7pzrdxqzw8lhyz82kltyqx803x54cspr2z298yd7tpmxylgas2p2ykd", + "bc1p6vkxw7rpacktucdwqxpglqqau24r63j9a5ptvcyq3n76ap9emwtq3phe89", + "bc1pddu90epj6dx47a9m7xpl3wm63el8k9kwhrdyjxlu26zsalamenzqgfz08t", + "bc1p7c84retzlw4k38r63zy8cw29dgehttfpver9qy2ekc60kys3jf9qur24nn", + "bc1p5et2dt46a4m3zemqylefmzn6tzh2q9auj8hxahvtd4tk2ptaamhsu6w3el", + "bc1puf37mexuk3jur4ukv9yav3acvt2qsrljyvezdpwvt5hlz2hwamps0zr0rt", + "bc1pkxkxn4lp78yw3eg9yrf37mc7vamjx0htyhrexe3pf5flghcgcalqk7gaha", + "bc1p7zh2337lmwdxkdqmkcxy7m0hhx2j5pj24a5ac8yhvefjgux6smnsyymw3w", + "bc1pgnny2jnnqef8q48gc4hmswwy9vjg8mevwtrldgaycnh8u2h6chjqz3jv66", + "bc1pegsue39hkcgdgna0xvqu9j6s4y8m4u2ymkme0e08la723fgtz2tqjhmudm", + "bc1p4lzr72x74azfz4dkunudj7x3mdd53drzmlyf5tvvwlua3rhcgjssw44sgf", + "bc1p3ugqdees6qd8levu2sz40zs2n2l0rg77fvekp04ux0950jdda3zqf3t6re", + "bc1p2lg0z5pjyahueqs3qrac3a4ujtjngtdl6kzahmvr64xc7d9l454sade54g", + "bc1p95qsj8rhh3qsjy4dhfuas9ljlnkxsvqtxn2qhj2ag5llqqj9aens2xuedl", + "bc1pxy94an4yufmfald2en75uw7pll5shd8nmzlmrtmwqjnr2a6ymw2ssuw4me", + "bc1pvvfdu4gk8dm2qz3x0zn302ae2zp3u558ehl59lryjhedaamsnwkqmatszl", + "bc1plxt8s485ljnag9u9qj4rxwhweeg9zcwyy5yq5k659ska3hh9274saxakl0", + "bc1p698zxmj0wlnt6wn98lhqhm2uedyvtaadudussha93wsj55z5jhpq4dg3tv", + "bc1pxtp4c7knehe7u04a6cutqgdeu5zq95c9nttnplvrsase7f3hqtxs3url8z", + "bc1p5nhsrjx8dsettvcmzk07v0v6qgz38f55z72pmvvzzlph9gymw4aqqf5wv4", + "bc1pwqpeux5y77xt4hq027qt8ewd8anj9hdng9f4wfezvm0qewcwqlysp44fx6", + "bc1p2w7jugyq994grf7ahhzyqz2tv9zqfrs5tjhu9ump5w800srz3yps2gllwt", + "bc1ppewl4hf2kc2ulkxnzh9mz2rpu4gwghgxvzd4d6kf5ydczknwfaysp2tpa2", + "bc1plqdqcwcrlkaakht9hd8g08k9wgner6f7640d6tzvgw93t8g5c0zqpguql4", + "bc1ptp2nmzdxd2kry7xzfl3y8pvkdxn9qwth9a99gcx5nxsxgcug598q2yxgwn", + "bc1pkqrk2g5yyn796vpvydpcns7e70ee2mvvh2xxkraj3dtefca46e2qqte3kk", + "bc1pwu7dgwzgpnw29l09u2szl6petv2jnc3vc5ya6axwrja00dq2uqtqf8c4hp", + "bc1p5uej0lgaxreyzm55wr6auuk2zhat6xgp2umcz8a726pzxqauul9qlw8jf5", + "bc1p40tmfmlm8u6rufx7hyqfugcvnd930t4l7r3070wd955v5n6939pquvakmr", + "bc1p62c9fjuqsu2t09k7quajvtgp7jaj5y6ru5s0lkw893866802jnpqh5cgrd", + "bc1ps7ut3mgvcznuhxhy8mgxu7wkg3vhhxzvn68stwfrhqza9q3gqnaqh6wr4t", + "bc1pptjxtxn7xqlsz0wch93q3uzauexsy5spzqwl4cr729l5repzlqgqunxkux", + "bc1purngrm9dq59hjstn925f63mc9wlwxwx3dxuqvrsy6acp66ruxe4qgumje8", + "bc1p06pkrsgjmpdfe7edalr4yqhyddge659yytwtkqf4h79fqgcqvleqlznp7f", + "bc1pw5lnsl9rzdrhmczakyk3skdanfkpncy9u3zmqdgpzn3a4muuu7kqcmfc95", + "bc1pnh08nvqheuxzcwrytsu2qyqv69jynee095epqzfqyn9wcnejzzeq8vuhe3", + "bc1pjljsvn5cha99z6tyth9wupsmgjsvraeyzt2arhd78cfcyd4ftz2syh3t69", + "bc1pl7hwknajflmlpupu7dlj4mpydygrq9usv8uny8wt7nw7y44vz8vqhz3hfe", + "bc1pls6zgunjvs7amkhee2rpufuwj5uxlvxwhwsrt8744cj6c2a5anssml5h2c", + "bc1pjckhgcf8uss8n85ex9xrst8s7wxjqz4q3zdewn0mx4cx6cqggd9qw78wrs", + "bc1p4g8ul8g3tdll89nuyaqdpgrdc6xxpckywk6pwmvzh477zjdw4pyqdy0vfu", + "bc1ph6hmddy9nxq4etyrvt22dq046f87cxywc5029yg7dnrq8hd5dwkq25p767", + "bc1ptmenmhcsjlddmuemu5ldjh3fznel0kng0vzg7wzw7d2gr908wstqp5cauw", + "bc1p52psjrrw6yg374lw0yd2uzgc3avqqxxe9f699s87r5zyd3s6k77qx42ye2", + "bc1pjhf8yaufxxdj7w4t7s83qqvqwej3qezyvzfxntenx47px75egfrqcjxm2q", + "bc1pgdzs5s4rt9rd9w47jrdc86y7e04wq9l3s3ny09awlu6es6ur6nsq6dyvtk", + "bc1pnq3hdeul2ngqra4vhlh5njdhp2k9acatgwspksl8qn02ny777g4sq60kpg", + "bc1p97kkz60xnkn8ckrqswhjfcedahgt3pt6wdy7qqflrt9r5pm8s67qq9xnsr", + "bc1p0hxg3l0gjnq5yfld2yg0aat28afa29pvcapsfdf54ymvtc3p3wnqh5y56g", + "bc1pn8eyw3x70atz5wrhhdtvfsfj5lzdhrhrnegkf4vtkuvxm7ql89yspr5kx7", + "bc1pynp9vdtz77gkk3xp5myl34h0yyrhu8l95y8dslnp28lhrjf3wqns4yh0yf", + "bc1p3yp9nzeh37hwruqp4gwl6hatsc44wwdcdm8rzz3cur4acxq0x5fqx6hv53", + "bc1p8ht7vmtlksvk8nfqvvvztm7vhwdepxhdeenpx5m7e2hwam2ugwss0k6u6p", + "bc1pn9jwpxm4a5v6jdkpqyfp04xjy6jmkmhsnhnsnzc8j9hcy0ju8atqjtkcgv", + "bc1pt7g5z0hnlh4zwtgvg236xxce7dcfx3jaq00ctxw2u9prawdzs3wsemunhs", + "bc1pfk4lqzwfe3mxk2lneg070nx8rgva66uxdkhusggee99eypdammwsw9qjkv", + "bc1pasy33htw6jutujam25nkxvvrw0u2nufwjhvsjjf866aq0a09ch0sehre00", + "bc1pclsz7kh0ve8832hzlhfpla8q6zsgmx0a07y24ncuudrkekvae2rq3pqkfj", + "bc1p84vvnxcnfueqvdlptdjdppgu6aatk99k7u7whlhexhjvsqnklx8qas9ajk", + "bc1pm3vsehfms99g02a43atsllkra9q6t9r5yeztdm4sv0j6pvfn9k4q9ngqca", + "bc1pl2efufz3p920wlntlgr676yjgw0jhrsv98ladxnhqqeldyhrac9sssswhg", + "bc1p9nj90m44d6j8t9tvzt7mll23c7vjp7l600eh3xydgw5j2s0acz5s6x4fff", + "bc1py2e460y8p7fpv07mw0g9f7ghqhkgkf85ew7vfyznzgkhaug8nfjq6mchjq", + "bc1p5q7580qn0774c0axqc5sq46ruppsvaamjesylqfjsja6ahrw8gdqt990zl", + "bc1p8pvpu7eqjq70n98hl6pyl75qfssy9xm6aykfuepupdzydltt8k8q46u87z", + "bc1pcq4s0tnv2we0fhy0v9kwe4td2rw6vka6qtk7jne8ju8w5walpdfsdu3u92", + "bc1p0tqqvyfyzrc83h0prjtdyz8fen0wrsh77pe0t35rcxaqym63u3jscp4lt6", + "bc1pnwqa4hj8nx06v47mxxwj7swcuuyh4vndj7jtenw0gfu026e8udhqkzxtll", + "bc1prq4j306hrzlje697x0gs5lp3lnnuklfmhdf5uwh628lafs60gmsq3mcj6c", + "bc1phqjfestj8mz7nhj0a0egszf5h7xzm00yvykk46t6fks7mswsvu8sw6n06a", + "bc1phlpgh299wghnkasga0xdc3fxzs3kqgd6enajem3l3w9hkludeepsthj6ul", + "bc1p83szkn6u3a9qgnmt5acqnkygj8hx4en0dc55xe7m275uza3qn2zs5wkl3g", + "bc1pk0j560feqsmjv852enlns8qrz4d8gp9vwd2el3mscwg3090p75dqj07l8f", + "bc1pwk8s7uedcfngvp849jpvujlxtk4jyc92q2286mjh599m9c45symqjhvwyl", + "bc1p403q33hlxjykg3h3l6cg9gvpecj8vpsh8w7nncjs5j5d8jtf746qnhqw6t", + "bc1p8dxg42ae0wgwmef2dsemqjvusw534cw982svru066we83zq9vlyq3hym5c", + "bc1p78ql5gqvlufgxtt8jdyjuk2uhe3yw549sxke667gc5q8d76z5wwqw5pnka", + "bc1pwf4yaqhaqtekl38qga3qt3dgagufdhrvjagreq2jp9485rt54zvq4q7vu5", + "bc1pqvsum9l6lt20dk8f270rundvctenf0yefaa3p5xe2qwm7hp76rnqq6k2vy", + "bc1pg4fz6tkpsr4ehu28c0k2wcjds9uukyemqj3hy95sscsqe3fdjklsrgsqgv", + "bc1ppua86u69xx86dn8zd5f73m8g0wqduc2yg4nh6ltyr6m25frt3g9s9zxds7", + "bc1p5termqclnkv4dy7ld4697gkwsqss439fry64vm7mjne5dczjr5lsnpmllf", + "bc1p7un9y7h2xjgs7k96vpuq6swx3z93lf86msw9wa5vn2l3a9msuu2qq57paa", + "bc1puwjefmr03x0hpj0aytefcxc7zmzue7m2u89hunkvp98898waga5sghyna0", + "bc1p3kk9mla2823rtsz0p6vu9z8udenue0enhapnxtfshmmrl0y5kqjse4f0ah", + "bc1pc23fv7fc0lyk04ljl9m0tv8gjssmru58yqs7an5pu2d20yapyvus85vfah", + "bc1pcl0qez6e66w0qs67zvqfy2xwvdn97rz4f33vlt6ea3kzxg7uksdqw0ck9w", + "bc1p8z8ddy9rlpqsctk3tmaylh7rq08mpdc6a0nve35x6rpddrh5hc3q408mah", + "bc1pekyjgevy297xjlasr28f2amvfms9xmmzx4d7hn7p8ujglppshxgsffl2td", + "bc1p5f8jtf52w8k7ca984ljanzgnqnqntnzespsewnagjuzcrtrhqcfq6tycaj", + "bc1p5xs6ulgklf6m8p396fr7gl4hl8c3rpd4dmhumzyss6mtcltal6nquzuexk", + "bc1p66wq5zclzz0wq0mx64rzlgq0zx9dg4tw0lkct0ceelyvvurwm3hsevf8rd", + "bc1pnsz774ctry520xw85u0rvfeduqj8dfykrtvmxvgzj929cuqack4q5en4u6", + "bc1ppq4t6he63f3rk93089azjygzksyg7z6sjkpe9f8362djm28gh9asjzrs0q", + "bc1pu0n6ggnmzavuh9g9rnlflj52en87pjle8hwnwe5vd08f5p2rqqjsa76g2s", + "bc1pwxwsj3nz97eetv9g4lzsmvld3mz9d9n7yhaf52x0p9vtkmq2rkhsc327nx", + "bc1pufg9fg6725am8vfwymg3d7ysl2xn09yrv5w7wyyphzq6x9tdam9qw9vmde", + "bc1p6dk6rt6sde9eshzye9fzl6njdtwrckewymkgs2wz50suxdcrg3sqcsclys", + "bc1pkg2vgcn869m9sckm9d02e96yhs5v6slr8xjnpg69y74kyfvmvx7ssrsfz6", + "bc1paxh0ndfk8qn9jytt7x0kw9aeyj4sf9syxwmn2ws849m2av68sndq77mn9z", + "bc1pkkdtcxtkf2h439xcmg2xs0va7trt7ds9jrandg6s68q4wevpueuq0chlt2", + "bc1p2shup0a2wykeawgun6n46a09ljx337zt2m7tnp70qrtgygwed2sszgm3x4", + "bc1pfz8phtt6urkxszhxeyn62sru3cjufn8nlj8nt3alyhfnejultphqhmkl25", + "bc1puhupju6ak58t87rdt86tdeq7azwschgzh7wxfz9nelru8c9hqcysa4eysr", + "bc1peery98vrkdfq43pkvs67rgz726qhlhkf84a4ecrw3whh7a45gugsvj2hkz", + "bc1ppvesssqw87ndl9qdfadspszzwqqaj5rqy0hx9dpqgentajs3tqxs99syzh", + "bc1pgq6y2nhc06d07wuudtgelpmdm0vsuadu9ry7juh2f4vdfpgvzjxs54lvsf", + "bc1psd73j8fudll86zssdzxvk2ytfsycmlm8qww966us0z6ms4glckqs6hgf8y", + "bc1pnyzjrqkga9zsvm0s9kk9dszj87q3dgv79f0z28e0804d63mkhfhsxd2n2q", + "bc1p4h5cr5s4n78mth2kzmcshtq04y0dw4cedpntfkdnkayajxpwyrtqud5x2a", + "bc1pa0xx24t5ral6aaemuv28km8t5wgs6e7ldgz996yxx3ec3y0huxjsgdzt67", + "bc1p9q0lv9q5ew9gd8mnq92c24jugzkck0zfxmyp0xuxgmdg7f0h73aqavmrqu", + "bc1p7xht63yw9ftpxmlsh3jal0d3a9u407elunun6u2sj8feaa3nekhqlglfuh", + "bc1p7j3898e288halh27u3urw7p2j87l06vx4gej5dfmav2lyywy8hyqz70dt2", + "bc1p3yca7mme2yr49cfzwq5t83cguwha6gk3z5r0uggpwcm0k3xuc6gsxsc0f2", + "bc1pk69urzny9660gzcr4fv76r335ydfg2py34p7eruwt6ffsy2zrrys533wjl", + "bc1pstwtr3pks6558x74zr0xaerxnnkg4q6ztv04zdq853gvzlww5tnshj7xs0", + "bc1pt9qkwsysgful9ntc84yrqtjr3l9t8ks527xkg8wscle9ylwgqakqdanlwn", + "bc1pnsevrhn8fsu263cvxwr3g2zgeaefmlvlhqruzhpc8pqz43k5vjgqmasnka", + "bc1prgmzfhsyhjr4ze3s30rzr9vqe3g33hef2u27ugacpg5h4k3mnvxq3r568l", + "bc1pkce4w0rmm52evvynjp99whlfd2q8uffrkt4uvthwp5cxaq922ekslku4zq", + "bc1pzcuvf3j8h3eucmmc4j4rkc6ppq0yhgxfth2znrauqsjsdft0wgfqahksrf", + "bc1psvkskd8mwu58cdmrczv2wq66gdry7w0sktzsa7s57lte8tmgutcqhqkl5y", + "bc1pu3fqlkn3myts2l0x7w3q9csr3v65s3ej6t564we0e9jmkd8kscwsvhqjg4", + "bc1pdfjm3dc2thnrf46dxx9cgw04fk046vxrymtrylr3pvv3e0a7dc6s60xaem", + "bc1pmwjnn80mafr0l4hnjaj4nr9ps7jjmsg0e06r0yeme2utfpst735qek4w9w", + "bc1phlgq7zcgk2a2kwsg5txleer255qactn0y8d579yv6295q7nvkzhs0ewd9f", + "bc1ppphp60t48w39762n85h22aa2ledxjgq70cktj5mx4jul0dnaewhshg76d7", + "bc1psk08x74ny2jwhdqhdy7v7l6vycccz88q0m4cukehwhwjfvm44sqszkpev4", + "bc1pz8hwtf8ekdtve2h63642y9y865856k6fp8ye94888j2p4ycmvjlq7u98fn", + "bc1ph4qgjmjeq50dpud8q9d8v6q3e3r2wyumhfyyzkamm5w8gg3t5vys5epwq7", + "bc1pywj5m3wktl4aupfr5fcfa6wmtmmz3fufn4z0sctvtl9vqgk9wk3qrx956v", + "bc1p3zycszxg5jk689mt7mejuk96ls0ljhj6p3h73wus0fmzwysnnc7s232wl9", + "bc1ppm5q753nptjpy08wjhyl36kfeh4e070uefrjgk9dteaxpyhagzuqhpmr0a", + "bc1pkmnvd7cz9mdljpd3gs7sr5ffw6eg9nfvcvnt0v6wgut7x702cszqes2vat", + "bc1pn084zdkwe9hj0394fmn9th42xuuyenf7krlenpwq0qpvlp9l9y5sekypqx", + "bc1pr22rpnju5l34mjd4yrzfxrj7jjy076yanflj28h6tc5f7fjdr88qrzy404", + "bc1pkgjw0hg4c0tzf6fz9fgrpghvnadkmv5s55tmztjn5skgsjzkaxtq766sa8", + "bc1p7xv8j8aac4tszu6cazhph69enrs0acqt8f92a833dhfx29495ugsgn6tsk", + "bc1p0gdn4j0ex5swpsrqql5nx5wwm4emsh05d58pt4sdrv8kd9gs38hqzyfzgn", + "bc1pr0ncyqw87f02cq6690te9fn9gt9776atllh838np65xrsnf7julqkzy6u4", + "bc1p9vu2450wmwwn0j4ayhtkhhx0m8vd8ukaf7hahgasxgxvqxqkfgysh4af2u", + "bc1pwftjec4cqyjnmfvu4zpflyl3t4c2w5mcaql8x6dt8at5n5defvzsnt3d93", + "bc1pl9zxcd3x6g8kndcss9a8pprnny4qfclmdntmjqmq0ysf8rlzl7rs9gwlrt", + "bc1pah8nsqqpmt9a0zy5wzutjk9naj8zdwcrs4vgnte7awd96n6ad54safcrf4", + "bc1p233sqeryawfgz4nk65zz9y3wg5kqnwpf96snrzrc7xqmhz707elqqghwt5", + "bc1pmfs4jgy0s8tgngw0wwpy4kc6xswfg7vknnn54f33h3aed684zunqluzkhh", + "bc1pz32ctc3wxgg75ayqszmz9kw8gae46w20048xxuqckq2lkznkh04qh7hfrj", + "bc1p7rfwem4plepkpa049q8ah69jthg6yfsdlf3ua5e0089qajt3etasqnu045", + "bc1puv44qw0j657y8dezkyuevl4wk5z45ys9x3l3an8xtrm5kzncg9tsj80fm4", + "bc1pgxt4mx6w59ch3hj4ggkv2dquevvfrzrqjpggxqg35f052gqhk3gqm92k2e", + "bc1p8vq95yyaa66zntc2z0edt84z2da46mvg5utycr45szq45rgl75dqq9x9sj", + "bc1pdv642cd0ysfzpf5p9mh0rpvjuefhznhswyn04cymzknyqalrqnrqv4p04j", + "bc1p34xdv7e7xn9vk7j0nhdcvmzd32j7fj0q077dp2880c2385x9v9hsu3j54h", + "bc1p6sw5umv89ckntt4s898h6escmjg4l0uvzhjn27cf3650rusu639sxkuma6", + "bc1pwefncreecxw5rf0ewhdjztcema00nffurz5kgv0na920mx3n4kmqr3mjjv", + "bc1prwdrd29sje9q79r82vst48xc4eav22dk0u0pgkfeewv6gzwka89s299ds7", + "bc1p627680f52nrm0qh9wa4zfnjrt2cqevjt9huk68vcqh9y20u8830q9qgwyt", + "bc1pt92pe6d5aevwuqsgxv3cpceu4e05ydm4jhh85a0cy9wwvcrup55qycpwaj", + "bc1plfddt3c4hh3gunazggm0zuzcvcq3gqlz7q5dkupa64mzaszu4sqq4wx9el", + "bc1pksr54nn7azudxz2uml828hs75fj3l3rglyafng7d8277g945c4msjdfm0d", + "bc1pqqu6q3he0aeh7tphyhmx5zcszhlmgjqkvfutamm7zf90gefllnns5glkc3", + "bc1puuvyj3x62hz2gqptxxc3nk9ztlrh87z832es2m4h8l5kvn6lmans675qq7", + "bc1p2rtaq2l4na45zp34sexnjv3qqg27eh2pc830yccf5sypru4wyddqxv65wc", + "bc1pnk4ujqkl0t9c676m7lplq26rye5wrvy37e0s2j0wgqfpp3d8ddesnkgews", + "bc1pn972wauz9p8gznh894dq4pc4ztqyjrwwx7hvtpd4dpy3kphst5us9xf59j", + "bc1p07e4cdnqgt8wvakrx07mc0eppddk3jfqsrpprts07gf5uw5fcrcsa85wh0", + "bc1pjzvydu00599cur6z6k77kldd0wgfdd54u80c50aqr2saty8mgy0qlgfvj5", + "bc1ppvrdp2fjl8trlq3qj0xh2snzkfp94fm69uxl2ddfda8smn6lksdqv3stgv", + "bc1p4upfrz0dk9f58tkapl8wrqrsy496kcjeru8lhkr6qurls3a0dd8qejvcdh", + "bc1pd9q5776xjqrlmsws0fy6ehv6lfpa09e8u8c2mw7607w5a4ug5sssq6dehy", + "bc1p6zpu6wemkntc2cycvzxxfg685yagen2ynxyvg4s0ta82xeup25ls3twarw", + "bc1p3tr2a65wxlv37deq0kwdxunc6a7t9yy5ej8a56pfhsa03jndnk2s7scnxv", + "bc1pntp5e6xm3757hrq967y22r899vvpyf2zg8yyg3tkdgyxxa949dnqszmywz", + "bc1pca95487wdt3u6rfw0j8ntucmzse9q0hkusl7qhnesfpjqcsvtvaqz2c568", + "bc1p9c5wdvewntke94vhyztt0utzw53ksulc5qceuafnw6lgy9t8jjtsz7qcrg", + "bc1pjl9pdwch4h278wze6hsd49c4ykq7qltjam6k88z65z0navl2u7msu42jq7", + "bc1pppp24njh9x7gslt20vwz6zjnwtlc3mhvfvfu5tvxvc75hm29w28qsj3ne3", + "bc1p04a9pd28gu64wm9dwm0359gx6z4d7qnsxpy73m35qj2y447n9lcs4aqumf", + "bc1pfwe7mxljhqj8lkgr9cgdu78p7gjvqu6u43pgafdqe4hl42lkyjgq5k9w2w", + "bc1pw9g57qan307yqj3kvvqkmpe74c3ptrz3r2uxtjzldndqkv7s0jpqg34wwp", + "bc1pnm6s9e92rfvyyzauv50swxdnxv3ymhwq284m6dpry4walffxcmesh9gzh5", + "bc1p9gdex6pn79knhccnkhqqs98n2rwaacwq782man9e8wa6khsvur6srcf6wd", + "bc1p00pdrszssa30qnfscj5kcxmaccn9vh6qdznawfh5mmegcl3jcg5s66z8mz", + "bc1phzg47w5tqrqwj203ulrdla4qf8gf2ln5qxqznv0vq2fthxgtj9zsefgeam", + "bc1p7gaslfsus485pqhjg00s2p7vtege5nnfeur9hjjxpc43mpqru09shwxl5c", + "bc1p4ta9p4ss2n3gwq0jkqatkkmvzjk22f0cfa70qju39mdl3an8jm9sw3g5yk", + "bc1pucp53a58a0nnu3cka7zrtztzfhl3mrn96lhg3vtvugx5csy6vhtq2kmr0q", + "bc1pakk7xpeyvf7qgwynek3stceckz3u6auy5qgvnarpu0s84m7tstpsz9y9c5", + "bc1p7p8m7uamuauxgfprxng57eu7mtn9a4hcqjzp4mad48qzwh3c23rsgtmsvh", + "bc1pyy3jgpdezh66a2n3a5y032k0fvpvmmsfv66ysta6gs2fucpcvsaqqe4pdl", + "bc1pldfenq6d5cu85lhv5wa3m6zj0p9manqs35xmp8lcag6ymav2qk8scazqxx", + "bc1p279qam2pg64qavxucxf0zjsxj7ujuzv9adaxvp00zet6d305gjmsq8v34s", + "bc1p5tchu4eunl0wd086l4wc5hg4qxd4zqvjtf62x3prqpnnrpckjxfsd83gx2", + "bc1pmq8km45exxzf7uw4mqpj36hdxgw0r0j6sd8vwz6k0krqnqw89qmqcga7sy", + "bc1pdzr48l83mtfu3rtce0c95rhfctn9zva5aarnvhjvxgpnydk0867s2t08z9", + "bc1ple6kxeasw95gdwqe9qlzr3vf96mky0z0ern5n6nkhkzl6ms4s2ds5sffyy", + "bc1pthztsy3yrutq3md56garz7a6wmshj6rm29vpd423j9t58e9ahrgq322da6", + "bc1pu4qh84qk05zd3eyqmljfqdmpg60xfcnnq8ln0n8wxzz3eq95dwtqp8t42f", + "bc1patant06mxlf4a7azqhmtfk0zwas49mtpk9zjcj06ukw7p22nrwhscytl8p", + "bc1pwgs6f43wxryqjamep4jtwpwldkxxpd882q2m4k7txlgsg9yee25qprc6un", + "bc1pc9uvswf2z5tlj3esmmpz8yujxdvgt38m7veddjsqex6m3ctwk0vsdwyfqr", + "bc1paasggz08as7324azf70rl0jl2d7zzj0294mxqr209tldgxn6sw9qzp5fdd", + "bc1plnqr9q647dfgj3xkct3p4hgahs5fkjpduxe4luj9utznwemuszkst439vk", + "bc1pgvv94snv9zvffwaje9t36ajpedkfx3famax3cpgdyqx7ludxtfvq30nwly", + "bc1pgkhf3qqhyvk2p23xpn47zn2l0t054f0ce6wae4vnaz78snlsracsy9m2rk", + "bc1pfpu3j3hsaj40kzvu2jekwmtdqljjfcvmtaqq40mmntqv6y95mwzqfx00ke", + "bc1pt5kl0w8smfnwr0jtel6nyraqmts3m0vtrvdtgm7pxxdlacgp9tmqra78ll", + "bc1pxcet3f9qjlgxrnyygqeqmhqwlmwh0e89l3hwtpm0n275cy7gfldsh4edej", + "bc1plvtns5wp6s6mqlpk379uug7x3nk38vl6e0el0yr5l8zlms0a3vysvp793u", + "bc1py6pjqanw0f7d59c2wrfru64rmevrurh8n9m5q6jtwqc4k5r04nrq6p0m2n", + "bc1padhp8c34hjj3ha58g5mxcav0jxgq0xakzmlfywc88u8xrwts0nkqlu7q2t", + "bc1pqslhzlxmkl4nkxg3dlkdwa8ac3pwlxxxl4jpx7h8vg9u3rhp2tmszc03eu", + "bc1pn88veyuugut72pgh67ge05490gdlkeyhr327lusdhys53ryydhtqg3xz9g", + "bc1pm3szu6pmwj62l8zgxzaqca28asm7jkmjvrgfd8yml43ay3dwe20s3vuu35", + "bc1pn9pg37mlu5xrprr98ws96k8xeueqrl9nlwwzgz584k0lt8hvnc8qg0xu8z", + "bc1p4txw2zy9lmqxgl33w5ck7v28mve02nels6pwyg7gnysr44n5k6hqggs03v", + "bc1p94nmjnpv9dv5hr5a3g7weuqu9ufr8we5hnp06d7ww23n3lwqxrfs0gyrhn", + "bc1pdrse69fmr7ywtxett38lx7e6z620pccmk08964mx8qn3cnh4xm0sl476u9", + "bc1p44d50s0z9ce397fgd8gc2xdt9rkjy2xmmqme9fvzyeey3rfgyy6sqvzpv3", + "bc1pdvgasxvcul0dgg40zv5mzjame27u7fhuuxd78eattgvpqyzzq6pqrztdw9", + "bc1pzz79qth3enc5hjtqrgx5zwj70vykqed3h4plzq96z4g7u6l4sekq35eczw", + "bc1paf2ucxsjpqd592tcjmpxcs8w4st9svd824gq5j8f0elszr400e8qrpmas2", + "bc1ppll9w4w7d9pqsfhczshzc07cdle7eg6dghfe63zrfpmzskh97lcqw9n43j", + "bc1pryeqf7gsrfjlnkrctlf7ctgzqcnmslpjtw4wn0q9gesqlnyq74tsn4j525", + "bc1png5e74vrvxtkm2gw4kqww3hv736mdvwcvggvtq398cvse2t9k4xqqs7jfp", + "bc1p7s9em5lyr2ggdluz9rw7hap2sqyhese640w2wcv7tma4ysmms5xsj8xtsg", + "bc1pwzz9fkjrrxqse7p2y0fakfr706yd5s4k496lh6n4quh7nkrv0qwqnwaajs", + "bc1pzzapkhka333jes7ff40kgzwly3uqrzxpzyxs94ws4xcrj636mtvs5jvn5c", + "bc1p2wdhheygmmpm0uq4s5kvmxg0e7uddq9y8xsc2s3wetd2wqkgl36qr8wjz2", + "bc1p3979jrk0jl85k4q9jnsjer5s7z9vemxp3wm04k5atf9rp5qnvskq5wgp9z", + "bc1p6j07vhkeet3vttw5ajq7zd82urlqhqacv8uvkkq8qqkm8w7vw38sld6xqv", + "bc1pv0wvlrhf8txftnplrw0tzwewkdnysa7er6r4nwkh4ckr2vhdzfwspgs4p9", + "bc1pjrp447865rldswwwdk8q3wz2htk9rvv3mxpps0uw8sh22gmzezuqwfr42n", + "bc1pv2vxfhag9mqhfe7z8dv3nu7ca0ufwqxu4jf8kkqul8dq9hpa3a8q60wspf", + "bc1p87fyuyacjkw5gshxd3nl2urgr5wen4ldhym3dw8ghqyfaj3khnkqswmpq4", + "bc1phhqmgpy0lcnq67gdsfnykw2sezxgnumgkwzhej89fw3szpknv2vqr9yqpv", + "bc1p5a282cgjcwh06ysezwqe2mrql4k6lh0zreephdm2v6kslu3w5ldshfkdqz", + "bc1pesrgev5gqjfj83rn2snhzuduhkymhvw2dth7g9r4a2wtsynaze4qt2ka0q", + "bc1p7vnsqd0mml459zd8yj2ldqyulzzac6427yw9tps0y6p6p9lh08hq6rf4vu", + "bc1pv2uzfmj59l8qxvexkavx32rg8upejf22jfnjwxt26n9qgkx92r4qflh3ue", + "bc1pym53jhmerteca9fv0shq4nytfxkq4x4r90u6nd33mnww39vqq6hsztt8rp", + "bc1pnem4sk8jpuzz324u5wy2jwc0j5amts8ed5au8uad5vgzukm93t2qh4dhjx", + "bc1pl0qyf9chmkhvhvld6jcsgr2zcl8vus0e8q27xr5sqnj6ar4nj4nqexvnye", + "bc1pdm5q620fmem234pxwdmhff5tllrtc4vue9h2lre06h9j2vjywu8qvr4qry", + "bc1p2nc0jxaa47n9wfm5r3tvjtnmvpd4nvjl3w0kds8xs05ncecyj02scrdtrt", + "bc1pu6gmf2wsedsfucr4s7a0vs5lmdc02qhy009w2x59psvmzkcl6ytqwxdmj9", + "bc1pmd2wmyqw6a06426xscuq630hxylvz4ndceqssn0tcxccpvrtf2qs730rgq", + "bc1p6u07uhdncad7cslwfleuy7gzezs8whgxqtlc2u3zvxl383ckxhzqaxm36r", + "bc1p9fa34tuzt7ytu2hl3vxhtdnjdhf0z08va4993gfph5khdlq0nsvq24y8xx", + "bc1pcsnejmacshmywtcq6xyfra6awwgdgkdelq0tk4aa7svswfydaydqd33fwg", + "bc1pqgqlrg5k5wgjy0erjl222p6xdp0c633japrvpadytg26l92wachss7aynr", + "bc1pdahe29xget8vkkc3csspd67rvgfsz8g790ua3wxzzxthdqw7u2jsvgejka", + "bc1pv8trdrzfn42m0p3mzu9vqgsewn9m4h8p5vqc0zdlmy5eaq3xgnjsknv00z", + "bc1pr2wf3gtuyyaqwnwjynf7vx4dkp7k9cxxvq9gexm3trw659z6sm9qxv552j", + "bc1p9ne2a5n2chtn7mxmhkc8hd3ssdfsgdtncre9572fcc378hxe5t2qzaf60n", + "bc1psmrpm3yvt6x5kerckdcrrxa3paxnhg60ualeu8lysx46jn2y7ufqeuvgac", + "bc1prypgrrs5g72u6aqkhvdj6vyqsccf0yngf2ea9pjqhcdjeggl4x0sm80nfj", + "bc1prd53e68k7cn36sykzhr39w9wvzjdarp04z3cdc8e03ysyv5wu84qemxqml", + "bc1pn7zt00pd4un9gndhf8g20dylcxlv37dkgwr646zff6du22835qzqzpyk8s", + "bc1pygl8mwc5wp8qrmy4x5t328fkf3asn2ut45kmjj55ryz6jkdmtmjsgc925q", + "bc1pts30ksfljrrmhjs9n9trqgas2hfg84kfgfqd8gr0vgmlg8dsmkus9l4a39", + "bc1pd32p5k5hku4zgul87g7yd7508gnfum3cz40n98xw757cexrfhdlqalsj5s", + "bc1pthzqpswt6atvwdt390g00wa3r0sweufrkwwxe8hrdvzchd8zzz6qfjuc0y", + "bc1pae0az65zqx5cthuqdd7vkgsp78jtvp043mx2zpxhy58pug3hgyds8llmmh", + "bc1p75wz8gqkvp27qfrj74glflfxtznuuprg5gpv8fcpjaw07mws700q0f34xn", + "bc1p5ydupq8pg65gfc9vyh02jgv5m69mvyu7l8amrsj0mkka99kw825qnuqcaw", + "bc1p4p78nzltqfx70aemdq8nfy309l5em4eqg9966ucspsx0wne4q35q4ka9nq", + "bc1p7drvn3pa037h42u3lnu0p4hu45truf63gwfh24jx8vnw6j9j0z0qw57hpf", + "bc1pntjzgu4y3spw0cu4pc4rlh34k2a7kmhvujzede3yeal8h50cve0swau2pd", + "bc1p8vg2wnxfd98l4s5r7j6gksmfxz52ltjqu9rkxh4ymey7myashm3qxmnl6e", + "bc1p8eegxt3u5cx9wxw4a8vdxf2wj3s69tvsrquy583xslx3z6css7rsfhul2l", + "bc1p0uf47wryl0lzn8znwmg7ksn888hncdpw7fgy3pnw9wvumncq64es5jyz83", + "bc1pg7gdspa79st5dn4jqrfkckm7h07zkkvenmn7hu4vzm3jwlaqjmgsqn7tt6", + "bc1pxts4gf5nk4la4332w6dufe4phqw7cadp8r6l09grlcyd990j3c4s42jjrt", + "bc1p2ehm7ahdk2xcvu0m8jd8mnwy9qfpu9nzg4kmjf74zk40vgv0gyysgmg4xx", + "bc1pd9y78eaev8l5wtaz6acrzv36qapllkdmsass929kmqcgc0deetpqhe0nh4", + "bc1phkqrn97279gl37gvzgyh62k4mcfhkn5hn4jg5p5drn22r9jnahks6mme4r", + "bc1pndn4z0zm6vh3vuash0asxgxv8ruv8h9zz6xcnsmnn9jge0h498zscexcfx", + "bc1pn9fedyflp4qk059de004yxjnm3rjqhdp80nnmm43ahe5gd53ksxq562aye", + "bc1pp3tscfwzj4xjp6kqfhvnjuxft2yx9g6mgevqjd6fk0fn3sny6vhst8jvv3", + "bc1p0z665f52430j9glnh55yezufrlrvfvwyfm2ayafdcw9h77ftzprsyf50hs", + "bc1p85jj8c9zrm2re6730rasgc7vzwluj7vaahljkp8py0lwwdt0chgs62rcar", + "bc1pamscmx87jty7qrjdtc9vdpglxhmq43vzu0xwlv03nyfl84xwuvnqldzyxc", + "bc1p64fafqqj2s8qpj39rhyns0tnem0puc4pqrg2z0j9e48rl9z4kcrsnfy6v9", + "bc1psvzzw3zxw2qzj4k7cs2xvk9jgfk0m73c7s9zrrq98y3zptk26t3se8qp3l", + "bc1pa0hpe5lw77p8qelpvlzerrta2f7gug2tquhj8jp46wy5h7v6kphsjdl7pf", + "bc1p6k00n659hfc43ehx09lwjj6d0z40t2v6fu7dmm52vk6qdrvffw7qmwhtpz", + "bc1payk79lg97gaqqkpegtyhdq243feqevadk7wza7pppt323q8tdt5smhruxh", + "bc1p8xlly9pvar0ljn2jsuexjxr3zqtld83a6eerdftvhf63d3kltyls39r000", + "bc1pd6p9pr89eg6yccf44myellez63nfzklhkp7qsd3n0l8ajrgyzdqskdtkvu", + "bc1p9kyvttdyakt9gqt0apa9w00whd2nhdgll4c9hue5alq2mt6hc5eshhpx8l", + "bc1prfgd9hy3v8e2lwr0747dqlwg3vhr4ffsv2wu8pfsahdged2lhgmqqg2509", + "bc1p3pm80x5zwqkejdvncfcehn38z296julh32889w9u5shm2lqezq7sk2cge2", + "bc1pymmup6egavnvyxsz495gkx6lxxdrvp7hh5nf4t68pwjz0ezyka0qhgycns", + "bc1puaefqtgc9ht7a4qwp47jt8yyk5td0edugf6p83pqhqtrg0yppdqqrfcg6g", + "bc1p7gymd578tup4vpzu07203tzjjdyp5ryfkszjztt96prdaqj9sw6q0jfydr", + "bc1pvvzn08nyem30q06zg46svdwjwtkqlu3p74exsxcxzu2ulwuvmjws2lfshy", + "bc1p7hd9waqhpm36j0z0wyz9cz32cf37xl8l6x6tpa3d2znrray97qhskrfs5t", + "bc1pezzr4awu4qycp7ugygnejddjjfl490rsy03trv4s79nrcjnd4jwqtrd7us", + "bc1pc88sw2e8kgv2hrtuzqrwl2pd8gzk0r30sjvrd9exauzshqweyuysylengm", + "bc1p3el4aukuqxvh55ev8sx7ju97xylkmfyhl9ez2deux6559vujc87su9msyn", + "bc1phme3nevhad3j9pvvdj2e6un8spgjaw5dn30vhlgcusd4n3rc5yesjme9kw", + "bc1ppzezuxcx799p063sf8q5ehgyz37rzxn4p4rm2h8zaq0p4gs9pxnsw2c5wr", + "bc1pwkvjffgxepslngkf4c53xuufgxj09pjk48u7w7r2gua7mqja425s3txgmv", + "bc1px8ggeqznnn9fp8m3yxr0a7a97lzcqmm4g3mfkvm3c0v3xknuf2mq37xr6a", + "bc1prn46sxh64em338vveqy2dkrm889ue9wlqtvmqkdxlzdmk6sjmy6sr4qq6z", + "bc1pc850kmjn2yatgklz3g6z6duumxrpypmfwu9rj8f0yv8ktavq85fq0afrxa", + "bc1p936z4eej8ejrmqmrvlma4tr5yz0ztjrgzegz2dngx87d2cpp4gsseqcceg", + "bc1p3u5jqrf5rn3j42x4e6pw70up3nevdvp93zd7lhe3qmape7wm04msyfs0lh", + "bc1pmcu0h9jshyyf6zpv67hwgt8k3gqmc3dq3t0jkgtfgqer8gyhgp3s2e6nna", + "bc1pkmdqukg6g2876y6m6ys6thkavx20cwnffe4wtc99veqmtkax8cyqtz62hy", + "bc1pzvzflyr58ydg76t9w73d35qts6fqnlw2tff3hckd2kzuhtenjncqdzfsel", + "bc1p32try6qm0uwkcns3h3gjj8fh6t9hzyv3jgavmqxa9etu4wc5u46q89zp8y", + "bc1pxzt3qclr6f6z9p2lglhusxg96mj0gzhh2s7k6fp9wjedyxzrh6aqz0lj4z", + "bc1p4sgq82tgzdvfhh0m2setp5zlc50t73l62prl4uqlmsazwjfa6hnqmkzumc", + "bc1pme4tykl4k9jrpfm0llyncrq0y5q96fecgyv8yqmhe8gs4ez9vuyqhsmelj", + "bc1pnknchtj6838jmyavy42m9sm3xa7nsh4gnnrtchm622mckfg3w5gqy5r807", + "bc1pt40l2s9g28k0egagcuq50ffwk0uy4ec7qdme42x2sfudfcvz33zqum4nx0", + "bc1pca4mjeyf7g4kxdyw04ephk6cvfefeuagnvpmgn67vpjd5jfktweqepw68y", + "bc1p36eqfz9jgx92s7phgkhqdqs52klh96u9sd48t57yqxrqgxlntrxslj7ecr", + "bc1pfdv4zah0qekhtcjk4a66ys0f93jgckpnz0h3f6ru9xhmesxx88jqdwevpy", + "bc1p27tdkypkwu507k6ycaau4jxv3l3xgllatjde0add9zg9ggcxanjsg22x6q", + "bc1prtm2w7cepkwmy22r6gnr0jm85j7f5057c72akq9s23y5j0u0x3gsqdn85k", + "bc1p3zw4l0pftuchqtejzfn3serxejsu40dwrudd0pd97z2frre6t0uskenfhj", + "bc1plcjdh42rsmlr8jfpqdpp7fy54mq55g3t2qmhc3t09vmx38gw04gs7kpmym", + "bc1pc3fguvq92ynu76mp8q8lnpq3tjyj0kysuzqxvc94xc7ugrg7lj9stgaaxd", + "bc1pk0kenqqmyjs6vjj0s83vz4qxjz8gvmw64hsm06dasqqscp437syqsq9uwj", + "bc1puq7mj4aj07sa45zkue0wferzv4gktwf6uf94rduvfe03n4a3allq8u0w48", + "bc1pz348aheq78ra8jeqeexwwgg3eafuh42hs2qzxzyrw2qy2te5806s43hk9x", + "bc1pxz800mgfr4z88cp47hsperhjwejjae29j9all9s6zdcfnqks9hqq2y7frh", + "bc1plgjrrdgdnga9086y65qhp8utjylmlrufyca3y2myjlj5k7kk2z9s0j6nqw", + "bc1prqw59wkzdaywtcmfm0493xf7uuffch0eu2u34nxx9xqxeql743ssmecaqt", + "bc1py3l48h6f3xld4t36ynxve8el9mx280qn8gugphrxfesr9ag82qzqnvje82", + "bc1pjn6zdnx6nk88dqngvd049v5c9aqr7kaha98re6mvxvyvmhymzlpstl6ydx", + "bc1pn29fx75gshllqdxtq4znzlnjcx08au0n4g9kpfgs2mx5al5d35uqd6534l", + "bc1p0ez7tw3hynmw0vy06qylxrqq78q80y5nf20pljfe0f7vjxs6jnrqk22m5f", + "bc1ppejuz6jlcxse5p8y3896rclkx28s7hykd3sukwxyuqaswtw2fm0qrjn5k9", + "bc1pvnsjnw7jzr67nagr626cv735eyatg5gpjlzj44cxf0snzu5qzmuqn8fyrt", + "bc1prx9puekpesuc0vgnrujaa7wf0738p835dy27wppsv7vazl2huvlsnj8ky0", + "bc1pk83kc0mnjy8tfw5szx39dqq9434j5fyjhdcm5pud2x7yfq63zw5qd77g6d", + "bc1p0aycqhmm8lvx8ajcvly7qgemr7xeglpz5xqpns8v6c4lzjywe85sh0ljsd", + "bc1p89lsc4mymhl9jv6vatqanc3r9t428ajyq0fkq7ntyswz2y884nfs5hyzkv", + "bc1pt2mswkg7stc80gwmrgwqdlpan5ydzyna26fcc3echy75cdn76a2s694fzv", + "bc1pjv9hcp8urcj7w3nfyxskazr07nxxultsz04qqw8zs0htzg9ng6jsvmctpe", + "bc1psvgdp9mzf0hydjmd9lhm5p76msugqpsv0vwq5pqc85l6tflstulqlwqsd8", + "bc1pser2fw9t80udswxvp2cn0z84crcu3ra9gl3anf999yxj8j9tfrvqphg74z", + "bc1pgd4eahu2sdl4ck87tnqgyzuxsuyduqa5jzqy4r4fml9nuvutv0fs92e9my", + "bc1ph2p5vf2w2nv0drzt7qag5a065ffz4dqgygrmkr800dpltqrlyxuq3nm7zc", + "bc1pgc75ztytunpxy2nws5gq25fcq6cz3aq7fauy3tu5lyuvzzlkcfqqmvx3nm", + "bc1p86ucmj7ntrsdyxcq8s5y62z75pve2fuj2gfk3twcwgs5lpd3a29qjsjdsj", + "bc1pypehlwssluaymleny5a5008q2udm5dcdqnl7a2hpz7wm9n79wcjsfxrjlm", + "bc1pky53n5cyd6hyjhc6prhgpy0qeae7nffm5f9hm9k4ddm8ef80et4se7rens", + "bc1pac0vgjs98z3rdaxxfgg8wqpfjxtnr3q63xxdwezcms0u83yffpssdq7d95", + "bc1pdjtuwrpasmg86kdd2ht9vu2es9v5vra9r99hgn4wwwgwxrn3u0zqct0qwg", + "bc1pek007rwgwzz5u3mx9rgvvj5vl4d3nz30n9xvg74w3k8m3ckj60vsefawlu", + "bc1pg784mn02fhmzrhrnzaj4mm3jft3zst2xtzg95mkzef6skd69ky6q0wpsze", + "bc1pl4yhejw4qm032wdgwjrwu2ys0nlyp7hgy4448uqdyu6lr97h444qs7y5nk", + "bc1p6suhhzsamd7hq9zhc0su8gj2pe9tr4cxfwjrlnfm6mvlj8hmfgmsxzyyqn", + "bc1puptdtjex7j9dajlvp7wwxzvcd9vpxkgn9n8a9ds5vezdzw8a9hesa6hyjd", + "bc1p2ntelz4prdrup7wdanfaemrrtyj7hhtjasflckxdtcmrt4wpzufqhwyep2", + "bc1p842z0cmp09sr7pgsmjptgajk8e50f5fdy7hmelsf0qfr43x0zldq8q2hv4", + "bc1pa7zytyag2q0ht5p07qncn96z0zs0nq8uqkpsqhcwxmrz56nz6h2qwjn9ud", + "bc1prt7x7pdt2y2fs89g5svg89rk5gnufp7uk3vmmf8mc56yuhftjvhsmqqsf2", + "bc1p96tzrdsrp2m602lr8vkjfhq879c6pf4rg044z4ktyrz8nsq4xdkqjk2qkh", + "bc1p7lu3taps97xtqtekwzuuqgrrtrf7fp0x0pf8xevlcuga276ptutqn8k0zv", + "bc1peneyewhssellc08amjh4l80ugvanzg8kavdqmslg0ywnvhpypyvsk0a35n", + "bc1p8e0rvee9skzmsgmcazn7rsx93v4s6jxezdv7mcx8a69dt7d3updsp5cq4w", + "bc1pxlv04qjlk2f7tn9x322w78vx0desx0eyhz7ch8a695h98huyjt9scps3zg", + "bc1pjx8ll53vxcy42vguklvttyh3a70p0axh37w6cuylq5vmvtluk7dsw55uwr", + "bc1plrm7amwcf3ejwmk0ngwvtyqzjm56lllg9xcuy8cq686h5urze75qpx4twj", + "bc1pg5yxfggr8s2f32zv2r9trqtudt9prjrlyjzdqnxqc3wl5n0z8awq8zk8n6", + "bc1pfgh65w3vqkxysqd3a7ekzgd4xd965uq2gpk7crk5gskzhjrnc26q3pq4l2", + "bc1pekkl86ga5ztuxhz32z7hfllr3eztpluex6ftqrnslfh4rnqkz0ss5lee6v", + "bc1pml2xj4jf8k5u3atdghmf5y0hw9c76vrme6kcw9htp60d6vrnq4ys59fd9d", + "bc1p39xwzfmjla4a9gmupmpeexm0jqv8vha0mu9yfn594cc06j6c8jtqvnzxmp", + "bc1pq75xnlhcjmkege3z6xtfw0l807z8kfhugpvewv8af0wlf2z3xrysjk0t7k", + "bc1pxrplzqy8mfr4qc9k44lf8ep4lv9f5zu7kavjlufdktm65kggjrcs2r87jy", + "bc1pp6dyz7urx2jyr56wn8g9a3awz4svghq04hvqu8r98afryfe3slrs2fs4ad", + "bc1pkezdcadd8v9tmkgycwqk9z8cwqanj4zmmdpcsjldx4fwnm5498hs3dd7s5", + "bc1p5t999ej3a8j8gm7hndef3n025enszr6xcy8h3ft7a8pq3x4kmvsqrwg009", + "bc1pqqxj78az58zzx6tl5z6m6ghv6pj96yxlwt7weekjknwc4xtrj6rs9uled7", + "bc1pvgw0tjmayznfazjh3l5zxk76qrftnyqm5u3tnke0gc6daww7cjfq4cldw7", + "bc1prammp4xxm5yk0p347sv5x0d007jetzwpfvajz2wgz4s6uapxxaws99h2yt", + "bc1pd70d099a62zvpmtxq2pmfsct4nq64f6rcnh3922c53mc7zryeessrqht4g", + "bc1pa9pejsupqg9l5wr08vc9xtjzm4ts6x6rfaqrrwm7areeqdt4ynpq2h94fp", + "bc1p2lhm0jahpjp2aqpft3pxajc34k6tp7363q6vu6c9cvcml24pzj7qjn7ace", + "bc1pyen6pvn7gnrxzxq5wg39kdwq2hjh6xvzp0u4lr4f2rn2emmrt20qcvjndk", + "bc1pvk3yfrjq8nuglxdkfk26eqk7ccehtcfve88alg0nhzp6ver7yawqmm6qcc", + "bc1pt4j2dtt9ak8a7d4w9etdj7zax07edxnkgpwgz7v3cx3m76vt0nsqfw0r4f", + "bc1pevthqu9f5eatarpsjtv50czfxdxklqlm8cegfndy86szerzur30s7pj2mk", + "bc1paf7uge046txy5jh0d6lhj268hdth0ndnwtkv7zyd7sl672alphuqmmwcug", + "bc1pckkjg403057elfk6usrc3nce0y56h69dtzvyha7jdhww45yw677q3nulf6", + "bc1prpk5er6yx7xs9r90h83qelqu033n2z6txy2v4nq2z3jxwkp0k8qqsfxrkz", + "bc1prz3ml3d475mcaqpldlxnc9nsjl608k4h4u7mftvp3shuztkwt7tqmssurm", + "bc1prgv84u3c9890sjjeudyz6xuwz9uksl32dlky7pxpw387kl7lmshszneneu", + "bc1pqh5m8r6uxn33l2f3jkl3ckg3l0hmyhyxckve29zseurn9xqc5l6s7lx72z", + "bc1pj7t0er455jps5kws4mx303yh6qq6ysvqusfn9ku5yt2c6tta49kqweltgc", + "bc1pvuwfc5uthqc4lz6c8c796ujjvahngar959yzcsnvhhr0xcmx3fzqc6faqx", + "bc1ptcpwz4zhc36326g0ccl88t5jnf6r9h3l8rmr3hmh66dzcq9d6u5s4n38dh", + "bc1p2gmxl4t4wpl2x7lc63tj8t97q006hj5n7ku2a57atfush2g9hhpspp2er8", + "bc1p80fjfjn4j2hr65ycxqvu9j8ucpza46mp7mkdtgx0x24wymwsm46qjvgs5x", + "bc1pkxsxg8tvcc7vnz7lx0mhpy2uzmp060h2cvnxkvdejwdh3ra4q60qhyckxm", + "bc1p909zs8vzwxlpx7l39ymckdyl9y5f4z9nngpz3jy654rlg2xhz9esf0es22", + "bc1pr68guve757q2mj7rd7s3rq2s70f678gy8v2pn5fsgh45eqlkchksn7eh8g", + "bc1p4pcz7xwl3v9rke36m9n0mjgnx6d9wpszn9y73wtqsp44eyc3klqqhlz422", + "bc1prq35uv6paq2uptlwdpgvqsgssurn96079shfxs0lrw34yasdgzzsz76q7g", + "bc1pzxxfqry4j03p5jtzpgqwjdc3etw55p9s92475m6czg4vgtnq3szskpj2q0", + "bc1pdkuc73gp9vmetjss8spctwfm75tszwflf20un9tvt52s9cz6p9yqzlcyql", + "bc1pqujcuggvue5umq8fp7z906xcpf4pxj4eh47m7rfaw9yshr72ts3sjktkk5", + "bc1pmgs94ly550mkq58ff57p8dmhvw9edfj2uts0kgg9wcw00aec80vsdyyycn", + "bc1p976vwvrh3s8j05g6vcj6twjdqaqc9jplg858y0hyl7qtjnes967scw4w7f", + "bc1px7uaf2t4mzpn2pwnreduzqa04xmgtj5sur83z4cakrqsqmks6nmsh3a5mv", + "bc1pqqq37jf6jmfajhkzqvs2qawej3fglkqwjncnsqagcer40u52q39qgl2llz", + "bc1pct0ssr9h3tcx0mm3nddnwy2u3pnk6xrzthntap5nundt45wj9e7s4tapz8", + "bc1pyls48dcgwskk2zm5khk7gnmd4hvkqrhf8fh34thar448hp9qwwgsq2cxn2", + "bc1pjjgd27veslqs78c2z3j8mdfnf0ttxdfpjpeec38yud6aq22c678sapa4g7", + "bc1pxwp4hp4j7r497nkn62rkl5gm74u65473vaz4tnw35vr8kve999kq4mg3l7", + "bc1pamerexgp38wxlkph07ecne9qgg4wvzm7y49dfmxm9udk4v8aca9s4p0a69", + "bc1ppyx26feeyqscknkyw92fwxdx9peagklx4vf3m9lvfts7x9puef6qw4zc9n", + "bc1p8e0j4fuupatjhg6tpz8ugjttm2z2rc3scug485c70nk936dfxlns5eu2zl", + "bc1pjf2kg6x2sdghu7j5qldneufhrp85r0kwdcvrfml9sn3w2kxxwk0sc6nuk9", + "bc1pnw3fces756eankklvnrfu3ur8n5587qeuq2gaz0gvy6qegqdp93sfv9tjs", + "bc1pv5gqz5jgtu0ecqrf8yxn89zyw85dfzek7rw6nkxuyentsg38zdxqvauyjh", + "bc1pxukcyqw2n3ugmae6ssxqx0g6wa5sx48zc5rgfsunr3f9str76lesscufv0", + "bc1ptu88x04emucx6cm82f50qhnn3c3lc7pqhvxdgsp6yf2n5ttpgpuqudqyca", + "bc1p55emzz47uekxadry8df8tw2clfsrzgx63zd0fa3wl2fjny2j7q2qfgp8kf", + "bc1p4nf6wrf0e5vz20nu5zta2qywmquy92c6rdvwfv6w9cqxw8pd87rswezh0j", + "bc1pldd0ym4et42jxpt0sdymxfd3c64xlft2agw055uar552y67ak55qugk2y3", + "bc1pdj2r6acfxvy2qw529gfudzallfegtnha5et0mu77e7k0qe2srjwsg2asvx", + "bc1p39z3vmex3r74z5hz55hl4ylctnuwyae0k35hl74a6t2yh2yr5y8sa9rccr", + "bc1p90lqnqvn7n6s68seu0m2fh5tzcqevtxuf35qnkmmgaemd260p2fqqdkm4y", + "bc1pu0hhpgr063tvutn04cmdqlnfpdelhrdlr0l7lnd670yta7r6rahszrlngz", + "bc1px3akqddde5jvv66pjz0vjc8tkjenf2tfjq0kh0tl6kz6t646k2gq6dej4c", + "bc1p8f7gvq6f2hnwl5jvsv98fwrdy0cupl8vx2gdj22846y3xl560mgs60v6t4", + "bc1p74he96anru325pnked8nqr8cwke7sjwq4dldy3ttwct2agfkv53sutcrth", + "bc1p92x7csc35jmakudpuqnc2y8l4renxezjnzd7fw97fjdpfgsqa2lqsghdt7", + "bc1p408a9n0hxnx599eu2s49mkws8z299933wk7tu0572dqg8kc6cxhsr9d2zs", + "bc1p5cyun46rjt2qu3r2y5q8pf4jh08l4ut0dq33rl8am9yaattn65kszu877u", + "bc1pna76ar0jljn55s5c7d4y630v965p7xpswxsj4d9y0jhg7z6u5jlqjk5vus", + "bc1p5v6scjv5y0kx22u0ajw0szpzzgk5f92egn5e4ctyfwkar9c8parsqs0772", + "bc1pz8hce8ccuvmtzr8x4hellcgm8e73y8vx5sxk2ud4le2us4hx6chq7ue3cp", + "bc1peekz88cqn544md2pryysxsa856p77a25lz4n97qykxgldnzwsz4s0zmacw", + "bc1pw6lqys779evc3zqkzvmcefs308qhh5pxw0njyxt7xd7hmsdygcysmj397l", + "bc1pevr23jsv2dljug2u0nfzjt4rxaz0efls8az64phrhw5e3z4x7rescv8njy", + "bc1p674f67srvac3d6ame7jpwmdvjggw844nqvjl73pch2cllvnluthqpkjcj9", + "bc1pckssnmac08zl5ecle8ekysxdrxrk7dwz42x9xxh0a4xmajfxfgqq0z5tgw", + "bc1ppn602zyv95d7v3j66evm09sa3hw80z8ukehl68s0j4taavwfp69s78qk5l", + "bc1p39r8vc7g9mteumrnkugt67cy6ykcptd5u36gfdvfnwgkhgn7rkgq2uzqp4", + "bc1p4p9gpjhsuutt8pnfk2krh3z6vl7373hpcxfqpysh2j56qpfu6r8qmd32a5", + "bc1pl7ldth9l5jzpfvclthe3qdvupns2jdlxvj827all0lstrjgg6susk4fnfy", + "bc1pxs9y49mleeanqrlkcvpm0slj8rzg6g5awmv96nrej3yxqgql95mqhg05ma", + "bc1pg90dx8d9c58m9nzu92vgkpq737ya837za0ck0a9ah82r3uq6t08skunpj6", + "bc1ppuuqfcu4nx7jwag8kjy6xawfu37zxfa4735qyncxju7a4zsfd9xsx4q50r", + "bc1phme9fy8cgy0xmslt0404wugssk7a30m42dhjpq8vcz8lj5u6vhhsqwytr5", + "bc1pqc64dsdgw42jz3nq8xu2kfveng6prz6ukuptmr4hjjw0azq7rtkqac6mdl", + "bc1pvf84ktle28mmjjgx0l7y86nwy24h2awh5hwe4f8qhaknm7wplnkqd8qcrn", + "bc1py5uty7gxvgzj9p4gtmu66r2vkg03nvr2jkdnk5nm4gk3gctpadyqg6qsjy", + "bc1pufazktfl4pxdz9s4qnkhrlgjjexx0j9suay549z4gmwuy9mqzhmsysekeh", + "bc1p965f9vna4lp8hmm5ydgrxa44fvsl0lrszwl6dp33temp0ltrfvvqeqj0j9", + "bc1prc78zjz23nz8zhpzjf3ueme7lh22vs5wpm2m6hhkkxa5q4wyvulscgy9hk", + "bc1pgnhm6322kf7p2u4pl2quyp6vjqjqpdukppew8s7ytss08nvsp5xq8uu6js", + "bc1pcumlx05nunea3x5wculwn2sj5vf9zxr56yn27k0t5jmrts735r9sxgc40g", + "bc1p3rusvssnklprdpgzq4uxk6ymh3a96khj7ju7mhh47jccswxr8fqqtag8ef", + "bc1p2hy9ywhzfnwwae49ay8ym9kpaf0stjnkcudn2sv4rtdkp7e6pxqsh35ydg", + "bc1pxczsfqzlaqfxvp5p9cnj2l40ls025p5j2zzwrqs8xe7p22ufj3fshkflmv", + "bc1pgw9he5jcwlh5k27plhwewem9tvghc68tm55v4vyce6lzswyleg4quatjxt", + "bc1pd9ael9dfa0lluq4k26z5r386f5v2cv5f243gr7esmmdxssvu2yhs0zsk9d", + "bc1pz3ghd8dnwlx49f060a0uqecz2klvdqaxsxw09gjktmqu0phcu4mqsfkt8a", + "bc1p3yh2zmuf9sxe72wmd6xj3smk0mgv863q5j3hgrd32lqmp4p9xnrsk9k4np", + "bc1ptxdwnkdtndm8hcfnjkg7lle8v2s5pc9cll3g88vjv65tqmyjfycqnxt0dp", + "bc1pj6mt5ay4kq6sf77dyzaeehqmlpjgynw3ul4dxzguwmfxdemana8ss5jrxk", + "bc1pwr6upzv3d4gpk8lv7mmx7qj0qlgcs4malzr0a36t0a4rr8ev0krsj6ggpd", + "bc1p7l6q9k9yrve5ervtqdsunqztfnddq8j7xy2m73j2rd984ves55kqwc9m68", + "bc1pznmayc0wepu727yzj8su0pe2gsude2hjukjzu2xcuvavll6qhctsy8qrxu", + "bc1p55nww3qafgpp2x6sl2mnstgwg6laltktzy4wr9jlhmfmhsny6g2sea5ggh", + "bc1pjc475x4ft8n50wx4hceau6a7x5kafn8203fx9zysper2x0s8vr5qlgejdk", + "bc1p97vshfq7lywasvs5gtz94k3jrrvqx54hd4plxaecqup3vk0t06nqafa9tz", + "bc1pkjtcsuvwf0nzl5gsl4eu0yzlhw9d6c8k2p68d0pgef0rfwtpns7qjcxqjf", + "bc1p3nf9vmsz43hse9qeepsdksrzjzxwqw24pdculhgsx7kd95ct923shmegp9", + "bc1plyxc7ccazkwudljc79gm0eck5uka997me0qkfp9lprx28grmekussntcdh", + "bc1pvulw654p6kwsf0tfg9lqhkhlq9jdds3f02kqjq57xl7r4m3mmv9qhfu8mz", + "bc1p5p2uemvptjct9kfvu5y0ukudwm9245ccldxwf30wjl8n9mt3r43qug5y3n", + "bc1ph2u8dy8arc4v3srsayv93ggaah5mykj0868fg6st76hqs80lwxtqrn6e58", + "bc1pq89c0n9e4zumgst7z8mhdz5h2u9kt3mhp3f53rf7uhu75scm3d9qn9ku49", + "bc1p8wtmyka8j89ux6s7ypupx4pkxec2amxj7gumxln48k08am4vhhhszgwaux", + "bc1pzfp5stavmmved22fyufhmypkz0ky3m0rz5e6lfzamzkznyveunxqquyd96", + "bc1phr7xjlj650hws4f86udtq4f7mtt4f5jlvwjwapdh48az48mh9t2spl85dz", + "bc1p7pc80vekqu8ef2ukh3nwtvp30h7judx5s303zpekw49xz7zm87dqzafzsa", + "bc1p4zmxalgu8xa3uxqg2maqy5exa9p3x2gm9wld7gry3audjqyc03sqdck9c9", + "bc1p7jeywaxwg752zpttfzl0dghdzmk70664nakanepp45hqsrttupfs8pgehh", + "bc1p0alr5e4unzx88qgqn4wdwh6shvp2w6qz0d4vrdq64hh0r5fag2kq6r8kkf", + "bc1pysq83t5kwd5jzwqdvqmj4kmch65k65a8ardvg9a9lzccdtn8p23s6qkpk7", + "bc1pz7kvvkc3aga3qr6hcg754rd3fqd820xy7uts92yqw0n970amav4ql43re9", + "bc1pns3yeesqk4x3zx636e5nl0y4vnuy5n08jj6rm006egn65a8ahmrsjhs27n", + "bc1ps6k8z70skshw6d698vqzydnxlyhdlag7h00vks8wet5u3l8yk78qps2qa4", + "bc1p6ehyydcy8leefac6kk9qn2rh92j4zckzufdy9pyjwa4mqthn446s4v0xes", + "bc1pzxpkvlz8q0lfn5du6e76u2cm66e3jrd82znf97ypa9yzyff46x0q5wcxqe", + "bc1pkdwt4z2ckxjnudna7mpv947dg2znt3dskz7ya58kmzutxpsxhr9quh5sny", + "bc1pk8hny075guh0kce6naqdga93kxk0c6p4e9a22fdhh9fgp2p2vhus7lsja6", + "bc1p7cp35qh7rgng9xlwgup4rzvayypeh882n88cr40y43ay0xz03njsruu0n7", + "bc1p85slp8ds3lftn0dxj032n58rg3jre9znlhpkgyfe3d0z8uugv80sqv7mxd", + "bc1plqr4al66c2eaprjf5m7k4fzdcx0wga8vts9nt7gn79hp88jv8zksayhe9v", + "bc1pv0j5cyqv08l8qh7hafkk34cavl8wpn28ehm3ltal98x7ypma6ygsn8u3u5", + "bc1psqetkp8nt5ah0rs8zw52f7ktee59p7njnnz3ky5jnmxncm7ddj9qwmmhm3", + "bc1pkf7dtchh8s5drhapvh3h25z20mx7cms8ss9qemskw056krnmknhsvj2zv7", + "bc1p58jvs8xf0qu0h7mys4jh84cvtzzrgj6d6kp6u3rna6gm9mxjzhps8pa6mx", + "bc1p72ljww6ke6z3nus33tmf2lrdfprmnpdcwzgkc6pn0yvv9nx2vkvsetvzx2", + "bc1pje60e3jylavz2sdj3q67gwrczu5r0vtnte3efdae85g2zqmcc6zqunkque", + "bc1png64kxrmmer7x04mrnfy0m293kdlhv992me73u56taqwqlzrmtysjzyqqd", + "bc1p3gpsthft6lh67cu0c6hnh6l9lmt74xe3xes93v9aa80xkjwsu6zq3kvpg2", + "bc1pe7wj8yvfsfc65t2lmx8jl84degum2lf2scs89pkrru39cgf03c6sx9z952", + "bc1pcl9hraql9xjyzr5az3rej7jydw9tw3fqddtwr7e2n5vkuuwlkwtspyw2xl", + "bc1pmcugygq6gxr6yjve2tw76ul6w5x0jp6v4nqfwr5pdstcgdr32ceqwfzua8", + "bc1pngm5hxrdtfg5azw9ut6a72kq7c6ytn5j4ujlu8w4vnpq76vxkk5s2fl8hq", + "bc1pd4etf5gr8dqzgzvnq08sf8w6z6tpwxtw0lgyzpz4hvapym2az3rszlh4zj", + "bc1pzdgykfyudvlu0fdn7p7z6gwwdcc86u8sudtkghr2t8kngad0hv5sssc20c", + "bc1ppgu7xzulmmhcepcwqd5ktnwk6uz53sew3eq33am7q5ygyjrt7fysuhn6pd", + "bc1pxy0s8lykwejtwweq9sm0s9susdcnm4yvyp72g4arcule3lwszhuqcznpqv", + "bc1pznuwevry90n50ltwjeju2akgdcepcw8q4mthuvrkz3twk9rjrxdsyj60jg", + "bc1pgkle0x3cx23naxdter5knu44ndc6l2d59wtlqhgpha8yvwvsmvvqkt2jv2", + "bc1pz2hwj0rmdp3yrqpllpp3s0gzlhckd8mz0zua7g23qrn7qxgfq2ws4ffcup", + "bc1pkcxffxqlgqjq3smfxavdn5vt3gfp6zz4edv9x3fg3zucrr7zas8q8tqncq", + "bc1pm43ntzrlxuh3pj4r3spv5e8k9t2ehm2k3eu38ssrqsngww2dxntsl4vvfy", + "bc1pxjj3vgm3ud9r9zr9wpn5tctd8f4nlm9mnadrnwuklxqcuvg7t4rqcan5yc", + "bc1pkjx9nj3hsc50ad9ltwg77j988233pxdll3rfn99k40t2vcf6w54quqatu3", + "bc1plna63esz0rds90v49pqyxf7que8es4vwtq5t9syashk2ndrf8x9s4htyfe", + "bc1p6wesudgex68xnza3v58ms2t3jdkxghrpp87cnk2qcqa0hyxjsltq2n545q", + "bc1p346pl00h0qaat4x837jfgc77g7q4wzye27lpzu9zgkzg2cep7plsgta4nl", + "bc1pe6vyd7z4ptpzgf4yckyfkuujywnwe30503rq4c7ydlerq6xcla6qm6magp", + "bc1p9mr3mupdg3j8r6ukhll6pm4nwxesjwqvxqt0fq9cka62lz02t7fqe2lr25", + "bc1ppyz7gsnampa749yh687nmyedjq54lx40v0tja8ch65en2g3e7jfs60gq98", + "bc1pukljmvwlmlruk940rp0men7vlqy597htql85x9qjxlk03nt4uyxqj7gam4", + "bc1pzh45ngyp7ldcav5m0w7wev6g8trh70zh5g90uuqr9slegfs6g9wsr5c55p", + "bc1pjedscd8tcq2y86cgmutkxuv3pqf2nfp77r6l9sn4a535qvpmd58q5t6kz2", + "bc1p6wegdj2w4uwcrl2mm6smh6p6nn2lxk264k68tdaunzjffrx6d7jqmfkp02", + "bc1pa95xv6n9a2t7e73h00j2zy8u865x3q9ctxesnv0c7esr2sg6lazqs6w95z", + "bc1pvvz3lcj7lakpgwwus73ax2l26my95jyf09urxwuunzwkdrcyqgrspkkckg", + "bc1pcsywrdaa00gts5jra0qm5qpwk6ztlt4pdr0rrx8p2zapcq2apywsnjz8qs", + "bc1pzddxxmcay5wnh26l394hqlau8egqp27dhn665kgrpl5y5895j4nsrgylfq", + "bc1pnzz9ht39lqlx6xzkgf5p7flrhpcpjck9x07ssll3ggcn8wluf5rqydklrr", + "bc1pj6w33yr02kxq7eekjjct5slqpnuqhs2l0d87c2c0rxzavpynw93sce9uy8", + "bc1p7e6dvdy9tjalpfcmp8efpnyy2hd43vykchy79zsspwcljkaqcccqrw5388", + "bc1pm4zg0jeevwjqwmru9g460acng2dpsnnvyupry8tdpckyaqsqun7s9esl99", + "bc1ppfdcg3d4hs9q4mm6qthvx4tnaw9xuj2z0ht6nknsjd6363r5z66sxktdpe", + "bc1pxdelck7tjxj73trhrm53vd969ge7cl7x3kkqv5vp64wcy00zuhrsdgsh3e", + "bc1pm97dmcgexlas8u65g0nes6e5vgyz08ml33jf66lmduptzrlk8m9q2hr2e8", + "bc1p2u0jhv3nc5aprmhh89uwshv9x0tdg78rmjalcukjsuvsjx4v8p9semx75u", + "bc1pe0u52hgj6tnm8la7fk675mf2kl6nglfa9ygx4czpwky4nsqss9tq7s52k5", + "bc1pq3z03etp2fgmmtfjc4jwg6sls8tjap6xj6y00sgnp0d5qs7ykujqpuqgew", + "bc1p5cus75vsn8wven97gejj4xyh8ew7xgae7uktk44v9le7dh9avuhsee2yxu", + "bc1p64z0tnwvscs746q5pwp6as44fez5ytxeyx9fwl8mq8jcxmjrwwcqa0yd9z", + "bc1pq86548dznj360qjkmt2vnl9zk4t58ht38n278sdy4xamlju5zasszfn8gn", + "bc1p7ue8sxaz8awj59k9vfgt5ztsj0yplqxpqdhu33yd8777ymph0qksaa0vqv", + "bc1pkddkt4a0z8fm9wa823y6qw8decs97pfjp6aslr5zd54hnnha0x3qxslll5", + "bc1pqpe2qcdqa2py7fzfnzyq3av3n8ydf032swp7ss5h9v6608kg5vusktv8ke", + "bc1p6yhdrc8azq2cw2ztd0u4c7ttaa6w75udaq4lyw8sc4yx40uffzaselatsl", + "bc1p2n02xraavrvv5e8yq3j0gdqhm5amqc4ruv2cuuvcu8glz7d5emmscvz56w", + "bc1p9hg84786ja9un66h5q6pyxdgrdgyersmr4j8ye2ne8h2p0rn9vsq54h8kz", + "bc1phdu2sg2jgctjr8f5us46tyurtpjkqyardpgca3t33q94d9j4h2psw3zjr4", + "bc1phf4wualrnl2g44es8mplpf74jry3wkf9kttzykqpv0hpg0cm2nvqytdtzw", + "bc1p6hzvku67xv7x5tc5ak9vqp0gcmds6aq9kf5negs3ph7qhj3qq8ksztj43m", + "bc1pxhhx3kxep7w5uze3znhx7j0n0nz6xm97eshcw7pl7v3lwqfnztnsm3cncv", + "bc1pf6lqumee25nq897qssn5jhm2s39uszgxnyjtjktf5htw0m94e5eqhhkp7k", + "bc1px64kz5puczdxy88dgmgzgw6mxypff657gyffzax5pws8ylkernxsmw8ntk", + "bc1p5y73ajdj5d07wmdstm63t98ea054kzzrllvunczptzse25tmp4pql40088", + "bc1ptxzr48myaw0na0k2j8402erk98xp7p0szkjndvx9s24knd4ln3hqrt8hn5", + "bc1pm057ju5039m6l8ek90e3es6d0jfh0209d45pjc4lsm0ktfsr9u0qwhft7e", + "bc1pggvuf592fxal6a6wq6xa53dzc3drfvqyzt3mm02r5dyddqz6rzksv8gy5m", + "bc1pwsq386t9jsj0qtt5myqk5fkpctdpgzp86v7rx5cryyl2z50lktus3c2fd6", + "bc1pnz5z9re24e5v8j9dae59srkaa0xx83kmdxp7c0t9ctsvwegpdfaqhrw2x3", + "bc1pv8rah03rh9m7ah62436x8cntkpw2ynr52py666tlkcxcul7vce7qtxqarz", + "bc1pn4rxn77cv4qafgqedqu58pcd9yy4zmpmdtehel2l8nr7wgkdjv0s5pqjhy", + "bc1p0nlztwd95s33wgyv2jxam3pp3dh6juj5unnd6d33jcf9xdq2edpsjm9pmr", + "bc1pga2c4ntf65uu54wlhy4s5wvcp24v24p4hrpstffq77rljfk0qyksa3c6we", + "bc1pfactx5ye0up3gpn3ksthz0v43ewdm2ll628xe7782gxsskmvz5fs7szf7k", + "bc1pe2cnwyvqlcjjs96fc3cwyxec4c76q0nlgd7dph66eewz004n2qdqe7q6s6", + "bc1perr9sa4mztvehtcq88980wwzard53cy55dt39hq97j7suskqduesnesek6", + "bc1plj22wwrvpsfly6va9askjykwwtasgs06sjvm2hyzx2lw7rfwlm0sm65j4h", + "bc1prerqlyymk97e4h67esr8454hwdrskenuuen008c68cp8t6dkyrdsn2dmwm", + "bc1ptv0m88fm6vgmdy5jn5ahatpf2faqz2u22v33c50q32vgzzanm6zqrp5qvw", + "bc1pjpd02csrp6ranph2vv2tyffhgke40r7zf7q9uztk75gpt29x7vtqhgj97a", + "bc1plex3pd8hm9x49ljvddx2zq3qlepu58s07wmsnh6h2vfvp65nvlxq6ld4ns", + "bc1p8y6y60amus294w4gfv6fm5y62lzft77jmav20s0dfk6mvzah8rqsleasys", + "bc1puvlm0gjg0smc9449e7vaqxcvsvx93q0nj88ed7k35kp0852l0yxs7mpl3u", + "bc1pdpfk55xruexny0p8sre49ae6jg64cf2eek6dtzwfk7zurf8szt8q5f7k7v", + "bc1prh82j0ev2p5kv0hjnw2w96q7j9uf7ax4udryvtpswzs8c4ae7h5sd08xny", + "bc1prv2eg4ecc6prltp04vtsue3p7y20ta0vr9p37d8rl5khuq8l776qgu2k2t", + "bc1p649hqw336ltpud0ayhlf7srj2ytwz8qg9x6kwd2y5wxk2gs9k2vq6h3hh9", + "bc1pfwlpmr3ut2lu0z9hgp03twgukznm59274vtmn8rqn257lj33ppqqeu6dmd", + "bc1p6wr5c8aqeuv6t7fq98japns0078jqdus5s2xk9c72x8fppjdk0tsfx23ru", + "bc1pcy6dx86z9sw7rx8uwp5fqgzgfh0l5jngyrfkkv4kxvg2yd98u36syj096p", + "bc1p9tc3ac09axsln6jcklxzlns9qmxrhr54d3q7s37dggfhlp0gdr4qq5l0y4", + "bc1p6333ljlnqjqm0fnvd3tyacq2lp8x7datwtkuhyqauzkalp2htsusdr3tw2", + "bc1p55y4tlxa7h882qyjedfyyfp7d6pm76grdd5g7mw9suhh6xg09l8svwhsll", + "bc1p2s2guecg7xmd84tn402u2tmfrfas0slynsjkdt6l900frxv9xyjszvp60c", + "bc1pwrrkp0lv0x7kr85ktfw50pnkn3fz9hww002lgq4zkufvwx6xdfss0ztjnr", + "bc1pyf3axvlyk3dutnsvsp4dp8zuy6trp7msqfmvmw6ahwglpzq9dz0swwjupy", + "bc1p7n6zmmcahn72kh80hqarh9wd3ku2hjc26rgtxxuej9n9jujn96qq5dpmfd", + "bc1pnzcwmkr6669ce272pt9th5m8yk7gkckqwa7s0pqdfd7skfav2c6qwljwrj", + "bc1pzmxjds7u4ltgxz4897nj2efs29w22ka4wedpulfm35f3ur6guqys56k8xq", + "bc1pgx8enf3kv09wyk9jkn6fne0kx2gv669kjxynchzqq85djq85agqq4qf92q", + "bc1p8pyrj8rpycnlgaucaj47yjv00j7ufh2n8ldp5j4g62799v5gsfksrny634", + "bc1pnq44ec00dhu2pa04v9nwtg45gy069zpmaxe9ul2y4r8f8d8wtr7s88za46", + "bc1plc6cqsppj6y276amm5hvtqjkjwy50kkp89ahk6ajrf90ruj2zelqh5fhxy", + "bc1pkvztnmw6cqn56lxtf24qhtf8g2ffhp0q9psdejpmukhtu7eanpmsw6cvqp", + "bc1pmjgrcr5fmhh96wvqx996qdtjpk8sgza477uzkfrqdyhj28wmqu0qezh5rs", + "bc1p7rtj354zldf96c6me6966vkj9krpjf6a2ztahm2r8tkzrq4fcnnqwuyct6", + "bc1pjf8u89fh68zfpycvdgmxlpp6c5m635ntahj86ey3dkva575xuwqqd94z2u", + "bc1p7xqs5hr9jsf93jgyxwcengzglu9mdqlyeyt5pwfs9za2v9hjranq9mlldf", + "bc1pjmye8v3zh7afxdx22qm8x0wfrkdmxjc85v7x5qhpld5pwypr8l8qhkaju0", + "bc1pnl0ksdkwywpejlngasfkr393c4xylh62v95zmxgth85cg4xqacys049x8w", + "bc1p34n8vyw0pxwqtcq0lr6qh296ynkws23tnhfj97cmp7zp3yrtnnpqpmjul5", + "bc1pz73p2p5cqv7kdu9udnkwn60ax78spssfyhns7hdw9tx58j3mejksx7hd3m", + "bc1phgm7uspzznk0fed45c4h32ydy2ss34cawv5ggcn8fa4cep43rz3ssygn04", + "bc1puj7360scjx44t8mkhud20vhp0gayh0vnc0yj5aupwp8qxm4fj30qsvy7kl", + "bc1pzf37avrlpvyk30uplfk8yv2g867t846ygpsdwmqm37d46pzqnntsgk3d6h", + "bc1pppgnqvjk0tjhlmwcy7dd6h5qj250c3qdqnkpwh3p3g9qe6cfundsc6pm0d", + "bc1pyg23rl9evqeqvrsj4keafgttxm4gmf079hq93msmeerpezmzcc9qpj5qv7", + "bc1p2k6v4jp3pgwlwq4wycz6ruye7kgllkjul3nen08yn7vt0anc77fqr93qau", + "bc1pjfdsv8fhre7svwtpv37a3sk45eqtjnyk3vn6nr2gkn7689dt2gzsajs8gt", + "bc1p7vegwpxeldwncjk2dx5qk5fz9zft0zcej6xldllch9qcma0djc9su4a2g7", + "bc1prk7z4qufhhmg72ltefn7yh6gqpl2wr9jv0yzn087ty58anvfqrlqk5u2hq", + "bc1plqqjg7l386e0nwj7hmzqxw49p72r7y83cyfxwrn6rzwp2747ranq9exvs8", + "bc1peyzysharn0nq0vlvqmaq22ct9ktke5kprs9fvxz8grrj2v3w9jsqgl8qty", + "bc1p7cpenm8wtwptwfz0pcfjxsfn82k4n7mjztwprruxvc36u0wqq8csyz5c49", + "bc1phejypn0x0z34xgkpvgq5wqgxjkhlx29k7gkue0yz2rcmp75jtpmscep8lz", + "bc1pypmp0r59pjxzshwg3l6vw0u9c8kh77uznn9v78crc4n0lenymapsntg6r3", + "bc1pl3avpext7hvay8auqyj2ed9szmyqxvmhkj5f2u8ece4agzvhapfqefgwju", + "bc1p20vm6ctlw5tsfxtswmq3qk44vp8dnepn8e0hczx25tsn8wf0n22q7dvryl", + "bc1p2fnt2gsuhq6a0xtfh2mv72guqn9skm7zk6g4gu23fm403n8c50xqc6jjfm", + "bc1pkwrh8l3ay3j3uhcjd764xaegylm8n9gg8mu3pd2vqrcf75z5jcdsupxj2v", + "bc1p2luspq45n845dk0uf9j70wz9zcpgafnaemj0j7d24wrwfnr3488s98n2lv", + "bc1p32pnygxkw4ajk0j05y0a04dphn7t2sxw0h9a2nmhsmeugay3mkrs780tst", + "bc1p83nfsel0wscjjprp3sun7dt6rw340dzf6guvgkylcgmy46030jzqcpx0vv", + "bc1p38azrkyve6xwzga5aknukute2w42hjqka6a94hs0tuccdt58x3dsyhdx45", + "bc1puu02k30u5lqnhzk0vsp88sylwe2mkk3uzn54mj9sxzvuzmnamd6sswavhp", + "bc1p7tf4wm9hs4hsnht85sp2tr39y85pmntrsuz9lxy3h4yler3mlvgsj8zcah", + "bc1pd2w7zdve7gclmcc50xaaw49m7j9pmp5mj95a9yg9dyr302q8sarqweh0mn", + "bc1pppd28pl90ntmwcdpmyse2a4mumhn28dhsyk4jctg5xsncwm7a24s9aqxra", + "bc1p8skpsntdzt8dxwefntmyjefs5phrxkrse07jjfgvxxv6swg7dy6stdap7m", + "bc1pd03n9f4u0xmhus8dzu5sw8t8hl2u74mqyw2ed5hjkc8lghjvruws3cgzld", + "bc1p9yest4jvtz0twj3ke934a4vhq407l6tusk2d9nj9x62mv27yj2yqm2n25w", + "bc1pl7s2yeuwljujgdd0m6hw253w2n73cmywxwqwyefu59znunzr4h0su30jqa", + "bc1pp3qyy9jhlw99y7wy02f4gnz0zxe0zsqm5a0ce0quarfdy42m3gcqwfjy0w", + "bc1pkjvhy8pv8snuq8vak0xht57rv8ttg5nqrga8qppahmfsszpe5d9stxkdug", + "bc1pxu0sysgdls7myl3hzhht5f6uh274q2u58sm8lz2xkv4ftppp5wkqz5njmr", + "bc1pny5ldnkjetvm4umyumuu7684g6u0jshq46xtyg99ra56kxcufpmsrrc6j8", + "bc1phpu93efu8q4tk2x02std7gmn3jzalltf3qdspp326nc0y80kcaksm9q62s", + "bc1p4e0cc8vqufv05sduwjrvs3a0wz2eha9qzkr5nfp0kw83wvms6lcqy7eee2", + "bc1pflsreuwjxmtru63vlty8gt8eymfnqg33txjm4megfgtn7r8vkwls0yse0y", + "bc1puz0hwtged3jzjfx85cvxljcpngrz8ysm6nqvad63tndpg7l5u5wq6w9pe7", + "bc1psezquf3ad8sptp8trg969ljs7vh0d6vs4hq2jfajgpjazjpa3gcskypzhr", + "bc1p0g266vhg3s38qc0n99jxdq7hmh7y5glp9a5cmr4hd5cclkfp9dzssnda9t", + "bc1p28vrz2zdy4c2aecxlxtq8namlsktya3x0fewrsefhfr4ue3szmnsn5cyex", + "bc1pjwgaxuxvgrn0gmrxg729aqtvpdu205rzht8uzfdexet6yfyf7jtq89rxca", + "bc1pf3vphgvwh3603m4qtl70jw89hdhkym8cldv68dlfwl6fv3hucf7qgum0t7", + "bc1ph5ujhnlk4d94ujhaszaww427pz3qhna5866d9d5vmenywgn7k94qw35kdn", + "bc1pdjw59wlghlftdrre9xpvt6zpc4zkll8qrg5rccv3v5m88k6tuz8qepd48m", + "bc1pelt4c778q70t8tgs36d92aft99wxm8k9dtj02a4au8fe6apwf7msgx05tq", + "bc1pnx6vv455886q20d53dpmy0jx4ks4f3md2fz5x42xhk4ran4gsjtqua6528", + "bc1pgkh5lng5xqke2ercd6zlrmts4tafjvhfudp0hcn630qe5eagcmdsmk24xh", + "bc1pmmgp7exlnrwvhgn720m3gq9wvkmhc4sarrzw8mpf9hltenqtym0qqfytp7", + "bc1p026hc27syatwjl89ne0nrjv2rsaaf7hkxu3jvcq8epzuup6qmqes9rdnuh", + "bc1plztlx304qyeqpdxg566hetckdqrwlwjvd4z73ay5ak3c5h09mpws7gftta", + "bc1p4hm3lvlj55dygtr6nhf2w2qc2d5259uz7p9qs6drxxfnkpjuaw2qf8kapt", + "bc1p36725095ws2d82acxvf79amp2nd03d3kxkl2y4ld3uqahvyltjts7uau70", + "bc1pqjfp2z9cfwrhx9w8vdst2axffmtxa2m34kq8tkm8ahpc7ludzy3qqk05dz", + "bc1pctfw7hjsmkvpq850fvklug2yqq0my030queatghcdx59en2a22qslejenk", + "bc1pewsnwtnlwsrl6yytj07z00p3and9yr5dka3jagstgseua0kh9t8q33d9wl", + "bc1pu9gcmf0fzl9zkh53tks7828xm59jq09n99v8vskd76ywxypw99tsjrv5gf", + "bc1paxng9s65xjff3lgs49prgdstg728qg4pkgqulfdyc9hmndypq3lsy5y6jt", + "bc1pdnq03qmrfej3uwupzy9fse2up3xnafwjfth7xr3egg4j5gdancssnax643", + "bc1pc6vqrxs3s7alal70k0397y7dytkze3ffs6j8zwnfc5juf2zd2r9qyawgp2", + "bc1pcmqa99rshtdn8kpl5tc3zxry0hxkpn0k94j8a3xcg0wkx7h4y3cqnwcyeq", + "bc1pln7gthm8uvr7hlwhl5j59sd0f6gpmc4rmfdnv83vu6fcnam5fupq260luc", + "bc1p7dtftuv6hc7hx84rngqyples8g86h8vce6430s44whv8rz7p4gcqalvqpq", + "bc1pzuzvpp2r6tmhp6xsz9g3jw6wwhyju537el0e69pzntjx8uxxn6xskcj2c2", + "bc1pnfh08v2m2f7jvn8jf8mjwhkvldc9dxc2wwrp3966rmqcyyhke6kq7f5pqt", + "bc1pag66c2hnhpu0fv03m4vrzjmwuvkjzua0g4q262fdlp0dhs72wtdqcq40x7", + "bc1p05e868dlt95tn4t9p7jkcrg80aq664emp2xy53kh9m2m024r80rqpyc0n0", + "bc1p5tfyygvct88dulucus7fqhjtgd8z8eccc0x4hdu3ec6cpdy8w85qyjsjjk", + "bc1pnzf9d553mk4zwmf4k6zcmp3grz32zyfnluug4l3vthk5k0p8cumqgytsmx", + "bc1p57let3kq965wnahjg5nnsvkzpkyfefvra4m8q2l8vf79qrulpf7syfuvhz", + "bc1pr0td6yuc8nf4a7rkyqygjtw6uu83jcnk34x0ul77yfecru83u4dq9a252g", + "bc1pmpm6ss48nmhfg69y86v2es3j3rev94m4kpajlghze8l9nqkwf5ks5afdwf", + "bc1pa98xunm6xwjgjve4dphk2yjs62sfag3mseh00fs3yz2y0clslk3q35sf5s", + "bc1pf4jn0kukxx44dj7yvkzltfwefmhdekqev7seukx3nnfwklyxau8qyp33wd", + "bc1pjlhl2tlnk3ccex8xjt3wjfx6xk5243f0xxpjvmf4zrcgt4fe002s8ps7yn", + "bc1pjuvq84vrezfc5q3sgkteyxpxjj22m09hnjnv85nusrd4zt9t39gsy7wgc7", + "bc1pduuudzugfsmzvthzprwm6w4ckxpm9f22lny4qmzdw6qyukjh5dwsjnww86", + "bc1p634wep4c43va70vhcd6exhs2exl5gge56m8qpvgcz7pmnw058sysfy2a4m", + "bc1pfchet8yttpzjl4nm666xwrzzn2hzk40rc4r9hnrudw0l0wedgztq5tsr0f", + "bc1pu8a7zl60gsjc6wfwj008wv2f3cl8cqry0qghu4pyvcm4xw43ca7sec46y5", + "bc1p8pn5jysn3j43yp4wyjuw25xcpwscmfvswsgaasmfvrfrf5c8d4sq3yfnpe", + "bc1pth7mtjw0w76etxlmda7a8smsc25qhxq8k59jyauanlxfrzaa35xq6dnh9j", + "bc1pd2ar37496jcacl29lkq2vzutep9n600zd2ul95cp4ydjl8dm5ruqrj2pqw", + "bc1pzyx95zn42zdhnf40wwwjcpeelufez7jf0dck6ztzc0jhcf8mmpkq95js0n", + "bc1p93m0a5qf7p547elpua5um3jvvpyl5jnf9vcg5qn8c0kps4z5c90srd55rk", + "bc1plakh473hfkdjy0c34t8g8fqeda8sevqgx725445zkwxtttj8l8uqdrt4my", + "bc1p5nqtqarx9fvpp87u4j0c0g54zwkktdfw92v2k30mj8z2ded6v84q3e42ns", + "bc1p52xxsa3akn2q3zjnysz7deaww0nltxcxlc8d2t8gkucgtps2lw2svslw3v", + "bc1pnc526wwvrvxqyrraxl0hfh4m40z4pwj3md3kxrygkfxl5a898assvlx60e", + "bc1p38saus5zx0sndwygmju6vl9dkdakpyynacln44yhnnqz9c9vu2ssqv8rej", + "bc1pcrv2gqssqe3g6g0hv08ejvx7tra2sac0gmguf92yqepp4stauxksuvya0f", + "bc1p2ucv0vfkgkg4yrylttftmkz3ge362hsfu78m7u33luqu5zqlev7q0pv4h5", + "bc1pz78phhjukf3xuqhe6tp250vl5y4k97asxjpyrt65rtv5lzd6wuksnnlm25", + "bc1pgza2fez7ggv8yta08hgplk7tm2t4dx0qahfvf8x0rlnh7kl20psqk76a4l", + "bc1pgga9wr6yp7rp76ahxxscharyfqu226wycvjtqr5d7cjlwgkd4uhsjnje2t", + "bc1pd5k3a2v9a48kazm49ly7qcgas7tzxqxeufsuakk4fnm9vvngjleqnu2xkj", + "bc1pczj5v5h0qyvmcy44r8lvwpw0e3zas7sk965hwze6z253yvquahlq9t6v39", + "bc1p498akmh2xf5rk5gz7nnum8pfurvmcql527r2r4n0zl9s7e0gvt0q78fkhr", + "bc1pzhpl9er9j0hmy47al2gpym4fvhpnhejxqmk6lg54q8eap9k5afxq3jcx6w", + "bc1p3p9v6jlvqxypdkrsxgvhpvthlh3epqlwjcrgrehf464qu2d2a2kshjnrwe", + "bc1p989uxpga9qm78tcjamfm3dc3usl7957qkf2nsyysylxgr55zlypsf5zc9x", + "bc1p5qg37rztevhxzrlsc38xq0c6lezvghyf7h6e0659c65p2uueyf5qur5lxa", + "bc1plkcsp6dlcaq4fr72jsxq6l24w045tgcq8u74eahmv0fvdqz5d02sf5gfgz", + "bc1p7lhv9lcm3ffa3v7gjt9ajtspwn9jz3avh6qscqzkalszum2c8g8skqg3de", + "bc1py3nzkwmntwyxmw0tnzjejn83jg2zg2ll4ts7suql0ymnc04e8knse3phlx", + "bc1pc8nm44f67mnc70rrgfkf3kwq8tke4afkw0fty3k5graalmg6jrvq2tz7rk", + "bc1p45hc4lg5tdfd2ntcx5875gthz4vta89tpmnykwfh49vl6y7d4huqdfgggj", + "bc1prcjy6egwtuv9q2hnmr0gnu2a9wj4radxc64nz5lc3847835w9njs86l8nk", + "bc1pt87xjahsd444q3jzrvxnsuuqm2j5pepmr8h034qfcrss3z0740cs54e6sh", + "bc1pfep9g7gnxrtw0j8944skwww32c0u8gxh5gnezr4rdz36ppzmlllsact09p", + "bc1p2yskwc426w3zxaw7aaaht04k778mpptsm4ewhtsjer83q2vv8j4q2g9y8l", + "bc1pss8gqp49t079t0l3q98arqlsc2uhlq4hvs0vkym3s6drjmk5y0cqydu9sg", + "bc1plmh332xps93lsy48gege06wmrvzy6ulvvu0ntaqtey764vx7ufvqz02808", + "bc1pczagj2kj6vj6g7c8p0nyz35u4f4nv7sgu6d8m45y5astzudwapdq7sjr2s", + "bc1pxms4j0lcc6ele36nlcc5svjatkvkau05frcwk0ln6hhlvcgfwmmsejldwy", + "bc1pakgy95hd62xh79v7lyrgr8v8m8y5wnsmt7nl29lgf4aeuu7qy93s4xqhz2", + "bc1p3t8h3fu6v8t46h63udr66crauh29sdkqgsmk0pakvgcuz4xkyedqn3tf5v", + "bc1pjxg02n8sm3kfglpxdermxx0upw5kg4c78a6vqrlxmdp4u9qfandskyugz9", + "bc1p2jcrpanft4r9n3tah3ay69ldn4vnwww7ck6457e6dfz8jnagj5zq0afkhj", + "bc1ph60m3feflmkkpceeasa7ep7vcxwe5h772t8sk9wl4nde2anphxgslk065x", + "bc1ppvcaxvknzkkx55mhxmlx59fk6y3nna8jn2060se64gvlwc2vlc8szkvm80", + "bc1pv0j9xgfzamzftxhdepaxlf8h89u5l7xpcnemp42ggfcjwuuvmdrqfec7lv", + "bc1plrqj0fs5j7wfmslah6vdusxttegzfx7n9jtjfr8veua3kspff05qlu4tam", + "bc1pelzhxk5gpxagz9eyzlcj0neqmt5gv44d2f7s6xs4stg6rs9fz9nstmtd36", + "bc1plfszk43qfvk640h34wcavwnha59q0w5dup7n46uzrj8f0pdfgz9shyanvh", + "bc1pftz3an8a6xy4rfnfwmus7xduhyvz80xecsy7ejskwl95wdfqsjcqcawpy0", + "bc1px9z6u7ucuql6qvaz25mm60f4jcs2tl80xuduuk8g9qhumz37fqrq9a8pds", + "bc1pxsjyrzpmyzs6vrcfueuzl5t5tx7jqx48kgq39d54hcj9fwfje4qq8gqvqf", + "bc1p305w3aerccxc7e92z3yqawwt9876gdg2dhmjuj38afyaugauz85svtdz4q", + "bc1p9e0n6ak7l5kgc0t3pdzjjkwxedxg7wwarlcs6ncgc8q7m57x96ys46n6dq", + "bc1ptldwnjd238vc8ep93wyukep34pkg24dpc3cpnk8j5rkqj0j40h9q88ks0c", + "bc1pspxa7rdtc0tsze6tdj2k3yyet9p4788r6ns200ah2gphf0jxyj6q7ck6un", + "bc1pnykvmlzlutmh783nwywnus5msht34cpqx7w6vm364k6l8huggyssza6ecx", + "bc1p377j7lvlv52dm9adm57x8naafc7urewq8cmyvwxupgj07hagjlks4v99n7", + "bc1p63d5hfzfudhvvcmqxr33mn8vu50cwltzncd86kzugrl89hw2489sjj6dmk", + "bc1p6emjemtcjymzgswaycaqgf7rswtlqsjq2ukgwyzgq9t3xn4zrylqs0t0zh", + "bc1pfm0my67rzev973azq4skp3c3ca0vtdh3k7zxd297vr0wygvfcras8uulmk", + "bc1p0t2zwr9kns6knvr6zdcze2z6k83u6j3lnlmdyw4g4v9hg6ep9v4qyxdt7m", + "bc1put6hu656dewhv9ce4xqg8nrc2f02gsdzpz24ngc945mqfwaq0nxqezztdt", + "bc1pevvsp9v40556d9k2v3xzvhrzcm6qgywd8rmqcnu738f8wfhz454sgaw72z", + "bc1p06yct90qessnz8fx7k3r2geg3yrq4kp5t5n59y5n4y83nalmyn6qd54xw7", + "bc1p2qwy6djqqnwfes9e5j840ueal7zwtayl60pt08a87p4k4d6pk7asvzq28p", + "bc1prc7w6j8j3m5scu0ysduynjyq0f0lffe5h89txufuc26553dxgwgqcpxwn3", + "bc1py30hftk8nhz364zl82ymzt2kg5dr83zacg3weyepaesgq0d9t38q76ghck", + "bc1p7u8lnx5yar4u43jgyndnrfrhlzrr770w4ghw53mx4r7yrmgl0qvsatm5lc", + "bc1p0de0dnzrp4nnclkha7twqvsffm2gkyvwwnpuuyh9ynz5z3eyf0sszrz4nx", + "bc1pn7ey3985xfy5atem5g5p3w8ycyvpchjhrqjcu7rxefr8a50rfnrq4ms5fe", + "bc1p03jtu2kgvext4k7kwpa2uag89wmkd68jnlsq7vtly0je98kvcwsqz4q2m7", + "bc1puwwqzrhfm9ld3et5usxgayq8vls6w2ae4sm9d6kahh7gfeurwmjq8fuxf2", + "bc1palwt0zv3kthxx7zr2daz96kyszcddz9h4jfvj3dzdv0lt6tkprrq49nw4s", + "bc1p6pdjkfe5vy6flyhf2uy2zgvn6arwk04uaqrank7x79kxgckc7u4shpn3hz", + "bc1p7ucklshhljrxd6vmfp9k9ulyk0lge8erm4kwm04eu3afxw6yvu6s0jcz9q", + "bc1prh9vmhwveh5994pm9peg2qw0jggg60uh9ajlh4ppv3ev2j3dk7vsmlp7v0", + "bc1p6wx797y8lrxzhkk2rmdqyrq0sestsdfd2ju0kwdrd0kdk3svt47s2jszul", + "bc1pqjfyn47xvmqkjfaqyy8pg6el27flzvdx5265sytcwwdee2zeat0sp32jqm", + "bc1pkaqcyvxh0kdk3dqjgl232x8kk36sktjx4x6rh0yrw5f32vyygvesppealz", + "bc1p76jr5se7e25dv85qejdml9xp33app5zzhvf8gttvkqrh0q9sa33qt0zvn7", + "bc1pc0la25kac789wlx047swgqkwemaudt2w6sl4r343m9exzrhjq6rqfneaqt", + "bc1pk5hgyfkwrg9jqjfl8knqpzcr0s5scdzutdf04vh4v2vvzr6mnqzstuh5r5", + "bc1pg48z7hx4wgljj05lj353nw3al2cw2vvx0y0tzsyxygwlk5vd50zq4w64kh", + "bc1ph60eyxqt90wgf70kj0jf7jvjx3fn9wp88wsuau6uzel0yp646c9qaeyqvl", + "bc1p5sw3uqxkgrr739sehnq2xmkntt8fe5keg4ya4ehrerhmykc2f3cstf8q4y", + "bc1p6xs3dgt2msum3vyvu3hf9jraa8rdzr7l5c3pgv4trp3j58p8xksqdqc27s", + "bc1pn9h0n56rn6ga5eyask0s6w7nz525sjwjwehc8lpmfs9pr9x4dquq0rzuk7", + "bc1pqae9u36cwvnp3j3m80m3wkylnjzpcx7fwhteqlumvgn33md4j5ds0hgxex", + "bc1pz5k4kef2qk37qs29awm2sd5vru8pu532eyx6g3j8jzh5yuuv3t2qjj2hd8", + "bc1pqtqv05qhlwqje09n3x5mp753tlucqzluvyk4wdm8z2a6d93phevs7hnmfg", + "bc1pzuvhprjkkxzrnfqaxnta8t5wme76usfxvyjxctyuhe6s5my7fczq7d0hsy", + "bc1pwwfa03t50n464r5997w5xt8fr5lgtnfuxrwxtc8ssyetxurt5unsht3953", + "bc1pq65n2jnlc7h6untwamr64hyug2rdf267hu7ca59s2yrm32qs8a4qag66g8", + "bc1pqxe9u9t90u46e983kg0x4ghyv8pvs4354gmdvzayqyx45m7gn77qgzqaj2", + "bc1ph8pqade335dlns7p4r5juwt4wpaeyf5tdgv035euwjd0qmlpw4fq5nl7y4", + "bc1pephasszw5q576w2pmfgc45afrf5l6kwq9m8yawvzpfad9ulywmssq4ka4p", + "bc1pp6k737wahsqjwuqgza6kvval42jqwhy5vksd5ewxj7dg5c44q4zsqw6p9p", + "bc1pra5yzq4edddmu0s4n8vnpsg57jcqkcdgh8pn70pcs0xyjmc3httqga42g5", + "bc1pdw9gfv00mauar4sp4gfmcknl2lxjrg2nk0adpwrux4ecq62dhrsq6jtxjy", + "bc1p8l5gjjadt3rllg76lyvk0vqgvrcq5sdvzchgqh5mecfkxke7x6gs8yexra", + "bc1ppf622pw7ntu7mal7tvxmhnjmkvr508j6ac69fujfdx54kxnzfhhq0rz7l9", + "bc1pgngeq8jj5xlasxkkgllu4g24w83kzjrh36xedwfcjs4088gl6xhsyg0ufp", + "bc1pwr3fjpyrt36pmapdljkxhzgzfcuc8gecr790mf7rv46gmjkl67nqc445rg", + "bc1pcw23k6aws2hywgk3u939p6x90wnm730qsj0q565ku536j80326xqhra2wj", + "bc1ppyvyde6scy65gwp6tzgannmrry2ycytd3fglkpespcaqfk4zaw0swpefk7", + "bc1pdwq095hsf2qvn9prrx0zms5v2ngudx3h9wn04jhvzwl4uudlr44se00vks", + "bc1pwytm88a6w3ed3lv0pvvtts9jsvvsnqvjzpt0z2n23jnz4jg52lfqux700x", + "bc1pp3uxg3jcjxz4seau75xcn7tl3fp604canttrdxhprz4y4g92y4psl03z6n", + "bc1pahr3hugknd3dlyg4wxnan766wtgu5klgcvdvv0z4jyqgjv48gvcs6j2axv", + "bc1ppp5lfarhp7585ssefvz9q47907x0tmwtdnpe3qyqwe8wtps5wu0q6zp42t", + "bc1p9v08tn8mxtve5xl2w3u396va79tyz2f8heksw4zd6t9r9qcr0rvsa33vxl", + "bc1pakdgxj82j56npfg3n7gwze2h2448f7t84qaaj067x706fjm24s8q7a2454", + "bc1pgl746xmn25zwh5443esj3ykse5nkdtnf0m8tywgx9d4wcwgwfrksftuskd", + "bc1p2szfvsgjf93xqvmxuw55ykvh3vmxpnj8gdc9t9ke5fduhftd4vuq2p9nwk", + "bc1prn7sskjj52zg9g56z7mhc7hwg4g3yv5d8h6ja5tyaelte6644fssptxq46", + "bc1puguw5azu6mcqd94v9hqp99yyzlnfvq55x0sdafqqrhev5lang4rqvlrjpj", + "bc1pheqhypkyfq4xqvr6qhtfhjzdjt7q5lt4wrmp3cl4929me969paksz56252", + "bc1ps0qhyd3ss3mcynm2cwyucjz2ffnt5pmng4ckxnltjrqyjyg9h43q7sf83v", + "bc1p8rrmcwxg35r75p66hnrwade7re6jezrt2aaphrdx7lta2weg2auq9ctu3t", + "bc1p05ewanz9mdnveeumpev2shwv4u5agyckqrwke5gdxh07qggsecxqxnx89s", + "bc1pxrj2k0jz403kn227czwxwx2dygmugq8ajj3dvt7h8wshxu84axtqlhq7lm", + "bc1pdqmjdm9p4dqzk9hah8ur282q58trhw4k9a9twnlcvlvn7x4vkneq205fn6", + "bc1pnnullwj00022uvnpp4u66qhcdj77vsf79wnwhwjdrc6dufl57ytqd8uerm", + "bc1pl65cmzzn84hraypeelye4ufcnuaueku8prwwk8c79p6rarhmq0aqwar203", + "bc1pny5z8fycntm4cwpw4qxfks33z73usf8h5sydrmuk0eg4pfmlrsvq4zw0m8", + "bc1pqaxh5zwszhq55ete5cv5jnkvuyn6d9kt7pvmduxyxjvg9c8c344q6syyd0", + "bc1pplwajhaammd3cuqxum82ypvr0pj3zw0ces6q43kzmv235ps93ysqq87f5n", + "bc1pch4xrc2m70f6fa3a7mjxhevxetzd9nxpzxmc09vmred2pl4ek84sdzckyw", + "bc1pgj0wq7jsgmzhjktqjaw6kjhnenn03we75g00xws8unf65zc4frtq4he9ld", + "bc1pdxnascm38dmffa5mx5kq43y9vpmnepslkp575exxqmmad8gs4a0sn4p84j", + "bc1pmxz7gvm4q9qn3tvvdhknn6j2synps92drra98cyqlcg05jeey2ks9ycy2m", + "bc1pd25z7ae09gpc6gaca4ywe5gdx5sktcvf7mq9gy9cjn7v6hcz7lrs9mkhx4", + "bc1ptcpkhu4zqamya6mn8aq6yjxg8pvq3ua2d7u5h4cs6ap5k69la8cqwxl488", + "bc1pqx47300md7vlvdp8lkckq54mrd42hl33349wc4j00tdtjxkw0ersdja5mv", + "bc1py3ccjw8pxltzh39l4xjdavqz7x3aj06gutma30m8a5p4r8qrf8tqdgu4eh", + "bc1ph5ludcla33d3s7ncrwv4fj4dm6krdvkpfxuzq48pf3sjtk7zga3sghpuhj", + "bc1pzacz7df793mxva584xyx325tqem0yxpxuads0d74n2gnt87cphlqeryuee", + "bc1pcj52dvgeqxt5g0eu56xggv32jp05swu6wsn7purjfgn69cgzs2jswmyevx", + "bc1p99mmqw06dfqyukx3yph4jh748v4umxg6j4w9fw7x2dd80la4c9qsvdxgky", + "bc1phng76448gcpy5aprstw9md5q2selmugfek5ly9lg8efadzmaxhksza7cc6", + "bc1pkg9xwcl5hmeqknsunyss0h5jkj59q3p8xqhyz9pnr826taxaqg9qdhjlu0", + "bc1peyk0u4npsw9z05mvahprfv732zdukc8h9arx4l9q6m5kamuyjmzqswx6aw", + "bc1pdlgswwzuext7khauz6dv4r96skz7yuvt05am6eew6g28yy46h7hsxx50gn", + "bc1p7uw97vynn66v2wqyakmzx6ja5se5mcr3u6fl9dyw53fsans7d70qxk02ph", + "bc1phw6xj5zdfrntm0v3r4mxv6f4x8sdgshunn5s679agnxam5h5003sjxld8u", + "bc1pn4e9av0z5aq0l24kl9f6glpt7rah2ym6ureccmf4cqdlvwym452swnzpjy", + "bc1pqj8zzn7x5gtd74vqed6kcp409nx7msnr6qlfk76ad0ylm40eujnssfj95e", + "bc1pz0fch7zszklmxf80nly28qpxpkte7z7fcd90jl73ehhlpu9ht69qp9c0mw", + "bc1pxev8m3s90nw5f2xw2vsagng4rn2xge93s5qx5fnqpq59mvyvcsyq7738vv", + "bc1pydm4mcl3l8jrm97x3rn7lxlfr4xtzrjxy79yqz8hyykta539jqwqujl5zk", + "bc1p7ln7uc7ecfaavtc0gg0t55e23xqz6qvhux8dta2s8yx3925nzmes4h673h", + "bc1ppvqzyt27ufh3p670q83w0cvffw085nspyllvadgkqpnznsaff04sd75r75", + "bc1pv0g59nflgdlh895xum76ym5awjn8danvcl23cn5k7yenu4h9gzcszugj0n", + "bc1p56u4xw28u95m9kw8sklf8q6ycr5yyp74fw7x9arxjyu72stc376qp3jj0p", + "bc1pvpq9m3jqsw4qul7lw6uuvd4e58kk5pe6t6xe3g7g5pajyapn0sps0w0yyu", + "bc1py3a8vfkypqtf39hj2lscusaer8fhueyf3s0rkkrvsm7km74lruys4gm8fu", + "bc1p3ndnad9p7r8kfelrfx8httys8ps2dquydstxa7nfdhpdcqzve96qfamqg5", + "bc1p6j40pvjam9u9swmlakc8njx2j5m9xlgkpwen7ylmj26fzy04d7gsht0686", + "bc1pvlh49tr3kr2ae75fpvgtkkvushrwgrv0c8hdyeyk7dkdjlknkraqhvlahe", + "bc1pfyq6pxn63sw62a70l96nxhhayvymmnhf2evvyxnpm363ecln4zxsnqhps6", + "bc1plwy7nlkvr3m6j06y3f44zlrwzdde3k0y38fxdrf5swrw60grahwqlj8gjc", + "bc1ppkfjjukhcnza3jl2hdayqsdphwf0fasxvqfrza643dak3ap7j50qnn9700", + "bc1pn5kdvt5h6xmpxe2j28lh2ynltqje36jtjdnzhpfeqw66flp8hjhqqls0dz", + "bc1phjyyr579g5kwkgh83mfwp27g8r4jl5wytgeqn0we0x5wqwa8jnqq3e4xr5", + "bc1pypmgqu5r286hf265cuy0dywegjsw8wuvzzx582n72us34lksxn6qafyyew", + "bc1p2ngvyekcrf4wda8955vcwpjyftpncj6s906d7y20kh6alnkdl3jqkptmzr", + "bc1ptssdpeaa43z7h55hmct2vtc5w28j0m4dx39afmlnlk4tft436xjqgc5c8p", + "bc1pyhamaqv5gutnchwypkn7zhwl596zaqcekwuwc55jsaktqxj4y76s0xfsfx", + "bc1pujt0rvd5gc5py8wqjwp6fm445kd90473nnhldqvmeefq547gkncqactuza", + "bc1pw23nm8phpl0q7jsfpgmums7cxj3f5dgjzyms9s4qjdzehqnza83sdhvjdf", + "bc1puz2l6rwryszpm6jt2xy33xdpdta3l8pejmw5ygujxaehkmqs8fgsrkwq82", + "bc1p855qzaycggcu7gkmvy2j4mf93vhdmfty9k2rhjar4704jl6zvs6qx8cpfc", + "bc1phl6j2f7az7jztclt9rv5w4ja4w3403az6nh7fuscxxkukvs0zy0syhcj5z", + "bc1px4lq3sjkz3fcddna0t6ewuqzljpuk2kvvg6tjwlhnlvw2t9an4nqvc05u7", + "bc1pl6040f9n7nmeaw6r4z0xqantvze67wlc8y08xq6vt7e5svalnd6qnjlhs0", + "bc1ps04mxkphqlgjgjvdpjkdgk6s8aju3sx4jqd7acne9f0r24gcrutsvgs9cw", + "bc1p5qquszdtnzv7zmy8mj0afcms2sx2ezkq7uugs6uus9p2cnjztvcscf6ppj", + "bc1p02k2algx6894tdljneavrrzfvgveg2mrsz027zzsjw0g2yakdxas5avflj", + "bc1pgnv92az0s85wgh6f69p3ukfry593uyrc5pg47wfqnjs5wp5nmvvs877eda", + "bc1pqfaypwnlqe90s7w42ln34sqegtkg23ucazhgf4qhfp5q9xqr2t6szgrk20", + "bc1pjeh4e2zz83d9vfk7uredgmy93av9ly5lz94mm9uwwur2zh93j3eslz6te2", + "bc1pleyv2n6n4lytklzwygxyc0jtrkjulyhufhkhr8v8lts3fa34cdqqugqws2", + "bc1pkkyu4h0tupducjk4ajjkpn669dapwyjks82re0vzmmfxpjxjnfjqunk9lz", + "bc1pqz6k9w6zykczencp6rluhcfet9f3r6e8xjse2laeg8m8qxtl2mhsnds4uf", + "bc1p9lgudkng6gmk0f8d3na5wjt5jg8fq0zn6s5yr2xh8cmuuss9saksu2tsrf", + "bc1pdqe67hrj8kmz4uqrzvgghaaf6xcrvqq9lp52pp0g3z7s402nhvjqfdtlwe", + "bc1p0ctw7e8kc2s4tfvnyg7c8nue0c3dqxr7cudnj59lytcfv30rm4qqmz6vnw", + "bc1pzfrmlk3v2h7sh8gak5vv70kkw49vsyjt4hys3uhk4zlw2wz053lsn9uy7f", + "bc1p90xzwenyqetqyues6830xuwvdn8t0h46jrac0lsqhv42rlv5lgdqh6qfn9", + "bc1ppcvj6k9r9rtjaeg6q38kwvdzcangwy2y0wfqs8sqp7w24v68l66qgnvama", + "bc1pedzmatdrrleq98frfts65anse0yv53v237e4fqldjarw49wd6jrqvfm52t", + "bc1prjsza39fh9h52kaphddsy0wm42sqvwe46sr4kkc6fa9mjzkh6h9qjs77cv", + "bc1ptnxmwmvx4msdr5fh4ee0lva2v55q9fzz9uaq04ql3cazrjv9c5eqp0qxkm", + "bc1pntckwlhawg4c2knn65qnq00jasaqedcnn08gz28ze3ltpnenc90sr0a6gw", + "bc1pc8r88380u6n8hclgegx0t8809fl9ratxzzjx4jwfka30c495edzsaxs8y4", + "bc1psq6v8t9gky23tnwkxjkxy09r4kayt8nymz7jed8lrjtj96wdu7gqcrrucz", + "bc1pdwkhvkcx9ke34lpqld8jx5enswqprwtx86zdfnpdlcuf57t6ckdqwl66j5", + "bc1p0t9rwm6hmnlq3z2a65wuh4wxcfwlv0jmmf305jz8vn8uvtl855yqwgh7tw", + "bc1p36g6p08ltknrgu4txmxdn9x4yy6rwtqxd0crw7zxxznfpyzlfarq37cplp", + "bc1pdqzsrxlud6nvruj4eh7y2t7k7f9dspxvjv87uad7uq5yk47zngmq5zd6av", + "bc1plcz6zn8n23y2flutv766ftezccus40evzytjnq2k6mzdxqjm50lqw85nj7", + "bc1p40f4xu8d2fej7rs44g3wquuhc03u2whr20drml92k7vj3676mshsh44mw9", + "bc1pjutrk4aeew3d4fc776nhtum5nug04xy8fyxs6tan9zsjhajj6lmqmnlrdc", + "bc1parcs533qeed8nnwnjsfwnvw0rzhhgenek8cqxax6d9l5mvadtlnq00pfxp", + "bc1patj88u8wltn0zeqk5p068ljes9jqmann86tnn6fvl04mlpwey0ksmwnsxs", + "bc1p4p4lvf68w02rcrf8agr44chv5pd06ftjza2lsupgcaa0cu52r5esd7ttx9", + "bc1pwt4xwsgt2395n30hx843c3e0jq6dpc49m68274dp7xe6v66qpkpq07v06m", + "bc1phgzf8gswr46t2afsph4hvm2ge4s6jhqmxw5nlpjuz8w8kw4p62rscadrje", + "bc1prlf2xnu8dgys82v9zdpe7anfsx2rewtwasj9e8vc2936n3sf4awqlxl9xz", + "bc1psvpjtkq8f6k5p7z75ppl5s86k9lhpwezfmy3gq4cz3xvv7rwndrstkp8j4", + "bc1peezt59nxtqfrtj67sw0umx5jh4xgfa8nwwulm4c0r5y05lm7v8esly0u5p", + "bc1pej9v3gew8jdw23mrvklmt2pj5xpdceen6mf0cd9dncfpkmgla0fshpz5ae", + "bc1puvzmpfg5eeuz669wrl6cfyx4nuuapg8n2vu0ar28jt820hm62k8shde3gu", + "bc1pwgfrtp88dx8lse5e9dkgxe2l6eusdrznheprdv8l5lr8agpgn44qp5wsvd", + "bc1pksmvyp0fnpksqwfesuruw9w6ym00dyy80rzs658ntxzew5hl04jqjf38un", + "bc1p8de338rh5elcc2cxrrc0m30hh6aupm97mkpcsxvft0uzqmwp8qnstjsavn", + "bc1pgh7lrkp69hq4dzx6at7xchtrn89x6vqryacsw430kccj052d2ngs0u8rx6", + "bc1pudzlm7v7ntrtz6qfg8r08vrkav64fjslzz8undeefe83e4thgdlqq3kwkf", + "bc1p7muapaclpjla05hwt7z40qr5z3pwha74k6cx3hfcq49u4dp3zv5sxwnfwn", + "bc1plz5sqfu7mje5lscttfsezm57fyzpf0plgqc2msk2gwve5hfww63shwqvx2", + "bc1ppfdau5ycgqd48f6sjvk2zurece0vkyyctvd8u9csl2pwmtukdzvs3h730v", + "bc1p0wpk8zvm2lr0f0hnj8qwr64klfq0fwhrnz0qewaf8pgj70yc632shrwcpy", + "bc1plax35ptt804acnk58pau3grp65wcvs5qd9dzsx0nyuejju8d4y8qkqpj9x", + "bc1puwdff3aslnsp2n809wkutrqyzevsepujlw8e9xgmsglqhq5ujytqcn6h5j", + "bc1pmk095r32m7wu098r52jhd6t05mpxekk3u9zpuvxvmraljkw7qk4s7j7tgc", + "bc1p2maans6fhhpqsdjyavtzfktq7pwfupd09eke7au6g80k03p7nc3q9g09al", + "bc1pauhj6vukpuhrtq6ar84l7t3kngs8sla060spht55e3z6e806c9xq8lsquf", + "bc1pfglzvgdrrhgzg4r3g65kgfmeuwv0y6pckj89tum8cfu4vdn9vwcs98jc3n", + "bc1phh7hv5gghfgqea87syqgk65n039tg4zc9zqew6g3y7qas0gxnraqtz30d8", + "bc1pc5ttsw6ew8w04fjwnkknmsrfa2xnpxwlpw94q9wj8c82jl2d8x3qayzdxz", + "bc1ppyxeqrevuxt2n2nqeupsmj43hs0rg4p7rrhdwpt66eyyxspa3zcq79kfpg", + "bc1pgs2met37xw2htu7rpulm4tkfkzfae4djmuselkprcxcms03ld4pqfyndqx", + "bc1pn8uccrdmuh69d8ntgkr344l3hs4u5vsjfx02zdkr2t7uj7r37znsfa2z22", + "bc1p5ygfqreze565y06hy5t7en7qf3sjzfjlfgdf6eq9jzg0pqurn8wq3253qz", + "bc1pv63j2e8ns5n9wns9mz96utqwrd275xphjn9k6pfkt0dygdzccphqwg52un", + "bc1pqm3a8c56p770kp85fdptk35retnjeu4j8uerggf0a747cncvgfpsqn6wwn", + "bc1pgu6p6rv99j93asye4093gu3pxp9mgfc5gg09nfhcmfvmmafm4wzsljjdyz", + "bc1pt5y9sd759ust7jnvdzx9mvzpk6n8lscsfylamj7s4mn53z0kew9qs7al45", + "bc1p8dpe6qageh0cjvp6648yqrf8gssyagslxuv34t7afse6ptz3s28sz7uk2k", + "bc1pp2p2xz477rsh4te09emuuxlvy7elrd8aufl7c6jpsy83rya7umwqhurnvc", + "bc1p395dekvcgj3dg9wlv7x0nrufnpgyq6w08atjdnuxnt78fl43lh8sdw4xx7", + "bc1ppsx3z2t0kqmeak0dg6hx9sw6jt6qrjuk6vsg6xwrn30xefrsyrxs0vrs4w", + "bc1phnxg33cf2yyxfx6gc074rap6l5kyju2p7ft7hwvz6vqghhwnddzsgwem08", + "bc1pwfttle3yt9fk520y3ph6yas7yuehyyxvuaasgnglte3f77ut7j0svqp52c", + "bc1ps9hjhlle0qxqu9nwctht4g34gnju0dtea03zdlc09exlytshmkmse90wwu", + "bc1p6zkxdd9ww8cz0ue2hp78a6z7tm4uj8jqcw778a4xnugnw2uzncgqkh55hn", + "bc1ppts2h4l5324te3yja4zpd2n0t7xdgfguqgnf7va0du65xetajm5qhxtet6", + "bc1p75utuwlz0wd8fv7hnpe02r0yq5ed5chf2qsd2cuw3yklqhy327qqst7ztq", + "bc1pm5qk906ljwns9lr3dd6dyl7yvn7uwmd249mvlly7enjswtp7ar6qrx30rp", + "bc1pyta6zpxr7dc4l5jk9lfnqp3dyzkg3lh90dne97c433tdyynsxmysztl0gm", + "bc1pkkpng4n23vumtela7h777jnvskevnvd80tvvgu9n8reghu9nka6s87et39", + "bc1p3mzmfpnd30knnwjycvmty9fxrxaem64t745hnkgma85wh8x2kklqktyus0", + "bc1pwyprtz8en68y49u0v5f3e6hc33lxkwf9dwgx7wh86unsxfxdk2pq9vserk", + "bc1pf20c8eu3gh47f7a8gpnsvg2rhujvxy28seu5fwht6fzh2tatmeaqkjuxkp", + "bc1p8uppdlcztdpldj5gwwn83wyk2nc26fnwcjcntckuq2rwtlxskleqqpkzse", + "bc1pq6anepmyg8kfj8hgadnfzy3052pe7jrpx3gdutc445cy076ns69q40ealt", + "bc1pcwf9schnzdn3hw579lwafr5hva0plv54j69da8xjhkprsanyef7qc54a06", + "bc1px8g0tn5aus8a5qeugx6djhsp6xk59enje3mxkll3hlv8tl93dyysgkc82f", + "bc1pfj5c3p6syku7et8wmps6acaz7f4arqk436ejyw3m4948c2yw79mqazya9n", + "bc1pyj6g35m5jm62gzym8zr966t2t38muzvjnmdnlznchlptdeh0y98ss8rdlc", + "bc1pskdl9d7leqq77epykr0z73uzekw36c6mcjlrhqjv7glarqz9qa5spnpj3g", + "bc1pyy9rq3a90hm25gsapuyeryykur2da0g27ssagy7ppuy58r2davfsjl658s", + "bc1pddvya2ljps9954zfvdfx54shnfx5d82dk98ymxrm0h77k9zwl3ssp58tn2", + "bc1p9ntcnn00memqn2cy4cj28n2feznejqka969yex0k5ad2vqy7l63quacgz4", + "bc1p2c5tnu8g2xszexr20akcyafvswcgwqz4450rr2enz38qzxarjypss9pzsh", + "bc1pzz4gyj7mt4ty7dcgy3vxfg880yhvk9yusulyy5g9rq6p85ju0myst2ukzl", + "bc1pk3gc9yql8c4r2dppr0hfufg9fzcgyhydwksy8dja86cl7sms5ccqfl8k4w", + "bc1p40n0nuszfl409slx0u4f5jxkty83y34dw9hlgaxftws83fnrp9nst6fxzu", + "bc1pqn2nl98kr5p794ksvjtj628nqgrl4afwttyfnq0u7p8a99ee7hkqtcxgx8", + "bc1pcjxt7cukts7w73qq7pwk3c5rzru7cwnk973qjd4ykz0mlen6kppqjwqqwr", + "bc1pssqytyqqy6ja8e93rdamrzz7tav7gpppc8tqumu0r68gxgwfkswqfrrgjw", + "bc1ph8mu463u90wcrmf0tqcy3jj3prjluszyjx6n4sa78rvrcjeth76qqv8hym", + "bc1p0e7yyvn8nw3d9xn47q56e0pnngz259wdq39mtq5lg6ycj3474seqt5fqef", + "bc1pf0jw8hnnynq3auk44athfu3j2x2kf0gfn0g42873u3rtv8ayzelqjhex02", + "bc1p34n020g0n6c5pezv5w8ug29uph2neqn3nh3zk4ar2949htyf4azqzze7ts", + "bc1pya50sfjkvsvt7g54kd79a47dpmne5af9wgvn9saz3ur8r6tanwxq9d3y9c", + "bc1pyy22aywqmenzadzxcxvh05ycdf8l37h2x56jpx5pu8t08qeg8tjqgpwnef", + "bc1pl73yjfnr7tupuse7meyc0k8hdn60lrpjjxnvcr53wutq34hmhzusw7slqv", + "bc1pg337vr04yq8ca9przxcqzx8zqq0rqwr7ksrzcwe7nt65r2at6zas2egff7", + "bc1pz3g377n4z6esy3g84pchgkdfntsaldt6les0jrupfq62mz0zgnhsvzxmqh", + "bc1pq6k2ptp5syfu7llv769slly0phhkcc6n5zt339wglzs2sayzt8yqwdxvra", + "bc1ppkzxx06c6xwed36gxw7ely078qxvp39t7mukc0slu3mkxlv36f0swxzhkt", + "bc1p0p6hps722zrht8y4h66q90e3gcphdc3kpxful9v4a8s9dagnkz3q2gwfrd", + "bc1p48auz749xczrhte9qllgz0cdklcxv84jduwpa85nakqvttggalssgmpuf6", + "bc1pfmp6y45f6kkcwskk7rtrrht7rsl3zdrkj4j3g2wlj3c9utjmk86q5fdt8y", + "bc1pcedazaugfyds3l884qhvrqnkg75vw795sw9qd0p395742t20e3pscpc8w6", + "bc1ptx7gy432jpxg96lqcxfk0r5zvtvdxm5m20n6e25wxreft03d0ujqvtcyex", + "bc1pm82h27he0sqfq35wcmqqqsflk22kwmk5af0sqcnustxgy53jzfqqpus6lv", + "bc1p4epgg8yug3m9v9cgyq8npl7z3fetd3gnzhly2tqwm6u60pk75fxswpxs3r", + "bc1psjzn7esra2fmk285mm3s5m9ylrgmepsglgtglja26rxnay38c68qacyryy", + "bc1pz90mej5q5m8mz7s4j4k2k323uuxr90q0vamzhu2cg9nncag8meksvxugga", + "bc1pkhlg5gcsmae5d9h3y5hu66wstcph394t4rrznu8w0gqn6mgx3nkquc34kv", + "bc1pldch5lqc7d2zqxrs23t65vfgtl9vp858tuvfevtpy8m8g8edahlsqxpkgh", + "bc1pu2ldcu33xtptceswk6ajsxa4mala34mm7ufevmlw9lsgkds6l78s3jgr2n", + "bc1p40v4mmquhm5aze85q0h5lxrd5jy52zgy6ldlrl95sedzwkghjk3sz0akha", + "bc1p6l7f4mk789x5pgc5wtwd4zgej6alws9h3yu4r9er4cpe7eccrfjq5d6qgu", + "bc1puf88ruf8wzx4rrl9c24jrhl7379j6vdfqsatwelm92px3hplwdzsvyhr6s", + "bc1pjqjpk7d24w4zj8xlmuaanuryrlldqnweynkl9x82fqrwm0jht83sfttr2c", + "bc1p2eykn8cxxz4a787xrugz476t9cxk4rt6p2h73l5cttwd9653llfqfpzah9", + "bc1p75uyhsqq67k9fm8wdgga2hh6eeajlaqhknqd5glfffwwlnt0xkvqmt3ru8", + "bc1pmjnrjyz0naz7qq9g5l066qgc7fykwjku52uzdqevvg4c7clrf38s8ef3jw", + "bc1pxm58qujqlxelhn3e0gc3hjg6rkepe9n4ve7q2n3mn58wfn5lzftqx28wh9", + "bc1pwhvsajyzq30rsdh2twulfestzqvmrxtp503g8656l6x5sp89jyespa8t4u", + "bc1pl3nkdygj8zfqauyhvg4ftlnsete0d2srq5hdj4lxuwz3gc2hna2q37f3ef", + "bc1pke96ezzmjhew46wwf474hxply5zhhyy5rr6x55w04a065q2mdwxsh88sy9", + "bc1pxewgx5prnlupxuy23dfnlt7l4vqacwq0ejnp8h9kj33ge5580epq2p86fw", + "bc1pef30je7tj779zajupuw64wnejkjn7cp76gjkugz9rpwmcslrx5gqaf6xcd", + "bc1psgg2ac23gexpqezq362u6r3lexu783yak9fw90el9jjyswqfnxkqm0le6a", + "bc1p6x8qk6hz9pwf2ly9ex8dhtyk38y2fds2fh9k363y40a5js9jxrls98cjf7", + "bc1pmvyqueghymrpxjmj0gj9jaspgps5mx3zgljpvj9pe5ys2aaczt2qzwuqrw", + "bc1prkmpkmnnzz0asp9p5np2jp8zfytwa429v46kk3thg6xz824kwkys0dkvrk", + "bc1paz6cgdaxcwenvdfg34sw8gzu5n8nquy2lts976p76v9mw6cl7qgqs5pkpl", + "bc1pp28jpnp3dl8g706l2djsp9u7gq8653pmwcspsuv0h7tr27wpqh2sgftayd", + "bc1p99rwf5ggnew76jxhnp2s54yzlp2rcyewnl5yrlw0qrllq7q2gycqwvelgt", + "bc1puw78vaq39zxesf9mzz3pwgccgxh06nl5tsapk9fuj2xgp8rg337qufcxys", + "bc1pe73yaln8szsgak03qqzggxwck0mc322x4ftvllzr3eshvdwv6pcqeexjqp", + "bc1p82uzpuuxtq535679lu5uk5h2eaxe4vyhk0yxk05ykkkmrl25rd3sjk4avf", + "bc1p6wey5gwa63hplnz97qcgrl9ywrame9jadpgexqw4zky5p8e6rsxsuawttl", + "bc1p7qy8w8fq67c3ymyefup2shf3hg4cqxflml6hr632vttzjcykxswszu209a", + "bc1pk5az480n3rq8r5gem2yl5yf9pxd8t525ajlq2tnvwf3ffwqea4yqe4c280", + "bc1pv2aau04azexcy555k722zduhx24ephk8pkxcz2grp5h53ssxwwtqp8efjl", + "bc1pekmf3sjxw5fgjz6387txyr032gq9jy5cuqq2dc2j75e0xtx5sgessqls0d", + "bc1pwumuzj2rr2zmc3j9wcdpwtjllupa56644mgft2meg5afvud237pqn7nust", + "bc1pyzena7n9fx9c4tfu7xfl2js40sl5peryhs0r0hwlerd6cz4d88fqqdzlk9", + "bc1papzu6lqxcgpek5uj87gy8wj2rmchvupuhwd4p7c20fgqry0d2kkqrx4ndf", + "bc1p3sq8lskke27c4kflytq88hrll5qq4p9rsv3kaxpd44yt9j6xw06se6jtsl", + "bc1pe9mph6gfsegvj9x7quhjj8hqtvkafkaxd93cxegajyndwxkgv44q4xszpd", + "bc1papjavuuhfprrzlfa7a4claetsxrk9h28682ww5l234ky7as29a2qg0gf4f", + "bc1phtrxav00hj3tmvasj2jhunj29sppjemhjqz5vxlhn4dx0qt40e2qayjx79", + "bc1p8hsq0r9aja95dpknh45rh9k59wfghd3p24sc5s0c2efdjjp5lxaq6fpnva", + "bc1pwrvtx74eskmedd3nuhdgenvtck93cwtcnxrw9plmr5dh8ew588lqfvxzp5", + "bc1p6lsej7wca2pwlush5wzl8wfqpxr0xx5eqddh2khr7ezrsudpdukqd599vs", + "bc1pflpkrpedsj9wwmpfcdfwnvhaxfaunjgz5w3zgdmdy0fxltnxzmps7gm4sn", + "bc1pm0dm2cx4fky8lejwptv7eumxhp8aszqmjrlafj29sw9pl57pnphqswj5tl", + "bc1pha56jgfnha24g3kamw72kav5luauj5pqf58wrdm4wt7mxzwhclfsew8ume", + "bc1pe7gz5kn3du45trah0cq2prlh826mneq06f5vack333hylcfu3l3q6zrgye", + "bc1ps7shyh3w60xvpzwha73c34we9dh9z0d44ct264hurz7qyg6xf8fs8rpzw0", + "bc1pyxwqegl4kggjl47e4fmsaufun6dn3ftc72kqaqvqx8g2lz8643uqvmc8e4", + "bc1pgjsevf9nxqsf2vz36l0zs22r8p9k7h259h34cnqw7edvz2sz3vhslwdqcu", + "bc1pdadfr4ar2452pch6e83qkldc9yplcrm02gjcvkh6flkz8u88jm7qkq5hg5", + "bc1p885daw57fjl0a500g82h8efgcngu3l8da4zva4kxenvrre6v9egsyh36km", + "bc1ptruk0qzxaugm32ku6vv6rzrgu0traurn2pn8w7lf3u64x97jspksml6xsr", + "bc1png7u9hwhzth9d6f336gyqw2yx0l79qflh9q6dpfm3ugxtjtzvpnqvt3rga", + "bc1plyz5c0pk9y2dy0yrcu8ucg4qpqppddz9c3x6vknc7y2a705vcu5qv9y36e", + "bc1pv4qzjaly59azp8q593vfgg0ud6qecyrepd8nwzanwpt4mv804evqgh2vps", + "bc1pwema55snajca9lctstll2z5hv653m7ge6syrtplucpkyxn0p6faq6ghe8d", + "bc1panwprpyhlq4yaxyetn5v8s809pa3f9hp3ud09w7kagjspsyd5smqavchu6", + "bc1p7e0y2gu4nuvgx74s0kccg8emv8gtw8xpzzkxsv3laqa5rar2lxtsj5hcnl", + "bc1ph33tcd090lp8jewtvcm5fmsxtlmyat6348gxn4seqsv7x9f25cjq6q5wl3", + "bc1p7wrh3u7wca207h73ulsc3cryfrtweq39mcemv9eqe60aycuvgzqqc6t2nf", + "bc1pv0m9cgqfdn7dr2mxm8tjrtrktl0y9mexm5ht5fhw63zfwdeytekszq2dq6", + "bc1pewmpcqqkh395cyauh8ru63vuccmjmx8t6ycqxyw64x6m9nh4pcssvyy9ye", + "bc1pnnvvrh679gmtu6t6hquv38ggt77a5n73tsgrhgw5gmn3gfde2ghsxhc9xh", + "bc1pd7duytfvj6zwt9tpa7jhec4r3t52m58smpjeky77euwj7c5fae6sny2884", + "bc1pl0a7w4ur0tl7malmnfj6srkpw8wppgv6kjzyl8l5pcx9rpunevzsvmpg0d", + "bc1pa70lqkqj5glje4gkg69qtj3e942qfhggsc8vhw5g8m909clulpkqsuk07u", + "bc1pk73dvprlzs0x0pyfp6r2t8f6568fxrkxtqepcxvpkad9cpvcch3szp53wv", + "bc1pvldzuh34hxkk5sw3y5rw7ve6gxtz89dvtf3qkqu95xzctjyz3qgq88wvu3", + "bc1p0q9lekppxfn66zprsxpdg5xue3uatlxtqzml02tvf8lfvnl75wsqgc5cn4", + "bc1p9vz6sl92c865lu7tnwnejwnxs079y7zmgkmrv8vyghgcjllvvuuq0789c0", + "bc1puehc82w2md74p0eg2dvx8mcx4sd782c5thrkyk5w84kycpdm7rsq4r4r6c", + "bc1prvrrs6cs8alvafkdfysznksjdv5vme0hgtla2tx4ezckm4sy2hzspuqfl3", + "bc1pk55km75vw5r3mx9th8zp9p7zxa28vs0dzzhuq497zzm99jvr2shq8kxfla", + "bc1p9d08nnfm0q6r8zukyu4a0tvvdcp3tmknlqc78pht3u7fjwdqhgdstmrx52", + "bc1pj9ek8fnqfkwc9ah99znd72knk99xuekqd6zkvv2l3p3excjx0jrs6npsrn", + "bc1pmg5c7vc6adgm0fq3te09523tmwagjrng0v3yccg3ee6q695c3nvqg2qf7s", + "bc1pvw2g4krfm3mpa5wx3sthgap0defl6qfa349v7234myk875xt2xxs9xrzmj", + "bc1pjuklzs7ussnxz3qfc6kgu4587arhm0ptcf0kh0060zdxhj0az5es9hvppz", + "bc1p07d9c4s9vsrtdxs0aq86wdre8srwj7e508tg6tlldz8gjwcjel6q8nvv4l", + "bc1p5tm7qya2khm28axvf4krdj4cgu4g2wmta7qynwfqurp2dthsw07qs3hy2h", + "bc1p2g9pyj3k050cl5spnneh4nhevyr4s0dv5m9kun98ck4tsnvzmyqspzza8n", + "bc1p4uw0maju8c9ksvz0pkgmu44v6u57wuuqwl3xl2n3zf57gylm3nzsawjtd0", + "bc1pehknsp2z2hak5w2pflwr2emc5mllp7pfevma2dm5fgygun53fqpquupau7", + "bc1pck93p7n326nywfwp738wel3w2kfd3s3unkq8tcmwh7ypvyznf7hqg2qxq6", + "bc1pnt58rela5hqee23zzf8plafvds9gvfkdsfsd29ss5a5y845rngcqdagq3j", + "bc1pmuxrykdzeyzaakctfu9ucyc96ur746e2kgv4me9knfwksu5hhftqf5cgef", + "bc1ptkk54l6jvn8qkawe9vd2tede43a4j0ya3tjhrh8qptvc7h5e2tfqf2mh90", + "bc1pcek3hvv6epanzjfwfnvtf644xtcgl3n684w4u5z2fal39jmq5qaq92nl2c", + "bc1pxygckyv87mnjdlrkzsyfspv0e6f5u3nwqcuae6y8uj03gwxd67jqekq8qc", + "bc1pwympfn06646h8afccnaqlz5wthyh8yvtvvpjhd6kjp3md6g42juquf2tw8", + "bc1pvz0gh6aj0ce83naps4z2prws43vh7fmm2p5c68vg07mz2h2m6dks6wrvxl", + "bc1ps3ugalw0vsyd2uvpjk7p3hpc9excy9297tqcvhw0n5kyzq4y76pqcc5qk7", + "bc1p30zwqwwennl6ehjt74ltk07rcszj4cn8z7d25zgl6jflceq0lz6q2g3ke5", + "bc1p9hcllk4llxmxyjnvdfxvysaq7sf2a63xv6ka2rp0svh7vwgqagrsjx4zvy", + "bc1pcvn0w9zspu6k3uhz7hw2w95cnqzjf7shn7d9gml3xv5kxr34k5ssq58tq5", + "bc1pl630w2gvyg2uy9he0a50zt9xcclujw5z33p7rymf2pxaq2r7ejpqdcsl42", + "bc1pf6pu3qejwyn3078zaaqdancanxtd6pxpl7kdnhkv38c2645yf3nsf6a523", + "bc1pl9eymzxt2utgdz6myzhpn3u3tnr33vj9peqnnx6y3l45mv0yjj5q8mf920", + "bc1p3jc7754zey86m9kzy4cfhnszuvvugxqsjcl4gmulk9yyp0kahltsclkdse", + "bc1par4grydfw7wc3ya5tt2qm8kllpt7ry9s2a09663nn06rgll06d0q8a8pxk", + "bc1pp4ydvnjgx3ux6f5h8ka7kjn4yczcpgnsdjj3k9hl5lkmxj9pn0jqt396nf", + "bc1p9p2e0z6rgd9auzh8ekjzssmm47ayvfkmxv0maj3cvkwxslaqvugs974zqd", + "bc1p2edlq7kp2n4366sv6ht7hyvt8u3a95wcvhtfngdcfwa3uvlqfj8qql2x6c", + "bc1p5p0pqxlhytwjw8lh74cfft4ghqem89a7eeatd84w30ftxcnd0cusmf8v56", + "bc1pmz3sw5eg5huadn3f8whv9nx9xh3l77as6uamwr9prhtkqney6ktq4scetx", + "bc1pxfmff33l7r0fdj9rqaupd7zj3467jqphypcl897gctxfgqdvzk0qqumt9h", + "bc1pxzxgjzzexmjx00s43ep0edekdw3pnzc2dvvk6e406dlw3jllkkss5rreck", + "bc1phs4atemm3d3dde6sjvfx4vgpgd2tscpmgzjtkrj3j2rdtrhavjnsu6k846", + "bc1p2pluk4sv2sv27vkgwxj7fy3qa6gf6l99kz0cd95l9yx0lwl0nlvshxv948", + "bc1puajavrh2ekn08fu9fnrk5h88r6uta6m979aqc968pcnm3yu562ys5p2hae", + "bc1pydt2msau7572f2hf5xhtqnl4ecn4kznt7qhhh4l08pp73lkqfmfq54ypv8", + "bc1ppl0t9n05n4yr9z2mz8vzrn9cv36reydfkvx3kg385new6u5a8kvqmhcczg", + "bc1pvrkmvjr8el6p3vknnqkfmf3tz6eglumw2erhsq0aczwwaxtt6gpstf9nsw", + "bc1pdkjk5nke2f42kz5ykv78tfzedfq0zdwnd7pldzsmfenkhchzrw6qsp9g57", + "bc1pnfupzkf2r8shk4m434glpj8gqq0p9wf0u8t2htg5g3wy6ja7804sxjsqhh", + "bc1pjll4p5j50cnmcnl0cartgnykp52wuga3cdhphuvsatypvt2e2prs5qad65", + "bc1pcvd3pe6nt4n2squcqjdev8yhuj3j39rqk0jqx2uyddxdlcht0vxqzgnxtn", + "bc1p9l2jsgy87qvzvu3q22pt3e5ytxqyyd0hd0a0j8vcwyq7lsxxquzq8f8p3k", + "bc1pk9gy3kmc3w7px239rf53cu7k500lew93nzpxfklf30neth5v6kaquctyxe", + "bc1pr454sg3v0une3a5g7dwzmxg42qgkz0rq4c8wwcphlkzttpaya9rs0jnx5l", + "bc1pawpxtxw9g4kr54r5cgy2dqvujgdg8gv8dmde5a4mcm0ntg60g42qam9fvk", + "bc1phacews2qlyku2sp0mf60vz6u7mzel7q02r82jwar9ert5zf80daqlpntzt", + "bc1px90ckjxah6dpg9k7vrz9x2thdp052ycfh3sjftq62wxe2jmr4zwslldz92", + "bc1p3cf92v3mk3er9e5neyq8744fv66wl08vh6n3dx9377chpeap4sqsl9u3ul", + "bc1pdgp37ezm23g6ym8gkd2yjkvnk8fppcmuffyrl7c40cn0tfd70ngq35l9pu", + "bc1p9l36rygkyuycc8cz4a3cx3fs90tj2ys4m85qzw034wzepu2jmnjskgdh3u", + "bc1pqmv6dewyjkrx4w9hmn9m2vvgyueuzwz79ral9gpy37t0s5zw0m3q8g6694", + "bc1pxyyktnkelkt6lexn2uhayga9va806dtlux2edmzf7xlr330pvmzqjqde57", + "bc1puaszlnemrsaf8xyz2wkgxyu0s2y2tr7mjh2h3u6zzjkcafzkqhss572g45", + "bc1pl7tqaj2valpt6f880n6rcmcrcf0wfsz5vxy56e0wt0pf0nvh45jq3wcqnp", + "bc1p4lvmy85sty7s6gpvfcygnd39tnuxuma9j3pxgmp226rkjazlyk7qcg3833", + "bc1p38ku34pghvcjtfw4adphaydp7g5z6shn7mnu86sym5gchq2q9psqd22vsd", + "bc1pzpkulyrj3v0jhdsgmra57faq6pfaywspyuhu8ea6v5jcnrtvzwesgtzlg2", + "bc1pnaw3qxvn05w7jgls5ayjynatrhm5e7fs0lkrxydf7u9ea060l6esu3k09r", + "bc1pvmps6ajryz2n25yklj6y4z607a36zt3d30eqfqk0ahwj3l0ydyhs3qrmez", + "bc1pk88wrg4y83x08q4nuxercqhmvmlqx6t5ff7wmh6fum704k4lakzq3m3885", + "bc1pq4gz0a48f87g5hjav495zgal4a5uqplvffvf2we64jr6ym63dgusxaeh3s", + "bc1pcl348806j8cca5zp9pgs9qzugghg63pwy43nz8nyqj9kg9kmd8esnjad73", + "bc1p8ye2xe6dnmdywusqasp4ywr8ym84vkm9yse2sa8rjkpygwxvg6dq9c0vks", + "bc1p6csxty9fdr8rap46fpact4rzgjtz6uk856ml2dwtclh5exxwm5mqug8hst", + "bc1pdzrmfqtx5dyzvhqmkptrjuqfersgqrujt9mwkqx4nw4lxttcy5dqwytgsg", + "bc1p8ep8cv85j74wm76uwu76duyuf8hnppy5ky3u5wlt7tgtzufunc9qdw94nv", + "bc1pc8qwcvrjq45q9k7l94863v3ks5l5x0qt00v5au9l505s7w5xmursqd4ggu", + "bc1p89ecwchwc3l8fhe0uv7tw89nvvghfux8qsavzvhtrlvpzd40fdaq9rr30y", + "bc1psr4mlf3hlqum3s39jwrxs2y7kzaw22xd0dnqdqj70cs3vjs49x5skkslxy", + "bc1p6wkjav4tm6ty44gk7g5c4jtganfzsmwgkz8fh0l3q3k57pk8m4wsnjsxgr", + "bc1pxq06rlfrn7nly7smx2933nde88c5jpqqpyjtyzk7qgu9huarp4uq4kphnq", + "bc1p58zp732fzr8snvcdd9vp97e4skhu5qepv9n7wy359aacy0v62kxq7jntjh", + "bc1pc8dv6xj8j6g468jjhg04g0qpgma2xps8vm8ez9ag2a9jqwh5cnmsym7v2f", + "bc1pfpmktvhxm4mu2kxj4a3tpm2zac373jmdzqttej4v6m5fg377f88sulpy3l", + "bc1pc080a43wa2v6x6zh3xygzezhkjm72klhq06q5rfpg4ytxffv4zfswexqrw", + "bc1pwu7lcx2kwn7e7h9ym3508x6vtn5dq2hest3rl7x2yuj02p7y727sf2s2cr", + "bc1pxlt7kfzjwxvuzslrdld80wxarzdh8mscyffyd7xukg2pmrt94r2ssetj98", + "bc1pyvh5s0xc09zqfwzr5rn05wtkry73z8u2vs84sghykmvphrncqlgshpzgpm", + "bc1p4g048x2lq8ee299hz7ycqe6v7cwx7q44vzvv8mcmwnpvnpj8wepsnk9hx5", + "bc1pkjlqxz646fwp8hf2szkt39tc65yk464rpmm2lxh867l2h87a3d2scysfps", + "bc1pef86c92xejfdtk2m4pjfp0dkwl47y4rtpdvsyuwz79f78jqqlx8q2lnlxn", + "bc1p5k7ly2uv9juylgkplw7djs7wm2elpurtjnvqm3cgurgf87fpvsdskwyrhp", + "bc1p5s0jh846uvalcdzkscmrxyun9gccrj75fusu9z4qyyuun0knt3usc4eyuk", + "bc1pr99selhwqstllqejdpaje89na52fvf2w26zx6mfye9xlc0z9deeqvlltyr", + "bc1pkxw6tzx6mcy5xu6sy94z84aau0txcdxt8r8cjvd7qmv9rpwpsgwsredrzu", + "bc1pqy8jvlvxkvpwnft73rsnu0kvgxmyray4w40dhs3y4s8qhgr0a0ps2n2d6u", + "bc1p8euq068jt0mclt7flwccw2smvhy308dtasslhseqdqf60wn8qadsg3a80n", + "bc1pf4q0xpnq4hmu7vzd4fupkm6tcv3kh8nzsxn59xt9s2u94e9egt4sy8u78u", + "bc1pv2j9ux98stf3m4jsfrm77qlnz96utfrl26lwtvpezkd4grl7ra5qe5jemp", + "bc1p7k9qxqwjhpcjdsqhddc95zqxmzqjkum6l97y02u6egezjwm623esadms82", + "bc1pdvjhar0a22snhgna2eaezdmd04us0as27n38xtesl6m64wz9u5zsc69gwd", + "bc1puq9gz8mx27n03pvpx7vfdv858vmqjvjtn2rh84ra8ucgq4w8p7uq3l5rxn", + "bc1pphngy0alt5l7sp5x7l4ezptgsyyu3jfkzdhjrzcce78g8zpnyvfquwqymf", + "bc1pm50m5yrxu2l02hrqxvh63uwq2j9ugc448m7py6fq9aq6ch7ktnmsclzlr4", + "bc1pgh0hq30rrj78fsszyf0lzft32yqfyh5upyf5vtr8d4gzhm7c7yvqc86xtq", + "bc1pnxalqyjl0g0wzq4vlgrf0udze6dskxygclunpr9g6z7vyhe9t5sss4lchq", + "bc1p4e2q784fape0mpeqerlrljxkvnqp9pysup97jzyjme0wllr5mrjslsvyc6", + "bc1p9fryzkss54hgsxcqvg39nk96v3rff524pqljr3uavmk3qlcul8wq72yypx", + "bc1pt35yskac793umz30hgvsgt3yeqv6rnman0wkt2usxh9t03n35lgqstam8c", + "bc1pwrvyzhspghger2sen48468nv77kqk6xxh4zrput2r4pqu6guhu8sfz2r2z", + "bc1px7yhlzvdc3w2en8tfh9k07mykx0dxj0yf98p436hc99g8utw3jfsvph0cr", + "bc1pzht80r9lwx0s2ptkky0ehjc8ka904s3sm57v076ua79n4z9tt4kqyz8k3a", + "bc1p3063wsrtg3wjp99sqgxv5e227q4fnjf8jhw30pc6fxnjr9f30mgqsme03v", + "bc1pje7mwjahhahncle3nv7k420jwrzsqcp5g7djqn6cw9pdkutawq6qp8wvej", + "bc1p56a9z8q47reye75mmnsq8lzkqdy3s3lhscyj26p56jx0h08z35uspt3lec", + "bc1p0xpm92l6fkmpwyjne75j4mc6at8lwcl9zm7lltvwjeqgfn9wn45s59xdya", + "bc1pmez9t0gjnel936j906jn8xyzu48qs2ahn9naeepwfgdkzgknqttsj397mm", + "bc1p7zgrvj9nc0kha2s97mayakawt7mf6vpwdztvjuyn48uqztx08ztsqtf6gh", + "bc1pw3h7rf6kal83kllgly4va5mr9m6hxn5hlpv32kw40h96vdgamhaq885ghf", + "bc1pmq8mp9pmpg4wmqpgzsenup4ww6naxyz623vz6kdjhv2dz79hg29srmw72w", + "bc1p70f8ahjneqxteh8exw3yj6rr37kg8xvmxe6lpmgvu8hn4mjdr4jqu5ht9a", + "bc1plw0pqd8d7l7j5fe4urrslg6v0z0nxvp6mzevwja4n0ypy6vxpzvsekm0ww", + "bc1p5vu5tp08graghe64upsmv400e6upszyumgkjas2x6g9ap2syy4zskwt2p4", + "bc1p5jnm3ee2fa3u8wrazjt80fveq2p33par30cxgcyk6cljkvutkdmsn4uujv", + "bc1pu7jlsgcyula76ypppuh5ntnenjmgwvggny7veeuseudfugdjlfkq6hs9s2", + "bc1ptpvcx3nw2z2c2se9txlp63pkljnxa2jtxe5tsgg7m4m95v93zhqqu7d0de", + "bc1paz5xp5f3egl0nt3tfc0zs3ztklc64xpy675hwpvdqp9zdfl2cp5sz2ys2a", + "bc1plc28erjndsxt6dnxfukywtleh5cjynhr0n5zh27p2877lmmxadms4qad9v", + "bc1p86tmgvpwxa7hue5csl30kqsnxunl5q2z9fy90pzlwfhty0msatcqnpw2f8", + "bc1p7wwscaz7akl6d27pnewz8fyvql24wsmhfek388hm45q2znn4ujxq82lddq", + "bc1pj8kzard8772xnu3xjz83nvcstmj7dk3ecxl603xdq6k00vtcuqfqrtunew", + "bc1pdff9cvc7pkpv60wmc5zrz62n4a2zcys87mn05tzd25q07qlvap5smw6d6w", + "bc1ptj0snq7agjn5deztz0tyf9se5atwpvgpqd82s9w78yvlh0sdhj0qd7efvz", + "bc1py9eauy4u50huc65p66mwzuhmvfspe0y3nv4ftgafqne3mmx4k34sspse6g", + "bc1pyj8fspeycdeftj3juulrf58q6lwwrnd4e0lrd30kmp0tpy7v8tssgytp7g", + "bc1pz08du2wm9c3wv54sgpnnx9sx2kjaf389h9a5tksjj96leym3hzssn3z83y", + "bc1pk8ekkhzs4xqr3yqj82968n345udkp9hcvtnlks2me2zgle3gucwqr2294a", + "bc1pprwzeaka5jcpxfm52waq4pjjc57kujvjupqh5r6fp8hslgsyp9pswryn2f", + "bc1pv25gprlgqgpthc4ju8fgtxasykergfrwg9wwz0zvmz9nsxs4sy9ssjvc2v", + "bc1pay457qu38efn49fhsc23c0cwvcdseks5hg246pfcjuy00cukh04qrk4cdw", + "bc1pfl43umqf5d49t2xpsy844dwu7p8gx2305pzqqsz7ge50zwmgsjfsg4gx0v", + "bc1pg83zayhfw8sjptumamyhjx9k0wg8extex0229q4fzpc9flgkwnks2qm3tt", + "bc1pj46szksxvqtvncs2je4a8yttfg9v9kw9cx9f75cpvmwfffjp2k5sf47mhc", + "bc1p2n5xmw3dqegddxxalkds2uthyrtd0rcgxdm95nxshdfu0g0v902q96ckw7", + "bc1pmnuuj36y4q9q5xw4xcwgmg9nyd6xwhfwqcdlxgrhrluud6gy0wpq7styfn", + "bc1pewf5fentnyep78sanwx048mkrfxgak45pj2s5yxnam5ynjlvnrlq4yw96s", + "bc1p4xu60lwr9egm36m0emhrptszly3kvgg6frwhypvengk4srm3jykqggp22r", + "bc1p3222shmjmswqw6ht4s58ady8rcxvql6lp4smqa42vrpug4n09c7sfv8kev", + "bc1pkr4z57cylug0he37dv2a53jquhdl5wf4qtx59p4sv07lpka7gans4wt5me", + "bc1pe4t6rymv4wwayyadkk6e5gluedj2c0fc3dskfy2c6nr796mf3uuskrxfzk", + "bc1p6sxed5g3w7dyxdlgr83w7g2ez40pfjrg96fghr0230fqv6j3uadsjx3msw", + "bc1p9z3xv54rfc949sdmdsw9qey7dwkt4qx993kzlquykrpvwps7fxns6gu5w2", + "bc1prpeywds8hgjcnqsc75n67mz6e2u38j9sgvpsny9t7e59ucye9c9q653k4r", + "bc1pdzyq9ruq7he5dgxspz77qvtw2ex2r8sfmnuzpmrrzph82v36m6tsa74dax", + "bc1pt97jmv4ay3avd6ae2xkshqkkg7c6ge5uktrktvllfs2seywnze0q4nm2t4", + "bc1p86749g86f4f6266cyul7hx9uu3jp9p7q7gpsuljdlaz772agtppqsa8cx3", + "bc1pavkuk90hct0erezjqm4ekxcwhjq3prn9dax82z2nuwmvwvds06tqevfuu2", + "bc1pm5jndljfkzlt43mensfqwqfrpmatytw867w3pq66re8vtewrtnysnrmcsj", + "bc1p64zpm66cj3y9j4nhjkvkrzepredsx64998atuh0u4h0gsxdmp2msny9wph", + "bc1pwuudp4mhw26r33sx88jyc43rkcg3gmep7uun9hpcnvqwdv6a5qnswdjyst", + "bc1p5drl2h2scrc0qep4trruj9kl2cfv3l7mkcgqrffp40zelf22kmxs5sa6ws", + "bc1pppmmvdqq0rspdx2ghx2aa94jugu65pqy0jvx0hqcvrujdtyxkkjsy7cna7", + "bc1p346s5frtkmd0eym3469y5mh3xu545uyqjflrr83ecyehyjqf754sflf20a", + "bc1pw0enq4hcpdfmnwtta7p6dpqr2lepqpkulapdw3zah8k5lzymhqgs5wt90a", + "bc1p08ykvs828ecrc5lqadgala5u3wme3fhyltt397mtvrglnsgfs9lq3tu43u", + "bc1p2wsj9v8ls98a4wm94nvcf44gv60vlzshz4myawukcppwc0laafhspnhk6v", + "bc1phfc6ynt5vhkw64q48lk3ux5lskxe3ffh9qdkarpf3dtt8p94tl5s0nwk7q", + "bc1paer03efptfl9cze78m58uqc2eak7zzd34fxj8rupd2ndce65z0kq3sumhq", + "bc1phtzvd6gp2yqyrk9eg3zeds0rvsw4cw49wjculguferfvd96l8vkqmhef8n", + "bc1plkyvaldx8gqvgsff0492qqzwk47fmzrmz6yjxk2xfknjxc4ml76qgyhh6e", + "bc1p34ase5s40c5srwsqf00rdpst8q9r5rqt6vkgwghsy3ne8cv06cgqajd7tz", + "bc1p6ugrk5yp3r7hsm8n6yq3clz9gfjc9qftlr9sujewsefez3xhggnqqc7l9w", + "bc1p2p9z459mgqhyh9mlxg6ywvtj3upd7r8zuek8vajqkyy6l7v6c2uq7dpn7h", + "bc1p6vlg3gx7y8u4s7mrmfj5nh7n7cpjdawmmufsg8az9h2pg2g04s8s6cjxs0", + "bc1pp028fqpfmvxhrs4eqphtgfv03lsm8dv6rke4gldq7ajxtzvjtnuq7npr0l", + "bc1p8vvk8wtxnwxy9zf62sy0qyr0xcusdmsjr5p9q98s2hrupm2xl8sqymchyj", + "bc1pm58mquzf82uzyn2pzvwfgc84r5rjndzzrss7vp86ay5wu4m8jk5stqsr5v", + "bc1pflq0ar28n8ejqm5v7jdcjhktg3ruecmd28gutexk7w3tc5fpvj7q5syhf0", + "bc1p8zkwx8j4pmjkaclntgtnd73c69a5fwg4nnz09lyeea9hvc8ddl8ql25e0g", + "bc1p632v0mpg28k8vwtpxt5exnthpuy8eytee8psqln2e0knvlayrp4qwtr59c", + "bc1pvd4d9w0zcdtpxjq9qmpwwxwe6ykknxa0kzs7ghd4dnj6lu8g49lq9eflkz", + "bc1p9pfwt90yhwd3y5x0xxmvq3vsaj428e32m0ysqev9l0lj7dyxtyyscsxka5", + "bc1pnvh4uttp5yxuya8ejnse3q76jkkjwueflx8yqdzwd8x2e64r3wxq262e37", + "bc1pqy9jyccwtdtqlvn26ytue00e4h4sss57q8phcjhjc7fcp4hgrzrsy93608", + "bc1pxvu4jung59k60sdnmdyh2sjlttcch9yhpfwnk00fx4ypj7wrcxgq86hvyf", + "bc1p4g3rtktdg79v52f0nvd46d89hvhya7w6nnsd4yl3fxkqu7pppp2szuvs5d", + "bc1pfmzsmz7upskgqt7y8nw2ye24usdlsdk7k3p2h379utyzhtc4l9nqeekq9j", + "bc1p84vmwr8hr6sztyevultuk2l6f636xnmvvfs36p0n6zhe28dxgumsv8mt3d", + "bc1pchwl8zamdg0k7ry27rgm8uqrdvj26qy70qj42dqfrzffzaq7dlvsazm3qr", + "bc1pdzvncggcya7ucs69e6s9m3x2l09vylkgk38gjnjxh9edht5j399s92hmhz", + "bc1ppzegrns4p3cq2snyhlyzz3ny0ctddmavrrpvmjlp6kpf4we6nyvs3nqknn", + "bc1phqprypjx2xxqdmgvelu96ch3lvshs7k6rxxa25x0h0n8a0kj42hsa7jprx", + "bc1pmw9d73029ynlcgp77mwazea0986xkjqdalja7u966c3jrefh7meq2cf7dn", + "bc1prery9n34mf9535y26hmvw59jj8qe6qnp606yrh5z49rv5t3u5ltsunwzxk", + "bc1puet7z7etlw96fs3ynjx3mv6xwkf3egt7z2tmqvgx3sd76h7cfkxsumrhdl", + "bc1py7gx3xfyld4arsnpnxzv8w0jx8gf70xpc9wljnpe8vxhawt2rjwqjt0zpu" + ] +} \ No newline at end of file diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index d5b02ea697..5c5411e480 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -1,18 +1,11 @@ -const sdk = require("@defillama/sdk"); -const { sumTokensExport } = require("../helper/sumTokens"); +const { cexExports } = require('../helper/cex') +const bitcoinOwners = require('./bitcoin.json') -const owners = [ - "bc1qpq80t9phhkducn2p2mgg4vrnsp8p5q3dm9t9hjyqe7unvu5t2fesvy4rzr", //Solv node - "bc1qjg8234tdlsg3m5hm7fqtc5xe4vdv5fn353vh404qlz7s7q8drevqapsz67", //Dao Validator 2 - "bc1ql45htw479z2jxdhn3lwtcjp452hn2jtajyqc8ps6ac6jvgk563fq3sj3jp", //Satoshi App - "bc1qwukfufwmq437kry9xcfxmv5sv7vnq9scqyhfcrudt3xghdwvqmuqennqpc", //Infstone - "bc1q8dyhmkmzpug3c9dcj45ycy2sa4aetsh53ssd7wk24pzv7ufcar8qywhvxe", //Dao Validator 1 - "bc1qn95r70zlw4ylyp6luytg3j5hfnmpds8vcle6a4svwdghjqzahzssrqyzfw", //Dao Validator 6 - "bc1q7j4hlsyv7fcze74fa56g8nxpegynze03wmqrq6hwd83qg3vpz8xsv4u2y8", //Dao Mining Pool 4 -]; - -module.exports = { - methodology: "Staking tokens via Babylon counts as TVL", +const config = { bitcoin: { - tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), - }} \ No newline at end of file + owners: [].concat(bitcoinOwners.core, bitcoinOwners.bbn), + } +} + +module.exports = cexExports(config) +module.exports.methodology = 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.' \ No newline at end of file From 798e7ebbc5b0af5f657c5de9f24ddf149573cb4d Mon Sep 17 00:00:00 2001 From: idea2409 <60475612+idea2409@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:02:57 +0700 Subject: [PATCH 0633/1768] FWX DEX add chain base (#11871) Co-authored-by: ideapacito Co-authored-by: ideapacito Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/fwx-dex/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/fwx-dex/index.js b/projects/fwx-dex/index.js index 5a1bd24e4a..e28fab34cd 100644 --- a/projects/fwx-dex/index.js +++ b/projects/fwx-dex/index.js @@ -3,6 +3,7 @@ const { transformDexBalances } = require('../helper/portedTokens') const config = { avax: { factory: '0x2131Bdb0E0B451BC1C5A53F2cBC80B16D43634Fa', fromBlock: 46372045 }, + base: { factory: '0x3512DA8F30D9AE6528e8e0787663C14Fe263Fbea', fromBlock: 15001568 }, } module.exports = { From 8c2d51a4b6bc1063cd4920be473f75d88d661d80 Mon Sep 17 00:00:00 2001 From: linkinlpc Date: Thu, 10 Oct 2024 16:20:06 +0800 Subject: [PATCH 0634/1768] add ascentyield (#11873) --- projects/ascentyield/index.js | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 projects/ascentyield/index.js diff --git a/projects/ascentyield/index.js b/projects/ascentyield/index.js new file mode 100644 index 0000000000..2cffc9780d --- /dev/null +++ b/projects/ascentyield/index.js @@ -0,0 +1,38 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require("../helper/solana"); +const { post } = require('../helper/http'); +const { sumTokensExport } = require("../helper/unwrapLPs") + + +const hyperliquidSubAccount = "0x75b2e5c67d2116bcf1b77c5e6444fc18bc5d38a4" // for trading at hyperliquid +const jlpholder = "9nAgg9wAnuiPv57dXkmCwoGhhbTHS1RRzvYLjnRGZtXp" // for keeping JLP and USDC(buy JLP) +const arbiusdcholder = "0xa6Ff9a77D6bD8B0a759055Cd8885e23228bc10Ec" // USDC on arbi(will bridge to solana) +const hyperliquidMainAccount = "0x7151609Fdc7E0Cac89FB9720F0957AF9d552f8f9" // will transfer USDC to sub account + + +module.exports = { + methodology: "Aggregate trading account margins in HyperLiquid and JLP, USDC on the solana network.", + solana: { + tvl: async (api) => { + return sumTokens2({ + owner: jlpholder + }); + }, + }, + hyperliquid: { + tvl: async (api) => { + let data = await post('https://api.hyperliquid.xyz/info', { + type: "clearinghouseState", + user: hyperliquidSubAccount + }) + data = parseInt(data.marginSummary.accountValue) + api.addCGToken('usd-coin', data) + } + }, + arbitrum: { + tvl: sumTokensExport({ + owners: [arbiusdcholder, hyperliquidMainAccount], + tokens: [ADDRESSES.arbitrum.USDC_CIRCLE,] + }) + }, +}; From bede762182ead8d95ce74826802a871867ac7c4e Mon Sep 17 00:00:00 2001 From: Bridgerz Date: Thu, 10 Oct 2024 09:29:47 +0100 Subject: [PATCH 0635/1768] Add SuiBridge Adapter (#11869) --- projects/suibridge/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/suibridge/index.js diff --git a/projects/suibridge/index.js b/projects/suibridge/index.js new file mode 100644 index 0000000000..ba97a7bc16 --- /dev/null +++ b/projects/suibridge/index.js @@ -0,0 +1,12 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owner: "0x312e67b47A2A29AE200184949093D92369F80B53", + fetchCoValentTokens: true, + permitFailure: true + }), + }, +}; \ No newline at end of file From a776eec515358b33d4e75c3b95358eb0d068cfd2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:37:00 +0200 Subject: [PATCH 0636/1768] track alienbase treasury #11868 --- projects/treasury/alienbase.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 projects/treasury/alienbase.js diff --git a/projects/treasury/alienbase.js b/projects/treasury/alienbase.js new file mode 100644 index 0000000000..0b7e5f74ec --- /dev/null +++ b/projects/treasury/alienbase.js @@ -0,0 +1,8 @@ +const { treasuryExports } = require("../helper/treasury"); + +module.exports = treasuryExports({ + base: { + owners: ['0x4aB9070B7680f802cBf8322e597a4409902171e5'], + ownTokens: ['0x1dd2d631c92b1aCdFCDd51A0F7145A50130050C4'], + }, +}) \ No newline at end of file From 581b26436aa85d629a02c7f46cee8960fcc874bc Mon Sep 17 00:00:00 2001 From: Brendon Votteler Date: Thu, 10 Oct 2024 10:40:39 +0200 Subject: [PATCH 0637/1768] Refactor: fetch BOB Gateway owners from chain (#11867) --- projects/bob-gateway/index.js | 47 +++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/projects/bob-gateway/index.js b/projects/bob-gateway/index.js index 2c4588b454..7eb9c18761 100644 --- a/projects/bob-gateway/index.js +++ b/projects/bob-gateway/index.js @@ -1,32 +1,43 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs"); +const factories = { + v1: "0x1831d29376eb94bba3ca855af7984db923768b27", + v2: "0x37f330e667208633e1da1cf601d01f0ef8484306", + v3: "0xAE6770a207E86FaE3b191564FA55ce7Bfee0Dde9", +}; + +const abis = { + v1: { + allOnramps: "function allOnramps() view returns (address[])", + }, + v2: { + allGateways: "function allGateways() view returns (address[])", + }, + v3: { + allGateways: "function allGateways() view returns (address[])", + }, +}; + module.exports = { bob: { - tvl: (api) => - sumTokens2({ + tvl: async (api) => { + const gateways = (await api.batchCall([ + { abi: abis.v1.allOnramps, target: factories.v1 }, + { abi: abis.v2.allGateways, target: factories.v2 }, + { abi: abis.v3.allGateways, target: factories.v3 } + ])).flat(); + + return sumTokens2({ api, chain: "bob", tokens: [ ADDRESSES.bob.WBTC, ADDRESSES.bob.TBTC, ], - owners: [ - // taken from onramp factory (allOnramps): https://explorer.gobob.xyz/address/0x1831d29376eb94bba3ca855af7984db923768b27?tab=read_contract - "0x587e6E2b280C70ec811a371671D3CBE9D7b9F691", - "0xA1884124a52331Bc2fa66e2b0EFa15856C6830c6", - "0x2e0A1Fa2f61985c475B869559cF2Cf733d4DB282", - "0xCA94d277d04e8e6ce960F7492b2df62e2215d562", - "0x9BBBc8F4e4258cC9Ec79164DDB7ef72954f381E2", - "0x47340424457463Fa77B59FDAdea31cA886a241FD", - // V2 gateways taken from gateway registry (allGateways): https://explorer.gobob.xyz/address/0x37f330e667208633e1da1cf601d01f0ef8484306?tab=read_contract - "0x1578c26085b45A559D6B4D4cCfc1DD9e5c66F7B6", - "0x2a7b7Db980B2228D5FfC47711D09d13F8F90961e", - // V3 gateways taken from gateway registry (allGateways): https://explorer.gobob.xyz/address/0xAE6770a207E86FaE3b191564FA55ce7Bfee0Dde9?tab=read_contract - "0xcc2c1d45A3ECeEdec364a6B9e537AE97Fa20bEa7", - "0x32768E87f7E929616f43B02F83c0F155A942Bc6B", - ], - }), + owners: gateways, + }); + }, } }; From 448051873fc90ac15897bf11c10cf24bd2025553 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:29:16 +0100 Subject: [PATCH 0638/1768] Update index.js --- projects/pstake-btc/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 0609a8fa5c..19248616fa 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -4,8 +4,8 @@ const sdk = require("@defillama/sdk"); const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay", "bc1px92pntcj0wd5076nnymp787a7qczsaauuefgntxngdwvkd584xgsaagem2", "bc1pxhkczd3jq9nq50p2xll99edhxlx5dj6ztgw5pgtzszjtlvg7tl4s8ttf04"]; module.exports = { - methodology: `Total amount of BTC in ${owner}. Restaked on babylon`, + methodology: `Total amount of BTC in ${owner.join(", ")}. Restaked on babylon`, bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owner })]), }, -}; \ No newline at end of file +}; From 87b8654ef6636d7c850c26eb7a39fd32b36ffb21 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:37:15 +0200 Subject: [PATCH 0639/1768] Update raindex adapter (#11874) Co-authored-by: rouzwelt --- projects/raindex/index.js | 92 +++++++++++++++++++++++++++++---------- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/projects/raindex/index.js b/projects/raindex/index.js index 0dd2e88ab9..dde9156dbd 100644 --- a/projects/raindex/index.js +++ b/projects/raindex/index.js @@ -1,44 +1,88 @@ -const { cachedGraphQuery } = require("../helper/cache") +const { sumTokens2 } = require("../helper/unwrapLPs") const orderbooks = { arbitrum: { - address: "0x550878091b2b1506069f61ae59e3a5484bca9166", - sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-arbitrum/0.1/gn", + v3: [ + { address: "0x90caf23ea7e507bb722647b0674e50d8d6468234", start: 1710573200 }, + ], + v4: [ + { address: "0x550878091b2b1506069f61ae59e3a5484bca9166", start: 1727110056 }, + ] }, base: { - address: "0xd2938e7c9fe3597f78832ce780feb61945c377d7", - sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-base/0.7/gn", + v3: [ + { address: "0x2aee87d75cd000583daec7a28db103b1c0c18b76", start: 1710593051 }, + ], + v4: [ + { address: "0xd2938e7c9fe3597f78832ce780feb61945c377d7", start: 1724856007 }, + { address: "0xa2f56f8f74b7d04d61f281be6576b6155581dcba", start: 1719934425 }, + { address: "0x32aCbdF51abe567C91b7a5cd5E52024a5Ca56844", start: 1724451937 }, + { address: "0x80DE00e3cA96AE0569426A1bb1Ae22CD4181dE6F", start: 1724168357 }, + { address: "0x7A44459893F99b9d9a92d488eb5d16E4090f0545", start: 1723404441 }, + ], }, bsc: { - address: "0xd2938e7c9fe3597f78832ce780feb61945c377d7", - sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-bsc/0.1/gn", + v3: [ + { address: "0xb1d6d10561d4e1792a7c6b336b0529e4bfb5ea8f", start: 1710592564 }, + ], + v4: [ + { address: "0xd2938e7c9fe3597f78832ce780feb61945c377d7", start: 1727110200 }, + ] + }, + ethereum: { + v3: [ + { address: "0xf1224a483ad7f1e9aa46a8ce41229f32d7549a74", start: 1707183011 }, + ], + v4: [] }, flare: { - address: "0xcee8cd002f151a536394e564b84076c41bbbcd4d", - sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-flare/0.2/gn", + v3: [ + { address: "0xb06202aA3Fe7d85171fB7aA5f17011d17E63f382", start: 1712406628 }, + ], + v4: [ + { address: "0xcee8cd002f151a536394e564b84076c41bbbcd4d", start: 1725430973 }, + { address: "0xaa3b14Af0e29E3854E4148f43321C4410db002bC", start: 1724097373 }, + { address: "0xA2Ac77b982A9c0999472c1De378A81d7363d926F", start: 1724079109 }, + { address: "0x582d9e838FE6cD9F8147C66A8f56A3FBE513a6A2", start: 1720717267 }, + ] }, linea: { - address: "0x22410e2a46261a1b1e3899a072f303022801c764", - sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-linea/0.1/gn", + v3: [], + v4: [ + { address: "0x22410e2a46261a1b1e3899a072f303022801c764", start: 1727718941 }, + { address: "0xF97DE1c2d864d90851aDBcbEe0A38260440B8D90", start: 1722282647 }, + ] }, + // matchain: { + // v3: [], + // v4: [ + // { address: "0x40312EDAB8Fe65091354172ad79e9459f21094E2", start: 1725285390 }, + // ] + // }, polygon: { - address: "0x7d2f700b1f6fd75734824ea4578960747bdf269a", - sg: "https://api.goldsky.com/api/public/project_clv14x04y9kzi01saerx7bxpg/subgraphs/ob4-polygon/0.4/gn", + v3: [ + { address: "0xde5abe2837bc042397d80e37fb7b2c850a8d5a6c", start: 1705929922 }, + { address: "0x34200e026fbac0c902a0ff18e77a49265ca6ac99", start: 1691086795 }, + { address: "0xd3edafeb9eaa454ce26e60a66ccda73939c343a4", start: 1698953082 }, + { address: "0xc95a5f8efe14d7a20bd2e5bafec4e71f8ce0b9a6", start: 1710528345 }, + { address: "0x95c9bf235435b660aa69f519904c3f175aab393d", start: 1698859456 }, + { address: "0xdcdee0e7a58bba7e305db3abc42f4887ce8ef729", start: 1701659318 }, + { address: "0x16d518706d666c549da7bd31110623b09ef23abb", start: 1702067640 }, + ], + v4: [ + { address: "0x7d2f700b1f6fd75734824ea4578960747bdf269a", start: 1726792922 }, + { address: "0x2f209e5b67a33b8fe96e28f24628df6da301c8eb", start: 1721758591 }, + { address: "0xb8CD71e3b4339c8B718D982358cB32Ed272e4174", start: 1723733415 }, + { address: "0x001B302095D66b777C04cd4d64b86CCe16de55A1", start: 1723728017 }, + { address: "0xAfD94467d2eC43D9aD39f835BA758b61b2f41A0E", start: 1721746069 }, + ] }, } -const query = `query MyQuery($lastId: ID) { - erc20S(where: {id_gt: $lastId} first: 1000) { id } -}` - async function tvl(api) { - const { address, sg } = orderbooks[api.chain] - - const cacheKey = `raindex/${api.chain}` - const res = await cachedGraphQuery(cacheKey, sg, query, { fetchById: true, }) - - const tokens = res.map(t => t.id) - return api.sumTokens({ tokens, owner: address }) + const { v3 = [], v4 = [] } = orderbooks[api.chain] + const owners = v3.concat(v4).map(orderbook => orderbook.address) + return sumTokens2({ api, owners, fetchCoValentTokens: true, permitFailure: true }) } module.exports = { From 5bcb007d45f2d57554fb1a32451e9d75f95806b0 Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Fri, 11 Oct 2024 12:36:25 +0300 Subject: [PATCH 0640/1768] Add WBTC tokens to CrossCurve TVL (#11878) --- projects/crosscurve/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index f2b03fc101..be9a056b48 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -15,6 +15,7 @@ module.exports = { "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3Crv "0xc4AD29ba4B3c580e6D59105FFf484999997675Ff", // crv3crypto "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH + "0xb7ecb2aa52aa64a717180e030241bc75cd946726", // tBTC/WBTC ], }), }, @@ -31,6 +32,7 @@ module.exports = { "0x73aF1150F265419Ef8a5DB41908B700C32D49135", // crvUSDT "0x7f90122BF0700F9E7e1F688fe926940E8839F353", // 2CRV "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // WETH + "0x186cf879186986a20aadfb7ead50e3c20cb26cec", // 2BTC-ng ], }), }, @@ -46,6 +48,7 @@ module.exports = { "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171", // aave "0xa70af99bff6b168327f9d1480e29173e757c7904", // crvUSDT "0xdad97f7713ae9437fa9249920ec8507e5fbb23d3", // crv3crypto + "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", // WBTC ], }), }, @@ -60,6 +63,7 @@ module.exports = { "0xc4ec3ab41182e70ca45a764ffc5c45b9a82ccc97", // crvUSDC "0xA5E0E46462970C9Ee8C2ECadcde254c483748Ec4", // b3pool "0xae87e5fa20f335ce14aa3b9e0616308d9ac7d4ce", // crvUSDT + "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", // BTCB ], }), }, @@ -75,6 +79,7 @@ module.exports = { "0x1337bedc9d22ecbe766df105c9623922a27963ec", // 3pool "0xd1b30ba128573fcd7d141c8a987961b40e047bb6", // crvUSDT "0x4200000000000000000000000000000000000006", // WETH + "0x1dc5c0f8668a9f54ed922171d578011850ca0341", // 2BTC ], }), }, @@ -88,6 +93,7 @@ module.exports = { ADDRESSES.avax.DAI, // DAI "0x1337BedC9D22ecbe766dF105c9623922A27963EC", // av3crv "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", // crv3crypto + "0x152b9d0FdC40C096757F570A51E494bd4b943E50", // BTC.b ], }), }, @@ -97,6 +103,7 @@ module.exports = { tokens: [ "0xf6C5F01C7F3148891ad0e19DF78743D31E390D1f", // 4pool "0x4200000000000000000000000000000000000006", // WETH + "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf", // cbBTC ], }), }, @@ -129,6 +136,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", // WETH + "0x3aab2285ddcddad8edf438c1bab47e1a9d05a9b4", // WBTC ], }), }, From 9cdbe5554df87cb983f88370e7dc02b937c1e420 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:13:56 +0200 Subject: [PATCH 0641/1768] find bitcoin duplicates --- package.json | 1 + projects/avalon-finance-cedefi/index.js | 7 +++ utils/scripts/checkBTCDups.js | 78 +++++++++++++++++++++++++ utils/scripts/coingeckoApi.js | 1 - 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 utils/scripts/checkBTCDups.js diff --git a/package.json b/package.json index ab06da450e..5f2df394d3 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "entities": "cd utils;npm i; cd ..; node utils/testInteractive entities", "useTokenLabels": "node utils/scripts/useTokenLabels.js", "biggest-files": "find ./projects -name '*.js' -not -path './projects/helper/*' -not -path './projects/curve/*' -not -path './projects/sigmao/*' -exec du -sh {} \\; | sort -rh | head -n 100", + "check-bitcoin-duplicates": "node utils/scripts/checkBTCDups.js", "postinstall": "echo 'run \"npm update @defillama/sdk\" if you want lastest sdk changes' " }, "author": "", diff --git a/projects/avalon-finance-cedefi/index.js b/projects/avalon-finance-cedefi/index.js index 6ae03bd1c4..3ed542d253 100644 --- a/projects/avalon-finance-cedefi/index.js +++ b/projects/avalon-finance-cedefi/index.js @@ -27,6 +27,11 @@ const getMetrics = async (api, borrowed) => { // @note: no more count collateral on Ethereum, count collateral on Bitcoin instead // const balanceOfCollateral = marketData.collateral; const balanceOfDebt = marketData.debt; + if (!borrowed) { + const supply= await api.call({ abi: 'erc20:totalSupply', target: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9'}) + api.add('0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', supply) + + } if (borrowed) api.add(usdtAddress, balanceOfDebt); @@ -47,3 +52,5 @@ module.exports = { ]), }, } + +delete module.exports.bitcoin \ No newline at end of file diff --git a/utils/scripts/checkBTCDups.js b/utils/scripts/checkBTCDups.js new file mode 100644 index 0000000000..c4f824311e --- /dev/null +++ b/utils/scripts/checkBTCDups.js @@ -0,0 +1,78 @@ +const fs = require('fs'); +const path = require('path'); + +// Regular expression to match Bitcoin addresses +// const btcAddressRegex = /\b(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}\b/g; + + +// Regular expression to match alphanumeric strings between single or double quotes +const addressRegex = /['"]([a-zA-Z0-9]{25,99})['"]/g; + +// Function to read all files in a directory recursively +const readFilesInDirectory = (dir) => { + let files = []; + const items = fs.readdirSync(dir); + for (const item of items) { + const fullPath = path.join(dir, item); + if (fs.statSync(fullPath).isDirectory()) { + files = files.concat(readFilesInDirectory(fullPath)); + } else { + files.push(fullPath); + } + } + return files; +}; + +// Function to extract Bitcoin addresses from a file +const extractBtcAddresses = (filePath) => { + const content = fs.readFileSync(filePath, 'utf8'); + return content.match(addressRegex) || []; +}; + +// Function to find duplicates between files +const findDuplicates = (folderPath) => { + const files = readFilesInDirectory(folderPath); + const addressMap = new Map(); + + for (const file of files) { + const addresses = extractBtcAddresses(file); + for (let address of addresses) { + address = address.replace(/'/g, '').replace(/"/g, '') + if (address.startsWith('0x') || !/\d/.test(address)) continue; + if (addressMap.has(address)) { + addressMap.get(address).push(file); + } else { + addressMap.set(address, [file]); + } + } + } + + console.log(addressMap) + + // Find duplicates + const duplicates = []; + for (const [address, fileList] of addressMap.entries()) { + if (fileList.length > 1) { + duplicates.push({ address, files: fileList }); + } + } + + return duplicates; +}; + +// Main function +const main = (folderPath) => { + const duplicates = findDuplicates(folderPath); + if (duplicates.length > 0) { + console.log('Duplicate Bitcoin addresses found:'); + for (const { address, files } of duplicates) { + console.log(`Address: ${address}`); + console.log(`Files: ${files.join(', ')}`); + console.log('---'); + } + } else { + console.log('No duplicate Bitcoin addresses found.'); + } +}; + +main(__dirname+'/../../projects'); \ No newline at end of file diff --git a/utils/scripts/coingeckoApi.js b/utils/scripts/coingeckoApi.js index c91a9360bb..eead4b226d 100644 --- a/utils/scripts/coingeckoApi.js +++ b/utils/scripts/coingeckoApi.js @@ -14,7 +14,6 @@ const ONE_WEEK = 7 * ONE_DAY run() - function writeToCache() { fs.writeFileSync(cacheFile, JSON.stringify(geckoCache)) } From 7a7bd55f9671e5774d8154e3e4d7cb21a01306b3 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 11 Oct 2024 11:55:06 +0100 Subject: [PATCH 0642/1768] stkd lps --- projects/impermax/impermaxHelper.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/impermax/impermaxHelper.js b/projects/impermax/impermaxHelper.js index b52e855789..b748b736bf 100644 --- a/projects/impermax/impermaxHelper.js +++ b/projects/impermax/impermaxHelper.js @@ -92,6 +92,7 @@ function impermaxHelper(exportsObj, config, blacklistedPools) { async function getUVTokens(rawPools, underlyings, uSymbols, api) { var impermaxSymbol; + var stableImpermaxSymbol; switch (api.chain) { case 'ethereum': impermaxSymbol = 'UNI-V2' @@ -110,7 +111,8 @@ function impermaxHelper(exportsObj, config, blacklistedPools) { case 'optimism': default: impermaxSymbol = 'STKD-UNI-V2' - return underlyings.filter((_, i) => uSymbols[i] === impermaxSymbol) + stableImpermaxSymbol = 'STKD-STBL' + return underlyings.filter((_, i) => uSymbols[i] === impermaxSymbol || uSymbols[i] === stableImpermaxSymbol) } } From 5f2f78df1b47fd064ac72ec384564860c63f63c4 Mon Sep 17 00:00:00 2001 From: brucelsoon <154420974+brucelsoon@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:14:33 +0800 Subject: [PATCH 0643/1768] add usdx.money USDX (#11776) Co-authored-by: brucelsoon --- projects/usdx/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/usdx/index.js diff --git a/projects/usdx/index.js b/projects/usdx/index.js new file mode 100644 index 0000000000..c56b1b2cd8 --- /dev/null +++ b/projects/usdx/index.js @@ -0,0 +1,19 @@ +const sdk = require("@defillama/sdk"); +const usdxAddress = "0xf3527ef8dE265eAa3716FB312c12847bFBA66Cef"; +const chains = ["ethereum", "bsc", "arbitrum"]; + +chains.forEach((chain) => { + module.exports[chain] = { + tvl: async (api, block) => { + const res = await sdk.api.erc20.totalSupply({ + target: usdxAddress, + block, + chain: chain, + decimals: 18, + }); + return { + "usdx-money-usdx": res.output, + }; + }, + }; +}); \ No newline at end of file From bf608c9bbee632b1786682c175829db2b6a07f8c Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:37:55 +0200 Subject: [PATCH 0644/1768] update script --- utils/scripts/checkBTCDups.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/utils/scripts/checkBTCDups.js b/utils/scripts/checkBTCDups.js index c4f824311e..45e7d49dd9 100644 --- a/utils/scripts/checkBTCDups.js +++ b/utils/scripts/checkBTCDups.js @@ -25,30 +25,35 @@ const readFilesInDirectory = (dir) => { // Function to extract Bitcoin addresses from a file const extractBtcAddresses = (filePath) => { - const content = fs.readFileSync(filePath, 'utf8'); + let content = fs.readFileSync(filePath, 'utf8'); + if (['solana', 'tezos'].some(i => content.includes(i)) && !content.includes('bitcoin')) return [] + content = content.replaceAll('modifyEndpoint("', '') + content = content.replaceAll('modifyEndpoint(\'', '') return content.match(addressRegex) || []; }; // Function to find duplicates between files const findDuplicates = (folderPath) => { - const files = readFilesInDirectory(folderPath); + console.log(folderPath) + const files = readFilesInDirectory(folderPath+'/'); const addressMap = new Map(); - for (const file of files) { + for (let file of files) { const addresses = extractBtcAddresses(file); + file = file.replace(folderPath, '') for (let address of addresses) { address = address.replace(/'/g, '').replace(/"/g, '') if (address.startsWith('0x') || !/\d/.test(address)) continue; if (addressMap.has(address)) { - addressMap.get(address).push(file); + const arry = addressMap.get(address) + if (!arry.includes(file)) + arry.push(file); } else { addressMap.set(address, [file]); } } } - console.log(addressMap) - // Find duplicates const duplicates = []; for (const [address, fileList] of addressMap.entries()) { @@ -75,4 +80,4 @@ const main = (folderPath) => { } }; -main(__dirname+'/../../projects'); \ No newline at end of file +main(path.join(__dirname, '../../projects')); \ No newline at end of file From 62c77a4e0729478f2cca0d7102fee0ebbb2a95af Mon Sep 17 00:00:00 2001 From: Aleksei Lushnikov Date: Fri, 11 Oct 2024 15:22:17 +0100 Subject: [PATCH 0645/1768] symbiosis adds bsquared chain support (#11885) --- projects/symbiosis-finance/config.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/symbiosis-finance/config.js b/projects/symbiosis-finance/config.js index 3797ad81e9..3594630913 100644 --- a/projects/symbiosis-finance/config.js +++ b/projects/symbiosis-finance/config.js @@ -40,6 +40,9 @@ const TOKENS = { gravity: { USDC_e: ADDRESSES.gravity.USDC_e, wG: ADDRESSES.gravity.wG + }, + bsquared: { + WBTC: ADDRESSES.bsquared.WBTC, } } @@ -428,5 +431,14 @@ module.exports = { '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 ] }, + { + name: 'bsquared', + tokens: [ + TOKENS.bsquared.WBTC, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, ] } \ No newline at end of file From 8447422825ed0acde50e15050d2b860656f77d77 Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Fri, 11 Oct 2024 22:25:29 +0800 Subject: [PATCH 0646/1768] add base chain (#11884) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 1 + projects/pell/index.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 05ec2b4353..0ca01840ed 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -51,6 +51,7 @@ const fixBalancesTokens = { base: { [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, '0x0a27e060c0406f8ab7b64e3bee036a37e5a62853': { coingeckoId: 'zai-stablecoin', decimals: 18 }, + '0xc26c9099bd3789107888c35bb41178079b282561': { coingeckoId: 'solv-protocol-solvbtc-bbn', decimals: 18}, }, op_bnb: { [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, diff --git a/projects/pell/index.js b/projects/pell/index.js index 0ba4207b86..8a02724ce5 100644 --- a/projects/pell/index.js +++ b/projects/pell/index.js @@ -1,7 +1,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require('../helper/cache') -const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer'] +const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'base', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer'] chains.forEach(chain => { module.exports[chain] = { From 6c31dd25181e13f2fdd393f1b50a1f60e2e721cb Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Fri, 11 Oct 2024 07:26:55 -0700 Subject: [PATCH 0647/1768] Add gnosis uniswap (#11879) --- projects/visor/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/visor/config.js b/projects/visor/config.js index a9b2a66a36..8aa4ca67f1 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -106,6 +106,7 @@ const HYPE_REGISTRY = { ["0xFc13Ebe7FEB9595D70195E9168aA7F3acE153621", 9080358], // Hercules ], xdai: [ + ["0xc0766FF871c6C8e72C110100d0120829dc017d38", 36307837], // Uniswap ["0x683292172E2175bd08e3927a5e72FC301b161300", 31760496], // Swapr ], astrzk: [ From b932194b4e05d23ecff3a62597347c5c4973f24c Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 11 Oct 2024 07:27:24 -0700 Subject: [PATCH 0648/1768] Update: Additional ZTX Staking Pool (#11877) --- projects/steer/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/steer/index.js b/projects/steer/index.js index 0c0f7c24a1..feebf6ae12 100644 --- a/projects/steer/index.js +++ b/projects/steer/index.js @@ -194,7 +194,8 @@ module.exports.arbitrum.staking = stakings( "0xaCdC6fC8F84fbA26f065489a7bf5837D7CDf546F", "0xff46e1B60dD9De89Aa04902D5c3c5ca01f8576A4", "0x1E6a358a1721e0D2B84f39FD328FC03A1b6e863B", - "0x3338B85fB1607C519962571B67061e02408475Bb" + "0x3338B85fB1607C519962571B67061e02408475Bb", + "0x6519A921d0E6F06524eff5DF976abc9A3ABF36cF" ], "0x1C43D05be7E5b54D506e3DdB6f0305e8A66CD04e", "arbitrum" From c3b07bcd13de94bedaae093087ca61c32fba42e9 Mon Sep 17 00:00:00 2001 From: Swan Swap Date: Fri, 11 Oct 2024 21:46:50 +0700 Subject: [PATCH 0649/1768] add shape chain and swan swap Dex (#11880) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/env.js | 2 ++ projects/helper/tokenMapping.js | 4 ++++ projects/multex/index.js | 3 +++ projects/swanswap/index.js | 3 +++ 5 files changed, 13 insertions(+) create mode 100644 projects/multex/index.js create mode 100644 projects/swanswap/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index d3f693a0f4..9aeaca4ff3 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -283,6 +283,7 @@ "scroll", "secret", "sei", + "shape", "shibarium", "shiden", "shimmer_evm", diff --git a/projects/helper/env.js b/projects/helper/env.js index aaae27ed92..ecc98b4ae1 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -18,6 +18,8 @@ const DEFAULTS = { ETN_RPC: "https://rpc.ankr.com/electroneum", MATCHAIN_RPC: "https://rpc.matchscan.io,https://rpc.matchain.io", MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", + SHAPE_RPC:'https://mainnet.shape.network', + SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 0ca01840ed..b859e4fe2f 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,6 +40,10 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + shape: { + '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, + '0x48A9B22b80F566E88f0f1DcC90Ea15A8A3bAE8a4': { coingeckoId: 'ethereum', decimals: 18 }, + }, hela: { '0xf5b85320a772b436cb8105441a3db9ba29437b4a': { coingeckoId: "usd-coin", decimals: 6 }, '0xd3442073fa7ccf8a7c39d95dc125cd59497aa078': { coingeckoId: "tether", decimals: 6 }, diff --git a/projects/multex/index.js b/projects/multex/index.js new file mode 100644 index 0000000000..4d88671860 --- /dev/null +++ b/projects/multex/index.js @@ -0,0 +1,3 @@ +const { uniTvlExport } = require('../helper/unknownTokens') + +module.exports = uniTvlExport('shape', '0x74Eac16615ed3b5A8Df2d00d72C72780beDED02A') \ No newline at end of file diff --git a/projects/swanswap/index.js b/projects/swanswap/index.js new file mode 100644 index 0000000000..8d455c7369 --- /dev/null +++ b/projects/swanswap/index.js @@ -0,0 +1,3 @@ +const { uniTvlExport } = require('../helper/unknownTokens') + +module.exports = uniTvlExport('shape', '0x2Be0c88CCc1d42920beAe4633CDdBbACe5e8812c') \ No newline at end of file From 7a5a208e6192cb3d8144df1512ff88ebf1e57229 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 11 Oct 2024 23:30:56 +0200 Subject: [PATCH 0650/1768] fix usdx --- projects/usdx/index.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/projects/usdx/index.js b/projects/usdx/index.js index c56b1b2cd8..c346cfb4f7 100644 --- a/projects/usdx/index.js +++ b/projects/usdx/index.js @@ -1,19 +1,11 @@ -const sdk = require("@defillama/sdk"); const usdxAddress = "0xf3527ef8dE265eAa3716FB312c12847bFBA66Cef"; const chains = ["ethereum", "bsc", "arbitrum"]; chains.forEach((chain) => { module.exports[chain] = { - tvl: async (api, block) => { - const res = await sdk.api.erc20.totalSupply({ - target: usdxAddress, - block, - chain: chain, - decimals: 18, - }); - return { - "usdx-money-usdx": res.output, - }; + tvl: async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: usdxAddress}) + api.addCGToken('usdx-money-usdx', supply/1e18) }, - }; -}); \ No newline at end of file + } +}) \ No newline at end of file From c8f63ba6ac01e4793ecd3cce8079101aec60e982 Mon Sep 17 00:00:00 2001 From: tpktpj Date: Sat, 12 Oct 2024 00:44:37 -0400 Subject: [PATCH 0651/1768] Update unibtcMarket on BSC --- projects/avalon-finance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 8d75ee1bf1..ef941e7aeb 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -32,7 +32,7 @@ const pumpBTCMarkets = { const unibtcMarkets = { merlin: aaveExports('', '0x0024818043D04B1Cc9685233D47eF7eea6Df0A5E', undefined, ['0x623700Fee1dF64088f258e2c4DAB4D6aEac4dDA6'], { v3: true }), btr: aaveExports('', '', undefined, ['0x898D0EF6E20B7597728AEB41169c22608Fe4b234'], { v3: true }), - bsc: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), + bsc: aaveExports('', '', undefined, ['0xF828A73cB00072843241C6294ed778F26854fe5C'], { v3: true }), } const stbtcMarkets = { From 9761be9652fa020725f1d114783da92515c780ba Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Sun, 13 Oct 2024 03:39:10 -0400 Subject: [PATCH 0652/1768] Update unibtcMarket on BSC (#11890) --- projects/avalon-finance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 8d75ee1bf1..ef941e7aeb 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -32,7 +32,7 @@ const pumpBTCMarkets = { const unibtcMarkets = { merlin: aaveExports('', '0x0024818043D04B1Cc9685233D47eF7eea6Df0A5E', undefined, ['0x623700Fee1dF64088f258e2c4DAB4D6aEac4dDA6'], { v3: true }), btr: aaveExports('', '', undefined, ['0x898D0EF6E20B7597728AEB41169c22608Fe4b234'], { v3: true }), - bsc: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), + bsc: aaveExports('', '', undefined, ['0xF828A73cB00072843241C6294ed778F26854fe5C'], { v3: true }), } const stbtcMarkets = { From 014d2eb2c2c37cfd5c36ff4477af0d48d12977aa Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Sun, 13 Oct 2024 15:39:45 +0800 Subject: [PATCH 0653/1768] Add AVAX and Bob networks to SolvBTC. (#11889) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solvbtc/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index 443f2cfd75..6feca88cd8 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -35,7 +35,7 @@ async function otherDeposit(api, solvbtc) { } // node test.js projects/solvbtc -['bitcoin', 'ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin'].forEach(chain => { +['bitcoin', 'ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin', 'avax', 'bob'].forEach(chain => { if (chain == 'bitcoin') { module.exports[chain] = { tvl: sumTokensExport({ owners: bitcionOwners }), From 84ff9cb4e3d2a9b02644e96c930f383d97135a1b Mon Sep 17 00:00:00 2001 From: Dhruvin Prajapati Date: Mon, 14 Oct 2024 14:03:56 +0530 Subject: [PATCH 0654/1768] feat: allo adapter (#11899) --- projects/allo/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/allo/index.js diff --git a/projects/allo/index.js b/projects/allo/index.js new file mode 100644 index 0000000000..cffe6cd891 --- /dev/null +++ b/projects/allo/index.js @@ -0,0 +1,20 @@ +const { sumTokensExport } = require("../helper/sumTokens"); +const sdk = require("@defillama/sdk"); + +const owner = [ + "bc1pn87rjuhzl3sr9tffhgx3nrrq7rhyxg7y58dl0uk5kyhmkfj26ssqz76lfc", + "bc1pu64y7m8hdekc5h4xtdl8ru9g3ct5n6mghmaqs8qtqecznccvy38s8tvdv4", + "bc1pjgn7m39vu02el3xpk2rtgt5kww8g5tkhmc55zevjld4n6cc9tuyq6akrq0", + "bc1pn29hejmt2mrslsa0ttfknp268qrpsmc7wqmw4ddxqytctzjl50ws2yrpmt", + "bc1pn87rjuhzl3sr9tffhgx3nrrq7rhyxg7y58dl0uk5kyhmkfj26ssqz76lfc", + "bc1pkpddzz2px40f803qug3l28c7d99qvvjkccgzj7tc80xx29pkd2vq3lqrg3", + "bc1p23su0d2sxwg95c7ny0p5vn4vf83jmvhyzacw3srjv84hmvynkacqe52r9d", + "bc1pn6rqr5z8yu5z9qphs0ccmcnt2c8ye04e3f2590rdxsd2mga0harq9k4207" +]; + +module.exports = { + methodology: `Total amount of BTC in ${owner.join(", ")}. Restaked on babylon`, + bitcoin: { + tvl: sdk.util.sumChainTvls([sumTokensExport({ owner })]), + }, +}; From 7c12e84ece9f82681a4ff56d53a6055487818921 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:35:03 +0200 Subject: [PATCH 0655/1768] update allo --- projects/allo/index.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/projects/allo/index.js b/projects/allo/index.js index cffe6cd891..2adc33f062 100644 --- a/projects/allo/index.js +++ b/projects/allo/index.js @@ -1,5 +1,4 @@ const { sumTokensExport } = require("../helper/sumTokens"); -const sdk = require("@defillama/sdk"); const owner = [ "bc1pn87rjuhzl3sr9tffhgx3nrrq7rhyxg7y58dl0uk5kyhmkfj26ssqz76lfc", @@ -13,8 +12,8 @@ const owner = [ ]; module.exports = { - methodology: `Total amount of BTC in ${owner.join(", ")}. Restaked on babylon`, + methodology: `Total amount of BTC in restaked on babylon`, bitcoin: { - tvl: sdk.util.sumChainTvls([sumTokensExport({ owner })]), + tvl: sumTokensExport({ owner }), }, }; From 6cd187a6a5e24f851b987eb60f64a71f40309f7e Mon Sep 17 00:00:00 2001 From: Ivan Dzizenko Date: Mon, 14 Oct 2024 11:36:48 +0300 Subject: [PATCH 0656/1768] Added Taiko Drips protocol (#11898) --- projects/taikodrips/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/taikodrips/index.js diff --git a/projects/taikodrips/index.js b/projects/taikodrips/index.js new file mode 100644 index 0000000000..31d1ce46e1 --- /dev/null +++ b/projects/taikodrips/index.js @@ -0,0 +1,12 @@ +const { staking } = require("../helper/staking") + +const TaikoToken = "0xA9d23408b9bA935c230493c40C73824Df71A0975" +const FarmingContract = '0xf90209C44dBf5Fa3d40ac85a008206b5A8c24899' + +module.exports = { + methodology: 'We count the TVL on the Taiko token in the farming contract.', + taiko: { + tvl: () => ({}), + staking: staking([FarmingContract], TaikoToken) + } +} From ff3bc986ef160c1d883af4d3a70925e840f5d1e0 Mon Sep 17 00:00:00 2001 From: "Luren L." Date: Mon, 14 Oct 2024 04:37:10 -0400 Subject: [PATCH 0657/1768] update native eth (#11897) --- projects/navi/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/navi/index.js b/projects/navi/index.js index 88e0bcd3b4..e294e19212 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -8,6 +8,7 @@ const decimalShift = { ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, // AUSD ['0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN']: -1, // WBTC [ADDRESSES.sui.USDC_CIRCLE]: -3, // native USDC + ['0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH']: -1, // native ETH } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" From ee931a312795f5d0989703e9cd076e1d7a2bcfca Mon Sep 17 00:00:00 2001 From: 0xulti <125024743+tivelprotocol@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:37:26 +0700 Subject: [PATCH 0658/1768] new tivel factory (#11896) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/tivel-finance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/tivel-finance/index.js b/projects/tivel-finance/index.js index 42e2ab819d..c1135bca9c 100644 --- a/projects/tivel-finance/index.js +++ b/projects/tivel-finance/index.js @@ -1,5 +1,5 @@ const config = { - era: '0x846FcA826196B3D674fd1691Bb785F3E4216bc0F', + era: '0xf7c504346b27F6073F7182e61f870531Fca1c09d', scroll: '0x30e44f48c9542533cB0b6b7dA39F6d42F26D843f', } From 4d2a883a62bab4f939f9ef1584bffb9eb7cd0639 Mon Sep 17 00:00:00 2001 From: PeterHeng666 <92424518+PeterHeng666@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:45:13 +0800 Subject: [PATCH 0659/1768] add loopring tvl of taiko network (#11894) --- projects/helper/coreAssets.json | 4 +++- projects/helper/tokenMapping.js | 3 +++ projects/loopring/index.js | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index b7fb1ce2d2..3aaf08ac6b 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1845,6 +1845,8 @@ "USDT": "0x2def195713cf4a606b49d07e520e22c17899a736", "USDC_e": "0x19e26b0638bf63aa9fa4d14c6baf8d52ebe86c5c", "DAI": "0x7d02A3E0180451B17e5D7f29eF78d06F8117106C", + "TAIKO": "0xA9d23408b9bA935c230493c40C73824Df71A0975", + "LRC": "0xd347949f8c85d9f3d6b06bfc4f8c2e07c161f064", "WETH": "0xA51894664A773981C6C112C43ce576f315d5b1B6" }, "stellar": { @@ -1942,4 +1944,4 @@ "etn": { "WETN": "0x138dafbda0ccb3d8e39c19edb0510fc31b7c1c77" } -} \ No newline at end of file +} diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index b859e4fe2f..fb378c92b9 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -89,6 +89,9 @@ const fixBalancesTokens = { rollux: { '0x570baA32dB74279a50491E88D712C957F4C9E409': { coingeckoId: 'uno-re', decimals: 18 }, }, + taiko: { + '0xd347949f8c85d9f3d6b06bfc4f8c2e07c161f064': { coingeckoId: "loopring", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/loopring/index.js b/projects/loopring/index.js index 9dfd04a6f1..eb0990b644 100644 --- a/projects/loopring/index.js +++ b/projects/loopring/index.js @@ -1,4 +1,6 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { ethereum: { @@ -12,4 +14,18 @@ module.exports = { fetchCoValentTokens: true, }), }, + taiko: { + tvl: + sumTokensExport({ + owners: ['0x3e71a41325e1d6B450307b6535EC48627ac4DaCC'], + tokens: [ + ADDRESSES.null, + ADDRESSES.taiko.USDC, + ADDRESSES.taiko.USDT, + ADDRESSES.taiko.DAI, + ADDRESSES.taiko.LRC, + ADDRESSES.taiko.TAIKO + ] + }), + } }; From f4f942f94fd576007a7e6c826f88e05e84a9a33e Mon Sep 17 00:00:00 2001 From: whichghost <140190180+whichghost@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:45:46 +0800 Subject: [PATCH 0660/1768] add polter base lp (#11893) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/polter/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/polter/index.js b/projects/polter/index.js index a673448def..182b3aea9f 100644 --- a/projects/polter/index.js +++ b/projects/polter/index.js @@ -11,7 +11,7 @@ const fantom = { const base = { POLTER_CONTRACT: '0xA0820613976B441E2c6A90E4877E2fb5f7D72552', MULTIFEE_CONTRACT: '0x0B7B45A920Ae54f066b6c013fEdF27C37840dE38', - POLTER_LP_CONTRACT: '', // no LP atm + POLTER_LP_CONTRACT: '0xee7ef14845c466b30f7f4a41f5491df8824cb64e', POLTER_LENDINGPOOL_CONTRACT: '0x33CA62504cebAB919f0FCa94562413ee121A9798' } @@ -22,4 +22,4 @@ module.exports = { } module.exports.fantom.staking = sumTokensExport({ owner: fantom.MULTIFEE_CONTRACT, tokens: [fantom.POLTER_CONTRACT], lps: [fantom.POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) -module.exports.base.staking = sumTokensExport({ owner: base.MULTIFEE_CONTRACT, tokens: [base.POLTER_CONTRACT],}) +module.exports.base.staking = sumTokensExport({ owner: base.MULTIFEE_CONTRACT, tokens: [base.POLTER_CONTRACT], lps: [base.POLTER_LP_CONTRACT], useDefaultCoreAssets: true, }) From 6b01515e2b7e4bf8b0e9be18e7cf879daa47aca2 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:07:41 +0100 Subject: [PATCH 0661/1768] remove duplicated wallet (#11902) --- projects/allo/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/allo/index.js b/projects/allo/index.js index 2adc33f062..3cd9652cc9 100644 --- a/projects/allo/index.js +++ b/projects/allo/index.js @@ -5,7 +5,6 @@ const owner = [ "bc1pu64y7m8hdekc5h4xtdl8ru9g3ct5n6mghmaqs8qtqecznccvy38s8tvdv4", "bc1pjgn7m39vu02el3xpk2rtgt5kww8g5tkhmc55zevjld4n6cc9tuyq6akrq0", "bc1pn29hejmt2mrslsa0ttfknp268qrpsmc7wqmw4ddxqytctzjl50ws2yrpmt", - "bc1pn87rjuhzl3sr9tffhgx3nrrq7rhyxg7y58dl0uk5kyhmkfj26ssqz76lfc", "bc1pkpddzz2px40f803qug3l28c7d99qvvjkccgzj7tc80xx29pkd2vq3lqrg3", "bc1p23su0d2sxwg95c7ny0p5vn4vf83jmvhyzacw3srjv84hmvynkacqe52r9d", "bc1pn6rqr5z8yu5z9qphs0ccmcnt2c8ye04e3f2590rdxsd2mga0harq9k4207" From 729730575fa8a3d3167febde9be80daf291f421d Mon Sep 17 00:00:00 2001 From: soilking <157099073+soilking@users.noreply.github.com> Date: Mon, 14 Oct 2024 02:18:07 -0700 Subject: [PATCH 0662/1768] Beanstalk arbitrum (#11887) --- projects/bean/index.js | 210 +++++++++++++++++++++++++++-------------- 1 file changed, 140 insertions(+), 70 deletions(-) diff --git a/projects/bean/index.js b/projects/bean/index.js index f66b1d4a50..79d259946c 100644 --- a/projects/bean/index.js +++ b/projects/bean/index.js @@ -1,21 +1,40 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const BEANSTALK = "0xc1e088fc1323b20bcbee9bd1b9fc9546db5624c5"; - -const BEAN_ERC20_V1 = "0xdc59ac4fefa32293a95889dc396682858d52e5db"; -const BEANETH_V1 = "0x87898263b6c5babe34b4ec53f22d98430b91e371"; -const BEAN3CRV_V1 = "0x3a70dfa7d2262988064a2d051dd47521e43c9bdd"; -const BEANLUSD_V1 = "0xd652c40fbb3f06d6b58cb9aa9cff063ee63d465d"; - -const BEAN_ERC20 = "0xbea0000029ad1c77d3d5d23ba2d8893db9d1efab"; -const UNRIPE_BEAN_ERC20 = "0x1bea0050e63e05fbb5d8ba2f10cf5800b6224449"; -const UNRIPE_LP_ERC20 = "0x1bea3ccd22f4ebd3d37d731ba31eeca95713716d"; -const BEAN3CRV_V2 = "0xc9c32cd16bf7efb85ff14e0c8603cc90f6f2ee49"; -const BEANETH_V2 = "0xbea0e11282e2bb5893bece110cf199501e872bad"; - -// Underlying non-bean tokens -const WETH = ADDRESSES.ethereum.WETH; -const CRV3 = "0x6c3f90f043a72fa612cbac8115ee7e52bde6e490"; -const LUSD = ADDRESSES.ethereum.LUSD; +const ADDR = { + ethereum: { + BEANSTALK: "0xc1e088fc1323b20bcbee9bd1b9fc9546db5624c5", + BEAN_ERC20_V1: "0xdc59ac4fefa32293a95889dc396682858d52e5db", + BEANETH_V1: "0x87898263b6c5babe34b4ec53f22d98430b91e371", + BEAN3CRV_V1: "0x3a70dfa7d2262988064a2d051dd47521e43c9bdd", + BEANLUSD_V1: "0xd652c40fbb3f06d6b58cb9aa9cff063ee63d465d", + BEAN_ERC20: "0xbea0000029ad1c77d3d5d23ba2d8893db9d1efab", + UNRIPE_BEAN_ERC20: "0x1bea0050e63e05fbb5d8ba2f10cf5800b6224449", + UNRIPE_LP_ERC20: "0x1bea3ccd22f4ebd3d37d731ba31eeca95713716d", + BEAN3CRV_V2: "0xc9c32cd16bf7efb85ff14e0c8603cc90f6f2ee49", + BEANETH_V2: "0xbea0e11282e2bb5893bece110cf199501e872bad", + // Underlying non-bean tokens + WETH: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + CRV3: "0x6c3f90f043a72fa612cbac8115ee7e52bde6e490", + LUSD: "0x5f98805a4e8be255a32880fdec7f6728c6568ba0" + }, + arbitrum: { + BEANSTALK: "0xd1a0060ba708bc4bcd3da6c37efa8dedf015fb70", + BEAN_ERC20: "0xbea0005b8599265d41256905a9b3073d397812e4", + BEANWETH: "0xbea00aa8130acad047e137ec68693c005f8736ce", + BEANWSTETH: "0xbea00bbe8b5da39a3f57824a1a13ec2a8848d74f", + BEANWEETH: "0xbea00cc9f93e9a8ac0dfdff2d64ba38eb9c2e48c", + BEANWBTC: "0xbea00dde4b34acdcb1a30442bd2b39ca8be1b09c", + BEANUSDC: "0xbea00ee04d8289aed04f92ea122a96dc76a91bd7", + BEANUSDT: "0xbea00ff437ca7e8354b174339643b4d1814bed33", + UNRIPE_BEAN_ERC20: "0x1bea054dddbca12889e07b3e076f511bf1d27543", + UNRIPE_LP_ERC20: "0x1bea059c3ea15f6c10be1c53d70c75fd1266d788", + // Underlying non-bean tokens + WETH: "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + WSTETH: "0x5979d7b546e38e414f7e9822514be443a4800529", + WEETH: "0x35751007a407ca6feffe80b3cb397736d2cf4dbe", + WBTC: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", + USDC: "0xaf88d065e77c8cc2239327c5edb3a432268e5831", + USDT: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9" + } +}; /// REFERENCE BLOCKS TIMESTAMPS // Whitelist BEANETH_V1 12974075 1628288832 @@ -34,52 +53,96 @@ const LUSD = ADDRESSES.ethereum.LUSD; const EXPLOIT_TIME = 1650198256; const REPLANT_TIME = 1659657966; const BIP12_TIME = 1645038020; +const ARB_MIGRATION_TIME = 1728529200; // List of pools and time time periods they were valid within beanstalk const ALL_POOLS = { - [BEANETH_V1]: { - startTime: 1628288832, - endTime: EXPLOIT_TIME, - underlying: [BEAN_ERC20_V1, WETH] - }, - [BEAN3CRV_V1]: { - startTime: 1645038020, - endTime: EXPLOIT_TIME, - underlying: [BEAN_ERC20_V1, CRV3] - }, - [BEANLUSD_V1]: { - startTime: 1649451979, - endTime: EXPLOIT_TIME, - underlying: [BEAN_ERC20_V1, LUSD] - }, - [BEAN3CRV_V2]: { - startTime: 1659645914, - endTime: 999999999999, - // endTime: 1716407627, // Dewhitelisted upon BIP-45 deployment, but some tokens are still deposited and receive yield - underlying: [BEAN_ERC20, CRV3] + ethereum: { + [ADDR.ethereum.BEANETH_V1]: { + startTime: 1628288832, + endTime: EXPLOIT_TIME, + underlying: [ADDR.ethereum.BEAN_ERC20_V1, ADDR.ethereum.WETH] + }, + [ADDR.ethereum.BEAN3CRV_V1]: { + startTime: 1645038020, + endTime: EXPLOIT_TIME, + underlying: [ADDR.ethereum.BEAN_ERC20_V1, ADDR.ethereum.CRV3] + }, + [ADDR.ethereum.BEANLUSD_V1]: { + startTime: 1649451979, + endTime: EXPLOIT_TIME, + underlying: [ADDR.ethereum.BEAN_ERC20_V1, ADDR.ethereum.LUSD] + }, + [ADDR.ethereum.BEAN3CRV_V2]: { + startTime: 1659645914, + endTime: ARB_MIGRATION_TIME, + underlying: [ADDR.ethereum.BEAN_ERC20, ADDR.ethereum.CRV3] + }, + [ADDR.ethereum.BEANETH_V2]: { + startTime: 1693412759, + endTime: ARB_MIGRATION_TIME, + underlying: [ADDR.ethereum.BEAN_ERC20, ADDR.ethereum.WETH] + } }, - [BEANETH_V2]: { - startTime: 1693412759, - endTime: 999999999999, - underlying: [BEAN_ERC20, WETH] + arbitrum: { + [ADDR.arbitrum.BEANWETH]: { + startTime: ARB_MIGRATION_TIME, + endTime: 999999999999, + underlying: [ADDR.arbitrum.BEAN_ERC20, ADDR.arbitrum.WETH] + }, + [ADDR.arbitrum.BEANWSTETH]: { + startTime: ARB_MIGRATION_TIME, + endTime: 999999999999, + underlying: [ADDR.arbitrum.BEAN_ERC20, ADDR.arbitrum.WSTETH] + }, + [ADDR.arbitrum.BEANWEETH]: { + startTime: ARB_MIGRATION_TIME, + endTime: 999999999999, + underlying: [ADDR.arbitrum.BEAN_ERC20, ADDR.arbitrum.WEETH] + }, + [ADDR.arbitrum.BEANWBTC]: { + startTime: ARB_MIGRATION_TIME, + endTime: 999999999999, + underlying: [ADDR.arbitrum.BEAN_ERC20, ADDR.arbitrum.WBTC] + }, + [ADDR.arbitrum.BEANUSDC]: { + startTime: ARB_MIGRATION_TIME, + endTime: 999999999999, + underlying: [ADDR.arbitrum.BEAN_ERC20, ADDR.arbitrum.USDC] + }, + [ADDR.arbitrum.BEANUSDT]: { + startTime: ARB_MIGRATION_TIME, + endTime: 999999999999, + underlying: [ADDR.arbitrum.BEAN_ERC20, ADDR.arbitrum.USDT] + }, } }; +function invalidTime(api) { + if (api.chain === 'ethereum') { + return (api.timestamp >= EXPLOIT_TIME && api.timestamp <= REPLANT_TIME) || api.timestamp >= ARB_MIGRATION_TIME; + } else if (api.chain === 'arbitrum') { + return false; + } +} + // Returns the relevant tokens for the given timestamp function getBean(timestamp) { if (timestamp <= EXPLOIT_TIME) { - return BEAN_ERC20_V1; - } else if (timestamp >= REPLANT_TIME) { - return BEAN_ERC20; + return ADDR.ethereum.BEAN_ERC20_V1; + } else if ( timestamp <= ARB_MIGRATION_TIME) { + return ADDR.ethereum.BEAN_ERC20; + } else { + return ADDR.arbitrum.BEAN_ERC20; } - throw new Error("There was no Bean token during the requested timestamp"); } // Returns the relevant pools for the given timestamp -function getPools(timestamp) { +function getPools(api) { + const { chain, timestamp } = api; const pools = []; - for (const contract in ALL_POOLS) { - const pool = ALL_POOLS[contract]; + for (const contract in ALL_POOLS[chain]) { + const pool = ALL_POOLS[chain][contract]; if (timestamp >= pool.startTime && timestamp <= pool.endTime) { pools.push(contract); } @@ -100,14 +163,14 @@ async function getPoolReserves(api, pool) { pool = pool.toLowerCase(); const poolBalances = await api.multiCall({ - calls: (ALL_POOLS[pool] && ALL_POOLS[pool].underlying || []).map(token => ({ + calls: ALL_POOLS[api.chain][pool].underlying.map(token => ({ target: token, params: pool })), abi: 'erc20:balanceOf' }); - return poolBalances.map((balance, i) => ({ token: ALL_POOLS[pool].underlying[i], balance })); + return poolBalances.map((balance, i) => ({ token: ALL_POOLS[api.chain][pool].underlying[i], balance })); } // Returns the total silo'd amount of the requested token @@ -118,15 +181,15 @@ async function getSiloDeposited(api, token) { // Prior to BIP12, there was no generalized deposit getter result = await api.call({ abi: - token === BEAN_ERC20_V1 + token === ADDR.ethereum.BEAN_ERC20_V1 ? "function totalDepositedBeans() public view returns (uint256)" : "function totalDepositedLP() public view returns (uint256)", - target: BEANSTALK + target: ADDR[api.chain].BEANSTALK }); } else { result = await api.call({ abi: "function getTotalDeposited(address) external view returns (uint256)", - target: BEANSTALK, + target: ADDR[api.chain].BEANSTALK, params: token }); } @@ -164,12 +227,12 @@ async function getRipePooledBalances(api, unripeToken) { const [underlyingToken, underlyingPerUnripe, depositedUnripe] = await Promise.all([ api.call({ abi: "function getUnderlyingToken(address) external view returns (address)", - target: BEANSTALK, + target: ADDR[api.chain].BEANSTALK, params: unripeToken }), api.call({ abi: "function getUnderlyingPerUnripeToken(address) external view returns (uint256)", - target: BEANSTALK, + target: ADDR[api.chain].BEANSTALK, params: unripeToken }), getSiloDeposited(api, unripeToken), @@ -177,12 +240,13 @@ async function getRipePooledBalances(api, unripeToken) { // Add the underlying pooled token balances const underlyingAmount = underlyingPerUnripe * depositedUnripe / Math.pow(10, 6); - if (underlyingToken.toLowerCase() == BEAN_ERC20) { - ripePooledTokenBalances[BEAN_ERC20] = (ripePooledTokenBalances[BEAN_ERC20] ?? 0) + underlyingAmount; + const BEAN = ADDR[api.chain].BEAN_ERC20; + if (underlyingToken.toLowerCase() == BEAN) { + ripePooledTokenBalances[BEAN] = (ripePooledTokenBalances[BEAN] ?? 0) + underlyingAmount; } else { const underlyingSupply = await getTotalSupply(api, underlyingToken); const ratio = underlyingAmount / underlyingSupply; - const balances = await getPooledBalances(api, [underlyingToken], [ratio]); + const balances = await getPooledBalances(api, [underlyingToken.toLowerCase()], [ratio]); for (const token in balances) { ripePooledTokenBalances[token] = (ripePooledTokenBalances[token] ?? 0) + balances[token]; } @@ -192,7 +256,7 @@ async function getRipePooledBalances(api, unripeToken) { // Beans deposited in the silo async function staking(api) { - if (api.timestamp >= EXPLOIT_TIME && api.timestamp <= REPLANT_TIME) { + if (invalidTime(api)) { return {}; } @@ -200,23 +264,23 @@ async function staking(api) { const bean = getBean(api.timestamp); const [siloBeans, unripeSiloBeans] = await Promise.all([ getSiloDeposited(api, bean), - getRipePooledBalances(api, UNRIPE_BEAN_ERC20) + getRipePooledBalances(api, ADDR[api.chain].UNRIPE_BEAN_ERC20) ]); - const totalStaked = siloBeans + unripeSiloBeans[BEAN_ERC20]; + const totalStaked = siloBeans + unripeSiloBeans[ADDR[api.chain].BEAN_ERC20]; return { - [`ethereum:${bean.toLowerCase()}`]: totalStaked + [`${api.chain}:${bean.toLowerCase()}`]: totalStaked } } // Tokens in liquidity pools corresponding to lp tokens that are deposited in the silo async function pool2(api) { - if (api.timestamp >= EXPLOIT_TIME && api.timestamp <= REPLANT_TIME) { + if (invalidTime(api)) { return {}; } // Get the amount of lp tokens deposited in the silo - const pools = getPools(api.timestamp); + const pools = getPools(api); const poolPromises = pools.map(pool => [ getSiloDeposited(api, pool), getTotalSupply(api, pool) @@ -231,7 +295,7 @@ async function pool2(api) { // Gets the underlying token balances for both regular and unripe deposits const balancesResults = await Promise.all([ getPooledBalances(api, pools, ratios), - getRipePooledBalances(api, UNRIPE_LP_ERC20) + getRipePooledBalances(api, ADDR[api.chain].UNRIPE_LP_ERC20) ]); const pool2Balances = balancesResults[0]; @@ -242,21 +306,27 @@ async function pool2(api) { // Add chain info const retval = {}; for (const token in pool2Balances) { - retval[`ethereum:${token.toLowerCase()}`] = pool2Balances[token]; + retval[`${api.chain}:${token.toLowerCase()}`] = pool2Balances[token]; } return retval; } module.exports = { methodology: "Counts the value of deposited Beans and LP tokens in the silo.", - start: 12974077, + start: 1628287657, ethereum: { tvl: () => ({}), pool2, staking }, + arbitrum: { + tvl: () => ({}), + pool2, + staking + }, hallmarks: [ - [1650153600, "Governance Exploit"], - [1659602715, "Replant"] + [EXPLOIT_TIME, "Governance Exploit"], + [REPLANT_TIME, "Replant"], + [ARB_MIGRATION_TIME, "Migration to Arbitrum"], ] }; From f1072c61e7f39fd7d09de7f612310343236da39b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 14 Oct 2024 13:26:39 +0200 Subject: [PATCH 0663/1768] Bitif (#11903) --- projects/bitfi/index.js | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/projects/bitfi/index.js b/projects/bitfi/index.js index 6645c2fddd..0bcd9b108d 100644 --- a/projects/bitfi/index.js +++ b/projects/bitfi/index.js @@ -1,30 +1,9 @@ -const sdk = require('@defillama/sdk'); -const { sumTokensExport } = require('../helper/sumTokens'); - -const owners = [ -'1JA46eiDpfx589wawn5RvtEXgwc518QfhZ', -'368vZZKUWDFZRLWMFNRJzHo1HnibNeAJir', -'33hE9Wq65kjbiLsGD1NYwwNatP6hbsZv5H', -'32GU8Jux7SbsEbaAaLUnEQmc6JemLF6BUb', -'3CP5WJ2JSLCew7SETWUe5FxpBGrekMBiwk', -'39Fvw2Ho1fEkyDsos5sNTN5iMJZKzTL526', -'3Kptt4TZZRcjuGH8ikoQ8mV1TVxq45dnuS', -'335DRGzLLG2tu4H4PnFBHYAwcj5pvV8zei', -'3G4sMXWAAVTvTXTksr8u9zuu7W8RKsicEz', -'bc1qu4ru2sph5jatscx5xuf0ttka36yvuql7hl5h4c', -'bc1q3smt9ut40eld6tgn42sdlp9yrx98s90unqw3pl', -'bc1q3q7afjarz7l6v49538qs2prffhtawf38ss85k8', -'bc1qw4vp94e9egkaxc04qsu5z9aq5pqpku2p6pzer8', -'bc1qqg3cdyadq25zn99sdprr4lgpsxg2za998eygy8', -'bc1q6dtp7ayaj5k2zv0z5ayhkdsvmtvdqgyaa9zs53', -'bc1qaajdlp5yrj5f77wq2ndtfqnmsamvvxhpy95662zkzykn9qhvdgys580hcs' -] - +async function tvl(api) { + const BFBTC = '0xC2236204768456B21eAfEf0d232Ba1FccCe59823' + const supply = await api.call({ abi: 'erc20:totalSupply', target: BFBTC }) + api.add(BFBTC, supply) +} module.exports = { - methodology: "BTC on btc chain", - bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), - ]), - }, -}; + doublecounted: true, + ailayer: { tvl }, +} From 74ae0c15eb8a29121fab92e899471b23be2bf430 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:36:19 +0200 Subject: [PATCH 0664/1768] minor fix --- projects/firefly/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/firefly/index.js b/projects/firefly/index.js index e5b191d137..5e6b5086cc 100644 --- a/projects/firefly/index.js +++ b/projects/firefly/index.js @@ -3,5 +3,4 @@ const { uniV3Export } = require("../helper/uniswapV3") module.exports = uniV3Export({ manta: { factory: "0x8666EF9DC0cA5336147f1B11f2C4fC2ecA809B95", fromBlock: 1776716, }, -}) -module.exports.misrepresentedTokens = true; \ No newline at end of file +}) \ No newline at end of file From c95309893e48b8a9159ed380838c5854cc0c8449 Mon Sep 17 00:00:00 2001 From: Solazan <85551951+sarp07@users.noreply.github.com> Date: Mon, 14 Oct 2024 22:37:11 +0700 Subject: [PATCH 0665/1768] Micro Credit Project (#11900) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/microcreditproject/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/microcreditproject/index.js diff --git a/projects/microcreditproject/index.js b/projects/microcreditproject/index.js new file mode 100644 index 0000000000..65dd641dab --- /dev/null +++ b/projects/microcreditproject/index.js @@ -0,0 +1,17 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const TOKENS = [ + '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', +] + +const INVESTMENT_CONTRACT = '0x951d1571C75C519Cc3D09b6B71595C6aCe1c06dB' +const PROFIT_SHARE_CONTRACT = '0x165D74d2DEFe37794371eB63c63999ab5620DBfB' + +module.exports = { + islm: { + tvl: sumTokensExport({ + owners: [INVESTMENT_CONTRACT, PROFIT_SHARE_CONTRACT], + tokens: TOKENS + }), + }, +} From d71fbce6d7b40aa81aaeb8ea14f2e7f860e79b08 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 14 Oct 2024 17:01:10 +0100 Subject: [PATCH 0666/1768] fwx --- projects/fwx-dex/index.js | 49 +++++++++++---------------------------- 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/projects/fwx-dex/index.js b/projects/fwx-dex/index.js index e28fab34cd..42496072ef 100644 --- a/projects/fwx-dex/index.js +++ b/projects/fwx-dex/index.js @@ -1,38 +1,17 @@ -const { getLogs } = require('../helper/cache/getLogs') -const { transformDexBalances } = require('../helper/portedTokens') - -const config = { - avax: { factory: '0x2131Bdb0E0B451BC1C5A53F2cBC80B16D43634Fa', fromBlock: 46372045 }, - base: { factory: '0x3512DA8F30D9AE6528e8e0787663C14Fe263Fbea', fromBlock: 15001568 }, -} +const { getUniTVL } = require('../helper/unknownTokens'); module.exports = { misrepresentedTokens: true, -}; - -Object.keys(config).forEach(chain => { - module.exports[chain] = { tvl } -}) - - -async function tvl(api) { - const { factory, fromBlock } = config[api.chain] - const logs = await getLogs({ - api, - target: factory, - topics: ['0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'], - eventAbi: 'event PairCreated(address indexed token0, address indexed token1, address pair, uint256 )', - onlyArgs: true, - fromBlock, - }) - const tok0Bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: logs.map(i => ({ target: i.token0, params: i.pair })) }) - const tok1Bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: logs.map(i => ({ target: i.token1, params: i.pair })) }) - return transformDexBalances({ - chain: api.chain, data: logs.map((log, i) => ({ - token0: log.token0, - token0Bal: tok0Bals[i], - token1: log.token1, - token1Bal: tok1Bals[i], - })) - }) -} \ No newline at end of file + avax: { + tvl: getUniTVL({ + factory: '0x2131Bdb0E0B451BC1C5A53F2cBC80B16D43634Fa', + useDefaultCoreAssets: true, + }) + }, + base: { + tvl: getUniTVL({ + factory: '0x3512DA8F30D9AE6528e8e0787663C14Fe263Fbea', + useDefaultCoreAssets: true, + }) + } +}; \ No newline at end of file From 4f7c6ed06aa858e442ff530a554d9e888e498473 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 14 Oct 2024 17:03:35 +0100 Subject: [PATCH 0667/1768] maple --- projects/maple-syrup/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/maple-syrup/index.js b/projects/maple-syrup/index.js index bf031ef8e1..8682bef97f 100644 --- a/projects/maple-syrup/index.js +++ b/projects/maple-syrup/index.js @@ -1,5 +1,6 @@ const rwaPools = [ '0x80ac24aA929eaF5013f6436cdA2a7ba190f5Cc0b', + '0x356b8d89c1e1239cbbb9de4815c39a1474d5ba7d' ] async function tvl(api) { From 0d65c16bd0d892b0a17b94c01ba9656b38cc22e0 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 14 Oct 2024 18:53:16 +0100 Subject: [PATCH 0668/1768] add hallmark --- projects/kalax/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/kalax/index.js b/projects/kalax/index.js index c6c22515cc..79466e4f99 100644 --- a/projects/kalax/index.js +++ b/projects/kalax/index.js @@ -54,6 +54,9 @@ async function staking(api) { } module.exports = { + hallmarks:[ + [1728777600,'Rugpull'] + ], blast: { tvl, staking, From bce4176b3a085a5335681aeae2fabc86d41c3f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Selim=20Can=20=C3=96zdemir?= <116464051+zxselimcan@users.noreply.github.com> Date: Tue, 15 Oct 2024 00:16:48 +0300 Subject: [PATCH 0669/1768] SquadSwap V2 & SquadSwap V3 Multichain update (#11907) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/SquadSwap-v3/index.js | 8 +++++-- projects/SquadSwap/index.js | 38 ++++++++++++++++++++-------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/projects/SquadSwap-v3/index.js b/projects/SquadSwap-v3/index.js index 289e6633ba..56b4d2953b 100644 --- a/projects/SquadSwap-v3/index.js +++ b/projects/SquadSwap-v3/index.js @@ -1,6 +1,10 @@ const { uniV3Export } = require('../helper/uniswapV3') -const factory = '0x009c4ef7C0e0Dd6bd1ea28417c01Ea16341367c3' module.exports = uniV3Export({ - bsc: { factory, fromBlock: 34184408 } + bsc: { factory: '0x009c4ef7C0e0Dd6bd1ea28417c01Ea16341367c3', fromBlock: 34184408 }, + base: { factory: '0xa1288b64F2378276d0Cc56F08397F70BecF7c0EA', fromBlock: 19730499 }, + blast: { factory: '0x6Ea64BDCa26F69fdeF36C1137A0eAe5Bf434e8fd', fromBlock: 5644236 }, + arbitrum: { factory: '0x0558921f7C0f32274BB957D5e8BF873CE1c0c671', fromBlock: 253170358 }, + polygon: { factory: '0x633Faf3DAc3677b51ea7A53a81b79AEe944714dc', fromBlock: 61864971 }, + optimism: { factory: '0xa1288b64F2378276d0Cc56F08397F70BecF7c0EA', fromBlock: 125326692 }, }) diff --git a/projects/SquadSwap/index.js b/projects/SquadSwap/index.js index ce4ef4e103..eff4b963aa 100644 --- a/projects/SquadSwap/index.js +++ b/projects/SquadSwap/index.js @@ -1,19 +1,27 @@ const { stakings } = require("../helper/staking"); const { getUniTVL } = require('../helper/unknownTokens') -const masterchefV2Address = '0x2e881a10f682a3b2CBaaF8fc5A9a94E98D4879B4'; // SquadSwap's MasterChef V2 contract -const masterchefV3Address = '0x44eC8143EB368cAbB00c4EfF085AF276260202B5'; // SquadSwap's MasterChef V3 contract -const squadTokenAddress = '0x2d2567dec25c9795117228adc7fd58116d2e310c'; // SquadSwap token contract + + +const config = { + bsc: { factory: '0x1D9F43a6195054313ac1aE423B1f810f593b6ac1', masterchefs: ['0x2e881a10f682a3b2CBaaF8fc5A9a94E98D4879B4', '0x44eC8143EB368cAbB00c4EfF085AF276260202B5'], token: '0x2d2567dec25c9795117228adc7fd58116d2e310c' }, + base: { factory: '0xba34aA640b8Be02A439221BCbea1f48c1035EEF9', masterchefs: ['0xB6171582C75421A740dcC15E4D873a34Cb2Ebb48', '0x89c0619E7A798309193438b3Cff11f1F31266711'], token: '0x08Ccb86a31270Fd97D927A4e17934C6262A68b7E' }, + blast: { factory: '0x4B599f3425D54AfBf94bFD41EA9931fF92AD6551', masterchefs: ['0xdeE10310E729C36a560c72c0E8E3be0e46673063', '0xda3840837Df961A710C889e0D23295dF82cCfF8b'], token: '0x08Ccb86a31270Fd97D927A4e17934C6262A68b7E' }, + arbitrum: { factory: '0xba34aA640b8Be02A439221BCbea1f48c1035EEF9', masterchefs: ['0x6dAafc12F65801afb2F0B0212a8229F224Acf576', '0xA9E236aa88D3D9d5D4499D1b6ffA7ec170dA5DCA'], token: '0x08Ccb86a31270Fd97D927A4e17934C6262A68b7E' }, + polygon: { factory: '0xEE8F37D490CB7Ea1dae7d080c5738894731299f0', masterchefs: ['0x1D9F43a6195054313ac1aE423B1f810f593b6ac1', '0xb4286E807A8107cC3344d3094468DC44D73b49c2'], token: '0x5eBB1ff6dc0759f7A6253d0568A610650Dd0d050' }, + optimism: { factory: '0xba34aA640b8Be02A439221BCbea1f48c1035EEF9', masterchefs: ['0xB6171582C75421A740dcC15E4D873a34Cb2Ebb48', '0x89c0619E7A798309193438b3Cff11f1F31266711'], token: '0x08Ccb86a31270Fd97D927A4e17934C6262A68b7E' }, + +} + module.exports = { - methodology: "TVL is calculated from total liquidity of SquadSwap's active pools", - bsc: { - tvl: getUniTVL({ - factory: '0x1D9F43a6195054313ac1aE423B1f810f593b6ac1', - useDefaultCoreAssets: true, - }), - staking: stakings([ - masterchefV2Address, - masterchefV3Address, - ], squadTokenAddress) - } -}; + methodology: "TVL is calculated from total liquidity of SquadSwap's active pools", + misrepresentedTokens: true +} + +Object.keys(config).forEach(chain => { + const { factory, masterchefs, token, } = config[chain] + module.exports[chain] = { + tvl: getUniTVL({ factory, useDefaultCoreAssets: true, }), + staking: token && stakings(masterchefs, token) + } +}) \ No newline at end of file From 3d51e156c66e79c5bf004ce2e23a5101c2100dcf Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Tue, 15 Oct 2024 05:19:33 +0800 Subject: [PATCH 0670/1768] Add the owner address of the Bitcoin network. (#11904) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solv-btc-lst/bitcoin.json | 4022 ---------------------------- projects/solv-btc-lst/index.js | 24 +- projects/solvbtc/index.js | 19 +- 3 files changed, 26 insertions(+), 4039 deletions(-) delete mode 100644 projects/solv-btc-lst/bitcoin.json diff --git a/projects/solv-btc-lst/bitcoin.json b/projects/solv-btc-lst/bitcoin.json deleted file mode 100644 index 8172b6dcb6..0000000000 --- a/projects/solv-btc-lst/bitcoin.json +++ /dev/null @@ -1,4022 +0,0 @@ -{ - "core": [ - "bc1qpq80t9phhkducn2p2mgg4vrnsp8p5q3dm9t9hjyqe7unvu5t2fesvy4rzr", - "bc1qjg8234tdlsg3m5hm7fqtc5xe4vdv5fn353vh404qlz7s7q8drevqapsz67", - "bc1ql45htw479z2jxdhn3lwtcjp452hn2jtajyqc8ps6ac6jvgk563fq3sj3jp", - "bc1qwukfufwmq437kry9xcfxmv5sv7vnq9scqyhfcrudt3xghdwvqmuqennqpc", - "bc1q8dyhmkmzpug3c9dcj45ycy2sa4aetsh53ssd7wk24pzv7ufcar8qywhvxe", - "bc1qn95r70zlw4ylyp6luytg3j5hfnmpds8vcle6a4svwdghjqzahzssrqyzfw", - "bc1q7j4hlsyv7fcze74fa56g8nxpegynze03wmqrq6hwd83qg3vpz8xsv4u2y8" - ], - "bbn": [ - "bc1q47ur7u0xh943s44kktvhr602sm29exylzn43ru", - "bc1qng3xngmafngs5gn5qrvww87g8kwuzhsdamz6ys", - "bc1pegk6p2fqlqs2lf2xtvx029sadua9yafvj0du9kuw4zmlfthmn0aqvfae9k", - "bc1prc3qzylqj9xjga5v24ceuuy6u9ndd6h8rsqfah5j4lqy7qe8dthqvch3a5", - "bc1puysx8894gdeueffvrsanesdwkzr8tf6344cf556xxs74d07j5kcqfyapm2", - "bc1pndf7fa7uq5t4qnnxkk3qvzfd6qhnelsgjmjm2flc2v8e2g98cqhs69zyay", - "bc1pxvrn9ecxs47dvpl6qw4zwv4cgsvl9c4d5kmy4uk6h9x5rxukedfsydeq2g", - "bc1pmfax76w4zmk7v5hthn5u07v9hjtfvtpj2ry0grkt0rv66ydk7desn0wlxe", - "bc1pvwjkr0724ckucdvrtxjzml9ka7jnzzjaejvwfnn8a2avvpnljthseg2a0e", - "bc1pmwj40lq0vvkxqmfxsyks8mam9gfvhwallmm3adr69r8zs9d3cmqsewk678", - "bc1pwzwd3g77aud55fptj0w7mjmqrn0wy4qwvtqhr8kuh8mucnwr5ntsuj935q", - "bc1pl4248rram36dyh5d5j2jxyjg3klztkze85cf76gprl4khah75seqp26hvk", - "bc1pgqg527pxquhmck0pelz6qckc57nswhsxfcl8hqt0ch23jpmqrghq0c4kz8", - "bc1p5n2c8yw6vhfgymnt6ey6xnfrq8576alvdue0ezzrdpmvk64mgzgqt2l5sw", - "bc1pct6rmtj9v4znmj7epl3yamqrzgq0ajz4u3xtm8tfrmty0ckyc2js9q43hs", - "bc1pzprnya6zq56yt3yzn7d6e59c3nlwjdnq8jka5qjgz34krzgatm7qu5cf63", - "bc1p0903alks7pa7szd5xfxnd34aaplqj4v4are4anqhuzmd5366r72sh67ryv", - "bc1pdlmdcg255m8yt6zsce5pf8jvw20ez76gauymvx59um8p6cndl5hqmaguuy", - "bc1px9u0z5ua6es28d6e0ep8zs5c7ppug2p6vgrlkxtm73fx46kc744swaukq5", - "bc1ppl373h4975naqp0cx6uza4c9a6qpjj9sw6cp6pmdclrrpjtz58nsxjfjr4", - "bc1pj74n7zn5mjf3jfu57t7u9lyyj70k6lm32v2jcp32mdjr2z3mggzsq79jcg", - "bc1p02xuvg2jzl4hmhhas0ffcm49ndcr9hxart8er0fq42q7343m5sgs4a0nsk", - "bc1pvy3uzrdrh0km7d08hkzxarxle0rtduzm72537ap7pxjtmn0emy9ssan8uv", - "bc1p6ks5syj90z65avm55asae7ndk07xctmyx4lnfunjakv3ty08fx2q4lazrs", - "bc1px8ca39fwgnrfu7pd8j9nv9j2e09p86mn3vfu9kmq7gkegrjnh4mq86w0yf", - "bc1p484296r69cnq0fx6g38v74vdsfyzpvp6qyy59d36vdmeplesv0qs9agns5", - "bc1pcv5yw7hp42aerwdt3lljrk6amf6ykagkflfev4yxelququdnmvzs93p3f9", - "bc1p4eglaqngh5e86srh4tlf6u0j5ctdhye97jf8vjzuggdvszahuzaqkkh8p7", - "bc1ps43y3j57vjwdsmp43vxunxtvwhlagafwsca7y8dufu9dgjztzddsl5q5ky", - "bc1pjh0fcjsph23x9jw9qk27tg6xgj5n5y79rtcysusdmdyf4jtpszdsqyj2v9", - "bc1p7xxwz7z36h2xsaqg64ctqm6qnz6nrw37qc8zj2934v669vagh8hqa2y99p", - "bc1prjgr7heeqdza7tg4x7h2a6npx20uvxgrdhknq3u84gdaprvf32cs4klyh0", - "bc1ph6hq4xcux2966l6c3j8ylzesdqmp70hdra7ttmt3phnfv9sn9z2shm2vsx", - "bc1pz5cq7sqlqt5sfcclp6my6y2r2rwlnnz4g05s9hz53v3g8xtsde7q5s6ydz", - "bc1pepmvmtgeehqmaw8pp6f7u22qqmppuytnrxjhrj3jwteqmlakg4lqyyead0", - "bc1pnjsahj0gr7zky8xxnr22dhk88v0dvl350pxqtl464sp4asu9k84q03psll", - "bc1pccyp883ueldcsfmsn5n49xdxjnv5k46k2m3qardpqtr64jv7rtpsmjar0g", - "bc1pzhy6458hllmzwl73gq3w8j5u48c5juugx3n0ca8zzz66refa852sylerur", - "bc1pahu4wlh5dc5h75jcdrsu23v7zcpjkyqlngu3a3es5d3skxyn9udsmzng80", - "bc1p2hec4gmqrxweheqx69g8qwd7nc7leeuglh09rssa6vvnedj3mrlscjk6lu", - "bc1p7lck8ese8fp282vn2y2ajmjw0eh0f96ulfdwxe87572psedcwtcqlaf2t6", - "bc1pac69krqkhtwmvcw85sjm2lv5m7mky7jkgzagp2jlyqqlp96qgvpqavv8tk", - "bc1p5ggclamj4xpdhldkjwemp3cnwc5y8c4sssujzxg68ds2kty88dxs964zwh", - "bc1patr47x6ztvdpl49k06z9ahdz2cudppn3lpmt64gyel5k979yseuqj6z82q", - "bc1pm40shkywg5rsdy8vnkc2p8er3a083vw085vheckrv3tpenlnl30sp4883k", - "bc1pv8ugrch82jeqzyq8u05nypv06ag7utfe8f5mlw7uxjfkgzwp9cmqxe5xe0", - "bc1pl6a9zq7r7c9c0mnahjnca5f68pw2hgkr32596jcmwyz7kt0yzc8seuqcxr", - "bc1pm00xjquj8497g2x7n09g2k72s2xfwyew80z6arnwddjlz3esnn7qk0g8jt", - "bc1p78w5cn9wqnsmp4pmemtdvp605umr0lvvtmd7gvtnqwyjcxf9ures5hq84u", - "bc1purnktjcuz6amh96cddejx96sc000jn7e9zyt20ff3plmrpva03rsayfjy3", - "bc1p9cmf37924l9ka6c8u8lla3vz79lsr38k4rdcqtl2wcmkhlavyvesvl5qex", - "bc1pl7rhfxf8a42xrrk76ujy0x3cwtqqu3nufhprxxp7rg6asgqlc7sqapx4pv", - "bc1p5peav9tgux0xysgs6q94k2gcqh9gvvzakcnctyqe7y2udl56czas20xmty", - "bc1pmpaehysgknw3mj5t8k9kuvuq6upptx39rs53c3sx76my65h8uuvs5hzccz", - "bc1pk89l2fd6068w25p8tmsjx5mvrrejyatjyx66q7x5q8untfry3d4svgp7ca", - "bc1py0rd08692884cyfw8dywt2d2dnnx5uz6xwnkpev7dh278hm2an9szf0ugm", - "bc1pyjnns0prrum32j8vg64nm9yzsk6qmyke0mcz4g6yt4jhudnkhclq567mxl", - "bc1pkf26ga6du6g8hsye7u9p8mcm73xgafc5ulzgtuc25mf40jrp06rq6t6xud", - "bc1p5cfvngjfam9rsx2wp9ud5qhjte7agre25p6e792yhm2eeppuezusfue3wf", - "bc1pz3tx9f6kwm2hku9ly76ldnljl7qyqfqr6eadcn6j0xn9k2e5atvqfr6c6s", - "bc1pf2p6j3tttlg6y7fcxghdecv7kdnuwyhap9vyzxcykldv85ctxm8qfedd9k", - "bc1pnew9k74q30kcz8472gwtudmg4gynn6kyscan5muufcpjwlk3vcks8fyyz6", - "bc1pw7cxatkf6uze273uc4gu0s7pkthkxdhzsrats464y2lt9tzu8t5s8w94v3", - "bc1pdgrgj3rm3qx306j9e4ey9sn4ngrnrtqs83xf6fv86pnzthnnz0fsyfuqc5", - "bc1p7zvpxaves4u626m4k5m45ew2xx0pezwmnvf7uzn8q5jma7s8fg6qc9zkgr", - "bc1p3sm0kep9pv2ql0fq2fs8h84u5xv5zu4qcg8xqk0x75zwzzd0kksqreea5r", - "bc1pcsqmwl5ug85njhm2nxxmwpkc39cet7ff8f2z9a8tnpq88umqz28s90hnpu", - "bc1p6f8tkamhkz374k6zrn4q26x38pz73xc3q9ps78kee5unwn3jrjkql0ph8m", - "bc1plgdccx4dgntezlexzd6aweqned4kq62xc9nhpy4ul5u7rth653ms9us632", - "bc1pn6r99gggrqeaumy2jqt398atw3aj6pthkgeyy85qhjpds87rv3dsxq5c0p", - "bc1pamzp7tegxtqrppudsvpdlfse488g7z8qwmx2j22pplskea7ggduqgt7z7p", - "bc1pert8ey2h6xr00atux64gl025x4srvtg8wuq9huavpmr46cqep9jqwhlezk", - "bc1pgkjfyvklgja33657ndf5eh4k6gtrlvwvznc800jqw3zsxya0uz3s2jrzf6", - "bc1pc549fmxer7lx8nszxunr6m7n8dkajye3z3vtddgs7wm5a2v2mdzs5mwx2x", - "bc1pdfda5tqrxsezlyh3d82c2vcwf9zmrjxv3eaneacypca3rah3wtuqkkwsa6", - "bc1pjn6pehyvgpna7wzkfl43plfzx8ruwm8ejhsu53mldnq29dq5sw0su2mgd2", - "bc1pa06z2quaxp5g54en25nvd8un0fu8aavellr4wuc3a2vhs3h2pagqn5wzwh", - "bc1p4ddmvy05j8su52qv58nyhja59yg7vwmcvd6ak4hh53hxll396jjs6pvwug", - "bc1pytpqywes3czlx770kpku04jlmlrgwpzd9vc5mf9dd7dxttnlgcuqwkvu0d", - "bc1phctcm9kku3a4pypa9g84zdhlexuflzun9mqk26d3g56npazhr9hqkawgga", - "bc1pheg4zs3j9gd2c7fmd990m239347l38a2tzg28jh5hewyn4yqfjkq8d6mjk", - "bc1pwlc3zdnp4umdqgva44tr2lqcmdxlu58dtx4w4esl7vg7cl4c9d4sj589zl", - "bc1pgzce5pq5gs0fgfxhvgaqylg6csl3p0w5npkpp4zdq74spjh0znmqs6msel", - "bc1penhupgacpx4z73yw5upxlss2k6sm4pl9eephqqh0ky0q30c0jras4etu92", - "bc1p5h4d734rwc8d4h3pg5czty5avfapyaq5g0pvuz7g5ff7tpyq6zvqvjgrxl", - "bc1pd59swuvuwjpcqeqdcut9pxrxpdehmn4eunwyfmy76g26vwzcgfhsa8zsrk", - "bc1ppnhpxhsnevur9qt5dd05aaewmy2cqjc6nhjcr2x9ky0wxgqqe2kqa9pyq0", - "bc1p8crplmv4nxc5340mwcnh5dn9f3wsxp5amnr37q49hul8t3ny3cdqyntwru", - "bc1pqdmqrvlnlgfanmsnswyqllt7nnw7s3aa86al2y77755zlxw5ue0q5mpld3", - "bc1pj8srhw886ya9jjtkmdkhdg84t6pr3xvpxr3u299ue6wm59g8cctqvkhnp6", - "bc1pceyyxxxgdtyvfm5kfgfv2uan3eskggwsp7psa6w5fw2m4y2x2elq7vt9yd", - "bc1pdy8hzdm5euxuleee3hqgjg9ngcaj7v9dhnq8fewcy2h9yfm6uwuq4h76hf", - "bc1p9rury4ru04ufle0564mvm2ld9v2a36kzc9mrxda9np24x5rdxj2q4pj35z", - "bc1p80q3dedea7ry4usafypwxdyuqhp4g0phru6v84lvr3pexcxv4t6quvnuk8", - "bc1pdt52whc5xz693y2cwts50hgku7psqkvudz3u2rh5wdm509ws5w7sm7xury", - "bc1ptjkz67r9f27mh0y3zskk2d7pxn0ydncjw6yuf6fgtyj9v4s76lrsy9ctl4", - "bc1pcw5yz5dmsj4n03524zlssnjan63sd9s9w5ra5zz36ytqlrvl2v5qc0gyql", - "bc1ph26f3y9255z5r49tpaz9atdhx56er3v7s4atguerr5f0xrt985pqqpvl76", - "bc1ptuvmtgzyhqqcs5t8tr2yervepnkd048e06tqkyy990emlc70g7kss42gqs", - "bc1p2dxaj20czkzgay3pfw6gsaz8lsdnw6lw8ulv3rradq8zy5sf4zxqs4ku0t", - "bc1pyar78glmk9eccp5rdzypwy3dm9alegnflsqf095e6kxt27s2ktjskm0tj6", - "bc1pf9nfh27p4etgnquy60rzu2cdc5mqx4e3p0m5rq9xq52p7yxp30psg2swqt", - "bc1p2eapnq5yj2n29x4nh5u54vfqssn6u4rxtvs5rm55juplzgftmh5q2qrmfd", - "bc1pcnsdus6ctl6m7d9ykqu023tt76n9nuz3zhrs3mrhk3due2pmtt7q27shux", - "bc1pt89qdhasl8kn3wdvacvn834nzk3lgl85rfxls26lwcz6hv2scynsd3dx7p", - "bc1pmjw09w876ad70aqt92hww3qmfhwmngnuzx8h9suxhdgnvsmn0zpquvq0hd", - "bc1p52rtryn7z7cqr0s9gc6wuwguqvnwyw8zvhd4p5ca2dfg80jlzupq57m4x5", - "bc1ptgwqvzfsgglf3jjlp7fh56cexreqxe2v37caq5j6uvwng5l66n5q5dk9mg", - "bc1ps9ln3slu5j46mjmjg0wgfswrmv3uanh4lywevvtqvg2luxq8ygds3pgpgz", - "bc1p56v6exd47k5n96vljr9dknv4zkxds342t2p5u262ay75rfv873eqrk4j5n", - "bc1pp6jd9r3wq0fdqx0jzzujqjzmzp9fxqsp9xdxd8wg0dnhavg2xv2qpn5776", - "bc1p9fls8jrlvlnkdm033ujpq7x3t4meder74xc8t00w54s8s3txcdsqu4c7c9", - "bc1p30dje3v3ya408454xjh5a2nwth3xzt4yj94t0lfutcgsd3smdyys77hkj8", - "bc1pv0p3j8cecujr6v7altpjzdwvr0emntkyx5xv8fnw6guzxnp8k02qdj7xrt", - "bc1pgd4zdkmj4080reh5lfp0gyfq37v8sy7tmyfc5mmr6kr002r9ksgs7wswk7", - "bc1pgfsga38vyj5090nfltq8t27mm2wt6cvfrxej0jltlsf5p0c5j75qd8d952", - "bc1p8w35ydlxg4chut79e6t58fgh2hwpr6jlmnvtpl0788kc7kh9yvxskwmxcc", - "bc1puceee6jcr4qykfuccgxhdfaey4qa6grg0vcglty7myttqh9q8zxqxgnwqf", - "bc1plyjsgqwmp4w99aqfstqqauz038sce7u7y0lwq0l3jeerwxlr2xqqq2ws04", - "bc1pg0rgta2kq53qsgfh56uvrp9yvlfu6v4cj2wrgk3y4dnqeuseuvgqg424um", - "bc1pxux2ex4r0wu5yyjqlcqjkatcyeev6v47rsl2ld5awc5dayd6txtqw5t7sp", - "bc1pvcyam7t3y5f26kd0j5lj58lelsfffnx7k0nlrpz2fvvyvwvux46qj6jc6t", - "bc1ph0d53rw5cg5vj67w2a0z6n24llwzj2faneelt3p536ct0l8ced2sywfupn", - "bc1pmrys06x7qtkxhv38dcc8q22zfwazxj4uz4u40edjj7c4kyzx9txsjf668g", - "bc1p6dh90jtv07uk9jlzcr76ss25l0uknqvdn9m0el4lt9vkmqjy6p9syhwwjt", - "bc1p346d28mqyga0ecuhpg0yu650ghg7rtlg2cly54ulh3fr4mzprnws077s52", - "bc1pwt6qdqg4lu588gw6l7hjkqkd7j94rpyv65gzg70x440estednh4q989lcc", - "bc1p4xk7gcrmrr208pzclchrn57q7d3k5lvh9q68u42fx66vqu3vng2qxtsj3f", - "bc1pkcu5c2gnvzpvqts5nusfl5ujmp9l3z4925kqgl70w92q42ahl22qldel03", - "bc1p9ny4k3ewhhchndvz9vsk2zmsmuv03t20vhnym3ygvfdtq5dmtqkskk28vw", - "bc1pvtrt4xgw2qwcn9n5nx45v3kzqzd0a94ytl6stwv74ujzp78d7srqtgvemn", - "bc1pfcd8kg8felqxrvt93xdcv7qsymz64k3we9h9xy2k2qehjnmejhrq29w0m7", - "bc1pr9gpgzwgmyjz8gwr3eft4zrg8mtcfdfrzu2fmhwjtgmklvakef7s2cjlgv", - "bc1pft6r70j3jf97m0cpuvagv6x0whserppq6eh35qzlmhg4lkt04wgs50gccm", - "bc1p95wsf8lxt4f38a3l6dfm9gnajc94tvucaju02djssatxdsdn9fwqqeckm3", - "bc1pfr9y0tfgwcveffql8ayeuu7vtchq2mxmn483k27ps0lp7n0ml9rqp3vf53", - "bc1p925mnfz89x8nk2pga2p040sqqlrtcun0entxc2rw0agjktcmmcxsclswta", - "bc1pvkyrc9hwmwqqzsgttq758rnee0sqwn7fqetgql35klc09a3k3fqsz085dy", - "bc1pzzzj8pnmkcgl8w3c5dkd6rm658ewsl2cdpfd7hwl28qaaszftpssrrpqh2", - "bc1phcqtn5yj8766f3j84ezmukwz5k7pnu475kjsg3ee7mm0hqsf9jks2ken22", - "bc1pqsdxnw0v2nrfgh4m5tuep6e7y344zj4lmzq3pc29fyw5ag9yhs2s930urn", - "bc1plkm4en6dm5f3kfaalyedtsymwll4hrhw0qwdn98dq5nul07ufv7qne06h3", - "bc1p50y09ch0n5nf9nylm48dd558lerct7e3drnrvk2k03mtkw72zgysdl3y90", - "bc1pcvk7xthjepvk6gve8vuw707jlg06wcfjnvnq7pgq4r3xztsl0yks3pxdyc", - "bc1pdq3fpms3z5vd6z06357dpunh206yefc5hjyln6vq2zz64jr5j3ks7ta4hz", - "bc1p42kvrm7tvcya5j53rcmulx3zxnpr7nktfjwvj7qagncg0r6h6fdsymwf0p", - "bc1pwaqs9ehjs0sdtanv2ej4jdg697evzj44tjhn2hgr8eqmj5pc4pjs6x6x3n", - "bc1p04jk7zevnluqrtmntrrm5s0c4tjc8msal4005lpg36ukl07zqycsxqesgr", - "bc1pms0agx034etjpvdtjvk8vyyc8r3zccuu6llr2dz8h6th399c9cnsqljxzz", - "bc1pnz7e76qt68flhmj0p9jqx7sh992qg7hxctmn6cfmhhlrktmux89s0m6934", - "bc1p3lrvyd5m3833lnkwzw4c26nf0tm5gq3mvmllm0jwsstcugyz3ulq9xrzg7", - "bc1p04wn8tzdarl43s3etlhgf8uy4pj6k2hpzuz7uuqz2qmhx944lu3smdd2xn", - "bc1pt745dhq7s2pra0pmu7td9ka0ty537efhwdvdzyann49rxy48dftqty355q", - "bc1pugpxs9tv86r9d2vxgz9ylga63zcwmvzrey93j9g7xwva384xexzqzyxx98", - "bc1pdjrywm3qkeg7hhxpnx7l20nsngczexwc7pn49tgt6v2tagm0mddqg6ym0c", - "bc1psygln6lsjvxht8yn60nfn3qylyyt907ck8z5kw3ld9gy8c9g39qszdrjpe", - "bc1prqwak3vtlfyed2qnn4jwu8hf29q2gr3xalnc6xurazx2ms89j52syzyjh2", - "bc1ph22yj9agn08ulz33y40ah0e60wwa59yrewrcgamhu43y2ephmfyq0w67q2", - "bc1p59h7lf2sy8lslrznq6025vjq5sazcz3shv7lp8pnwmdudwue9q9q0m8kty", - "bc1pk59xad6mwg7umdrulgukz7e8540jlwx7am54c2h67pat9n40mmeqwjv68f", - "bc1pa2zp8048wf80tn8d3q69cu4p05592c4spm4ltfpf4fxfdppyuswse5jpxg", - "bc1p3jr0rl9z8824tx5xj2yknkzgf9s8yz4m472awk2kddnt4ydrr3cq3tvxpj", - "bc1phv53aj0ez89q84pxghsg0wt7ugj85ugw9k0mq87f58524v8636ts2sg5fw", - "bc1pndm92xtc6ua55hgyw85348xum7sgc7azhayfgd0tpa6e04mf9hfqwnpnct", - "bc1ps0qvwazw4vgj9s7lg7pk4n8mkneu3kcs70ey9x9cvns7s4kjv3rqumph3d", - "bc1pvq2zqs3ejjfj2uuuu976g96xdmmv5fl998dngnx9qk9n7kdcgtnqd97aje", - "bc1p3hltp5anj2v8ghjwvzzqt0e0nvhz8adw29kcqrvw87n9x0stx74stj6en4", - "bc1p4d82365h3x8a3glrlqk5ryqfyrqqntztepvcehync2972zks4h7qkpdfty", - "bc1p63dul2all9dej4nlcnf5745f5qnwq4ddgew8r8kyj8vf2nku6u6qfu7zy9", - "bc1pa0yjxmzd7uzvw0wyehkky7h27xxh0yynl5u7xu63rf23m5w2q7jq4vxdyc", - "bc1p59el3gweapsx78jyse6m47xma4w9up3cdqpqjwm79cd6xujf0hwsqk7vr0", - "bc1p3z254as53699lrltt5e2f6gx7lj7eztmq7fe8prtt8qynrp8gg7qpnn2cq", - "bc1p0nz0kc932au5ayp7x4e8evt36apl37rnw9gvvsjz7vdf6wmvff5ssvgl4d", - "bc1pmwqxyeksdmhvne9lja75k387n35h8jp02uapjq5v9su974pr760swp6le0", - "bc1pyhnfrxfeaqhce2h5aplyp3wv9u594pddu4xjqup2ewgkj76uavmse8725g", - "bc1p4jsdfu86fxvthpprtj884ckkadg4m2pj8j94mq3cyp9zvqqznmtqdhfjkp", - "bc1pdtkw9seqtwcvayzc56q6vtndgmwcfmqz2ntfusn92rur7qnrvghslfr0nr", - "bc1p8dwylkr2ylef73mqh0udkus06q9tu5wq33aqujaecv3fp0kvc6jqm4w3mm", - "bc1p6hfmw6vjqnmndl6cqjp9kc2myuhhmn4d88ynkh0k2k8zmum024nqyygrcv", - "bc1pnal7fzt7ar4levpfy7fgl85cpymefpp3uqnkznvwz5z04a9v7tfqmd4jmk", - "bc1pjtsxw5l2fzuexcq4ylgz8khtxhee5nwqq532kkvj9ku68axvqpsqj7jkkc", - "bc1prezdtaktvr96l8kseqpfspuh77aj9j2nvz5xn97wjulhpu6ekklq20gtz7", - "bc1px75w0llkydcnn0m89grqkdncsu6nq30nngllpsvwk53864zjx6fqn2s5rl", - "bc1prdyhvusedvvz4e27h2kfdql0mfyuz3ac0wr3rgehlvzveda3wwls2pw3z4", - "bc1pf952ujhr8h7k3af7h3nj00xw4c0cxq3cc9hd4g0q84aa2vqjnccskghtyc", - "bc1p9gp2salvpx4naf2c78dv7ezeaf36h8n7fc6k2r8k5w60vs3q39rsy634n5", - "bc1pjgatuv5sfhj4x4fg64g7zc4qy4mk0w47q24hzumz2x56tgkffcyqzx4npc", - "bc1pqwqy7jz322xut6yrg85qacwt4mdzc45xt48n94czuupmme8phvasx4suk6", - "bc1pc9u56drlwfj89t4vxheh92yk09m0qf4nwz40dfyvqs5amesfefaqzy6w6z", - "bc1pcetkmewlcz6mcgy9rdl4k9ytk7656meswjzfs2afcu29x8zdn3zs9308th", - "bc1phqd22utexvkskzpjsrv479a4ar2vex5e7vqcue4gmesu5yws293qjwqv2a", - "bc1punw6n66dfch7nnqkd6dug9qu6yaspt6rhajv6qvh62zsys2a8y7qxen2kc", - "bc1pn36u2vy3h6geetfg5fmqdycwny7de6670afhk6e8uprnw5hjkj9qued40t", - "bc1p03uzwqj04wds6aenp6mmw8a65mh5nlf0wvrvtcl6devnywz4alqsnvzvwc", - "bc1p77xjcmcpe9qzjy4q6253mq7jyn0uxc54qw530qwwahujlld0w0cqwucjnw", - "bc1pztee9cad79y26kll84aqflmanj7a0mrcm0004dgsyerpe7vtp24qsrntrh", - "bc1psue9uk3nk5ayxsn6e0lw4mp8rm6p0ktwx23m58mn9spt8g20r5aqatjlt9", - "bc1pvdhy62tpkqdh5f64ustkxlqqjp67khrpy0zcg7y9nqv49yfk2g7qukm50x", - "bc1pqqt2m8zy58j3m8gcxsqzhugxphsqjs2uhfwjq8wjuzp3aex9s2aqqg0p0g", - "bc1p24hhrduvt5u9tmw4au4a3y4pxn2xr4q5w6xt6zw44y98sjfghepsr23qyh", - "bc1p6gaje6furj85amjjshdgutyg5fer8e4dqnqp6y9skyng3uknn7hsc3ck37", - "bc1pgtpw82mncf8dg0x54q5ejx97p557a0nuv75z7vxneqvh5cl5hrwsy9fj3u", - "bc1pxjgudxsy6rsa7xwk29m7hqcmvralh93vqg4v6fwv3gn98gvsaqjqkfyjhv", - "bc1pdn03l9q72tr82c7dlzshvryz45exqsx5thfld5sql8yxnchl4tfspqr4cy", - "bc1pw0k0akp59rfmqdnks0pztr36zypcp4aevq0v4vr9ehff8zzsa9gq5u842y", - "bc1p6zveulv8uqx5y2rsatmpegnspjud7etl4sjr0gsw6mtn7phdpltq75yssk", - "bc1pfqnf4vu2rzx85r2ugg7nex2sh760ft4ls5feuxh95d4xyhwhgh8swxsy0j", - "bc1paugk98agg8a5v663kxrad77kaykuwjezpdu809felzt3304s4wcsk4rt88", - "bc1pcq5s6qsydd2fgztahu70y94gu4szdqydxzt09ycas9tkwnd7kcvqkj8gkk", - "bc1pv8ucqcw5v3n6e4vsvjvd33gms23332733f4d3lsqtscus36akqwqekmpue", - "bc1pv4hz5ngv98gae2quyg23c349c5ek8d84xkz8weajpv8w69332dfsza4093", - "bc1pdujw3fq2cajjl2kd6m5ytllq5tr4v25zmzv3agwjz4947tlde7cqjdngzw", - "bc1ph2j9hd9wlzt775xtkzvvphqlysgfdxngaakke0uyksvvnmjtjrdq97994q", - "bc1p45x0k2amp44hrghh5qhmkucwv3y67enx3lp45mss35rkd62kfupsca47gx", - "bc1puu7k27tdvv8vcmgddhypzcclzuvd7t8yhdptmd9ga2272qpvxyjqfe9jkm", - "bc1pkq68hhx4n0se8nwfcs8qlys0qvavvh9aqc62trm7et46v0nhz75qq5cftt", - "bc1py042wclfyusfseqxjw88p8v6lyzvy2jhtj0jk3us6fepn0sxgm0sjz850h", - "bc1p8jejyqnez7lyyuddwpqqd7lye7gxw0extru692ekh88wyk77rxrqtkudhc", - "bc1pfenjurqsc8rxylv7xvhn94nln7rzls8e0dg4w9d53ddw5mvd379q2ufqsp", - "bc1pqv796aa3f36g96sewdh7v0xt52r02l9694tl9uy9wpa9ma6nxg5sgz97qw", - "bc1p4fk07fmzvskmq7rmwek32h4jh24py02k0hq848qspedqwm4rsy4s0ks639", - "bc1pwcpf9378h8zk4w0ua8py4e9pwm6pg7ljjlznq6qwcrrt29ayxa6sgq0mml", - "bc1p7xuv039yskzlred7r84vcqhwyg0yshem83jr005l6ke7xkaxpdjs2mhug3", - "bc1p8p4l069m8fc6y423a9wjkez3pqedvvx37ynwtnrzne9nhu3cdduqwzrld6", - "bc1pfxtta0l56pewwxtqln5r7atw9xsd8dr67rdxgaraqz7mt0wg3e7q6d9ewj", - "bc1pt6uddr9ezekutk4cvxx0u7whylsxn2ecphq7czqx6dxnx60kf60qhdp7kp", - "bc1pryn36neq2gdwuthecdhzulkl4af8l9njptmgrq2u832ke26yv7rstttry9", - "bc1pesgxu8eqf4spp2m3xxrd5tr8a3406c2s6hdmnhgfrf5l6rn3yels6ed57a", - "bc1pt0wpwetdhtuam5gt0as02ywvgpclkyknu9vgph0w7rqfuwg0utfq02yptn", - "bc1pft80mv9j84gw5984vw6tysnmuzc7zvp5gt048sguly5g8gwm9zrqxm5kfs", - "bc1pldn6x89f2p7mzj5u9uuxrt96guhee0zqctc77kf69adxdqnt4naqllyw68", - "bc1px25vhdfjwayq8wgxape462k2clerj70w6vwq90rtpa3a7l0jjtes3hc6pp", - "bc1pddxlhpwxt7vun7qqhx32anqahndcxx029g6pe28lauv3f43q5qws65lh27", - "bc1p7qalatsr6a3au2dpp60s8j4vn2lum6mkhuw73fmhxyuh9xc8ah5sh55mqx", - "bc1pqhj68nvs9rkvl9wxp53tgk7s2xeq2erej5qjx8wpuaxfqqhr784s623t4r", - "bc1p7njk58d9qy7khyyh65vy597v4py6046n287fet796lgml9y8ykgsxhvrz6", - "bc1pkucyev53w63eexpmhlzp0472cfh7zlj7th6ceg05u8fypc39a69sy3mlns", - "bc1pzs4cq92tjwp4uvrjutfczz27rjp4vddffezanyp50rl9lqxzmh9shgx0wh", - "bc1pxxng0dxqn2ydt046teemxqn5l40urnu4rh0jdjpgpth3afta4ytskgetsz", - "bc1pdzshtz3yx9yezgn4hakqgzkg8c9nmx7kgt9wtkzt3qqv48uxr6sqddv6jd", - "bc1pmlktfhu4qv2dlwua3l494lx9fet849y2f0s8jznh58292y9y7r0qj9vqhj", - "bc1pl4ktyykmc7twcwu8avvf2d8vc3qjlp7lhrxl7kc7n082va7xcxfsvth2c4", - "bc1p3g605etmvrhv4ykxnjudmap43plja2v6xz03cejaf0nfad5cw3cqa5zan4", - "bc1p4hqltylkzt9p9hsjjgcqe75qp4xe5s2fp5xady6rwfj9fxhu52hskz0qeg", - "bc1p8wxmwyn3ms9fs0vfzdkpr8vq7crmeh6ppljj020phrtupeejugtqvpe6a0", - "bc1p3fumwgsa5ynegnz8rxs2a62m8jzumuvj6k3mje24v952yma0c9pqn86emm", - "bc1px0wcn9zps7pj3djqwv6uvpxha34c7y55cxh2vwsylqatjsp34gcqvks7n2", - "bc1p0pm9kth8rff8usezgjc0u9ymcwmpl3002xj3ga8vqe6ayyy2xvcst0q5td", - "bc1p0pr3nrfrexlt8ldjm6uk5f3z4twm40g4y7ry47ud0pq95ru54xgsgl66ck", - "bc1pcqrqekqg96c0462gjsv7y8a0dk6kztlgvhl8h3tr2z3ucwqrkzjqylzwc9", - "bc1p9dngjnt57kkyjf9wn37h538ndq5r66cca6733rxk0zv252zgtnns5djskn", - "bc1p3wxpwcqw4dnflnlcj78zf4jcgdgru9zwgdqdaqlnlwpch72rhh6sprlaj0", - "bc1pkfcmkhdfk7xajyua7hf65dcarsfstdwlt979eh9lzuvgyeydajaqd6pgcg", - "bc1pv56umkc59ez2z4dzhm96nzutn92hdykysywza6au25m5fl37p8gsn2zunw", - "bc1pdty9pmn8lqzrhj62l3vz0pylr92k3288yhmhddc8p8acw54fv2cqj89ygn", - "bc1pga7fhyl6r7ml93h4s659faqua5l8uvmz0c07kfxcrrf3c7amcvjqrhyxmm", - "bc1pmujve9jkytyaw4axkud72rd82xsk0zt57amkjm4kcxumnwlaganqlp4d2s", - "bc1p92vvtewzmsz48vnsznqej8lhwg7khr9edzx36ld25zlttp05nh4svglcl0", - "bc1ppyrq6v8c5ac7e2h0d03fpewva6a5uszgcmfh0fzlxns006fu9htq856adh", - "bc1pw7rhun77zdgecjfs2dhfp3fp9y2yqy30vnay0y0drukvhlwy7z9sv6rkf9", - "bc1p0v99ynqu4j3cgtfp70eyrrmsk70jtm9re0ym673k0apr40gapkhsteg6uu", - "bc1pg8zaxanhydpjmpt7c205q5xhlzcvp66vl9hu5960ps56j6c54yuqhjk3aa", - "bc1pasg9wke3vd644srfku796mp5m7j823wacq6pqve8zrp0e4yqxe8s6d9gep", - "bc1p52apmxfzj086pft2ap2uu93zpgvznuj4z76m7f9qa73f6xdydxkq67zzmm", - "bc1pusqzu8ffd7a0x4eavvsl2pergqe8vr8244jdwjltxafn5aqqkdes9vhxm4", - "bc1p9lhgjm4s85mz49qf5x5qh92g8ntykzvau7k3uv8nk0ghur65fc3qcxmfce", - "bc1plvspcd7mjtmsdjt5yghlvql3e480uchzc95ht3u50wzhsapwfklqv8edkx", - "bc1pcghe352cxpjfrymua3t0hjj6r46ax9n9nvp6a2k085nuj5taaj4sdgkf9h", - "bc1pd547eem6dwc4rshz57spswv6zsndxmz2kumm9mdnq5dm58htnccsn6pm9h", - "bc1p92sn8kg5tpfcegz9wvswsdfjtz34r7ew594jgrd9kdqugkgk2deqpu9k5w", - "bc1p2dqxndgw9v7sxza8rgcrzj39gd7htxj28vge882h65vf8aanul7sht495f", - "bc1p4unsdr63z7c87nmnlx3s2rqq72wtjn4mnpfvcj5x58hc749fstnshq9cnp", - "bc1p8y03aaatxvdy8hhpd9za0ykpwwk9y5wch5tmmt6q486kr3ke9dtqv60mgh", - "bc1p9730j4k7sgeqf3h436c578h9k27sm6jc6jvgcjnjsmnjpgcfgncqcfy9u9", - "bc1phefhskl8mwjawztzm64hqt52jdvsjqy6nvwl2et688ajz5lu72zs3w6e3l", - "bc1p8hku7cjqav4z8p0ye22vrl3zunqvlyz5dkv5hrwcyfz48q3l462qp4g7j8", - "bc1pvrrk7qgqwx4xspm8tpk9qrz66eh6gqtzq3h2xvhaqhftvxztwxuq9egwmr", - "bc1p66jc7pgk2732pgke6fv86jkuymxheypcsnmrrx3eyzttdnkmrryq06a6pe", - "bc1ptxh4vqql4yy5795v4szdlydfykg8av2223cj8uzx5wtfc0t48pyqcj9shz", - "bc1pj9eeh6ckxdd5yyrkprxpu7ev4awdphpgdtdsmmwa4pz5gst07uhsms5ukg", - "bc1p7ef8wtmckxrxc9tu8hxxr2w0tr323ea8ey02ctuyk38ted65794syjkzmw", - "bc1prq7jrkn8k7nd84xv4z9a7f5eun64hzs5py2a0e6wm0wn2kt6ftzqvup8x3", - "bc1ph9rwk244l0rxk68f7p97y3754temtj370s0z6dq0xfklkdtxjk7sgtsqy5", - "bc1pjhzt3gdtqppn5usaguzq7la0ru94vcueh4cxmvdst5arwm3puvmsu909qt", - "bc1pmq9ar6dzhf7h9qpwhg7928mxk5342yrf6zhtyj4lhyxtusl5smssvg6haz", - "bc1pr69xnls4k27eexjcaq8pmp89gdlcmn6vkadrwctp95737qrfk6sqlggwhk", - "bc1p9rc6e4r479cmpjx9pj4279cchex7aeh3rfjast8td0vjnzyv74vs4n8e0t", - "bc1pg3uu04pffs4rxu9ws8xr64jmrkdmgpdmmg6jmehtgrhuf0lpr6ssgl2yv5", - "bc1p0csp67tasnjzujev6r4jempz2m9hfzcq7qgrx9nm7w7gazntfses7da86k", - "bc1pzvehggl50vxsnnjcl2w9zj2fpnltn63pxjudmt82hgsgt6qee8wsgaxll3", - "bc1pkjqvmhp4dmfvsmk9ahylaqwlpgtp4kwk8x6s4dxuvyw7es6hr0esgy9rh0", - "bc1pg36lfl0gplk70sq2m34rpvkn6t7dwqq02yrn74etdd40sfzvuhrsac3ata", - "bc1pfrg897cv6cpjeuwdmqdp20pprjf808cnvzpqdypa8lvdc0ka255qthrgvd", - "bc1p0jqd20vnuckq9z6ku4aenqtx424pseu46w02upx953z0cnq2elyqgnphkm", - "bc1pfntn9jardp5az43nq30jhf75shrt6ts7fapguccdk8slzxqlslyshu9kx3", - "bc1pvgej2eukc983dckfsu2t9jfz29j9naplj2d95cpkk5gzr7zv5zaqamzgw5", - "bc1phyq7rqvjyunkevcx793hvq8w9gn5qr4t5wa6t7zsg30me796q7aq8ayerh", - "bc1pxltgr2ljt7dm6rc4w89e6fwasw344zpgd4rwges3sdzjw864d34s4zzupg", - "bc1pyf2y26fr8a0xexs90qcueks0zzng04wuzxsyutfjz4dlmtha0cgsajze40", - "bc1p4plcznp933vqffqtgsklwg3zl2ecdc0a8emj0k4z9d43slz8h86sd5wwmx", - "bc1p44usm66fam27wfpgujx7j8swt5a0gxse33vnqkvx9z4upwr06u9q3a8l2j", - "bc1p7ff54qzn7gezcqqsv9w7xr674q60zvz2yfycu9accs2w0mvd7ppq8pdg83", - "bc1plau3k3h60jhrnpnycqv3pq3zfa7pzzj0c54aajw2adc7elux5yjqfrz4rw", - "bc1pxp4ngj9j73x4hqggfv2qksz2wqewq6649y0d48vurajuj859tjpq84eynp", - "bc1p5pygucqvw5xv6d3rgkyddpqtwt74pk0ewpsrnmqmr8puwymuvfhs8vyjta", - "bc1ph0p4g0azsd9nk2aewphqnjaj8rkjjhrrztl0emx3m2spc00mhjksnn4c4k", - "bc1p6ls0av6uwr9mkl8qdq3lxuhjkw0qrfgn7t5g43qvzck38869d8vsyxekj4", - "bc1p54zy2xp22msqnewsppnpnuv50rxwf4qjqa3wp0uprayl6zgegrws7pc53t", - "bc1p0ndrrquq2wp82z967yrwyn2e08keml8ww9uvq27uw6lgtar2e7nsr4t74p", - "bc1p6az04ufkud0scyvn379ffcv5mxayxxpwuf7pesp8u4kkmg8epchqvlstu4", - "bc1pjxpq77a0r9wnk4vs4lg66dpf8vh68wm7ux24cl86f9uenvrwp4zs30aagv", - "bc1pglzdr6ujgule883elwuugruxrmdequdrmawm8wmllueclteh8nqsylmtdr", - "bc1pgxhpxgjfaaukrny06a8hphemr6dslyp4lmgn77wwawhh3pec6gzszyp9de", - "bc1ppmxz5cykgjq330n0u2wm7mkc7jwc6806qa0jcjduu5mjkhqsp8wsedyz55", - "bc1p3ju93w0mm9n6uxcv5550gkhewxmw32wf32qm4m494qtkqjm2xfjsmqqukn", - "bc1ppeg27hrsvgc2lt70h6rvcfnsce2xlfmdap3lls26suke3ntltgzq0q7wl2", - "bc1pquut4agqljljxhwd3d2x4ag4tkdmeqs6c8x2nuhuez8t4fxhzq8sy35rhf", - "bc1p9n85224xv99ph5jzcdta6fw44cl000ccp5mzr7at22q70zrkh3ds6qfqw0", - "bc1puae2flsuxc4nkufz5hv072p8evmrvght4klsyjmds0fz20ev8rnqqqmg2v", - "bc1p95yg2sxx8u9lwnguve5h7x3f9gv2hc6a6p7yld7tdxtx6qa39u6s2dpy7p", - "bc1pr33070rejz72hqwf9hdupj2025sh54p6n29qf3q5x6wjccp2mazsq6yx9h", - "bc1p35aamz94yseuhz6lxz4xad5qrgghfyawtmfl8qy99442zntcwcnsdtk6h5", - "bc1ps730ku9j4d63qp5yee0n0jtztk354x4vdgdr8r8z8m3wl0mf6fnqlty8fz", - "bc1pvcwjyxr8zz3lz60tzedzcqlen08q676ysk482mxn50gly0rw3l2qs6du65", - "bc1plq7qmwga20vh42sxkmsaeywpvx62a8w5hap59zvh7qhrk7mmqqqqajq30z", - "bc1pl6cdl4t83r2qfn3auvx5p5tqpejar36j0raeenexw52e8y5qkwvq5yguwr", - "bc1pxwxhgvh682dpamz9guh9k6uamw73sw6kzu572d9cppqpx3rxjjtqmv3l8x", - "bc1pltput4k2pwm5eg897l9lakv62vmtes0lngt4gc4s5w9nztwyunxsapywef", - "bc1p8yfy3yqy5sqsxz88su42jv6q4ms2ma4pjswqrnrh9f2m95emml2qf63lzc", - "bc1p66hktk2qqp60g4pecyljan6uwr9ggxlhnngl42075wddhen4jnasfg4efn", - "bc1pzfhhcxuj6wskgzuqv6pw5qraqn2lt7yufvmtw4m6davg4e8uht9s45q4qd", - "bc1p2qgmhjs0u75jegpza5c7tkzkl9d60h23dflsy296fzgwq3pssk6qh7z4p2", - "bc1p8225cdenwcnt4lt49rj6rxugqd9lnnc6jdzdp3xxv35564zp3grqf27px7", - "bc1pl5kgcy6f25hejyp56mx6vkc56rfqh87m8n647096qzv3jhjxnruscm3nps", - "bc1p3pkd8hu9txt4esm6wxcajh0jtzvxj5p9fe5g7scr80dylmck5xqqxmd35t", - "bc1p50wr66y99asxx6hvfqud6x9wzw93c7kg6huun8ewvpx8lqf6zjpqz9e3ce", - "bc1p9kt2zka86q79yqwd6qr50csq5y8r6mlj209sx5cuwfv6g6ke3g7q2a8nrl", - "bc1pt727ndyc737xn38tymzzffp5gh84gccr4pwxwllwe3674aupcwxqakhvjs", - "bc1pg86a3593zxdfyz8ch9kf9zqx0sfhsvp57xl5jpwzaa03zh8l3kfse8el34", - "bc1pv3nvlaq9jjd2y2kut7kz2gkd5jcndc6gxh78ce3q0tt5x4qujm3s7lejlu", - "bc1pcjasvjw0lx3kxnvsngrwayask6exwacy52wmk6r4zfmylrulntlslshj98", - "bc1pdtj39239x07hnwc7ljcd8yh05lq4z2u5ak0ufnt6wqntnctzxntqf8e8n4", - "bc1ph6x98uys065pjt2g2u5w5xkxpn2uchn3empwha8ap3u04zusge7qk2zmmx", - "bc1papyfvvz03egen2kzqe3j4qs5tjxlpl2776pkyfawwvpmvtgajvwsg52fm7", - "bc1pqn0wpawpdlamj6f3ep36x2s9kntjsdatx4qrczl9z4eq3rm5hsjq2jl07k", - "bc1putwv9jaqfa6qsyqjkue9yv5nusmmp05tkp09g8sgr8d73tkcphhsh678l3", - "bc1pkxfkhagt49gl6vynmczfvh49m78rv24tsn8fvt87qsuy4vvszcxq3kz675", - "bc1pfa94cercpl53ug5r9p3s8q5nhk2lwvuwy3zlnd0gkmaamky3cfrq4qu3q0", - "bc1pys3k877mkgnd7h8dm09wuv670e8nnayp5zq0gqy3tk79yvl5zwwqp6ak5h", - "bc1partnuzkzp7ka9qajxa6d838fwhztnfhg07z0xlkpr9jft57uyjqqnlpe8l", - "bc1px30f2w6yevuqesnm82mzcpwwfvnu9aczcm3j95r5k5g8vjkeh00qkpva3y", - "bc1p7swgywh4enh7asuzg6843s6d3e4yx5wv67s2f0eku7hzpazf8yyqqfd68n", - "bc1p5v2gulnexc9qmrdx778ehee0ezw34mq48ldfh2xe6zr0h6v76vnqg7fnyl", - "bc1p9w2wzt33yvt72dxy8wr6kptzayvx5lxdjrawl86srwaxajj52a9q2ha889", - "bc1paxuqjm78e00mf2yua3yjf7glmzufqk2yp3vd3ulctp9eusumuf3s9v3vpn", - "bc1p9dh728mnsp5hev7a6rhjrgeads7l0634dzdrccrfjvqt55ucj08qjcta2q", - "bc1pka524tr069yyfdck70v4dv85fasqzkclkje5537swezf69w8htsshm2ngz", - "bc1pcvwqgytngcwf3l5crcpweju7fn4v99xqdwrhxufy6hu30vc2790qf427f8", - "bc1p00r9vcrjm2kkhf78w6xgpfv0zqft0vwavwd6lqp5zq8d5xe8a29s9052g4", - "bc1p3x6hq7xhgj3k3kwpq25hlm3zus29avuueu2xxl8fl47el3v46c7spgcupy", - "bc1pkdsw2uly9fqamfdz6wtmlghpzrgczracrah9tv8lt55ph4n6zjaq5mdyh4", - "bc1pau4jc5j2vyajp3f2m5yskk4hg4myutex5spn5z4xhmrgefjulzjs95ugl9", - "bc1pfhjls3nzzqu24q3a6vpv2rp5g0wv9cna5gq7zmhhs6wkps0ex42s3kxree", - "bc1p7m6nnz0ucga7sxzczl7lzj6542c6xmlkjq7xveffagp0nh5adxcsn7m2pl", - "bc1pyy6smzrvxvvhfdea3mx58rg0fe4j02gv6ew23ulh50vrwzvunlzs0fgypw", - "bc1pw0dn0skx8tvcd0e5680ml4tpe48hxfll8q2l5gnnyygqeqvcl36s5dgzgn", - "bc1p9awx9qrvak09dz652784a2rwkywmv4ek3f0fyun4gpef6tn7gkds365lcc", - "bc1pjvckgd248l3kdu0ktedhvd3wwd43qplszntd6ddwlhyfxxdfngyqc3e35x", - "bc1ptc7xjcyatxjgy7k5xl94rmyhzuk333egw5xsuyklhdn9vllhf9us6fhapx", - "bc1pave0fwq8njkq502nf5ezjtj622d27fkjkt09gdg7f5ms7d7uvkestgxfr7", - "bc1pdefyxz5kduq7dj0tfc7wdt9zcvguhf5wzua0df3lrtpkmhyxzhmsc4rw6s", - "bc1pyrsxkrtpn4fwfulsag89sgzueqcnyuklqd8su3r3hlemnjcluswqvrq85k", - "bc1pkgqnc5y9hmz750g5jexcpx74rf0f77g0nea9s5zcwx7eexneu9mq7vq3t0", - "bc1pf3mjmglsye57hhksumqe2md2zwlg6m6da7sctcy3eqqj3npapyas30afmx", - "bc1pllzfndmn8n9xvl6rvtmj8kx6ankg3vlg946svqu2nneu6xh99wcqjpz55r", - "bc1prsgww0trtrzkregavfk5xkehjmjv2uqxuawesenxftkqyff3p3fquy468p", - "bc1p9hqklzlf4wsrzqlkwhfgltrz85erhf2jyj0d48tvapuz3zg6s24s7fs9fh", - "bc1pldaw8jjlp8nsn6k4qulpuppgpdzzhlsgdxv46k3a024hsak9gkkqv722s6", - "bc1pp6n8d0ee6xwaw637wtvhqc5hdgqj75n2dsdmn2tnqdzkzwd6hnwqas64rj", - "bc1pd2dsc9ty2npppsrjwgkk608xekz73643k436dzrmuc6m93lyeq3sjalnsx", - "bc1pk9ncg6dp7xdcn9sd2278af6g62sw3kceuk2l7753fr2rr8m0zv0sej5rzm", - "bc1pmcupaetgs0kqqknmn3vs8nfw3nadxttkw3dped5fhg4tvu8kmswsynyyyj", - "bc1p24p3wnapyc0mxv33lejyxae42wvxh7d9ysvkcrcg4k0f2f6y0skqhenr55", - "bc1p3ca5rce8v6cwqa5qswcw7pcgdc9rrqlyhjr6rjtgjur2d3g23m5s5n06f7", - "bc1puudya8ye72edluh85jjzjusmlect4ggtkwjwldst44vuk43xhqzqdkre6u", - "bc1pua0yzmrws3rvsmpg3cec6v7uy9thhe32zxv5p79uveq0s8gl6p2svv8flz", - "bc1paqwtuvwyea8nu6nz3v4vcn78dew7k5zjag76m5n6s9f3favmanqq7xst44", - "bc1p8yew9d2j652wtwkyh7g23ahh29tlvtm24add9n9cp577cyda47ws9j7er2", - "bc1p2tgmqqq4jk7z9nxyvv6n72fp8p30qlv4e4urqkxx3twvxhy9000su4ep2j", - "bc1pxvkywr0qmjt6vc66zvtr6lg0f3zz4l68p2ksr5ef5mk2u4k287cqqdaq65", - "bc1ps05zhafde33mk24gzyp2ztv4y5pu5qk83estqfdn8pkl3ql7x59qk0efd4", - "bc1p545u57nh63w62a6tm0hke8dn0a7ukwyvt79kh3t8fxlswjk57jnsf2f9ee", - "bc1pee2evuaqewpfjkl6dcmqmer6n2el5aa8lrnfr0g3dgaf20zqly8q3xe9zz", - "bc1p85wrensj2grg2ttrrxsslp02633rqmlk8g0fx45z39v7prsmuhlsxum8yt", - "bc1pmlu6mfh7wuuv60jthjkgr8jk8le755z90scvfzk9uq27p494lr0s05hagq", - "bc1pnkzcvdlycgyn0s3ge2fgyk5wxj59sp5xr6dn5lw883rwwy4h53fsyyuux7", - "bc1pvfvzys79zw42qx6q8ueekn4n4xlkyxth2npuqdvutmx9gy0x4nvsk3smsq", - "bc1ph3atd33wzrq2j7ju3neqqnc5yug6zk3tjkadpfprjf6chnw7yrzq5knnmg", - "bc1p9wx8waf0un5fnmh6kgh0j60pu06ql7y0phg2p9syuwgkeja926wsex8hq4", - "bc1p3053a5f09hn7t84tcxe37thnmmlh5tlkz7wz66g870h4qzhf0vzs0gwv9j", - "bc1p99egpy9ja2rpgc4gmhzdkvwht0j6aqlz747wjt2dd42sajtjc3aqjtuwz3", - "bc1p8ds8tgqypjm998564z2tfq47m8knddyczkr8edseqqgxax0t7qjqdrsctr", - "bc1pyfkmpnze4sf66q7xxdpppcfn89ctp5tf7m5qnaxwlf99nt57grjqvqjt4y", - "bc1prq0sm49jxrh6w2w5l7wcpg4wk9v45smeezhg989gvcx3ncddn2ws0kpvm9", - "bc1pxaxrjn6uzkdzz0u3z6nafs6mvatc8xf8ce7sw8jayayj7j63qt9stksrgm", - "bc1pdj0s88n0lcqkvca2qjzurwqlplcmg6mxwyyj3qawlrvrv0x524aq0qvsjf", - "bc1pu9dsefqvu7lamx584klexdt3kw7nla06ztuawfdm0fg32qffyuyquf8crh", - "bc1pc4ws7u5e3v3w3969xafuths8x5fxwdnk58gldqw35eehzjhnlqaskfz055", - "bc1p4f3vylfns7qn2yh56562ydpqs9a3nv7vk7c73zzqyuk6lletpfeqjhl4qj", - "bc1pj4jvk0j97s4vxlrdfvy9g55s9aakwchwnclyvft4gh66z30n3r6q25ged2", - "bc1pxcfn6auh7vn77aqu6gyd47au2v9l56yvpjhvm8sql6jwmjy2te5s9sqj23", - "bc1petm90u20fm57thwztqgw53ajet2zdx2cfum4fjwymcy6fd8k8rws8655tr", - "bc1peyse58r0z2jg48uga0fnwz2xj7k2a96dlzww265w2krva8n2qd2sgzew9z", - "bc1pa74gv0djt45909e0ua5rk2w6e348hjngy9m8atwzxzg8dzukawssq6k0ec", - "bc1pfq320jl35vjtr7negxcqzg5qgj79xd9j43nw9t67v604eugw4gwsxwvx5k", - "bc1pgn4ulr8pru4kr73pwfvku4z3mmrum0fvhn4leg9n920xw6rchqzqnpzj8c", - "bc1pkrv6eue7vqh302828w52epcy5zq90d4q205zhtlu2ny9t67t43dqlzk789", - "bc1pstmy3a0zcy59ywv8t5nfrdmstqcr30ryuj6nlcp3vydtu9p0l50qjca9ks", - "bc1pqmxygwwx4xc9nc02t8s3l8jywcuyceepf8s23pwhehwa8vg0zy7sp3ygu8", - "bc1pnaeqlht3wqy8tzrrxcruzn0ektnnltvphmmgthw8pwkeayzmzd5sgs8zel", - "bc1p5d26jmvrj2jn09x7654mgghu3wpt9gw28xl8r7vq6nlglj6tpchsc3szxd", - "bc1pn73ydhvk3sc7ergdrqsktpyvmappvuk04j0dvk76skz9dlhcdw9swc3e7t", - "bc1p43dtrd78q7xz25c95ejnsmrw0q9802atqq202kxsgrvhv27gzfvqs9jfdx", - "bc1phplg0y6he6a24w0r4nkvfjghcc3mny56xr5et9kpt7lmjf87j6rs4fzfcg", - "bc1pzlssawzqvph946gqc2n23thp2652v06z7ustca0xs2pqfj483gxs4xfnxp", - "bc1pclt53fwyvpjz07wghruhcfd57jum3ve3uzmqmgx8cgau254w25gsvxaue9", - "bc1psujc45jcqd2n49rtdkrv67x0lquc97446hc8juzs37ddjf9r38yqj5sz7z", - "bc1pteud695haf7ldgkm0p3v0r0mqp8j8nmgxjwag9yvwj3d7d2v0h4shfpdue", - "bc1pqycyp0kmmzwj7rugvxeqx6d50swjd54ygmev4f85rrvnkvs90nhqsa5rpc", - "bc1pmhe6340p6vzrjyg9q3l2f5zcy34dk7hdx7750d0unwr3ytnrq05qm8m9f5", - "bc1pvekkgrh289nq4e3rzug8v4wjxsymup7lsl65e2fg4mz57hf92z9sjq7w8r", - "bc1pnmtjvrw0jnxa05l42ptquejlxveq65egzem29ku6s67h4jy37xmse4chu3", - "bc1pm7vrmv9ngwh753hl378q7r2ypgyyw38su235lrszsyegpd52lgmqptyjdt", - "bc1pjsjcx5edlu36y6rqv8lc0cl5auckgcah7sdhxv5nlw0k469wm28q0wxv6g", - "bc1ptu4gdtzpmnre70zcfyvktpfevtgg0lvcnx4kq249k7erec89n3lqz79urd", - "bc1pzcr47rt3l99hh0d3spy9utk9vrfhduhlf3h93ws33cpsj4pxvxcqh7pclu", - "bc1pka5jpcg9anw7hs4m2kzv4xtnpuvh95r48du3mq8n0yqa3davw65q02lruf", - "bc1pw0k0l3w5wnsl92p6kz9dehl5g2z5msdfl0ah5savtyvdug2pyqns3fkp8u", - "bc1pnaj5t0qsnf9fxq9gxyq6u7z43ferfav8pj3azhafw58nyl9ayljs9p9r2r", - "bc1pe2ejawaz6348w4na4jxxynaehhydctnpavkeddnkxf6k0tnlg0ns0kl5uw", - "bc1pf5m387vssh3c6rwsl3l859tclunmhvfnmq6g4aqzcq00wrrsxtpqw70ylv", - "bc1pdulnxhyk4t9zldysq64hsd937ev6nkeljs59hmdsx97nugdm3xfqlxyu3q", - "bc1pj00uzlqns3trme56arn5px4cfrhtkjx3m0t0ysu8gm0fcjmp6akse42aq7", - "bc1ptnwz4wj7yere5kv5wnrjs8hgndd3sjq3ehgmpghsmwp3n67gdx3qd0hehd", - "bc1p83wuxj0f2wqnf99enhrgg3x7vegr88n52h49l3pllz39lvdsvxks74mk69", - "bc1pmxq49n8997gp6z0tnsujm2puf9c99jttpnt2tpu0mnlyaykejc9q2rgrde", - "bc1pkzu78c38q652nagacarc5j6lu0e0f0mc8lv99eqqqa06v2mhcccq5a4jud", - "bc1p3qnr7zhz6njy82h438380r32kg27xacsuluu62qmmedy65trlvtszh6jnk", - "bc1p27q0rc4vkzucq4s0qlvt7s2m9jalk0ugwrqeh5j0ekp3m9fux8kq8krfuz", - "bc1pm7mlrzsehhzhnd6wktrcu4gu555znel9cuvylz8rcv4uh9atnhxs32pjru", - "bc1pjkf7062c47aeznv3g6z8y400w4hylg7zc5tey35hvljr862mus6qqk3glq", - "bc1pd6qvj0rlmratk7hwp0h3xdsxn5yfhl4mp5ka64eumawh9v8ylyjq44v0al", - "bc1pnmgef3k2qxxp3aw4uzl8l0uxds22kgjwh7m905wn87js2esz3yrquzm20p", - "bc1pulg9kykmkrjagtwvla08097c2jatnaj2pl35zuqp07vgen3gj44qj7v8re", - "bc1p5yxxrlf3tw6cmqas6wj3kdx764emedmjc0fha87cpxpsjhduqsnqc332re", - "bc1p7zc7jph68a9cg0vpeukkyju3sq6sg4wlky95vp5ujs8grtln73aqt6rzzl", - "bc1purz7jhsp2glnu7qtt2ah7r0aepdv8eccq2ckp06equvm6zth2avqwuncdm", - "bc1prg67nsh0xtyzkkm8ecvqqk3l59x7mdkt9kuh3k5asam4698c040q6e9ehg", - "bc1p9adyvcsqem8y5tdntvvk428ms8jpkfnc6gxvgff0td39404u68tsjhdtwt", - "bc1pchef7ct5ssn5uyg34ktvxk55jwds32l85wqtvasjs4myu3y3kqvsenflr3", - "bc1pazf6q6shxtp7dy6y9c7k3rc9wa8p6dvz5e30wl7nv8l5zhy3jpfs6vzquq", - "bc1pqxn76jkr84qsaqy2x0p2xdfnecmynpcvzhcnx77uazm4fvwez8vstm8wf8", - "bc1p3mn7l8mcfdmkuvzx0p3hmp2qk6la57ac3z0qjfgduxn5es567ayswrzx4q", - "bc1pd6ejpx5xd02r52p24wug27u9a06h2t740we09560lfjaf3ulmhfq0ty0qu", - "bc1pm7pqd6xtgl496whvuazr72afw8tqhwne28s77r4f63vzefjlsrlskqmva7", - "bc1pdy3hn774et752mp57hzeqkuua0mdla2wuv7egjne22f53yy9suxst70y5g", - "bc1pdzf9x7hlwq2n8u8qmq8rsj04evqd7q2st8cl42zygfr6ng90swvq3tk4fp", - "bc1p2eeuz385lnd6l768ry650pfh2c3689sj2h943jxgazt6x39ywwfsm3jet4", - "bc1plxnv4kwe8zk0hgck6ntd9q0th4e38hntkusq6rjqlr8reztmzqashu8c68", - "bc1pqtwyv9ygfc3x0q8en29xz9ga0rjzekz9sz7f2zc3m6uj8g3xu7ws2mreuc", - "bc1pdxshwd3h2mgajl4mpdz5322e4tvp4hvxa375qul93hsvcgrwqm6sukulz0", - "bc1pf57e97ldq3rgg2u649gypanznw8h3emnes4gg2av70m3etgsuz9shy59zw", - "bc1pmd4wrtzy3f58mamv9mvfn45hem3yuf6l5y4cf5jt28pm2d3cnqeq5drhjq", - "bc1pehgtd5zknmmtk636rx3eerumxymgxjs5e6da4d4nu008g4flpr8s4zch92", - "bc1plqev3rm2g54g9u4qk7gg4javaae6hx0mt40nkavsztfytvgj8w2quaaxj7", - "bc1pmuj34wrc6zrw4ffwdc44gq2m2r8mkn9nsa7x5d5sufqcsfp2sj6sk9v98y", - "bc1ptmd2rxr7lxyrcu8ufrd73gr9p5rjnpk22d9s7v87qa8xxvpdd3lser6dud", - "bc1pcxdhmvmjgv9d2d0cem8u6jwytf554ywynlvnepzxhc90u5pwzu4q9a7ptp", - "bc1ph0a3z6c9n26e7d034pea2zdp95yd022daejxs0hhpp9r85k72qfqjumprp", - "bc1pdj8g7pns3eaxssxkgku8jxgwqq59a5jwwnzs2r45g8jhwqn7aujszuwtdf", - "bc1p8yyztuxmvm0eekdp0035eh7n0chg2s3d57sl3szaelzhfde5vs5qy6xqun", - "bc1pdgkqpl70adw7ptrcvrwhjvcqf7vju8k5ajqhluk90erd83ffnr9s7ujl24", - "bc1pmpdtaw0680vk80dug22unsav3673l6y8nn2yn9ddp3ep4azqm5vsnr3hvt", - "bc1ptvg00kzfhgdaxqvfwqqkz739a79f8u0kra2045klhut0a0dxd32q08h2kq", - "bc1pgppju5wjul0z5qphpnayrj50243e8q3fdr49ahd9dmqwqrqdlmuq05fjqk", - "bc1plcl5y40hck9l0uq5z27lwwqun822uq3pxtd4syse4eecu8jfge6qwyuuxg", - "bc1pzpdv8sdvyd97catgs77kgrdmrq2cvmpp3292xwg8l9fd8cal3kyqk5qu4z", - "bc1pg2zy9uh7tpv2347yce9lld3884xl8ha8n7m0nyh68w463kzewvssfuknxl", - "bc1pdyrfj3psps4qrmkzxj4yu6a0vkrw0zvdeka293qh49d0wlgppn7qr4knlr", - "bc1pp3vp32t8d4dqvj6crgw4s4gyewa5g2d6469dt2974lyy5f9hs2csqtemgu", - "bc1pnnkkl6m0zqrxdavaqe6ghmcjrm3uqv0hs7g6l5fzx22kf8tavyesyg2hn6", - "bc1ps0k36p6te7uwrzqq8zugz7w4ma0vs6k4jhl5xxul2r0uzlkfn7asgahauq", - "bc1pzw6f4zmrqsudkvtt9emw6a8cp67k2jjkgafx9ay4rgx04rr45ves2mvy7r", - "bc1p398axj4ee9mp2gj0gpef866kxp6f6xvfmaf6heafm6n5jwk3q7fqen44hr", - "bc1puf8rc9ynr362jwjt3qwqqn0dnjn76wtlhynkqcjv24m8ykjldasslzq6l9", - "bc1pyt8xy8clyvc666z9zn9ar5nvwmrmfrhtyl8rvrzmhar20y4qyw7qa2m0q9", - "bc1pgzzqj2vxp5an303x0ydsgflcd7z0mfy84a33fadsvpqgy9tscpjqq4sa5u", - "bc1pk02g2lncxru8ag5gge7vq7nkcxw8w73h7rlrfmhg7xqkfgcd88qqhu4djm", - "bc1prdd7chuc6lsedqsr2fjrr568tym60qd6nr64u6gltyztf7vm2pzqap8xvl", - "bc1p4eluq4fj5yy04j7syndpnqdudvq05tmnhgawv4lcppdyfmn92nns49xsp7", - "bc1p45kyk32vepyf64cvs5t9lmnzpp5f8urhjk980t687eea2l3xt6ps49m9yn", - "bc1phg4dyalu0h57q3tnrssxsa6xj0ue3wksqj8dc7tp2z8jpny8arssrjwmqz", - "bc1pnfr35wf0267vg062ds9r3hwvnq4lndnt7slujtxzsg4uz20gu2mq97vwcx", - "bc1pnptteh33cascavljcyxtfqfhsgnczhg3y7r0n55nhaz85kuz8j5qrt3qu6", - "bc1pj8cygx52z54j2lmrxmaanqlpujvuytqa2a5j0qq5vw7c70d2j45q44rnhd", - "bc1pdf8h506y8nklaz2jdd0m09g66y3lwwu24axs69etz4xd4d8aqlzqpd6sn3", - "bc1p9250mnhu7mu36ewqns6xh4w6hc4vquevutuv546eytqldyws7l0qh3ask5", - "bc1pvygxru7e2w8tym7vny8x5e9xtgtgzwcketjn4zxyff2afhrd9vjq4cyflu", - "bc1p3n9u95mn9qk5gn5kxevej98rutmntkl7qft0rskvkls4qf8sazsqx5xym6", - "bc1p30zzfk3f8egwkpwn00lps57sxc59yqzte5ef5h06dr2pnm8dgyfs8fqrl2", - "bc1p7ye5ppxewhkec8n4fqjl25nvzgmpmy9vn96tdvm2p9d7w6wc4lcqfnjl8q", - "bc1pn55ef3xrsav2d8cy9ga9c35936l7qx7n2uw9et2tgly9s2zjvfws2lwnr6", - "bc1prna0gr485wkz5hucvq06k9228uc57xhlza3wpew4ahhn2d680tgsvp992d", - "bc1p9tcqnqf6wwcm7979au3a8jc37a6mshuulk3dasey0fl6g682tkys4y64fd", - "bc1pvjvhk370u4hzfd7mavsuuwj94szfsnmn23gsgm0ln8zr9zkyzhpqh4cm0j", - "bc1ppqrkg6yjjzat6qt6r5g8dtg7sszsd664jvaae3ytan96kqh0jgwquur54s", - "bc1pwjmrv3zevuf0x9y4xjfhwugfyplrjyu63e5f6ja3hw20vej2tkzqh720ut", - "bc1p8z80fgm2ygvmvsdhndhd4g5mda26g05cwemztdddctuhx0n98drqhfl2wz", - "bc1pwcwdjjgtdsek22f83nntru8evapx6lpd7m9gsx8wtn8e3l5n3uvq0h6axh", - "bc1pvjstcma4uaqek324ympqvsk02dr8vlfqwv559yma6kme7g0tzwyq5tcmxl", - "bc1p6l7kkthll25a3untw89940yz9678rwza8dc46h35nk0zw5gyyvnq0gnlx0", - "bc1phds835eyz252z04re0t55fpp9xvpd48pl49d8nda0h0dwpuaj4lq06e5ss", - "bc1p3g8vxydu4fvc8u7ea7vjed4ejmlfdf52fj4ewj4aarqajs722qhsg5lpjy", - "bc1p0cceenxdlqd6sypplg7e62ks4m5p5fv2hltz7nk0lrhus8jkq43q5tttcu", - "bc1p98f5p46ej49wh3q9d5y6wrpp590nglwa6mk3j7x88nchg9eldg8s3s23uu", - "bc1pncemqcdc4plxfqwmjvvssrcv764qe386q9w5z5hnsxs2qrdqcflqhecfj4", - "bc1p97w8pnc2huhf6nmnhf6y9n4hpwtwgx6nv9l7gc6xfznvp9v0flfsfk50wl", - "bc1pqyscadtf73l3hautzjl6rfmuxncqusu0att79s4l02y3zlwy59xse0g6eh", - "bc1p30twd8xexayl3ygrfwwhu0vju5mjyxmk4nfdzx8thu7qhpq9g8rqdvs4y0", - "bc1p85kyhzmafkz44lktyavdkynulrn7rznem4ncmag07y3jwruy3z4q5tzaa7", - "bc1phh8np83j5m7ktngqyyl5lc8nt22vzlsafq25c94juyh4f35w9v9qk30urf", - "bc1pufd7dtr5qrjffea6ymjw5ehxgyp889hx9ekx33r8ltga3c8v9c0qlazc0m", - "bc1p3muev5jahvgwwfrx598g6v9ygqhuz82gyevjczhkwstxkx9nap3qqtrp3h", - "bc1ptcqg49texmf0y067mny207sl9zs3ptcfng38w7ts3pum56fxgaxsctum8f", - "bc1pxldmvzsszvcfhmwr6f59f854r7jchdllmt6395eanwaf2ttlqdfq4vh7sv", - "bc1puxmfn9sa3zds7lv504p4jajcutz04l3yn36uexag5xs7rk4qnfkql7fj5g", - "bc1plrqfgzqth9mkjwevqvmaxh3xesy76p569t72zu8xl6usqstgqm4syhd95z", - "bc1pjz78zhmghfjns9rfe24kwzcesglumzycxkrprsn34hek047k2qqsaju5xt", - "bc1p79klcu0mytks6cpwgq3ljpz4n47hgkmy2h7sndww8zhkc264dunqeadjgg", - "bc1pzpgqqrahfcvacdygvjkqm24af0xkpcg083h04vmatuhw8r08zpps0r2wfa", - "bc1peh6tspwdgf3wpwqcqn4txplla98uv6hvmmrwh5waj59d2y99yqrsl2c5gg", - "bc1pj469csqt2rt35kcftgl8c68wcwzqgmga90jxx080m5ddgj0ymqus4yufk4", - "bc1plmk3w4v4tgta5jtf4hky8p5vrstencr3qpzwnk32x5gpjxj42uyqa88c6l", - "bc1p7y2fy4gugsuxra3p8hp5dap6xxn6jhku3fa59632xjyezq7a59mqyemx9j", - "bc1p3y8z5zsets6872ffknz8vn7tccaqeug0amc8mzxx06qc6cpa8mwq8kx0cp", - "bc1pz3yhwelh6vt44jrgkt390zuw6vad4e6a9pkuaf7v4nc05kcd95jq53gaxr", - "bc1pp74cec8y83zqtgquarsv35q6ash7tqd5wcx3e3k4faqky2wwxhhsysh5jz", - "bc1p8f5a2j58x89t8d5huj3n4h56xx788y6gdv8hn908ey09a4za0g6q3l8ccq", - "bc1pw7keasr7vtyzzzvkeguh944celwd0zvkkkrkvwu88jecujrwkysqhzuvlw", - "bc1pdrfdzzxwpwjlfyf6uk6w4uy3fh4wsj00gpe6vp6gj35tfn5y6f5s0ndxt8", - "bc1ph3mrrshmfxmdayl7d8hsayhkzz4h8lyawev6j3deg8fw20mlwlnsv4unjr", - "bc1prqcw8cqkhdqa4gwg23pcm6fzgjp6vfar83epv4ej4eultm6puxuqr77ck4", - "bc1p2pluudczc5kk84204vvvxu3aa3cu605ztasn6z3up83xcn8jagpsfawfs3", - "bc1p0stzh8hevt8p7h94unv8ux9zwfn0vdsuru8sq9tk6fa2hdrparhq0aj3gh", - "bc1pmk5dnugtz00a8hsp44mn0thjsm4elhlw8hpq4ne0vffzwlels2kq9a7sl6", - "bc1p000xkea7hpe44jpzgtf9h8l54dyadwgtj6n5zvn43kar93ahsp0s9gqcdw", - "bc1pku200yql0zhy932s9p0hcrysj7wakw79l2j0lst7lxnu3rkt0jwsnkdgv4", - "bc1pq6wk0fhqh4lg2dckm0gxh7fl90nxjuzgdwmj6rtgksa73pytejkq63y2v5", - "bc1p8gkmtetdwjydd7lep3p2uuuvkq78jwtl6lr0q2kr9wndxnpsktms3whgu3", - "bc1p96w4tnrxmvuuq9dq48kjqeagxa0r9pxsk9t2ddz0nap50xs790jspt4x0r", - "bc1p4zmd3fqkycuu0yszh24ctkw8lg6lyufw8697w43qt2xx22mzgxcqgu7wjf", - "bc1pnqc5zzjzm65ea8gw3sf26vfy02jzd98cyh25zc9n87nejjacllnsh9jk9k", - "bc1pzmek0787jdsz3uaf94y2qpt2esdqq0amqlsd6yffvjr4t769qgxsksnhh0", - "bc1pszcnu8qpyleapen9dkxfyujpkrrkrsulf782meksjqsmeewqz7csk5zx9g", - "bc1pnt8v2acupc3th0h7jjzpulpzdqxkj6q75x7ap6ggj528cdlf5rgqq9lpvu", - "bc1puzzg494aj6ph3rnl2y9sj0cxdewqrgt3gw2g96uq89nc87s0pa0qx7djkl", - "bc1pcqazx92mhae5g4awazf3ejjagalgr36zhx80cnsh0sk570qz6nlsmdkdt6", - "bc1pmrnfnez5fxscvtfz9r43s223fqgz23g6yk4lnmg44uyg0ql9gasq55z238", - "bc1pw0j28l6us2jgmmxavny9c4hmd43pntv25lurjqkws65nah0w3z2q9adc22", - "bc1p64cte9z059rlzy3whg6ttgppr8nreyjnl5ga37gmwm7zmjcq353sfe9hda", - "bc1pkkggl730qf33u6mj5pg9pqxulql36srzexd635znt47hzj4r8fyq45d869", - "bc1pnv2urvskz2ehta0a55esrsauwak2p97kpn5s5p8hucu55czryr4q4685yh", - "bc1pky6n0h0sn5lgqdzx2g58u6w543xlqlrswdcddrfsxd36cr3e98ysnlhpyd", - "bc1ptdteqejdq7mlw8qv5cwljm76uljg0gv646lfw4ak2gpufht9hfmqm3r0rc", - "bc1p95gezhmn44y50jqvu33aeyemgpahsdlgxnm4yqql02dyrmgpkg2s9m5amf", - "bc1px3gvxp9zrj7646d0py4t37p3r3lzfgdwl5djgedcjc29n05q2e3q94jzsy", - "bc1psfhn5sdm2f49e6n5n2mf4hc0yedrl9p4uy5cuffw867e9zqggu7qpzqmcz", - "bc1pdtd0yggnp44324eh8z3uwjdcmspycyxqcrav0pgm67cdqvk97yrq9fycqs", - "bc1pw5hmaqt825nu8uyfmnuyx92j9rcy9n9ezp6pnyv5mw2yw9f7yxzqzfvdus", - "bc1p5hyn68sxxl662yku05hknmt2ml8l87u7wuw2lvs6szgdasw98fyqtpqzv5", - "bc1pyadq3yuwr2ags92s8yd0dcaafdzlccx0vgss09pen2y2qgdh8gtsyddy74", - "bc1p3laxh88zz43m7dqdz4jxjuggyuwhp026afqew06ez6w0r87paraq7nhusv", - "bc1pas3m2pgg3sy6kn8drtugluh55acldzsqupwjawsxjtuzhuwjejpsdwmamq", - "bc1pmygd3y0e2jjk63vtkjt0cu92wj0039nxzvlnlvgpr9tezn4ylcmscr3nsk", - "bc1pjchn6xdqhcnv0l6zpzcmllhel0kntxcd3387xu99nxjdeglssc3q3j2yz9", - "bc1pu67n7jmxujp5tydy9zqrsfj22mssapvzkff4prj3w602mc3w2axqh76rcl", - "bc1pwg6yzl4y7psk3lqtxw6tyc2wu7f4xqv69v0l0etn7mda4wf0wulqels7cq", - "bc1p5hkmrvkjn6rc06cwx3hhzp6u7qkpp3u7lu0u83r9haaaad7976qqx8yp0l", - "bc1pqml2e0hwfqff9snzuell6g2f78hg96lckxmkshrr4wvccshvfzhqwzmrkd", - "bc1pzec0cjexcj46s0gy6jy3rnf5hagflgcc7mqkjn5sx7xrvxdj8vyqwpjgjh", - "bc1pzc00dz6am4l6tn2lzc4kf3xmun7g63nm9dgaa3er6lqha6vq7mfsfsrqnj", - "bc1pr3946q02jfkytxm50ckxl9nudlfmvtgust834hh78tvh6gjcpcdqj6z20a", - "bc1ps8dnkudljyv80h273t5hn4wjqqehry4p34edrt2kvst7084lve0sr2z705", - "bc1p3w6kc48k5ls8727gmukr6yt6zhs8fd0a87dlkf43xvh6x3ha7ccq5kakth", - "bc1pxv66k7d62jhnggvu2nfmxt38msnatuxxhj3r568z6k54q39rzlwqasx8zh", - "bc1pv0mxvl307nac406sl3arqjyfj8nq5yrjytd6c06k53wc9q4ww2vsnsrddg", - "bc1pfq5sfw295f3sevzmw8ygfazudea7hr9mjr3r9kmd05jw3tpx8jgs5999va", - "bc1pneegf6vwfnp3335gsqe4lzmz3zx8nn4js4sgped2lhalpdte2vqsvs6tyq", - "bc1pe9t2fly34mk85wwvyplhqtr4t822ylckyhywjg57skxc6vcw3r5qczu8et", - "bc1pqsmmd3r7744wz3prehuqm4qq29k5ca2qd9xwzdvalycl3f048waqde2q95", - "bc1pr40xzexumhejkuquudx3e9xkl8kg6ka3jug6lkh4uxe7ma5s66ssk37f0l", - "bc1pj0yshvk5vapzj3t8cfwkt5cpxk8t9ua582ewptjjajfzlg6w68qq0l8vyk", - "bc1pj8z376v5ymj07d8ck5xtj7cye4jhg7j45a8mcnvh5yeh9hamzlrqcwjjm9", - "bc1p0pfnlmq2j2rqnlp47z95lvycz9me358u7pxzpgex8jzl0k3r7uyq870x4h", - "bc1pcm8h0p9qd3vahyxtet20h7yqmscsks865ajfr272fputdeycpm0qk7jaxd", - "bc1p8nlqryaa2h8987pgu6tt3um424aqkd7w5623vzk70qg79sw9yh9shdss6d", - "bc1pskj94vv5w9zt4z5fg0tr45vfmun8jr34f4yhjyjcqlv3llduzupqxxty3r", - "bc1pqhmvfgvrccsdesqjdvsfstn2zey0lvn7vqcyaykyh97y50cr3jxqmhxdzn", - "bc1pdy7hh58ah867h8dfchgx2vuupjvzzt0755vkn23ppnfjkfjh2nnqgg34ek", - "bc1pmcaezyjaq68ftsf322eh5dkeh55kyrknf7rnyzstf0jrsu47x6csdpn3p0", - "bc1pxxzj7a3ydgzu0ntmhu6psk685n23n224v23e8mtnkqd0zyd4xxas3rc6cs", - "bc1pcqrsut6ak02u7sk3g0gkds2fpvz84znpmy6pljcl8j8vms0wqsxsj7254g", - "bc1psw608kmrqal8yk9dskc48ud9txeum6n4rx0sdw86vythyz6t3neqh8emjx", - "bc1pry8nluqc036cey8mv6sg3eehsh9t9e3pnc9jatavw8f0ttrw8dysg64fv6", - "bc1pet3zg9nvuphxl6c7cdu3822t258a5yxll0fskayuyhvhx5huxlfs2ewvru", - "bc1prkj38e8kteav0fxnjwh2zp2wljxef2uadj25qux5wfckms5fyh6qwguqvk", - "bc1pz0ymzhcdddp80prgq5gmkjm3nsakvxan9ksdcjq009fzup0zy36qzz378a", - "bc1pp5s6xvkedv4jetmw4zq28agj9x7zuwpgz6awyamtdnqt862azdgq3jrz8w", - "bc1pcrefr5l2pm699tppgfy7lpmddxh6x4k7d6xmcf39qkswtj9mne3svgsw9e", - "bc1pdkazc6v2f8qp0r575zf92p7xxj44ld4npmq49gvqukrzgppm7vms4t7h8f", - "bc1ppf8lcd2ec566cdqhc05rmfjgf7h2xxuhnad42gg92lvj9ydjf8lq740ymu", - "bc1pffj4qfkccpwxtjezfcp87p39a779mdpfzcxer2u3ald6xf9wc07s66n083", - "bc1p6q90vh5fnzazar9v9j7hvqwc2azjyje5r2dnuaralyhpfcn4khvqkmu4ey", - "bc1pcu5sapkfkvhky95juzqvh3d3qs3wjfadf7te3pcfej4x7p0q3qwq66zpjr", - "bc1pfy5446anx33836rp9vttlkqu458menq8hqtzmu438hz456tj92rsx762r4", - "bc1pavvena630nl4x03yt98236q59gm9v92fkfvmshmk0s2xgwevajqs8gjju8", - "bc1p6llx6006cztcr2pk0v4m6tvjl788lhs2n3exu9tct3ty0u6gu05quzjgz2", - "bc1pr7pvqd3763esvs5uv7gczfuky383hu6e5jxqx4fugt0sqrrslw2s4rywzn", - "bc1p8zd5klgevqphzzhm2ug33zha6rh8exkzpzlgte3yypvrqgas0edsre2f4a", - "bc1ppkvxvw34g9gpkeh4tm7ndhp8ga5j3slzn066pwr9hc34ugswdefsjfahr0", - "bc1plydhlg0z68d6zelrnc5ljjkffxnwkktqn4e37u2r32h9p93mcazsdzqzld", - "bc1pmhq77n836jphl4ktslapkg2scwyfhgeyk4pm4fejxvjj526mm5sq8tuv6a", - "bc1pu7apcjeedwzd8faqfl8k6s3tzhzr0cs5m7uj5kt30wk29ezwr8vskf5nzh", - "bc1pskplnjcmp6cldvmhhec626j6lf5cs6ahfh64uftp3exhkxy3xnwq578727", - "bc1p23ndm3qg8te663xvwq22s7gp33e3xcg7nahdfgf6jj3cf97vxz6qx8y7ll", - "bc1pv6s2adeu3y655v8nqwca9vdmkkrz5y53dftv6qydekzs8tj3s6tq4a0ja3", - "bc1pzl6f4c52wn2dhyqayqfpzkw7zxtvwrhf234xtfq3fx986f6tda2srfewf0", - "bc1pnmanfpv58403v9pyvnxjlwdtkphnevve25qd3us9jt4c3lx4tkrsx6er5w", - "bc1pd2xsq25lug6mc62pss265xn355x5hqeen2j8c2z0te4vnpm3euzs98ft3l", - "bc1phzff0ys7t98haxyhwg27tglcjqgxkcs0r7l4chxkxvlrp3vet2uqq9f6yd", - "bc1pzkzctcvcnz7z9gl8qqpmw6gvhthcsagvx2h56faacp5vyqn05txsg99gdh", - "bc1pezyk9tsc5jljhgke25fu0jfamd8f3we39vszkcsgwlezqz9qsrss5uy5lg", - "bc1phxtmz65u4fdyz50s5jvdzw3c8hqyq922a5vre92hl97v9whyk68qgxuzc0", - "bc1pju3gsm8v9a89p0hlj5e0l46u7fzaaxmgqfy4ra3cs38yf6nq3xashqcll6", - "bc1plzkad75dahrmcpap0cequesdt4t5wy992jy7repkp0fcpyqzee0samzpy9", - "bc1p575cmh84602meq4f7tnhwd42q6kscn75t772ygz02a675wnzgg9s34ejq7", - "bc1p09x63tmdg5rm9rmt8xw3lzql26q8jvgyfa4tv2fnzq8lyy3wd2sst3gzkl", - "bc1phrptdyqsgvhwyrqzqt0p6427hgwe66uyg5arxjqvmu4ux6duunjqrwvhvm", - "bc1peul5saw957024q2547x26se0lryqzqtuw7lqjeqkr79mhdkprzeqgj0uw9", - "bc1pd5wv2dwnkrv8yfncgdgr3utxgsqlreu2kd9j7rpry3dz988km7ysrzzc7n", - "bc1pkh0r86aq25sqdr92ejqqm3r7ekvnpmm5p3l6tpzpk26fyu8fvekqn0h5tm", - "bc1pcqmau2qwvlx4u9875u80e24ta84y5m7a6y782nlpppxq89h20kmsn3wglz", - "bc1p2x7cm0uzzdjads0sn3d527f0mwkqss26dj3dvxpv8ltunzlkgzasdl7n90", - "bc1pp0eq7xfj3y43ee0rwwexhjj0w8uv3vf3wy0kj666q8r49u5utz2sl33prx", - "bc1p90myh8p4tk50pp8eqtuzcdq6ga7t5uxf90hpaetwup3qpd3hw2msyegyw4", - "bc1p8trk77wz08yuxmfk65gq6xm3zf9p4dkde7lr6un7v3glxepyterq06lefr", - "bc1pfd4wzqerxkcd5eg3mljx0csanzv76egd0fmf6vt98wwft6s6pzgqdq43l0", - "bc1pnynengy3vdt9aj5g89algsk3j33jv0d3ah5fayxkdumyllqh2rcqrj3mk5", - "bc1pkpacyymuz3gyw7893tpfh4lq4h2cwucurz43mdedgyj09zwcjhgq4m2c78", - "bc1p5j7x7cp7j3s3ra2t2klqhalw3luv5k95nk84m7t6gzxsm907kcvsjp3g5h", - "bc1pggsta9862s0w7jxvutvpweceu5438syc6x27gy3nqtzz7ansm0lq883pr2", - "bc1p0hgpq2ncxp72dz2y7k6ke25lfy70rfsnn4xpazt8k62m7q48exesdwfzx9", - "bc1paq7lw7y3ky4hxscwshtqhyt564c8nkrvx94huv8vc6lc4u6eecfqxu47wj", - "bc1pfvdvcvzjdcczh4dzcxwdf5le29s4z5lewlrps83zjvfxm2n2g5gsmj8hmd", - "bc1pksn76xp5pj70mlzxa3wsetrddvxv2fxcprlysg83ayevvkh3l82spcgmly", - "bc1pelxprdh62vpfuzh5q2a466gupfldrja7tqnfme78c9kak4jvw38qznkxgc", - "bc1pw48wu6cf4cuhau8k26jn58p4g4z9qtutmplk4djy83cqp6mgatasttjp7g", - "bc1pxfwf597h900kth5tdnd7k0yqdqm9jtz4kjj9ln882cddzlpu6essgug2ys", - "bc1pc8z3d7h6qv2te58h8n5gnkntaflfmz06ye0rqxnh73qgmvu4z8aqqpuzn9", - "bc1pgaujssxm54pv8y7tww6s6r4rdhe7wmp8hnvwe20mw3swl58rrq4ss4xjgn", - "bc1pe6fxh097t2dpuu3gjcpy3c2rydu8l2nnqnrqq0jjjcem64lzguqqvlv3ca", - "bc1pfnsea6zauk2wf0zmz6krmyhhky4vmt3enh39f9sga3kkrg4uwzrsvnd7ts", - "bc1p6ta7wze4dqhv52a67260ygyplqq4p9up68lecwnp63a46lvvgvyq4wua0z", - "bc1pqjm8hlpw2g8rpmrcgucmkv8uzyfhdg7900x2jxrdz7w5j9x2kyksh6cx2e", - "bc1pcl9ptuyfvx7zmm9vv92uc0r86hdug7jgyszgur7rw57wav6kfyvs9wl309", - "bc1p47lmltckulduu3rmmmrx3ukqs0jjhs3cehsm40zenzxstknc0ans8vgl4h", - "bc1pj3mk70ulmypspfd3zx3dugpzxxnhzc8c4qyjg0p0mqhx9fsn245qpymdy8", - "bc1pjgdcmmmw8nzzuuxsydpr4we5e5c56scuqqpz5adhch3tykjsdt8s797lry", - "bc1pf92wgmnu7lfyuvaxpd7fwzcumxtdz29kl9h2gftrrs5vlp8ux8wsej2jyz", - "bc1p3cn63wt3setp5jsj46k5mgmkp4lt6wga50zzvxx7y8e9366s0c8skwqfeq", - "bc1pqxcwk8ppvzpffafr54ck0eekppn7ltjdh3gdahky0nlhg6jkd9essa8rmm", - "bc1p260hnfe7nayveh6jh00tka6hnyfndkjsx689u3mtf5kweqjys3msjyczu5", - "bc1prpta4u38h3nsp4hvtrlhzvcuja8m47mdyqky264m43ssfyeduwzq99v66j", - "bc1pace550yd7z4rtqmkdzks5snk0ahwu7qt0a8d70a8shht9hpevsxsjz3auk", - "bc1pdcv7qmd7va2cwnp5srtyw9nc740a60nuf88ns5senh0yaxrh3taq5zpp70", - "bc1pz0gewgdxp6sqenngyrakaaraxjayft5z7j34y8keqqkym9wvhdpqq4wjn3", - "bc1pergpql0czq7e3p9amgpm585nnhx5uq9djecawg0vgtwn84hk2e8q9ku305", - "bc1p96ujyfc5wrllk9pvdme0w4xxy7exnn8h8n5mnenctejwsu8sfg2sswldsq", - "bc1pwq3yp55349unygh4pwrzf3n8klphjlppgt2dwulmw44n3men525s9h5d5f", - "bc1pdmnzuc2frz50h22ctlm8azgsjpwlum0u35nh7q6dcgmq2hza9y4sxvd4aj", - "bc1pv76dpammh86wtde84cmxtn3h8eenlqv6eeu7js207hsu24jenkqqmxq4d7", - "bc1p7m28t4qcghy4dk7yflfg74luxgh4n0lkk7qc3prf9put26yt9xcqzaw7r8", - "bc1pwl5wlyml8kmk8vj9arfhdjvy9hk6d24f747qq37dz48ksnakaanst55yt2", - "bc1ps305600cweq5ccxpwetcl66y4thwvg4sn0n5luzh524d9vl2nrqqwl2ups", - "bc1pfa0jyrkxc4t69vv43sjee78l9fudlypmplmdu37e6edn53fc9f9spvy93z", - "bc1phzcmrds6ev6s7ucl7pgd89zkgp4qn7vvargjqla99cx20jplds7qdkauwl", - "bc1p8nxa0ehl7ft72evpf7f0aj83w7khqwx797d2hm4mh0l958wfcz2s3cdzgu", - "bc1pyptlrh8x2qgpnlkchgmnn42p6dpyuh4wnm0psj9zp8k0spf36lhqpzsu4m", - "bc1p70l5fv83rkcgrqzf63hx307utk54ytw6wat5xye5zlr60ehf33usc4yz35", - "bc1ph2xydj9l9qmmfkvdtt3zhe5k78g7x723t30ujkfcywu2zwxmvxlsshe3x7", - "bc1pwd2v90l7v870kczmx7mpv5kfsx63h02cn87qg098ka3j4g8fsjhsl0gfye", - "bc1plm5hyad5l2mmulswa5lzxf5w7pmkur6ckh06q7p8pcj9et0caavqp8xsfq", - "bc1pc2rhfhnv7566e6kxnp4yeaug8vs2el3g2wzctwu7eva9ngdse7cqfrjlly", - "bc1pgwxqnvyg9mxd2e7dsy3tu2zxxssz5gc0n0wzcql7r34r8czj48vsv5a5xt", - "bc1pye09zjz4v7ajk0ukwud35pgk5z6ahzsj7wuc9h0d3vv59s4vyp0q9heyhe", - "bc1pl52xl9rlvquz7te2fuj5eygmngzna20qrl8ahmnfsezqxy6nywyq89dj8g", - "bc1pp0yqc9fpg7u92srrxwmz5zrfzt05d7lk6ez6jc4l7y5thks8tq9ssc5729", - "bc1ph8le8engcnmwsxdrtelkxlr3hmq3gnnrwphn0fk8a58hnv44ufkqm5a9hk", - "bc1pzfjqm009ruv06mc7tgpr27gfh92nddqtw3fsrn8rtx5eerg304xsvkhn4g", - "bc1pjla2aykq570epsg3xhctk9g8cwjg5sj8zmndw3e22tpuagud79lsk99hqm", - "bc1pzndtnpzhupza6n6y8ap3etq6cdd73dp3yrxrwj97eupcth9rtn8q9vnkcn", - "bc1p5nqx6u5a62hcryw76q7ah4tjfvr08mc3gh50yqhs36rqg02w04hqdtve7u", - "bc1plrlqug049luvuv58vd36uc7zp2khdm0ufnr0ssvula67xhlqeveqzvkx82", - "bc1p6atz9nv87uymd5l5kg4rm0npdsc98gqvtj99wx9cscyugwuyn85qlwzppj", - "bc1pcr05p7efxeqr3u3efcw7qynq6vghqd70tn4d2gcuewpq2c7zy6esl6wfjs", - "bc1p9qsr20dl9kh6lkgs8ucqyjkfjr3nwmnxgqntr8l6vyex2lcwmpns7a6ra2", - "bc1pz843qcq00edw8wlrh2v6ef7zt82qquk0l85dan4y5cs7jx7fennsgmf939", - "bc1pqdsnqz4qjzs7ekdm0y3qgs8us8hxl749748a5svh553qnd4rvelqpmew63", - "bc1pjklqkgeuj36ue3z9nnxzz5sgzfl2cd7jks4dfqgfs7juzxgj449sls7v3g", - "bc1ptutttxrrfup8p9z0rc4gx4h40mmhudnaf495g4jzh477nvp0j24sxp8e54", - "bc1pfhrhagltewad6lutm2v6tjllx4fnkh0hf29xam8hxf0mezg9suzqsw83ht", - "bc1pmt4h74sfkpqadz35hrtyfhfctftz70nnf8gzxd40pkern2shesgqvv0tc5", - "bc1pnccjyrcsp8466u5n8qtmc8f45hlqx7xg2qr6p78ptvf7gguh45vq8qu8y0", - "bc1pe955faprm803fr9zfqg8hwqcdsd9hpv70gjufctq0kvaqkkhngysv4yn52", - "bc1pklshlfu99wgdujxccta6ezwn990pq20wmqw2que40zrykfju9qgshzdeg8", - "bc1p3g96uhl724c4hhx34pn4wgghxzufkrsch5mka8jvhc6l3vwqhqtq4f4w89", - "bc1pf42ct8rgnwmzut3ev57ntn23nymw0d0upvx33a0xw7xry6v8ac2seawhp9", - "bc1pa8rp0rkalxkqrppts0wxj4dwwr435qxsz6q0vup9f8ahle0prd2sx4aphz", - "bc1pz33r2qprlvdlljwylxymt9skcuuefyktdyrhhg4hz67e85fxxpvsjmnckr", - "bc1p38m7rufpy8uapnqan7ey8gdu3y3ja7pq2zwz8ef0kxre7u8l5xuqh27963", - "bc1pw0796kwkhpt3pnv45qzurcytee8vy00x3szmtndwnp2ms68qfrsqhynfl2", - "bc1phw0fuqfytqutqpdvcpxs0exugpe2nvka25q5hplalux5muxhugjs5x36g2", - "bc1pes870240wr00u8mjv6lm8z67yydmh548qmr668f2z6y0hmglyaxsv92x4a", - "bc1p9vwl47y77amjtk8ry9hfgkmzs644jy920au6pv2tslrqvyh5eucqslanpq", - "bc1p2mrvp865xh6x3gdv8wczx7g2klxktqr4s7pjpxswqayvgz5ecxyqjcxtuk", - "bc1pp5q77sx0j3jzpdgdqaqvpmnjsp724jhfynce5jxtm6cuemdu54zq6z7399", - "bc1pcvdv24jk4yr6u2ghh7w9nlqrezxne7p5f3uk2ec6mveeszrzudhqdpx8np", - "bc1p0fuwm0wygfum6htqdw8vhuxrzgkae9hretxfltjcxe70t03nu02sdsyx0d", - "bc1pjwe86h2nkv598mswyzdkj0ghaf4wehedf5mp3p2yy3pw47n6qy3smt4w6p", - "bc1peh99jzfw6jxmwqqj2zccr6xw47ng06regdm9h5x89jez04l7r6wqaw7shc", - "bc1pu4t3ra34arwxr39gp9dctzxr8kvl99rnmtlv65z90c3k4rmy0xhs86dy3t", - "bc1pem5zam8ht04tgs0vc0g3mwwykdu94ymusttw5tzztgt9s9p5g60quvcmav", - "bc1p9h89t6dll0k2ax9w3dep3t8dwq3h2zdde5fgppppkxw330gxmums5c2ge4", - "bc1pwyyfrj0hrdgzwasrc8ldjf5ls397puwcv5edrdudqzhf7tctvkdsdlcz3f", - "bc1pkks2ey77kyvjtapj3v2q0nqnpyfvq228jqnl99t6nwgwpwfmygeqjamyut", - "bc1pfz666jmt8007hrd33g3u720tjcr29aw3ewxe454s9k30scm5mhcsgw4epj", - "bc1pg9qlg960zqge6qppq6mq0ygyuxw9znz28ezmrlhay0rvs953jx2svtv94w", - "bc1p80pcpcwxj5xn6vr82a6nqf6st8852uv4effdkj2gx42kck8ma7mst07t4v", - "bc1pe4pak9ly2gal94mc4hnksu3lks9jtwdaz4wyduzfk68alxats33qtte250", - "bc1pn4p9k2yp89kgdl4cpf6uk6cajmuyavt2qkuuga4nthcajk7w5vcssmzehj", - "bc1pesdr9jvn3szytta2ka6ay7qsplft97jy29ccyfqq6hn3re6g6trqpepmxk", - "bc1pvk056mhkh8u7x7ma7ac7zr8y2x8v03jdrwpkyfmlegyymmz6vgrqwal3j8", - "bc1pxv6awl5z4cw70duczwsyzr8kxdpx75tygqs6g908h9436q6e6wjqtfdm5l", - "bc1pf6c2mmzpsnrp8w9m2jg5aek2k7ays9y7w28lqyd53zhxqfp0j8xsyl7q2p", - "bc1p42h42cmw9z7wapxvwkunef640gslu2k0483hu4yzpgfxy94f8wdqy7xuxz", - "bc1prq75auknjhe25w28ljrvagx2yfv5km7eduwmfwydc97a6fa2tpdqztsphr", - "bc1pzfrc7lar697l773qwh2qzde8mnq8xqg8etrd77k380jhwqae2yjs3ww9ch", - "bc1peweh5ah6zz9fgu24psfgrfa20dvjnwpf55augpfpfwda6kdcrj5qnxn09z", - "bc1p2pnnjhskeec5lx7mvl2qz0kghvvj4dx9rt4gdh85wdn8h79qnnjqscz6zn", - "bc1p6c3l6ysvjfkqe55ykv48utgcnskntxez55pud49t3ewgtrmlyyrq7adwjm", - "bc1pk32vd7rmymj335qpqgd3fwclp2mymu8phka43xze2xdyl2yry8uqe6fzgm", - "bc1pjmjd3a69y4jqqztcawp4sdh37gh6sw8ey7mff4ekwjv4m7s0lrwqf2hwzk", - "bc1pgx34dxpg4wkl8msa3qdtz3vpazzdwjtwe5kcd48g3l78y07jq3gqajzs2s", - "bc1pxqcr6n6xtqy96868e0uc86w6rceltvka35humrg9v73clyvq8vkqhduelu", - "bc1pqw289jkuqp3yt8rffmdlrcxaq3m8g86mqwls66m3euc0fgre4m8q4j60nu", - "bc1ptjuy3f7mcgwvlxlps2k38u9mzqzm6cqdt2q0p7rdgapw7fq4hkmqm5t0vy", - "bc1pra3nmzrp832tu4eyrpnv2qt6h3c7mskr8jya7u02sydpes8mmm6szcytxq", - "bc1pmuy2e6gve20dnyyezqykn4jentu42kssq5p9wr24h6u5jd6e0crqwhs2xc", - "bc1pfryvvrur4hm2jl5m5kyel4r5e8gcgakavwhseukydnyx340vmcxsq9wacn", - "bc1pu0srzwzd4qse60wl370sl3y0jl0v0j0g8fe32j690zwwws7q280s0yuzp8", - "bc1pq8gc70jy47lsmxyg5fqasv4zcamumywegt2lysluhjrpjl6p39usq9lqyv", - "bc1pjpxplh52efchkduregt08pkm03psqj2pxphwqzx4wqa9wkr37fhs3um2pv", - "bc1ptzjwzxvw36ghlmcjj7z36njfnrr9mf95gaananvkqjjqz6t7gvnqr5axng", - "bc1phvy3fnn5c9h8t25k4kh4hvr938r4ddn9u4hsgu2l6h5waq8m59sqjz3m9y", - "bc1pptqgu802vguaftmu33yf7709cnx43sqamlp600g0y9ms9465su0s00gw5g", - "bc1py3mszqgqmmt4gfhddmkp9gfjdyr5mvale069wrcy4rfhs7c2h4yqqveksn", - "bc1pkwztp9vmm4nx7uum4r3u8kwt83s2mnkx0z9pdqvsrgm774q72rjqyhx3kp", - "bc1puv40z32wdqemw2jqx3qrnqm6jy66drff80z8pgpt6ktndwzyz0mqfs6qms", - "bc1p8z502u5gn3pzav75yqqaepapd0at9ujx2te430zuxuqevwvvxn5q2ktl6n", - "bc1pytlnmvt7cz04jd3jgetwuz9hxk8qqugsy4pvhjkqr60l49n20yasgmuwy2", - "bc1pmjw8mmltt7trqdmhfyh3hcx7q564xhct6mfd4z2v9sjdvxw7a22q9uxed6", - "bc1pyaf864zafe05qc0qt35glj6puthw3v9q04mftphhe0sfge2mef6schlfzy", - "bc1pcc4nwdmwgg2lzvmc4ugz27lhy4g3wkpmcdwt0kkds9sedxl389pqep9zuv", - "bc1psha2dtplr0v6wtq4k75q657wypyuzhhghe0q5rgsx7gvkz5t8mjqmu8gmm", - "bc1petya5tsdka529wvtcjztm8y9msh36zmn3rtkdlpfm8twl6sy2v0sqpfa3d", - "bc1p3gzupn56fx9j2tn0hfyqaq77pw2nrsfckynawcnyhq0mae48r6pq5ccewn", - "bc1pd3jmt2kr0gx2xyhawehc5v87ycuxyhweteuj7ctywd3thmrmt62qeytk72", - "bc1ptf6396p5n7nsy89j5uh2j2jpstnzpyztzftjl76mche47wlj2wwqel2hen", - "bc1pl9t8ys9eaw728xxhc8m0zc9kfyc6h9d5r4qvt2qg3qj6wz49s7nqfgc4jl", - "bc1pgf9xuuvyjsl0wdxgujfdawt2xdvy8jq55vkm9why20830uu4d2wq8t353c", - "bc1pxtwe7zc65xxw80x2pnxaxh82js4t0cn0wc4l97cnl69qd0hzjknsusk46u", - "bc1pn6pz4trjqn2m4ekzlhnejtevj9yfa4nada22m8je60le8y9d82jq56l2vr", - "bc1pvxa2r96z5pa50twqdr96uwy745vaygc8aahwzznux6nx4meyzz0s5qwk5l", - "bc1p2kkcan8ksfgsn7na5dgycde3pw9nk67acx7v30gt2tvmxysvzd5q4u49dr", - "bc1pydgzytmvx28gv94q47dq8zmtaqzmhlkql8y2mqa8jc8vd29g4luq7e96sg", - "bc1pk0fuk6s4mc8kzl98w9yrnysswy5n2mf30wjt9nv82qsqymth24jqrp3pvq", - "bc1p7y5ku04zgcfc8e02s5nsgjlhp7cm6cwu5csd3sajcs5627ple3nsp2pq4v", - "bc1pfglduutlx9t48pafq6mlm3h9sphfgpqepk7dy8zm9fy47yax6cpqy6x9mh", - "bc1p7xak5k0nf3lawv6mp2kxjgeyazpatqzeepn874gp80cry3fxck9s707jtu", - "bc1p48kjmzfx4pcuwetzkkgav48e5vz7r8psw4famj6utfl858q9ngfs0fv5ns", - "bc1pxhyy06xw73t47lf83d5n60tx5htysejwwhzrma2wga9ht7ey4uss2qrktp", - "bc1p9rd6gcfqs2qf43l0zgfz3nq82rlfhfmgex6h4jltzc0w4xqc5jpsjzr78x", - "bc1pu27khs3gklg2fqdkwpf32pmaue5md4njcwav5xe98f35pqrtvetsyqyg5u", - "bc1p02w06zf6cj8d3nljcnyenr63yejemsegkht9mwq662pl0ge5304sj26zkd", - "bc1pc6amg6tht4k4yjqcteyq6vcnc04g0wmf7l3j4udwmxv7k2wkt30qmn4w53", - "bc1pwvu9aga40j4geu4qzv92w82akj8eugwzrz06wq9gz9dcq3ewgp3q4vlhze", - "bc1py0cm2magqkzjfsaufnkdjrwdqxqezez3j0gfdkfra6wpv4nq3w5sv8qghs", - "bc1p3n253zkpdg33zg8u6q98nrvq5382a6aym4s5m8kuzcmyqy3u59cqkvx7xt", - "bc1patj50qgx5036zaw8733k8esfdwdcp0wha59e4evjkd9jhg8wwwtsdve6pg", - "bc1pqu006lspq00cqp33trmcpgynrhnt7rhaat5dg8gwj8plny9pnyhq2dapsn", - "bc1pz5k5xgufac8ucar9j4wv43ex2sxmmtftthmysezvjw4sfl5wze8qjkeght", - "bc1pknceqxa6hnz9t2wqa5nwsw8l6pykzgvdfesus4383flvpjec7jjqejgcsj", - "bc1p3h4raekh7e0w76kll9qcslh4ejc7pcfw7d6x3rq2vwhz586r3fqshgu8lh", - "bc1ppsah42380fz2k0wceec9adwe3arh3xg4aqh7qshjq8pqs86f53eql3s420", - "bc1pl7684gykqy6dvnzued658vngj8h3x97nwgvqr3lfwxmzyvvm9vsqc57yez", - "bc1pe6dh9v59ltemw837lhl5er0q6uqp0dr898kmzahktgszzwcwwydqqwtgu3", - "bc1pkukn02nuwylrh0wwhtqskxw39skltpcv9ezfe2yn3uu4epztu29sa8f45p", - "bc1pqjd3kdh2c3vtrc3n8uc8ztw72gngqu68xx6y76msrpaslc3s39ks9trj0u", - "bc1pzaymzprvyfdk76l294367zdjcjf7ywhs2vzxsmhnxx5k59a9pjqshvrkvu", - "bc1p7ctfw5csgwq64rqcqk7x6qk792emssn8jw58ztdts7weheg93ekqlpk4rm", - "bc1p9ndxeyxx9jgvlxfysr9plckujm68v4ewaqang32jx2e6pvvatv3q4wsc7e", - "bc1pm7acxx0trvvvyah6dac286ajsmq0tp4wr6mtyvyqp8shtxy4mfqq8tm87h", - "bc1prwufl9kncccy23gx0tdqzw007g7zcvlulh5047rddffl2jn52k6qmhygm3", - "bc1ppyj08ut9r8lve43nx97rngfxuxf523hr2nzy8mt3qh5a6qkx0yrqhn8wh2", - "bc1pw6wen4mqclrk6vtuezk3me83qk7f23g47km0udn6mfq4qwzes0ts9x6m2y", - "bc1pnugfrt4jjtff5y4qrnztg07wpnywyrf3h362zu0cxv6vwhq8uusssmgxcn", - "bc1p6stqmjqqmnj5wry9ehxee0r7s8mkshxuahuqfrjz4ju4g30exv3s2jwvan", - "bc1pu864yj65uwg8ttvpruesusdw35lsdh8u5xy0znmk4mjddw39n5dqhjl2n9", - "bc1pwngvjkrn54ly8yrh4t7ujtlrv6p4ml8hrv4ptnq3s2xuxrwtjh2sjvhh64", - "bc1p6kztjg57623nw8n24nvecddy7jc542alpvtk652n07f2lwydxe6q00a52h", - "bc1p2908je0tzve54dunuzrj2evmaa0yqzprxjgc8cah647xaz5zpdrsydvh9k", - "bc1pxs5yrs3eltcel7hgms0senwyzpuaqjv4trmc4c23dnk54z40jfss4s3vag", - "bc1pp5hd0f6ef7e27jzfyul3x026klk6ryvt6uzyyjvddr5m0e3fs4wqsx2kyj", - "bc1p0xzs8jwwfdlz3jns82r9h70zreupkk7zxzhr8mhun3qs0egtemjq338lqy", - "bc1pyugzu0evdty7q285c9ufj3ccvgq0vuzt52nyugttv6rdx6ftgqjq2npqv7", - "bc1p7wg67mn7nq7vvfnrhsftwnxzcg7rquag7pl8q0nwtcdwcm3c6t6sgxmf2s", - "bc1ptup3zd25zljy7es68mywz47felu32jqv5kak4p0mw86tvwxt7z4qyxzl9j", - "bc1p3kklgygwndnvhhf7muqyzfr5m87hlmeugq3yf54kek26exwnat4qxw54vd", - "bc1pq99tz7pxpznk7c96excf4qujjd5cagyt4qqwl0rzwx7w8zxke85qug9wq9", - "bc1pt2627l943mc8n4y3lm2zfuf2artgfgtey47pxa8sleekdpm22cwshga96z", - "bc1p866c06mal4dy78ths09ka54vhf2quw9uj6jygthx6etgqxp7kseqa44yrr", - "bc1p764762ghg553kjn7tqvhq9n2jpyyht9w9y7s3zp9lm6xs5lu55nsf3mk7y", - "bc1p8u6nuafgk357elqeeze8x7esqkg0qnut5dp8ykcfyl7c5t4kr67s83zszh", - "bc1pl9zhx58hetvksla9rs9nmgev0yd606lfllp256fv94qh4h7tc6jqhpxrl7", - "bc1pj4h66snht29mhk5evxhag3msv87pg4mp083sa7q6tf8vq59daadqsawstc", - "bc1p045qnp7k0sltpykzr8y6frslu6twcr3jmxhgz27655myehm3utasrvumnf", - "bc1p27t2wuwzmf4ykx46g7pzfrd86pxaxqkzgzvyd6sgsa4unsjaszssz05shm", - "bc1plhyxn39298948p7xecazyy70q6nufkl6twp8rz37sv4qmpwrltxsk3kpzn", - "bc1pkr765vy7xwmsxvsge7jdjulk8hamvxdqy0vqah2l36knxhs6vhrsza9pu3", - "bc1pmq6cjfzpmrktrmrzu8787wcd4x6ee9lak9yat2746tsq28a9amuqa6sdss", - "bc1p2rk33d202z2pk3ah7kw7eklqswxft5n9vup9yhpexchmzn5wk8pqlpje5p", - "bc1psynd6qvuthnxn9qeze02stwzy8avc5h0lej2p3rkeejjvaw04agqs8hrth", - "bc1pycgattsus2dy4qa85rvvs3e3snnkadjzg24hnfah3yj6w2zpuacsks7yud", - "bc1p8rk5lp6nhx9kn3slzct92audsw0xt9gnywvccnj6x38k446spn2sus4kr8", - "bc1pvsjuq0w50jkzr4zhxwvng6jeylvs4dn8na96534wet8t0g0drw2sgmxcdm", - "bc1pymqaz92n3rsdwmn9429kfqyc2d03ghgduepsyueszlnlnc5xrw8sudw9kw", - "bc1pdjt06555dadst0y4xvurhvg40hxmamnff7tx60jnw9pd5hjvy3usqt0y97", - "bc1ppmansxxs3q352dgqadctkpqrezjut27waal55h87dewcqzjlfdrq8d223n", - "bc1px30t7ajy04zmg67ymjq9ausuauxznkp3gjer9rcy335uakf6p2wsy3wg3d", - "bc1pdnf4q4lcclw7tcvfy8qd586ksfdurzq93cl06mhj08wqnurh4utst6p6zl", - "bc1pwxgf8a4tasprqpzfzqce25x08l42s3h04n0gqwxgqkh9xz56ljaq03fg4d", - "bc1pshytv52rjy4dhj6zwjj7x57z9e0gg8tcqdhz3cuejn35fvcvrquqg3th3z", - "bc1p032g2rj48wns2zm3a3ldk64frkhawmmezply2dhu40vd6uyxnkvqqkc884", - "bc1pepptv3kh74v76tm8ar2zvlm5c9ypd000jrdd3qptc8qgcnwvr6xqf7w4xm", - "bc1pz2chfs9huygthhyw2h38an2zfj8cpfnskzcrgfczt6uu5gjeya3spusgd6", - "bc1p440fzq5lcj3xm2z6gcuam09yta9dn4c3gf94nt67js30excvkgqs5wpzgu", - "bc1pqkdp5r70td23kute84dwmsn5uugt5m3va0lxsslujrr7pxjuz8cqznl6ch", - "bc1pjf84casnd9fcaqasml9aewh5eee8p7kwzge3tvs59euypz5xgvzq32c78q", - "bc1pshsnh0944cueua0wfms3nn6jgv90cy4wx385qgnlffe7atyxe95snta40m", - "bc1pszqjj56j95vy0jvpjehvzkf7xa8a3rj5fyh0lzawxs8wee423xfqfflk96", - "bc1p6vdufhh5u3zh4njj5uvatxpraeg7k330fdufv0etjd7k6cay8p3s3s9v4t", - "bc1pf4ea5kqkkpj2zps68wyqeu9nhetpwe5u8gs9365ycfxgka6skvdskysssy", - "bc1pef59j59acjptjv26h7rtmnu8njpvewtfwggfa085xr69t3lju0xqv60wsx", - "bc1ph9jm6vegdr9fx038xwgcn2gd8xqvjac767t3dpappn5uav4x9v8sh7w5hv", - "bc1pwkulxea37faqg9dxsvxn98ftu9gq759hncrnmm5j2t9234vxteasepe3qk", - "bc1pnu4x84sfftvngjreygfwlts702z32zy3mm73hcjsh7we5pfnjqqquqehwf", - "bc1pdmrm9ldmlvluz8sv33mqfxzr3pj3ak2elzrr8vy8vj36pg797weqsgsstk", - "bc1p55t8yczfrnpsu76f6rduwws2edvasqh37wm22nkkyf6vc2thu2rqwk326c", - "bc1pu69lj6wx0257t7r9fh94gvtrf4vld5mddjvkavwdunx4zdjnt47skvuxf5", - "bc1pn8elw66uhjjfkhcxy3478nu8ayydmjwh73ukpc3vzxeyk35n3e3snhkr9l", - "bc1pyan4sq4dzmam3sny3p2dyhd8p7dswxf75q9lgwr4vrzu38lc8a0qwlyz6q", - "bc1ptx95t72qa9ss3859zae36vrnfs6cjlfaenuz6u4m5vcgh8vylqcqmu83h5", - "bc1pzk3gcp7lwfd0j9fcu3mw4uvm0n2ntxs57jrfhmnxulesxu2ve27qrrvvhc", - "bc1pppdjnv0gq084u2twrskv4068ugxt29cjwqxeuj9fj6gsqjhflsnqv8krfr", - "bc1pu62wftwghxur62twv4rfy30xtkr0e004mc4c97a0anl2huanyxfqls35e2", - "bc1pj69lx45meecwg4u54pe0eagd59m8p85h9wdsg983zj3aqefac7lqhjd6ep", - "bc1prjtv5q6mucwjn5g44lprymnldvg9jznu73fp86gkmtgm7y72t7ns0ar6dg", - "bc1prg3geyqmnfdrnl86gy8547lzgjjlvwq28f4w2tm43xmclgm4kk5qlt2cvg", - "bc1p00zfnc0takkfulasfhwsavlyj5kd5gq4ysrfn2sls0e93pp6c70s7rc7l0", - "bc1plewwvec09wuhy928rtam6gczpshhtl94j6sv4vaqsn6y5ztgm0gs5ysndc", - "bc1p609zec26jv9djhnku9fjtsk6uevsxzewc2nv0z55xhcpc6vj7f3sk3afa4", - "bc1pywe73q2k45srrcx26nd2486frxpdz2cv2v5yllv3mumgd9rhp09s9l9372", - "bc1pyy3vn87vdxfelcka4t98n35vcvaar0g9npnduvfjy2gsm9fk3cjsyqz0hr", - "bc1pq805vca8yecx5a93x4amejup4lqqtng6f2f6j3w8jjjm7wjtxezqu9mu5x", - "bc1pnc4hamlf8r062qxdn4m58660h4xm59dzvqvr4354q943cw2p6xzssenyu0", - "bc1px659n20tm4xcdduczjcgs2ye56qnp5ald2xhst37wsucjs9wl5csq47rxt", - "bc1pfqteh4f3qeuhf28zsz8z8wksfkl7j0tt6ep7u7mahddpqpua36ls8cwyas", - "bc1prxt7t6eqezvv5ad36htejzg3ydxcfdszzaapddwpzsedvmrqtnfq74klux", - "bc1pa9na6z6cxpgxckg9apktcskz5tqwad2r2m2vs335gdvuxmf5yqrqmh0x2y", - "bc1p27l8unpa97l8zmg5cu0lgkytv7u4jnkhpt3yknc5kmwuvh7yfh2sws3u8a", - "bc1pkqldqttppc2dt9ap435qft2xuw5r0s0v7rql5twa0lyzfwh90y6qd02lxr", - "bc1pr07a5v5fvsk7jj9fz2cjtph96t98t9kzd08yx4lyrx8u8t8x7uksx2clsp", - "bc1pq9free4lwk66c5d67qlee6fdud0f92n3tz2m9thfxmuvup95fnhqdn5kkt", - "bc1pyzlkjlwvlesucmpztvf7e30d46a5pr5tdhz4mskm6hscq9l0ultqg2tpe2", - "bc1p9u7fv3xlv069ztfpjatdqavdk9mfyl9va6hhxsptxpg2stqng6uq5fctee", - "bc1p9fpzvqc6eul25vtkucdax8t3xggv5r2h48vs8lfdvvjkpp662jlscu742e", - "bc1pnms7xt3uds9tk4mma5v8yxt763wmrwfnvq0s0p6j24dphq0wkv8q295yjy", - "bc1pftgts26xdx5pgqzkx4qre0apszf3wr785aaq8w78q0vu2devn5zqfv5tsh", - "bc1p3xfg574cljfsvhw6s3z89mep62ap0lcxcw643sacnuuw0grvc7as4re8ne", - "bc1p39q8lz5h8a8mjayfmrxjg6n7luqhxav4dtd2tflna0es34tg69nqjvxpe9", - "bc1pqg5e368uzrtsxxun66uqq4mc6hlxy3ac2untt8cw5r0yzgu5lvzskqgsd2", - "bc1p38wul568flxqyzt9tj5erjmwgsdpvmxuk93nsvtjza9etm5382yqpytqqh", - "bc1pnrv6tsjwxqstz6utpawjufqqrd33dgzur9c0ggfz6quc685ue0hsep3xrw", - "bc1p7602q3vhwj2lzmr0q75kpu3nl6g9lpkxgrvmv4kwgvl6gh0yu2yqpp3qal", - "bc1pg68fm6wxcc5m756hgf2y3ghuse2k0afeax4dfhp7dksy242lkyqsmhuxsn", - "bc1p8lv87ztjt6j27hglmk429sgt2hue4dygk2au33hwetkrtr9qu80qpkcpqs", - "bc1prche96v58glzfccncqa7suemzjd5rxsaes4w4mspxnqqk76dxtrshe43yf", - "bc1pnnhzdxeqhknqlyml27zqx8a3dwuf90ekuhsvksg8zw5kjapq8ggqjetjhs", - "bc1pc5zvc42g2jdj727vk4hnrmhecdgta4e0wu7dsf0th80993u635uqln2w8n", - "bc1pmhat0qryatmgjt70qne3ku6kl2lrp5spm8lah9s9zamy956yledqqpraes", - "bc1pand5ueg3hwcudc2ycu8tmr05z6jk6p6sktajxgphpqjupk9agp0sajvw3q", - "bc1pxek6dak4tkq4uk73clhzx0dx78etvjhyh2n80hwm29kd5p99c35qgrg7sa", - "bc1pjvl2pze0j6x304gwduufprqkzx6wa5gaffz0zd9n4dnly8q0a33q206nja", - "bc1p6j3ajewqapy5gwd9h2c6mgxrqz876fu5x5hp6w6uy2cr0n7ltw2q5d36ll", - "bc1p5dsvdw57nppd8zytfeq5u4catwxj58dnf59juhhczcdrhjyp3c7qecqs55", - "bc1pnfg9w0slty43cemmsrumhcsfxcfy5hh94n62ehvdht9ww3slt5ms389ptr", - "bc1py8mvd2j3vqph5y28scxh0w57m30fdah8qwvttw7467k5wc3rhpmqhmaj8j", - "bc1pr9y2zn0ylt2mteq5lzsw8m4pfw97xhnw06gxj4a29xj8qekkp8wsca9269", - "bc1p7zg4jlnn4gfh9x3j64ezp52w5xk9ehzmtjsnk07qzvgc2kmg3aeqkltukp", - "bc1p47e9dt0cvt00l6g2qfwdfjqtwpsa5nju43a386nsa4j20qa8z92q3nf7yd", - "bc1phx64qxm2umllk93zsvjwn7r472esmawlwwlak3tk5375vnfndf6q7wy3rv", - "bc1pxnwfgk8kqcaq76tsk4qn3cr8ey4dfr9e7sj0a7zqs32j78fnv0hq5aj8cw", - "bc1p279lftul80cpdn8cmnqng9pglyc647nyamzrrdvl847tnyvyn79qw328rh", - "bc1ps5u284m59ay808nz067nw3eq6ma6y8yyjdkqgxzx5q0l0pk6f8rqm09epx", - "bc1pj36uzy379frz3537l20xl04d53u49d5f5q32lhagwvl0txmrn3esu0kvnp", - "bc1psxq05ut98hfss75v58quvdnaq0tzhrhccmr7uvx8m4wexu3kypmszmjfxy", - "bc1pp2xw65thhw0gcrk79vfju50myt3hw7slwmdep4h8h0ydyxm0dysqj3cuty", - "bc1prchuanu78s4x8mdl70q5x66pw6cckglerluqjqafsf56kqcn4fhsxdf6n8", - "bc1pkfex9y86lqwy65u2dwsclwu28xjnna24dr5kg5582thvnrw9wq2qjytfrv", - "bc1p537qm8a9ltqd2xlzw7reqp303ryxy8p3q8qgc4wns9n0squ0f49q8mqpz4", - "bc1pwkcmzvnvk5gnwena4s7040xy6rtkr4ye0catg5kmzmxultda8fssuqw8ss", - "bc1pa8wm2pn05nduwt57tna8w3lktus7qutmnlqgmxy83uey3pj9v0cshtw43h", - "bc1pess5hw8jpcxun2l32y9sz7t3xkwvzee0xd6wesw3hdk833eanxjse49t7w", - "bc1pyzqfv4xzj22yxx93j6z7sj0hvku5hcutkk3jg92l5f3lashjn4hsm7ht2k", - "bc1py6frf7qz0kdwptxnem83smshqqlzlujsm7kpp9qwwmfeswy42x4qgdq8jd", - "bc1pkhw3mzp99gusp5d6rjsm2z3uc0pfyk92naf09nxfdpk09d25qcrspcsvh7", - "bc1pd2g6lewh8d84t8kp8vqmfk98uxqe7y8tj8zuta3cn6ncz2ga79dq2yms6j", - "bc1p4ug75kd8za6y3hv3ju7cthka477wrrsd4scsyvhltc96wh2lxhlsfvnvmz", - "bc1pe3fsttw2dnsa7v84z03wwz2t6wag8ftlpdutylut4t5yyrjgamrqjjd7jy", - "bc1pjrlk3ffs7pegzececgcy7u8kd37qhrk3xmn5qry2k9e9vzsznlxqw9a2q0", - "bc1pmh0sdh4p2cyvz6xdr90v8kzmlje3rf520u6c56centnd5h0tjzrqkeacur", - "bc1p92d00e2gm0wk2g84p2lzcrevxnjngftymhsfyvr70m0u0dma2lls4gsndk", - "bc1pjy2fe8tu5yjsp2tl5xn46qafz5x9fm5d83854pn0und4lkctva4q9k2psc", - "bc1p0ts4jzffeyas65qxguvz5yp0vdklydas7jn697qpqs736cdgwe0qc3rvcw", - "bc1p7yrpd3k0tcjy7kkr3zmltw4y2g5t3l67yvwm6l64vnr598tthwsqsjt6gv", - "bc1py95knq06rhwyalcwrm2uw3reqjknagh02a48304q7nwppkhfjsnspuajny", - "bc1pgll4afs4jkqctrmsn09rauw6tlkq0dja353qvdca0zvxa0mhq0mquk3x8u", - "bc1p65vtmc3at9g4444f6fuptxcmxnddyz0jhrfs3l80dgx7tp2wuemsc5469h", - "bc1phkd4x9rxsnjve279u5w5vfyf5sqm7qmz276n3xgse26awjj9hj5qde7u78", - "bc1pw7eq7cepre58kgzgcy3td0pm3zeydpyy5fl7eqzvraa2kutxuqmqkhzqxy", - "bc1pp5604c3grvks445akswqs0jgnscc43jmxtjt3f8723v848lkv0esfvfcpv", - "bc1pra5v20pfwednz7kg9yg0tu0zr3lsfypx5644rs3lcpwgcaht7czs3m0euz", - "bc1pfssmvpfu534p3rxhzwfdmeh4unp9cqpu4ynjy45my2m0qj46gpsq0sefxg", - "bc1phtulj7rwsumndkhp7yfrvxafae9gj2tay06wcayxcjg04572sz9qn7vdkv", - "bc1pgf9hmp3js3zmef5q9lndrj0fdurfy4l09qyug9qj5fehls6n93esehahhg", - "bc1pxw3lfx2n0y85gyng03p0qwepngqvwph7m0aeppckwp4dsqk3fu2srwceta", - "bc1p9c367w80x05k5njphmz0z72wl32v79h7m2sl2ua909lkm0uvg3xq0ppajp", - "bc1pu6f3htlqa9dkad2u2tzsla8ral6enx8cw3wev8dv7zxwdkrlrv7qvyhvs4", - "bc1p4ulyw7mdma09auz0af2m7qq9k7q8shlvfp5jne8l8u9r39xtczgsc4a2s5", - "bc1pg9780t6h7aj4d6g7uxh2q4kcnmwg2sx80j663atcyqux9sqwcajsg0s8mm", - "bc1pq3wazhndh38vx44pexxu468w0wzkylgnuj26wfveq350ugl0uy8q9k2x46", - "bc1pmr9hcs2rusjnk3q4pxm93kx3aazhhncxf5gumnsx6fppwnjjjkdqkek9eh", - "bc1pxhaupsl82fpjsj2xfpfl4kmvyrzfr0l5er6htp0p94gvfxagmxjqft8eag", - "bc1pctjfuf7qpsfmtsawcfftgk2vm6k648d6gma0srsey62eyzp7eymsdllscm", - "bc1p6jpnl5xy7jypvmxux3tl92xz22ny0e9zxu4ypahse3mvv0f5jv5q97js6z", - "bc1pamhxl3ek5st8mhwdf44vvc0ghkk4fhdkv8ntly873g08ng63jg0qdpzjz2", - "bc1p73ptuq2ypk7vtjdequ8n6qfz3elgsjyhyxc9z032j8qw48gshrzs53x7wp", - "bc1p6ushc5zlx44l80whpeytxc7m8c2cxundcdfjcxx2pum6886neetsdnk5cx", - "bc1p0fdze7x975rhh9mymvpujnk7mt68dtme7tsdjlfmwv4y23fyk7ssu78kke", - "bc1p7gtyrwskr3rdapsvqgmu4dtnj8nrhnn04ym8j078020mdztsr6xs99z392", - "bc1pmh4el044r4ksukk02fjdwljkk0v9hkgcav8aasmacesqadchnvhst0zsww", - "bc1p9lr6sz3xhjes6rrzeprwcr8fjp635yky7phvpcgwlnpphmc7wmpqf9vzcq", - "bc1pjj35kxlghhvpgwv4dwjvkl5jzrl2fd2vkx2her0lp8ulkz7ylpps3mnzv5", - "bc1pu57psmu9djwzrhhgus3ha7nvup3fu3j0dmv7mm8cscy65rxxx0lsfh7p8k", - "bc1pz4ymlq98mew9zqjrvnvdm5dvxyvdm2g6klynm93m5j4ykvdvvats7x88gd", - "bc1ptxuz682r7hs5fhjxxjdc5cg9u70mgxgdp68j537ggqch8cdrrqysypdcn5", - "bc1ph5gaemtwfzqw2p5ltmqnhh43f768rtmzvdtlg7aam9egxr85pv6s2t3q3a", - "bc1pzh7kuqaw93m4e72vfvec6yhsc4wn6n9jglyzenvgjstmwql92n3srhx7pq", - "bc1pj7p7vsqxkhnqckcra5rzsk8tyfeun3tk57mktvrgc3guzy67a6xsa3cnhz", - "bc1pftnxcal4t0acjmgnd0xfp0yw7w72scewm3dnxudm675g47f52ujs20s8t5", - "bc1pzkted047dqtaehwa5d47mkkkjc8d9ljwffgcg2luhvfrhqqhhn5qujlpp7", - "bc1pnsxgrjdd6r08uwjr52q8tgkwy0s39zj7rhmxffetegxsvy655zkquaygxl", - "bc1pjgxy7u4hkyfnjczkgzq225a2qu5pum0kgsv7cv7t0led2n43xehq5pxe6r", - "bc1pjjs5qqhmh5tn655dns3lu98j4jucd9ptwghyzvk9d7jekm5qew5qy8phtf", - "bc1p73terxl52u39n7z47pp6g5jn28a9awqlhl2cw6hx8p2nht5k4ypsh0jlhw", - "bc1pyf46mfspz6qgf2kr6d03df5wa52pvtxt6e3rxhwax37f83xaapvs9vze27", - "bc1p0lx035gdve8tgqmsdaf59egxpwk424h4y9w6kh9w5gq89vuzjyksae4ff9", - "bc1pa5ddsc4lc88canmaeeft23x0lsvf0kqnde5v0akadljkrxh8740sxkurl6", - "bc1pedll7m8mmphpnhnuemdm3mynj066km3mdlcjl6plqgw66rn76vysy9zugh", - "bc1pdw6gd9cvjrlw3pafcnfdstl88qx220ch7060kej7dtyamd6lh8ts7xs5wr", - "bc1pjc5cs6egcsfyg9lxxywr85jmpjhp6t7aanplf270s5042sgsrewsuzyjj8", - "bc1pdad5mumjlmk089raszpdkdcjtklv2znys979pef4c9ynp8nal2fst3m5d7", - "bc1ppha2fc6hlsy2400rrg3xmn2hxs62wha0s2nuusrqgwtxzu6htcdqhpzx8u", - "bc1pfyy5klg73dp8vjfgtcm0hxsjmvntwqpnjy9qu46jejs2kcfspxrqfqfl9t", - "bc1pw9f3sn8247p3dkt5c4e4n99vkydcum44d92nqahzwqw4eju3u6fqxup44k", - "bc1p3p8ff47l52fwwtrsms80eygyfj8ggu97f79mn5lt6z4eslen4s7ss428dj", - "bc1px2ca002yedaqnfky2qfuu7w0mnjhvdxjxgtwqdfq6dfz6flakv0qth3zzn", - "bc1prcrxa4d2pynh8hsafd5v59ex4ca8uztqhnjs6x8u0nrse2qwq3pscdff6w", - "bc1p7rm2shfl9l698884wvy8rxd8k87l87v5gh9nrdd0et8elr99jh6qanqh5w", - "bc1pnv884m2w67faa46pmxq8ecqd6ga3llytlcnp6s4ztzj2nww078vq765t5w", - "bc1p5tse578kvgska97dpl94mcfl08ane2f8h0998d9zwul5r2e23j9sprnytc", - "bc1psc2rs48gmscdsx4267udng540wypccl5uex67pr7qseu6ssva5lq3qzxgj", - "bc1pst6uer9plm70jzyzn36jy6p4s0zjv5r3t0gxnlpzwf5nsscfucrse2mxd2", - "bc1pu3w04e5s64sygp59vn9z0chscfkha329legsg4ag2hc5j4xthvsqfyw57v", - "bc1p3lqaggssfnzu9xupg3r8x00gf0u5myt4z2mps0mf0edwt8h2jpzsajadmf", - "bc1pke2j047u5dhakvsr0wr0xjqmwzu34dxl49raq3yv9zlsz3qw89wqh2666x", - "bc1p2ls2zfejc8m6dv5xymfuhgxs6jtcgc2x59vrqd62qtw8l2u4e99qqmmwan", - "bc1pdjhe6drpcurlmgxd5h7m84qg3kqarszm8wgv428klj5qe4kdnhcsgyq2cq", - "bc1pz47acs379xjj046ly26d5mpskdv3m0672kqz484h87yusx2etyeqx7jr0m", - "bc1pf6kpxa27e9w6xph7u4qem9qcyxuulj5cutwl8ks7gvuptxtqf8zqksr9kz", - "bc1pr8xfkn4368v04hplavxgjsd4ln7hmyvzfk998k6f9c73nr0qfw3qlkety9", - "bc1phmnj6c5s24mag4z2nzusw0s4k7aahmr4w9ztpn6ys6htuj0n8gtqz9mdre", - "bc1p995ajeeqf4wf7q4g3zvx5kj3kvkkpdn7pxx0cdqj4npp25uradystfv3tk", - "bc1p3f04c5jwvzdw7ent5vnfr28hns9kg2ajmvax8m6w9yrqcrhptdsstsxwtk", - "bc1pksutxnzpm5q0qnv3jtj65qnjr8ht7u4hcu3efy8yp732pnhxxxwqnsgc8s", - "bc1pm4upak8f5nlym0dmgg3v3r8w6c30jn0zwffcssvjm8fjdd6ldseqnjpk60", - "bc1pjtzaefwf6zds894ppngzuvyx7fpj7c6ht8eequzaxhlz8ghqxvasksp5h5", - "bc1pfa6sq48j87q06syz3z5vpkmykkkegv4uajrex23t0r3d23s94pfsmy6vr9", - "bc1pvphqhvgxu6ngz3nr66a9n4t7gze3f0fx6g3n0vwdgt4lj9z5jsxq209jcu", - "bc1pun8zew42h7ajat7wnjzhzc4qsgs7adpytyf7auzlk840wyeaygeqy7vlr9", - "bc1pt5kdd2vng55l9w3y6jt2art8qn8ak8y0mzrxaqp08jk3fw9z0nkqha58xw", - "bc1pe72svy722dm3p4jhukmfa69m6p4qswkaha7jej42rwc86l5muvqs6e75y2", - "bc1pl6yhm4znppqfktuej8j6hgd5a3v8dva9vnlnahpsg8wsft2xdkeqguusrf", - "bc1pen9yy67zg75jaz86sctzddct5zqml067qxks3qzhvjdqthxeephqk9496l", - "bc1pspycrdqaw75ml7l4usajgaevtle8fvlda8c07q7l8ldzzum58znqn3hxt5", - "bc1p5rngwhkcs8yk8ga7xnkn86sa36h7cutjdjj6ej5zv7rqnrdvgwcqkfv48t", - "bc1pvkqaf4z4h5a6pmq68hp63redss9598vcx6h9ny4yuyawln0qeklq59dny6", - "bc1pyg53wuhcmy3xdc5uy6e66uwanf5syqq8xa09sfmdc6jyrvecen2sqs63s5", - "bc1pjk6e957mpk0hektny8jrxz3gppz0m8z86sa6xay4uc84ravg676qlvclrw", - "bc1p8kp2vzcrjan22m5r7v32rsx4p4pw52uldp5w5qfl6nfg363kcazqdve2vv", - "bc1p4adcnnajckncg2efc5cryc52lusxdn553d9dhhrqvls69qu7fx4spdsnjf", - "bc1pj6add6807lv6uftrrwsdwn3qyzktsuwqp2fa6rncr67xesp0nwyqchs287", - "bc1p74p7ptevktwwghdv25yl4khrd4uxs6cq6e2dper29mn4k0vxrn7qpvnm5l", - "bc1pg8zlrt37rw9dq54q29jg3jewwzlwvxxefhmfcggez8v60w4ph6ysfutg2t", - "bc1pr8dkk5jpjfdd2ngpzrgzt7chw7z4cs7mvrg6c7p09lg4f33ffx5qc9p80p", - "bc1p870fqzccmnt98r7y5d709qkuez40xl28k2x5vgxy63mrnhax6k6qy2jmxv", - "bc1p6dp0twmyhvvyhtk2uecrygvrt6jvqs2hgyrqzkpf8cht83p06geqd4uzd6", - "bc1pcq634lxref3fu5hgnmkephhcn9esphjyxw7d7r7493mdj44pcpas3z5m7z", - "bc1p4adwa8agva62l0gffa5hax3ruhekk0xne48grjuf7k445qgmwjnqsacnzt", - "bc1pl3uxhlg9yef6rvfsa7xgvth34wgjhpjcak8a573ncl9p30c273uqhhddl3", - "bc1phlmrkn47e6l9m73yyr04t58zd9rnlg3fmutytwv3vzt749phq9ushmg5pt", - "bc1phxkes8n6vx3vkpdq4ra39tvt5f7l5gd6fgnr69nfqlgu3n47n63s4esmts", - "bc1prva5dcedh62ar8ptcwdq29xwp9uyzfvq2y6u2dknls6anne9hg9s6s53fh", - "bc1pu6wd9nejfmaxxrywvwx45gl9rsqhkr9qkzn6pydlvh8hyald0jns0exwll", - "bc1puk4l6czs7gtjaz0zcrnh8cml07lyvug6d9zny2c58uxkhmk25k3snt67m8", - "bc1pvmswnge08hegk2l9qv5t6cq9cg2fmhvxqwhqsu777hpmnmsf84wqp7dv09", - "bc1psp2dxlal7cqqdfextusgfqkx78xry54e4ncw8jc9lzqz0d36yfvqvjdpu6", - "bc1pts8x8gpe5jv68l0xw4uvsm3akujv2ma8qnp6p5a6vrqnrg8yehcqucmkcu", - "bc1p733hm4c49839ms03elm873kds8272mv9kxzv4h2ywjv68956nfuqdrk4rg", - "bc1p0n9m8gncl0n3zg7qatpzgyqcad30ppuhttx73ey55z7eh5pzg4vqjwc338", - "bc1p32caq8up72us0pwrdtd3x4a629qg9g30u2k3eqrahmwuynkk6f9q9ekcxw", - "bc1penaw4alay3s7sqwdxauqa6hvynzkugwel39wr9gmrau9826xcm7q79pq28", - "bc1pa58qj8cnetusynjs6cs0qargzgjaj50ngt54s4q4xma6nlpuf9vqqhhhfx", - "bc1pu3f6tymjh53naplkllf2g5582a9fr2r2njv65pfef0y4uaytccvsdlfrnn", - "bc1p903n99zcpagf3yy4hz5rgrdgkhk3w2y7e88dqp94k6y32vv3eh2smf60v6", - "bc1p6g4s207qvh9xzue5mt3m89sdu6fpvhaqd326v8e576d5cpvtlfeq0ajdg5", - "bc1pj8fzhmugtvwk29k25jkjaju6hx7zxs0x4u6f4v8qz57e06txy3fq3tafuj", - "bc1pumu9y2sdq3f0kr5q44vfmsu587mma2886am5tvrfsp8yxp6l4acqyus2pv", - "bc1pzv2a2a6feddswy53yuhrdgms3mnvyrxrqxe0nhrdjlauah2khkmsr2c8ad", - "bc1pftc4wns3rngfgj6yjv2nj62c6atjcl89e6dpursr9y8d7cekt6usty26v0", - "bc1p5w7ws4nq5fztzlstu0hcd9a7cr39avf5fj0c74r0cvswezx32fysp6s53h", - "bc1pt30wtkeznjxuef674h43jma45m3s484l7m4ammk2gaxd368rxxrqzc7js2", - "bc1pm70rt3uktvt6fqaj2swun3syxhls773f7j2lutxsjsj38dh9ztkq53ks5e", - "bc1pkzymvuwp44ludrf96dau93d6p0h2ekahc2musykt2sdgjhfgj0zspk6w2z", - "bc1pna96k6kxsl0c4aw4fkch7fudakzhzyh6ajhcg8nee9xayjwm77lqmmfjs8", - "bc1pvul4y0ehc6k68fx08px49v24mt6mfhl02zvxsf4k2hevgcl0z54s06wzt3", - "bc1p69585rn045gjjlxgp2ldyptv005p7ge9zlz49em850rwlnzpxamqmzt7hv", - "bc1p6vv2rq47uckuuheug0r0dhujmgfnmwrf54scm3sw7c66dzkca3aq0v49mq", - "bc1pq3jl8llknxsp8sa3sc3nfm6gg6ha8phxj62akx4a2xrhuecwvrjqqm5f4l", - "bc1pvcnwy9llyw7v88d6ulq6zhkq0rpk8rx45n64hsqx8rjc565cs3cs4wexcc", - "bc1p68nm8kfeq8s8qwyrv5fslq648vfctjj5mfny3mav04wfj39ap9vs2zw6ep", - "bc1pdd8pldjtzgx6c8yu4kvgtdr7fpfnlajffanj3csnvsxu4ah43z3svudwcp", - "bc1p263f04u48yprwl4nqs4c0jp6lwhspgm0yfpzwlp5rn67p3k24jysgtqusd", - "bc1pdmdlwrdmp89mk8yphce0k8yxfg6ctzm36qekwc42haqqy92mtunsfgklvq", - "bc1pllw2t066wm6358jvelex4lh9uc2d4hmwzslgmkgffy5rv5x2n68qhcgudv", - "bc1pavsqeenwu5ra2h396quthpzd972ct08swcz06mk7x9qp7pa7k40srdq5sn", - "bc1p5dafhugazrmtyfle2g56cqq6jvf6ulyaxkvxyh7ugzlrrldhjlrsanh8uz", - "bc1p2jm0jn9n332eef9qhnzlmuk4rwc7k34mrg6zeucvpvd5n9ejcm7sk8w7qc", - "bc1p55qym404q2zz9wq2xeex7fj4z3q2eg6zm0yxnp3hluhwtcw3e4jqts9ae0", - "bc1p2399vmtqtkalsh00dt9f7cjnvpz93m7uy7vsrqqef02jugugf6msqnqzyz", - "bc1ppgg8kmjj4n5vrxdxaz66yk74vxhjws9jv6k4m2j8pevyjdq5ztus67u992", - "bc1pj9g8a3x7swhgqcacqls2rjcw4cs47nnqhcd3npg04hfxwlmq6auq764jpd", - "bc1p29xtwnfeuqlswfs6eqr8uude69appw04pytefkmlan39ph780nuqs9wfsd", - "bc1pannq0wkdc8dxvlx9xd46tqujwcq7zsefltz4kyfh3tcvnz9w9ahqa6w494", - "bc1pns4t54n0xd7rdr5h534umnd2qxlffdxrkavuxgkgtsyj3km46h0q2ufcjh", - "bc1p432tptu56mxmumsvrwde862jz6dy0pfxd4d3hpguhnrkmdlqsw9snu9ucf", - "bc1pfv7473vlw49n8wy0gmvcpumsfemzw3g6j6kz5d53nlr882wh5uhsvmxh2a", - "bc1ps9r3jmj3m6ft02l6thj5adcfr0cn3alhgmsx7dc87vx0hpux80kszj3xpv", - "bc1pg0tzwv0c37uqgwexsgtxw7l9dgynac6lwale2erdetsgkmllpz4saexyv8", - "bc1psfuhggz87fwswc295wfxhvv05y3p3kvlp2sjtfmstqvmlxlrhgesvlerue", - "bc1pxr8gu7d8cwk26k4evzsq7mdqrwgy08ed0mtcum6kdtrkxr29ntqqd2e0fh", - "bc1pexqdzqztgm87hzz8fm8pvjveh6nf7l36mkszm3g09z727tfc6gyslvmshd", - "bc1p2kwvc96hzu6mrfwftaz8p38tg9eeujpl0qjjwf9vrsg4744vutwsn8wsfp", - "bc1p3j5elu9f6ksvdtk4snysqrsarswc7suvzjp7dk0vgpzmpkqvj7gsf8tl8l", - "bc1ppk50hna8zutmjz4p3hyn9y87nete9ghd7xcf8ln0k4py3snf6r7sgqpkhh", - "bc1ptc3plzf932vzrac9qzt7nay7zhj96wlmzatv62ug620r0ls4fqaqe63u9m", - "bc1ptxl89qt48agv8fz9hlf59ztn8xg48vv0zkwu637p4tr2pedgl5zsar0y4g", - "bc1p23y55g3f2m8xe3cjac942pq3y94lfculwznmr2up9v52d02qjtcqfs3zdd", - "bc1pgynm8ay7zxyegptax43p5zhkyvezxdep2gcw9xjknr9vjmdcc5jq5rptu6", - "bc1p9nqf3tqzywsarrd02zzuq92w5u6qxucfguuq87vltv2eehujd7zqcjduyr", - "bc1pn4f08r2v5l68k40pf82jlgh74lrtp0g4z5q34ek92kmmqcpym4ys40xfvx", - "bc1p6aj5u8axp5y2qrp3qgq5zrw0lk7lg9el6rm6mjhu39ekt6x4yuwslaxma7", - "bc1pp34aa30kn95d43k334zv3dvm0ux45ffnssdfvjax3tgy9zrtx7csfu048g", - "bc1pp84c4l8z0wmhm40uatpcaz9g9la77teud6d3cadqxd597fzqy6dqftrsml", - "bc1pz4wjnl6hkhy4uydfp3gpgwrtflvx0rk7pta0p7sefu5yfazh9djs0r2lmn", - "bc1pu0xaslrfrgk9cxufrf4x8gk67v6el8248jt73pyaeql2k4w8dxvq00gkgn", - "bc1pqmps55g20s79jpdtjgqn7ldczm7g5vzx2j83wrx886at0g2eujtste40jw", - "bc1puau82hqhv6gt4rwn0nc4ua5cdhndag6nd78cmcjuamf7qyhe3mtshy6gu9", - "bc1p26rsu9023lppg0hmk68qnz504tk6qpqwhffyg09a8wfvqcjvsgps64xt2s", - "bc1phc6aesdarupffz064yup8ck075m2da6ju3ru9vsdrf6uy3ccmgkqarsn0e", - "bc1peq3ga4cj5jxz8d5q04aclvdw368glv2ud6wfj4hnrfq3f32v3fgqwd64pq", - "bc1phquee6hpfvr8qjagckvv7l484eclqpf55hxnjy2g4ua877r7f0lsv3panc", - "bc1pla8u6372v5jyzymmjr5sntqpsv7y537tsfrh72da2c7e8dqnk7lsj8fnr6", - "bc1px6c843phuvhayd3rpjpghzrun8n5kmnmnr0fz7jy7xyq0gs77jeqw33zjw", - "bc1pfw6cp4z350nj4z8kmnw7p0c02dhlvumyluqjkk6s4wuf3uvluqhq0kajwq", - "bc1pezxrkx3gplzvc3ylu46agercg74axvjhtcdyezzg4u6xt0wcnyqqjnlg8w", - "bc1psv47eqavwdz98p63vawdkl04g73k06kurzt7z5esvpkv5tl3ptvqtlt5cx", - "bc1pmkx2tqftwgpektk7yptzm496m00ess9mcu6h9h2fgdd4vy280pvs8q42zz", - "bc1pw2h3khxmggqjq06m327f0a96hsyls6h3j3c8xyzeg6nxeecpnlgqq99f0g", - "bc1prxpwkx0a8sws636gfh5svd4tmynyfgjyu562umtqhgjs45j5v7rqf3mec6", - "bc1pnked4v3v92dp49xds2pmp90zppjc2j0yuqtf5cn2a6xrs9ehlansp4n3qg", - "bc1p8aq6tyma56vkjxpn38a4zqyj09zu8ahkc5ens50ldeg7ny0flqhqlp5g7j", - "bc1phjps4thgthj3cqtrmz06vzesm3uzds0pxncsjjv6g7twehu5225sk8qeuv", - "bc1pw6p6jltwaa7dq889jln0lpr7pgpcspyf7lav0ku0na2zhpp6fpzswgxaqe", - "bc1pfegsw4cezu3ckxgth986xcjafq4uw796flpn4uw3y524yayypmesxuzeys", - "bc1pe7yw66taxf6ssrnfquaelpj7c5qfgzx9hesrlcmv4f9apk8cmggs2sy2ta", - "bc1pfh26ms6gcvnml63qgjx6ctw5y3hx0r9dqugqpmdsxjxdpzs3hclq78k424", - "bc1pzvqtc5ae7atgfdxg9ssw8l2phen628w9rraylcdq9j332vgpvp8sdpvur5", - "bc1pwzxpfrdfs22xs5uw0yser6vuw490r9kvqrqqc4fsxa5whssr9mlqqum9kn", - "bc1p8v29lz9t3f02pfmu02p3wllnpp7pdg7u2pp8sz5hcyxyasvv7a2qp84mfp", - "bc1pu5t3k809zewussfktup9m9vastgyru88ts4hdxt6mj05kykkmswswn3vav", - "bc1p7gkskdgccz8gfxj8q4c6zkfdtn6xz8rmn46rs002wpy4qerqpwlqnfnlrw", - "bc1phq2m9rrf6etm9sgs88xzxclvpg6hwlrtsyyanp8rm5rdeg9u9kpqqvh0vq", - "bc1p3agkcchg6dt2glgq6298rvz8jyv7eg0yt42fac5z8s85f748m37sgpf44q", - "bc1px6dnxer4hlxct4stpxx4a3h5u36aug7klyah3zmulfgg8cavemyq6mjxr4", - "bc1p90ksdjyvc0m77vkl6nq527se3u0pk3f4j0x2a4annl4987p6rlsq5qvert", - "bc1pmzd37p5d9wxtvxqtt8frr734gjxju32cq3mjp46uwkyhuws4r3lq4snkq0", - "bc1puh3gyw8cfr636k7x8zdn4ppxnjagaxgmangp8hrc5n4kp0ux5zds2urvux", - "bc1p8k4e92w97j23rd0lxpqfqyjzc5jk7u5cu5jtm2quqxzpra62jcrstr6axq", - "bc1pwn0az7ald5j8qj3kmznwj29pftqnwjps0qwp426xy22422rz8zaq9rm6lt", - "bc1p7lnvaj4cxqfqwc8gkfpuq6hqmwz3fryxppd3kf5m8spjwumc6kwsdgxfxd", - "bc1pmsyr3j2v7923t6hhlrsqtfuvg55exxgyu48p9wvjeu86vtl2dj5qjw4jhr", - "bc1pmayqthn48yg0tg2anwnv4x7ddrez8vjk53tjuajp49aqlvv09yvsc5kzxc", - "bc1p78h4e9l375nvj4mf9kseytvfe7h8ycwu9p95s6ha8q9z7ydj4vrqqs5vc4", - "bc1pu8t62aa7m5c39p3grv5ja77ypzcnfcrwxmu84jgpqtmzdz79ur0sd02ssy", - "bc1pa36ty6mvqvdp8d4jucpt76hagzdr5tgjzptq82k395gd8vtvgd5qrglq9w", - "bc1pnkamxcuv493sslwhzehceepexq74fvtypyjht63s54wx5q8pdvzqz0ap9g", - "bc1pluhznkcn2a2zahm9md4uunwzxd2fmm85fezdh7yhf67r8yytm9us69y069", - "bc1ptntm9q9qmtqvlgf3sfrsh6rfh9smk8lyks8awp829h0e7mv2wpkscf946t", - "bc1p9ntdyzsx00xdy9fkd047w9n2zspwmdfr8hfm45v53pj80k9x5t0qynq0jy", - "bc1pze425j89lxk5muxa9uartwq83yan86j8trk446e9zqlnal2q4tzspapee4", - "bc1p7p4kercncnguxjkeykmq0cr8mdv7hykmj6afvh87mr0zwu72hguqa0d8yt", - "bc1pnx7gpk3renm5upgzusfl7ykzwrmua293nlfdy2plhfxwvtr86pcspf5p3c", - "bc1pz0sgxpf2xz4vdv2hr7pxhvpzzdghu0utts24hqyy6vz2etar35yqcgyayc", - "bc1p28g9mjxvl2d9ljjr9rua5a66xcv9f9kdjg0cdcnhvhc3740qjvyq5h0z37", - "bc1pne8z9g8gg4vvn9fh4n2x4ecsa8wh9pa62d4vkqazc38vnztwngws5c9csu", - "bc1pch5ucgd267vvaxha5qjhvcu4dys4q8ez003vm787zdc49360dcaq7wfsph", - "bc1p9h6xsgjs8tlpsjj038yxwxpcr62jlzc53v0cfne2r4ptsj3ygzzqrf3agd", - "bc1pnh7hy0qfneq2sp0tha68zdcy0v8j8765n8zh9va4x866f52xn75qvxwp87", - "bc1p8e3wr04vz0v82r4uc2008c6lmkgfjp725kh23pjpyrd4q7fv7hgs3zvv2w", - "bc1putwvdqvnhfr4r0r272u5p30lgy6dyrckr82dlavcpeaez7dgph2q26r76m", - "bc1pgjnq9rs2gjt39ewyawfmeelmrqqy28frz2sz5wzfrm6c3c40qqlqd0wzgu", - "bc1pjzh7ntay2npg4qjsyu7hfghsyvwm3j0qur9u8lnythrkvlg4epds45z4xm", - "bc1pmzhyf45mja5futq7p9g438c0wpuqg7tdhwc5cdgpzzzd70nr0rgqgncw8d", - "bc1pdv6n2w9g7rvg2t0gq763ru4yaehdxqw99zuxr2v9a69ha9w0x7yssm4h53", - "bc1p4dzlvn3dmusf7zvyf67xad75h5h328fklqqrfz58wrt5nqkcg98qtl08t2", - "bc1p60h4m3rgl4sqpucrx3xn0qh2fls02wwvg3kysgcs28tkrpm3jqqq4pq9p7", - "bc1p9pzz7963mpj063avyywmpc8hpcp8pxu95ewf9mz5r6m7hpds24tssdwy6r", - "bc1pf98jkj3meh9607c6wq6a08uwauav6dtlp40sll5gssn3dd54l09s9l5qzw", - "bc1p9pvedd86qa2ahgy39u6jjqactsv25k3xxs875rvzgf2rmnxq6ulqxgzutf", - "bc1pku50y60qakhu7cmaqa6m38c93h38x2wsaxxuzmemtdj3xw2g9wts9cdcw9", - "bc1p5u7sh62hmy73ayvlwn4g38kjqgywhjddcyhehkp2gjml3fnfxpyqrv02y4", - "bc1ppp8u3tp3ung2j725g4kx54m8he9rzetvp84d9uvt605hdhl5y6lsg7302l", - "bc1pz34wh7e98mkukr9pm86ca7pnu30rmtzxtwd67tgmj3qe9qy4y9zsyh7dau", - "bc1pga2p0584ye23cj0grdyf3pdj43260ej2mzqysr28ccyz4fjguk9seg9cyg", - "bc1p9n87c6cklyhr4ce9epmd74xxrsv2w259asjcc9dhxege3xlfj7ps2r706u", - "bc1pq72ugav54m89ht8gcj6n3dcccxrl2h3s8nm57lmgvvfdvg6s8zrq9s6e5l", - "bc1p5gg6y7snd609v6kjt7atwxcpepwp5h4tqlvnuz8teurc8uh7fkyshnxqgj", - "bc1pdjtkhzf5l7yx2wvpcfzjzj9ylg5jev5vwqasy4fr4v39qr0d4c0qlyuvpf", - "bc1ppr0ac5vecjut6880f8wd7umtgzvy8d9e9kc3zk8qgjmwxgcfhdcqksup3p", - "bc1ple4dw92wkm35297pgelyrswdxgtp7a8fx983kr4em8vza97s9q8q7zk9fl", - "bc1pfj6fpxdw3g7nefz6ky84kc4pjhwpvjf080v7gz2xxny9tnhxmycq0xhkmg", - "bc1plap5rnzfylrk5asgrrzashz8xrq9wcvw4axaxwjehnluarjzdhesg0npqv", - "bc1p8w55tv7fqadt4kjrq0run0zvf5vq3882l5ya2h7nhc6ds4dd7t3qnsgv6e", - "bc1pse87qu4ktjd8nd5xadlypuzdz3jwf6nk5dlg05qz2tqn48jtpewq3heq82", - "bc1pgfc9xqseefutavfk0p4ywej932efygn33az28a0gw3qehq6xz0ssl42dac", - "bc1pzez8x7wll98hzx6jpzztnjtj55tp2yeqvk82n2lgxnfval8qv4ssv6zttz", - "bc1pn03jy8yreyuuw5pe969rpnxn2vfjy2l9jfsxnc5zz4efr867g79qdyr2jm", - "bc1pd8cnda4qpvkq9a7dyx2t4hckwh036wtyxpn3c9nln879tdaxdqjqafj70d", - "bc1pqjk8ucnzq96krkll0a4cjzjt989a9776al4n7dndsu2cvqcx5cuq2dp65m", - "bc1pzkt8jth5nn65j92dzezl9tc6fp4l2lvvhcwjhqs5a0u6d4v4a20qyklz9z", - "bc1pypd075ly92rskd4jxw47y646due02wf9x8zsefgukflwkr2pepwq8zujmn", - "bc1pn623t2luseq9fgte50n3y6f87jhr44kqjkfwjvk3pf0jdk5ygplsfrnv64", - "bc1pnte38rj4e5wh23qghs0ay422ev2tvgs5nm0w7d5gyvu6mhn5yjms6awlkm", - "bc1pdk8jr0wxgn8dl85m9vs2wq3kp8a2zkfuk5er7u8f3svrf0mtqnkq4vgrk9", - "bc1pum6g87tzk2wkqxg5g0peke6ex05x6ha78545y92w8y54pvle9ujq6r5r3v", - "bc1p57at50q5qjdp0adn27p98sdzcdre92n3n4w3k77te24gdk5hu5cs6sgup6", - "bc1pszz8njztqn8lmttg4dh5f873vten3zg5eusntyr2awsx7hmwt4uqa386lx", - "bc1puwmy5ylm9y9e7j5h4x5qv2za0zw242uprp2nvdp98zmwk5hftvtsunpcnc", - "bc1p4nlr2laqhng3r84nqjt2q8jq0f6hh4plndt7za2dwsy4w3zwk6cqxx5cj9", - "bc1pugdcjy8z77y879gd9jty0g9k60uvar8xq3ng5fxrzathzf7s5fkq8l6g4y", - "bc1p97eanq26m6hencrk0g5scrx9k6jfsfqyt9a4uk57lzxcncvcf86s3v2drd", - "bc1puv9hn22j7vzgvryedjtghl5lr7cupcltpqyrf2ssarq5ley0recsc5v0v0", - "bc1pp9z9pen3cfju3leuma6nmr8vnlcavkhsy3zw4kvelpt39s73ragssyfrpx", - "bc1p3fwur8dph8rvx458nfammx2j8l3rmafpvvzs92qhyywa7zm84afqpak6k0", - "bc1pu7tkcr6esytu75u37v0uk4cfeyrrxcthknjn0fszngpa4fd5e0wqh2terl", - "bc1p4zmsau0kw2huugn4jvrc5ewqu6rryyt736djd4jn34ks55smv8wsw493vz", - "bc1p20tkqc2g0gf6u8res5cq3nv3m7r23ecu4jcnw708n20t0vefc69q3q24kd", - "bc1pvmyfhrfc3ptlhdz0nwvgls5qeved9n6m8uugunmumg4r90xmp5nqmpaa03", - "bc1pcd9cdulshwc4gtnk0rwv09l2e5q5pjk2klk8rplg3yu8922mmpvqhyzkr6", - "bc1pj8jeew2v5dk068h9akuh8uj0lfvqechw42xrcg8546cxzxp64pfs2l8mwl", - "bc1pygv02klguv3v6rp3l32808rwnpngc79skfhgnpljgl8zje37m83s2rs9ew", - "bc1pfkmvn6s8j8gzvdx4ww77xycp25ssqxc7jeynams5mhhacnehp2pq82juj9", - "bc1pwvgw4e3020mxcpkp3uyze7wwgstpv84yg4tpc7635z9vgv5ft4yqfqgdmc", - "bc1pxpmlgdl4vu7a6l8f3tk8s0lgk7qxnws6cljrvpw8f9w6pqz8sy0qap26xy", - "bc1pkludv0sk3d2c2qugqs8xx0hp4q6usasynr828g2kvz9vmu80yv9qmj8gvh", - "bc1pa5lhvlvzqnvqhdmdz5d9qdq7scf2uhsea20qsdxds5am3xd6uhgsgt89er", - "bc1p4kklr6zyp0pq55cuzcfgps4j5lmfzvpdl9ahvk4k6sk0x6nmkqxqcy4dde", - "bc1pjmmpc8yvsja5wk3ta94pfutt0djxtyljyueum252unk9tshsctjq6etcfc", - "bc1p7ws8kdq72uech3hxzjgpj3w05cpn47upytsxvxtqrn8nfaue9f6s3w4qje", - "bc1pnnaqfacf5l95z78ghlh4t2upzcc2m0k6fv9kmnmqcyajgcypz2tskeaqmm", - "bc1pcf3jw6ageyzmuxmy668l5n4z564vsx3k7374454qt00du5gprt3qwmcpmg", - "bc1pfgaxyzsguw0jyrqujzylzz57n8plefl96cpq5jueehyzw6n5reds9w9cl4", - "bc1pe99n3ysz3xe8lfuc4urv9ancwafed5qqar9stssd5heup0yxuhkq86aj4h", - "bc1pjjpnppztrduksrte7h956pwgeqkh9cpga86q426cxdynt7frvcnsf972hg", - "bc1p9qr0wjkx5fsf5ajusnju2p6q9fnluvv7j0l5m42te0tnag7ld9ss6khdve", - "bc1p84x0hqd5ef8kettyhj8eu60583ya7357p4qw0agwkg63eqg2wsssycwwcr", - "bc1p6mwfe7lt7gf8qhfywnggpn6w4005sk0yjen500mulxnftueh2jcq6z3k7v", - "bc1psqgszaa4340esqk36ctpz6q6fun9txkhgz3synyqj8s6havmtxfsv5u2za", - "bc1pjcnd9sjnre4e2xhf4xcyenhnf8ewx48z0rz9t2ecjyg64ctktedswk3f50", - "bc1p7azf7xpzms34y2l37t95lg6f625qpfu85m2rv42tzmpsfh39wqlqutpu2w", - "bc1pm6eq2kfqlxrx8y2suflz0xxjh0l709gmnj6auhfugu8np99f6ktq9uvmhs", - "bc1plk2qlxvnnu4qr5hqanafspt227a0ydx6lx6dd7urctrju4csr62qvcjh30", - "bc1p6mr3vr6eek5uf5eraw7cgde5z37gdvmcu3zr7llacyh5ezxgpgtqc82t3y", - "bc1pt4enfxr75zuaqxsd939tdvn5lyx6wx5f54tf9y2cxt0592uprfvsdsp4xd", - "bc1pgaznvhgw6vzfve7tdqwy0jhk5x3u322mj4uxpv9s6l2jq2jf0jlsv0lpma", - "bc1psnmv526tnluf49amjv35xlc97pqda5akcw02yklt0zr6qjfmkg0sx50v9a", - "bc1ppcynqdznva6v267pz99eadlvle0x3xgngz32y3ejxpvj95fxeg0qxljh3g", - "bc1p8u0dcc5wngs6zsv60paweyxlzqtxa5ekckfrza4ua0ttfg0jnnhsnx9kr5", - "bc1pxmu3wg8x7xt3vth8l4e9tqxm9a4zrrhptr63nct5u3czftmeh7gqc379ck", - "bc1pc5vj28n3qhzeltmmsj76t76cvf22vccq5hcfvkv8ydgm7gnvs9pszdrg4c", - "bc1phzdwcnq5066efvljtp3t6h3tyze5wvjqd7vkalz7ecc4480m5veqkx966y", - "bc1p6dfn5hsyf7jdw3vup5gulxmukulusyfz7qmjq338f2ky09djhdgqj5fpl3", - "bc1pc2vuhmy737dp9ncstm9pt3en0xa9fpla0qd77j2s56ya5km6kysqclfjtz", - "bc1prnvnms06m9844scjupurgcgzlyd4py0dacxlc7zkzm2p2dfan75qdtus0y", - "bc1pkyvlwzlfh3jdq5shsx7n5543j6kz3wafuh543dl3nettp20mqeys2h9n9w", - "bc1pdq3jtaj84ge44easpkhf9wcghe790dlunuxa7533ujtztkujvldqpw8q6w", - "bc1p5vl6x8590nujqy2qtzaza0l97hh55ne44wg0rva824ym25ncjraq5frwpe", - "bc1pagmscwv4gyhzurz87s4t6azx6gxwe9qrv5hrqqhct9vs833wzqjsc32u55", - "bc1pxycxnsv99gwhdstzc4y9u038zy4x8znlec4qhwhgqen2v56p347qh30rza", - "bc1pgle48kdwyusnvvy8092vcfeus6fw2ljc4gmgjvg9s6uhmun0703srj3mpx", - "bc1ppf7z3u3shnjcwy5fmpalx5a26ccfmk0exksxhj5g50nenpkzv8lstmqhxh", - "bc1pzhhyqknw6sha2hu4cyzygkac3cj73pjc7v2f4zlznczsmnusm46sv3j7ne", - "bc1p7hgh5cz8ddrf03eu96qyzprsg9pntrtaktru8vrwdpn4zy2yy87q8tg4gj", - "bc1p4nc0pshysyhjjmumzlhx40pwjj8mmz5p42mq8rd2jjnw968grc5qmj5ajq", - "bc1p4kkmzlgspp3k84y4uxd5szkvl2mhfgk2cq56yy4sgy3cks4k5vjq7p7sth", - "bc1pj8ryqrhz94ls57ylgjza5fws3uzxnxp9czmzea83wjq4kpxsxlvsz8l92e", - "bc1p420eeyynae3aksknv23tqy0mjxqvzw8wxxr6pxwcmlercsv38c0s336xzn", - "bc1pqtd8c7fctxhwft46j7h0m9zu77qahgmpw3922733s6vxna6l4wpsgzmyq8", - "bc1prmgwz64psd6knlrv9kgp8478gnpszu5na42t2tksz7s0rvxr6tes9a6qdu", - "bc1pwdzg4au5ylvuwpdck8sralj3a8rwyact00ly3cex2zkl76c3a0lsc3vl25", - "bc1ppyytekdvxrcmulssjm7u8rc4cu04sxkzjs603f2u52t4hgnqdc7qxmhu0s", - "bc1py0w0yv80ja3ahqlr6xm6hy94fkucq8ptral8w6dks4xjq3zu80sqjqtq90", - "bc1pmlrrqwnltg5ea8xnwu5fgwxe8gkfeufvdrg6fg59m4pd4ujkvs8s9tc8vj", - "bc1pyudj2tdmmacv9hheckplu3cgvxk5w8kkq97lj3cvu2q2pmnmwznszr3w83", - "bc1px82zehasvdtecn9w8dqr8cn3gvqk4kar3fqxkqgsfysvza4ec5vsvkhc7n", - "bc1p8hplc7p42mjrndc8eh5uww9f4rtaedeaz0cy7f02edydt7pgqz5qd0mflg", - "bc1pgxpf0gugscdjnw36kcrrxzgfkxepa398fm7qnr07nl0n2lp7pwkshvdp54", - "bc1pw9s0md2x79qt2l5l0zetjuyrc8fre4tr3klhmznfypcxme7gkvlst5ef5y", - "bc1pxly26a2nyffn4axcmya3w2arspj2gs09agxz7ekrv3ghwsvvqwwqeuprhn", - "bc1pdktzv97m3q9ahhwe6wddtsp4w075ksw95km2vwdlsmlsph290mpqqmgnzy", - "bc1pfp994usn4pzdpqdahrsjl2t95l9a026almq3v0l7rwrps3203y6qhwzvx3", - "bc1pmah5jmthr6typ4zrw07smqae05yeffqkr3xwk2cmkxexxrcqp9ssqwyayx", - "bc1peg3mfa5z3k5a6y66qnx8pn059s5q59jctwv99xre7tfcgw29u5lspdyjvu", - "bc1phfu40843a0jmayy9tt3j85pr29kw0m5suuffxrfq2272f4y4akeqxcmcca", - "bc1pryhgtrcx6y83y0m6jtclwzrnzms4jluglyl803x45hw03wcuylfs36kevy", - "bc1pru0l6ut7z6sq5kna2wjyvf6t07e6cc0rduc3tgwzjqlelzszfjpqztv3nn", - "bc1ptl052vwc7zyc7vgjfhc78qt4ly6cenmj3rgtvwempumw60x43aaqqa7trk", - "bc1p4nfw4rnqkhxs6yg4tpqv0jux9r5thekrjczzthtc43erk7rv6hfsr8dvtx", - "bc1pycty8mplry445afzz2m6yjah5d789eg2re4ek3cc8u36sauhcv7qn9c0zd", - "bc1pp7g4k5e9x0kdxawqxxvp2y2l6nfv69dagqzwljfsjkaqkfn6qh5sdwtyc9", - "bc1ph0f2k35gu9ulau7kkpvrtjmfl9n5y2csm9dgygde8x9h9hzwh9hsslg8u5", - "bc1pf6vkcx8yhptjvmq306z6xldpd65skvfxkrqvrwl8fsftwlrzvj3sufaew9", - "bc1pw9nqk7ef48hs8ravdrred0h9r9h7h8y6uf6pvmtel644y9dm5fhqlhjl0k", - "bc1pql7sfnq4t9rwv7xll3wa930stwvat7ev3arqjvxdvw7yfvgnnqnqdkz6wt", - "bc1ptrl7lwm0mtqmumvy43vzuv222cs5f69kef4mqnj4uyayrt2msn4q7nuu65", - "bc1pzkg3e8wgww7rlxs02w93pq05kdv8rfgskkpg7ucgznvu44rqk2vqhyru26", - "bc1pcuh7w9nfjnn4la5qhew8khzkp29lyrk45rq5g4yp69juc28uc7cs3zg7ca", - "bc1pm2uy0gvvwln08mmuna4767u6wey95yuhlps0msrutcuryyppkgzsneynky", - "bc1pjnqu5jkff4pu5446k2sp3ptdyn350850vvn4c7mh656x4uj04e4qwplna2", - "bc1pxguax8tl8gh0dzxlg9n9wlaud0tqs6awgeul72m2hs2k06q0whtqw0tjt6", - "bc1pakhcx2wz64l5nuc27pp5h9hwnqe9wzkt0vv5kfxh3wla7fk3rc6q385002", - "bc1pzff2pf0yht3vpv7qdcfwdwmmtnkt6zyp9ag4wp8f33ksv2al8g2saulrmp", - "bc1pzqlpwkc4vj5ymfhmespk8s5gknxnjht2uhs5w6gyuu40e42qds8q97j3uk", - "bc1pr04yr5g42xtxgshycqxvh75yfn8u496zqgxfm5rq2hdzz6rmv9fs0tlyf9", - "bc1pwatc5lg7ju2lte0re2evmmd2rth294pzper69cy5y8jw83523w9s5tsynl", - "bc1pzshepxpkhf9kkefyq0gt3ef5a7nxvfydshtuvvxy0r8k05xvczas4creqx", - "bc1plse2kyg5qe0dxdrk85ery4t2vcc042vfrgqsmg4ywwwxwzegjf5s6y6uxn", - "bc1pu7a8ymns7kh95awh6pa9gnfwgum0praxu88mqksweeevtjxz9res29pe2u", - "bc1ph2pr5j9v084t67925r96ykyfwxz2mfr2tvhf4zx9chp2f7hpf35sydlqhx", - "bc1pgsj3srqhenk393dyj8guyqexn977l25n8zkgxgzs92mke2hqdtnqwkycjj", - "bc1p799f7wc482yxr6c3uczuemz9cswxasc36vgdklwj32sz9qc3xetspjzhlg", - "bc1p2fxjezyajpznevse94dt2f29pjm896g2keqk5ajsjlfrdst7myas54cktl", - "bc1p9l7uvlchm60k29p8vv9njcvx3pe9ftmqyn9w3cvq96xyk8gx3zas2nr4l2", - "bc1pvwxs2xe2pvc7p0fpcztpwlya57nwz592y58n433hwrtqcm00rgnqf9qec9", - "bc1p9wjsm3td3c8fj39umwlxvggwcma3mv0k5sfhufr5dyg90avrc9hs2p2crw", - "bc1pltv0fr4d93ud2kyk70lzp7s5cpqdkh796w56zkqerze2z7hv5wqsvfw66j", - "bc1pa6k2rmh4tjjsezxw4fkwef2kaz6lfp0p4ql2xmavx4tdf3a7n4xs2z8kun", - "bc1pw577ttuxwfvkxeg8cx50g8t8fscjgksrptlafuvdts68f0fhwt4suevuyv", - "bc1pjpq6rfx48tuhdarp6366z56ng847zn0mqmz2nd3k7ks58hax8ddsz6a9g8", - "bc1p7s6683zqljtlarskj48z4ckya5pk4f8tgdech5m02w5wwh6mam9q9nv80u", - "bc1pl3x49dhfw7k73uqw7lupy866vnfdd0nl4uur9thh8wf8vhggua8s06kmqe", - "bc1pljza7papqasd39x974529498d5ywjv3stgtgtjq8umcsf4xucmjqkxmsf6", - "bc1prkmkv6wxmsy5huz9s5uzjnse5qf2mq3c94aq9h9pneuaw076yrfsgupkhh", - "bc1p0xnx6hd9yx39ew9ysw6s5ejzl5s8tejsa2wdpk9v4zsysuc4tddqkrdfmw", - "bc1pvyqgzagvtvhmtrq7ju3nvgungje8s7emd72thwu9enkjskm922fqnz5svs", - "bc1p9e68u8uzesl7zracd0pl0w6rgw6lp4pyk9894alvrnu3rltdxcfss02rxz", - "bc1pzardws4r4ewttl2746md0dkm3cnzurjxlduypzs7ke0svpkk5vwscxlazc", - "bc1pjfwcy86uaxun2u57t7a8sa2z94lmfv85u50dhr9mdr664gsa52rsetcu7k", - "bc1pckm59q5dqg2fzc52u865t3ay8qgn342eqhjp70qnak0xuky6wmcsjj2zwp", - "bc1p8l85l2ge2wrw9neu0f59gzuvfrwkt7fhgvk0kxvgkpweu0zzux5sfm9z6c", - "bc1pcsk9jeah9t3ueg7zrhe44gppcf9nl4qqrw934dc8rsdcek8f2r7q25fmqm", - "bc1prhjlzpynaa6lmp0ppsdsdnxpwskmxv32j8tf2cw8mn9tdywgyupqgvnec8", - "bc1pgehycp0fw82y8kynewhz338autxt2fcf9ycwshp0z5p4ynu5gtpqe4ms9g", - "bc1pymnf7zlty8hdjygqaa025w4wr0nslqft2l2ymesluzvkvuxtgwzqhrmalt", - "bc1pyyjy68j7qzdqj4z4yfscky6ul599qwtl0qm69s9l648a0enrfp0qz30x8q", - "bc1pzv9h5jy7fa34q6966dkpughryud0w52c2fw096krnz4g459yh47qfc34tx", - "bc1p6epnwpnmj8w367msa7ykguql9pnunmp4ds35jpw63wd66jmghyqsd3rsfk", - "bc1pewhxd587vdk9tk5hjl3q8rrts70rm9het24cuy82mf9ddy520w7sfyr0y3", - "bc1pta2nlexn2g9ussk64znlcf5jdzwc34dg5lvg978mnu46f6zuxmws5vdrrg", - "bc1pt9esj9egz95lnysx6pymyunwcp95uk7dpc3vkhcmjlj7795neyfsjdf5fm", - "bc1peylyky46dtda8re29n0pxgc328wlan4gz7g984td8nu25tg2lh5syv54k4", - "bc1pruwfhr7u4cw62vgnvxxd5q75gmrqxszejfy03qdzydnx45p5aw2sgfkl35", - "bc1pfnq58zgknh7akv8702lejwmkqeezxnlu0xlyc2pa07natl9whylsrrcyu4", - "bc1pew9tcrxj29zn3asysdfjmar43uazmpv9a6zpuvnvuz6h6a5nqjfqqfaj5p", - "bc1pzyd3qffasp224ehnt3v9vwswxj8h2qeptj2qp57ssf8fce8vydtqusl5mn", - "bc1pavse38jlnnfjtn3q0yldjudzhgy2qst0tyum4sjkvy4n62f9k65sxf36ar", - "bc1pej2mzhkcw3th65gsu8er7ww0dp7uh7ft62qeqxdayyzkm88uhxjq772d4s", - "bc1pk9j52zxk7h0qgtujxla8t45rna5qzy82dqjc5456y3qm52pehpfsxv38sr", - "bc1p98wy4447353k7mgu3h7m52vkykl945cudfpf03g87q3pz0e8cfgsuktz4s", - "bc1peyrlk8j935calt39u3tz2hhh2j92fll4ksetw8f7p07qpcr0f43s6qg68u", - "bc1p45gls7qdvgkxjzjhkf9gzcl8syl0zf4apzpmlzcv850ucwgjc83qul42cr", - "bc1p0rga2kw8fauv9xp06pnx9xt2lzja9n7kk53mdd22g0flpeprqjwsr7e84l", - "bc1p0vtqgwa6q39vfz76drl7ycay7qt3e5u0vh98e5h3xsu4ll9xfgsqcazxyw", - "bc1p0auff5w9jx7600cdfx23fjw7wl27q5lqxehqv6ped88mwuvs7raq20hvs9", - "bc1p9c6srecxwfs237g8xl3cpw96sznkhy78sy8nc67xh5suyd6u3y0qm3ycxl", - "bc1pj96hspsfk0esfnkmkgywssgwk39utc9kx040wnhgu8lxgkne6tpsphxj4q", - "bc1pscjpryr9xkhnej6kuwy3dw2nkvrh0qmg64pqyrfuq4drcmyh2jvqu23m3z", - "bc1p6xwqeeh6f3ydlfdrc9gug5tunhfwt6url444kzjw5wamer8esmes9cg8sd", - "bc1phylvxcqmez5mwp8l8gcz9tgy7p0e4t8dtfew8n5zl4dqt8v6824sr4fapc", - "bc1pwhs2aszlv89plc0ragvy65a693ryhq57sq54dggx95c8y7k79lnqs26p7h", - "bc1psqgenr8peypcy4f2l0nw7ztw0gt57kqtmxgpp3ma4uk3ed6tcmkqde5j66", - "bc1pdnszn8zuh9r4ze9zy0l5yy8zplsftpnjptk9h2ws7h4c8vcq903su02f74", - "bc1py08tjpd9njmsjzzhgcnwz2tdeaqkun2c56vsxdgg0qfjvvtr5rvsxcykl8", - "bc1pvczp6cn2p3wymr35kz8w9u2pja95trfy3uxg4le4yxdzsmkhpymscpcaxv", - "bc1p5500z5hnm7ykpj0mefnzqpdmpslfr69j2l4kk6vhmjcwnvansdtq6wk0tc", - "bc1pp3qf4lf3q9nu5hhchxjrn3qmu4sked7edj0rnn20xq9kmgnkhg5sxmmckk", - "bc1pm8gaxg0czwdzc38tjy3r2lk22gxxyzfgftcc4lnm6gax8v7stjesu4d9pm", - "bc1pu0nd5nphc2hqxq5tam83ru6frgrvtvehkxx993eev7mqhtnqd73qggmeea", - "bc1p4tufkw6x63dgt66qk3g36l4azrca406fuqd37pxc6t8np7apxxyqwln7m6", - "bc1p6vsn38ghm92y8q5ruf0k6cwwh2nmmc0ll697ne0d3jjurcf2vdgq4wmqx2", - "bc1pxvn959y93f7kgjnnkkcmclvjv2szdl8e3wylx779jqz97ztj6xdqdw3g3d", - "bc1pjsszynm555swwpdygr3t6quq7e5aluyh4nnx2xvunj9r3q6rhcnquu3uj7", - "bc1pf4m0m23cjn0s7jr08dtxg3phy0q04qjgsvfk2q4dt74x6nc40ejqaewlfe", - "bc1pdrjxn4k6a3tnk2jewtlpy3cfh2lq2a6l3g4z947v5hugu497m6xqxg4zmw", - "bc1pnujsh3g4s6emswjwtnkfx83f4fr2aak3mxzz9l7vr5cnucwv20gqfjj3jd", - "bc1ppnslu6swtwhlfpfk43gem4njas39kk3e3gxx8xgexyy7jueu7r0sf3750t", - "bc1p096wguteu5pmdknvvll4r96xsayez3lezlsp3w37s6tcv79uh9pshq4z5c", - "bc1p8cw9esumjcjzycjxmxcrux9rctmnk6kshaquk8c9edh2786ds9yqcsns6c", - "bc1pn39ja8jc2p3450asdaw7h9yect0jrqltmyhqlc02gdadf9jufmsqcpl6q7", - "bc1pv7tfwnhf8hfgphdx482lwjp3t4u4ralak2law75f5jy7drm4fl0q495qzm", - "bc1ptwjs68pyxgcepw5stuzcu3sjs54pvpf6fz4yh8ccx3ks9rxyjvys0jv2ck", - "bc1pa704qpn6922gnrp2pa0r6kwpv5efg6yqzy2nkyefqyq7lrrf2juq7sm2ex", - "bc1pajwj3cl978dgjvxpmdfe64wheaf2h6lh8ypdkxjkfpjkaex433yq6mm0hl", - "bc1p4np7q204cw2n0vd75lhd9k2lwzlthmvmhra8mcaefsr0t5r6w09qmuk45r", - "bc1pgzm382l5cvtuw0zvsjettw9vgt2tpuzx2zxlc64kmu34deusum4qarza8v", - "bc1ppjxhqzkd8g72cr4lv8k379zhwj0454s0dv6mv8ysedcl0wvw9xnqwpla80", - "bc1p0fj4jlh8u0vcw8huywzex5tvyj99manyn5jdmzuc6949m0nlvp3sj4uyfv", - "bc1p29ffmjv6tyq42ca4yd5swf0yw5ns7ngq7d0822k8gpjkhljfqvzstfxfyy", - "bc1p8xfkauqjkvsqaslujslccagyetwsm2jgpjvyyes80xsxn47avzxsyku7ee", - "bc1pwys7f5eneap3x3pvjeqruh9768cklaw40mnwel4m6k2luekzr4esn4gvrl", - "bc1p7dv0t6xs9d3za9x6eg8dg7ua0kvzgpua72ultcvhvqg0zjh5eyestdsr9d", - "bc1p39jpcya3h200as2zyhtvp5t0neemft6u9asgsjmgal7lw9acjvpqhn4ar0", - "bc1p3d90yewcfdn4cqzzpese3nvvp4dcz75c0cf2kua7x40557xyxqjqs59gnr", - "bc1pk03yltry00sw4susztura6x4fr5hx8rqskar6ypqlrhwmqt8qwhs99pmv0", - "bc1pgg4d5z4l4ajn4x7n85ush9ars6gfn07kdfp8cdthz46a8wm6c9hqvxfss7", - "bc1pqkhq4ak8jvh032kenhvpa6gq6judrn6mtvst6yyq6r8m9jmx6mgs6tcql8", - "bc1pa97j0g659exe6z2dgjdnn8q8j3jn9gwa24v35hx2lca8mde9ry6qlhjvyc", - "bc1pyscjmxplvdzf3wamkamh0vp5rvzlr85qgftus9t8rmsxx83nevmsq99xnd", - "bc1pg7gs4j5frvjqcwwtt5m7jlgz33ucs82j9h4fmae8awmqx0u7afrsplcne6", - "bc1pkyun6fast8afcn6fjhn8m2t7gd0qffkp0knxmj89d2ejhdldq4dqzas4x2", - "bc1p406js35qf2a5q3wnmprv0gevxxw5sj03n6hc49k704kyqam53aysnujx8h", - "bc1pvjwx2ha76a7puhjcvxrc75vhpfhyw6ukuq2sgffq3lntvnlnlmes6vvfrf", - "bc1p62sw3yu82fpxqc6ytp8cxzz7gn83qwggg2kc9plpkgz6z8w5z4dsefry7x", - "bc1pjmc62uwfhwcl6pyh7r0hg0lpsdawdjslz9qs0zup34wt97t572dq0xycqq", - "bc1pkx0pced4n8yz5jkqzafl89mjdlrg2zw0kqtmluumsqytjc9qzfcsucfk7h", - "bc1pjpmlma7vfv8zhd8g490y97y0ep4rmrr42fyagnql2xrkmm9xa77qt3mvjy", - "bc1pjyvgvffz4nzwp9j2kkcy2sfmp2qk470k6lkvg4ny4w45wclap4sq6ltjgu", - "bc1ps673sqw0zau6ne6p6pl0fwqm8z0jd8c00uuv80t2gwm56608qzqs5rgnq0", - "bc1pse20z3r243nlfucac0crpg825ava6ejnl9rz0h3su2d2xce7ke4q3hhyql", - "bc1pgn0xzrc4u7ls8gs6hhhg3z0920cggxm2arux024z3m27tp85rnrs08truu", - "bc1pd9q05zmg9vk2958fh98jn77s76d7y3kl76m4pfgl826krr7f0ptqyyhzzr", - "bc1p8z5vmxd5eht0a6qtlynrnds0akte49ah85nr94w543v0tj9kmjas7zlw52", - "bc1pnfdagz3k2nvfxmlzeqynjlwht4sudv75d34dq83jhs8kre0g2c9qhsc9z2", - "bc1prdudjmk4frra8fjsfuryt7jk9nawwh4nhus06lysptctryxg4dmq6lwaxu", - "bc1pygf5purc0dy3e8vwr4ar8f4mmzyvekdxggf34uf20zm7vaxfrfssptfxv7", - "bc1pmtvknz2jmgr0024ght58sl63ymqqhv35w7acfcaqzlp5w4zwy70qv9cdf0", - "bc1pla7d4qf7r8ml6pfsp98qe25xs8tvwfuc9c7lf5afkzmejtmxvwxq280dqr", - "bc1px6mm5rjpmwgqvyaf6ay67h22rr8a7rmkx2wsf3zytkqz2xn4tmhsmngpt8", - "bc1p7uz35kzgh878fmlxp306xhkae3sm79ymhwfkw7hj24u47cpdv5ksvz42l0", - "bc1plej46gq527ahsuvzdcj97lc6ulncy37hazhg90623uxw7wtvsx8qwr7jyu", - "bc1prsuxuzgs6dgpdpzlnae8fad9lvda9asx77567tssf3kg50pmyjuq4yzfa7", - "bc1pys5gc6npsjuk5qdgrdfffhjpzl9c7r224u6sdfg42ce6fptjzj3ssxat07", - "bc1pktsyddvveua4gx0sd5tts4ce52fml0tq950zcy9kxvy7648wdnpsv86enc", - "bc1pwyf323xw4srdnen6mftxa0ls5xwhnevwayq4y4uk054s0t24qvzq0ghc3g", - "bc1pmj9udsf5zslqyepwyh774me37hm6dxv2arewy0qmuuaq4664jrmsmpme68", - "bc1p4vlnznqlrp38wxx4ufhjurp7yvm9kyapuxrcj7mdkmfhz2lvrfcsv4mvrn", - "bc1pr2geqmvpu5jvzljkj9aft06y69djrqve5e88snua0g606nmh03zqkxunwh", - "bc1pxtgsl94dcyn98w6m658xw2getzu3tgkp3z9cwvst8gh5getw87nq0ekgg6", - "bc1pp5k56a7af5f0wk3dwdvf46n959qdg508tuy7m7k6g36u039y6twqffr752", - "bc1pu5l9p3xqrgtmuj28cjh9x4ck2unsxlayquskv8xfhj6ys8qr9pgqn6fz2r", - "bc1pyak8rmc9q33x23u32dregvughv8j9js4dqnumv5ywrqxtcgpehxqekr6s9", - "bc1psj450ue82wy4t0lxcfvnes8zypdw3av9m0373tpcuethym6t2agss489g0", - "bc1pv80d9sp0qnjvw77hqcpktcytzkh38f49004rmksdr6jztta23tkq7ulkk2", - "bc1puelsf8mc9taz4uhhz9x8hzzlwskj3tm9pf2vq797kl2ckfhs35js49jntc", - "bc1pa8tjyflf5an8xf03846guwaffhjfcqkva22qavuv596dz4dmua2q59jrgk", - "bc1pvf9zquaxtaw3z6xyq2e0zxzgdnyjkn5696s7rmqve5yw29dsy2zs4jlmc3", - "bc1pnq3wys2xhnszcwdstjcjp73chdwy0tc696efjm80ux2tlm6sq87suac4sx", - "bc1pqs6rzgp9za9epy2wafz62m6zjemv5ffju5lzc39dalysfcn82phqzcunfw", - "bc1p94rg5s6t4l99hvudjqppn3nfx9v9vsa2m29pre9ppdj3ld8347qs2gyjy0", - "bc1p6msp94rclh92ula34dpcrl6jpdwzgljqmgg09h3tl4wzsas74vpqehce94", - "bc1p2wtl9ehlw00emsesd0sw34mlmt2k5dywjrq7fdntkcr7ga3m2ywstd6ymn", - "bc1pdxvth263xysd465vdxhyxhx2jnnsss59kcmrt2pp5etze2epzmtsw792er", - "bc1p3k89cfqjw06l0ql8ljr2uv250en8e2nlhh5vdv7mmysd7e0lgu5qzysfdn", - "bc1psm8frdga2a33nws69r6rqm48vv0gh6wee527czule3c4qmx0k2jsd9y35k", - "bc1pq5csm5k8xpfqx37afhfpuptwyp964m54nwqjq53m4rae7zs58z8qmxmdex", - "bc1pzxqgljs5skw8hnvcqgp4tfxql6ks33mwhhluaeh2gunu74uhpa0sf09mea", - "bc1pp6ml6386a7t47nhgcn2qk4rlhefyh79pwwa52hf4nnkchq2dk7yq2452xf", - "bc1p8v4hcd6j5tu76kljaqrpkzhp75zs5a7p37m9cs4hyd5esjtrn0msmhup94", - "bc1pd0v28gvt6m2hlpelw2sl7z777x9v9n97ge4u3sp7977xufa3dv5s4txfl3", - "bc1pw3y347v3rxhp8ztr84lul2fks8v9wty4wk26r78whsqyaqjrndvsxr67ph", - "bc1p5alkyt2qgjax4y8qg5h7s920l4makzq3uefkj3r0kuyvm3vm2h9s0tarz6", - "bc1pkfgyazf79hvckk6242m375mv7698sxst23jfk0qwanc4zkmcyplqzfxgr0", - "bc1p8sehylhmgwtlhuxqa2pej3ykwdz9h0307y4gmnsh6cjpa6eeznzqfc3pqw", - "bc1p7cqcgm32vprxppld9peeygzk4c3kmj0qvwhcfxze2t9kj96psf4sth8tyy", - "bc1pt39wk5djujehymhtgjfzykdzvuqd3lkpuemrqtygv8wm9djx8aqsduw030", - "bc1pmjlyvg5n68y0yfld8lwp82zjuwyall3mfsmnwd6cj72sr40k72eq5p9qgp", - "bc1pz4ghldkzu5fu6qq58z66xkwtuetgcnsdqgc2rre96hprlh79ehysfy967j", - "bc1pzc2evaxw9qpe43h36vqx6l9fs6337wgjsj79yx6jznu7qkn6z3lq7k02g5", - "bc1pczuwf8237c7dlll44tlnqha0d7zwvtvef42qnswhc24vx843jp2skmkt5y", - "bc1p92ah3ra6nkyuad6j7xju5hzm608msg6xzykk345zr2tyuj9c53sqyg7qr2", - "bc1psaymg39gwzza8yryep9k952weejj6424qx20mjjqrxz2tv4p6grstdk8wh", - "bc1pzhsrmpf868v9dsr6n0dsqvk7e4cszj5p06ugwwd8y2w28xtz4szq9e46w4", - "bc1pqp9j3hcw9vkn4l8ts94szserm2z3cuk9q03da39pu0qxgfq3ruaqer4mh2", - "bc1pptw2w9ejw0823c5zesn2329kepklaqrq9jjj2g3efrpr78lweneqc43adg", - "bc1ph0k6htl6gcz2kpm8ygha7t9sglplu676nmny2gn80jr62cu4fsrsm7mv4d", - "bc1pk68qdw0nplxt0sprpumd5vwgj22rwt837fsaayurqc84pumupw6s89fn5d", - "bc1pk4a55veamu36wjmfjh40c5zjwkzghpt4gcwj2prf8yrrdw4hfg5slfh33d", - "bc1p32yumrdnx6cavsr9jstsany8jgputufd6ec72tgqzgejnyjdmsqsjgtzkw", - "bc1puln4zwnapfgwdmc5wg6m720v5v5gzfg7jklss0erwa6pdgvc5v2q3m0alv", - "bc1p9gr9j27mhwp4t5k5dfkgdmshhrxxz5srjtaf9mzhax54l7yygcmqcqgmc0", - "bc1puc73jd0dqvpel8h2qeaa5rlydve029hayc9n4nmgjt3ccmqwruwsdj9exj", - "bc1pl0tuxu2976rm3ewsn6j42849qe6kh9k86w87d4zr2a6yts2qg9lqsplwa9", - "bc1prj7pgsqx3lf88855kw8xwqk5ta0zm7rx77mx90kf8aqq0ru7358q3znc50", - "bc1pvcm7u55c9gmhxpqwzjds24hcga3fk47jnvynjze829nwamjzkxvsvs5krh", - "bc1pzdp2fwwchx0wkuyeywwl3uq2j0x7044z32h4pq9pmtexy08erp7q05qfe9", - "bc1pcgyddyhppmjxjkyj36mlrw88he679kn94uy5rte5f9s50zheceas6udej8", - "bc1p56gym58dll8zdpl92psfwrt8qy2dsy5037y2wn8lxluqm923yvashkg8v5", - "bc1ptggqft0xzsj7au0vp8ce9ac3k2hkmcyk8l3yxc4smgwpd49wrvqsj7y9g4", - "bc1pwmy88aagytz3x65qrphylafxpgka44fa3asghn5tv08keh7g0w6sz5wsrx", - "bc1pext2z4f3p2jq7t0gw067zqyd20s0c8fy3628e9a6hfssjfuzx4csfaey0v", - "bc1pzcj28c5um7u7mj2ux654wjt7a6qls5ejfwvzp9xhscdem9jp9tpsr34qpk", - "bc1p26lwkfm44w07q5calzej5veqyf2pg2qrlvujl8zdsrs74mmrrxpstljrnh", - "bc1p3q27z0glgw8jyz8cry0nm5jwa7f0rzucs2a4c3r86mylqwp4hrhqmznx77", - "bc1pd6yvc6hscln757z9lc9q3yl2e4k69el0r4ezzvtjszqmzx4ktz6qkgm0t8", - "bc1pumm6gvyxpard0lydrrpnl000ga0srrjj6y8f43tswnmx7r4r70ts6zqdcx", - "bc1pg47t0qgxv44nwegzzzxd30df7e0p3vl7l0svu9fng9v4yqrf7rpsk3vg46", - "bc1prm0mljasfy9ttd5h33mpq5e6flp4wjd4ut5sq9rt3szjlfrhmkcqxdmhx9", - "bc1p0wzuaxh6jk6h25e0ndfe7c2pyc8gwgav7gvneqkfr0ju33uzkehqwamk2d", - "bc1pur524zvlul58p62h8anfv2pznzu4rvxdvanll9w7p8lsf3mvaldq32jr5d", - "bc1pfxcnttq3whv4wz6r54tkrgcl2w2lfv78rg6ayt7k6vqhmegj48sqqhe2mh", - "bc1psc6cglnhtmq60ps9d6xkxmkfawdpdrq6s20kf8cd833rcp6flhcska7fkj", - "bc1ptdw7fk5uvp5yn0r8qy6sh43nwny3mhds5l6pxhtka5ngwt047e4qvstl8l", - "bc1pvuf7yql8uuhjuzzptdfz3r7t9scgf4a9y6x6yg8wqcem6mm26dpswlvf7z", - "bc1pc52t8c7a7jcru58cu7th04tcvtww6pc7ln463mr3csrefm9xlshsp2dapq", - "bc1pkaxrzv88sfgmcucuteq82xhtskpdwp8frxyd54a2ccaj7h6qhk3qxddt3s", - "bc1ptlqx23px5w3v2tzazw0psmvmgmr4l4j8gyxwzpjwrqjzxa58lnfsgkcyt9", - "bc1punj4p7wt7kcyy8dhlxx3vfgnhhzwz7jcw24trgjd8d0meadmuugs3d3eqc", - "bc1pseha2yzs562mx3y9xcx8s8yudz4r7akt4tyc02tkvd9s25qgfrvscwj3tj", - "bc1p4xlh7xgj7g80gpch7y8enn7d2s5wrz6use6hgqwyzkfzd2vt0zns3wpdt9", - "bc1phyw25wmfjdh8tvq6v0ht6hgjvukt5xfkjf40mm3r2r70r3tfcvzs28nah2", - "bc1pcqjlgqdm7mawmala0lz7em4a5cl35czjjj8e4lck82yh9e7adjns4nfrgh", - "bc1pyxmk5r98ef80txs06lylk6f32rzcdg64m00nn7cel7s0a6gu6fvqar5vre", - "bc1prjkjlasrw59yhr2ervq6wkrpepxr7pvprl9pczxfhfjx2zeevpqs642dwh", - "bc1plhthsun93qquev864xhdvtqhd0ehzy0chpu92xglzkm8hew8rwqqkgz4uh", - "bc1p6hc6h5amugdfxsh45fj0tmrf7j83cszzseaqkg7guus5wcu3h5zsp9gker", - "bc1ptju8q4aqnmvtjc7kfhrwpxgg5xvfy54a9lwujkfnf9389ugf07mshv745g", - "bc1ppl6uz339q4ajm2qn2efnsr48mzsdn2szyjgdxvg9lsp4dmv3r95qv74d74", - "bc1pe5ekmrlfcdj9lskryg0j8rx3hxj45dtyk6vrhwc89xs2l8cdgpwqerxeze", - "bc1p9g4avztlf5ld9zeulqd4xk50hm9zup2qsks6hgdh5dc0gdvrm52s5mcf5x", - "bc1ppypfp8tpg0ag6q59rut2hcdshxeucvdvq7kdmda205lr0de0xzkqagesc0", - "bc1plz8xqkk938dkq480v5vdr69a6u9haav3sfhdfr30ysd0lxt7gsestajysn", - "bc1pxvhavw7j2mcht85syh4hhedxs84nupln7nuumaxxwlhyyvqlrp6ssgcksh", - "bc1p2dg7nxlf4wx2l0gcjvjcfluzka55kekwgu590h06sg5hdm92x6sqtdkjtq", - "bc1p2uwyvrx009dzkm5qy27vh65e2ks4l4pea4ms46l4mh24l8pu56hs824afk", - "bc1p7meeqvvsdya3ulpdmlpuy46qv3a6u3fr8vz4ac5v6zt9zmujr8rqx5wjph", - "bc1pg2qyxrj67k2d2upgz9w2auz55jkrtu37afd8wyhqmu0zkrq3mluqj5nyqa", - "bc1p73m23x6z4nek6j3ex98n5hrlfl8trymq045x77432t4ugt286vcsl8e0ps", - "bc1pm35qq593089rq6xagr487srmgrgzmhhwe9gdg69nkqwddz2axq7qrdrwcv", - "bc1psjmfpxqg3jlu36ndv3acqm4lyg8myq2v2ash0mwsvp5mgk94fzusmqlhs6", - "bc1pxrxphnamzx77r8wh3zcm7fsgt2nhxk249kpprvkvhs53wxg4ha8q9qyeyd", - "bc1p4cpz6wlvj6k38724xzcturxzv80tzv467eyef68dch4qqc8dgsdqy5vj5y", - "bc1psy35lnzttttmn8sr357gf5zwuvn52j3st933g7qv9heelzu2s7yqnqxt2e", - "bc1pxmget853hjxa4svmgmq2k8xzwdgcwtaxz4s84sky4x2t7j3mvajqpm8nhk", - "bc1pkplv3pu8e2ndn5ggn6kmaw3lwp8f6flkkvtgpertpjraphxx0vyqpp7kyz", - "bc1ps6nckjnmje595ayzzchkwn9zaxct6d8ctpztwsv2pm0r5tvleq0svmc74u", - "bc1pd224ew6al4aqn0m7fv9gvyw6t3zu95pzrufuc2sr057grkp5symqmas8ke", - "bc1pkaa094p672npnwfxae2f3gmgwt92hayypccdgqwadt0f34nup4gsw268ky", - "bc1prk28w0xazdvaxx5c48csgxwve9thantyl50230u3w2suy78ju8jsxss7h8", - "bc1p6cl45ze9hwk5ccce70kxyqxff2kda0z88gwpqnzard69267ev05qyr9rcz", - "bc1pjxcz9569kkfp0qe6fl4y4cdv4x88g2jkzwahzj3uyzhqa6ettutqu4kfew", - "bc1p68ugf4r5lkkwm8ymdwyekhtjjfzmcjchyu6xyp66xgq2s2eu2hdsajljju", - "bc1p0puc9j4mnps48fj99a0urvxuawrju3m724avq0d2smu9lr9dm8gsssyacn", - "bc1pyj7ur42l3p7aejlqd2c8fmpau44zj69dl2f96r59excaulsyn4esf6t7h8", - "bc1py6shyu9wf59m5dl9ulf8jtf5aw0w3zaxgw758y0u0nm7z4npcewq7q3l4f", - "bc1pxe9lh0trva6nezre0x9eft8vg4rhpa5kzkyv9kv0jkyjur9lfwds7umg9q", - "bc1p4vvgnmcm70s32xfw2sjejkv4cey3w53kd23jsk4psa0359zwd02st7v0f0", - "bc1p9e975v9dcwpr739xsnzdgze8z5pqjklgsj2a87sx99wmx3vrmptsfs7y24", - "bc1p658mlas9lfj9uz4m68u5ue359gnyj3l6ckztdu6f78lznlgs00vqwdvt03", - "bc1pfq6vna3tdankzkh6v39fknzxrtfekfu2ndpzgn7q22wssyc52rrqz960ye", - "bc1p5tsue4n2n4mtd5p7zwpfy9h9vul48eel4e93v4hz30fjxf4na6msr5lzgt", - "bc1pn2a2flsv9r7mkxpdqsv5sdjp0lx9feel07sw89ukj4kqkmuf4knqc4x9j9", - "bc1p75wdhd650n9v0asmtrp77hllk72ynpuxll9hs8gpvnxz7xl7cdksm8q04c", - "bc1pum6tdqpg4uwf390l92nxd0gwy669egduuec7k7jgl45950dng5gs7eqxd6", - "bc1plcu0lakjy6cm375070p8awq2wj5uvjlhkear50mg7dghjy3aya6s6rhrv6", - "bc1pyyvphduhgd25ykuys0z8kkjaj2cxv03scf3lmy3gn4dqurg3umaqu6z69y", - "bc1p2pn8z7cxfssfwp4r0asj2n4dxmk37pj8vydlpc89vl2mdx6le4ts06mcd8", - "bc1pdn3rynl8cspzzwgezmp3xq4h837fkylx3022fw3vcp8d53ke6j8spqsjmr", - "bc1p2su7v5jmllhzsgdznv360e5pjvndzq34hk9dre5h5njv4e0x46qsefanyn", - "bc1pfxdgxrafyjahnh89pmvct28cuj227u84dmc4ejq9zaxvc36f4ngql6sjuy", - "bc1pwqrc3ftfms7xxrg9u8ftrxu8v0elqg6dz7sjsguwtmuz2w3pcelq8ncgc4", - "bc1ptxjc3fsarjqdq6me4k5hv3nnezuk32gkx6k777sanllvth33fmxs00d634", - "bc1pttzpl27jydqg664k8r2hw99yqxeccgrj0dsjfv4g9m6ltedfdmtsyheg88", - "bc1pgh3lzhm5gx9krrrrvlwfu9nayapmv42085kxkhhf4xcsjj0naf2q944mre", - "bc1pjze7tywhaggcm7l6669295jsv8eu9c6w5rs29njtkethnvavculsklhp8j", - "bc1pqqg5zzkvaakp7npxj8s98guu5rfpfg0mfaxvg20h0qwpzzzplpws8qcxf3", - "bc1pascavneft0h6ec8tx48lc8vrcuq8quhvrejpfpgt22sujnz8pkksqrwwg6", - "bc1pvc47kfsw3k5hl29g0ymd4vearufwva934cu36fmsvwm50jh8gm5qzzxfzn", - "bc1pgrghp3uh588p50z65vsnn3wn6xw46vy2u8fmsm2n44yap6tlfu2q6cz26h", - "bc1pdppmk3wfjl8gf8vlnsseupkcz27p3mwd3t7ecz6unlspr9n3xd2su9eev7", - "bc1puxcyayxaag4pav5t2fuxysxz5q96w4wezhst70p5ftrz08nach9swrjsp6", - "bc1prhltpqnzj32lzyaaqjz0p2a2c8ttvf386vy3hflku4wg8a2ma00qd3esaf", - "bc1pnkv8ntw4scfh6fxs2wyg0cs9v7wf4n8hag9nam2xqtrdt97c6pms7ps2vu", - "bc1plu0k706cf323zusy23lgcp34q57trmnlumv346xypxeghqet4s0qw6tkl2", - "bc1p0486kq8ya96d9agl60j5upvcgjz0t0jscqfz00dv55gp8fr58qtq0dqr46", - "bc1pjjqhpuy3ypysd4ft2eyvcjqwrvfgm7ndhqu74dqk30sal86cg45syjmhqm", - "bc1pd5tpzdtq88rqfj96t5n99ac3xmjdpk4yxtr6x3ewsx5gmxj8jxsseqamnl", - "bc1p0dy47zur0pxtud4k785demv2cey95rud5yhqcf2e2tmzzfm4nkds2vgj0z", - "bc1pe7q4n7jygcxu7el975zasj6dr0qwyyg3cte0zrdut7lhumyuemls3maptr", - "bc1pwt7kn2l98kegmrdw6sulewua0h988wn2nq6jhntmc6hu8aeg87ks4teet4", - "bc1p888v03j0qq7wt99t53echxze0se9ju2pjxjxry3jctc8pc6h2ycq34tduh", - "bc1pyselgvvu96p60pum8hcgnt7xh5qs7aty9l77amhjn36v0jeygwxs4v7ay5", - "bc1pd6mv6xdy8fc56qas0yg7ysrjw8a868suwms2rlnqhehezlhm5grs2klmlg", - "bc1pucj53un6zn00pqzt59f7uashc3cswzle4n6t70wgs20waf58aa0sjpj9p0", - "bc1p2xa5qsehhs3qjaz6zm3eaqch49e8km80uexwcfxg6wtg432rlv7scdjjq5", - "bc1pxr8gmflzhh4nxys93gjq6xznuhgcl68cp4mpwjpc6apefecahxts85gv53", - "bc1palxr2qr2y8hv7wxskf235va9mdnqdjeg2r6znvpmlpnth5wmmemq60c6rg", - "bc1p7dcljdkneu8gm04sgrg85jkhz5htpa2vpqc6rf9s5ghf6vgdvrsqrnzxst", - "bc1pd3r540ylaknyh69vle3kjw4c6fjxayl3xa99w20zjryqlqsc8d9qszdqc7", - "bc1pll9swjj447kceznvezapfxcvsk3yeggvscwxufl9s9xftc66mrxsggepu0", - "bc1plp8z6q5rzn3x5zyjrm7tg73ynsl3wkncu0wq2jdnlyv4lpf7yueqsym8wd", - "bc1p6afs93upnkhcg0gfe497hae2358vmpdgu8g3nadscfxnv7p7ztfq3keqc4", - "bc1pctxke465mc747z5eamhgt9ppj7frv0jc68w8erd62rmrer56hutsq2xmtc", - "bc1p2kddqjxw7tnymckcg68rhrcypx7mjxl78uvv256le24um53p4r4q463jmg", - "bc1p7krznh9xnxg80m5enpjpz462xkcgahk5dv8ua9g0r5g57x4td8vs4lkaah", - "bc1pr7vnuny64tlwgzla9g7y8emku2wd04fclexyjftrqf2uef509w0qus0n5s", - "bc1prx3wekty9uykm9s4hemu80rstxnqpq55rf75528lmp8v9xy0klzsf7xx9j", - "bc1pntyv4uhmmcajj6gt8s5mzq7aqhedu2wqpnfg2g44kae4v5zn9h9q7qzz89", - "bc1pseh88rhfeczgl2j7n0fwfw4ju7mmfhwtuhs40vfuy90ga5gadcnq0g48pl", - "bc1pev8gft9e33vt9ssp48jzpdf8463ur0mq58m0tfdaumydmqzrrslq9u5khk", - "bc1pehdwypzm2na0uq5ae5vsqtlqx8yzsg2vplxar76sgws8t826ns3syy7nvf", - "bc1p6g280v24uc6wpxq9jv5lcpfx3595cg4hch8j54fhct28hkt43gsqwr7rp4", - "bc1pp63vn80nf8yv2xvc6u7y0nkrr5uh66lw4mycp94hqmzz8l7gcznsldv6sz", - "bc1pu6uy0e65tas9gjjyzx0mtd9xys0vr3kpkls297jhyaf0fm0tkjsswqx9pz", - "bc1pqvd0pj40h26g32j4cgnkn9m879u0axs4s26dnwnps03xvrl55dsqjff65y", - "bc1pzc7zrkdq0swvrk2ushq6jeyyv02jstvrqm7v9ef6hcvy0j4crczs6ya68u", - "bc1ppx40ay53fj5tefcxxkgz5czjjdjvz6sq8hlq2mp30nq3vw8f03mqptutx7", - "bc1pu6ygdxeqnpt7f2w2xyxg94m96rf6avmp0y5xfnyv69n3qcjf5dhqccusam", - "bc1pp8md3dl30pxnj5l739fvzj4p6069nhy0tln87k4ctedkysm84n2qqwzm45", - "bc1pheyfu8qlm2f8uz29w46479y0zgnzq53prrmmfzqzyra3g08y58wqmckas8", - "bc1pj9rnp5px2mmsykha9zzhfcprgywpft2g84wx2hffpnt4npusqcns26n6y3", - "bc1p8gkwzddp98wakfyw9wepjc4zsltjw5vxwptq3pksnvns4jepjcwsncwk2g", - "bc1pvkxlpqecvmymaa2jur2slymtefkkry4pk2t2n7jpc2s9jx73nzds00ukua", - "bc1ptuccvpe76ks7lujkas3d6dxhhnt5u96ldcu95gmcw63xyxpjm96qgmkdds", - "bc1p4muljhhvggqwrd44xe56kx9jmj59874v9d0vkdl4cqh9m2ly2kls4w2mfm", - "bc1pvqrs2vz2l8mghndmd4x4dm44hszuf6lt7e352cf2wxj9l4c27cgsmv53nu", - "bc1p2hhpmzauvwz32mqpssgn6wthf7h9t9rnmcpmny6n5e3swga9593qd2naz4", - "bc1p2jppdvskr32lrqn9z9z06ju9l72xpa5ezsz60n83ndguf6x4clqss88lln", - "bc1pcadryq2502fr5v7vwqpq8tjfca4ztzhewrdqgu9m3q3v92u5qr6q5e8n3d", - "bc1pvr8eghejuhh6sd9h99pjzrv92xr6ednywewdmntg7ennd4ehnq4q2rtwqy", - "bc1pcu85a7jav89h7k58ap9z9tw9dq5sfjed9dd8ygj7mdwr55dys0tqkrp06d", - "bc1putjg02awsl6hzggn3m97gszeujsqdg6r9wxa03djg5fz6p44cf4s0dd4ws", - "bc1p94vtkd0kah5dm0rk4r7cyr24zjg3m30p8g5lt63c70nz2kdjr3tqf85hrm", - "bc1ptc8kkez65x8tvmuw948jpzpkwgsv58tn9c80f9rfekrr45ecg49qurpzje", - "bc1pzypcm2yz8rkcrevddhva3um2pqv62dgs6unvf8zua899h0ctzfns2m7gkh", - "bc1pzeunj4rtx5dywjwm3cxj08lq5ax26xvz0ngg3ancp587qlsmdn4sme6rp6", - "bc1pt0erd0hm7drdzw5z6q5xw06qp0uv3rd3y45mx0p6aqn8w4ptntfq3wkc9l", - "bc1pxrhuuq6jf3zsx3kwq4csruu3es9q6zjmpj2xn398yqtec5zgavaqcqqur0", - "bc1ps9h8ymxcl9q68dy6uef0uzhh2kjnqcem6974whzvut4cug5q4qnq6fxkww", - "bc1plnwds8ekfmaf9zm5qmdnr0z0vgechz33fvscjk48ap26tkjg6edql5ee83", - "bc1pc9y8zj6544yvyx3gq0xs2gqa337q3pq858n6txsklwvn3j8d5g4q2zl04g", - "bc1pywvd3kj5pq747am8ln20ajv7zqsqunjemruanf8zdjthseqvk67s3tg87u", - "bc1pagq5rs3f68w4fld2qfwmmy9lyf2pamprfruscfpjlpwuhjz3j6vse5lwmn", - "bc1pghpefz8z7km75zwd4l7chl24dvfpu9lln2deqtpr37ejzx6s77jqhfdfsq", - "bc1pvj6t3kx5w80w9w3st86zamtwqa245jk4u8ljrxk0aw6muqwet5pse975mx", - "bc1pe9qmce33r3j6x8qnah8nqd9u05mev0vsxuq0p55r6jt8dzck40asutlw59", - "bc1p2jcy637jtema6hqztfskp5ypr9dhyhrgtwwuc36d8y84ysgxrf8s5ag833", - "bc1pnegndgnutk53uxw5qrtwz40mlf9sc2kd9ac4zxhjv0hvedun35jqy8an50", - "bc1p6clcc4sk03grpf03u28na4ffdhqshqnn9ea07nj5jqghuu7va05qyd2ktf", - "bc1pyf9ee8z8c724l27pfpwx3q5ehw0hanyvx2vxm47002f5c7t9wq0qmx2v2c", - "bc1pe2ryq9meg9l946v3d6mps72q7fpfszsxyn7q5w68pjssvk7m5exshjxkrj", - "bc1pdx909heg3tpw0c84r7wr8sk6gz64myx6fss86frjhjk9kcg2yvrsh32uq0", - "bc1pq23cnjqhtqcn79rvnz3ek8dv2vnkq38dajeg5a4pu9pg3aewllrqwmrh6g", - "bc1pquk0qv66wcsg2y8umjcdvv3t4ptvjnpdvxznzd9ad97aff0ywtdqq7uvmj", - "bc1pemltkveqhxhet7n72urasjqz2egf2asn9sy0swy37svyayp8jjgqtjjftn", - "bc1pqhnwl2j7ac5thggcpe6dqcuwfj2vmyg63r5wxv4ckldpskzpunhqsnnkwe", - "bc1p7lrl2w8wsc43qwp57j96hjakyrmnua2hprepkcwglhzs3y8rrqqqrq9ywm", - "bc1pp7jtxtukl6jpsgfulkz32dc0p3wwt3vawxfdhvds2kffm66jxuwsjvyrfp", - "bc1png3nd7rj24cnpqeappwly2sw9zyd02qns2xugfdspeaws9k6auysx6l2pe", - "bc1pt42h9530n0jc9u8jjxjewmrgu8m8785amau0r4w6teaamked0eys3fmw26", - "bc1pfytgv4qj0q0vmv3gmd8r6m7wn806qejjvnrm2d6jdlpxkttzdw3svskc5s", - "bc1p2fs7kh7496f9g9uh372u6e7hxnv5pafpzlvjvwx807tawtuuu7cqjlk78k", - "bc1pgep9cwg537m46tckwu2dh4x79005z2actrp70470ajquzdmjwe3qvgfhml", - "bc1pc5c97eyzs7a69lu9tszyqvykh99lxn0l4f34k8wk63xf54sha0wskz4g02", - "bc1pswh7jqj8uekrgalqv69cw5lrkv8rmygnxgyfj2nqz4d3420xgudq09w33f", - "bc1plmznh7ffyq4a6v39d96l9g2g6s7qhlza44nfn7ewu07883wkyadq3g6szl", - "bc1plw2zklz8y6fk638w62zxqqmdrq7ndm24rwyucm9a0hlm5avz0klqf3zyfx", - "bc1p333hz9yl4r0dfugxtpydmyhwqpre534pwsee6hzazasvyzv8fdxsy36cgj", - "bc1pxq4ptzuqv360nz0ycsuyzq9srn4m48j5zyyfkayyf4r09ayh5xpsnjyrt4", - "bc1py6zfuearlx5qnt6zskc9ffeq2dcg84kd0hgasjnfjmuesqrtqf8snjx4ep", - "bc1pyxnc028nckmqm80hrur4xwccvk9ls673y3s5c53k4pkdwv5khz7sgakrpt", - "bc1p2fd7lkmh4u7gfuu3e2vw8u6ayvr7achmr6w0ya6c6sqe8lgysjmsjvlv70", - "bc1ptr0z4rdjtw8uqq55rjc5vd7yccpme7jedmpy97kavww77lk2muzs08yfq6", - "bc1pwm7hrdz0rxvxu0v7g3ynqaxv6fylvt5p6rdkmqkw5wfgpeah7yeq79zk8e", - "bc1pxtxearj5wm28txdctplvemxwch60gvq3kmz0yxw2ysxq6v030frse5zdxh", - "bc1pwdt6g9s9h9wratvhu7g8slqta4ez6m8pw7fzutufczhwtyjrlq9s2xyxrp", - "bc1ppy295s0j9su3n72ve2tklsnqz3lv2x7mjnaaylvtwsrxj2959zrshj769k", - "bc1puudu66gk50v9rv64lg6fwvteqtfhymrmemeny76n69h4czlh94ss0r8uq6", - "bc1p3j7mzlf8m5u72slffhgnkgvjygd7kr52gpc54jkxs34zh0gyc9csg058lf", - "bc1pyuderschcuvuc2s8n7egha5kamakrzl0qjvu3cz64enkr765ayzqsu3wt0", - "bc1pnwxjpqwzd640xjdww7qulr98rj96kg0l80l0rj0rjt48ngskpsqsu0ys5h", - "bc1pxa2df4eggalturg6d9vxuygrrvnay620k20w0f39t8vc4vmff2fswtp9x7", - "bc1prls7d4d4vmg6p54edzksqlqktlv6v9z9vk2afxy97jh9nmzak7ds3hv5ky", - "bc1p5q726uthfss04msvqpz4jdgr3a5uy6rqyfp0cccrsg48drlq3fqq5gvta6", - "bc1pjzexfp33tsc07n2ka60dkm6nf0fhd40fc23s6qv6w70qq03rej2snw52us", - "bc1per09vmh7lxuzeeq2kazvpvnyjaquas4vyfuftmq97cxexcmsmnjqe80vm8", - "bc1p93ayysz34uvc6p9nmrjlfj4kufxvs0s4l23favjykdymtxs5dwuszrqyre", - "bc1ps9856we8ey4tzwmzjqah9mmw3fg42uwake0q27h26068tf0azhcqywnz4n", - "bc1p2g640ajuuqd2esjfxw9puw2tdzdwxlfe7yzh85fzhwe0pjnmum8s4e56ne", - "bc1pc4z8t666asahpnswmhg57mrgpeuna4xaplcnl47zche89st73xxq5pjhns", - "bc1py4g0ljh3e0032fsdutg7ev59qytwctqul0rl5rt50jpsl3753mnsnygyul", - "bc1pjcgrp7a38vrl3fxep58ad23d6gnr0wq4ql6ut5fgk3m595amjlzsqk2auc", - "bc1pm0579x0ffsm0vpqtf05cx939up0ddn508kk5393ryen8g5g6wvfss3gp6d", - "bc1ps935dt282pd00x32ve2ywgh6walxjj3ns8aefq6exq0pc4sz7ghs4489kg", - "bc1pf3m2z8d7jjr7jgxgqrfm5jjsxgnugxx74ksv4ech80sus3sh5efqhd9zpr", - "bc1p8zrx7h2yx77gy8f0k7vlvzwyxv2ny02ajukqtevgl9nzn847uxys5tdn6f", - "bc1p3qu3f3vl979kpddtsl0998ksp5ey5mcuwyhp2ch7eprhwgx4ru8s22p9sl", - "bc1p073g668hshzgwdcvq0tzyqnfvprw8ap7e9008frxyfcs0lw632qqv7plvf", - "bc1p5dwwc4p9lds8avkyn9880lzlpyzw74vd3t5rpta7y9t3s8spxqtq36hr7d", - "bc1pgq8s3vpxgd5fu4p9rxk5f30ps745h95ydfu8hl4a0xrncyglgxls8pupfl", - "bc1p32xktp89tdy26sp6c0sew7ayjan3jnw3g8p76unqzu0mufydffqs6cuj6s", - "bc1p6mc46ujjyfk0cus2v4xf9m980k74v4y03nysg0ygnrd5ke53a0sq897r6d", - "bc1pxp7pwmy2ypgpausscmhjdyp395aaepvv7rrjz3q7y7zen4r5grnqmgquw6", - "bc1pnxtw5emdqcfc8ekn05vwr7ss2xvl0zm0t7xggm6a7usc4g6hf3nq8vp8z6", - "bc1p8c062q2pwjqu6ym3qnhcxtl5mlx3dyunlluplqrp8gz35fquyrks577wmq", - "bc1p328smfmkyzg45wm4ejjhz42e4xdzzkxlg3gfjftvqrmn08a2szsqr7tg7h", - "bc1psrpq3lsvu63k7agsf9pnn2zzjgjs9pwynxqa59rg0n9u56xre9js3vkepv", - "bc1p6v50nm5qen25ja48aaut0qfe3ygn7m90eaxuqw6ypj2mgvylzp2qw7h5kt", - "bc1pfl555a7nzkyamjrkn52hua2c557dl59c3299eklw2q0tuh5x2cysfp84ts", - "bc1p3vdvstuze4rxs94n7uejjqyt72uq90rgysla5vxvlgslw6r36xtsnh9s4x", - "bc1px9h2f4myfsjqvqj2smh4fylhrwk02eq2xu9s662f457fqky79mjs4wac7y", - "bc1ppljqg273mhzdn7uy0vdhnrfv7ud7pyrnnxqtvq4gavw8mzjq4uusvl8g35", - "bc1p0apqnq4n4qd2dj7ma2yc06350psdhvmeg8pllatqds5g2jcp5h5stth8aj", - "bc1px8kza04awcxzq73u04d9e4atwj5pfq75ha78nat0wnm3dj74uneqae9qze", - "bc1pdwqzrryz3sgam73czkvs3fvpd35vesyjelpla9mz3ck69cy7785ssps00a", - "bc1p9d0avg8nxdfgsmvkne4yj36ngra5dmmpru4wdnwy6awu9d4cqzmsj2aafy", - "bc1pcv988xfn0dwyr4naa09mur9rk4pnuhg9cf82wrjljnppwlv9h2tqxusfav", - "bc1pnampa8zj4rsur9k2lr3hrpln9q4tyfr7k7cs809rf9jfxtw0ftmsa7c68v", - "bc1pn40llsj84a50kwaz5slneqy6x868mmtk2khrp47x5dknx6xxxawsq468ck", - "bc1pzzuvwgsjp622yx2csr79q0mhuv2vadcp8jfw7lysj75zvw5q47vqv5vqx0", - "bc1p89m3j4vm295fdglwqjqfu9pday3q2d5jyyhn3mp3tgrj0477fumsf072sw", - "bc1prkmq7r4cg9rv7x38gskxzmktgcz4csc04ahmrkwz0pf0yev8znxs5vpwvh", - "bc1p3hf2nc4h74nj0rejse875ad342459gep58nzcugmgmn92nafx8zskx2fnl", - "bc1pn8djtut056slna0pful3y3tnl7z9cwcfyf6f3xzal4c9eh7he8nstphluq", - "bc1p72mtxsvvykr2vkgualy8vfwrlq358w2669g4yqyxzvatpyyd9ezsz2qpc7", - "bc1pjp0jkn4w6rxh4gu4m2r9l7sjqevry2enhqgl87dl2mhlq7lqa86shkpn99", - "bc1p3ztthm736ahzyt3fukx93j29hexp86k3uhlykrrr5muj4llj6ncsn2kak9", - "bc1p4u3yvp5j6hum48q8mm9elry3ftfnetfwn77pc4el99syr732x4zqa3dmjl", - "bc1pa0wp2nhgf2fuv50ccaftkfrk7gj66z4cfghpx8h3t0tvggkzxpus60x5f7", - "bc1p4rzjmxepy2e09azth8kdkgzupzjt7ywspcznmj23j96a60dvxpdsufmaw8", - "bc1pqtcysy2k4r9kehe4t423dwa0s0xsvpux5rjczxhc3tjgfpmmgvnq20gz7m", - "bc1prehjjjfhpyvsravrxtkhvzfsj4sawjcl8zz9mgh8cht0pnfeadeqj4zs8q", - "bc1p2meysrr8ycejzcdkfjgycnyz40cpdrpj3kh0e6p6wjsfyks45q2qcj0dwe", - "bc1pjgjkq72mj5nrg6kw0cdwry2sv0j8e7k5x565e6700d5atl7wz64q32ulwa", - "bc1p9hdmzp57vemj98rzc8zsk34yxaqsvxua2uh9076s0zqz4fj8eqtst0l4l0", - "bc1pyc0rsvck0juk27lk29smyl5z8yta2pv4zj7lmufkj4yt3rpfkhnqn7nchq", - "bc1pgswgvrmnfm85n9gq6z5pklnvel2mtckphttfv486kt5u7lxgdwzq0hhfm8", - "bc1pstvgdg8mgvtfw03t55q94d85t9c9vezdqhgquj0h5sw2awz5ssasw3cjcu", - "bc1pw5ttyh5ua4qzqad2tf0qexcw0f96am09f0yn4c6eynvujf7vudeslerjnf", - "bc1pkyxuftxptj8nf09qx5ea7m8zvy96x7uuhhw6djwjuuxymqxwxj4sjha5mr", - "bc1prs9l6eh83y5djk7y0gavta3mga3k0jgvsutep7cqdrl82mym6jfswqk8ng", - "bc1p3sxepc9s8ynezjsvxu3kf3tctxdf5aq929x35yanqs44r8yfxvjs4kp74m", - "bc1pljkwpr6vr07tx734sd9ggzeaq63wa4awxv9a8jxyyedwgpha9rtqh55tgj", - "bc1p9hs5zekvme38y68vf4h96tawttx3chkq3n86d90hvnlgwghqg3qsy4u0c9", - "bc1p2rdvts45y5g66h8gafqtvr6c9d8tllnkv665vsz9n4gevn3zuewsxpl9wt", - "bc1pze7q3pepg5nqrfk6kwgetmepwl9090cml0427whkrly0pay4mpls23davz", - "bc1peg7zjkck5vejvkwzdcktznkfwszlpjxdje67lzdp3qf9cem99egsdjsklw", - "bc1pk0va5e4ewj436gvlyfqjty53zr05wsvvfqw7awy079hzt6w0vyjs9s5mpk", - "bc1pywhz97wsgu42khrv6h0dvq0amcd9vzgdap6xk3x62xph7j5v83psjj9q77", - "bc1p5sg63ec7pfc3wmhu89fyhxt7eng3syhmzgd6txuk8z0g7m4vz40slr54y3", - "bc1p6k26u2wljwa346ee4pxyj37s5jsdsqcw2tgp27yrfm7ercc3x43se3jzgv", - "bc1plvfqdy9d59g3ugrgvlrgz4fz6l6x4y7vgcz78085qe4dr9xytxdqq5fu84", - "bc1ppgq28vs7w650zl4e3mxclteexlfsv8s599gwanryxqc43huqqmqse9q20a", - "bc1p3gvepvdzewj9w98zp2jtksgjc07chzke8ww5qv2yrsq2m8m8qrqsgp5n2e", - "bc1px2mu4cwdg54cedz77anulgrtc68gy65zs98sgn93aej4w9hgcv2s0xlj8s", - "bc1pf00edmzpgvnjsk3sdswnzmzzjeugjfet9c8d7nggdcm579w4ktrqygz053", - "bc1pqzhn4agvsdt9uk6gwl0se69txgg8amqvjedyqmq3yp0cqk63305ssjxm8z", - "bc1png03j5dcglmx350gmt7h3zjptkwyeu3daylmqhrk6cel7lv2m2usfz247j", - "bc1ph6tkcpqf9za25txtrdgg7n80v4jtd9ctjt925aa4hly8vk3den9s45jnul", - "bc1pxzhcu0qxk8tk68hcqk5j0hgs4qgsehvwdjrfe7rwmzd4d227fajs8f59hg", - "bc1pkq9456k4sumth8ljspk9ene3zucp25zrg7zrrk6pyp40qdfm2glqt6pezu", - "bc1p5rknsnjxuysmumtf2vgquc2fu4c8fmczqgta7kh9u0zwtrh6sp9se2tcsl", - "bc1pxk2t68f88emzx69jmwrfranf8phrunp3xchxzmntzhyegx2c0q3qakrs7n", - "bc1pgyq2qrflxakj703a20qurezz6sk829q57npakz0ngwceu295euwsa6sxz7", - "bc1ps4ldvqanezu6aspajteu048url3fpxxvdcu23p42kt4sd6n26hjq9kmrpn", - "bc1ppufgmtkfnv0akan4a4fcxa5wx6xltj7uyat8gjxllfsweaf2lzxqaudkxa", - "bc1py762lsztgjps0dymjs97wx9s7j9m8swrv46lf686lrcy8s30rm0qdyaqpx", - "bc1pmxyu3d2s4yzvmkedzzj9n0rlnll6yxguplatgxn9a5xewhf8je9sxqgwl8", - "bc1py7d9qp4pruywqy7pmu80e33qshnyxvfd56dqg8848qyx63u0jvpqkqtlkv", - "bc1pn76thds9tt0vfwxhw6su9qdmu3nzhcxuf483y02egs8jt4j2sesqcs6d6h", - "bc1p3rzshqmjv255s4npnsf8t9d7m4agzhg7ddy0zg5j02px0p6etufqzl5f7w", - "bc1pn4jluq5caqc5fgfe5cztgszwyuzuqggc0p6adr8x0qx4wxjqd69stazrcl", - "bc1ppc0g3tf7e3jkzs52s2szh3ngfg6x44ns9kgtvcs2ghz2xhpuspysjsya5n", - "bc1png8gjlqmhcquanzlmhx8gc8pwjsccjad3sn4sxjfwmy3kpcxfl4sgzv4gz", - "bc1pzxswmdptpkgpw23hz3jzj9v0dsv6mykcxf66a7a8ecgvyeh2lwjqruu3zn", - "bc1pkwaxtuv7qmfwuk0m9yvax4h4589kuslnc2jnx59ckqd2xzzxzj5s8fpxlr", - "bc1pz366uwau8kdwt9k5wjxme5g5935sv7gqkt7w0hy93er0ckjjlsnscz9636", - "bc1p4tmprycnhwfts8dnrzcchxqyrvtmvylxhcst4y7qan79t2yc008s4whhnw", - "bc1p3r3jn9lvw9lp8w9sw75kgzvc6a5e3l5d74axpuu5pdhcngjn3xlqseda90", - "bc1p8s39qzuh4lm4jsn7tejmfh5qcz2pzvg3jeekx439sxl6grd34vqq6gqrwq", - "bc1plc5u3eh2sarvytngu885mzwj4hc7dvjjvk929uckdlcwuqtnewqsuzd565", - "bc1p0zlzynhd2mvylfqt0mt9dttscaqwe4stc9qzce4xdghu72r7fwmsrr2jvg", - "bc1pzge8p9qesavc9gz6ylh68a8j2av6vk8d0v6y3jmrd4pdru2ljgksve86ua", - "bc1p2mlgdm2kylyfyvvxmc6pd6d2l3eqnfer0ytsk4f9ah8k0944jcrswgrz2d", - "bc1pxcqq85jmj6ygkwrtfu9yu5h98knu5svuq88jf2avx87le28gq3gq823ayk", - "bc1p9jujhj6kvq3fuh60lhpa3wurjx6uy5hwnfm3z9lg6xecddaqxk8qp65j00", - "bc1plntux0ml25lj4t8awv6spdt90eumuecm06pydgmhcrvdxnes5q4s9aj3k5", - "bc1ppa66pj6nmtcsuu5avcsvqj959fezx5v2nx89h663k56r8zfvhqwstv8qvc", - "bc1p38m6kdylx6j0wf3zkfhr7e0uluz9p8989p5sr9cr45x69v3t5yxqd235h2", - "bc1pzd32u5rjy7ace9mk5mfepgwfxkjmfctz8ef9zx5cssfqussfdeys735k8w", - "bc1pvt95cg8ppx34wnpze8we4n0qdmqv2wanpukvyj526j4eyzd875wsj2fhmy", - "bc1pssct66sz3vsqeutcvzjxq2xr6jhzcxf9dwrtwx7s6m48m98e4cds60nn6g", - "bc1pe36u0mm2kxqj0qtzv0rjl7mewy498mwu3ak3gjsaamqumzv2jppsqsfhjg", - "bc1px68tf6n8dh2uezktv0xzhmsavc0kxzzgt5z5aw8085j0gqrkk4zs9evhgy", - "bc1pym76snmsdrarkrwuw690c3dp97nka0f4zkt3xxkupwulnsjgf28s9qsphs", - "bc1p0qe2gt8ju3xl62f5a4mww2kzeg2v62xxgrgqaxf8aahd6u4wdmmq4f09tf", - "bc1prde9a7wc5ztcwgdr9tc55jwzx73we8lyaputtl8559uhzdysnmrs79vqz3", - "bc1pyrzhu34ftpa75jevmz2pyy0tseqtdmrd0ujun6h4s0s6ml6kfzksgvjjv2", - "bc1pz4gjuh9lzey3c20nx73vu0fr7yyk5fh68kkv7j68jrllczf69jrq2w6ru8", - "bc1puxdesnj7p9hlz7zyeezua9kz558usme4hncd35xfdqfcxddadkys7usdfg", - "bc1pslxwu8z9yd3jgejs5n3n7cka2vu2cndyrv6f3lamf4ec7m0yw5hsr6zn5a", - "bc1p9k5hvre3tykz8el8ftdmaf6l0j7q6s90tyuknj3t7hfd0t52dlzq98288y", - "bc1pukz39w4sz8tr4dkpmh3k9gtf97gkmd5f2kgyjtt2dj33k8vkdy5q4kf3cc", - "bc1p42s9l8agjfderlzw6d98qyra23g7c0zvzhlydsxtgrp38p5xjnqs5m2nnr", - "bc1p9p8edccam2hgzrvfq9tf5qjesvp0e7mtrel43qevd0t8xfknvslqndlhqp", - "bc1pww4td7hzmnptgz9v0rvs2dv3z3dlpkyk7l90qjsylvlyaar6e2ps6pfvty", - "bc1p6xhmtggkzuhl02d3ff769pr9fhpm555mlndp2xas9nnzwcks77dqn0ejhy", - "bc1pvtxaldhkc2n5artxlduncxvmyjggngeyplkufcanmcw3vgx3tuaszswdne", - "bc1p8zzsfnhmslvzvqa3zcy0ayurv8knusm28mtyvrz3fs3npppendfslkv0cg", - "bc1p4m5wxt939zq49qqqq3a8py40wre3ypltfz5vwtsed45wxnm4cp3qznjq7u", - "bc1pugxh3p6h0mf98vn3arlvvwqjffez0nxx74v72jcwt0n7zye2m40q66dwft", - "bc1p545we6pl9kdkj7kfap6xrszcw50jnlx9zkuajfqyn8ry0dj3fduqkh7lu5", - "bc1p8wahcnevsz4j665g4jaldqtyz8pq77w43smd5fqv8fadrjs5rcjswmufdr", - "bc1pexcw0lndf0seusfwjf77q7llhc6k0heahf5k409gnu3rn0vewu4s2d9rfc", - "bc1pw7st5lc94t0cdrnz0lw24ua53jmewh4rvzaggp3dnzwdhneqht9qmsz244", - "bc1pp3d7sd63dwanwu7m7c0nlz2l0qkweshuxej5mgl7px29lgym4j6q3h9g2v", - "bc1p7djtret8ey085eeghq98lf42tfqh0n56y33jtxykt30wmmtxftvq5csqqs", - "bc1pm694wgczsxdv57s7fdaapyvzrdpxnyejmh3jdffwsuqywr5565dqqt4ahd", - "bc1p02586zzfnxxk9env0hjsvucp3utsade8wev3zymaytpfj8m7507q9mkps2", - "bc1pxyepfw4k70s48g09y0gmuvzfqldpq6pkwse5nrmcckdtpxft9ctq6svtaf", - "bc1pprgf2frg8g3lvaqr02atwa8wn7app8nnpg9nf3nsx0u63sp8y2wsfcpmwx", - "bc1pevfncamaxmthgglkkwyj8220dj4myv7x2tr9gka0y8u33cp9cdzq4s3fpz", - "bc1p3yjvf9gfc4qvm48nk3ae5zywrlvlah7l4eks4eq53kjdmnrj0pmq7d5ylc", - "bc1pe7l40cthelkhyxyy03y72u5d4p74g97d5lcl2pvcekxek0fanv2secftra", - "bc1p33gxn44v282w377hqsm3qptk8gq538zdmsr8lv5nhj2vtn0vak7q796zgf", - "bc1p7aza6mfpe5y6edvqxhrqz5mc05u9w0xrqu25nsv4my8jaze3pnhqj7f6mr", - "bc1ppq50amn266f3g8407pdkqjtshfq8ythyjl24pwe87jnswlzggucq9u78z2", - "bc1pswrtvkl94nqpmm5vt7wcfw2rpk6lle758stxeczssgnamg35qw7q4rphlh", - "bc1pg8whv5zt0yk8kpe7te9q4akmjqhzk96pq9zppn4eplggh2z8m4eqqx3mfx", - "bc1p3necgfznc53u7wl47f8y928jkme399jdt3dzysevdvqz5kgzz5aqz7qvv4", - "bc1pxg77p5xc55ean8z50gx6crx64cc4vvsfnrzx62mdpshdq65mjynqyqt8rl", - "bc1peztdam2yhw2d2jlrtjyk0c3hc80u4tyd78rqm05kugzmzgdna6hqlq97hq", - "bc1p0pwe0dwwqs7fkr7e0kztwwj80qy7jvz2na6le2hgkej4g2vufjksgktxt9", - "bc1p5gq4r9hh96z8xvcy2mah8kxupkvv6tdaaltghsvsr820e983xy7sc65vkv", - "bc1p5lqg0hf7tp0tzwphhnvm32exwx3r39yn9ntcjxne4k2q6y66564qzv3hrd", - "bc1pg0wj566a3lpxw84k3sh0m5cahddg24w4575cas5uwcynx2h3jxqs2mldv2", - "bc1p0qy2gl3qpt2fd29udq3j8fg2qff4r0xcul4y50482dekpw7uql0st8ahzh", - "bc1p8j5rrfuy8qu2kmrjy5kl7lm6uun87q7fd4wcdy9hdn4sd8779uas89g9ea", - "bc1pr7nqc7qagfllatk9tfylktmewvxy2j8p590lgdv72khw0cq9e69qvmvaaq", - "bc1pt3ez298y6tys05y46mv4ln6jj85htmum8rd97r346k0aqvjq8gdqtjq3us", - "bc1pp9wcln0gfhwufzfmt9frafc8mcpsngmnlfkjakwmtwfyfxfc4ycqh80rfc", - "bc1pv0yyr9s3uyj4yy273q9lamx3e7j556j5yytnxvzc2ece5zv30ajqhkxe7a", - "bc1pl667g7ys4yhetsgpa2du8wvn6rp0h90c27734tqduu0874qjk5lsn9ykza", - "bc1pszkjv4zzjw2rqem0vuynrhxtnk4hgwtf67s5e6e2fawwjtm9g44q29k770", - "bc1pvvqpzmvwyycz4x0t95de8d6u8vx7ydjks2pa9qakrp2kugk4qcgqan4x3g", - "bc1psxx6hkq5j7klqgk3hll8z4w2xjgdtyj4vfn4zzrnwec8gxre98ts34qvk9", - "bc1pkht6dupa69vcsaq30qedqdpg940ywa36qww2n4d0ct4n6vufgyeqaskcdl", - "bc1pnpw9200dfllszq676p8qdkewekzktf0ddu44k6xqasef0jacd7msuq5e3l", - "bc1p0c29jjuprgn8lsj60rud27kzu7f898ax857usjtnwhm9zr9vjrgsm55pg4", - "bc1pcsymrz2lj3je6qtlz4wm7834fhfjq6p8kkcjxqz0nlgu5t9v755qrskd7k", - "bc1pvez8qxzhemjykslf300v80juqsc0lhr0mk8p0fkwuusmu0f04ghqzv4zxy", - "bc1psk83aag4xql8q08563hpyf9lvw64a7dgvsj5wllvunkypva3hxksyhxcea", - "bc1pxxgfuggttc6eux5tau7xm443erz25edl3ewm9lemusmmc7zhgd9sv302q5", - "bc1phjumzd5xz5pjfm22v8elz6ah82nsq0y7wpxtjptaw8rpuh6umuuq56xkw3", - "bc1p6d7v3v4y375v06s7jmy9zz4266fflyug2mjhgpcz6hm9446y88xqdl0uvc", - "bc1pj294esckuextsl2slajxmdwvqvcvy4gpkhfc83fl0kjh3w03ahwskz8u7w", - "bc1pj98ksyr5jgqd8p3qkwm89gluvr9w8pe2kh8avvu02rw5gwl7cu8qj2c7w4", - "bc1pvdfp4lq4k65c4k86hcsven9hy5y4w8dwmzrmsc4pc6g7r93nx26qnput5n", - "bc1p705aka2gugypqa9yjn9keczf2txcxdjdval2dh20r5gvht9q7n6sp3rlxd", - "bc1pq7vc4x6mq0lv5xf4hku02h4a9xt3fn4zfktnrhfm763600ewtszsa2nytt", - "bc1pyl9e62pz7jjv83n2cuqcsd07zqwhs9ctj5naghpn0y5nsq20kmdskcag8n", - "bc1pckxhd6ef0jfnxq73dc0jr5quwkzddk9psf3fkjm4gtq5e9c64mwqvffn4u", - "bc1p6jjeflpvrnad0fvfcmc3m4pt9h28vuurdx9tgca58c8e2j3kf45q6qg3hx", - "bc1p8dn2esupp4lp8slqpd734ex3y3nvxuhstcf5p2ene900emtcpfxq3r27e7", - "bc1pgqrus4kjx2avwdq6zva7ts40dgcls6syevmzvx8xz84zqxmhzhmq32pzzx", - "bc1pzlvvpdfpden8xmxhzdp9vlkzpvr8am4p6aqd3tdf3uf2z34gadmsgsfuyc", - "bc1pqwxdzmsmzxst6dn746fhrqhc3waz74jkce05euphg3l4g6ewlqgq6u95ae", - "bc1pp0g5wkr2nj85jvv50gf2we3g7ztu0lzar97f5gjyyd0ugfr8wt5q72kjcd", - "bc1pn2gyuakpzqh4djw2xncrqqnfvexazc4salz7jn652uuylc2sttps9cxnxj", - "bc1pgs7ldvqpqptrmvjfjkz0k23f8vpfpzu73qfy7w0t89redngmdtxslzmzsc", - "bc1psxgh2vcslmk64jegr82guqlhjw8jcuatsmylxnye340mfg496w7s66y0g0", - "bc1pfd4atnmup22t4ffu8lvxn7k3990cp2kxf6s4d9gv2fhlxlp8k92spxc5y5", - "bc1pjj6emywy86y8lf7aqamer4j320tv89arhpdaluh0r8wzkvx4ukrq357r9u", - "bc1ph028qmp88eqs6jlckmynyzye7g4uq4z2cxt0hkh886aryzsysyaqxh8rta", - "bc1pew6gzgw9xmm9zqjdss7mdqx2ksga7sttte4hczlfg2ckw0v843usxyv6kd", - "bc1paqz4ese2luqz6axrn573a6j24g94htqfkaw50w625sdetf50lkyqylwtl0", - "bc1pflwlevehucr6tn4k0mjmhsn45mnwh2trhhs4csqtlh26vw0anxqsfahquf", - "bc1phl2ck7zq8jfw66le4f2dm74ezg9avt3me7saaeee9fk7w2j5nhwsv6mw9j", - "bc1pnkjnjmjnlw86hgzj6fxrs3cndp2f3a2a5gvlct3slh432j9ec78ssumn7v", - "bc1pv82xfr4llr4cv929c78gr453q9ng99prkf894kywdx7qklwmcyxqmjr4uw", - "bc1p9fdkzlse3r3xqfjdwr8q28v7vda38ufu2kvlcxye5c9tmr38y35q2f80lq", - "bc1p4cahtr67dmmprnhsls2fkcz4gt3fysyn726m25m8dx5uweuv8rjqhqdtxp", - "bc1pdcf76p9ke9g2nxzd0rjqh87akv5x42fk35c5zw3raecz0e4fyasq387mlc", - "bc1prc5avt3kxtxfewpqsvffqc0n5tj5wmkrkpkknry8razglg4c4vas2evjmq", - "bc1pd58kmdd2p32qzzpktufq6c28d36wz9jpje24ngkdzyzt67z7tv6q5tv6cv", - "bc1pdtrru2rquvpsp0uchnxvpd4dthwcd2yxv67w7d5ruq40gudfundq6utf4p", - "bc1ph39gmlazln9ewjan34tcusrp69vsscf8wld5w9fekptan2axwgfqccjgh3", - "bc1p2m5v54shd74tk9vkgla52yl4zpg59x6xh2jqxll5tmx50nlt3w5qux4xh2", - "bc1p2p97c94r7fvzwqkn3rterhl529cnc4leptfjpe2yw0ekcqsd0k0sszf7yt", - "bc1pv5sgz09l0w4fw9vsgzxswg038gjga0vcrsw56v7u5dlqwf65a2kqkru4c7", - "bc1pf6prmhrm6axs0vlzwlsnsukxfgj0gegd5e62j5sc8y8z3mz7xvksu80ney", - "bc1p7pnys2s3ykqwjgz8uytye9r3s49clx9nqudz0l3ta0evqs7s343szpjdag", - "bc1p08wghrjwqm8222594ed6utp6mekwdkhh8sqmppuhdnt0g6gtxknqkm7zls", - "bc1pmr48gultn797rtvyz0lpc5dw8q47p67w4fpmnw7yg9uwt4k4f6xqu7k7ma", - "bc1ptf7wdahu2et73hg7t3cvqyk72hutpyn60c792h7s0ptjll0eazlqyqwxye", - "bc1p0jfm4ueu0l98ueqayy5udl3nk6affmna7fvajuzgefwa6crsd22sl3eczc", - "bc1px64qf6fpe60w2k6ke0e42fhu5wyrj7wkk47rnjy9akvp3mn67wnq2zk590", - "bc1pz9yntq5fp77cp6ewqyg8krsmqqtuvc9uazaxzc2pfwldyuevmsgsmr8l6f", - "bc1pmcgy0zkmzkrds42x3qcauje9adnzw60jxmfz7ja0vezen0tga5zsdlaula", - "bc1pplwwgu8dznclmehmz9p9yc563uq5hsp0aw8krxxtjnvw84h63fzqefecyc", - "bc1pmqyke0d5xtx20p2sgw6kdeza98qt7pxvjdcd8yxz9g06xlwql3qqpl4zad", - "bc1ptzcwtanml3ep7vsw4qdukaxgrfjzpejtygjdnmsl38ck5m9dejyqfmmzj0", - "bc1pwj36alxphh83fnhsts8ajfaehwus6m2ljl2kqk4vdyaqfkuk9q7sjlgugu", - "bc1pgdn0lect49s8q60v7kqfqkglraxd5lcrt4gnzan34jgv693yrm6sq66d2c", - "bc1pst55c8p5qpsmuzf30fn4a57tzuq08y2nyvfl5danuxq93pq8ccwscha3jc", - "bc1pmwkzrk2t85gstxf6v23y0sxgmmzxsr8r5s6vndt0sqms4x457vas5n6q37", - "bc1ps76lgx7nwgxmc5wc3dngqznre46f80srd9cjtsrar2ydch0ev4eqyyhz9h", - "bc1p7meh4eh7vzz4nue9pu7fv50hlznn42ja0swekeaq0uam5dj0tsxqkt592m", - "bc1pdlyy7k2hc9a3pf6cmtayf56v32k9z6nspkzdegy8pj9stqwqr62q576uqt", - "bc1ppq8c376neqqazm38v9lxg9aarv8v2exw2ffmhvv8l6xezlp0l72spq8l4k", - "bc1pe9j925dnegcg7aw2yygp6pksuv69u6a2rctu3xqmcygcxp7pw7qsfzwa8v", - "bc1pf5570tmzewepfeak5p8yczz9rtvxfv4ujx0lafnwyuwlru9dwpks04pe2a", - "bc1pgu5l6j8kjmhpte4pyg5saskta57uhse5t9fhhcu0k9jttsdezymq4a5vke", - "bc1pzdadqdvupvrz5rtp8af0dxh0704r7us2zqcry8xelhhs4x7qpq6qkuddnl", - "bc1p660fxj2lwdgpzvgrq94mqkyhkapwhsdgxh9ljpmm605kuxpg0suq9e39tn", - "bc1pc579cml4uvqxelhh0y0zn35n0clfv0gfqzw2jugfkqfg4p0dxqkq8v52a8", - "bc1psv4g3shvwt3nqrz3lqmqwuzelalkrk07lh72nmmj990qrfk6azgswshxnp", - "bc1pkwvah7m33cam5d88cc03gxy8re7j5rt4przm6ud25fww6f90xksqur6lzm", - "bc1phtw40xghllqlsp0c06xgre8hzfgqjuqm664hqme8t4cxmf3ymt7szwf3ws", - "bc1pkm7rmm5mwk2yvwt2mmr9uny7387a9r7t5x0fduj03cdjhjn4jfvqjm5zq4", - "bc1p535a4skk6uxz9l489gurg7rwzvzlewc8fqgq3sj079nkf90t3zys9gwn5e", - "bc1p28f86dmc4846rzus8rutkk2x2asrhzcqh3v9yys8rezfkv0w2w8qzv3vz8", - "bc1pg6ad7gf6cl3dn8y9cum6pzutlanlxlqnn38kv2jgcz5sqc3j5s0q92gpw9", - "bc1pwmd4dw0gadjuj3meyeffnpevc7tnscps2c4w8lqaqgvm454r6lzs87xafh", - "bc1p200cd6zc84k0nhvpnu8esdcp9u3mup2sve5dsfx7zeqcjrddeqpsvg3jst", - "bc1pwp0q847c966fuyzs7jrcp5hcztyad8ttsnyj2ttmn8cnx52w9p9s9yctze", - "bc1pxn9vpt58vqclha965r9a3spg8qpsvkkq54c462kszcgmyua00yuqhqp6sn", - "bc1pl94hlqrdfvs8fwwn0nd60h5u7rtzs0gz3q3tdfdk04zjf2l5453qk8y0w8", - "bc1pshxe2u53heye8v5xg9luk5x2h9qsghr5f77rzrntqrmwr9a303sqd77dkh", - "bc1p692rr978frg6s4h7uxnwh42e37dhj7kq6kfmgtahduvrksaaw0mqxknrru", - "bc1pkwy8ck5jxfy69fsx0t6eq86qy036wyu02kt7pkct0rwpd6tgmfnqe4r4fp", - "bc1pwzzyzx3tqgayv7e44zch983mxm4h5y5g5dall737zppss5huczasyvc4g7", - "bc1p4q0h05ssvkrprx6adz3xaj6td43edzt3t5vz2wh2ntjtvkjlsxhscw7ler", - "bc1pgv8yts9y307nvlvyvxjrj64lhmmvdfg7xtxfh94nnwl2wfr9s7gq80h6ck", - "bc1p2s537wqlrlddxvq82fdszv24gd7x3q8e5nku3ztnjsg79d3hatrq88zeh2", - "bc1phpwf82jhmrumhskwrxln3quqpnvqsz2f50sk056xnscjw33ljkfswjyg0q", - "bc1p5lukd4km0fnrhmh0jdd2wmzxyvpyx8mhr5tgev0833q43r6tmh4qnampe4", - "bc1pxrmmp9caxyek7ehnxxkpmrryual48wfeg8frgrpc6ruscxyptwhsvcufce", - "bc1p9vjv26lk7y6wczlu56xktulm9f2m5q44ca5al6s087l2nzy6es4qs2a9yw", - "bc1pjfmt6lap7smmm9vsdz7ddty8ap57e9kz59qtcu3d3xkt045qr95swnrwrq", - "bc1p5gt62pm7v92w5sspyjl6ym0z5jp5xagup9jf35jqccu4sfy7zc0sxd7qxr", - "bc1pw8efx62j3t7surt90dr4p0xgsdn9dgkc5n0jpt5nrtjdj4efa60qx90xwa", - "bc1phtma9dh764gvywd7xc55ejgf4j4mjq9kkyny929ph0q4scj8675q3hwf5l", - "bc1p5y6aph89unlwtmm72953jqkeu7x5pzt4hfjnukrkyz9p8v37yfnsn2c07k", - "bc1pr02hah3lz3lehzv7zug487gd547fv9jmkkc8ghrc7sz2p9t8rq6q7hcqc8", - "bc1pvlxz0lz6dqcnm0mch0ytuf2scfa3ytgeqrmpwqs8pphazyumsy7q4k8mmd", - "bc1p7wduwcj7uvw4gsz7xhuhqh397msgkgud7r64zymgaqjdkq33vr4suk4tke", - "bc1p2587pjzycp78vs8p8ry3r3wfv229snt9qpwm29kfhr9p4yr07lwqdhk2pk", - "bc1pn37cph40e7r7umlvp8l5hlk427dvs2gdp20wc29ucpsanyxqlxzsf6x25v", - "bc1pu85vea6ru6n3qel2mvkcu7afklf6el586a8qwvwqekuqcxcy460sk77cld", - "bc1pdtrafeavgs8s7funwh2ccrw6q38jj4fgnwe2r33nrqp4hf3290mstc3tdu", - "bc1pmpqrq22nd9v6dtqy8cxmcw0g20ytcctj07vuz4lf9hvgy5t0zsjqelsfjr", - "bc1psymn9gyfvqqpfw4ga0ql46d8f0qqsvgrhdr7xy40ak57nmxpeamsa4jrl3", - "bc1pzyq6vetded0welckpd24canjv2vylnhfstqldheup857ryex3c3ssd593a", - "bc1p7mepdykc0achlftylmpn6d7yk4er3ny0kz0xacqsjvf39q323vls5a4nkq", - "bc1ptmlrw54vktlx02fp3drzq4ncwrwu4t2qpmyrs43xlax7eeudmsaq6l9dsm", - "bc1pyjw6gqm0kuk5ztvyp6r6wp8jmed5jqr0fn4ad93cyvlwkrnrrprsse5k2h", - "bc1pjzalnxrq6ha6wqzxaladeauzav0gpfcxfs39nekpxe6twk2w4ptq89gva4", - "bc1p3txqxcsf7hp7g9yz2arnhhr8la42llnhdz95yxxhmn7f5nh3xlas65yj7n", - "bc1pzzt0n2lf3hx6esvjmn7v3zs55vqm668xl4ad9nlemgv3t3ekutmsmx2fr2", - "bc1p8x5fg6mpg25n47e69m8p85cdun4a086guqnn9rtj4du7d4vz4l6sg6060v", - "bc1pl9nw90mdrw6neje8kac9943he8jgh96s8d92hpgld58anthjey6snsaln0", - "bc1px4q9ey6m955r5qtjm6lfkam99k77t3gkx2qr85r3hg4hfdycn3zsg5lrk9", - "bc1p2e6cwy2mxrejwe9wxwmyz0vmmkzwfhj9ggy0fn0lqc39c0l3q8nsy0xndz", - "bc1pw8gyedeu4uskhppsc7893gptl4t9qdr0keg8x89j0fzx5xy7cvfssyfxdk", - "bc1pz30dcag9ve4hakmmd0zmk7zqpkfw37lwyxf4qzedv5cwhtpdngeq72ld8s", - "bc1pkl83wgmkyazp0hjwcutz2zujgg4rtcyzkwmynxvsy5s447tuwh8s8syvch", - "bc1pya3tew0fc3ch3aylu92uvlyhdc0um3d9hcps89d58qcgvr7wkw9qnypm97", - "bc1p07c5qdea6gs4a58rp0tr46zgyk5zsandxz2lk2xvqpea72thr40sz64sec", - "bc1pjysaaftgtlt7zzh5awr8pvjplzwlk5q7j7fjjqscw5h3hkmpqsnqt9pr8g", - "bc1pujrxhpdztsem6skpx85r45g4qjzn0s2nar8epf44wdt4hndmpnrq0hkr9m", - "bc1pvs9rj343376279ut8ktn7prg5mn7f6lkfsvu7vhq6ve0t7zzhgrs9wneur", - "bc1pzcf0x5hjczz4xdxltutyxy8xsefv2ed8lh935fwww7fkuqh30sfqgjz2tf", - "bc1pspjj2n97ra6n3ggrvwnew4dkxqjn83zkmxpt4rkl8j9cjc2c2y4sk3zk0r", - "bc1pqtfvl830f2evvamjr75mpq4va2afta2zw4hgdyae0uha67x3amqqyaqzh4", - "bc1pmgsa7upt8vtxddqhnam9ws4jt5qtrlsl6trk6kweanvepj09nayqpec592", - "bc1pey45vvqugj9nwnl02qsw04zdk46tdtfkk8ret4pl792qnvckydgs6gt53n", - "bc1pq8gzxa62pq4ska983pnm5ukynklwee6lhkush8ha7vej9952sxrqcl8dcy", - "bc1psl0vjff9ssd40ldjg84duzuef7mly4vym7azyjucdypesewn2dfq60h0lr", - "bc1p58095a3r3whvjs8lwe3uyw7fsaujlf0pj52aqxx85m57f5v7ksasdj50n5", - "bc1p9h6khlg78ghle7mvfmq9d054uwmw02edwcfgagljszmaxpsxx44ql8rkhd", - "bc1p8gp6e6ly2nl0y2we299zmrr3e2eq9y2akalskjq08nx9z4765g6s0dat6z", - "bc1p6h87ckegnzkdsvcyjfm8za8edhpxwn5x5vkt2emv4r6gad3lx2eqwztrqx", - "bc1pgpkwzw9l0f52h357kf484dwlf7r7v5ksuc4jk2052q8n0pkd528sg3pu5y", - "bc1pq43xuj7mrglgg42fg8khq06ldqv2fm8gzupmpl8y6zx9drdpff0s2uksq8", - "bc1pfycek0jcncllaqgrujdytfzfd094x5gmhy7dlej70eskgpyyqg3qw8my4y", - "bc1pl5tflllzpc7a0xaj2n0a47dx35nf0zav9frz4rhrtc29c6cp8qqs5m7yje", - "bc1pwkevgua9qm9egmmakkqx5yu57nzn0g5d0t9ut8eslmqx2x6ad6fqdq92fq", - "bc1pf5jm7jnt4kmjmtlc9yygr8a85ugueje2rwlgjqa0nl2rd5xmgsnsx5phzw", - "bc1p66dl66waee222ezzcc9vufaf0wyr3xnragrdjw80p2chqmmhzl3s9248aj", - "bc1phhqwhaj6f3dwgcdfm4craengelul02vmj3p6wyjn2depeyx54nlsj4u9kj", - "bc1pf3hxwaljlkjy6j9mrar6dt70l72gft5u2pn7plnjxfj2d9zhhuvsudsn6k", - "bc1pkqww0kx0w4f8n0dkcc29ww7u9kdht0kqpsg404rdjjxtj68slecszngu08", - "bc1pq0yfkytzv7a7q3us9xnjrk5250lxg6qynzx7gkzs4hvhksuqtytsa9q29g", - "bc1pphh6tud47ah5tezpwy7r6tmz9jvgp3wt8h4qndeqtyrurgg7r8hq40rupp", - "bc1pkthjrams6pzu3pzawe8wr22ejntehjuxnauvu5cf69pu4zyfehgseykzw8", - "bc1pda0ewlsn8r00yt2pku7c8tl3v7hse48sfk6z6grdxvn0vxgsaxfsjx40qq", - "bc1p2mmfz47u5k976dmvz8s4dmwutn8wqzzjapc7wu3ng8c6nmwru79q8ayut8", - "bc1pgck7t6ha4ucf5ql202sdvw9ypym6c3gsu374nh2t4jdepcm4lcsq096598", - "bc1p3tdpuccwveyqwnyemswsrtrkkmf3f7n2te2jzfnljnjsjd69tvfsk9j8ue", - "bc1pqx4mvyvsfrxrd7cfyw4h37eyn6tpdxz3sgxykzf7h7ndhmvx405spfzcp2", - "bc1pnhlzne7r20sgww5nnurhkncj7l5p9hr72rl8fdvs5wm7rfzph0dqqdxu6c", - "bc1pnkcfzyrwwte7ng65m4lvr57hkwcmeg5a5upx8575pw88mv0kj94qsj96fx", - "bc1p8hpmhjql44nc2xa6qkg2j02gwhgaj0nhludtgl36drqdxc72ua9qdyd57a", - "bc1phrd3ay5875kes72e2erxuvxx57fpejhtulcn9m7gcr265tk6j7rsczs5gf", - "bc1pqrlasulc6luvxdaa9crgmq0yc0aqnq3nvv6vcccwl3mpzpezh3vsc89t3t", - "bc1p43qjktjju5hgc3u20gdj2wu8yemh9gdarj5usp2fv9ehla76w6psa25lgs", - "bc1pl9gxh7slw3kflhe2ey7chvhujd4yxfsssezp3rctw277vdr8ky8sps36hx", - "bc1p6wuxs402u54tw7lnfx5dx6lkpd2hvwh8zax7wsg5ylw0xsmzv5ysrha5mf", - "bc1pr03v55k39u9yqj2lqlaqm6azefj5jeeymqjag89m2wedt5qkzsnq0ug3ns", - "bc1p3wrsecnj4qtfmk53r8mgukal6py8z2nmveuwrxa005rcfc8h2cfq73mwp5", - "bc1pth679cw0a45289hal34c0nztmamr24pam4qgttrn53uhunutvuuqjj0r3r", - "bc1plggge22plrgs2h70hu484jfzw94n0ay2uytcnar2gjk7qa7zmmtq9au6ly", - "bc1pzmk3syjcnr8mwfdsezmrd2q95xch0dgd6q98zyrkvrfvurue9ycsecthq3", - "bc1pcwg7mkpq0kfjxyrmcm8ggnk7zksz2mvspkufmuucztztdx3xv94s3gqkwe", - "bc1p7ur3f5y9an6vjjzhf59w3yp9excg0dxq5xlleps9cs2lg8fgwlusm4vjjt", - "bc1p7fw2wt7shp35v4mkhkzq9ya2ynxg66y2slxd5xx88hxjud88g54qfdn397", - "bc1p7e0m4djcyuwf7w3ee4635rq9gaucxrhk99mnw0yh5wj05wruq65ses347x", - "bc1pauw7yy6xxvw64nl3wmn3tr9lkm6rt8fcrgy2rcgnk6avlmqj2qkqtne3qr", - "bc1pry58xvmjkh0pq8w2t7a2zdn8xnpwucv0r3wsgdmrjnxujdysfnrs03r5ee", - "bc1p3lmt0mr4zz5uvpkw65j9d5hqgkkx390c2sj94rs3vj2g3pnklews0557r9", - "bc1pkurpvyl6gu7yrcd0thzl44ry468dkmgyskh2lgxztz6n9tf7aekqv6wvcl", - "bc1p4dnjcf5jsmsyl4py5f7qs5mmtek8cry9ukr09cqx2z4gc7ydf2dqxvdsf6", - "bc1prqg5wgxq56q334tv094663fz4p4wwc8pn0sk9nmn4lqgandkdckqwfcjv4", - "bc1p0ncse376xl5wgad5krn5lmtp862s6fpqj0l0wcawygdz87u96l3q7u8xy2", - "bc1pt3p3r6htd57xf4z3c47qe3nhnf2n0xdtuvwdehtpawpv8h6azl6spxtf93", - "bc1pvs6w68cupphlppntsnlxgmy8zjafluna60dutzrnq42vnqhjq6esazl350", - "bc1pd2798zh64685lluayjlzr4m000jd3kruxp5qqn62lf874u0q8rgqwxrt83", - "bc1ppev0y920l4z25jz98f0vyrggjhc3yu5ylguw9fvsf2ft5nskgxuq5rst62", - "bc1ppnet06spl4fuuywvm0z5uzjhfcly80lf0uvdph0u2lgsq5c2zdksymjgrx", - "bc1pzjf8rzvjhu5qvexcetavg46dy2ln43qg0vk5wmxvuqvp9ndxe3zqc6ny93", - "bc1phymfsknwt9efwkw9mek5wcsz5l02kapgca8eczmeh4j9f884jczq7nh2f0", - "bc1p8gwnxt5f4fazu7fhsy0dj326e2uwhqlnfn22027j4jw8juaxe52qex9xkm", - "bc1pplv9rkw7kefy4rh3r94djr6f8lsnyehxcflvjcclsc6kgke89z6ssjvdyu", - "bc1p49c2dche4ahncdr8vhmkcvjqnddqv6fzue4c7qrudnhlpnc3xs0strkcrn", - "bc1pfluqmamaewf6np90r3w2tqa3cuetmar38rm96f4zl22lavcxcu0skf4md6", - "bc1psnzfl0hruqvwdawss08n4krk0ccuyv64axssll46u2kk84se7gdsntmz0h", - "bc1px3hlrekar7g0ehx3vrvvazgevaues6dvvzqxq2r6e825wkw9j8ksx7q2sq", - "bc1p2qj0823rv62rwzzv3yqh6tjy4uaj05gzkgu3ufjke6y0dzs7zdtq0pe3wz", - "bc1p07pp38txkh48npy9m9lrgqnku928ad2deyszaur6ca96nr888qnqvmacec", - "bc1pswzmwguw2wyhmxlqxva77nvlx9a9qqzw9937pcy8chk7t6tcu8fswc7uy8", - "bc1p3qh6jssgg5grjy4uaf3hj0ka0qzdxc38d55nuld9538ee6exgswq9ajs6k", - "bc1pwswjppwjrqp0qrlmkqrnp3eyz9devz0ezgc2xx64j388yyme2mjsky5x9s", - "bc1pfvxqqn2944ahwyfq3j9ufx058zqlj0g3qj3afcuhc7hxrukuvapqzr96sz", - "bc1pqyyjvu0qu5y3xzkyqx233v4wypf06ez3mt92tlz9ds6tah7k74assnz4kw", - "bc1pl6werrsap3rxdmdztakkvm2k06ps9ff3nesyl6nxpntpxdztp56svw4036", - "bc1p5my9er7ytkxxt88t93qcun2aj44emyg28ckq36de0f8km75xwxsssrc74f", - "bc1psjhtm9auyxtk9g7y9hpq8yd7gyss9f5tqryvehj27umduldlvxgq35ww5d", - "bc1prl87me0nan7m9u8q42jsm23ctmy40m9uhugdsz4pmdm988krz4usam5lu2", - "bc1pyty53scxh0jjx7l3wnhk5yucfnu2etk52jf9hxkm9pxwgd36yksqw5q7h8", - "bc1phqqe9xmfwerpahsx875ja6xefg43r3qeuw5cl39s7txamygzhpxs273dta", - "bc1pqageg9p5vfrk00admal7y5cfdjjwr8lecghx2rm4ke358plj7y2qmdsdjh", - "bc1pzqhdchhdy2z74xqkl6fvmx5rxh8rset5njeffq6zcgcx356zjmkq4h6tm6", - "bc1pr32zl7n97xf6dj8gkllcp9rnyxkcu6tw358e42f04g983pfswnysrr03ww", - "bc1pfnkq9gkeafzdvsr06jaq6dl2u6vm2qmvpyedf24sf62gfem03jysdkgqnk", - "bc1pg26csnqhxxw33pgwd5tl2xy0th32k70zwj0cc207gf9vpdvsxafqcjm7kr", - "bc1pd6pgagwnjj8r0e4lvqldw2pj9tc8ueq98x4teeu8tn4pdn9xjygqen25j0", - "bc1pjrt9azvm6lxr4uh9v5cjv3d2r9jwc2zkx8qapvu6qytfn8v6hejscy35nz", - "bc1pqkfmxlweyhrpwnj3ehw4vjy7lnkrllt0l3cydw9vmt8dc3q60mcsg56233", - "bc1ptr27wm4yrfjug36a59yjewlw02u2ak9jna6f7f26uy2wpksvwr4q2rm9fm", - "bc1p62uvz5800uk4hdnrqpeeeerxexswjl3h9tgm4w7zj9wzrsysuz6quvlj6s", - "bc1pazuyekl0yt33vwd94qztvs2xew6ww25uz9kwm4fgd439qm2epa0svr7day", - "bc1pndfx2cr5dqp02v89vtuvhw29l7kkwzar9kwhxt77vrs90csfyj2qrjcqq3", - "bc1pea7c62dnafdyrgupghcv2xhej7nv55tshcg2qflntlkgp6kwcw6q0dgrln", - "bc1pg79ymm0mke8ke4g96lam76pw9pqqk03fzazexs7agafxvqzsacxq8gkn9z", - "bc1p0c64kactywy8jh38wh5zds3drslkkwnrey5pqqfppl0rdsdn507sqjzkeg", - "bc1pasywln9fqaaxek9arkzvdx4a9lxdx4s0j6z0gsp52a7mugv4axyqne8qnm", - "bc1pdurpm6s54kv3cux0dz87hdg7mh9pq6ee4k6890zr662djl0v438sydl8sz", - "bc1pu4w25dgt03w3rk5axvajd5nhwhsn04w2fvp3nlpl2x99g3uwxffst8ep5u", - "bc1pn07x22dym0ndx8fqfy7trnhyu4qd8yu7pn65n5ayluupc672h3vq6p25ar", - "bc1pwc44xwq2cucep8j56yrza08yrqwhg32txqmf4zy4jkksl894lp0sp4pnmd", - "bc1phq03w5ple5ljqq4x2scghj0dhqwveuxzzz85penvlzgxgxzhf4fsynvcge", - "bc1p6vhksm9tzh4dvngquxef58vxu8a0jp90rf08ltk7dd49q9pcqkes43a8u3", - "bc1pp0dleah2cdl96435pf2y3lk6s0f9a9628dlfrp0gwauzjh04dq0q4cs9qn", - "bc1prdx75rmnj5uwvl95dvdpvx3fwgq8tr8wvnfyf8rdcrt4yaf6rr5sjgamtd", - "bc1pg8zmz770e6awev70lr8c8rruwccfja0xn336d7lx4fptj4nf76fsqpt8dh", - "bc1pggsrxl7xhtayysqnl7ekctm58t68szgjtut7da6d3ay4da4phlhqd67zps", - "bc1ps6z77c20068fj3uge3pcqafcvllgjkr28hlgahh223njzl3c8htswd0ggm", - "bc1pzsvd9kpkuhgcldmahjy9rjnnrm72sehfksmu9pdz5uex647rh3qs4wmr2z", - "bc1p0tp996hytczcavckw8xkpvyjmh968klw783p8yxyhmqeadj8u9jsnsqam6", - "bc1p58s02dysj45977vpsn3vzhedhx9w2jg2xt5hj24t0aruuzczu6as9u5wk3", - "bc1pamnedffw4gp8uvjykmp2mzr22cnmyvylt6sa47d2v45hrwpffc0s5pk0ge", - "bc1pu84856v8drpxlmuc3czwkta9zcpw4s8n4qgnjjscmgg5zmhsn33s500wfs", - "bc1pklflgrrpuw9vwa6f2st2ycj65enhcyrepxc7q7q432l69r9fq3sqc35kd9", - "bc1p5zr4hhzytncrxdg8jsdsczjhegn465ex3ul3qtthr8f7fafsuweqrgnmzz", - "bc1p8h3g7suadtxlqpcs8aekn4v0qq3kry44t0lqet3kgvn2rhpzh6hqkydnh8", - "bc1ph9v244a74up3n3rtxfmvzhg9pls5r4tuqtyzp5eqwuyxcpxy7dmq32ptu8", - "bc1p8e0lxxgrvnevxqplaf7ks3jyfz2zwm8q7ez4lql8srwjnkxxpzcseudw8h", - "bc1pvxnkzcyw42zrrjq9km8p6ff03wh4ngeankdpy94c6vr6nusdeyxs9g0e75", - "bc1pfxtg9s0a8gen58xhhk5xkwwhm33tgyaeaz5xma6849y8grq9ydtqpmvc96", - "bc1pucejmzxrmzmx6y3u7tce0ml05cv8xz7gar9pkdwvwkk5g08e7jyss2gqnx", - "bc1p53ufzad7dc6vz26nlu6r9pvwtk2p4axechc5xvr729k6upl9xg6qxdv282", - "bc1pvwfjd7av6dn24wkmfr52nhc87j20p94p47997u2eslycy57kcucqasq06t", - "bc1pndjn95nnyl3neflmm7scal0pxypjruzxgdtnurqzlspptfz6u4mqcke0r4", - "bc1pfld2uc7j5p8uu6d09x3lwxmhwgxlvlgftf6y2vkecnd04hsu93aqeglgxl", - "bc1ptvwmku0md690z3p4f7xe2u7pas8ex4m942pfkxmpnpps7qadmn0qvewzl9", - "bc1pm52nxfurj7slna0k7qln9fjvava0zy4zq0naj6a66cnwjjafk3hsw04pvc", - "bc1pyuhhugzhpr2nm4kzyk3jqthum6cv808zsvk736ml6kpmdxvml4fsgvztm5", - "bc1pj83v2m70409wufkusdj9m2awgqcmk2g66z4zw20dz2clgg7f7n5qjrgst8", - "bc1p3spdklkz5wln4lq7jl0f986wj0unkftfy5zgs5c7hluw5ttd2n8s0jadfz", - "bc1pg9ylzvjshpfg4htrv9rnxw0sdmwys2gjx65a402mxsks5lm34zus9pru2j", - "bc1peqcwd8628cjype94luwjtj5rsn5xrdy0txntnv3me58k0zw6p4rqsw7sdm", - "bc1p3v0k9y8sc3jtwegr3zk2f6gpuqsuv567zr02xfs72epfuzagqnfsaudvdd", - "bc1p7nmhh4xne2nhhghu7ahzq08eyqzezsfeyrn7j7zk6wfxty5w598quq3at4", - "bc1ph5wg6xc9dscgt3zqee653hrerk8jqdc7cv3rjyp6p8dxkzssqv8srrvlxc", - "bc1pw2vy0ckx0axqkdw93jsmpslwe3as8lveekr444w8cx3ls6uwsmgs8jd75t", - "bc1p7m3shwsj2m9d03ud0zt6h2kg8mjn0cmt27q4h7aed38lny33v6vs87hqze", - "bc1p5z0mmjwhr0tn9gf5lvmrknmfme8mhledj6gzh3k7gtzlsqhe8rws7flaej", - "bc1pz6duag8vlxh89h7venl9a7993lh84azn0ytkvjf4247v4t5l8wxs3qtsaw", - "bc1plj8zpzqgvzhr9fqxvs0nwssh8ydk7frce34t497q2ethqp6nd3ksl2h6wq", - "bc1p2k2vrkcvds7e9mwe3wdkhvedpckdknq2q72fckamz7v59dhyufws9gjnqr", - "bc1pkjqgqltl089vlvn54f3xeldlx9flr6r9p7pzvu84z98qu26hxflsfvz8v6", - "bc1pysrl6laqz39lc5m4ku9z8tpc2lgr83txw6ctdamkex52g0msxraqcl8r2h", - "bc1pv4llct5c5up5tfrpluvz4phecl3kh5mf253j5vc9cdn32kdsemwqy7chel", - "bc1p7g78ephf8wc43uerpy4hkazh2tcpus8p0vg6a8acum7k2f6tasnq0jc0xl", - "bc1pg9v5np8pnsdwhl0gf2uaxh5e6rm2p9c7llqzacfn0hwjhzmvtd8s4ycfmh", - "bc1pdawrxpnjhe0r5sjefzczcv0dc455ta0xztv8a6q9fyfz6k4qdgvsd7k3h7", - "bc1pyw6ucye7vl8vvgje3gl58734lehmk4vnaufrt879kxwhky2z2esqfugpku", - "bc1p83n5f490q5029htffcd9hzv42u2yxcenhrrpwc30gwv3h54zwyhqk323ch", - "bc1pgj4psc8zfdwcpdcwdvw9cyd5vu7w2aqhs303v6775dcvq8yj6fvqrl2j6x", - "bc1p4xyxwpx45u63kuy3ljzv5xfysy7hznkrp5xctz2c7ynqsn3szdjs8rqzlf", - "bc1ppsqpka7y0yem6w7fhac8y92jqfvd7r60n2dz7w45e3lw20qmetsshtl66n", - "bc1pvnr5dxnpew29fky8ryv8aaup7nww6te2g8g7933v0qusgp4qrarsrrs2vf", - "bc1p4e9rxkd6epja2338aylaxdpkznt88apuv2d2jc6gvwujwpysz0vqf4vz6w", - "bc1pd4xws7ydc75jmd6h2lxefz6hdquweus7qe05rt6pkvhahmw3cdgq80qq8s", - "bc1plzzzqlv9wn3yg9vvkjweslxfkc4yvf6evmz38pwqwqmvwnmny5ascn9kx4", - "bc1prxtlfpjgj4zq7gzdfyfmu3he7zfgsavhsk6pag8rldvp2fy7ttvquna6lx", - "bc1p0ea24zgt5aq86wtw0m4rkz2kgyd6lq5lzz5ezylnlf2ge2vd3jkqpwcy20", - "bc1pzxajecyhtwshkdv2vt47dqt893grzajnq2mzlje7mv5qhrl5wl2qz9tfda", - "bc1pzjl7qhydsdpe5tmqn33fuv2uf2q9dcup0adhsusfwqmrqunq7dqqakk776", - "bc1p2luhdt77as7s3drt2k8cwrr0290nphxrsrew40kc73qshtrkgjaq0wq8vq", - "bc1ppmu0kw45y5az0nk3zztsuqzunuamn6tlusfsm3knggt2x4lca3cq9xa4rw", - "bc1pq6ra3qyxhnhdt85yyek4uqssa3umvrjl6jve7llk02v9ehh2kdnq0dftms", - "bc1pxmqnnjs9fdgkurrtrp05fv82a892kzlpca07lzlxsysldhq2xc4snytjnw", - "bc1pnfnu27nxw4wkt7vkkmvsung0dmyedxrcqpqhhg84st4z4h4t6djs8yuugg", - "bc1pgsq59mm7mmx4q39a9l50pxt4cm0tty493l2zp30g3yca2m3a3agqarxyke", - "bc1papx6qwwvk5y0aetcs45ss7ulnnk5kgsylgf93n0fvt2dur8tvwksmds576", - "bc1p88pnzmtudp3hc8lc3py8vlu7dryz9heazm06tgrcyl5ql4refspsjx35h7", - "bc1pr8d2pk8q3avrlwn5wgq20j4ytflrlqnkmsqvgl462qxd8fg0770qxef0zr", - "bc1pdm25vehkn82mv5gu5endnulljfraft2ljfal2cmc58gsuttzk6fqd6k8al", - "bc1prvtmfnd6m9fxh7jgpdw8mgc8vy67k0jmh7r254r4svc3kl0jx7nqh7lu73", - "bc1p2ht5kuvmjcrcjjwlt9yj7fzkczkhz42k0fyy93g5l3q4e4gdftds3uvk40", - "bc1pe7xsjc4uaqtzlsjxcsxwfx295pmjp04fs8s5gc62q7yem5nfx07qp7ju2x", - "bc1pnz85fsj2wcpcnh5dwzz5mu7zjtkc7vf85qcavja7gjjhvc0fuukqdrze5l", - "bc1pcmvk8awc06am7smmgnypwr6xzzv5gcu4ylgrj2yzd2hrawzu6e9sqlypq3", - "bc1pn9mql75zmrc8kdy04rev7r5mls0jus77r9mr2xzkez6wr8wjc6gqkt0srn", - "bc1p7n46zzhctvfmx2ret68ye42z9p6p0y4uc349e4cmu349uh9d07wqnznmxu", - "bc1pu3q9725682n5aefh4wvl8fup4duhpznzx0ra7n39q5z9mmde8ccsvv88a7", - "bc1paln2sq65gaksyxhp7cm49qrd63r30ppur7788wqxuwtlz5aq2xdqwzjhht", - "bc1p9h9apuq6gx4u4w8xrf588mecpdkm5mr89maldt95wtul8clas6eq63sjz9", - "bc1pwpjn8vjkxhnq4etpf65aprm3a6hen28sjsq7cg78sqz8jhfese9sk4afxl", - "bc1ptqa8mzqr4z5rpfv6kwdmxa69wdc50ljkvszrnpq32njtcat3g2aqreawm0", - "bc1pu9h587extp4m2spuzr4d6hwq0uahg70ezjgqhv823xf2w99tcgtqvn66mg", - "bc1pstg7y4u6furvumann4lphtu3aduq2wsrskjxaehn3j99wyy0d4kqnzz2zr", - "bc1phlx6r32c9xu9spugefgffeyfr8gk7zmcqx28ucqe5aucl0cs5ltqnsmdun", - "bc1pxgya3u8s6tjfjtvag5yln3fvcp7tsx42pjldld7z67r302t6jhksamyvm7", - "bc1pft02ezu7qqdk04jjuc7j2wpwwr9y363c7f5slhrqv5lfrng9rmtq3wlq5z", - "bc1p4dlk9plswlvnmqmfp2f4ukkgg5ckra7lqxqhpplam4m7rurwpkkslfd9h8", - "bc1p5vs69gkm38kcc0yfz8cujl4yf57fky0h8zz4q3kx0znj5husvh9q66s7v5", - "bc1prxm5ct5rl8ykjxq67dxtrre8x5dnxlmmnasxwhnm0pnnc7wvvfaqa4wd6w", - "bc1pzfulacp3k8tmc3nqtxf6h4889z464hg0hqgv0adszk3kh38w9nvqggsgzs", - "bc1pedhn38p7mf4sc0g0k9lf49l44775yahx2pe8qcv6p2qwyvlq4wcsactmpx", - "bc1papta06evrw2egdqvjdx82v0x4uxcxsn6caml6m0up5sschcwrcjsjrr2ca", - "bc1pffuflh9czc4ssyd6ff2q2738al5yxlar2udsuna0xtuawrfunjas0h66la", - "bc1pr4knm4suzpjp86maj80uxl5amncmpvh7y5kmr6z366cfjwyh9rus2uhmwh", - "bc1p9zp80ajc6tuvmd6r9fq9d7cxzlp6x9vkkdf62fxm66m0sg93rcmqe2mhzm", - "bc1p3pmfskm2h007zhepm2gga5hcv2hs7rvp5vgnwgkzvs47r8jt2c6srtq2t5", - "bc1puerxseew5wps86edwv89ke7utevdc99yjyhqemf0r3x6d54umuwqpc4mst", - "bc1pnadvamzkyf7c2rs9za0vw3hhcr8uxkavtwqvnzw0l527tacmf4nscygpsk", - "bc1p7g8n85z5v9ttnmuyz7jk7c6jdn6tdgx4hfg4tccx64208zp6ef7qqj4xjt", - "bc1pzs74aprlul0rwra529atg98gak9jdvz8qrxz9va8we2z82sc60aqr5954r", - "bc1pfnnmfjec3swu0n50h3z9zq82c9zfax6x3w0t2455htv94xgc7f4s3ruyx8", - "bc1pafgvzsd3ttk7dq9sqcm4we0qral0d39lzm20qfwt8grzkx5v2ejq8h8t95", - "bc1ptuh36m9rpl4xny8s3zhtmdzjpsekmz7wanup6d4vqh62azf5ussq8y6uew", - "bc1pczrfrd9upwakp4cm75vd8gmjjzvwwv5cvmuhcregcq4st7f53u8qhpkca5", - "bc1p9djeke7u2td5f2q5n6qvzh5rw8jqtuxj2d8zcg45qavkvtsr27lsckz7rl", - "bc1pvr069f0tcl69d8wc9yd83ys63cmlmg7ee58psvcul63253qqnm7sefhu2k", - "bc1pe8s43k5dhytvws4gscrun3eqp70nrfyseaa99g9j4ut2err6zcmqu7d8gp", - "bc1plxshk7dvmrqsx9kusl0gey6uf3puvkchxdnhzvymawyxmftmg0lq5vf925", - "bc1p9qy84ly3jc3c4r02spldehxhajvm2cgyr4x0hpz802f77edlc3vqeyw3ft", - "bc1p6h0h40kmpsswcdv2ys4cy9fl9ffw94zjzprrftvvz0n3y95x397sukvs5j", - "bc1ps5fwcfevl7z72spht35f5wvfzw4ypqnkvx4qctpx94rw5thzzg2sgqnqwh", - "bc1peg78vdvca2g8k2eys2zm5z8nzq2tzsmw67650uumv0720cyuagdq338tvt", - "bc1pjw8fcuqx680x94hjsxx7r7vvrd5jyc3t4rszmwqx7ks5k9my52dsla5lqy", - "bc1p6u92y9ygphl3qnj02zfy7x6p99s5fky0yv82d589r0tclej4ptrs80ltyd", - "bc1p7fjc8yxcu5at6auk37m6w9pj2ral7gzdkent9kqugfzd7ke9ufeqkcxca6", - "bc1p49sfym5sk2nxrf0jmjgvc8vzkhxv9z9t0plxp69fexd8agcck3yqwq4uyc", - "bc1pulxzwax4cg3e87tlpxdglrlzswprf254jj8tllmt6j50fraesz7sud9vvv", - "bc1p2v2ylp3ndfycuqx9usjd6e5pw3r05d5m98chxe7syxz3xf388v4s4kdh6h", - "bc1ppqnhk6yftrdyszs6904jgv0r8m78ed67zdrwuf7yh0f28ku72r3qjsmdlr", - "bc1pmwjeqacw3r5jh4kvq6dzn8mq6qpx9jcj7fsshsl4r5qj5l8z4aasmaez9x", - "bc1pzmr3a2r474qx6xy69ypf4g4rsvsru654m8df8q5g3ttjfyhpnfdqs5xqh0", - "bc1phrgkhhqwc67f3rdcmz3mj9v9kgeacgz4dvdphmqtvag6renegv8q875val", - "bc1puyun4wdffwtm0nh5uqxzpgqyeygj8ztqv9fc3mx2vmeuj3rse6usqqh2dn", - "bc1phhm4c5jqxl40y93td20u37wux3t8edg90yhnq92zxw0vyzfz544sepr87q", - "bc1pysxpfmga3ww3s9htrwhu5qp0g5pyn5u53yahr38fve298e7lu5gqp5mnt2", - "bc1p88nlt5evfyzvrrnlm5xa9tyyrvmfntg7apaa37jl2pprk6p7hdrql9esng", - "bc1payqd6jprjz4kzk6tldwyy0cqvdxd026na52aem3u00upt0du3cdsp6q0f6", - "bc1pkvper0rqnwpnqysccw03zlkdd8mlqn6l2nnu7ln3qy8xe4qtp0fs4y0jdp", - "bc1pas4zdxtpg883mqvp324e0za4jjaye6tncqzhq65c7a527kjx0x3q9lx2ws", - "bc1pa6ewmavv2gzfn384ca5qf5df5ra64am27uw70cd8g758wvsjswwsmdfxeu", - "bc1p4qp478jyyv9nlvw38euvuts252pl4hf2ns4vd7ec9smjyd7zx7hqhw2ajm", - "bc1pnwdrv3vexfes2lg7pflu6tg478a8mte3vxdg90mrgvnx2p8cnajs7z4vx9", - "bc1p9ypmwdrq7nl2qkl399jc4r6vrszk9rvnvdcnpljecvh6tyn6fscs4qhx4w", - "bc1pr7mallltd8wwkcq4uuxfwrgnr493hznmqmh3de5xlfn770szjzfqqzk3uz", - "bc1pvu4mtaev862tj5ewutd6n50n6amgwvtkz5237zzjycp22th7yx4suhc7ye", - "bc1pp04av545tnqkkw0sguvq4kavamel44npkv5qyz8cxdmm7wckuhrsz5t45x", - "bc1p98ggtwsmfsn972appsfydlekqqam0pmjtm925uqfmsrmuq5740msrsaqjf", - "bc1pphdk99n3fpf7jm49audkeflfycr0urjck4tam80v2nxezjkhhyaq63rzz0", - "bc1pvuvdeu3ysdy8g6hd6uchnx46tkf3r03dptjdcgn0n3ycdqcakths5sjj7c", - "bc1pr5pjekvcxt6tn2w7qy73z9ea6r3gk8fu0h0wzatva255zmlpz9sqwtq6m7", - "bc1pukelmt4ra6k9j8tqhh29pr7p4v3ytpppjkwnm27yawenkeq4enhsc0ydgv", - "bc1pyner8q5kgu7msck4389kgmyuch8dlgr493xds39vf0mzx38slz9sm4m83j", - "bc1p7sfpsth04v56rfml2pju643tlpmwtqzud4mpwd2pnt0ay2ucghxq8r9plu", - "bc1ps486vvjgz77805cfkyz3x6qn0743k2anav2seea7naj6rjlf3k5stgqff0", - "bc1pt0jvrchjeu4ww7aru884mva2qwx2taswp0y0gk0d3zlenh2d3g2qzmfjss", - "bc1p68c0jyl43x2j9jh40pjrc8h9qczy7nnxrzsesufu2ruk4v04pt9sgzxw5r", - "bc1pm4qtylfje9mmz3dzm0alee4fnejpgukqk2f827dd2023dqvr4drsj9zz92", - "bc1pv3n524yk0swv594fze84d6vyx83a0pwdq42gvkv8ecafp8w6k0tqh9jtm4", - "bc1psjaetz3ldsxlf4q84cklrpxy6arf0yel9e9h3pyj0yf9gn6aengq5njknl", - "bc1pdq74sewd2m6uwxs20ehuhfxkrjd0m2t94e5ay74w5jw3mzax6w9sya9rvw", - "bc1pgzx0unxcz8qr7y6v34w6utp4qs5knwdwewu48tfctlljxyd4207qmw2tfj", - "bc1p25v4wkw9jadcuxgg2h6un2fw48mq9r5nmgk0ktzak85fsxk04rkslktpz7", - "bc1plzjnv2xem5qup6pgnve6rt8d40nexq2tvlr2utjy22vu00a80klqyrtwlm", - "bc1p8clhql7kzjd6rswktetkr0l2tnp50qcwvhv47qncnrefv3aru5dqdlqvj2", - "bc1pj5lur8g6rj9darzjwvt0rp0ck277pgy52ecn6jxvwyql4t86t60qw9llll", - "bc1pexlaeqsw7waydtw52saxjcxex9vuk229dcku9r9q57w2tm24hwzqlrlk73", - "bc1pnzrdct2767t86pgtnz73h6u0f0728t60dwgvy4jpqt4d89xypcps3kvr7z", - "bc1pq6hkhs6hnp9fp7zgjc9684rtf6lnx49s44c88n4yxn020mpvhvwqaaxx5d", - "bc1pphq458ehfh5geyyd68taxwca2xajqjm22agsn9vc6m379ktftf6s95qm6y", - "bc1pprfgk6vwvg73k3je7j0ymjldf7y3vhh6nxk22we7tqlm7vq06ufqu5gcg4", - "bc1px42fkwndqc0zc9hmd085aqe07v82ey4hm6y3njqmatfya4ahwsusvskult", - "bc1ptl6ksp6pkgenlctjec9uhfl6d9h7dkzl9wcw7vuxwdgvhdnhtjrsdz08nd", - "bc1p90tfdqhf4hd9lrawww4qfzzffhqsk2cmgszmap4jj3dcq2mqz0jq8m2afh", - "bc1p9qzetvw242vk8ul2pcpgf4k2dd7e7uucusye2r4phy64ld0vpuqqgka4we", - "bc1pyvvswvsng7km7cvw3y3jeqfgcyjet42kkcxdttsjz9exahslgahqxdrrmp", - "bc1ppzm4hl2dyhxhvqmpm79c3vzzc7al5qxrzf6uy6vyfdsnppvc73fquc4p07", - "bc1pq9h9r89mf2qdrta8acpsdhu2ljjmcl8nl83n4zfy6py8mk7eds6qcaf6y6", - "bc1p65u0e6dtmwk323szx580yq6wgc0v88rfc4vhacpggmpy47w5da8se4qxct", - "bc1p60zfhtg2z8g35pwde5es9r6qctpwagqnwl67zgqvtwgj89muv7rs2kqf4h", - "bc1p2ye8w5gg56v4qsstpvwpe2kqz5vth5xrhd2qdeudc58ehqqcjfjsruy2qy", - "bc1pjq9rqhk4na5paps48s9zjklu739nrhxnq8eadsujeh2vukprtcas924vql", - "bc1p9rlzy8q8ck4wulnlmdej67zwy69jrs3ada4luhja3ecct2cssngqlsqvf4", - "bc1pujyqun765y37dv74jn29hrpmxfsetn5s9kscwlq3n6hnqxmkutfsnd3rwq", - "bc1pvu5rrw7gkze5us2k27vvyhk6rc37sfsch596nvvjxahuagz3y45qef2aen", - "bc1p3ndkqje3hqzd8hr93mex9uy4dz06fssklmq8zddx67r3vslvnvkqdjp2p3", - "bc1p7eju6z308gqqxa666gawdqr2pyrpvd3jgdlxwesesnq747cajs3slh5ngm", - "bc1pzeseltwem8m7cprnquhqalgg00xc7k0mydyc8gtvejhrf7fj7uhqng7h9q", - "bc1ppzcsn3mmz5zqqfldacfyx7smzf6t2qe0n6tdvsclwdr5hqfrak9qc8m8me", - "bc1p0xazd7hsvcsl0hxjah26p3dmqxyvl3ere5g93x3t8t0rg659jrssuydcc2", - "bc1pa40fa6hfsl6khrdh470x9f0lah2s60027kv602dxvdq4edvacxlqg26zf5", - "bc1pzw0rtad0hj05hswgzp66u5tjdnjgp6j00lq9su4c73ala4jn9eqqtrsf93", - "bc1pz8nymlwg4wlj935g70w7g5z3tesyg7n3hq52wrx6sh598rfcyj4ssdlv8x", - "bc1pjt24nzqkce0aaw5gkuluu34c3zqasldac0jgx6uzylgryuvcgnaquhsv22", - "bc1pcy75qcc8yfggy7eet4u8thu04x7wthtzcmkxvpfedclplgzm5ejs9vyzuv", - "bc1pvdngh54yf7j7z2kwf8y74vx57qtmh5yuwptjwd7vgv6hencqu8gs3amzsm", - "bc1prhwml40g758tcmkh84ulhzjrufd0pcwggdte8gcrfkp69uyv2czs8jecwf", - "bc1pdja9lms90lmyxs0z0m2s8480us5f96hs4xhq98nqxj0ea87rnusswrzeqy", - "bc1pdhjc0mmg3svd3hphyq4a48a4p5uy24tzerhv3yuduj76wvzd6wzs50xp74", - "bc1pv2tuvj9sdujpl4aauhxh3q8x4d0jmgzp06htla0600a3a3whracqcj5nj8", - "bc1pucn6lqry6g4eg9s3dxejk348jznjptj3v02pmgv7fug4lxzv5khseqjcht", - "bc1puzgnqjfmtzvdmynqg2fag245z3q7z3ys4ravu7rrmhpcjhfty9tq9nfj8c", - "bc1pynt2gafunmzy2er9rsqjcenddqa4xqukxkcwykemma3mapwqa8yqttgek6", - "bc1pm05ujqp43pkf6ekyjnqz96rghf7chjd3n6kdn43gf0dnqcqypvws50ajlj", - "bc1p3cafqfls4l4qfettw4jnzjauntxtap0r66az5246j339n8skkwjqawfh9p", - "bc1p0m57kvl64dlgd7f7pdq0r8tvzrmu2jj98fl5vgmxg4jfafkkk4qs9wc5ax", - "bc1pu0n2uftrym43n7wsem340y3lhx27vl8ztvye30s8hg3av4xr548qhj2qka", - "bc1ptcg6at3kcnqzcfp7pxw9qrdhc6hn79zn6hqlkz6u0scdga3ndwespg3cn5", - "bc1p99ydr5h373qgmqad0cr6xdyznu7c5wnj7hfyrvzk8z38xhkxzglsk6jxn3", - "bc1pm99dvfzwmek6ghyss0g30k7pske8xawrx8u4r5tj36v6kz56dwlsl4wka4", - "bc1pnn743qv5jdxrl2wyrjktx2r8ea2yv09wjwj8rx5xj0m634t4nr9qlvgyl7", - "bc1p2mtw4qnkk2zj0vjpr47hmgnsuy9y3kd37zvyglhfu7r9m3hh4wys9h076m", - "bc1pm3pa2aq5xpnv6c9x9jrkt2gs4llm4qqaj8j49tzhqckx4wldv4rsst6zk5", - "bc1p584kjnmfm2tn4hv839gy0609pq8humg9alcgnzh40eztexm98j5qwzutnr", - "bc1p0aws9qv0dvf3d2t6ajm0ve6lqt4y66wtu9xtfe3sk9jppc53v8nsl60h7y", - "bc1ptwzxtzqsga200cva29dfrnsrud56u5hvsfahxut86aseauxjkvzq58petp", - "bc1p0x70k8xjfz4rdwxx7qvgvjmzula8h3jcm6twffua97ygqqu80ras3ptlvj", - "bc1pnyetw3wqc88f74vg40dsguuewgaslc5zqhw3pgx3qqzws9flmfmqvjr9r7", - "bc1pzutrmlpgj0gqme4vcy9za2rzrn35ma8y0kl9fhtan4xwswkafznss7jfa9", - "bc1p54ulclxwq2py0ehsvec02s3v743ze4y2my8epcvz5zzs949d06rqkw4dc8", - "bc1p7fyxptj4u4rh2lp85zk95uqs8uwq4m8kqyvcu6n94qj68umsd4jsnfuvwe", - "bc1pzd0sqeyhw67z8guxcv834r62g76hsjcnzhrztdyh5cjued6934mqgj730p", - "bc1pfwwjhxemy7m2q9gt7qk7fdwtzrq8llfr6claqkcwd7lrcg8fnv9q9kl702", - "bc1ppt3lqw4wecn9lyd57vf5tge6a2g04ke7dyantmywsfafgk35qyzq6t9gt7", - "bc1pvs63cafehn8846zxwxzg2hs0pvyqau2xdsj8wz57k3j790syvr9q9cev7u", - "bc1pm00c05lamzuqxtp0muz8jjkvfu96fl5rwp0ht9m9dwu33swtagdq9wwv97", - "bc1p2cud49kpp94hk2lu7nrkvudl296qxd4g283xu2m03dp9j8jpu38slsee5y", - "bc1pvcntynng6c7jtr22rmnxtswul7xx2u3um7vf4q5gaenmnmw42ersxlzxh8", - "bc1p7sla83lmdefsusj6qr30yl539msp750jvh7xsmwdfcazjv2j4cpsc7get7", - "bc1p52plr7tmypmptmmvctqdstu3t66tprrq9g3dc6fnw69d3vgvaa4skf78vz", - "bc1pz0jlt7lwlan6jg4h6ayk8udv6nsvm46lyhqkrdtwxf8xm7s0wg8sr6qlw7", - "bc1pu032fxemrnsaglqpmy0rd3ypt8txph5j86r6sly7kt2yy5ckln8s0fqnek", - "bc1psce02hypz0j45ncje5t7k3hcnepzkfgr0n4e03suuqzduc22w0uqnf9r6x", - "bc1ps8q5r8kjekmep0aynw8yqn8vwklw8ef8krcgz2y6v8q329rnxuqqrymk2g", - "bc1p6dlmugnh9nxpk46z2e5tgyms8jp280szcxwaehcccpp3u4jq6p7shj69u3", - "bc1pq4dlqd38mc7hlfu0zh5dk5ppxfsw40eu58ysgpa200utcjph37tquru67x", - "bc1pvkzk283dyhq36t8q6jq32uyurlxp26gtuy84j3ygardckut4q02qctzk45", - "bc1p47v9lptq6g6jhp8qcfgeqjrp6xyvc532sl065n5ufcdtvslnc80sdfjssn", - "bc1p2g0qvtjvr5wqr075hwa6u653m74j0ppukt04qalf0je4n0gfusms2g8xuf", - "bc1p2mvhd7lq3zqcvwwlrmexd34kxsa3e9pk7lsm0se489nv8clfcz6scu5sqv", - "bc1puerfey9gryjr9fer3pa3ra8nw6fz82tk8g0x3pkex63rhu5zkrjqukchg9", - "bc1pyxeug9k85vp5j4vgfuutywgxcvqsud95dhrhltafmt8fhlg5h8mqau83pl", - "bc1pe54kkclgjx70gl7qcj4axc8f9uqjc4x5rh6t49qx7njzxzmplaxskhkukl", - "bc1p5xrgjglwk89v2yznn4xgu3wsur4hvafh5krhjes3rnrhd899qg7qn5yl6m", - "bc1prhz6paex22xc2mmjgv8y5jzjlg3hej55fr7qssvgfpa0m7a8n8vqxv3vkw", - "bc1pm8a02zn698zxp2hnjjuxvd5775dg9unsf45dvl8q8w54xx3rr02qha2pw3", - "bc1p8q7p9q2cagfv7rj633eu3hkrwq3n3e4ftjnh8cjdvs3rhkdxaahscelu3e", - "bc1p797ehgrhx0llnmd34n5yawezkrqe8wnus84y95jlsfcyqdausu6szn3wdk", - "bc1p454frq7pvf7qgsynzkafcwt57wfsr0e0sap3prrdce0va9z55v0qclnw9r", - "bc1pstcdyg99832vtgdxqrfgj374v6p95jpjur40ma06zjk3e3krpjwq5j3xq7", - "bc1ppqltesxs8n6lsufqzy0960j6hp8agd3fhf7z0rhkev5kxet5ktssz4v3km", - "bc1pz96v07d6mcacmyxu7hm7cagxss8hqp0wvx9umzhy7rjn6j5n6mysv7udvg", - "bc1pv67far7ualw9q4ud8spqfd4set7ez6lu65a999v7rrzje0n30nnqzvxeqw", - "bc1pr4m3kw4ytqcw8zfll3fn64w08ffh7lvl626fkn6tz96pmjup36esqeyvuh", - "bc1p99662qgx63tuvec6dgh9sucsg455v2rls32ft90zzd5nckz6tr0s2hcgm2", - "bc1pvgzjgx54ey3ex0jm26kl0jvmyaaemlyltrm2qhpc32hxkkd5d2sqlr39ch", - "bc1p0u4cdue8hg0f7es23259c55amw6m4pn46g4e7a0ux6mxpjz9ss0sc52fdw", - "bc1p6d5t6kgy0qr2xn0s7j5zl20tjlhwghs67p3jp8vqgrfsmjavtsnq7eyjnj", - "bc1pywm700pydkckkcf20tefmamz662rahymhkkq2k7l2ju3rd4y4yyqnvfc5r", - "bc1p6jfg8rq573me602arsjkdqmxz59scu2yl2qnx4cmjj22yhs6qm5q339278", - "bc1pgqa6am73a8dj3ufj8vdfez80fq9llkh6gacuzuw2xu98zwzmjk5sfs2lcm", - "bc1p3vuaak2s4gjx996samrsfpav4yeecx9p64hrqu8f24pt2gycdjhsjq2vmj", - "bc1pyr9aj0k8ushfrcz8ymeqs848tlh87ww927yqz3taac2me8jjzupqz9vz4x", - "bc1pa7uj77eszv7hdl7lzeretnp45z7ycuempzv9exqrs2vvq4zyg9tqfu80qv", - "bc1pl6w0p0f80qn7szewl5p9asktqsdtxfhu3rw0c3fasejqpcpzcf5q3ucu5f", - "bc1penywgtzmk3af0npy08exwwp3hzf0zv96q3hwpa29xs4dhgmn5t8qy0pruv", - "bc1pc3cyzdnhm3fd2nhcws8j3ggk9hjw3cxlzfrk0dx2ksf3xmrnz6ysqjm6s6", - "bc1plcmsngretf0mkwju97yh5077jzvl87dpga356ezm9txhc4lsq57qy6hc6m", - "bc1p0e0psxv5cyk4cvufzhtvamnwvmcayuq9e0jg5rc76p0vlnzjhmuqnxkj6g", - "bc1p9tvd85rpq50v9uk6tstulne8gqv42nwe27xwzg86hvlh6gw2fy4sun756s", - "bc1p6adwtd6hhyvr0fgmwrynvjk4x7mzp9jem34tqsfd80pahdvs7pjs53r0hq", - "bc1pa08pkvzn75jntfvxnfv8dv7yrg22a8xjcepxa32tmsgz2fl462ds8hsgv7", - "bc1pfdzkz2jh5v83w8mpn3lw98lepuukna0xrr4cqx5flm9rmvrwqw0sfefc3k", - "bc1pn4hu7c99ftsxuadcath8q0ef8js2ftwu9jw02ftqz6e6rls5r3fqkdmvtq", - "bc1p3v6yrd2v95u86cm7zz0hhryq4sc0a3227twlyynrz2zlswl0ukuqp7nwl9", - "bc1ppyxj4pyja87g42h6t9fhftzaktxcejg8fjaw887ayl9svf6z669qdmrfp7", - "bc1p6pqe4w9gw6ufry3htqaqt7jllfrjj6e24vtyshdjz39qxeuye5hqmccztv", - "bc1psx3syq2ztfj4e2w5qeaas5xggl9jgd0ptrer8hm9h4xsf4r50ajsrl69gj", - "bc1p2fqh4wgptfxyuc25s3w8tqjdxtlmz57jrpdjrta96jhla8allf2qkvv4fh", - "bc1pf9nq7dq9r6m5pz54sswwvmg5lq2q97yhy66pgempzywnlmg46g4q08tfwz", - "bc1pckrhyn0z3uedfv55k06xr3fkml3nf9tknqss4kaxt7w9pavnk48sl498l9", - "bc1pnm4laucrsm3sd84a7trx0czvq5pw2wkn2nlue9d83gf5ujl0ws3sqx9xxj", - "bc1pyxtxnrs49tasz2efyvsslygf37326jxhmla59wedkw53uymfqvlqluzc8m", - "bc1pcdck30w7s7fskgvzv3h6hrkye29ljj79zk0wya6ka9rg40z5qsjqmkjz47", - "bc1p4kj8y8wnfn2eryfyqp5mvrxxty3ggnplnj684ew2hh2d499an3esyvu4wk", - "bc1ptxfuq8cs460ktr4xjtnsjdzpzaqxupnvmy5t8c226z66ff3a0fuq5mc607", - "bc1pvs55pn6qp7xkjjyqhwyrsfguq84acqayuygtxup5y49ud2ly5n8sqfaryv", - "bc1pg0w6fdnetjeaszv6w88c7rkwhpsjdhjj6uy08wp9l8gljnwf3d9sxc8ktz", - "bc1pzjnlwkzcpwpk9y2vw6873qqtyk7ewfm528qpwthhh5xrkc5tcwnswg3mc0", - "bc1pk0dc3z0zk4sgtu5ur56g4wntnlyneldl2wkzr0ejke4gy9uxzw3qdqc9ux", - "bc1puw5y6vnrql5emlt5kushtlazrmdv832awf366z76ssa003mey5ysngv692", - "bc1ph49xr79grp7767ackn58f39xzegglp2rc5auqqxew6fn5xnc0gps6j3zr5", - "bc1pvrtvcn8yg2udaxhluy9vs7anlshdpwddag8n6r7fjfw2xfwf53sqqg9ztj", - "bc1p4dd3qt4kchyj9sq0m2e25qqdnu6p6pxj9z4ldc0w3c63cf02wfes2q9tzd", - "bc1phc99ke2zpxme024ypyexwx6vdf69sdtg2f0kh87h76hmm2fr2ytqlxg66c", - "bc1pk926tctdd3hkzdrkna7d0h0g7cpq09plnscdhsff35f9y3nkrf6qxn5syz", - "bc1plp3700kxhemr53njwgpdeeswc3uxmtszftuv3etpp9mmvz37utrsfkzagx", - "bc1pqdq5qsk3z0q6lu0g0hd3whxjr30nkm8wpz5l9fnmj3aphhx9qjzqj3c5ca", - "bc1pm6kpus962fuj8vs4vmapduzpq0a883lmep8y0f5088yj0tsh5cmsfu39vk", - "bc1phc687g300jmxf7zuv3mqhy3u2j4f67379766k0jfk92mu60dagvqslzk93", - "bc1pkz4283nasgx65vlw96nc29wxsrd99nfu4k7a46u3pzvzkrwtp5lsnh3ee6", - "bc1pvafvsad3vspnujp2rqu8fze0nfsnejpsavu58f99wqn332q5a9hsgj4dwz", - "bc1p69pa0asa63vqtn2xcaf8spgd82sn38djdx6gyvkxg8n64hsvugpsaf7zqf", - "bc1p7ddd282rzt0q6kzcen4gcdannwgm8v7s6j4p5qd273s3fh652gmqq7qx4p", - "bc1p8np7evhucpu3jd3n70sgg8lag0mxjva03jatykdd5mpnfuyqfuuqes79vc", - "bc1pxwmjlgsx2r04qfwffzce5cmplz7kqvk7gpe8c22qn85w0a2qlchsljz7rt", - "bc1pa26jzgj5a66urstksaamk6ehrhw699n6gv43sv0u3v6zpr4llwhsv5kkt8", - "bc1pvatjk0mxjwqvunaterpts2xfg599kkrdza0k3q6m7m0xmek4j84qwpnwpf", - "bc1plk4f2xwa7q7sgsw3jttpdn7vzyk52xy5syl8rjm4d9l902rumyeqklqq3u", - "bc1pxnh46j4pdaq7gt8wwggtsm0x5ngrdwrewa36jp4dc20xucuj42vshn5j5r", - "bc1p8zv8k98a3lmh27jgsmvz6x9k38z2pwgv5dxtchkff5ht3fuunevqj2pqgf", - "bc1pxap7mtfmve66zj6v26p4cnpftsu3gmvmdzgjpksvfrrjvdc9gn0qvejwq7", - "bc1p8x6p2akp4cn4gcxgc4gxqhjk3pg3vlezqxp3rvq4vy2qvzmp72cqru4sqg", - "bc1p8dnd2gsz99s38mlffmelgg550e8ez2k4ap0r0s87jnsasf2wlz2schg5s7", - "bc1pjhdz8mv4q8gjnp6f5ajpkf9ghur576xj53dn7t4tuqyvdldzzcnshnyp46", - "bc1pyl2e4amlvhmvykckt25pxyefm8xew66l2q5f7drz22wktjxmpm4sjr4c9h", - "bc1pnn6ppplhksp6pqut2ygctg2wdc9mqtyxr79ws32fjjxxzhqx4kvswshm4k", - "bc1ppwpc84hzy9gsgcds9gcusaa7z95vyr9jrzhekqymr69yg6myg9yq3wfsfz", - "bc1ptdxgxelf36mnvhjd83nxqy2jp9e5und7npnwv0q8xrvu5skt6zuqeq0chu", - "bc1ps6u6sst42hwv59xrcslsr32ypnpn7sjm88ww5c2vpcsyehe3m5gqe336xn", - "bc1pa56wv8gajuy0tnyzfw79ugt770lphaysa854rv96js8v59lfx4mshjll82", - "bc1pdf6c4tk6mt5p7x9x6rth4y74f5tnh02gs64culzj79hshv05f4dqtltjs8", - "bc1pdm40958tg0rq8qzmql0kh4tw7mmkmtx5xdpaa4ngc920rcfz94dq3zmu7q", - "bc1pzswm9h2rfclvlxr4297tek8dey5tzzxsqsht9wnvsczys9p4an4qxy002x", - "bc1pys5mq9jr6uy74j9j20tdk3nqxwckakrpl5gxsrddka58365c2gusyy9vuq", - "bc1plfrg6u93ajv7yjtr5aru8n02jh8fadzh79rpd05vfzkz3lqlwsmsywuy0j", - "bc1p3sgcq9e39vycs3j28fj4u8ukdvsy2sexq6tuvu4hdtmyqrvg454svkswgz", - "bc1p5jjarqcmz9fkpl3pyr5ghdjnk39zh6wlmndfavxz7jvusvk5gtqq9leu8f", - "bc1ppqcspnvhurwqj3dyrxxzj832y5hgev9kl0dqpllcuhsjy4ph3dvs36j378", - "bc1p738rpk9ny4qfgctj3mlcjlpuhmksqtxsh9g6srfkkq6akshz5cxq5rncfp", - "bc1pzsqa736mvdsmu3tcwquqd6r04vsrsq9f9yqcyv0gka6k2hmqnggsf2u5rv", - "bc1pjlt7j2th90q9qjwtlhz3grcw5cz724zdxfzyeqr2hdwvzr3msgqs2445wj", - "bc1pa06dawzadc347q93gry7fcyqce7zh29v2ewd0xpc759c8rv375csx8shmn", - "bc1px877phmzherguj4ea7d25t8u2t7ku0qg2fl7rfugat04vgrn8pysux8g3a", - "bc1pcazae20waze5d9cfdfd4qpanmjhkk4k92zcrawsckp7h39jfdd8qe448az", - "bc1pxn6ue5mcntuv40whgdjhk4h6vzjxhslvp73nzfw2k3h7h42zedestvu0kq", - "bc1pay3vkk6cez75unfdfgzptqtyu35ytmvsqujkc5pjsujx0lvquykqsue9j2", - "bc1pdldmg02mr449rlc0vmhkz5dpevz4t2qcvqth47qs4mxzvzv4sqnqk83t4c", - "bc1puweh0eh2umrehhmzta8wlxqwuht5eq6p69gmuwk6zlkj59rh7c8sqf0dpy", - "bc1prvk4zf8gm73ave5um2k8nlf4vq5t4fa6g3g8tlnj85k3w2g8m0pq8ulzg6", - "bc1p88g3tjakhpas4hvhsc646a72zw8jqfkwqlyk593dfxlh55lgfpxqfnw7um", - "bc1p80kypsl93zc3c96dw2lf0323p96nu7gykfxzsesxcwwaxlealgws3a50kq", - "bc1phmc334c88ujsxgd9feanys89lr3e7wf62xwus9gklay4dehjfuxqls48cg", - "bc1pyew479vvtxspwmpe9tt3ppqdyzvjl8h4fl7jfe9qt3pdcyzr6u8q7dc9ff", - "bc1pdrezvsjedg48uzpu706ml9dpuqc5hm4cclslmcw95r3hd0tyve5sxpkjj4", - "bc1prcyswqse0uf0pqam3ulklg6fpfjfuwksvl86yuyutwvhr2wutrfs0296y2", - "bc1pxqj6hhvd053lg08jnz8z0z9zv3h2uhy3s52zuyflh08tpjzwwtuqe3pa3r", - "bc1pt4wwz7xkenfga9shvr77l8v7mn9tfawkdu9dcyyq3q3wduansnmstnk59t", - "bc1pns8pl94nc5sk0h6wqme5th52kzmz9mwvu9xlwseqlvcqq7rczcmqf02qzq", - "bc1p8ettehsc7sadyxcg5uvy09hm3rs7v85u9fu0qcmnhmlghpnchk0slafv7d", - "bc1pl66sd7fa6qc003aexqlzl4qggckhdffgkgcze5z4ulsqa6sfrzwsmqjm4y", - "bc1pyr6ec33zymagp33altvrwk029xvzlttdf058prtx7kt0g52c8r7qtsl3dy", - "bc1pdzcpkpfhggp4hstv6rgh9rxylhdglw2c83ect2ssdgt39wztalcsyvk7nq", - "bc1pnnsw7s7jlj7qut3ntc3t0ay5hpt8agkymvyt5s0un0u8fn2f3c8qz3tlg6", - "bc1pjtcpvv23p3fw7fphwlyyydyxv4f3z2wl5tn0l4et4jwlqhcy0puqwpnjah", - "bc1pgm4v3lt8s5vf3d6tfp32z7srl0kdsh8jvsv3hlqzkgyazd3cx5psuywsx6", - "bc1pc5d4eys7kgqnuehd0p9knms3xrl55vztfd9rnd8hwc3q73nvuenqld06za", - "bc1pypxlgezp8pfwkcn8gjpp70395e42ymc6cta7g35qkxzc9jwwtc4qn24asz", - "bc1pvtvg359vm7wv6g3yqzn9ucs6kuwursn5my92ewt5fwq0rqksldks9alfqa", - "bc1pe0jhjmtm3j2yud0gv48vgu754qdrjls72taxda6nm7j8g5d657hqjlppqd", - "bc1p20pyuatmgn4nd22cwl553vwym3wtnpp6kc6xyk9ls50vf5sh8u6sfe3rsy", - "bc1pjlesqeu33c84lycstjpk7evcuhkjcngyaluq0ej4v5zwj3mleqesvkkypl", - "bc1p4txyr42km4mjju4y36xhn4le4ls4hwrqmavawds0rx5xzve9kuusdj34k9", - "bc1ps3zdhw3gdvzytwxyp65nkraa5cwjxfhc2rnf9ht4hngkxt0l9aas8ec6gf", - "bc1p25gtzx9m80ner59qx5cnnv9vunp6wy8zkak2m7qmy5ga3sq928yql60p58", - "bc1pm3sw5rrkf4zxgm4n2j5m9234lydy57vaxkk9n2e8npn3gy4xe4usel5rf3", - "bc1pnuaxkymdjejkpgp9f9nasawy70u55e9x654vcdc04ruuxey85w7s4xuydh", - "bc1pjweaw0kt3h9casktjevyg5wr8cycsz2x7s5p0ppyasnexz3jfanskf6w9r", - "bc1pdalyerx6dspn59efd25mz48wsc4nuec7wqhfvx5hmveq5ylsv5lqr63svw", - "bc1pjff4dwkkpzn2nf5jhmqwdkj63kzrfjrsh9l889l2n02za9rnmd4svluu7f", - "bc1prmtdyp9n4cgz66247zwm96265k3lszvlf9kkk9kc575a2zyssq6s60rnaa", - "bc1p8326835rpqy7v66z9pgxxw7uzg5kemn8tf4t6tdlarp3ycg6r69q7mcmgg", - "bc1pjw296r8l6dlg9cwxwduw9ug85vyfscqpmd9s6q25jy0cxa830j7q73re9a", - "bc1p24z9svd7hpnmhmfr9cv4dtrgrt6np9ngvz65d897v4wzwmgxfuasestk02", - "bc1p8w3gnyzza6z0ypghywd3am5p2vmxfd60as9xsvrd9zxn0cvyfpnswnkqmu", - "bc1p3885kxmf60m7f5kctw4tq6p3d4ff8cm2fgkk7ad9lzsazsw58ptqenvxt5", - "bc1p6z7szac8zn2cqxqdq5z2x7dtu5ey3hp39zek0zc7ljla0jfkf4kqwschs4", - "bc1paf0w0ehqw5wwutxukpp9ltp0xe263ytyjf8raw899mldgu9cyjks9x79zw", - "bc1p46j8jfkey8mcfvlrl6fg8gfaygvdvfv89sphsytp39el6edk0jqsu6sk9p", - "bc1p9drv8nwg2mn0hdq5uk40vjx29zg98lj4yl37ted5dwh6qetlvh7qkwe3pw", - "bc1p6qaxrrpxjk2qls9tejuxaak8k0cfcczs7q6x09zwep57xu0u3rsqpawv9m", - "bc1pm5eslhxrc8qpsdq8edlrejkf5g0rxht4pcv5938l575r65f6x5nqks9kcc", - "bc1pcgrajphpya0xdx205m5mhwp69crn6hr3djnd0ttcda27268mu6hqkp3jxg", - "bc1pw7tmwvsavzewu2dwg4t5artqtfa4heffyvk6asyxv9ced7gfjlhqm0k3tz", - "bc1p297g8fdgj3hfduys5r8c7wkjwskmecpgszqqz5cdkv75649qxr5qcx7l0t", - "bc1pymadq3zmf7n8k44msjyt9k9l74jy89wg6zj6gxqktc5c36qqksuqay03el", - "bc1pgv46jehs9tlsvhxfzugy6yhv60vtgttqhg4n4kjtr96gn40pcdpqc2apfe", - "bc1p77hdcemwkdsmshadfftxkxj5n5jphav39rdtaj6k55mshwatnspqp0z4gf", - "bc1pkr4rnt347s7dtwp2ntee8w7k64k049rwk3qz9eu3judh3vs562hskglrnn", - "bc1pwdccfs6la2u2fgjyrjj0ym842l0f8ga6vtvn6nra0gkzv6vrwneqv2xsvg", - "bc1pw6ksykdf9kv22mvkgafc3lenwjz7wl98c76vfx2y5vu203q9aknsdj7rw5", - "bc1pxu39j67xvhad26y8gfq4kwvynpp2k5ga33mcn43da2hgxw5gwefqw4zj2u", - "bc1pw5qj47cza90gv5fj4scks2cu4xe3tv6nejqxnetkxxvn7jqfjpys9xsdpj", - "bc1pj2fahw30cck48smaq4nlpf8n6026p4gl2cvrs2s74sa0npuszsysfy49q4", - "bc1p3kxtnv4vmvqh9wc6ylx884ttyjradgq5zgt4m4rse3gw6kayqwhq2p0g7z", - "bc1ppcftkwd5s9cwu759nveafjepfxyu7mzur00cn3ad0t0kk8q73flq0dvgzr", - "bc1p2l258uarresuxelpweqy8a9ucmeffehejzkq3qcp8ar35f7qcs5sykcg0t", - "bc1ptdhlv8tp9063kzdjustmv5c06ntedus33pa27u0m2gqn29her6ms5kct2s", - "bc1pec5356tsqkcqyzl6ervfqvhey8kf0yrc5n3g6f2htma58vues9ssyx3dav", - "bc1p5cu3me5wycxg07pcx0kn94u3f2ht0cssjm093s5dch2rec0r7hcq4n45qu", - "bc1psjqrr3kaaqk06hnyfwq8kwl4ra3fwhm4v6sylpg7uj358aj0u9pqen0flq", - "bc1pudsxk5y8aggt9ft7vymqp3c2kt96kef9ep5j3kx35v5d7d4cczgq26t704", - "bc1pax8qxt7gsl20ml3sq3rlpcz8mx43zg2m4dsvwp20x67a0e34yyxs47ejtp", - "bc1pyxjy3t8vvgy3xlkf5yfkzgdx8rkjjtf7lp3zlky5yu22qmns8jps3kr7j4", - "bc1puaf37slxfxfs35ye04zm69ylk534adder37xlt922cy64jd354psc6g78u", - "bc1paepmgkm92j799hgyqjmnp5gc6kpquqxr6fkyeejryvafzpuy9nzsrqmg0p", - "bc1p9h4zygr04ej37s7znpapsyxy4jxe5ul3eara03wecz5fhm9xpqas99hsju", - "bc1prhd9fp7xahmsfcz0stj4u09x5f9wl7cvh0hap69dhacqc6p9lnhqeyjj7a", - "bc1p9k4qyh9wjtghsrfr8f3l6q0tzvsv4604mysrkz7xvtk360mysh2s0tdu7p", - "bc1pc9memtrreq2aekm0zevxk2q5jksedy7xn0u9gfmqqgn4zkl96z6saqrq86", - "bc1pe0a6xwdj3rgucqd2xf4nqtq2xw2rehzvw9rgar02t9kw46jgzees6sdylm", - "bc1pdwuc677vtwx4nk8egeum5jre37pfxkvv4pywx2xadlpmh60snfwqr7hf6m", - "bc1p0anj752lauj5hjtqpfn2wj7j5u2y8ny4pmgrnw38apej9ssd3x7qlvl7s9", - "bc1ppyn044regh0a9q3lratz7tf5luhxz6es9p65wsaczl5r8lxf8ccqrnsrw9", - "bc1pz9afz3jw257ml0hl0jgr6z4jycqmzwjh98z7fnq7l82j942q66mqe9al7s", - "bc1pmt95p6lh8x7vg2t0r0p5x0y6axav5zejq2v39ypj9pfd3wmpjemsck0ycx", - "bc1pdndqvvt7tvnnhvplt4plj6h5zgzk07f4rke9pvep5gcleqjdwn9s8u4e0l", - "bc1paz2zpl0j8xgk8na89dzvj6tu204v8hxfz3pe9d88mhw54wcl6zcstzlenv", - "bc1p4fz7qm480jalze2cgnjccaq2z60frhrpzv0gwd5galsxrqtcrpgqnltpwx", - "bc1p7k77gmemswkcuuufkcmxkh43vtwvneqauztx99m4fuvrknzca50s370dqm", - "bc1pkxy2yy0lxecud5cwk3840e78a0nl9zpqangttmrugjklkfqye42stvxvep", - "bc1p4rx3djf4n07e6pgudh28r7tcwp50l2rdtunvyqwl4k6x4nzsnsvs7fjvtf", - "bc1pc9gkslr497v88r2jachm6sh94jl06veu5m6sls0t7gs6anu623yqs3hp7e", - "bc1pt383r4wst62q8xaccs6hr93s6l7jhasp3kf2dnly65ucmy5jre2q0lhnhg", - "bc1p4w95whf9pvueszxvk2gcgmqrmx048dgaegafmlxfhz3tf9qmf6rqsz5yfu", - "bc1pjqzrzeud4spxg7u8w6jymwt6uct0mwz2sz2h3f3v27fmnwlsk36qecfky3", - "bc1p9q96f835tfpha2a9lndfqyhpj6znjuguy9wp434l3n7kmy6nrnaq9k5pf8", - "bc1pjajpyfjgncxksxj0960kpswjk5vszymk0x5y89kddyfgakr8yfdqy34jjj", - "bc1pjm0u3k4dtyv3xkddda503pauzu9rnkgsr9ra44rpfe3anj5xxxesvu4uqp", - "bc1pf4axn598ywen7k5thukfcjdxa0u0rmunlj2p22c6pvyhagetjy6q2m572u", - "bc1pjzm6v97xwkq24gcmqg83jl77ntc93zmrktu3gupdclz5fu02sq2s68wlqj", - "bc1pnngjwarkc2umycz7v46p7efxtw7wx3qk4uvrwk80vt9fyu5r6h2saltvke", - "bc1pnggncxjwmgtzwprwf3lm4qsjtthsnntqw6nsg5k5nawlazqrc4cqnshfqp", - "bc1p9zphzk4zhun3kvdl2ern9wpdm27g8ww7n0hwcjrh9y7ta60ezvjqvuf47y", - "bc1p3957445czsr2rycapf0y8hu9d823g6laauwa2henv8cu2h5fgy2sphtclz", - "bc1psxmvzyslpy98ws4xcu227sezk0v27ck5tp2jrv4kc72aq4lq592qvuq479", - "bc1pygc9j8qppvvrqwukfd46mqdy0qhkdsxqpzee949rk832kf7a3ljq526ehk", - "bc1pvddnshuclt7uxvqdrqrgdechu4e75rq9y7g4ux4wy5vwfz3m983sdykn24", - "bc1p0fh3nngfn7l2te33tarpq5kerwjvatc7qc7xjmwfsdzu7qh4dynqmkmrl2", - "bc1pfdfag7nkkwz65mdcst0tjyn6g6lxjrw5wyg86zp8mn9pgpv5fevsgmfg2y", - "bc1py76e7jw58y8eka6253tskwjah6qy6cmwev6j0klhus2h0mtg7qnq4h46we", - "bc1pjtwe8ztf0tvs5hqwrchxrzsjpa5d3dclh9qu09pgm2q6mmkrmngq4hfc5a", - "bc1p8wdwjfa3hqrmzns5s9teaa66pk8pl0ld5a287frah9rganace36su87zt6", - "bc1ptlk0kwkd0t6x4y6d0vp7jc2wjec7wzd6l2twh0w8xht0h8fw680skfzydk", - "bc1psc2zs5076ft88a5w2rfeqed2l9cnyxk9msvxvwq7tq7ln5g894hqe5c4s5", - "bc1pdfxfjukwx5ch00hstfpzm7n45zgl9xj0u230vf77ypqrkplaymssethrm7", - "bc1p5auhjhwjl33fj97l9msz86xkz85hz5uax64nu752pwn0t3f0se4sdpeh87", - "bc1p7zzlusw888yaj2a3km5s6q3nacksjy8awc5ynl5we4dgqhcrgsxqvats65", - "bc1pwnkwayqek3txsu3nzrn6wlv7xmy7kvcjg9qdxf57c248y0rxlpgslwz7jl", - "bc1p20pfra09hcksjy5ky338vw8hjw0g8wxgzfzrncsc25pajt3x97aqcjp0se", - "bc1pjqua9afj3ce2llc8a62qh02yq8y80kv0klq0r9v9sv5587x56ynqs04xzr", - "bc1pfm2pkfrtznzr0rez0v6vdgzfujnp5qsj2tp8gp6q8032mzhm3saqpy4ydu", - "bc1pddppfv7n98a3cs4hdx34scmktgw4df5zcd2dhrugrhanth2zp78qxsgc54", - "bc1pgeza6djfjsjagjzqcgucnnqcn8y2unduuse92du63kgqyghglxnsqysklg", - "bc1pdf0r6lg3ulktv8euk8hppsdwzv2vnpfwl93m3f40xs865kafgulq96cm9a", - "bc1pdhfq70ramyt3uj2hpn7ty6t80ppgh6kmd7k027j9n9ccdxahzuqsa8ywd5", - "bc1pu8h3qj7j877jlv2s0ntqy0cz4faprc03s65tt34anyk0rhvv2gmqjmf6sd", - "bc1pukz2tq70qzhtnpuks0xmm2tsdrgxrej332pmh5cfjf8x9ttgwk0q2rdaw8", - "bc1p722drnh7rnkjcg48wz563a9s3pk52cqs376dq4f69w9uzv6smptsj9w5wy", - "bc1pp6tyn8yvn53mj6kyu8xyk6kaw5mgfz7k89ayxtlg6t6dd68thjxs0yfylm", - "bc1p7c7qxdvlqnew6zll7vclwmukr2wap66fe7upy7jp30xvnsrd3wys2xlth2", - "bc1p9c8cc3676aswayj4pewlp5gms2xawn5s62hkx0u96s078gdacvgqqyyxmj", - "bc1p2gfcp3f00e4yy8gx0pght06fv0yf0kl8k377px77q89hautncscqvurkun", - "bc1pa28ux00jfd8y9d8yk700l80m62nq5llws8keas724lrz4lzpqvhqazlp6g", - "bc1p8wvtzu8jqyy9epkppc8sw5pfgqcjmt0aw7p7fnm935cy6695t8zseggkqc", - "bc1pqgpn40sqccn70uz9r0xwkeh58gsygeec6qngzuezg5vsfgzrdl9qyasws4", - "bc1p6heduzekv5vy9cpcxvq2gvx4h4xzl5lp0k43ah0xjjtp5h07p9uq0vrmra", - "bc1p0nme49e6xfj8g58tlk90sh6xlxazp4ysvjzr8pr2lalr2v4rf9dswx7mpa", - "bc1pn22fd606479cn5r2vsu0kqqcd4fju0l92seszcf6m2jv9vwl49ls5q7nny", - "bc1pnwah8mlp6n0x6j9sv56xjp7a2nyjyg0dcv4u5stvkw3ysw4hxk3s29cn3x", - "bc1pz5d9eef5qwyd0f52lqu2z8n5kv5vajcfsjvh5q6uzvjhzkq9a45smvpjfj", - "bc1p9h4ms29qvch5snq007xvak2yp8zxhjdyk909efgg5ky4eg7s23dsa7epus", - "bc1p29v9fd77x8kl9ngg42gz8mxrlw7zad28gas6n7s4s5hyar2mpmgsk35474", - "bc1pqhyqgku4u4d8y75ug4khhdyyfvqmhaevfk9fsxnevhjhe79mu36qe2mdqm", - "bc1p5ecw69l4gwmuzz3vzjam7r8arnzgjcs592v0tqhq9y35xvu8glvqhazszl", - "bc1pwf40r7dkwgseezfp93z9vauzjfw536fvncs58qqcf39kr6uzseas0eh493", - "bc1pc403nuz293hpxaem3025fzemntt55dc89ehshvm0fujthu3ks6hsy7nu28", - "bc1ph4tq5072xnnysewzfrxy6nl8dkta3hjxzlu2nexwftw38uqqny4qch37dg", - "bc1pvztgqysrsgwehfv72n592ca65edmdgjp4y80twrnspg9mkq2rq7qeuf74a", - "bc1ps89ttxl9nuxjtqm38keafu3hc5zf7xfjxt0c5z2ku507pqyhga7smhtzwp", - "bc1pt7g45gnye5e6apgj69mdk40kf28dtzd2whr9ty8wnhl2n6423k5qrkv6l3", - "bc1p982x6la2mv0uqs00vlq78xjm4ueghk9tfqtzkdqr8unc74vur4jsvd5vre", - "bc1prgernascqgm7rtxc5qsqlu6kme675jajz00fgycwhpdm37y9ka9q5w9k59", - "bc1pacfp5tfzufgfwa09mvavfvra6kjqwp5g08hpa4rj3a7jhmprrr2sseh4ef", - "bc1pgjcfxp0pjf9rkhdnquc9h5xrm8vthfgr3rdng44t9zqt9l5cy4zs63f0pj", - "bc1pmps7y54catvd7r08uu9av6k6mrak754jrjhm7gy753u8kfxknhgq77gf37", - "bc1pzxmlk06f49vcn4mw4kddvcx2f5jdhlk0jtt77wzg7kljq35n7w9s8cdmmx", - "bc1pfh85m7dzp3nwf77scl9qf9jxsrx54fa6nl4y26yq6zvwwu7wwpys8qrykr", - "bc1phndxaq0paf9gempw7e65k8wxdxqxs8cpky3c0rnvf5hwyhvdvwzqfcxruk", - "bc1pep2cddpqaalgwm6348x2h9nlkye34mtuutk0fvlr0080jewd0x9q3r6d2s", - "bc1p90jlg3gfcsz4qx9w8fl2h65zhs7us0d2h3e2mrguv0kyq0lt36ps279t4t", - "bc1pwrkmf9uxzmcq0sef3gw8mp2sstyuc20glm4hhg0fd2ayv3qnhcvqra60f0", - "bc1psvcy8f3cy8pkdxy0gehuw3cjn9fn57lfgyugsywe9h4rrqajnsvss9y6gm", - "bc1pn0s04h58vwh2yuuvlpssk6squ9zef4ttz5zkalzdhu6uz5xagvwsketarl", - "bc1pjnqzg5c66q35hsej0hwnedtn7jc84dcm9quch2lvv0sw84773daqelvehg", - "bc1pkamgavruhda2nde62a4lx7pqw9ztm2j9r8v2ewm8qe0w4p4hcu4qd8gzkr", - "bc1pdxu3k7n0n3ygltcha4cevkgdydcj6uhayffgprekcs7u35hx2cpst967jq", - "bc1pd74q6mn8k7h8jdxlhkwqrw985cnqzprcngna596xvp2sh7kglg8qzgsaqd", - "bc1p7u73kynhcr7dhfstju4ek9c95epum278z8zxl25895ra65dd94lqf2xq58", - "bc1p5lsps4kcyuxwxjqfvdzm6zjasczael88n0x7th9luw980fm8cx8qvx4g7a", - "bc1pw0xp96knvnzga9f4k8xdn7gmuj055gcckyf64ntmxqz6madxw28qhvgxqk", - "bc1p46j5v70afz6fu4xraj7xz9mnc0hrsly49dpez3jh3wkl8dzty28sz7hjgx", - "bc1pu7gkduxww9h8z8d59huhtvkgem6s23cwxztut7hv975rdadpnjhsjkuqzz", - "bc1phrgqgzg2m2387tstt0h2z58wm0x5z6kdacedu4swpctgetjz7qasx4qvwg", - "bc1p9tzzchhpkrkyrexxqhpznlfy7k6gdkc6v386fzg8jc4zve8y3uzq9eqqgv", - "bc1pkrnjeq7fyvtj78a0gtef54w42ma6jf4n4lzajqu2wk6efje3065sva7lxl", - "bc1p44cfew22t2a0zp7g5gnd3sejfvvp3rldffcn94q38prq5e3pcp4qx3yrv4", - "bc1p0hxgpywhtkh2p833cndr4mz2uarrsq2plkwqdp2aq5ufu23sjydsws8a22", - "bc1p4acqmh49a698vdvwptz2fhg58ar34a5ufhlj5ddaa9kut000dvgsxlkrvu", - "bc1pja0m7x9zgzg2678gvjlm834kp67s5e30yax3dau69d2p33pjcwjqdkadr2", - "bc1p9z93qkgvntswna72vwhupj3cm4apg56pwh059xu7u73ap496vhdss45czx", - "bc1pcjlq5sw384gg252ymjyu9wxrknclqk6npz6c3ka0zkq9rt256sqqrg2x5k", - "bc1p3927nw9wf3t0xzaxplp4yputmn3paly208dvqhevydm43afs2tjsflu7uq", - "bc1p950r6uxszgeskmdsu64vnkxfskzl8x7w2cg2urr4jrflnsxqr0uqkmgfta", - "bc1prqxcek9ruv5s9ne0j5juvgtz9h2cdesg4x8r050p3ghuvgha54zsjv38vq", - "bc1pnwm2f9an2dhpa43jud3l8cvklfntaa6cg2n9wznupy25xaaww0tsf8fydd", - "bc1p0rj8p9x9lgktxvd0yra9zr0y4cw624r02q8kru5pncnymx5vse7qzfecpl", - "bc1prutgxucqqsnsw3qmqk5q0e58epm839f2waexfznvp445p5zuwhvse6krvg", - "bc1pdezz59aua3suud5rk7a20wh8sqhs2ml3k53a5pp39yevldua5ctqc9m4h8", - "bc1pf3je33lg7t5qv05jj4ucey4jufjhjuj8hlvdpry3p4p3wphvug2qs0592j", - "bc1p5pf5f07wffs6wp49r6ah4nzt6e7za2w74jx3ah6mrv59mu0g0nzqhajwzc", - "bc1pywj4929s39r0tcmyq7lpwzsgpmgymz4yy8trprpkjs5rghgfhfvsdjjw45", - "bc1phwlwtm2us7jw069nqqhl837ed85fxqkyhkxj6wggej0525n3pgzqyh2gtl", - "bc1p8xytttd4kkjt8naqt5959dzxa3mqwj3w5mjlml9qlwlvf4gw8hlq5p2j4s", - "bc1p3f8ygd94c399klkswf6x3j2uh6ez382072an2je8c8c492c3avvs0zzpv2", - "bc1prs9z340kxrws707ac5max6whf0luuw4atvpeateaggw3xp99ueqqn5ccqc", - "bc1p39yjkttuywfym7pf2ry3kmr8m7ke8lxxw3pkgesynk0alq9q24rs960yhk", - "bc1pm6tklk86wcqv7qznchk87zyvte8yx2chqm3jndsavjty0ra4dvpsqwlq00", - "bc1ptrgvvxspx2t4hxqwqw693q9jjys7dzqf5a9s0vlvv5ffy4ru2c0s9fkhdz", - "bc1prfzse9jkh0g3xtsu0mp46lk6y2quzeey97xne76ekaf2qwch48asa7n95r", - "bc1p26789e7ktfdsmdvgf6dl6tppz9kva8l548cx0drjck69um9e36wqj7pdnu", - "bc1pnszmqkmpkcukjjpmt56we0k440a97jsgmpkz8nvjr7r8zmgczshqdajv0w", - "bc1p6m7keujqz0l97pyxkhpzc9m4slhtad2hf9c34fkanw3qg4gkk59s84ekpn", - "bc1ps6zlx7rayffsds0ueuqns4mwcvp2j09xp6jwgtmq4wrnlqm0x7qqj220sc", - "bc1p92na5dm5san0d9dkup5udsu0sypduf98yhwuqg2xmdn57rqlsyrs3j7s99", - "bc1pnay5eq0zahy6l2ucd324vyn7x6xeahdz05dvxhgpggxeafkj6vcqnuwv8t", - "bc1p6ufgj3m9cyy4fsje7d837p9xpz2lhd04r70rn5rwq4j7fqnh88kqenge8s", - "bc1phj0w0c3kv2exa9zsduqf6le2z2s43x53zddm29zq8fm3scjue9hshv32jz", - "bc1ppf976gpayx9wysk46ecrjc7fq0ahyt3axxaacl8966afc2n2qqnqcg4l6d", - "bc1pv0yxgamspm9tzcrk2xf9nv6jg4s7jwj2ca0qek9fzgl60axtwh9qwnyn48", - "bc1p3cwm692gudxq0ecfs9jppnnr68agza7vl6kez0s3zaurnml4p0zqec4xde", - "bc1pnvtxpgh4kqwmnzdchkzken0nsnq0frdq3z7l6xwuc47ql4kp0als4zyt6a", - "bc1prxk8ghc55hjc345vasr758ue9j9dym9gykegwu726zee0g79aqmsd5cqqq", - "bc1p6t9apd9ayx5rexus53knshyaarz428ym823dmwwh5rxh5jdax50qy3xdgn", - "bc1pwfhqhx7e8jtc8lpmhned7jhl6zdgjepywxhe5t6l72ha0vylh3rs66kg5w", - "bc1pc68nl5kggupwz3v3awg84a28rvu0d7a7jz5gd23ele45n3jrulaqalyphq", - "bc1p29t8gccgl9cj858ejzz7yj7kmgf2xj04aj4en9yc62mktmys5a9qz645f7", - "bc1p6s6rzus6vp36ts3xfletfe8vshactyapvjzmc2yx2jrl2pny2qms3u4xej", - "bc1p0k9ktare2456cny02u4jq057z06hpy5c0ycgy99x8wzed89wcysq3svscz", - "bc1pq9lm54nwxc402qccue5xdfh7tzcuvx0e22k459fjtar78v02ahpsk4zl30", - "bc1p0p3awnz2qhpwf0k6yhr0lqj3k4llyw5d39kk3v306g4yfyhz6y7secqfzu", - "bc1pgx3xweyg4gmwgdc9h8e6nkk4xs7thm3jq48g9350c3nytx5frupqw2et7c", - "bc1p6d2av5pyz8skfl3vaqk5xx9xclwkyfxlh4auj5g2hr52xt2exnmqsksu9g", - "bc1px09qldpfmq4wvcymzfcgwddaa96fklfn2vhk9mszxgrmw3nfyvdq98map2", - "bc1pkpyj7mjfflavw5f2vuc0w6r6q6fxwt3egkptehnjd7wg7c04pzlslps6tp", - "bc1pgkuym99l4q9m2uk45q35jsfuqc2s0sk375vcyspfducwfghh5fgs5s9z7j", - "bc1pfqas693mumf5yz095lc3xm8clr4uc794dcmj97uef6x0twx8c9tqsymsup", - "bc1p0zx42t8mjr88l6f9ywuz2yqtd5f4f4p9dgj2g3dg2k5fvzl3fg7ql78wqn", - "bc1ptk9tegqxsfswlueldw9fgd2xcpwadq3mqcw5ctmy2nsn3m8a02vspsklw2", - "bc1pylhavzjsyw6vx8lqe8v3atv0she6g6vv60twn9fla5cu98wwzmps925j2v", - "bc1prj0sejev254x5xz297uquhuhqtscc3sr3d945xrh2xtms3sfy6qq62msg7", - "bc1pa8svjpzcas7aktmxjzl9hwsvnftncsp9vxmuu4z8xpa8ujyj3ckqspsytu", - "bc1prxpvxmj4fkvr42j5rllswuzwkkvdsptuq9kttj4rnnq527dartpqfzqw0m", - "bc1pnvj7nv8d9pv6zdnjyrpq447rs6yp8eeaj8jutq5pmxsz82tpmkvqudsn2x", - "bc1p2vgfglvf48029n64q7vdh3987t2c5an358hdcfcg96zs5wgrwc5qzju3sh", - "bc1pztvh77gg7qemr0xl9r52at7huuakhzv9hnttrxmdsuusf9ul8mqqp770vh", - "bc1ppnarnfmkrgua0tfgnq0m0q3f9s6tfxtz82zchrjr6t0dkdxrmhuqylfz6r", - "bc1ptdwvxh3rspkfd5d30sht04myqvnnl7tu4xefj3m7nt6l3w7slzqsdl3e02", - "bc1pffygnda64kcjgfqnxy3tr0404adw7z3qea8nc5y37dpnphw3j78stsh8z7", - "bc1p5epwrgcwm37vye2yl9hkmc0w3kufxuaj839hxmdv9ug3a4v782hqyvc2hz", - "bc1pv0kx725yzchvd7jw7qpdek0l220wgg6tn3vgmy7ttxyhu4gpa0cqqh69gt", - "bc1p8tw8epxzhjkqleas35c0yvvgnajwppwzn6yyqx8ltgen2yat6c6qfdsgj5", - "bc1p4u2tunj5sp03ltrf7pefauk7qdwesdheuwnvc24s6xguvm2spfws04vlct", - "bc1prf6syd440udlxn3066z06h0377p2nnjl6n532kf75edt6gmc34nsldn5t2", - "bc1pk2vjynwh0pflq9lrznr2pj5g5ppn4xuxsvygxu0h6t9n05hr0qlq9j2s3l", - "bc1p7e5sh6wpx2ysz8xnt4k58pyxlmjsyyvp2wcm8wwm28avdadjly4q7ey2s9", - "bc1p4khp6r7l8796snfx8nu76py7axd58dwwupvd8c4r0d3ah0chpwkqtazlkd", - "bc1px0s74n4086lmmwephpk8rn92mhekjzklzjhvkuh3ume0hx5eat6q6xcrny", - "bc1pau630cf0wk5g54w7yjmj7e9jpca9fc75vwwg8nfe3vcrgee4nnxq52w2ra", - "bc1pzhtmjp70m0wvxztruzmayyls57sf4gxva40urchxwj66uc3qdg2szgrv03", - "bc1p7g0qt8lnx3whz3k6wyudg34090xsyujm0fpdaw2fmexdzqgxl80qlze9fg", - "bc1phfzmlygaqrx8wl07fsjpql4gjc5rujamy2a9a4ts5q2z7l0p6g0qkaz88d", - "bc1psjhet7j6pgknqtp2j8nu3wl8rfzkfgx4ltpwjatlpsgs2glp5wwqn8f2uv", - "bc1pckp77y28s6yr39jcu8tvj04glveg3z87zn7vl9k0tuwrtxt6krrs080gqh", - "bc1pyxunmpf7yqguwvvdejp0ecngkv74rfnleemqq4hzdxcj0my52yqq9cvfvy", - "bc1pks8znye3hcejm064mjwcu0w4ncd4wxz77nzs35l4g5zuhvame06seutajr", - "bc1p0tx7qz6r5y3yr228kjgmma8xdfgxwuawrr53map5xqcqf00246yqn7lc53", - "bc1p2uwlhwl7s9r5ek20smkwk8h7kqu23spu26swtf8gmh6qh0t9ruesnayfq7", - "bc1p3kck740uespvgzjp0s83t5l8almwutdrm34rghhrywzahe8258fqsu7mqg", - "bc1pa0r48cmapkh3xhgtv5f2cl5pr7u4xzhe2a8yc9e80nvc8sqms65q4gh77r", - "bc1purtev9kd2lmrz9942cenh2m975l8d2xs5gdulhxp20wz2zzlxr6quwdt0d", - "bc1p3lwg0rx5656nezq7r3g0wku0c8hlm6d3h89epxpnze9st4p33tyq8h5q92", - "bc1putlrv8aaekfq6umcgnt5mx3tt4nx7tgjtqhjwhvseprxrvvtr5fqxadz7w", - "bc1p63878d3qassch0wl76d7v0ly52twu8ynzs7zxfp2symvq4ccqpkspj4xs8", - "bc1pju5xc99h6v26pws7k5kmwuqg57nalpu8n7vwwxhm4wl543rqyuxqsh6klf", - "bc1p7n4x2pnkwcx8umuvc3sm2ppsn30q42d95eq48q67auvgw3tu5m3sw083xh", - "bc1pmekczn3lxmxgl2c9fx2p9lqjxw6hkftgr69pppvv0gzfdufnxpzqrrhkfp", - "bc1p053jqn4gmqsy7vhhrvesel67a2v33cjc0jn2e57p2nqec23fepzsr67x4x", - "bc1pdfg30vwxt5mdqsj7wcnq5j2v0vhqr3v378keeftwmr5jje26c0tqer284l", - "bc1py4v2prj5mldm3pzn0z7uhyk8pscnrpy5qtpu8cc34qclldj7dwsstlw9nt", - "bc1pv32kdmzcgxqecvj7xrt2l0yu9h88jfx0tv23ekn880xyszcmq6rsvzcx8r", - "bc1p3jjluyhux5n3xrnd00759t47xm4faku3prt93zqwk2w824wa8hsq899f0u", - "bc1pjd736pr2trfdnnerx0j576hxqazgay06f23tty4sav4yutsqr0es7uxyag", - "bc1prm4af3cx9jkxpajqvv4xaxjjl5c8gftywyxt3frvk6w2a0m6nzfs7kvae8", - "bc1p2gl7lleqgwe4vmyd0mr696lxcr4meykwgpcmcr086xdjhercwn3smv9tkj", - "bc1pc3ma0j49dr8avqcclnwgrcddz9ryvfa2tvh9gr633hr8d5kz3s7qlenl34", - "bc1plfpzhck90fyultmg69285q6nyxcxqe06xejuwe4a0d5szdpfee0qr96ten", - "bc1p8dc4e5h836u7gv4hds7zzy2qmrgzmrtqdrd3tykhh778za0y6z5stxqhyw", - "bc1p9xq4gzx52cfwmpvg3qhyyky03qtqtd73awhjeys4773cjnqjh4rqxqz3kr", - "bc1p7dmlqqd0fy8g6ru97p37md0n9xtxxeqtn6j2qgejx9gz6pn360ssyp65xd", - "bc1p0hnzqtp6wgscservmk8ap9qfdvf6yjvllng44m42q35uskcry4hq9uxpmn", - "bc1pnr402uukdkl3yxek2e9z3yelj08swqtrwgjk8xga7ye9ff9jy09quetu46", - "bc1p8jk6jd90mrs3w2vhesprkf266esfqnappsktzj5jqxu75thfkv9qugv43n", - "bc1pvga7m9d23rzy3mdca0gjx2dpy6a3ans766cz8tg62ws9z0wx5utskw7zu6", - "bc1pvqlnu6le2lldwvyxsx00e9798want58575cs9m6lm6g83rr0r0asdv0em8", - "bc1pdueh47ke294jrltwe6ccunqesf6r536ejlav5245hc546chseq5qh6xlk7", - "bc1p33m0unzvgz7pd8gmj9mtwd09jdzutnvygn35xtensh70p53tkx7s8nvzl8", - "bc1pmm5nycztt9zk5auepsnny5yn3es93def7xc0v2y3xk42nfpdugkslgqpks", - "bc1pyhmjf0jpwhhudg6wvujhnntukfs58x8lklcc6qdng496224ruxnsvylq7c", - "bc1pzadeyfm5gjs62pxd58fwqenngxp739wrgtksj6w8dlk6c6rn3ceqwkd885", - "bc1p4tpfr9e0fmdklapsm2c04h4j8jgxtx56dm44jgu2ase5g0a3twtsvnk6ku", - "bc1p4wu8jnjgd9umt4054vcg6jrymk3w5f6g8na7ur9ds63qq3yklytqg95evd", - "bc1ps2t75228md4vg0zpppnhj6n0synl9440skjhujvex4c3x4pr3vgqvrq859", - "bc1pgvd4qcdd3jzclj0qkr3ywgvfaxczsrtfugw8q7w9nzyz6kq3lafq0ftxtv", - "bc1p95q7wj053hs8nr2qm9t3mwmlr2yyuttsy65umh9urwxzm7stp3eq0pug0f", - "bc1p37738u5e3nyxax05xqtaq04ms5ftxefzzjjn67spwkk5pa32gy7qqvfmzj", - "bc1pv9xxk6tw6pnexs6a5p8cck93yy5enc4hnq3evlj2676yqk7mfgfs50kx2k", - "bc1p8ujucx098vad0ql07zxk3nd93e9nqhmnw9tqa53un8rmm0y226jsvtwmq3", - "bc1pyjczs6mk6exu2nqyzc9rfyp2yhs9ymn2zaz66g7myas4095ss3cqsshluv", - "bc1pkxh6lp7qx382t459uv74lpxk3yk56ejwwwxgmtdcyna07gpw2pasqj3f33", - "bc1p0uukvc6m4y0t0xw8lhr2gfwe6ca55klya4a532r920y3w6pekn7q3fvysm", - "bc1p8n4ysprg5zehn4xpkerptef3hk0q83latuvkedh4ch9ermtzuu2q53f99e", - "bc1p4gvw2ucsyk2x30zlwr5v4t4zpnlecy6x7j60e7jx99tezhq465gs3f32kd", - "bc1p87408770hde4zms5gh406sfduzz2v2887tqcq4kq7uua26ckr0nq7x33je", - "bc1pvjrgpzc0wexvzefgqd000czzvjuxfevq0u5ugeg5l3kz2sa3tsfsmac9nl", - "bc1pleljhfukev8y8ws8eul2k48z8magsauv0x82qx3sfqc3nh3lsgyqvw4hy9", - "bc1pepkwm426f4ewp7xhj9lpymxz28p36z5xdf520dsxww8um8e8wc7sc54z62", - "bc1pjv2r6lfzeunec7kng25qzl6cgd36hghc0nvr3e9mee64h8mal0kqs3rkyl", - "bc1plep7sxpakvlhm9783vfwx7sq37jrmwhj7vjjxer7ympgd0peecps7dcwns", - "bc1phcrlp04g0dry3vyn9rjv2edk54nh2yf7y2vguz3wuh2aqzzp5kyqr0dnk9", - "bc1p8j7zrl263cf6hcfhewvecnshdrtvp5e76cp8e655aq2tw724lj9q49ggr9", - "bc1p5uwzjh4fljjh7dp94dfj69xx330z040n5duelnu79hqqvdyxzdjqkqgleh", - "bc1pcngrad0cy64dljuayvlsume0usmhtlr3l6ag26w5dcml3q5k6t0q2k994d", - "bc1p89mtd2ujerzmkp4jussyj0nuxkm0f7x0cprldmlgam7a8xz8jwhsja8gpk", - "bc1p8f2ctg6l968l9lyv3eqjqd77k62yd37fwmpa8dgfgp0u7n59qu3qfu89n3", - "bc1p9u30qm0t5j3dsn94mpelyffpddnd5hff2xcxrq9q8acuppcn72lsqnwtxj", - "bc1prq2gldezs3wnp3h0gzyskktvek6q043gqrhu3jhgxfe75glm2ggqnkjkar", - "bc1pzjd2gfdv6vg8ltky7ym5mzxfyulehw5e5qgukcqluw4jhwhsst9qykcxux", - "bc1p64mhcws6r2qeesvfksk8h665e39e3ua4w5gnhm6wx5e9nadknntqvh220n", - "bc1pa0kty84h7qmc23hfjhqm22yzlkprvgwrl000ft92ea07yywxhqtstnwx45", - "bc1pn2v487h5qsly5ct5uf4d03ukm90hwms2pe5f0v357wk3006excvsetwk4h", - "bc1p4kuufqx89zz9j4mp9e08y6lsx67h2ururefnkqh3yc94gqxpszrqpp4maj", - "bc1p5xts5ycajv98a5tpfwj3pegm6asph9t4kjmkq9ednzs9j4meh5ks5cl2hr", - "bc1p9rfddxupghcpjuh7f6mg0v59qt7stuftzy7x37q05647ae5p9wlq2zzg7g", - "bc1p40df6m3h859ljn7knh38fmpz4ylp7x02d0he7yh3hp03h9lepcjq2ge7yj", - "bc1pt748hkdmc9nyz7446n7nc4nukhxzn5d7zym8tw2s2w8gu277xj8sn6w5ta", - "bc1perdc5grmfrkemxa96egmdkl9ymzghtvekja9u3gu95w0nhnvyvdq30ktg3", - "bc1p2ph75uuvj4phx4vgklpvyjhku40qm3k4cqayvp5xcxu0pg4j2q2qdl5cl6", - "bc1prvkvnvm22ddee46vuts9t3uaun7uz6hstuejtxwvnwnu7hn0x6gsp42zg8", - "bc1p06r25uls809rv6zankllda7czekdnuxekm4adm7uc94epyh4q7yslvcn9s", - "bc1psc6q473sn56j4sj6uvqgugj0xeq6gxxqmvkc9n2rp4erd63svz0qdmlr42", - "bc1pe6jfsz00t968sp2088lclln4rxf4dl8u023w7t83ehh8vj5wwfrq06r4nd", - "bc1pp5qfvpzdmj95rj74zrkdqj33m0j9gcjxa2a9w6z8pkdpy9v5f9uqt3qp0x", - "bc1pc3273me72gx3d8hqrt4teqkghcjh92dmq9xud4xzmyu3qtl23wxsgh0szp", - "bc1pt9jcn2ynmguygpte7ptse85gmtgvyd0pr6dvh8a4xkrujc0zs3cs96eqcg", - "bc1p4t2l9uuqs2xj4smgfchnt7g2x8nzd0yr4pnycevklx4mm578x3pqhjh7yj", - "bc1py4m5qx2efz2twywczg8484gsmnej5leyhue46xa5p0cuj8nn9enqzhcx05", - "bc1p8ydwpr8g8e2h7gdlsqxxdls4l9ns3whnjtdjlnglf97k9evla4rsjd0dmz", - "bc1p4nz34tmrpwr4khearkc69wrsncpryslnwsnyp4s5ar3py0c0fn5s8yxqa3", - "bc1phdk4r2w54d66csfrs63vvuxnsxqfu6ytcxn7fmy3erylpu98qhlszla5ne", - "bc1pc3gm7tjld7lm024372u3a0lepgeywkl8gyd26tj20mf947ey6mwq72zjk4", - "bc1pqlmyqh2x8yc6tsq75uelek47syjl679aw3yf78pgnwneukfkpkrsq0vngl", - "bc1p7afulk4dcvr54sgh04c0v5sq30lltrp00vxhrnln8255gqja4dqshznwy0", - "bc1ptjfszgnnk7y5hlc8dkssj52k52mpfutmvxakd7lj29wwyal2vypsflg22d", - "bc1ptk6rtztrfq09qzccczhh3p04f62zjnx3lwjkd4j3hafmlffxg0zs9nc046", - "bc1pu6km8w05v82vd0ak9lu7cxylfy7ecu48wnvzezvmsa9eme647gdqup3th8", - "bc1pk3hqxvrzafpa477wcg0cj0ey3gykfpmqqk46ajaa9ktn8vlvgmvsulythe", - "bc1p3k607aj9r2yewen8ccs3a7nlg6d5nvw9rxkh2slvwa58k58m26vq9qd69r", - "bc1pu2fcyrts3xzjzde0pukn8v3kfssg800u5aetvvwaw77emm4wsmfqlaggff", - "bc1phta4er2temk59jraae4cs5gdm7qm60suhju0nqndasddj9wln4pqm3wssk", - "bc1p4cz7mrvs6qwm2zrnlxt9ze0w72tm3d8rd7mr0j3unw2mvqkaxrmq0gfly7", - "bc1pwvqnxzd9y5cvmrrpvf5pmdaqvn655ppt5gpcyqa9lztcksxeyepq38a3jr", - "bc1pru9v0guult26hln2nuzlmv4uxsx2mle4f45rk9e95lf65g8f5pnqhlwzpw", - "bc1p2uc96wv4ksz7zpg98nmumen7sesk935an3lqjgvf4vd7cpls84uq66jk4x", - "bc1p4tncukn859anvd2u8h5hj3kz4tkxx2sygy0d94rglrq3wr4ds8us3r9ztc", - "bc1pqfsrmsdnejazzcl0k3vczyt0308ra60ens34x9wpdr9mmt9jhewskstx74", - "bc1pwc6pw65wxc3kyzdqth9yw43t6nmn73uqugyrvj4sw0qe4cw7gwdq95zk90", - "bc1pugcqyj6k4gv5upnug4mfc0ht2rwc6r6caq6zfu85k4f6gnrs8v6svdyye2", - "bc1pxa0mk26yxn2edne2lkzk2d60kseafddmm2x54wkm77t3esq796ps6232tu", - "bc1pkdy3n0wdgjwtvnc0ul38lmsgdpdchqauvnggjq0tcsljjkqgaghqneeer2", - "bc1pymhsrhg6mz6emec5n3z5t6mwlcnmatrse9ndw4hvpnn67alpfqkqqsstlw", - "bc1ptgdh7e2axw3q0ptvmf5tm8rgduflp4pw8jrdnrmunw5dpnl39ucsq7zset", - "bc1p5pyt0rd2pqsdkjut84y0smuy5f2qmp2psvke3f876d09ua4gfvzsxxga0p", - "bc1p08yfun8ygfxh53lwhx5kshuzufv99sftlynhu7k6eh5wa5ezju2sk5v57a", - "bc1pf4hnh5y2y09n20au4qwdns724llcwmqw8t5x23g2vyed2qv8r76qc8n2t0", - "bc1p9sp9nezfxf88rqz2dvjdpq3d8snp629sk4h5pzyxek6562depygs3fnpft", - "bc1pww07ym94ec0lae9z2rzrd9p3qjemgxhwrrnmj077vcr2sxa0mjuqxx2xqh", - "bc1pfxx25sknf5rx00vzm97s2pkkfrcdlgz85m7a3kkcqnazhfmamgms58dpgq", - "bc1p97309282sa03ss3p7eyt2khttr2atwzz56kzx0gdkyssz3etm5cqfa49za", - "bc1pysu2r565hvc58trjj4y43jmu4p8saz4hqh3lyf8240azapar8cfqzk4lya", - "bc1pm0mv32l7na2h48w25qslqtjfhzyr5ewpndvqtf4rpwqu0vzj7auq2herca", - "bc1ptpknp6tnaxzc4u3wlu4407hc5xqkk8dxgd703ydm2vtvhychhv2su5xtf9", - "bc1pwa0ez0ltgpft2906p5ga9vzumx6lem22w7apedsvqlr82aw3c3fsdphqx5", - "bc1pep8y8qd5naex59nk2z0tdgwrxtr3yk4x30gn4eg23wgx5a0w3efs8s9k4f", - "bc1p0ug557eudeew0yt5g5vqedknex94qype5p76m4use265a37kghks43yyc5", - "bc1pcaxge6rl7hnypa49ht8yqczrrss34fwc7ytg2lts5t68ughqny2qxjh5rp", - "bc1pdqysx4ess6m6apz3esz3hnf82xc3te2k02ns733dw6kxhnqx2rpqvp9zlk", - "bc1p8e2z5unkddqznu78apy4t9uqfq4nuchyjym6ncg0qjcehu7vz0ds0plh8x", - "bc1pe59p0me7gtzxqknk0qx9cu6ng747ncm8ymakpvwl37t62wcs6tfqr8tehm", - "bc1pg4adt6vr7u287pc8mu3qf62mqgsjj2rs3syaseg24l6lxcm2zn9sc283fy", - "bc1plek50uf0rscta6v2pm04rt7rjar6daf2at8p555qqvx674cfmecqmy95dj", - "bc1py9phq2q7fa7xrth80kyprez6me39dmtsv330vhs78u4mh4z82zgqg2f22a", - "bc1phv5r39k4szzmf7ze05tq8fj9qgwxjmcszp5qhnlyqam4lwmm3w8qmxyqzj", - "bc1pk2rmj68v930euk2jn6zsd25ekc9yvrfqwtv4nyqs73wa60d50hrqh9te9w", - "bc1pxsw6fkkt5xtph2neeksagz3n69a9hz592kalk96w6ke5fpwjy2mq9qnkwj", - "bc1pn2lswynsl7az9gquvy5058xfndjvnjmmze96snkpkfe4rq7qpyxq66qn9t", - "bc1pu2yhrf4cl7rs0gm38wrl5ftrgamf3qlwfh7rrxq3e94ekyfqsrasffczlz", - "bc1pq3shvgsw6mmhs5f4xxtt66pszn4rglpusvzm6qkxs3qqfv6ks7nq3r9c6s", - "bc1pddt273k0hwp93llfl8cshkw6w7qq5g585ddmrre24ejxx6u5c9nsw8pxsz", - "bc1pzgcna4uxf7e58gn2ue8azlzx2yv3t3xju220dct2dmm3llpg8c5strukff", - "bc1pzn3jhpta3645ehmat25dy07wt6xnfqhghd30s7j6ma477xz7lgnspxhz3x", - "bc1p5gnx844gge063wu4awml0nmhgve59wwya62qznh2d8tf59c2yatqys9tz9", - "bc1pqwjdjdv63pvyfjmedlh95tvtupstqlg3dv2fdy90upywa37e9pxstly695", - "bc1pqs99zpjup8xhrtr6rvn037heq0g0f5hray729al3lceevlm9k55qh6580a", - "bc1patayjfuwxkrg58nw7fqnt9shgwxrn785skr4ze0apqcwhxdg5mrsed0r4e", - "bc1pcwhsahd2sjdx73nyuhdrsz8h2w00rhc96jd5y0e6cvadk930l96qal2mfu", - "bc1p08g7pzrdxqzw8lhyz82kltyqx803x54cspr2z298yd7tpmxylgas2p2ykd", - "bc1p6vkxw7rpacktucdwqxpglqqau24r63j9a5ptvcyq3n76ap9emwtq3phe89", - "bc1pddu90epj6dx47a9m7xpl3wm63el8k9kwhrdyjxlu26zsalamenzqgfz08t", - "bc1p7c84retzlw4k38r63zy8cw29dgehttfpver9qy2ekc60kys3jf9qur24nn", - "bc1p5et2dt46a4m3zemqylefmzn6tzh2q9auj8hxahvtd4tk2ptaamhsu6w3el", - "bc1puf37mexuk3jur4ukv9yav3acvt2qsrljyvezdpwvt5hlz2hwamps0zr0rt", - "bc1pkxkxn4lp78yw3eg9yrf37mc7vamjx0htyhrexe3pf5flghcgcalqk7gaha", - "bc1p7zh2337lmwdxkdqmkcxy7m0hhx2j5pj24a5ac8yhvefjgux6smnsyymw3w", - "bc1pgnny2jnnqef8q48gc4hmswwy9vjg8mevwtrldgaycnh8u2h6chjqz3jv66", - "bc1pegsue39hkcgdgna0xvqu9j6s4y8m4u2ymkme0e08la723fgtz2tqjhmudm", - "bc1p4lzr72x74azfz4dkunudj7x3mdd53drzmlyf5tvvwlua3rhcgjssw44sgf", - "bc1p3ugqdees6qd8levu2sz40zs2n2l0rg77fvekp04ux0950jdda3zqf3t6re", - "bc1p2lg0z5pjyahueqs3qrac3a4ujtjngtdl6kzahmvr64xc7d9l454sade54g", - "bc1p95qsj8rhh3qsjy4dhfuas9ljlnkxsvqtxn2qhj2ag5llqqj9aens2xuedl", - "bc1pxy94an4yufmfald2en75uw7pll5shd8nmzlmrtmwqjnr2a6ymw2ssuw4me", - "bc1pvvfdu4gk8dm2qz3x0zn302ae2zp3u558ehl59lryjhedaamsnwkqmatszl", - "bc1plxt8s485ljnag9u9qj4rxwhweeg9zcwyy5yq5k659ska3hh9274saxakl0", - "bc1p698zxmj0wlnt6wn98lhqhm2uedyvtaadudussha93wsj55z5jhpq4dg3tv", - "bc1pxtp4c7knehe7u04a6cutqgdeu5zq95c9nttnplvrsase7f3hqtxs3url8z", - "bc1p5nhsrjx8dsettvcmzk07v0v6qgz38f55z72pmvvzzlph9gymw4aqqf5wv4", - "bc1pwqpeux5y77xt4hq027qt8ewd8anj9hdng9f4wfezvm0qewcwqlysp44fx6", - "bc1p2w7jugyq994grf7ahhzyqz2tv9zqfrs5tjhu9ump5w800srz3yps2gllwt", - "bc1ppewl4hf2kc2ulkxnzh9mz2rpu4gwghgxvzd4d6kf5ydczknwfaysp2tpa2", - "bc1plqdqcwcrlkaakht9hd8g08k9wgner6f7640d6tzvgw93t8g5c0zqpguql4", - "bc1ptp2nmzdxd2kry7xzfl3y8pvkdxn9qwth9a99gcx5nxsxgcug598q2yxgwn", - "bc1pkqrk2g5yyn796vpvydpcns7e70ee2mvvh2xxkraj3dtefca46e2qqte3kk", - "bc1pwu7dgwzgpnw29l09u2szl6petv2jnc3vc5ya6axwrja00dq2uqtqf8c4hp", - "bc1p5uej0lgaxreyzm55wr6auuk2zhat6xgp2umcz8a726pzxqauul9qlw8jf5", - "bc1p40tmfmlm8u6rufx7hyqfugcvnd930t4l7r3070wd955v5n6939pquvakmr", - "bc1p62c9fjuqsu2t09k7quajvtgp7jaj5y6ru5s0lkw893866802jnpqh5cgrd", - "bc1ps7ut3mgvcznuhxhy8mgxu7wkg3vhhxzvn68stwfrhqza9q3gqnaqh6wr4t", - "bc1pptjxtxn7xqlsz0wch93q3uzauexsy5spzqwl4cr729l5repzlqgqunxkux", - "bc1purngrm9dq59hjstn925f63mc9wlwxwx3dxuqvrsy6acp66ruxe4qgumje8", - "bc1p06pkrsgjmpdfe7edalr4yqhyddge659yytwtkqf4h79fqgcqvleqlznp7f", - "bc1pw5lnsl9rzdrhmczakyk3skdanfkpncy9u3zmqdgpzn3a4muuu7kqcmfc95", - "bc1pnh08nvqheuxzcwrytsu2qyqv69jynee095epqzfqyn9wcnejzzeq8vuhe3", - "bc1pjljsvn5cha99z6tyth9wupsmgjsvraeyzt2arhd78cfcyd4ftz2syh3t69", - "bc1pl7hwknajflmlpupu7dlj4mpydygrq9usv8uny8wt7nw7y44vz8vqhz3hfe", - "bc1pls6zgunjvs7amkhee2rpufuwj5uxlvxwhwsrt8744cj6c2a5anssml5h2c", - "bc1pjckhgcf8uss8n85ex9xrst8s7wxjqz4q3zdewn0mx4cx6cqggd9qw78wrs", - "bc1p4g8ul8g3tdll89nuyaqdpgrdc6xxpckywk6pwmvzh477zjdw4pyqdy0vfu", - "bc1ph6hmddy9nxq4etyrvt22dq046f87cxywc5029yg7dnrq8hd5dwkq25p767", - "bc1ptmenmhcsjlddmuemu5ldjh3fznel0kng0vzg7wzw7d2gr908wstqp5cauw", - "bc1p52psjrrw6yg374lw0yd2uzgc3avqqxxe9f699s87r5zyd3s6k77qx42ye2", - "bc1pjhf8yaufxxdj7w4t7s83qqvqwej3qezyvzfxntenx47px75egfrqcjxm2q", - "bc1pgdzs5s4rt9rd9w47jrdc86y7e04wq9l3s3ny09awlu6es6ur6nsq6dyvtk", - "bc1pnq3hdeul2ngqra4vhlh5njdhp2k9acatgwspksl8qn02ny777g4sq60kpg", - "bc1p97kkz60xnkn8ckrqswhjfcedahgt3pt6wdy7qqflrt9r5pm8s67qq9xnsr", - "bc1p0hxg3l0gjnq5yfld2yg0aat28afa29pvcapsfdf54ymvtc3p3wnqh5y56g", - "bc1pn8eyw3x70atz5wrhhdtvfsfj5lzdhrhrnegkf4vtkuvxm7ql89yspr5kx7", - "bc1pynp9vdtz77gkk3xp5myl34h0yyrhu8l95y8dslnp28lhrjf3wqns4yh0yf", - "bc1p3yp9nzeh37hwruqp4gwl6hatsc44wwdcdm8rzz3cur4acxq0x5fqx6hv53", - "bc1p8ht7vmtlksvk8nfqvvvztm7vhwdepxhdeenpx5m7e2hwam2ugwss0k6u6p", - "bc1pn9jwpxm4a5v6jdkpqyfp04xjy6jmkmhsnhnsnzc8j9hcy0ju8atqjtkcgv", - "bc1pt7g5z0hnlh4zwtgvg236xxce7dcfx3jaq00ctxw2u9prawdzs3wsemunhs", - "bc1pfk4lqzwfe3mxk2lneg070nx8rgva66uxdkhusggee99eypdammwsw9qjkv", - "bc1pasy33htw6jutujam25nkxvvrw0u2nufwjhvsjjf866aq0a09ch0sehre00", - "bc1pclsz7kh0ve8832hzlhfpla8q6zsgmx0a07y24ncuudrkekvae2rq3pqkfj", - "bc1p84vvnxcnfueqvdlptdjdppgu6aatk99k7u7whlhexhjvsqnklx8qas9ajk", - "bc1pm3vsehfms99g02a43atsllkra9q6t9r5yeztdm4sv0j6pvfn9k4q9ngqca", - "bc1pl2efufz3p920wlntlgr676yjgw0jhrsv98ladxnhqqeldyhrac9sssswhg", - "bc1p9nj90m44d6j8t9tvzt7mll23c7vjp7l600eh3xydgw5j2s0acz5s6x4fff", - "bc1py2e460y8p7fpv07mw0g9f7ghqhkgkf85ew7vfyznzgkhaug8nfjq6mchjq", - "bc1p5q7580qn0774c0axqc5sq46ruppsvaamjesylqfjsja6ahrw8gdqt990zl", - "bc1p8pvpu7eqjq70n98hl6pyl75qfssy9xm6aykfuepupdzydltt8k8q46u87z", - "bc1pcq4s0tnv2we0fhy0v9kwe4td2rw6vka6qtk7jne8ju8w5walpdfsdu3u92", - "bc1p0tqqvyfyzrc83h0prjtdyz8fen0wrsh77pe0t35rcxaqym63u3jscp4lt6", - "bc1pnwqa4hj8nx06v47mxxwj7swcuuyh4vndj7jtenw0gfu026e8udhqkzxtll", - "bc1prq4j306hrzlje697x0gs5lp3lnnuklfmhdf5uwh628lafs60gmsq3mcj6c", - "bc1phqjfestj8mz7nhj0a0egszf5h7xzm00yvykk46t6fks7mswsvu8sw6n06a", - "bc1phlpgh299wghnkasga0xdc3fxzs3kqgd6enajem3l3w9hkludeepsthj6ul", - "bc1p83szkn6u3a9qgnmt5acqnkygj8hx4en0dc55xe7m275uza3qn2zs5wkl3g", - "bc1pk0j560feqsmjv852enlns8qrz4d8gp9vwd2el3mscwg3090p75dqj07l8f", - "bc1pwk8s7uedcfngvp849jpvujlxtk4jyc92q2286mjh599m9c45symqjhvwyl", - "bc1p403q33hlxjykg3h3l6cg9gvpecj8vpsh8w7nncjs5j5d8jtf746qnhqw6t", - "bc1p8dxg42ae0wgwmef2dsemqjvusw534cw982svru066we83zq9vlyq3hym5c", - "bc1p78ql5gqvlufgxtt8jdyjuk2uhe3yw549sxke667gc5q8d76z5wwqw5pnka", - "bc1pwf4yaqhaqtekl38qga3qt3dgagufdhrvjagreq2jp9485rt54zvq4q7vu5", - "bc1pqvsum9l6lt20dk8f270rundvctenf0yefaa3p5xe2qwm7hp76rnqq6k2vy", - "bc1pg4fz6tkpsr4ehu28c0k2wcjds9uukyemqj3hy95sscsqe3fdjklsrgsqgv", - "bc1ppua86u69xx86dn8zd5f73m8g0wqduc2yg4nh6ltyr6m25frt3g9s9zxds7", - "bc1p5termqclnkv4dy7ld4697gkwsqss439fry64vm7mjne5dczjr5lsnpmllf", - "bc1p7un9y7h2xjgs7k96vpuq6swx3z93lf86msw9wa5vn2l3a9msuu2qq57paa", - "bc1puwjefmr03x0hpj0aytefcxc7zmzue7m2u89hunkvp98898waga5sghyna0", - "bc1p3kk9mla2823rtsz0p6vu9z8udenue0enhapnxtfshmmrl0y5kqjse4f0ah", - "bc1pc23fv7fc0lyk04ljl9m0tv8gjssmru58yqs7an5pu2d20yapyvus85vfah", - "bc1pcl0qez6e66w0qs67zvqfy2xwvdn97rz4f33vlt6ea3kzxg7uksdqw0ck9w", - "bc1p8z8ddy9rlpqsctk3tmaylh7rq08mpdc6a0nve35x6rpddrh5hc3q408mah", - "bc1pekyjgevy297xjlasr28f2amvfms9xmmzx4d7hn7p8ujglppshxgsffl2td", - "bc1p5f8jtf52w8k7ca984ljanzgnqnqntnzespsewnagjuzcrtrhqcfq6tycaj", - "bc1p5xs6ulgklf6m8p396fr7gl4hl8c3rpd4dmhumzyss6mtcltal6nquzuexk", - "bc1p66wq5zclzz0wq0mx64rzlgq0zx9dg4tw0lkct0ceelyvvurwm3hsevf8rd", - "bc1pnsz774ctry520xw85u0rvfeduqj8dfykrtvmxvgzj929cuqack4q5en4u6", - "bc1ppq4t6he63f3rk93089azjygzksyg7z6sjkpe9f8362djm28gh9asjzrs0q", - "bc1pu0n6ggnmzavuh9g9rnlflj52en87pjle8hwnwe5vd08f5p2rqqjsa76g2s", - "bc1pwxwsj3nz97eetv9g4lzsmvld3mz9d9n7yhaf52x0p9vtkmq2rkhsc327nx", - "bc1pufg9fg6725am8vfwymg3d7ysl2xn09yrv5w7wyyphzq6x9tdam9qw9vmde", - "bc1p6dk6rt6sde9eshzye9fzl6njdtwrckewymkgs2wz50suxdcrg3sqcsclys", - "bc1pkg2vgcn869m9sckm9d02e96yhs5v6slr8xjnpg69y74kyfvmvx7ssrsfz6", - "bc1paxh0ndfk8qn9jytt7x0kw9aeyj4sf9syxwmn2ws849m2av68sndq77mn9z", - "bc1pkkdtcxtkf2h439xcmg2xs0va7trt7ds9jrandg6s68q4wevpueuq0chlt2", - "bc1p2shup0a2wykeawgun6n46a09ljx337zt2m7tnp70qrtgygwed2sszgm3x4", - "bc1pfz8phtt6urkxszhxeyn62sru3cjufn8nlj8nt3alyhfnejultphqhmkl25", - "bc1puhupju6ak58t87rdt86tdeq7azwschgzh7wxfz9nelru8c9hqcysa4eysr", - "bc1peery98vrkdfq43pkvs67rgz726qhlhkf84a4ecrw3whh7a45gugsvj2hkz", - "bc1ppvesssqw87ndl9qdfadspszzwqqaj5rqy0hx9dpqgentajs3tqxs99syzh", - "bc1pgq6y2nhc06d07wuudtgelpmdm0vsuadu9ry7juh2f4vdfpgvzjxs54lvsf", - "bc1psd73j8fudll86zssdzxvk2ytfsycmlm8qww966us0z6ms4glckqs6hgf8y", - "bc1pnyzjrqkga9zsvm0s9kk9dszj87q3dgv79f0z28e0804d63mkhfhsxd2n2q", - "bc1p4h5cr5s4n78mth2kzmcshtq04y0dw4cedpntfkdnkayajxpwyrtqud5x2a", - "bc1pa0xx24t5ral6aaemuv28km8t5wgs6e7ldgz996yxx3ec3y0huxjsgdzt67", - "bc1p9q0lv9q5ew9gd8mnq92c24jugzkck0zfxmyp0xuxgmdg7f0h73aqavmrqu", - "bc1p7xht63yw9ftpxmlsh3jal0d3a9u407elunun6u2sj8feaa3nekhqlglfuh", - "bc1p7j3898e288halh27u3urw7p2j87l06vx4gej5dfmav2lyywy8hyqz70dt2", - "bc1p3yca7mme2yr49cfzwq5t83cguwha6gk3z5r0uggpwcm0k3xuc6gsxsc0f2", - "bc1pk69urzny9660gzcr4fv76r335ydfg2py34p7eruwt6ffsy2zrrys533wjl", - "bc1pstwtr3pks6558x74zr0xaerxnnkg4q6ztv04zdq853gvzlww5tnshj7xs0", - "bc1pt9qkwsysgful9ntc84yrqtjr3l9t8ks527xkg8wscle9ylwgqakqdanlwn", - "bc1pnsevrhn8fsu263cvxwr3g2zgeaefmlvlhqruzhpc8pqz43k5vjgqmasnka", - "bc1prgmzfhsyhjr4ze3s30rzr9vqe3g33hef2u27ugacpg5h4k3mnvxq3r568l", - "bc1pkce4w0rmm52evvynjp99whlfd2q8uffrkt4uvthwp5cxaq922ekslku4zq", - "bc1pzcuvf3j8h3eucmmc4j4rkc6ppq0yhgxfth2znrauqsjsdft0wgfqahksrf", - "bc1psvkskd8mwu58cdmrczv2wq66gdry7w0sktzsa7s57lte8tmgutcqhqkl5y", - "bc1pu3fqlkn3myts2l0x7w3q9csr3v65s3ej6t564we0e9jmkd8kscwsvhqjg4", - "bc1pdfjm3dc2thnrf46dxx9cgw04fk046vxrymtrylr3pvv3e0a7dc6s60xaem", - "bc1pmwjnn80mafr0l4hnjaj4nr9ps7jjmsg0e06r0yeme2utfpst735qek4w9w", - "bc1phlgq7zcgk2a2kwsg5txleer255qactn0y8d579yv6295q7nvkzhs0ewd9f", - "bc1ppphp60t48w39762n85h22aa2ledxjgq70cktj5mx4jul0dnaewhshg76d7", - "bc1psk08x74ny2jwhdqhdy7v7l6vycccz88q0m4cukehwhwjfvm44sqszkpev4", - "bc1pz8hwtf8ekdtve2h63642y9y865856k6fp8ye94888j2p4ycmvjlq7u98fn", - "bc1ph4qgjmjeq50dpud8q9d8v6q3e3r2wyumhfyyzkamm5w8gg3t5vys5epwq7", - "bc1pywj5m3wktl4aupfr5fcfa6wmtmmz3fufn4z0sctvtl9vqgk9wk3qrx956v", - "bc1p3zycszxg5jk689mt7mejuk96ls0ljhj6p3h73wus0fmzwysnnc7s232wl9", - "bc1ppm5q753nptjpy08wjhyl36kfeh4e070uefrjgk9dteaxpyhagzuqhpmr0a", - "bc1pkmnvd7cz9mdljpd3gs7sr5ffw6eg9nfvcvnt0v6wgut7x702cszqes2vat", - "bc1pn084zdkwe9hj0394fmn9th42xuuyenf7krlenpwq0qpvlp9l9y5sekypqx", - "bc1pr22rpnju5l34mjd4yrzfxrj7jjy076yanflj28h6tc5f7fjdr88qrzy404", - "bc1pkgjw0hg4c0tzf6fz9fgrpghvnadkmv5s55tmztjn5skgsjzkaxtq766sa8", - "bc1p7xv8j8aac4tszu6cazhph69enrs0acqt8f92a833dhfx29495ugsgn6tsk", - "bc1p0gdn4j0ex5swpsrqql5nx5wwm4emsh05d58pt4sdrv8kd9gs38hqzyfzgn", - "bc1pr0ncyqw87f02cq6690te9fn9gt9776atllh838np65xrsnf7julqkzy6u4", - "bc1p9vu2450wmwwn0j4ayhtkhhx0m8vd8ukaf7hahgasxgxvqxqkfgysh4af2u", - "bc1pwftjec4cqyjnmfvu4zpflyl3t4c2w5mcaql8x6dt8at5n5defvzsnt3d93", - "bc1pl9zxcd3x6g8kndcss9a8pprnny4qfclmdntmjqmq0ysf8rlzl7rs9gwlrt", - "bc1pah8nsqqpmt9a0zy5wzutjk9naj8zdwcrs4vgnte7awd96n6ad54safcrf4", - "bc1p233sqeryawfgz4nk65zz9y3wg5kqnwpf96snrzrc7xqmhz707elqqghwt5", - "bc1pmfs4jgy0s8tgngw0wwpy4kc6xswfg7vknnn54f33h3aed684zunqluzkhh", - "bc1pz32ctc3wxgg75ayqszmz9kw8gae46w20048xxuqckq2lkznkh04qh7hfrj", - "bc1p7rfwem4plepkpa049q8ah69jthg6yfsdlf3ua5e0089qajt3etasqnu045", - "bc1puv44qw0j657y8dezkyuevl4wk5z45ys9x3l3an8xtrm5kzncg9tsj80fm4", - "bc1pgxt4mx6w59ch3hj4ggkv2dquevvfrzrqjpggxqg35f052gqhk3gqm92k2e", - "bc1p8vq95yyaa66zntc2z0edt84z2da46mvg5utycr45szq45rgl75dqq9x9sj", - "bc1pdv642cd0ysfzpf5p9mh0rpvjuefhznhswyn04cymzknyqalrqnrqv4p04j", - "bc1p34xdv7e7xn9vk7j0nhdcvmzd32j7fj0q077dp2880c2385x9v9hsu3j54h", - "bc1p6sw5umv89ckntt4s898h6escmjg4l0uvzhjn27cf3650rusu639sxkuma6", - "bc1pwefncreecxw5rf0ewhdjztcema00nffurz5kgv0na920mx3n4kmqr3mjjv", - "bc1prwdrd29sje9q79r82vst48xc4eav22dk0u0pgkfeewv6gzwka89s299ds7", - "bc1p627680f52nrm0qh9wa4zfnjrt2cqevjt9huk68vcqh9y20u8830q9qgwyt", - "bc1pt92pe6d5aevwuqsgxv3cpceu4e05ydm4jhh85a0cy9wwvcrup55qycpwaj", - "bc1plfddt3c4hh3gunazggm0zuzcvcq3gqlz7q5dkupa64mzaszu4sqq4wx9el", - "bc1pksr54nn7azudxz2uml828hs75fj3l3rglyafng7d8277g945c4msjdfm0d", - "bc1pqqu6q3he0aeh7tphyhmx5zcszhlmgjqkvfutamm7zf90gefllnns5glkc3", - "bc1puuvyj3x62hz2gqptxxc3nk9ztlrh87z832es2m4h8l5kvn6lmans675qq7", - "bc1p2rtaq2l4na45zp34sexnjv3qqg27eh2pc830yccf5sypru4wyddqxv65wc", - "bc1pnk4ujqkl0t9c676m7lplq26rye5wrvy37e0s2j0wgqfpp3d8ddesnkgews", - "bc1pn972wauz9p8gznh894dq4pc4ztqyjrwwx7hvtpd4dpy3kphst5us9xf59j", - "bc1p07e4cdnqgt8wvakrx07mc0eppddk3jfqsrpprts07gf5uw5fcrcsa85wh0", - "bc1pjzvydu00599cur6z6k77kldd0wgfdd54u80c50aqr2saty8mgy0qlgfvj5", - "bc1ppvrdp2fjl8trlq3qj0xh2snzkfp94fm69uxl2ddfda8smn6lksdqv3stgv", - "bc1p4upfrz0dk9f58tkapl8wrqrsy496kcjeru8lhkr6qurls3a0dd8qejvcdh", - "bc1pd9q5776xjqrlmsws0fy6ehv6lfpa09e8u8c2mw7607w5a4ug5sssq6dehy", - "bc1p6zpu6wemkntc2cycvzxxfg685yagen2ynxyvg4s0ta82xeup25ls3twarw", - "bc1p3tr2a65wxlv37deq0kwdxunc6a7t9yy5ej8a56pfhsa03jndnk2s7scnxv", - "bc1pntp5e6xm3757hrq967y22r899vvpyf2zg8yyg3tkdgyxxa949dnqszmywz", - "bc1pca95487wdt3u6rfw0j8ntucmzse9q0hkusl7qhnesfpjqcsvtvaqz2c568", - "bc1p9c5wdvewntke94vhyztt0utzw53ksulc5qceuafnw6lgy9t8jjtsz7qcrg", - "bc1pjl9pdwch4h278wze6hsd49c4ykq7qltjam6k88z65z0navl2u7msu42jq7", - "bc1pppp24njh9x7gslt20vwz6zjnwtlc3mhvfvfu5tvxvc75hm29w28qsj3ne3", - "bc1p04a9pd28gu64wm9dwm0359gx6z4d7qnsxpy73m35qj2y447n9lcs4aqumf", - "bc1pfwe7mxljhqj8lkgr9cgdu78p7gjvqu6u43pgafdqe4hl42lkyjgq5k9w2w", - "bc1pw9g57qan307yqj3kvvqkmpe74c3ptrz3r2uxtjzldndqkv7s0jpqg34wwp", - "bc1pnm6s9e92rfvyyzauv50swxdnxv3ymhwq284m6dpry4walffxcmesh9gzh5", - "bc1p9gdex6pn79knhccnkhqqs98n2rwaacwq782man9e8wa6khsvur6srcf6wd", - "bc1p00pdrszssa30qnfscj5kcxmaccn9vh6qdznawfh5mmegcl3jcg5s66z8mz", - "bc1phzg47w5tqrqwj203ulrdla4qf8gf2ln5qxqznv0vq2fthxgtj9zsefgeam", - "bc1p7gaslfsus485pqhjg00s2p7vtege5nnfeur9hjjxpc43mpqru09shwxl5c", - "bc1p4ta9p4ss2n3gwq0jkqatkkmvzjk22f0cfa70qju39mdl3an8jm9sw3g5yk", - "bc1pucp53a58a0nnu3cka7zrtztzfhl3mrn96lhg3vtvugx5csy6vhtq2kmr0q", - "bc1pakk7xpeyvf7qgwynek3stceckz3u6auy5qgvnarpu0s84m7tstpsz9y9c5", - "bc1p7p8m7uamuauxgfprxng57eu7mtn9a4hcqjzp4mad48qzwh3c23rsgtmsvh", - "bc1pyy3jgpdezh66a2n3a5y032k0fvpvmmsfv66ysta6gs2fucpcvsaqqe4pdl", - "bc1pldfenq6d5cu85lhv5wa3m6zj0p9manqs35xmp8lcag6ymav2qk8scazqxx", - "bc1p279qam2pg64qavxucxf0zjsxj7ujuzv9adaxvp00zet6d305gjmsq8v34s", - "bc1p5tchu4eunl0wd086l4wc5hg4qxd4zqvjtf62x3prqpnnrpckjxfsd83gx2", - "bc1pmq8km45exxzf7uw4mqpj36hdxgw0r0j6sd8vwz6k0krqnqw89qmqcga7sy", - "bc1pdzr48l83mtfu3rtce0c95rhfctn9zva5aarnvhjvxgpnydk0867s2t08z9", - "bc1ple6kxeasw95gdwqe9qlzr3vf96mky0z0ern5n6nkhkzl6ms4s2ds5sffyy", - "bc1pthztsy3yrutq3md56garz7a6wmshj6rm29vpd423j9t58e9ahrgq322da6", - "bc1pu4qh84qk05zd3eyqmljfqdmpg60xfcnnq8ln0n8wxzz3eq95dwtqp8t42f", - "bc1patant06mxlf4a7azqhmtfk0zwas49mtpk9zjcj06ukw7p22nrwhscytl8p", - "bc1pwgs6f43wxryqjamep4jtwpwldkxxpd882q2m4k7txlgsg9yee25qprc6un", - "bc1pc9uvswf2z5tlj3esmmpz8yujxdvgt38m7veddjsqex6m3ctwk0vsdwyfqr", - "bc1paasggz08as7324azf70rl0jl2d7zzj0294mxqr209tldgxn6sw9qzp5fdd", - "bc1plnqr9q647dfgj3xkct3p4hgahs5fkjpduxe4luj9utznwemuszkst439vk", - "bc1pgvv94snv9zvffwaje9t36ajpedkfx3famax3cpgdyqx7ludxtfvq30nwly", - "bc1pgkhf3qqhyvk2p23xpn47zn2l0t054f0ce6wae4vnaz78snlsracsy9m2rk", - "bc1pfpu3j3hsaj40kzvu2jekwmtdqljjfcvmtaqq40mmntqv6y95mwzqfx00ke", - "bc1pt5kl0w8smfnwr0jtel6nyraqmts3m0vtrvdtgm7pxxdlacgp9tmqra78ll", - "bc1pxcet3f9qjlgxrnyygqeqmhqwlmwh0e89l3hwtpm0n275cy7gfldsh4edej", - "bc1plvtns5wp6s6mqlpk379uug7x3nk38vl6e0el0yr5l8zlms0a3vysvp793u", - "bc1py6pjqanw0f7d59c2wrfru64rmevrurh8n9m5q6jtwqc4k5r04nrq6p0m2n", - "bc1padhp8c34hjj3ha58g5mxcav0jxgq0xakzmlfywc88u8xrwts0nkqlu7q2t", - "bc1pqslhzlxmkl4nkxg3dlkdwa8ac3pwlxxxl4jpx7h8vg9u3rhp2tmszc03eu", - "bc1pn88veyuugut72pgh67ge05490gdlkeyhr327lusdhys53ryydhtqg3xz9g", - "bc1pm3szu6pmwj62l8zgxzaqca28asm7jkmjvrgfd8yml43ay3dwe20s3vuu35", - "bc1pn9pg37mlu5xrprr98ws96k8xeueqrl9nlwwzgz584k0lt8hvnc8qg0xu8z", - "bc1p4txw2zy9lmqxgl33w5ck7v28mve02nels6pwyg7gnysr44n5k6hqggs03v", - "bc1p94nmjnpv9dv5hr5a3g7weuqu9ufr8we5hnp06d7ww23n3lwqxrfs0gyrhn", - "bc1pdrse69fmr7ywtxett38lx7e6z620pccmk08964mx8qn3cnh4xm0sl476u9", - "bc1p44d50s0z9ce397fgd8gc2xdt9rkjy2xmmqme9fvzyeey3rfgyy6sqvzpv3", - "bc1pdvgasxvcul0dgg40zv5mzjame27u7fhuuxd78eattgvpqyzzq6pqrztdw9", - "bc1pzz79qth3enc5hjtqrgx5zwj70vykqed3h4plzq96z4g7u6l4sekq35eczw", - "bc1paf2ucxsjpqd592tcjmpxcs8w4st9svd824gq5j8f0elszr400e8qrpmas2", - "bc1ppll9w4w7d9pqsfhczshzc07cdle7eg6dghfe63zrfpmzskh97lcqw9n43j", - "bc1pryeqf7gsrfjlnkrctlf7ctgzqcnmslpjtw4wn0q9gesqlnyq74tsn4j525", - "bc1png5e74vrvxtkm2gw4kqww3hv736mdvwcvggvtq398cvse2t9k4xqqs7jfp", - "bc1p7s9em5lyr2ggdluz9rw7hap2sqyhese640w2wcv7tma4ysmms5xsj8xtsg", - "bc1pwzz9fkjrrxqse7p2y0fakfr706yd5s4k496lh6n4quh7nkrv0qwqnwaajs", - "bc1pzzapkhka333jes7ff40kgzwly3uqrzxpzyxs94ws4xcrj636mtvs5jvn5c", - "bc1p2wdhheygmmpm0uq4s5kvmxg0e7uddq9y8xsc2s3wetd2wqkgl36qr8wjz2", - "bc1p3979jrk0jl85k4q9jnsjer5s7z9vemxp3wm04k5atf9rp5qnvskq5wgp9z", - "bc1p6j07vhkeet3vttw5ajq7zd82urlqhqacv8uvkkq8qqkm8w7vw38sld6xqv", - "bc1pv0wvlrhf8txftnplrw0tzwewkdnysa7er6r4nwkh4ckr2vhdzfwspgs4p9", - "bc1pjrp447865rldswwwdk8q3wz2htk9rvv3mxpps0uw8sh22gmzezuqwfr42n", - "bc1pv2vxfhag9mqhfe7z8dv3nu7ca0ufwqxu4jf8kkqul8dq9hpa3a8q60wspf", - "bc1p87fyuyacjkw5gshxd3nl2urgr5wen4ldhym3dw8ghqyfaj3khnkqswmpq4", - "bc1phhqmgpy0lcnq67gdsfnykw2sezxgnumgkwzhej89fw3szpknv2vqr9yqpv", - "bc1p5a282cgjcwh06ysezwqe2mrql4k6lh0zreephdm2v6kslu3w5ldshfkdqz", - "bc1pesrgev5gqjfj83rn2snhzuduhkymhvw2dth7g9r4a2wtsynaze4qt2ka0q", - "bc1p7vnsqd0mml459zd8yj2ldqyulzzac6427yw9tps0y6p6p9lh08hq6rf4vu", - "bc1pv2uzfmj59l8qxvexkavx32rg8upejf22jfnjwxt26n9qgkx92r4qflh3ue", - "bc1pym53jhmerteca9fv0shq4nytfxkq4x4r90u6nd33mnww39vqq6hsztt8rp", - "bc1pnem4sk8jpuzz324u5wy2jwc0j5amts8ed5au8uad5vgzukm93t2qh4dhjx", - "bc1pl0qyf9chmkhvhvld6jcsgr2zcl8vus0e8q27xr5sqnj6ar4nj4nqexvnye", - "bc1pdm5q620fmem234pxwdmhff5tllrtc4vue9h2lre06h9j2vjywu8qvr4qry", - "bc1p2nc0jxaa47n9wfm5r3tvjtnmvpd4nvjl3w0kds8xs05ncecyj02scrdtrt", - "bc1pu6gmf2wsedsfucr4s7a0vs5lmdc02qhy009w2x59psvmzkcl6ytqwxdmj9", - "bc1pmd2wmyqw6a06426xscuq630hxylvz4ndceqssn0tcxccpvrtf2qs730rgq", - "bc1p6u07uhdncad7cslwfleuy7gzezs8whgxqtlc2u3zvxl383ckxhzqaxm36r", - "bc1p9fa34tuzt7ytu2hl3vxhtdnjdhf0z08va4993gfph5khdlq0nsvq24y8xx", - "bc1pcsnejmacshmywtcq6xyfra6awwgdgkdelq0tk4aa7svswfydaydqd33fwg", - "bc1pqgqlrg5k5wgjy0erjl222p6xdp0c633japrvpadytg26l92wachss7aynr", - "bc1pdahe29xget8vkkc3csspd67rvgfsz8g790ua3wxzzxthdqw7u2jsvgejka", - "bc1pv8trdrzfn42m0p3mzu9vqgsewn9m4h8p5vqc0zdlmy5eaq3xgnjsknv00z", - "bc1pr2wf3gtuyyaqwnwjynf7vx4dkp7k9cxxvq9gexm3trw659z6sm9qxv552j", - "bc1p9ne2a5n2chtn7mxmhkc8hd3ssdfsgdtncre9572fcc378hxe5t2qzaf60n", - "bc1psmrpm3yvt6x5kerckdcrrxa3paxnhg60ualeu8lysx46jn2y7ufqeuvgac", - "bc1prypgrrs5g72u6aqkhvdj6vyqsccf0yngf2ea9pjqhcdjeggl4x0sm80nfj", - "bc1prd53e68k7cn36sykzhr39w9wvzjdarp04z3cdc8e03ysyv5wu84qemxqml", - "bc1pn7zt00pd4un9gndhf8g20dylcxlv37dkgwr646zff6du22835qzqzpyk8s", - "bc1pygl8mwc5wp8qrmy4x5t328fkf3asn2ut45kmjj55ryz6jkdmtmjsgc925q", - "bc1pts30ksfljrrmhjs9n9trqgas2hfg84kfgfqd8gr0vgmlg8dsmkus9l4a39", - "bc1pd32p5k5hku4zgul87g7yd7508gnfum3cz40n98xw757cexrfhdlqalsj5s", - "bc1pthzqpswt6atvwdt390g00wa3r0sweufrkwwxe8hrdvzchd8zzz6qfjuc0y", - "bc1pae0az65zqx5cthuqdd7vkgsp78jtvp043mx2zpxhy58pug3hgyds8llmmh", - "bc1p75wz8gqkvp27qfrj74glflfxtznuuprg5gpv8fcpjaw07mws700q0f34xn", - "bc1p5ydupq8pg65gfc9vyh02jgv5m69mvyu7l8amrsj0mkka99kw825qnuqcaw", - "bc1p4p78nzltqfx70aemdq8nfy309l5em4eqg9966ucspsx0wne4q35q4ka9nq", - "bc1p7drvn3pa037h42u3lnu0p4hu45truf63gwfh24jx8vnw6j9j0z0qw57hpf", - "bc1pntjzgu4y3spw0cu4pc4rlh34k2a7kmhvujzede3yeal8h50cve0swau2pd", - "bc1p8vg2wnxfd98l4s5r7j6gksmfxz52ltjqu9rkxh4ymey7myashm3qxmnl6e", - "bc1p8eegxt3u5cx9wxw4a8vdxf2wj3s69tvsrquy583xslx3z6css7rsfhul2l", - "bc1p0uf47wryl0lzn8znwmg7ksn888hncdpw7fgy3pnw9wvumncq64es5jyz83", - "bc1pg7gdspa79st5dn4jqrfkckm7h07zkkvenmn7hu4vzm3jwlaqjmgsqn7tt6", - "bc1pxts4gf5nk4la4332w6dufe4phqw7cadp8r6l09grlcyd990j3c4s42jjrt", - "bc1p2ehm7ahdk2xcvu0m8jd8mnwy9qfpu9nzg4kmjf74zk40vgv0gyysgmg4xx", - "bc1pd9y78eaev8l5wtaz6acrzv36qapllkdmsass929kmqcgc0deetpqhe0nh4", - "bc1phkqrn97279gl37gvzgyh62k4mcfhkn5hn4jg5p5drn22r9jnahks6mme4r", - "bc1pndn4z0zm6vh3vuash0asxgxv8ruv8h9zz6xcnsmnn9jge0h498zscexcfx", - "bc1pn9fedyflp4qk059de004yxjnm3rjqhdp80nnmm43ahe5gd53ksxq562aye", - "bc1pp3tscfwzj4xjp6kqfhvnjuxft2yx9g6mgevqjd6fk0fn3sny6vhst8jvv3", - "bc1p0z665f52430j9glnh55yezufrlrvfvwyfm2ayafdcw9h77ftzprsyf50hs", - "bc1p85jj8c9zrm2re6730rasgc7vzwluj7vaahljkp8py0lwwdt0chgs62rcar", - "bc1pamscmx87jty7qrjdtc9vdpglxhmq43vzu0xwlv03nyfl84xwuvnqldzyxc", - "bc1p64fafqqj2s8qpj39rhyns0tnem0puc4pqrg2z0j9e48rl9z4kcrsnfy6v9", - "bc1psvzzw3zxw2qzj4k7cs2xvk9jgfk0m73c7s9zrrq98y3zptk26t3se8qp3l", - "bc1pa0hpe5lw77p8qelpvlzerrta2f7gug2tquhj8jp46wy5h7v6kphsjdl7pf", - "bc1p6k00n659hfc43ehx09lwjj6d0z40t2v6fu7dmm52vk6qdrvffw7qmwhtpz", - "bc1payk79lg97gaqqkpegtyhdq243feqevadk7wza7pppt323q8tdt5smhruxh", - "bc1p8xlly9pvar0ljn2jsuexjxr3zqtld83a6eerdftvhf63d3kltyls39r000", - "bc1pd6p9pr89eg6yccf44myellez63nfzklhkp7qsd3n0l8ajrgyzdqskdtkvu", - "bc1p9kyvttdyakt9gqt0apa9w00whd2nhdgll4c9hue5alq2mt6hc5eshhpx8l", - "bc1prfgd9hy3v8e2lwr0747dqlwg3vhr4ffsv2wu8pfsahdged2lhgmqqg2509", - "bc1p3pm80x5zwqkejdvncfcehn38z296julh32889w9u5shm2lqezq7sk2cge2", - "bc1pymmup6egavnvyxsz495gkx6lxxdrvp7hh5nf4t68pwjz0ezyka0qhgycns", - "bc1puaefqtgc9ht7a4qwp47jt8yyk5td0edugf6p83pqhqtrg0yppdqqrfcg6g", - "bc1p7gymd578tup4vpzu07203tzjjdyp5ryfkszjztt96prdaqj9sw6q0jfydr", - "bc1pvvzn08nyem30q06zg46svdwjwtkqlu3p74exsxcxzu2ulwuvmjws2lfshy", - "bc1p7hd9waqhpm36j0z0wyz9cz32cf37xl8l6x6tpa3d2znrray97qhskrfs5t", - "bc1pezzr4awu4qycp7ugygnejddjjfl490rsy03trv4s79nrcjnd4jwqtrd7us", - "bc1pc88sw2e8kgv2hrtuzqrwl2pd8gzk0r30sjvrd9exauzshqweyuysylengm", - "bc1p3el4aukuqxvh55ev8sx7ju97xylkmfyhl9ez2deux6559vujc87su9msyn", - "bc1phme3nevhad3j9pvvdj2e6un8spgjaw5dn30vhlgcusd4n3rc5yesjme9kw", - "bc1ppzezuxcx799p063sf8q5ehgyz37rzxn4p4rm2h8zaq0p4gs9pxnsw2c5wr", - "bc1pwkvjffgxepslngkf4c53xuufgxj09pjk48u7w7r2gua7mqja425s3txgmv", - "bc1px8ggeqznnn9fp8m3yxr0a7a97lzcqmm4g3mfkvm3c0v3xknuf2mq37xr6a", - "bc1prn46sxh64em338vveqy2dkrm889ue9wlqtvmqkdxlzdmk6sjmy6sr4qq6z", - "bc1pc850kmjn2yatgklz3g6z6duumxrpypmfwu9rj8f0yv8ktavq85fq0afrxa", - "bc1p936z4eej8ejrmqmrvlma4tr5yz0ztjrgzegz2dngx87d2cpp4gsseqcceg", - "bc1p3u5jqrf5rn3j42x4e6pw70up3nevdvp93zd7lhe3qmape7wm04msyfs0lh", - "bc1pmcu0h9jshyyf6zpv67hwgt8k3gqmc3dq3t0jkgtfgqer8gyhgp3s2e6nna", - "bc1pkmdqukg6g2876y6m6ys6thkavx20cwnffe4wtc99veqmtkax8cyqtz62hy", - "bc1pzvzflyr58ydg76t9w73d35qts6fqnlw2tff3hckd2kzuhtenjncqdzfsel", - "bc1p32try6qm0uwkcns3h3gjj8fh6t9hzyv3jgavmqxa9etu4wc5u46q89zp8y", - "bc1pxzt3qclr6f6z9p2lglhusxg96mj0gzhh2s7k6fp9wjedyxzrh6aqz0lj4z", - "bc1p4sgq82tgzdvfhh0m2setp5zlc50t73l62prl4uqlmsazwjfa6hnqmkzumc", - "bc1pme4tykl4k9jrpfm0llyncrq0y5q96fecgyv8yqmhe8gs4ez9vuyqhsmelj", - "bc1pnknchtj6838jmyavy42m9sm3xa7nsh4gnnrtchm622mckfg3w5gqy5r807", - "bc1pt40l2s9g28k0egagcuq50ffwk0uy4ec7qdme42x2sfudfcvz33zqum4nx0", - "bc1pca4mjeyf7g4kxdyw04ephk6cvfefeuagnvpmgn67vpjd5jfktweqepw68y", - "bc1p36eqfz9jgx92s7phgkhqdqs52klh96u9sd48t57yqxrqgxlntrxslj7ecr", - "bc1pfdv4zah0qekhtcjk4a66ys0f93jgckpnz0h3f6ru9xhmesxx88jqdwevpy", - "bc1p27tdkypkwu507k6ycaau4jxv3l3xgllatjde0add9zg9ggcxanjsg22x6q", - "bc1prtm2w7cepkwmy22r6gnr0jm85j7f5057c72akq9s23y5j0u0x3gsqdn85k", - "bc1p3zw4l0pftuchqtejzfn3serxejsu40dwrudd0pd97z2frre6t0uskenfhj", - "bc1plcjdh42rsmlr8jfpqdpp7fy54mq55g3t2qmhc3t09vmx38gw04gs7kpmym", - "bc1pc3fguvq92ynu76mp8q8lnpq3tjyj0kysuzqxvc94xc7ugrg7lj9stgaaxd", - "bc1pk0kenqqmyjs6vjj0s83vz4qxjz8gvmw64hsm06dasqqscp437syqsq9uwj", - "bc1puq7mj4aj07sa45zkue0wferzv4gktwf6uf94rduvfe03n4a3allq8u0w48", - "bc1pz348aheq78ra8jeqeexwwgg3eafuh42hs2qzxzyrw2qy2te5806s43hk9x", - "bc1pxz800mgfr4z88cp47hsperhjwejjae29j9all9s6zdcfnqks9hqq2y7frh", - "bc1plgjrrdgdnga9086y65qhp8utjylmlrufyca3y2myjlj5k7kk2z9s0j6nqw", - "bc1prqw59wkzdaywtcmfm0493xf7uuffch0eu2u34nxx9xqxeql743ssmecaqt", - "bc1py3l48h6f3xld4t36ynxve8el9mx280qn8gugphrxfesr9ag82qzqnvje82", - "bc1pjn6zdnx6nk88dqngvd049v5c9aqr7kaha98re6mvxvyvmhymzlpstl6ydx", - "bc1pn29fx75gshllqdxtq4znzlnjcx08au0n4g9kpfgs2mx5al5d35uqd6534l", - "bc1p0ez7tw3hynmw0vy06qylxrqq78q80y5nf20pljfe0f7vjxs6jnrqk22m5f", - "bc1ppejuz6jlcxse5p8y3896rclkx28s7hykd3sukwxyuqaswtw2fm0qrjn5k9", - "bc1pvnsjnw7jzr67nagr626cv735eyatg5gpjlzj44cxf0snzu5qzmuqn8fyrt", - "bc1prx9puekpesuc0vgnrujaa7wf0738p835dy27wppsv7vazl2huvlsnj8ky0", - "bc1pk83kc0mnjy8tfw5szx39dqq9434j5fyjhdcm5pud2x7yfq63zw5qd77g6d", - "bc1p0aycqhmm8lvx8ajcvly7qgemr7xeglpz5xqpns8v6c4lzjywe85sh0ljsd", - "bc1p89lsc4mymhl9jv6vatqanc3r9t428ajyq0fkq7ntyswz2y884nfs5hyzkv", - "bc1pt2mswkg7stc80gwmrgwqdlpan5ydzyna26fcc3echy75cdn76a2s694fzv", - "bc1pjv9hcp8urcj7w3nfyxskazr07nxxultsz04qqw8zs0htzg9ng6jsvmctpe", - "bc1psvgdp9mzf0hydjmd9lhm5p76msugqpsv0vwq5pqc85l6tflstulqlwqsd8", - "bc1pser2fw9t80udswxvp2cn0z84crcu3ra9gl3anf999yxj8j9tfrvqphg74z", - "bc1pgd4eahu2sdl4ck87tnqgyzuxsuyduqa5jzqy4r4fml9nuvutv0fs92e9my", - "bc1ph2p5vf2w2nv0drzt7qag5a065ffz4dqgygrmkr800dpltqrlyxuq3nm7zc", - "bc1pgc75ztytunpxy2nws5gq25fcq6cz3aq7fauy3tu5lyuvzzlkcfqqmvx3nm", - "bc1p86ucmj7ntrsdyxcq8s5y62z75pve2fuj2gfk3twcwgs5lpd3a29qjsjdsj", - "bc1pypehlwssluaymleny5a5008q2udm5dcdqnl7a2hpz7wm9n79wcjsfxrjlm", - "bc1pky53n5cyd6hyjhc6prhgpy0qeae7nffm5f9hm9k4ddm8ef80et4se7rens", - "bc1pac0vgjs98z3rdaxxfgg8wqpfjxtnr3q63xxdwezcms0u83yffpssdq7d95", - "bc1pdjtuwrpasmg86kdd2ht9vu2es9v5vra9r99hgn4wwwgwxrn3u0zqct0qwg", - "bc1pek007rwgwzz5u3mx9rgvvj5vl4d3nz30n9xvg74w3k8m3ckj60vsefawlu", - "bc1pg784mn02fhmzrhrnzaj4mm3jft3zst2xtzg95mkzef6skd69ky6q0wpsze", - "bc1pl4yhejw4qm032wdgwjrwu2ys0nlyp7hgy4448uqdyu6lr97h444qs7y5nk", - "bc1p6suhhzsamd7hq9zhc0su8gj2pe9tr4cxfwjrlnfm6mvlj8hmfgmsxzyyqn", - "bc1puptdtjex7j9dajlvp7wwxzvcd9vpxkgn9n8a9ds5vezdzw8a9hesa6hyjd", - "bc1p2ntelz4prdrup7wdanfaemrrtyj7hhtjasflckxdtcmrt4wpzufqhwyep2", - "bc1p842z0cmp09sr7pgsmjptgajk8e50f5fdy7hmelsf0qfr43x0zldq8q2hv4", - "bc1pa7zytyag2q0ht5p07qncn96z0zs0nq8uqkpsqhcwxmrz56nz6h2qwjn9ud", - "bc1prt7x7pdt2y2fs89g5svg89rk5gnufp7uk3vmmf8mc56yuhftjvhsmqqsf2", - "bc1p96tzrdsrp2m602lr8vkjfhq879c6pf4rg044z4ktyrz8nsq4xdkqjk2qkh", - "bc1p7lu3taps97xtqtekwzuuqgrrtrf7fp0x0pf8xevlcuga276ptutqn8k0zv", - "bc1peneyewhssellc08amjh4l80ugvanzg8kavdqmslg0ywnvhpypyvsk0a35n", - "bc1p8e0rvee9skzmsgmcazn7rsx93v4s6jxezdv7mcx8a69dt7d3updsp5cq4w", - "bc1pxlv04qjlk2f7tn9x322w78vx0desx0eyhz7ch8a695h98huyjt9scps3zg", - "bc1pjx8ll53vxcy42vguklvttyh3a70p0axh37w6cuylq5vmvtluk7dsw55uwr", - "bc1plrm7amwcf3ejwmk0ngwvtyqzjm56lllg9xcuy8cq686h5urze75qpx4twj", - "bc1pg5yxfggr8s2f32zv2r9trqtudt9prjrlyjzdqnxqc3wl5n0z8awq8zk8n6", - "bc1pfgh65w3vqkxysqd3a7ekzgd4xd965uq2gpk7crk5gskzhjrnc26q3pq4l2", - "bc1pekkl86ga5ztuxhz32z7hfllr3eztpluex6ftqrnslfh4rnqkz0ss5lee6v", - "bc1pml2xj4jf8k5u3atdghmf5y0hw9c76vrme6kcw9htp60d6vrnq4ys59fd9d", - "bc1p39xwzfmjla4a9gmupmpeexm0jqv8vha0mu9yfn594cc06j6c8jtqvnzxmp", - "bc1pq75xnlhcjmkege3z6xtfw0l807z8kfhugpvewv8af0wlf2z3xrysjk0t7k", - "bc1pxrplzqy8mfr4qc9k44lf8ep4lv9f5zu7kavjlufdktm65kggjrcs2r87jy", - "bc1pp6dyz7urx2jyr56wn8g9a3awz4svghq04hvqu8r98afryfe3slrs2fs4ad", - "bc1pkezdcadd8v9tmkgycwqk9z8cwqanj4zmmdpcsjldx4fwnm5498hs3dd7s5", - "bc1p5t999ej3a8j8gm7hndef3n025enszr6xcy8h3ft7a8pq3x4kmvsqrwg009", - "bc1pqqxj78az58zzx6tl5z6m6ghv6pj96yxlwt7weekjknwc4xtrj6rs9uled7", - "bc1pvgw0tjmayznfazjh3l5zxk76qrftnyqm5u3tnke0gc6daww7cjfq4cldw7", - "bc1prammp4xxm5yk0p347sv5x0d007jetzwpfvajz2wgz4s6uapxxaws99h2yt", - "bc1pd70d099a62zvpmtxq2pmfsct4nq64f6rcnh3922c53mc7zryeessrqht4g", - "bc1pa9pejsupqg9l5wr08vc9xtjzm4ts6x6rfaqrrwm7areeqdt4ynpq2h94fp", - "bc1p2lhm0jahpjp2aqpft3pxajc34k6tp7363q6vu6c9cvcml24pzj7qjn7ace", - "bc1pyen6pvn7gnrxzxq5wg39kdwq2hjh6xvzp0u4lr4f2rn2emmrt20qcvjndk", - "bc1pvk3yfrjq8nuglxdkfk26eqk7ccehtcfve88alg0nhzp6ver7yawqmm6qcc", - "bc1pt4j2dtt9ak8a7d4w9etdj7zax07edxnkgpwgz7v3cx3m76vt0nsqfw0r4f", - "bc1pevthqu9f5eatarpsjtv50czfxdxklqlm8cegfndy86szerzur30s7pj2mk", - "bc1paf7uge046txy5jh0d6lhj268hdth0ndnwtkv7zyd7sl672alphuqmmwcug", - "bc1pckkjg403057elfk6usrc3nce0y56h69dtzvyha7jdhww45yw677q3nulf6", - "bc1prpk5er6yx7xs9r90h83qelqu033n2z6txy2v4nq2z3jxwkp0k8qqsfxrkz", - "bc1prz3ml3d475mcaqpldlxnc9nsjl608k4h4u7mftvp3shuztkwt7tqmssurm", - "bc1prgv84u3c9890sjjeudyz6xuwz9uksl32dlky7pxpw387kl7lmshszneneu", - "bc1pqh5m8r6uxn33l2f3jkl3ckg3l0hmyhyxckve29zseurn9xqc5l6s7lx72z", - "bc1pj7t0er455jps5kws4mx303yh6qq6ysvqusfn9ku5yt2c6tta49kqweltgc", - "bc1pvuwfc5uthqc4lz6c8c796ujjvahngar959yzcsnvhhr0xcmx3fzqc6faqx", - "bc1ptcpwz4zhc36326g0ccl88t5jnf6r9h3l8rmr3hmh66dzcq9d6u5s4n38dh", - "bc1p2gmxl4t4wpl2x7lc63tj8t97q006hj5n7ku2a57atfush2g9hhpspp2er8", - "bc1p80fjfjn4j2hr65ycxqvu9j8ucpza46mp7mkdtgx0x24wymwsm46qjvgs5x", - "bc1pkxsxg8tvcc7vnz7lx0mhpy2uzmp060h2cvnxkvdejwdh3ra4q60qhyckxm", - "bc1p909zs8vzwxlpx7l39ymckdyl9y5f4z9nngpz3jy654rlg2xhz9esf0es22", - "bc1pr68guve757q2mj7rd7s3rq2s70f678gy8v2pn5fsgh45eqlkchksn7eh8g", - "bc1p4pcz7xwl3v9rke36m9n0mjgnx6d9wpszn9y73wtqsp44eyc3klqqhlz422", - "bc1prq35uv6paq2uptlwdpgvqsgssurn96079shfxs0lrw34yasdgzzsz76q7g", - "bc1pzxxfqry4j03p5jtzpgqwjdc3etw55p9s92475m6czg4vgtnq3szskpj2q0", - "bc1pdkuc73gp9vmetjss8spctwfm75tszwflf20un9tvt52s9cz6p9yqzlcyql", - "bc1pqujcuggvue5umq8fp7z906xcpf4pxj4eh47m7rfaw9yshr72ts3sjktkk5", - "bc1pmgs94ly550mkq58ff57p8dmhvw9edfj2uts0kgg9wcw00aec80vsdyyycn", - "bc1p976vwvrh3s8j05g6vcj6twjdqaqc9jplg858y0hyl7qtjnes967scw4w7f", - "bc1px7uaf2t4mzpn2pwnreduzqa04xmgtj5sur83z4cakrqsqmks6nmsh3a5mv", - "bc1pqqq37jf6jmfajhkzqvs2qawej3fglkqwjncnsqagcer40u52q39qgl2llz", - "bc1pct0ssr9h3tcx0mm3nddnwy2u3pnk6xrzthntap5nundt45wj9e7s4tapz8", - "bc1pyls48dcgwskk2zm5khk7gnmd4hvkqrhf8fh34thar448hp9qwwgsq2cxn2", - "bc1pjjgd27veslqs78c2z3j8mdfnf0ttxdfpjpeec38yud6aq22c678sapa4g7", - "bc1pxwp4hp4j7r497nkn62rkl5gm74u65473vaz4tnw35vr8kve999kq4mg3l7", - "bc1pamerexgp38wxlkph07ecne9qgg4wvzm7y49dfmxm9udk4v8aca9s4p0a69", - "bc1ppyx26feeyqscknkyw92fwxdx9peagklx4vf3m9lvfts7x9puef6qw4zc9n", - "bc1p8e0j4fuupatjhg6tpz8ugjttm2z2rc3scug485c70nk936dfxlns5eu2zl", - "bc1pjf2kg6x2sdghu7j5qldneufhrp85r0kwdcvrfml9sn3w2kxxwk0sc6nuk9", - "bc1pnw3fces756eankklvnrfu3ur8n5587qeuq2gaz0gvy6qegqdp93sfv9tjs", - "bc1pv5gqz5jgtu0ecqrf8yxn89zyw85dfzek7rw6nkxuyentsg38zdxqvauyjh", - "bc1pxukcyqw2n3ugmae6ssxqx0g6wa5sx48zc5rgfsunr3f9str76lesscufv0", - "bc1ptu88x04emucx6cm82f50qhnn3c3lc7pqhvxdgsp6yf2n5ttpgpuqudqyca", - "bc1p55emzz47uekxadry8df8tw2clfsrzgx63zd0fa3wl2fjny2j7q2qfgp8kf", - "bc1p4nf6wrf0e5vz20nu5zta2qywmquy92c6rdvwfv6w9cqxw8pd87rswezh0j", - "bc1pldd0ym4et42jxpt0sdymxfd3c64xlft2agw055uar552y67ak55qugk2y3", - "bc1pdj2r6acfxvy2qw529gfudzallfegtnha5et0mu77e7k0qe2srjwsg2asvx", - "bc1p39z3vmex3r74z5hz55hl4ylctnuwyae0k35hl74a6t2yh2yr5y8sa9rccr", - "bc1p90lqnqvn7n6s68seu0m2fh5tzcqevtxuf35qnkmmgaemd260p2fqqdkm4y", - "bc1pu0hhpgr063tvutn04cmdqlnfpdelhrdlr0l7lnd670yta7r6rahszrlngz", - "bc1px3akqddde5jvv66pjz0vjc8tkjenf2tfjq0kh0tl6kz6t646k2gq6dej4c", - "bc1p8f7gvq6f2hnwl5jvsv98fwrdy0cupl8vx2gdj22846y3xl560mgs60v6t4", - "bc1p74he96anru325pnked8nqr8cwke7sjwq4dldy3ttwct2agfkv53sutcrth", - "bc1p92x7csc35jmakudpuqnc2y8l4renxezjnzd7fw97fjdpfgsqa2lqsghdt7", - "bc1p408a9n0hxnx599eu2s49mkws8z299933wk7tu0572dqg8kc6cxhsr9d2zs", - "bc1p5cyun46rjt2qu3r2y5q8pf4jh08l4ut0dq33rl8am9yaattn65kszu877u", - "bc1pna76ar0jljn55s5c7d4y630v965p7xpswxsj4d9y0jhg7z6u5jlqjk5vus", - "bc1p5v6scjv5y0kx22u0ajw0szpzzgk5f92egn5e4ctyfwkar9c8parsqs0772", - "bc1pz8hce8ccuvmtzr8x4hellcgm8e73y8vx5sxk2ud4le2us4hx6chq7ue3cp", - "bc1peekz88cqn544md2pryysxsa856p77a25lz4n97qykxgldnzwsz4s0zmacw", - "bc1pw6lqys779evc3zqkzvmcefs308qhh5pxw0njyxt7xd7hmsdygcysmj397l", - "bc1pevr23jsv2dljug2u0nfzjt4rxaz0efls8az64phrhw5e3z4x7rescv8njy", - "bc1p674f67srvac3d6ame7jpwmdvjggw844nqvjl73pch2cllvnluthqpkjcj9", - "bc1pckssnmac08zl5ecle8ekysxdrxrk7dwz42x9xxh0a4xmajfxfgqq0z5tgw", - "bc1ppn602zyv95d7v3j66evm09sa3hw80z8ukehl68s0j4taavwfp69s78qk5l", - "bc1p39r8vc7g9mteumrnkugt67cy6ykcptd5u36gfdvfnwgkhgn7rkgq2uzqp4", - "bc1p4p9gpjhsuutt8pnfk2krh3z6vl7373hpcxfqpysh2j56qpfu6r8qmd32a5", - "bc1pl7ldth9l5jzpfvclthe3qdvupns2jdlxvj827all0lstrjgg6susk4fnfy", - "bc1pxs9y49mleeanqrlkcvpm0slj8rzg6g5awmv96nrej3yxqgql95mqhg05ma", - "bc1pg90dx8d9c58m9nzu92vgkpq737ya837za0ck0a9ah82r3uq6t08skunpj6", - "bc1ppuuqfcu4nx7jwag8kjy6xawfu37zxfa4735qyncxju7a4zsfd9xsx4q50r", - "bc1phme9fy8cgy0xmslt0404wugssk7a30m42dhjpq8vcz8lj5u6vhhsqwytr5", - "bc1pqc64dsdgw42jz3nq8xu2kfveng6prz6ukuptmr4hjjw0azq7rtkqac6mdl", - "bc1pvf84ktle28mmjjgx0l7y86nwy24h2awh5hwe4f8qhaknm7wplnkqd8qcrn", - "bc1py5uty7gxvgzj9p4gtmu66r2vkg03nvr2jkdnk5nm4gk3gctpadyqg6qsjy", - "bc1pufazktfl4pxdz9s4qnkhrlgjjexx0j9suay549z4gmwuy9mqzhmsysekeh", - "bc1p965f9vna4lp8hmm5ydgrxa44fvsl0lrszwl6dp33temp0ltrfvvqeqj0j9", - "bc1prc78zjz23nz8zhpzjf3ueme7lh22vs5wpm2m6hhkkxa5q4wyvulscgy9hk", - "bc1pgnhm6322kf7p2u4pl2quyp6vjqjqpdukppew8s7ytss08nvsp5xq8uu6js", - "bc1pcumlx05nunea3x5wculwn2sj5vf9zxr56yn27k0t5jmrts735r9sxgc40g", - "bc1p3rusvssnklprdpgzq4uxk6ymh3a96khj7ju7mhh47jccswxr8fqqtag8ef", - "bc1p2hy9ywhzfnwwae49ay8ym9kpaf0stjnkcudn2sv4rtdkp7e6pxqsh35ydg", - "bc1pxczsfqzlaqfxvp5p9cnj2l40ls025p5j2zzwrqs8xe7p22ufj3fshkflmv", - "bc1pgw9he5jcwlh5k27plhwewem9tvghc68tm55v4vyce6lzswyleg4quatjxt", - "bc1pd9ael9dfa0lluq4k26z5r386f5v2cv5f243gr7esmmdxssvu2yhs0zsk9d", - "bc1pz3ghd8dnwlx49f060a0uqecz2klvdqaxsxw09gjktmqu0phcu4mqsfkt8a", - "bc1p3yh2zmuf9sxe72wmd6xj3smk0mgv863q5j3hgrd32lqmp4p9xnrsk9k4np", - "bc1ptxdwnkdtndm8hcfnjkg7lle8v2s5pc9cll3g88vjv65tqmyjfycqnxt0dp", - "bc1pj6mt5ay4kq6sf77dyzaeehqmlpjgynw3ul4dxzguwmfxdemana8ss5jrxk", - "bc1pwr6upzv3d4gpk8lv7mmx7qj0qlgcs4malzr0a36t0a4rr8ev0krsj6ggpd", - "bc1p7l6q9k9yrve5ervtqdsunqztfnddq8j7xy2m73j2rd984ves55kqwc9m68", - "bc1pznmayc0wepu727yzj8su0pe2gsude2hjukjzu2xcuvavll6qhctsy8qrxu", - "bc1p55nww3qafgpp2x6sl2mnstgwg6laltktzy4wr9jlhmfmhsny6g2sea5ggh", - "bc1pjc475x4ft8n50wx4hceau6a7x5kafn8203fx9zysper2x0s8vr5qlgejdk", - "bc1p97vshfq7lywasvs5gtz94k3jrrvqx54hd4plxaecqup3vk0t06nqafa9tz", - "bc1pkjtcsuvwf0nzl5gsl4eu0yzlhw9d6c8k2p68d0pgef0rfwtpns7qjcxqjf", - "bc1p3nf9vmsz43hse9qeepsdksrzjzxwqw24pdculhgsx7kd95ct923shmegp9", - "bc1plyxc7ccazkwudljc79gm0eck5uka997me0qkfp9lprx28grmekussntcdh", - "bc1pvulw654p6kwsf0tfg9lqhkhlq9jdds3f02kqjq57xl7r4m3mmv9qhfu8mz", - "bc1p5p2uemvptjct9kfvu5y0ukudwm9245ccldxwf30wjl8n9mt3r43qug5y3n", - "bc1ph2u8dy8arc4v3srsayv93ggaah5mykj0868fg6st76hqs80lwxtqrn6e58", - "bc1pq89c0n9e4zumgst7z8mhdz5h2u9kt3mhp3f53rf7uhu75scm3d9qn9ku49", - "bc1p8wtmyka8j89ux6s7ypupx4pkxec2amxj7gumxln48k08am4vhhhszgwaux", - "bc1pzfp5stavmmved22fyufhmypkz0ky3m0rz5e6lfzamzkznyveunxqquyd96", - "bc1phr7xjlj650hws4f86udtq4f7mtt4f5jlvwjwapdh48az48mh9t2spl85dz", - "bc1p7pc80vekqu8ef2ukh3nwtvp30h7judx5s303zpekw49xz7zm87dqzafzsa", - "bc1p4zmxalgu8xa3uxqg2maqy5exa9p3x2gm9wld7gry3audjqyc03sqdck9c9", - "bc1p7jeywaxwg752zpttfzl0dghdzmk70664nakanepp45hqsrttupfs8pgehh", - "bc1p0alr5e4unzx88qgqn4wdwh6shvp2w6qz0d4vrdq64hh0r5fag2kq6r8kkf", - "bc1pysq83t5kwd5jzwqdvqmj4kmch65k65a8ardvg9a9lzccdtn8p23s6qkpk7", - "bc1pz7kvvkc3aga3qr6hcg754rd3fqd820xy7uts92yqw0n970amav4ql43re9", - "bc1pns3yeesqk4x3zx636e5nl0y4vnuy5n08jj6rm006egn65a8ahmrsjhs27n", - "bc1ps6k8z70skshw6d698vqzydnxlyhdlag7h00vks8wet5u3l8yk78qps2qa4", - "bc1p6ehyydcy8leefac6kk9qn2rh92j4zckzufdy9pyjwa4mqthn446s4v0xes", - "bc1pzxpkvlz8q0lfn5du6e76u2cm66e3jrd82znf97ypa9yzyff46x0q5wcxqe", - "bc1pkdwt4z2ckxjnudna7mpv947dg2znt3dskz7ya58kmzutxpsxhr9quh5sny", - "bc1pk8hny075guh0kce6naqdga93kxk0c6p4e9a22fdhh9fgp2p2vhus7lsja6", - "bc1p7cp35qh7rgng9xlwgup4rzvayypeh882n88cr40y43ay0xz03njsruu0n7", - "bc1p85slp8ds3lftn0dxj032n58rg3jre9znlhpkgyfe3d0z8uugv80sqv7mxd", - "bc1plqr4al66c2eaprjf5m7k4fzdcx0wga8vts9nt7gn79hp88jv8zksayhe9v", - "bc1pv0j5cyqv08l8qh7hafkk34cavl8wpn28ehm3ltal98x7ypma6ygsn8u3u5", - "bc1psqetkp8nt5ah0rs8zw52f7ktee59p7njnnz3ky5jnmxncm7ddj9qwmmhm3", - "bc1pkf7dtchh8s5drhapvh3h25z20mx7cms8ss9qemskw056krnmknhsvj2zv7", - "bc1p58jvs8xf0qu0h7mys4jh84cvtzzrgj6d6kp6u3rna6gm9mxjzhps8pa6mx", - "bc1p72ljww6ke6z3nus33tmf2lrdfprmnpdcwzgkc6pn0yvv9nx2vkvsetvzx2", - "bc1pje60e3jylavz2sdj3q67gwrczu5r0vtnte3efdae85g2zqmcc6zqunkque", - "bc1png64kxrmmer7x04mrnfy0m293kdlhv992me73u56taqwqlzrmtysjzyqqd", - "bc1p3gpsthft6lh67cu0c6hnh6l9lmt74xe3xes93v9aa80xkjwsu6zq3kvpg2", - "bc1pe7wj8yvfsfc65t2lmx8jl84degum2lf2scs89pkrru39cgf03c6sx9z952", - "bc1pcl9hraql9xjyzr5az3rej7jydw9tw3fqddtwr7e2n5vkuuwlkwtspyw2xl", - "bc1pmcugygq6gxr6yjve2tw76ul6w5x0jp6v4nqfwr5pdstcgdr32ceqwfzua8", - "bc1pngm5hxrdtfg5azw9ut6a72kq7c6ytn5j4ujlu8w4vnpq76vxkk5s2fl8hq", - "bc1pd4etf5gr8dqzgzvnq08sf8w6z6tpwxtw0lgyzpz4hvapym2az3rszlh4zj", - "bc1pzdgykfyudvlu0fdn7p7z6gwwdcc86u8sudtkghr2t8kngad0hv5sssc20c", - "bc1ppgu7xzulmmhcepcwqd5ktnwk6uz53sew3eq33am7q5ygyjrt7fysuhn6pd", - "bc1pxy0s8lykwejtwweq9sm0s9susdcnm4yvyp72g4arcule3lwszhuqcznpqv", - "bc1pznuwevry90n50ltwjeju2akgdcepcw8q4mthuvrkz3twk9rjrxdsyj60jg", - "bc1pgkle0x3cx23naxdter5knu44ndc6l2d59wtlqhgpha8yvwvsmvvqkt2jv2", - "bc1pz2hwj0rmdp3yrqpllpp3s0gzlhckd8mz0zua7g23qrn7qxgfq2ws4ffcup", - "bc1pkcxffxqlgqjq3smfxavdn5vt3gfp6zz4edv9x3fg3zucrr7zas8q8tqncq", - "bc1pm43ntzrlxuh3pj4r3spv5e8k9t2ehm2k3eu38ssrqsngww2dxntsl4vvfy", - "bc1pxjj3vgm3ud9r9zr9wpn5tctd8f4nlm9mnadrnwuklxqcuvg7t4rqcan5yc", - "bc1pkjx9nj3hsc50ad9ltwg77j988233pxdll3rfn99k40t2vcf6w54quqatu3", - "bc1plna63esz0rds90v49pqyxf7que8es4vwtq5t9syashk2ndrf8x9s4htyfe", - "bc1p6wesudgex68xnza3v58ms2t3jdkxghrpp87cnk2qcqa0hyxjsltq2n545q", - "bc1p346pl00h0qaat4x837jfgc77g7q4wzye27lpzu9zgkzg2cep7plsgta4nl", - "bc1pe6vyd7z4ptpzgf4yckyfkuujywnwe30503rq4c7ydlerq6xcla6qm6magp", - "bc1p9mr3mupdg3j8r6ukhll6pm4nwxesjwqvxqt0fq9cka62lz02t7fqe2lr25", - "bc1ppyz7gsnampa749yh687nmyedjq54lx40v0tja8ch65en2g3e7jfs60gq98", - "bc1pukljmvwlmlruk940rp0men7vlqy597htql85x9qjxlk03nt4uyxqj7gam4", - "bc1pzh45ngyp7ldcav5m0w7wev6g8trh70zh5g90uuqr9slegfs6g9wsr5c55p", - "bc1pjedscd8tcq2y86cgmutkxuv3pqf2nfp77r6l9sn4a535qvpmd58q5t6kz2", - "bc1p6wegdj2w4uwcrl2mm6smh6p6nn2lxk264k68tdaunzjffrx6d7jqmfkp02", - "bc1pa95xv6n9a2t7e73h00j2zy8u865x3q9ctxesnv0c7esr2sg6lazqs6w95z", - "bc1pvvz3lcj7lakpgwwus73ax2l26my95jyf09urxwuunzwkdrcyqgrspkkckg", - "bc1pcsywrdaa00gts5jra0qm5qpwk6ztlt4pdr0rrx8p2zapcq2apywsnjz8qs", - "bc1pzddxxmcay5wnh26l394hqlau8egqp27dhn665kgrpl5y5895j4nsrgylfq", - "bc1pnzz9ht39lqlx6xzkgf5p7flrhpcpjck9x07ssll3ggcn8wluf5rqydklrr", - "bc1pj6w33yr02kxq7eekjjct5slqpnuqhs2l0d87c2c0rxzavpynw93sce9uy8", - "bc1p7e6dvdy9tjalpfcmp8efpnyy2hd43vykchy79zsspwcljkaqcccqrw5388", - "bc1pm4zg0jeevwjqwmru9g460acng2dpsnnvyupry8tdpckyaqsqun7s9esl99", - "bc1ppfdcg3d4hs9q4mm6qthvx4tnaw9xuj2z0ht6nknsjd6363r5z66sxktdpe", - "bc1pxdelck7tjxj73trhrm53vd969ge7cl7x3kkqv5vp64wcy00zuhrsdgsh3e", - "bc1pm97dmcgexlas8u65g0nes6e5vgyz08ml33jf66lmduptzrlk8m9q2hr2e8", - "bc1p2u0jhv3nc5aprmhh89uwshv9x0tdg78rmjalcukjsuvsjx4v8p9semx75u", - "bc1pe0u52hgj6tnm8la7fk675mf2kl6nglfa9ygx4czpwky4nsqss9tq7s52k5", - "bc1pq3z03etp2fgmmtfjc4jwg6sls8tjap6xj6y00sgnp0d5qs7ykujqpuqgew", - "bc1p5cus75vsn8wven97gejj4xyh8ew7xgae7uktk44v9le7dh9avuhsee2yxu", - "bc1p64z0tnwvscs746q5pwp6as44fez5ytxeyx9fwl8mq8jcxmjrwwcqa0yd9z", - "bc1pq86548dznj360qjkmt2vnl9zk4t58ht38n278sdy4xamlju5zasszfn8gn", - "bc1p7ue8sxaz8awj59k9vfgt5ztsj0yplqxpqdhu33yd8777ymph0qksaa0vqv", - "bc1pkddkt4a0z8fm9wa823y6qw8decs97pfjp6aslr5zd54hnnha0x3qxslll5", - "bc1pqpe2qcdqa2py7fzfnzyq3av3n8ydf032swp7ss5h9v6608kg5vusktv8ke", - "bc1p6yhdrc8azq2cw2ztd0u4c7ttaa6w75udaq4lyw8sc4yx40uffzaselatsl", - "bc1p2n02xraavrvv5e8yq3j0gdqhm5amqc4ruv2cuuvcu8glz7d5emmscvz56w", - "bc1p9hg84786ja9un66h5q6pyxdgrdgyersmr4j8ye2ne8h2p0rn9vsq54h8kz", - "bc1phdu2sg2jgctjr8f5us46tyurtpjkqyardpgca3t33q94d9j4h2psw3zjr4", - "bc1phf4wualrnl2g44es8mplpf74jry3wkf9kttzykqpv0hpg0cm2nvqytdtzw", - "bc1p6hzvku67xv7x5tc5ak9vqp0gcmds6aq9kf5negs3ph7qhj3qq8ksztj43m", - "bc1pxhhx3kxep7w5uze3znhx7j0n0nz6xm97eshcw7pl7v3lwqfnztnsm3cncv", - "bc1pf6lqumee25nq897qssn5jhm2s39uszgxnyjtjktf5htw0m94e5eqhhkp7k", - "bc1px64kz5puczdxy88dgmgzgw6mxypff657gyffzax5pws8ylkernxsmw8ntk", - "bc1p5y73ajdj5d07wmdstm63t98ea054kzzrllvunczptzse25tmp4pql40088", - "bc1ptxzr48myaw0na0k2j8402erk98xp7p0szkjndvx9s24knd4ln3hqrt8hn5", - "bc1pm057ju5039m6l8ek90e3es6d0jfh0209d45pjc4lsm0ktfsr9u0qwhft7e", - "bc1pggvuf592fxal6a6wq6xa53dzc3drfvqyzt3mm02r5dyddqz6rzksv8gy5m", - "bc1pwsq386t9jsj0qtt5myqk5fkpctdpgzp86v7rx5cryyl2z50lktus3c2fd6", - "bc1pnz5z9re24e5v8j9dae59srkaa0xx83kmdxp7c0t9ctsvwegpdfaqhrw2x3", - "bc1pv8rah03rh9m7ah62436x8cntkpw2ynr52py666tlkcxcul7vce7qtxqarz", - "bc1pn4rxn77cv4qafgqedqu58pcd9yy4zmpmdtehel2l8nr7wgkdjv0s5pqjhy", - "bc1p0nlztwd95s33wgyv2jxam3pp3dh6juj5unnd6d33jcf9xdq2edpsjm9pmr", - "bc1pga2c4ntf65uu54wlhy4s5wvcp24v24p4hrpstffq77rljfk0qyksa3c6we", - "bc1pfactx5ye0up3gpn3ksthz0v43ewdm2ll628xe7782gxsskmvz5fs7szf7k", - "bc1pe2cnwyvqlcjjs96fc3cwyxec4c76q0nlgd7dph66eewz004n2qdqe7q6s6", - "bc1perr9sa4mztvehtcq88980wwzard53cy55dt39hq97j7suskqduesnesek6", - "bc1plj22wwrvpsfly6va9askjykwwtasgs06sjvm2hyzx2lw7rfwlm0sm65j4h", - "bc1prerqlyymk97e4h67esr8454hwdrskenuuen008c68cp8t6dkyrdsn2dmwm", - "bc1ptv0m88fm6vgmdy5jn5ahatpf2faqz2u22v33c50q32vgzzanm6zqrp5qvw", - "bc1pjpd02csrp6ranph2vv2tyffhgke40r7zf7q9uztk75gpt29x7vtqhgj97a", - "bc1plex3pd8hm9x49ljvddx2zq3qlepu58s07wmsnh6h2vfvp65nvlxq6ld4ns", - "bc1p8y6y60amus294w4gfv6fm5y62lzft77jmav20s0dfk6mvzah8rqsleasys", - "bc1puvlm0gjg0smc9449e7vaqxcvsvx93q0nj88ed7k35kp0852l0yxs7mpl3u", - "bc1pdpfk55xruexny0p8sre49ae6jg64cf2eek6dtzwfk7zurf8szt8q5f7k7v", - "bc1prh82j0ev2p5kv0hjnw2w96q7j9uf7ax4udryvtpswzs8c4ae7h5sd08xny", - "bc1prv2eg4ecc6prltp04vtsue3p7y20ta0vr9p37d8rl5khuq8l776qgu2k2t", - "bc1p649hqw336ltpud0ayhlf7srj2ytwz8qg9x6kwd2y5wxk2gs9k2vq6h3hh9", - "bc1pfwlpmr3ut2lu0z9hgp03twgukznm59274vtmn8rqn257lj33ppqqeu6dmd", - "bc1p6wr5c8aqeuv6t7fq98japns0078jqdus5s2xk9c72x8fppjdk0tsfx23ru", - "bc1pcy6dx86z9sw7rx8uwp5fqgzgfh0l5jngyrfkkv4kxvg2yd98u36syj096p", - "bc1p9tc3ac09axsln6jcklxzlns9qmxrhr54d3q7s37dggfhlp0gdr4qq5l0y4", - "bc1p6333ljlnqjqm0fnvd3tyacq2lp8x7datwtkuhyqauzkalp2htsusdr3tw2", - "bc1p55y4tlxa7h882qyjedfyyfp7d6pm76grdd5g7mw9suhh6xg09l8svwhsll", - "bc1p2s2guecg7xmd84tn402u2tmfrfas0slynsjkdt6l900frxv9xyjszvp60c", - "bc1pwrrkp0lv0x7kr85ktfw50pnkn3fz9hww002lgq4zkufvwx6xdfss0ztjnr", - "bc1pyf3axvlyk3dutnsvsp4dp8zuy6trp7msqfmvmw6ahwglpzq9dz0swwjupy", - "bc1p7n6zmmcahn72kh80hqarh9wd3ku2hjc26rgtxxuej9n9jujn96qq5dpmfd", - "bc1pnzcwmkr6669ce272pt9th5m8yk7gkckqwa7s0pqdfd7skfav2c6qwljwrj", - "bc1pzmxjds7u4ltgxz4897nj2efs29w22ka4wedpulfm35f3ur6guqys56k8xq", - "bc1pgx8enf3kv09wyk9jkn6fne0kx2gv669kjxynchzqq85djq85agqq4qf92q", - "bc1p8pyrj8rpycnlgaucaj47yjv00j7ufh2n8ldp5j4g62799v5gsfksrny634", - "bc1pnq44ec00dhu2pa04v9nwtg45gy069zpmaxe9ul2y4r8f8d8wtr7s88za46", - "bc1plc6cqsppj6y276amm5hvtqjkjwy50kkp89ahk6ajrf90ruj2zelqh5fhxy", - "bc1pkvztnmw6cqn56lxtf24qhtf8g2ffhp0q9psdejpmukhtu7eanpmsw6cvqp", - "bc1pmjgrcr5fmhh96wvqx996qdtjpk8sgza477uzkfrqdyhj28wmqu0qezh5rs", - "bc1p7rtj354zldf96c6me6966vkj9krpjf6a2ztahm2r8tkzrq4fcnnqwuyct6", - "bc1pjf8u89fh68zfpycvdgmxlpp6c5m635ntahj86ey3dkva575xuwqqd94z2u", - "bc1p7xqs5hr9jsf93jgyxwcengzglu9mdqlyeyt5pwfs9za2v9hjranq9mlldf", - "bc1pjmye8v3zh7afxdx22qm8x0wfrkdmxjc85v7x5qhpld5pwypr8l8qhkaju0", - "bc1pnl0ksdkwywpejlngasfkr393c4xylh62v95zmxgth85cg4xqacys049x8w", - "bc1p34n8vyw0pxwqtcq0lr6qh296ynkws23tnhfj97cmp7zp3yrtnnpqpmjul5", - "bc1pz73p2p5cqv7kdu9udnkwn60ax78spssfyhns7hdw9tx58j3mejksx7hd3m", - "bc1phgm7uspzznk0fed45c4h32ydy2ss34cawv5ggcn8fa4cep43rz3ssygn04", - "bc1puj7360scjx44t8mkhud20vhp0gayh0vnc0yj5aupwp8qxm4fj30qsvy7kl", - "bc1pzf37avrlpvyk30uplfk8yv2g867t846ygpsdwmqm37d46pzqnntsgk3d6h", - "bc1pppgnqvjk0tjhlmwcy7dd6h5qj250c3qdqnkpwh3p3g9qe6cfundsc6pm0d", - "bc1pyg23rl9evqeqvrsj4keafgttxm4gmf079hq93msmeerpezmzcc9qpj5qv7", - "bc1p2k6v4jp3pgwlwq4wycz6ruye7kgllkjul3nen08yn7vt0anc77fqr93qau", - "bc1pjfdsv8fhre7svwtpv37a3sk45eqtjnyk3vn6nr2gkn7689dt2gzsajs8gt", - "bc1p7vegwpxeldwncjk2dx5qk5fz9zft0zcej6xldllch9qcma0djc9su4a2g7", - "bc1prk7z4qufhhmg72ltefn7yh6gqpl2wr9jv0yzn087ty58anvfqrlqk5u2hq", - "bc1plqqjg7l386e0nwj7hmzqxw49p72r7y83cyfxwrn6rzwp2747ranq9exvs8", - "bc1peyzysharn0nq0vlvqmaq22ct9ktke5kprs9fvxz8grrj2v3w9jsqgl8qty", - "bc1p7cpenm8wtwptwfz0pcfjxsfn82k4n7mjztwprruxvc36u0wqq8csyz5c49", - "bc1phejypn0x0z34xgkpvgq5wqgxjkhlx29k7gkue0yz2rcmp75jtpmscep8lz", - "bc1pypmp0r59pjxzshwg3l6vw0u9c8kh77uznn9v78crc4n0lenymapsntg6r3", - "bc1pl3avpext7hvay8auqyj2ed9szmyqxvmhkj5f2u8ece4agzvhapfqefgwju", - "bc1p20vm6ctlw5tsfxtswmq3qk44vp8dnepn8e0hczx25tsn8wf0n22q7dvryl", - "bc1p2fnt2gsuhq6a0xtfh2mv72guqn9skm7zk6g4gu23fm403n8c50xqc6jjfm", - "bc1pkwrh8l3ay3j3uhcjd764xaegylm8n9gg8mu3pd2vqrcf75z5jcdsupxj2v", - "bc1p2luspq45n845dk0uf9j70wz9zcpgafnaemj0j7d24wrwfnr3488s98n2lv", - "bc1p32pnygxkw4ajk0j05y0a04dphn7t2sxw0h9a2nmhsmeugay3mkrs780tst", - "bc1p83nfsel0wscjjprp3sun7dt6rw340dzf6guvgkylcgmy46030jzqcpx0vv", - "bc1p38azrkyve6xwzga5aknukute2w42hjqka6a94hs0tuccdt58x3dsyhdx45", - "bc1puu02k30u5lqnhzk0vsp88sylwe2mkk3uzn54mj9sxzvuzmnamd6sswavhp", - "bc1p7tf4wm9hs4hsnht85sp2tr39y85pmntrsuz9lxy3h4yler3mlvgsj8zcah", - "bc1pd2w7zdve7gclmcc50xaaw49m7j9pmp5mj95a9yg9dyr302q8sarqweh0mn", - "bc1pppd28pl90ntmwcdpmyse2a4mumhn28dhsyk4jctg5xsncwm7a24s9aqxra", - "bc1p8skpsntdzt8dxwefntmyjefs5phrxkrse07jjfgvxxv6swg7dy6stdap7m", - "bc1pd03n9f4u0xmhus8dzu5sw8t8hl2u74mqyw2ed5hjkc8lghjvruws3cgzld", - "bc1p9yest4jvtz0twj3ke934a4vhq407l6tusk2d9nj9x62mv27yj2yqm2n25w", - "bc1pl7s2yeuwljujgdd0m6hw253w2n73cmywxwqwyefu59znunzr4h0su30jqa", - "bc1pp3qyy9jhlw99y7wy02f4gnz0zxe0zsqm5a0ce0quarfdy42m3gcqwfjy0w", - "bc1pkjvhy8pv8snuq8vak0xht57rv8ttg5nqrga8qppahmfsszpe5d9stxkdug", - "bc1pxu0sysgdls7myl3hzhht5f6uh274q2u58sm8lz2xkv4ftppp5wkqz5njmr", - "bc1pny5ldnkjetvm4umyumuu7684g6u0jshq46xtyg99ra56kxcufpmsrrc6j8", - "bc1phpu93efu8q4tk2x02std7gmn3jzalltf3qdspp326nc0y80kcaksm9q62s", - "bc1p4e0cc8vqufv05sduwjrvs3a0wz2eha9qzkr5nfp0kw83wvms6lcqy7eee2", - "bc1pflsreuwjxmtru63vlty8gt8eymfnqg33txjm4megfgtn7r8vkwls0yse0y", - "bc1puz0hwtged3jzjfx85cvxljcpngrz8ysm6nqvad63tndpg7l5u5wq6w9pe7", - "bc1psezquf3ad8sptp8trg969ljs7vh0d6vs4hq2jfajgpjazjpa3gcskypzhr", - "bc1p0g266vhg3s38qc0n99jxdq7hmh7y5glp9a5cmr4hd5cclkfp9dzssnda9t", - "bc1p28vrz2zdy4c2aecxlxtq8namlsktya3x0fewrsefhfr4ue3szmnsn5cyex", - "bc1pjwgaxuxvgrn0gmrxg729aqtvpdu205rzht8uzfdexet6yfyf7jtq89rxca", - "bc1pf3vphgvwh3603m4qtl70jw89hdhkym8cldv68dlfwl6fv3hucf7qgum0t7", - "bc1ph5ujhnlk4d94ujhaszaww427pz3qhna5866d9d5vmenywgn7k94qw35kdn", - "bc1pdjw59wlghlftdrre9xpvt6zpc4zkll8qrg5rccv3v5m88k6tuz8qepd48m", - "bc1pelt4c778q70t8tgs36d92aft99wxm8k9dtj02a4au8fe6apwf7msgx05tq", - "bc1pnx6vv455886q20d53dpmy0jx4ks4f3md2fz5x42xhk4ran4gsjtqua6528", - "bc1pgkh5lng5xqke2ercd6zlrmts4tafjvhfudp0hcn630qe5eagcmdsmk24xh", - "bc1pmmgp7exlnrwvhgn720m3gq9wvkmhc4sarrzw8mpf9hltenqtym0qqfytp7", - "bc1p026hc27syatwjl89ne0nrjv2rsaaf7hkxu3jvcq8epzuup6qmqes9rdnuh", - "bc1plztlx304qyeqpdxg566hetckdqrwlwjvd4z73ay5ak3c5h09mpws7gftta", - "bc1p4hm3lvlj55dygtr6nhf2w2qc2d5259uz7p9qs6drxxfnkpjuaw2qf8kapt", - "bc1p36725095ws2d82acxvf79amp2nd03d3kxkl2y4ld3uqahvyltjts7uau70", - "bc1pqjfp2z9cfwrhx9w8vdst2axffmtxa2m34kq8tkm8ahpc7ludzy3qqk05dz", - "bc1pctfw7hjsmkvpq850fvklug2yqq0my030queatghcdx59en2a22qslejenk", - "bc1pewsnwtnlwsrl6yytj07z00p3and9yr5dka3jagstgseua0kh9t8q33d9wl", - "bc1pu9gcmf0fzl9zkh53tks7828xm59jq09n99v8vskd76ywxypw99tsjrv5gf", - "bc1paxng9s65xjff3lgs49prgdstg728qg4pkgqulfdyc9hmndypq3lsy5y6jt", - "bc1pdnq03qmrfej3uwupzy9fse2up3xnafwjfth7xr3egg4j5gdancssnax643", - "bc1pc6vqrxs3s7alal70k0397y7dytkze3ffs6j8zwnfc5juf2zd2r9qyawgp2", - "bc1pcmqa99rshtdn8kpl5tc3zxry0hxkpn0k94j8a3xcg0wkx7h4y3cqnwcyeq", - "bc1pln7gthm8uvr7hlwhl5j59sd0f6gpmc4rmfdnv83vu6fcnam5fupq260luc", - "bc1p7dtftuv6hc7hx84rngqyples8g86h8vce6430s44whv8rz7p4gcqalvqpq", - "bc1pzuzvpp2r6tmhp6xsz9g3jw6wwhyju537el0e69pzntjx8uxxn6xskcj2c2", - "bc1pnfh08v2m2f7jvn8jf8mjwhkvldc9dxc2wwrp3966rmqcyyhke6kq7f5pqt", - "bc1pag66c2hnhpu0fv03m4vrzjmwuvkjzua0g4q262fdlp0dhs72wtdqcq40x7", - "bc1p05e868dlt95tn4t9p7jkcrg80aq664emp2xy53kh9m2m024r80rqpyc0n0", - "bc1p5tfyygvct88dulucus7fqhjtgd8z8eccc0x4hdu3ec6cpdy8w85qyjsjjk", - "bc1pnzf9d553mk4zwmf4k6zcmp3grz32zyfnluug4l3vthk5k0p8cumqgytsmx", - "bc1p57let3kq965wnahjg5nnsvkzpkyfefvra4m8q2l8vf79qrulpf7syfuvhz", - "bc1pr0td6yuc8nf4a7rkyqygjtw6uu83jcnk34x0ul77yfecru83u4dq9a252g", - "bc1pmpm6ss48nmhfg69y86v2es3j3rev94m4kpajlghze8l9nqkwf5ks5afdwf", - "bc1pa98xunm6xwjgjve4dphk2yjs62sfag3mseh00fs3yz2y0clslk3q35sf5s", - "bc1pf4jn0kukxx44dj7yvkzltfwefmhdekqev7seukx3nnfwklyxau8qyp33wd", - "bc1pjlhl2tlnk3ccex8xjt3wjfx6xk5243f0xxpjvmf4zrcgt4fe002s8ps7yn", - "bc1pjuvq84vrezfc5q3sgkteyxpxjj22m09hnjnv85nusrd4zt9t39gsy7wgc7", - "bc1pduuudzugfsmzvthzprwm6w4ckxpm9f22lny4qmzdw6qyukjh5dwsjnww86", - "bc1p634wep4c43va70vhcd6exhs2exl5gge56m8qpvgcz7pmnw058sysfy2a4m", - "bc1pfchet8yttpzjl4nm666xwrzzn2hzk40rc4r9hnrudw0l0wedgztq5tsr0f", - "bc1pu8a7zl60gsjc6wfwj008wv2f3cl8cqry0qghu4pyvcm4xw43ca7sec46y5", - "bc1p8pn5jysn3j43yp4wyjuw25xcpwscmfvswsgaasmfvrfrf5c8d4sq3yfnpe", - "bc1pth7mtjw0w76etxlmda7a8smsc25qhxq8k59jyauanlxfrzaa35xq6dnh9j", - "bc1pd2ar37496jcacl29lkq2vzutep9n600zd2ul95cp4ydjl8dm5ruqrj2pqw", - "bc1pzyx95zn42zdhnf40wwwjcpeelufez7jf0dck6ztzc0jhcf8mmpkq95js0n", - "bc1p93m0a5qf7p547elpua5um3jvvpyl5jnf9vcg5qn8c0kps4z5c90srd55rk", - "bc1plakh473hfkdjy0c34t8g8fqeda8sevqgx725445zkwxtttj8l8uqdrt4my", - "bc1p5nqtqarx9fvpp87u4j0c0g54zwkktdfw92v2k30mj8z2ded6v84q3e42ns", - "bc1p52xxsa3akn2q3zjnysz7deaww0nltxcxlc8d2t8gkucgtps2lw2svslw3v", - "bc1pnc526wwvrvxqyrraxl0hfh4m40z4pwj3md3kxrygkfxl5a898assvlx60e", - "bc1p38saus5zx0sndwygmju6vl9dkdakpyynacln44yhnnqz9c9vu2ssqv8rej", - "bc1pcrv2gqssqe3g6g0hv08ejvx7tra2sac0gmguf92yqepp4stauxksuvya0f", - "bc1p2ucv0vfkgkg4yrylttftmkz3ge362hsfu78m7u33luqu5zqlev7q0pv4h5", - "bc1pz78phhjukf3xuqhe6tp250vl5y4k97asxjpyrt65rtv5lzd6wuksnnlm25", - "bc1pgza2fez7ggv8yta08hgplk7tm2t4dx0qahfvf8x0rlnh7kl20psqk76a4l", - "bc1pgga9wr6yp7rp76ahxxscharyfqu226wycvjtqr5d7cjlwgkd4uhsjnje2t", - "bc1pd5k3a2v9a48kazm49ly7qcgas7tzxqxeufsuakk4fnm9vvngjleqnu2xkj", - "bc1pczj5v5h0qyvmcy44r8lvwpw0e3zas7sk965hwze6z253yvquahlq9t6v39", - "bc1p498akmh2xf5rk5gz7nnum8pfurvmcql527r2r4n0zl9s7e0gvt0q78fkhr", - "bc1pzhpl9er9j0hmy47al2gpym4fvhpnhejxqmk6lg54q8eap9k5afxq3jcx6w", - "bc1p3p9v6jlvqxypdkrsxgvhpvthlh3epqlwjcrgrehf464qu2d2a2kshjnrwe", - "bc1p989uxpga9qm78tcjamfm3dc3usl7957qkf2nsyysylxgr55zlypsf5zc9x", - "bc1p5qg37rztevhxzrlsc38xq0c6lezvghyf7h6e0659c65p2uueyf5qur5lxa", - "bc1plkcsp6dlcaq4fr72jsxq6l24w045tgcq8u74eahmv0fvdqz5d02sf5gfgz", - "bc1p7lhv9lcm3ffa3v7gjt9ajtspwn9jz3avh6qscqzkalszum2c8g8skqg3de", - "bc1py3nzkwmntwyxmw0tnzjejn83jg2zg2ll4ts7suql0ymnc04e8knse3phlx", - "bc1pc8nm44f67mnc70rrgfkf3kwq8tke4afkw0fty3k5graalmg6jrvq2tz7rk", - "bc1p45hc4lg5tdfd2ntcx5875gthz4vta89tpmnykwfh49vl6y7d4huqdfgggj", - "bc1prcjy6egwtuv9q2hnmr0gnu2a9wj4radxc64nz5lc3847835w9njs86l8nk", - "bc1pt87xjahsd444q3jzrvxnsuuqm2j5pepmr8h034qfcrss3z0740cs54e6sh", - "bc1pfep9g7gnxrtw0j8944skwww32c0u8gxh5gnezr4rdz36ppzmlllsact09p", - "bc1p2yskwc426w3zxaw7aaaht04k778mpptsm4ewhtsjer83q2vv8j4q2g9y8l", - "bc1pss8gqp49t079t0l3q98arqlsc2uhlq4hvs0vkym3s6drjmk5y0cqydu9sg", - "bc1plmh332xps93lsy48gege06wmrvzy6ulvvu0ntaqtey764vx7ufvqz02808", - "bc1pczagj2kj6vj6g7c8p0nyz35u4f4nv7sgu6d8m45y5astzudwapdq7sjr2s", - "bc1pxms4j0lcc6ele36nlcc5svjatkvkau05frcwk0ln6hhlvcgfwmmsejldwy", - "bc1pakgy95hd62xh79v7lyrgr8v8m8y5wnsmt7nl29lgf4aeuu7qy93s4xqhz2", - "bc1p3t8h3fu6v8t46h63udr66crauh29sdkqgsmk0pakvgcuz4xkyedqn3tf5v", - "bc1pjxg02n8sm3kfglpxdermxx0upw5kg4c78a6vqrlxmdp4u9qfandskyugz9", - "bc1p2jcrpanft4r9n3tah3ay69ldn4vnwww7ck6457e6dfz8jnagj5zq0afkhj", - "bc1ph60m3feflmkkpceeasa7ep7vcxwe5h772t8sk9wl4nde2anphxgslk065x", - "bc1ppvcaxvknzkkx55mhxmlx59fk6y3nna8jn2060se64gvlwc2vlc8szkvm80", - "bc1pv0j9xgfzamzftxhdepaxlf8h89u5l7xpcnemp42ggfcjwuuvmdrqfec7lv", - "bc1plrqj0fs5j7wfmslah6vdusxttegzfx7n9jtjfr8veua3kspff05qlu4tam", - "bc1pelzhxk5gpxagz9eyzlcj0neqmt5gv44d2f7s6xs4stg6rs9fz9nstmtd36", - "bc1plfszk43qfvk640h34wcavwnha59q0w5dup7n46uzrj8f0pdfgz9shyanvh", - "bc1pftz3an8a6xy4rfnfwmus7xduhyvz80xecsy7ejskwl95wdfqsjcqcawpy0", - "bc1px9z6u7ucuql6qvaz25mm60f4jcs2tl80xuduuk8g9qhumz37fqrq9a8pds", - "bc1pxsjyrzpmyzs6vrcfueuzl5t5tx7jqx48kgq39d54hcj9fwfje4qq8gqvqf", - "bc1p305w3aerccxc7e92z3yqawwt9876gdg2dhmjuj38afyaugauz85svtdz4q", - "bc1p9e0n6ak7l5kgc0t3pdzjjkwxedxg7wwarlcs6ncgc8q7m57x96ys46n6dq", - "bc1ptldwnjd238vc8ep93wyukep34pkg24dpc3cpnk8j5rkqj0j40h9q88ks0c", - "bc1pspxa7rdtc0tsze6tdj2k3yyet9p4788r6ns200ah2gphf0jxyj6q7ck6un", - "bc1pnykvmlzlutmh783nwywnus5msht34cpqx7w6vm364k6l8huggyssza6ecx", - "bc1p377j7lvlv52dm9adm57x8naafc7urewq8cmyvwxupgj07hagjlks4v99n7", - "bc1p63d5hfzfudhvvcmqxr33mn8vu50cwltzncd86kzugrl89hw2489sjj6dmk", - "bc1p6emjemtcjymzgswaycaqgf7rswtlqsjq2ukgwyzgq9t3xn4zrylqs0t0zh", - "bc1pfm0my67rzev973azq4skp3c3ca0vtdh3k7zxd297vr0wygvfcras8uulmk", - "bc1p0t2zwr9kns6knvr6zdcze2z6k83u6j3lnlmdyw4g4v9hg6ep9v4qyxdt7m", - "bc1put6hu656dewhv9ce4xqg8nrc2f02gsdzpz24ngc945mqfwaq0nxqezztdt", - "bc1pevvsp9v40556d9k2v3xzvhrzcm6qgywd8rmqcnu738f8wfhz454sgaw72z", - "bc1p06yct90qessnz8fx7k3r2geg3yrq4kp5t5n59y5n4y83nalmyn6qd54xw7", - "bc1p2qwy6djqqnwfes9e5j840ueal7zwtayl60pt08a87p4k4d6pk7asvzq28p", - "bc1prc7w6j8j3m5scu0ysduynjyq0f0lffe5h89txufuc26553dxgwgqcpxwn3", - "bc1py30hftk8nhz364zl82ymzt2kg5dr83zacg3weyepaesgq0d9t38q76ghck", - "bc1p7u8lnx5yar4u43jgyndnrfrhlzrr770w4ghw53mx4r7yrmgl0qvsatm5lc", - "bc1p0de0dnzrp4nnclkha7twqvsffm2gkyvwwnpuuyh9ynz5z3eyf0sszrz4nx", - "bc1pn7ey3985xfy5atem5g5p3w8ycyvpchjhrqjcu7rxefr8a50rfnrq4ms5fe", - "bc1p03jtu2kgvext4k7kwpa2uag89wmkd68jnlsq7vtly0je98kvcwsqz4q2m7", - "bc1puwwqzrhfm9ld3et5usxgayq8vls6w2ae4sm9d6kahh7gfeurwmjq8fuxf2", - "bc1palwt0zv3kthxx7zr2daz96kyszcddz9h4jfvj3dzdv0lt6tkprrq49nw4s", - "bc1p6pdjkfe5vy6flyhf2uy2zgvn6arwk04uaqrank7x79kxgckc7u4shpn3hz", - "bc1p7ucklshhljrxd6vmfp9k9ulyk0lge8erm4kwm04eu3afxw6yvu6s0jcz9q", - "bc1prh9vmhwveh5994pm9peg2qw0jggg60uh9ajlh4ppv3ev2j3dk7vsmlp7v0", - "bc1p6wx797y8lrxzhkk2rmdqyrq0sestsdfd2ju0kwdrd0kdk3svt47s2jszul", - "bc1pqjfyn47xvmqkjfaqyy8pg6el27flzvdx5265sytcwwdee2zeat0sp32jqm", - "bc1pkaqcyvxh0kdk3dqjgl232x8kk36sktjx4x6rh0yrw5f32vyygvesppealz", - "bc1p76jr5se7e25dv85qejdml9xp33app5zzhvf8gttvkqrh0q9sa33qt0zvn7", - "bc1pc0la25kac789wlx047swgqkwemaudt2w6sl4r343m9exzrhjq6rqfneaqt", - "bc1pk5hgyfkwrg9jqjfl8knqpzcr0s5scdzutdf04vh4v2vvzr6mnqzstuh5r5", - "bc1pg48z7hx4wgljj05lj353nw3al2cw2vvx0y0tzsyxygwlk5vd50zq4w64kh", - "bc1ph60eyxqt90wgf70kj0jf7jvjx3fn9wp88wsuau6uzel0yp646c9qaeyqvl", - "bc1p5sw3uqxkgrr739sehnq2xmkntt8fe5keg4ya4ehrerhmykc2f3cstf8q4y", - "bc1p6xs3dgt2msum3vyvu3hf9jraa8rdzr7l5c3pgv4trp3j58p8xksqdqc27s", - "bc1pn9h0n56rn6ga5eyask0s6w7nz525sjwjwehc8lpmfs9pr9x4dquq0rzuk7", - "bc1pqae9u36cwvnp3j3m80m3wkylnjzpcx7fwhteqlumvgn33md4j5ds0hgxex", - "bc1pz5k4kef2qk37qs29awm2sd5vru8pu532eyx6g3j8jzh5yuuv3t2qjj2hd8", - "bc1pqtqv05qhlwqje09n3x5mp753tlucqzluvyk4wdm8z2a6d93phevs7hnmfg", - "bc1pzuvhprjkkxzrnfqaxnta8t5wme76usfxvyjxctyuhe6s5my7fczq7d0hsy", - "bc1pwwfa03t50n464r5997w5xt8fr5lgtnfuxrwxtc8ssyetxurt5unsht3953", - "bc1pq65n2jnlc7h6untwamr64hyug2rdf267hu7ca59s2yrm32qs8a4qag66g8", - "bc1pqxe9u9t90u46e983kg0x4ghyv8pvs4354gmdvzayqyx45m7gn77qgzqaj2", - "bc1ph8pqade335dlns7p4r5juwt4wpaeyf5tdgv035euwjd0qmlpw4fq5nl7y4", - "bc1pephasszw5q576w2pmfgc45afrf5l6kwq9m8yawvzpfad9ulywmssq4ka4p", - "bc1pp6k737wahsqjwuqgza6kvval42jqwhy5vksd5ewxj7dg5c44q4zsqw6p9p", - "bc1pra5yzq4edddmu0s4n8vnpsg57jcqkcdgh8pn70pcs0xyjmc3httqga42g5", - "bc1pdw9gfv00mauar4sp4gfmcknl2lxjrg2nk0adpwrux4ecq62dhrsq6jtxjy", - "bc1p8l5gjjadt3rllg76lyvk0vqgvrcq5sdvzchgqh5mecfkxke7x6gs8yexra", - "bc1ppf622pw7ntu7mal7tvxmhnjmkvr508j6ac69fujfdx54kxnzfhhq0rz7l9", - "bc1pgngeq8jj5xlasxkkgllu4g24w83kzjrh36xedwfcjs4088gl6xhsyg0ufp", - "bc1pwr3fjpyrt36pmapdljkxhzgzfcuc8gecr790mf7rv46gmjkl67nqc445rg", - "bc1pcw23k6aws2hywgk3u939p6x90wnm730qsj0q565ku536j80326xqhra2wj", - "bc1ppyvyde6scy65gwp6tzgannmrry2ycytd3fglkpespcaqfk4zaw0swpefk7", - "bc1pdwq095hsf2qvn9prrx0zms5v2ngudx3h9wn04jhvzwl4uudlr44se00vks", - "bc1pwytm88a6w3ed3lv0pvvtts9jsvvsnqvjzpt0z2n23jnz4jg52lfqux700x", - "bc1pp3uxg3jcjxz4seau75xcn7tl3fp604canttrdxhprz4y4g92y4psl03z6n", - "bc1pahr3hugknd3dlyg4wxnan766wtgu5klgcvdvv0z4jyqgjv48gvcs6j2axv", - "bc1ppp5lfarhp7585ssefvz9q47907x0tmwtdnpe3qyqwe8wtps5wu0q6zp42t", - "bc1p9v08tn8mxtve5xl2w3u396va79tyz2f8heksw4zd6t9r9qcr0rvsa33vxl", - "bc1pakdgxj82j56npfg3n7gwze2h2448f7t84qaaj067x706fjm24s8q7a2454", - "bc1pgl746xmn25zwh5443esj3ykse5nkdtnf0m8tywgx9d4wcwgwfrksftuskd", - "bc1p2szfvsgjf93xqvmxuw55ykvh3vmxpnj8gdc9t9ke5fduhftd4vuq2p9nwk", - "bc1prn7sskjj52zg9g56z7mhc7hwg4g3yv5d8h6ja5tyaelte6644fssptxq46", - "bc1puguw5azu6mcqd94v9hqp99yyzlnfvq55x0sdafqqrhev5lang4rqvlrjpj", - "bc1pheqhypkyfq4xqvr6qhtfhjzdjt7q5lt4wrmp3cl4929me969paksz56252", - "bc1ps0qhyd3ss3mcynm2cwyucjz2ffnt5pmng4ckxnltjrqyjyg9h43q7sf83v", - "bc1p8rrmcwxg35r75p66hnrwade7re6jezrt2aaphrdx7lta2weg2auq9ctu3t", - "bc1p05ewanz9mdnveeumpev2shwv4u5agyckqrwke5gdxh07qggsecxqxnx89s", - "bc1pxrj2k0jz403kn227czwxwx2dygmugq8ajj3dvt7h8wshxu84axtqlhq7lm", - "bc1pdqmjdm9p4dqzk9hah8ur282q58trhw4k9a9twnlcvlvn7x4vkneq205fn6", - "bc1pnnullwj00022uvnpp4u66qhcdj77vsf79wnwhwjdrc6dufl57ytqd8uerm", - "bc1pl65cmzzn84hraypeelye4ufcnuaueku8prwwk8c79p6rarhmq0aqwar203", - "bc1pny5z8fycntm4cwpw4qxfks33z73usf8h5sydrmuk0eg4pfmlrsvq4zw0m8", - "bc1pqaxh5zwszhq55ete5cv5jnkvuyn6d9kt7pvmduxyxjvg9c8c344q6syyd0", - "bc1pplwajhaammd3cuqxum82ypvr0pj3zw0ces6q43kzmv235ps93ysqq87f5n", - "bc1pch4xrc2m70f6fa3a7mjxhevxetzd9nxpzxmc09vmred2pl4ek84sdzckyw", - "bc1pgj0wq7jsgmzhjktqjaw6kjhnenn03we75g00xws8unf65zc4frtq4he9ld", - "bc1pdxnascm38dmffa5mx5kq43y9vpmnepslkp575exxqmmad8gs4a0sn4p84j", - "bc1pmxz7gvm4q9qn3tvvdhknn6j2synps92drra98cyqlcg05jeey2ks9ycy2m", - "bc1pd25z7ae09gpc6gaca4ywe5gdx5sktcvf7mq9gy9cjn7v6hcz7lrs9mkhx4", - "bc1ptcpkhu4zqamya6mn8aq6yjxg8pvq3ua2d7u5h4cs6ap5k69la8cqwxl488", - "bc1pqx47300md7vlvdp8lkckq54mrd42hl33349wc4j00tdtjxkw0ersdja5mv", - "bc1py3ccjw8pxltzh39l4xjdavqz7x3aj06gutma30m8a5p4r8qrf8tqdgu4eh", - "bc1ph5ludcla33d3s7ncrwv4fj4dm6krdvkpfxuzq48pf3sjtk7zga3sghpuhj", - "bc1pzacz7df793mxva584xyx325tqem0yxpxuads0d74n2gnt87cphlqeryuee", - "bc1pcj52dvgeqxt5g0eu56xggv32jp05swu6wsn7purjfgn69cgzs2jswmyevx", - "bc1p99mmqw06dfqyukx3yph4jh748v4umxg6j4w9fw7x2dd80la4c9qsvdxgky", - "bc1phng76448gcpy5aprstw9md5q2selmugfek5ly9lg8efadzmaxhksza7cc6", - "bc1pkg9xwcl5hmeqknsunyss0h5jkj59q3p8xqhyz9pnr826taxaqg9qdhjlu0", - "bc1peyk0u4npsw9z05mvahprfv732zdukc8h9arx4l9q6m5kamuyjmzqswx6aw", - "bc1pdlgswwzuext7khauz6dv4r96skz7yuvt05am6eew6g28yy46h7hsxx50gn", - "bc1p7uw97vynn66v2wqyakmzx6ja5se5mcr3u6fl9dyw53fsans7d70qxk02ph", - "bc1phw6xj5zdfrntm0v3r4mxv6f4x8sdgshunn5s679agnxam5h5003sjxld8u", - "bc1pn4e9av0z5aq0l24kl9f6glpt7rah2ym6ureccmf4cqdlvwym452swnzpjy", - "bc1pqj8zzn7x5gtd74vqed6kcp409nx7msnr6qlfk76ad0ylm40eujnssfj95e", - "bc1pz0fch7zszklmxf80nly28qpxpkte7z7fcd90jl73ehhlpu9ht69qp9c0mw", - "bc1pxev8m3s90nw5f2xw2vsagng4rn2xge93s5qx5fnqpq59mvyvcsyq7738vv", - "bc1pydm4mcl3l8jrm97x3rn7lxlfr4xtzrjxy79yqz8hyykta539jqwqujl5zk", - "bc1p7ln7uc7ecfaavtc0gg0t55e23xqz6qvhux8dta2s8yx3925nzmes4h673h", - "bc1ppvqzyt27ufh3p670q83w0cvffw085nspyllvadgkqpnznsaff04sd75r75", - "bc1pv0g59nflgdlh895xum76ym5awjn8danvcl23cn5k7yenu4h9gzcszugj0n", - "bc1p56u4xw28u95m9kw8sklf8q6ycr5yyp74fw7x9arxjyu72stc376qp3jj0p", - "bc1pvpq9m3jqsw4qul7lw6uuvd4e58kk5pe6t6xe3g7g5pajyapn0sps0w0yyu", - "bc1py3a8vfkypqtf39hj2lscusaer8fhueyf3s0rkkrvsm7km74lruys4gm8fu", - "bc1p3ndnad9p7r8kfelrfx8httys8ps2dquydstxa7nfdhpdcqzve96qfamqg5", - "bc1p6j40pvjam9u9swmlakc8njx2j5m9xlgkpwen7ylmj26fzy04d7gsht0686", - "bc1pvlh49tr3kr2ae75fpvgtkkvushrwgrv0c8hdyeyk7dkdjlknkraqhvlahe", - "bc1pfyq6pxn63sw62a70l96nxhhayvymmnhf2evvyxnpm363ecln4zxsnqhps6", - "bc1plwy7nlkvr3m6j06y3f44zlrwzdde3k0y38fxdrf5swrw60grahwqlj8gjc", - "bc1ppkfjjukhcnza3jl2hdayqsdphwf0fasxvqfrza643dak3ap7j50qnn9700", - "bc1pn5kdvt5h6xmpxe2j28lh2ynltqje36jtjdnzhpfeqw66flp8hjhqqls0dz", - "bc1phjyyr579g5kwkgh83mfwp27g8r4jl5wytgeqn0we0x5wqwa8jnqq3e4xr5", - "bc1pypmgqu5r286hf265cuy0dywegjsw8wuvzzx582n72us34lksxn6qafyyew", - "bc1p2ngvyekcrf4wda8955vcwpjyftpncj6s906d7y20kh6alnkdl3jqkptmzr", - "bc1ptssdpeaa43z7h55hmct2vtc5w28j0m4dx39afmlnlk4tft436xjqgc5c8p", - "bc1pyhamaqv5gutnchwypkn7zhwl596zaqcekwuwc55jsaktqxj4y76s0xfsfx", - "bc1pujt0rvd5gc5py8wqjwp6fm445kd90473nnhldqvmeefq547gkncqactuza", - "bc1pw23nm8phpl0q7jsfpgmums7cxj3f5dgjzyms9s4qjdzehqnza83sdhvjdf", - "bc1puz2l6rwryszpm6jt2xy33xdpdta3l8pejmw5ygujxaehkmqs8fgsrkwq82", - "bc1p855qzaycggcu7gkmvy2j4mf93vhdmfty9k2rhjar4704jl6zvs6qx8cpfc", - "bc1phl6j2f7az7jztclt9rv5w4ja4w3403az6nh7fuscxxkukvs0zy0syhcj5z", - "bc1px4lq3sjkz3fcddna0t6ewuqzljpuk2kvvg6tjwlhnlvw2t9an4nqvc05u7", - "bc1pl6040f9n7nmeaw6r4z0xqantvze67wlc8y08xq6vt7e5svalnd6qnjlhs0", - "bc1ps04mxkphqlgjgjvdpjkdgk6s8aju3sx4jqd7acne9f0r24gcrutsvgs9cw", - "bc1p5qquszdtnzv7zmy8mj0afcms2sx2ezkq7uugs6uus9p2cnjztvcscf6ppj", - "bc1p02k2algx6894tdljneavrrzfvgveg2mrsz027zzsjw0g2yakdxas5avflj", - "bc1pgnv92az0s85wgh6f69p3ukfry593uyrc5pg47wfqnjs5wp5nmvvs877eda", - "bc1pqfaypwnlqe90s7w42ln34sqegtkg23ucazhgf4qhfp5q9xqr2t6szgrk20", - "bc1pjeh4e2zz83d9vfk7uredgmy93av9ly5lz94mm9uwwur2zh93j3eslz6te2", - "bc1pleyv2n6n4lytklzwygxyc0jtrkjulyhufhkhr8v8lts3fa34cdqqugqws2", - "bc1pkkyu4h0tupducjk4ajjkpn669dapwyjks82re0vzmmfxpjxjnfjqunk9lz", - "bc1pqz6k9w6zykczencp6rluhcfet9f3r6e8xjse2laeg8m8qxtl2mhsnds4uf", - "bc1p9lgudkng6gmk0f8d3na5wjt5jg8fq0zn6s5yr2xh8cmuuss9saksu2tsrf", - "bc1pdqe67hrj8kmz4uqrzvgghaaf6xcrvqq9lp52pp0g3z7s402nhvjqfdtlwe", - "bc1p0ctw7e8kc2s4tfvnyg7c8nue0c3dqxr7cudnj59lytcfv30rm4qqmz6vnw", - "bc1pzfrmlk3v2h7sh8gak5vv70kkw49vsyjt4hys3uhk4zlw2wz053lsn9uy7f", - "bc1p90xzwenyqetqyues6830xuwvdn8t0h46jrac0lsqhv42rlv5lgdqh6qfn9", - "bc1ppcvj6k9r9rtjaeg6q38kwvdzcangwy2y0wfqs8sqp7w24v68l66qgnvama", - "bc1pedzmatdrrleq98frfts65anse0yv53v237e4fqldjarw49wd6jrqvfm52t", - "bc1prjsza39fh9h52kaphddsy0wm42sqvwe46sr4kkc6fa9mjzkh6h9qjs77cv", - "bc1ptnxmwmvx4msdr5fh4ee0lva2v55q9fzz9uaq04ql3cazrjv9c5eqp0qxkm", - "bc1pntckwlhawg4c2knn65qnq00jasaqedcnn08gz28ze3ltpnenc90sr0a6gw", - "bc1pc8r88380u6n8hclgegx0t8809fl9ratxzzjx4jwfka30c495edzsaxs8y4", - "bc1psq6v8t9gky23tnwkxjkxy09r4kayt8nymz7jed8lrjtj96wdu7gqcrrucz", - "bc1pdwkhvkcx9ke34lpqld8jx5enswqprwtx86zdfnpdlcuf57t6ckdqwl66j5", - "bc1p0t9rwm6hmnlq3z2a65wuh4wxcfwlv0jmmf305jz8vn8uvtl855yqwgh7tw", - "bc1p36g6p08ltknrgu4txmxdn9x4yy6rwtqxd0crw7zxxznfpyzlfarq37cplp", - "bc1pdqzsrxlud6nvruj4eh7y2t7k7f9dspxvjv87uad7uq5yk47zngmq5zd6av", - "bc1plcz6zn8n23y2flutv766ftezccus40evzytjnq2k6mzdxqjm50lqw85nj7", - "bc1p40f4xu8d2fej7rs44g3wquuhc03u2whr20drml92k7vj3676mshsh44mw9", - "bc1pjutrk4aeew3d4fc776nhtum5nug04xy8fyxs6tan9zsjhajj6lmqmnlrdc", - "bc1parcs533qeed8nnwnjsfwnvw0rzhhgenek8cqxax6d9l5mvadtlnq00pfxp", - "bc1patj88u8wltn0zeqk5p068ljes9jqmann86tnn6fvl04mlpwey0ksmwnsxs", - "bc1p4p4lvf68w02rcrf8agr44chv5pd06ftjza2lsupgcaa0cu52r5esd7ttx9", - "bc1pwt4xwsgt2395n30hx843c3e0jq6dpc49m68274dp7xe6v66qpkpq07v06m", - "bc1phgzf8gswr46t2afsph4hvm2ge4s6jhqmxw5nlpjuz8w8kw4p62rscadrje", - "bc1prlf2xnu8dgys82v9zdpe7anfsx2rewtwasj9e8vc2936n3sf4awqlxl9xz", - "bc1psvpjtkq8f6k5p7z75ppl5s86k9lhpwezfmy3gq4cz3xvv7rwndrstkp8j4", - "bc1peezt59nxtqfrtj67sw0umx5jh4xgfa8nwwulm4c0r5y05lm7v8esly0u5p", - "bc1pej9v3gew8jdw23mrvklmt2pj5xpdceen6mf0cd9dncfpkmgla0fshpz5ae", - "bc1puvzmpfg5eeuz669wrl6cfyx4nuuapg8n2vu0ar28jt820hm62k8shde3gu", - "bc1pwgfrtp88dx8lse5e9dkgxe2l6eusdrznheprdv8l5lr8agpgn44qp5wsvd", - "bc1pksmvyp0fnpksqwfesuruw9w6ym00dyy80rzs658ntxzew5hl04jqjf38un", - "bc1p8de338rh5elcc2cxrrc0m30hh6aupm97mkpcsxvft0uzqmwp8qnstjsavn", - "bc1pgh7lrkp69hq4dzx6at7xchtrn89x6vqryacsw430kccj052d2ngs0u8rx6", - "bc1pudzlm7v7ntrtz6qfg8r08vrkav64fjslzz8undeefe83e4thgdlqq3kwkf", - "bc1p7muapaclpjla05hwt7z40qr5z3pwha74k6cx3hfcq49u4dp3zv5sxwnfwn", - "bc1plz5sqfu7mje5lscttfsezm57fyzpf0plgqc2msk2gwve5hfww63shwqvx2", - "bc1ppfdau5ycgqd48f6sjvk2zurece0vkyyctvd8u9csl2pwmtukdzvs3h730v", - "bc1p0wpk8zvm2lr0f0hnj8qwr64klfq0fwhrnz0qewaf8pgj70yc632shrwcpy", - "bc1plax35ptt804acnk58pau3grp65wcvs5qd9dzsx0nyuejju8d4y8qkqpj9x", - "bc1puwdff3aslnsp2n809wkutrqyzevsepujlw8e9xgmsglqhq5ujytqcn6h5j", - "bc1pmk095r32m7wu098r52jhd6t05mpxekk3u9zpuvxvmraljkw7qk4s7j7tgc", - "bc1p2maans6fhhpqsdjyavtzfktq7pwfupd09eke7au6g80k03p7nc3q9g09al", - "bc1pauhj6vukpuhrtq6ar84l7t3kngs8sla060spht55e3z6e806c9xq8lsquf", - "bc1pfglzvgdrrhgzg4r3g65kgfmeuwv0y6pckj89tum8cfu4vdn9vwcs98jc3n", - "bc1phh7hv5gghfgqea87syqgk65n039tg4zc9zqew6g3y7qas0gxnraqtz30d8", - "bc1pc5ttsw6ew8w04fjwnkknmsrfa2xnpxwlpw94q9wj8c82jl2d8x3qayzdxz", - "bc1ppyxeqrevuxt2n2nqeupsmj43hs0rg4p7rrhdwpt66eyyxspa3zcq79kfpg", - "bc1pgs2met37xw2htu7rpulm4tkfkzfae4djmuselkprcxcms03ld4pqfyndqx", - "bc1pn8uccrdmuh69d8ntgkr344l3hs4u5vsjfx02zdkr2t7uj7r37znsfa2z22", - "bc1p5ygfqreze565y06hy5t7en7qf3sjzfjlfgdf6eq9jzg0pqurn8wq3253qz", - "bc1pv63j2e8ns5n9wns9mz96utqwrd275xphjn9k6pfkt0dygdzccphqwg52un", - "bc1pqm3a8c56p770kp85fdptk35retnjeu4j8uerggf0a747cncvgfpsqn6wwn", - "bc1pgu6p6rv99j93asye4093gu3pxp9mgfc5gg09nfhcmfvmmafm4wzsljjdyz", - "bc1pt5y9sd759ust7jnvdzx9mvzpk6n8lscsfylamj7s4mn53z0kew9qs7al45", - "bc1p8dpe6qageh0cjvp6648yqrf8gssyagslxuv34t7afse6ptz3s28sz7uk2k", - "bc1pp2p2xz477rsh4te09emuuxlvy7elrd8aufl7c6jpsy83rya7umwqhurnvc", - "bc1p395dekvcgj3dg9wlv7x0nrufnpgyq6w08atjdnuxnt78fl43lh8sdw4xx7", - "bc1ppsx3z2t0kqmeak0dg6hx9sw6jt6qrjuk6vsg6xwrn30xefrsyrxs0vrs4w", - "bc1phnxg33cf2yyxfx6gc074rap6l5kyju2p7ft7hwvz6vqghhwnddzsgwem08", - "bc1pwfttle3yt9fk520y3ph6yas7yuehyyxvuaasgnglte3f77ut7j0svqp52c", - "bc1ps9hjhlle0qxqu9nwctht4g34gnju0dtea03zdlc09exlytshmkmse90wwu", - "bc1p6zkxdd9ww8cz0ue2hp78a6z7tm4uj8jqcw778a4xnugnw2uzncgqkh55hn", - "bc1ppts2h4l5324te3yja4zpd2n0t7xdgfguqgnf7va0du65xetajm5qhxtet6", - "bc1p75utuwlz0wd8fv7hnpe02r0yq5ed5chf2qsd2cuw3yklqhy327qqst7ztq", - "bc1pm5qk906ljwns9lr3dd6dyl7yvn7uwmd249mvlly7enjswtp7ar6qrx30rp", - "bc1pyta6zpxr7dc4l5jk9lfnqp3dyzkg3lh90dne97c433tdyynsxmysztl0gm", - "bc1pkkpng4n23vumtela7h777jnvskevnvd80tvvgu9n8reghu9nka6s87et39", - "bc1p3mzmfpnd30knnwjycvmty9fxrxaem64t745hnkgma85wh8x2kklqktyus0", - "bc1pwyprtz8en68y49u0v5f3e6hc33lxkwf9dwgx7wh86unsxfxdk2pq9vserk", - "bc1pf20c8eu3gh47f7a8gpnsvg2rhujvxy28seu5fwht6fzh2tatmeaqkjuxkp", - "bc1p8uppdlcztdpldj5gwwn83wyk2nc26fnwcjcntckuq2rwtlxskleqqpkzse", - "bc1pq6anepmyg8kfj8hgadnfzy3052pe7jrpx3gdutc445cy076ns69q40ealt", - "bc1pcwf9schnzdn3hw579lwafr5hva0plv54j69da8xjhkprsanyef7qc54a06", - "bc1px8g0tn5aus8a5qeugx6djhsp6xk59enje3mxkll3hlv8tl93dyysgkc82f", - "bc1pfj5c3p6syku7et8wmps6acaz7f4arqk436ejyw3m4948c2yw79mqazya9n", - "bc1pyj6g35m5jm62gzym8zr966t2t38muzvjnmdnlznchlptdeh0y98ss8rdlc", - "bc1pskdl9d7leqq77epykr0z73uzekw36c6mcjlrhqjv7glarqz9qa5spnpj3g", - "bc1pyy9rq3a90hm25gsapuyeryykur2da0g27ssagy7ppuy58r2davfsjl658s", - "bc1pddvya2ljps9954zfvdfx54shnfx5d82dk98ymxrm0h77k9zwl3ssp58tn2", - "bc1p9ntcnn00memqn2cy4cj28n2feznejqka969yex0k5ad2vqy7l63quacgz4", - "bc1p2c5tnu8g2xszexr20akcyafvswcgwqz4450rr2enz38qzxarjypss9pzsh", - "bc1pzz4gyj7mt4ty7dcgy3vxfg880yhvk9yusulyy5g9rq6p85ju0myst2ukzl", - "bc1pk3gc9yql8c4r2dppr0hfufg9fzcgyhydwksy8dja86cl7sms5ccqfl8k4w", - "bc1p40n0nuszfl409slx0u4f5jxkty83y34dw9hlgaxftws83fnrp9nst6fxzu", - "bc1pqn2nl98kr5p794ksvjtj628nqgrl4afwttyfnq0u7p8a99ee7hkqtcxgx8", - "bc1pcjxt7cukts7w73qq7pwk3c5rzru7cwnk973qjd4ykz0mlen6kppqjwqqwr", - "bc1pssqytyqqy6ja8e93rdamrzz7tav7gpppc8tqumu0r68gxgwfkswqfrrgjw", - "bc1ph8mu463u90wcrmf0tqcy3jj3prjluszyjx6n4sa78rvrcjeth76qqv8hym", - "bc1p0e7yyvn8nw3d9xn47q56e0pnngz259wdq39mtq5lg6ycj3474seqt5fqef", - "bc1pf0jw8hnnynq3auk44athfu3j2x2kf0gfn0g42873u3rtv8ayzelqjhex02", - "bc1p34n020g0n6c5pezv5w8ug29uph2neqn3nh3zk4ar2949htyf4azqzze7ts", - "bc1pya50sfjkvsvt7g54kd79a47dpmne5af9wgvn9saz3ur8r6tanwxq9d3y9c", - "bc1pyy22aywqmenzadzxcxvh05ycdf8l37h2x56jpx5pu8t08qeg8tjqgpwnef", - "bc1pl73yjfnr7tupuse7meyc0k8hdn60lrpjjxnvcr53wutq34hmhzusw7slqv", - "bc1pg337vr04yq8ca9przxcqzx8zqq0rqwr7ksrzcwe7nt65r2at6zas2egff7", - "bc1pz3g377n4z6esy3g84pchgkdfntsaldt6les0jrupfq62mz0zgnhsvzxmqh", - "bc1pq6k2ptp5syfu7llv769slly0phhkcc6n5zt339wglzs2sayzt8yqwdxvra", - "bc1ppkzxx06c6xwed36gxw7ely078qxvp39t7mukc0slu3mkxlv36f0swxzhkt", - "bc1p0p6hps722zrht8y4h66q90e3gcphdc3kpxful9v4a8s9dagnkz3q2gwfrd", - "bc1p48auz749xczrhte9qllgz0cdklcxv84jduwpa85nakqvttggalssgmpuf6", - "bc1pfmp6y45f6kkcwskk7rtrrht7rsl3zdrkj4j3g2wlj3c9utjmk86q5fdt8y", - "bc1pcedazaugfyds3l884qhvrqnkg75vw795sw9qd0p395742t20e3pscpc8w6", - "bc1ptx7gy432jpxg96lqcxfk0r5zvtvdxm5m20n6e25wxreft03d0ujqvtcyex", - "bc1pm82h27he0sqfq35wcmqqqsflk22kwmk5af0sqcnustxgy53jzfqqpus6lv", - "bc1p4epgg8yug3m9v9cgyq8npl7z3fetd3gnzhly2tqwm6u60pk75fxswpxs3r", - "bc1psjzn7esra2fmk285mm3s5m9ylrgmepsglgtglja26rxnay38c68qacyryy", - "bc1pz90mej5q5m8mz7s4j4k2k323uuxr90q0vamzhu2cg9nncag8meksvxugga", - "bc1pkhlg5gcsmae5d9h3y5hu66wstcph394t4rrznu8w0gqn6mgx3nkquc34kv", - "bc1pldch5lqc7d2zqxrs23t65vfgtl9vp858tuvfevtpy8m8g8edahlsqxpkgh", - "bc1pu2ldcu33xtptceswk6ajsxa4mala34mm7ufevmlw9lsgkds6l78s3jgr2n", - "bc1p40v4mmquhm5aze85q0h5lxrd5jy52zgy6ldlrl95sedzwkghjk3sz0akha", - "bc1p6l7f4mk789x5pgc5wtwd4zgej6alws9h3yu4r9er4cpe7eccrfjq5d6qgu", - "bc1puf88ruf8wzx4rrl9c24jrhl7379j6vdfqsatwelm92px3hplwdzsvyhr6s", - "bc1pjqjpk7d24w4zj8xlmuaanuryrlldqnweynkl9x82fqrwm0jht83sfttr2c", - "bc1p2eykn8cxxz4a787xrugz476t9cxk4rt6p2h73l5cttwd9653llfqfpzah9", - "bc1p75uyhsqq67k9fm8wdgga2hh6eeajlaqhknqd5glfffwwlnt0xkvqmt3ru8", - "bc1pmjnrjyz0naz7qq9g5l066qgc7fykwjku52uzdqevvg4c7clrf38s8ef3jw", - "bc1pxm58qujqlxelhn3e0gc3hjg6rkepe9n4ve7q2n3mn58wfn5lzftqx28wh9", - "bc1pwhvsajyzq30rsdh2twulfestzqvmrxtp503g8656l6x5sp89jyespa8t4u", - "bc1pl3nkdygj8zfqauyhvg4ftlnsete0d2srq5hdj4lxuwz3gc2hna2q37f3ef", - "bc1pke96ezzmjhew46wwf474hxply5zhhyy5rr6x55w04a065q2mdwxsh88sy9", - "bc1pxewgx5prnlupxuy23dfnlt7l4vqacwq0ejnp8h9kj33ge5580epq2p86fw", - "bc1pef30je7tj779zajupuw64wnejkjn7cp76gjkugz9rpwmcslrx5gqaf6xcd", - "bc1psgg2ac23gexpqezq362u6r3lexu783yak9fw90el9jjyswqfnxkqm0le6a", - "bc1p6x8qk6hz9pwf2ly9ex8dhtyk38y2fds2fh9k363y40a5js9jxrls98cjf7", - "bc1pmvyqueghymrpxjmj0gj9jaspgps5mx3zgljpvj9pe5ys2aaczt2qzwuqrw", - "bc1prkmpkmnnzz0asp9p5np2jp8zfytwa429v46kk3thg6xz824kwkys0dkvrk", - "bc1paz6cgdaxcwenvdfg34sw8gzu5n8nquy2lts976p76v9mw6cl7qgqs5pkpl", - "bc1pp28jpnp3dl8g706l2djsp9u7gq8653pmwcspsuv0h7tr27wpqh2sgftayd", - "bc1p99rwf5ggnew76jxhnp2s54yzlp2rcyewnl5yrlw0qrllq7q2gycqwvelgt", - "bc1puw78vaq39zxesf9mzz3pwgccgxh06nl5tsapk9fuj2xgp8rg337qufcxys", - "bc1pe73yaln8szsgak03qqzggxwck0mc322x4ftvllzr3eshvdwv6pcqeexjqp", - "bc1p82uzpuuxtq535679lu5uk5h2eaxe4vyhk0yxk05ykkkmrl25rd3sjk4avf", - "bc1p6wey5gwa63hplnz97qcgrl9ywrame9jadpgexqw4zky5p8e6rsxsuawttl", - "bc1p7qy8w8fq67c3ymyefup2shf3hg4cqxflml6hr632vttzjcykxswszu209a", - "bc1pk5az480n3rq8r5gem2yl5yf9pxd8t525ajlq2tnvwf3ffwqea4yqe4c280", - "bc1pv2aau04azexcy555k722zduhx24ephk8pkxcz2grp5h53ssxwwtqp8efjl", - "bc1pekmf3sjxw5fgjz6387txyr032gq9jy5cuqq2dc2j75e0xtx5sgessqls0d", - "bc1pwumuzj2rr2zmc3j9wcdpwtjllupa56644mgft2meg5afvud237pqn7nust", - "bc1pyzena7n9fx9c4tfu7xfl2js40sl5peryhs0r0hwlerd6cz4d88fqqdzlk9", - "bc1papzu6lqxcgpek5uj87gy8wj2rmchvupuhwd4p7c20fgqry0d2kkqrx4ndf", - "bc1p3sq8lskke27c4kflytq88hrll5qq4p9rsv3kaxpd44yt9j6xw06se6jtsl", - "bc1pe9mph6gfsegvj9x7quhjj8hqtvkafkaxd93cxegajyndwxkgv44q4xszpd", - "bc1papjavuuhfprrzlfa7a4claetsxrk9h28682ww5l234ky7as29a2qg0gf4f", - "bc1phtrxav00hj3tmvasj2jhunj29sppjemhjqz5vxlhn4dx0qt40e2qayjx79", - "bc1p8hsq0r9aja95dpknh45rh9k59wfghd3p24sc5s0c2efdjjp5lxaq6fpnva", - "bc1pwrvtx74eskmedd3nuhdgenvtck93cwtcnxrw9plmr5dh8ew588lqfvxzp5", - "bc1p6lsej7wca2pwlush5wzl8wfqpxr0xx5eqddh2khr7ezrsudpdukqd599vs", - "bc1pflpkrpedsj9wwmpfcdfwnvhaxfaunjgz5w3zgdmdy0fxltnxzmps7gm4sn", - "bc1pm0dm2cx4fky8lejwptv7eumxhp8aszqmjrlafj29sw9pl57pnphqswj5tl", - "bc1pha56jgfnha24g3kamw72kav5luauj5pqf58wrdm4wt7mxzwhclfsew8ume", - "bc1pe7gz5kn3du45trah0cq2prlh826mneq06f5vack333hylcfu3l3q6zrgye", - "bc1ps7shyh3w60xvpzwha73c34we9dh9z0d44ct264hurz7qyg6xf8fs8rpzw0", - "bc1pyxwqegl4kggjl47e4fmsaufun6dn3ftc72kqaqvqx8g2lz8643uqvmc8e4", - "bc1pgjsevf9nxqsf2vz36l0zs22r8p9k7h259h34cnqw7edvz2sz3vhslwdqcu", - "bc1pdadfr4ar2452pch6e83qkldc9yplcrm02gjcvkh6flkz8u88jm7qkq5hg5", - "bc1p885daw57fjl0a500g82h8efgcngu3l8da4zva4kxenvrre6v9egsyh36km", - "bc1ptruk0qzxaugm32ku6vv6rzrgu0traurn2pn8w7lf3u64x97jspksml6xsr", - "bc1png7u9hwhzth9d6f336gyqw2yx0l79qflh9q6dpfm3ugxtjtzvpnqvt3rga", - "bc1plyz5c0pk9y2dy0yrcu8ucg4qpqppddz9c3x6vknc7y2a705vcu5qv9y36e", - "bc1pv4qzjaly59azp8q593vfgg0ud6qecyrepd8nwzanwpt4mv804evqgh2vps", - "bc1pwema55snajca9lctstll2z5hv653m7ge6syrtplucpkyxn0p6faq6ghe8d", - "bc1panwprpyhlq4yaxyetn5v8s809pa3f9hp3ud09w7kagjspsyd5smqavchu6", - "bc1p7e0y2gu4nuvgx74s0kccg8emv8gtw8xpzzkxsv3laqa5rar2lxtsj5hcnl", - "bc1ph33tcd090lp8jewtvcm5fmsxtlmyat6348gxn4seqsv7x9f25cjq6q5wl3", - "bc1p7wrh3u7wca207h73ulsc3cryfrtweq39mcemv9eqe60aycuvgzqqc6t2nf", - "bc1pv0m9cgqfdn7dr2mxm8tjrtrktl0y9mexm5ht5fhw63zfwdeytekszq2dq6", - "bc1pewmpcqqkh395cyauh8ru63vuccmjmx8t6ycqxyw64x6m9nh4pcssvyy9ye", - "bc1pnnvvrh679gmtu6t6hquv38ggt77a5n73tsgrhgw5gmn3gfde2ghsxhc9xh", - "bc1pd7duytfvj6zwt9tpa7jhec4r3t52m58smpjeky77euwj7c5fae6sny2884", - "bc1pl0a7w4ur0tl7malmnfj6srkpw8wppgv6kjzyl8l5pcx9rpunevzsvmpg0d", - "bc1pa70lqkqj5glje4gkg69qtj3e942qfhggsc8vhw5g8m909clulpkqsuk07u", - "bc1pk73dvprlzs0x0pyfp6r2t8f6568fxrkxtqepcxvpkad9cpvcch3szp53wv", - "bc1pvldzuh34hxkk5sw3y5rw7ve6gxtz89dvtf3qkqu95xzctjyz3qgq88wvu3", - "bc1p0q9lekppxfn66zprsxpdg5xue3uatlxtqzml02tvf8lfvnl75wsqgc5cn4", - "bc1p9vz6sl92c865lu7tnwnejwnxs079y7zmgkmrv8vyghgcjllvvuuq0789c0", - "bc1puehc82w2md74p0eg2dvx8mcx4sd782c5thrkyk5w84kycpdm7rsq4r4r6c", - "bc1prvrrs6cs8alvafkdfysznksjdv5vme0hgtla2tx4ezckm4sy2hzspuqfl3", - "bc1pk55km75vw5r3mx9th8zp9p7zxa28vs0dzzhuq497zzm99jvr2shq8kxfla", - "bc1p9d08nnfm0q6r8zukyu4a0tvvdcp3tmknlqc78pht3u7fjwdqhgdstmrx52", - "bc1pj9ek8fnqfkwc9ah99znd72knk99xuekqd6zkvv2l3p3excjx0jrs6npsrn", - "bc1pmg5c7vc6adgm0fq3te09523tmwagjrng0v3yccg3ee6q695c3nvqg2qf7s", - "bc1pvw2g4krfm3mpa5wx3sthgap0defl6qfa349v7234myk875xt2xxs9xrzmj", - "bc1pjuklzs7ussnxz3qfc6kgu4587arhm0ptcf0kh0060zdxhj0az5es9hvppz", - "bc1p07d9c4s9vsrtdxs0aq86wdre8srwj7e508tg6tlldz8gjwcjel6q8nvv4l", - "bc1p5tm7qya2khm28axvf4krdj4cgu4g2wmta7qynwfqurp2dthsw07qs3hy2h", - "bc1p2g9pyj3k050cl5spnneh4nhevyr4s0dv5m9kun98ck4tsnvzmyqspzza8n", - "bc1p4uw0maju8c9ksvz0pkgmu44v6u57wuuqwl3xl2n3zf57gylm3nzsawjtd0", - "bc1pehknsp2z2hak5w2pflwr2emc5mllp7pfevma2dm5fgygun53fqpquupau7", - "bc1pck93p7n326nywfwp738wel3w2kfd3s3unkq8tcmwh7ypvyznf7hqg2qxq6", - "bc1pnt58rela5hqee23zzf8plafvds9gvfkdsfsd29ss5a5y845rngcqdagq3j", - "bc1pmuxrykdzeyzaakctfu9ucyc96ur746e2kgv4me9knfwksu5hhftqf5cgef", - "bc1ptkk54l6jvn8qkawe9vd2tede43a4j0ya3tjhrh8qptvc7h5e2tfqf2mh90", - "bc1pcek3hvv6epanzjfwfnvtf644xtcgl3n684w4u5z2fal39jmq5qaq92nl2c", - "bc1pxygckyv87mnjdlrkzsyfspv0e6f5u3nwqcuae6y8uj03gwxd67jqekq8qc", - "bc1pwympfn06646h8afccnaqlz5wthyh8yvtvvpjhd6kjp3md6g42juquf2tw8", - "bc1pvz0gh6aj0ce83naps4z2prws43vh7fmm2p5c68vg07mz2h2m6dks6wrvxl", - "bc1ps3ugalw0vsyd2uvpjk7p3hpc9excy9297tqcvhw0n5kyzq4y76pqcc5qk7", - "bc1p30zwqwwennl6ehjt74ltk07rcszj4cn8z7d25zgl6jflceq0lz6q2g3ke5", - "bc1p9hcllk4llxmxyjnvdfxvysaq7sf2a63xv6ka2rp0svh7vwgqagrsjx4zvy", - "bc1pcvn0w9zspu6k3uhz7hw2w95cnqzjf7shn7d9gml3xv5kxr34k5ssq58tq5", - "bc1pl630w2gvyg2uy9he0a50zt9xcclujw5z33p7rymf2pxaq2r7ejpqdcsl42", - "bc1pf6pu3qejwyn3078zaaqdancanxtd6pxpl7kdnhkv38c2645yf3nsf6a523", - "bc1pl9eymzxt2utgdz6myzhpn3u3tnr33vj9peqnnx6y3l45mv0yjj5q8mf920", - "bc1p3jc7754zey86m9kzy4cfhnszuvvugxqsjcl4gmulk9yyp0kahltsclkdse", - "bc1par4grydfw7wc3ya5tt2qm8kllpt7ry9s2a09663nn06rgll06d0q8a8pxk", - "bc1pp4ydvnjgx3ux6f5h8ka7kjn4yczcpgnsdjj3k9hl5lkmxj9pn0jqt396nf", - "bc1p9p2e0z6rgd9auzh8ekjzssmm47ayvfkmxv0maj3cvkwxslaqvugs974zqd", - "bc1p2edlq7kp2n4366sv6ht7hyvt8u3a95wcvhtfngdcfwa3uvlqfj8qql2x6c", - "bc1p5p0pqxlhytwjw8lh74cfft4ghqem89a7eeatd84w30ftxcnd0cusmf8v56", - "bc1pmz3sw5eg5huadn3f8whv9nx9xh3l77as6uamwr9prhtkqney6ktq4scetx", - "bc1pxfmff33l7r0fdj9rqaupd7zj3467jqphypcl897gctxfgqdvzk0qqumt9h", - "bc1pxzxgjzzexmjx00s43ep0edekdw3pnzc2dvvk6e406dlw3jllkkss5rreck", - "bc1phs4atemm3d3dde6sjvfx4vgpgd2tscpmgzjtkrj3j2rdtrhavjnsu6k846", - "bc1p2pluk4sv2sv27vkgwxj7fy3qa6gf6l99kz0cd95l9yx0lwl0nlvshxv948", - "bc1puajavrh2ekn08fu9fnrk5h88r6uta6m979aqc968pcnm3yu562ys5p2hae", - "bc1pydt2msau7572f2hf5xhtqnl4ecn4kznt7qhhh4l08pp73lkqfmfq54ypv8", - "bc1ppl0t9n05n4yr9z2mz8vzrn9cv36reydfkvx3kg385new6u5a8kvqmhcczg", - "bc1pvrkmvjr8el6p3vknnqkfmf3tz6eglumw2erhsq0aczwwaxtt6gpstf9nsw", - "bc1pdkjk5nke2f42kz5ykv78tfzedfq0zdwnd7pldzsmfenkhchzrw6qsp9g57", - "bc1pnfupzkf2r8shk4m434glpj8gqq0p9wf0u8t2htg5g3wy6ja7804sxjsqhh", - "bc1pjll4p5j50cnmcnl0cartgnykp52wuga3cdhphuvsatypvt2e2prs5qad65", - "bc1pcvd3pe6nt4n2squcqjdev8yhuj3j39rqk0jqx2uyddxdlcht0vxqzgnxtn", - "bc1p9l2jsgy87qvzvu3q22pt3e5ytxqyyd0hd0a0j8vcwyq7lsxxquzq8f8p3k", - "bc1pk9gy3kmc3w7px239rf53cu7k500lew93nzpxfklf30neth5v6kaquctyxe", - "bc1pr454sg3v0une3a5g7dwzmxg42qgkz0rq4c8wwcphlkzttpaya9rs0jnx5l", - "bc1pawpxtxw9g4kr54r5cgy2dqvujgdg8gv8dmde5a4mcm0ntg60g42qam9fvk", - "bc1phacews2qlyku2sp0mf60vz6u7mzel7q02r82jwar9ert5zf80daqlpntzt", - "bc1px90ckjxah6dpg9k7vrz9x2thdp052ycfh3sjftq62wxe2jmr4zwslldz92", - "bc1p3cf92v3mk3er9e5neyq8744fv66wl08vh6n3dx9377chpeap4sqsl9u3ul", - "bc1pdgp37ezm23g6ym8gkd2yjkvnk8fppcmuffyrl7c40cn0tfd70ngq35l9pu", - "bc1p9l36rygkyuycc8cz4a3cx3fs90tj2ys4m85qzw034wzepu2jmnjskgdh3u", - "bc1pqmv6dewyjkrx4w9hmn9m2vvgyueuzwz79ral9gpy37t0s5zw0m3q8g6694", - "bc1pxyyktnkelkt6lexn2uhayga9va806dtlux2edmzf7xlr330pvmzqjqde57", - "bc1puaszlnemrsaf8xyz2wkgxyu0s2y2tr7mjh2h3u6zzjkcafzkqhss572g45", - "bc1pl7tqaj2valpt6f880n6rcmcrcf0wfsz5vxy56e0wt0pf0nvh45jq3wcqnp", - "bc1p4lvmy85sty7s6gpvfcygnd39tnuxuma9j3pxgmp226rkjazlyk7qcg3833", - "bc1p38ku34pghvcjtfw4adphaydp7g5z6shn7mnu86sym5gchq2q9psqd22vsd", - "bc1pzpkulyrj3v0jhdsgmra57faq6pfaywspyuhu8ea6v5jcnrtvzwesgtzlg2", - "bc1pnaw3qxvn05w7jgls5ayjynatrhm5e7fs0lkrxydf7u9ea060l6esu3k09r", - "bc1pvmps6ajryz2n25yklj6y4z607a36zt3d30eqfqk0ahwj3l0ydyhs3qrmez", - "bc1pk88wrg4y83x08q4nuxercqhmvmlqx6t5ff7wmh6fum704k4lakzq3m3885", - "bc1pq4gz0a48f87g5hjav495zgal4a5uqplvffvf2we64jr6ym63dgusxaeh3s", - "bc1pcl348806j8cca5zp9pgs9qzugghg63pwy43nz8nyqj9kg9kmd8esnjad73", - "bc1p8ye2xe6dnmdywusqasp4ywr8ym84vkm9yse2sa8rjkpygwxvg6dq9c0vks", - "bc1p6csxty9fdr8rap46fpact4rzgjtz6uk856ml2dwtclh5exxwm5mqug8hst", - "bc1pdzrmfqtx5dyzvhqmkptrjuqfersgqrujt9mwkqx4nw4lxttcy5dqwytgsg", - "bc1p8ep8cv85j74wm76uwu76duyuf8hnppy5ky3u5wlt7tgtzufunc9qdw94nv", - "bc1pc8qwcvrjq45q9k7l94863v3ks5l5x0qt00v5au9l505s7w5xmursqd4ggu", - "bc1p89ecwchwc3l8fhe0uv7tw89nvvghfux8qsavzvhtrlvpzd40fdaq9rr30y", - "bc1psr4mlf3hlqum3s39jwrxs2y7kzaw22xd0dnqdqj70cs3vjs49x5skkslxy", - "bc1p6wkjav4tm6ty44gk7g5c4jtganfzsmwgkz8fh0l3q3k57pk8m4wsnjsxgr", - "bc1pxq06rlfrn7nly7smx2933nde88c5jpqqpyjtyzk7qgu9huarp4uq4kphnq", - "bc1p58zp732fzr8snvcdd9vp97e4skhu5qepv9n7wy359aacy0v62kxq7jntjh", - "bc1pc8dv6xj8j6g468jjhg04g0qpgma2xps8vm8ez9ag2a9jqwh5cnmsym7v2f", - "bc1pfpmktvhxm4mu2kxj4a3tpm2zac373jmdzqttej4v6m5fg377f88sulpy3l", - "bc1pc080a43wa2v6x6zh3xygzezhkjm72klhq06q5rfpg4ytxffv4zfswexqrw", - "bc1pwu7lcx2kwn7e7h9ym3508x6vtn5dq2hest3rl7x2yuj02p7y727sf2s2cr", - "bc1pxlt7kfzjwxvuzslrdld80wxarzdh8mscyffyd7xukg2pmrt94r2ssetj98", - "bc1pyvh5s0xc09zqfwzr5rn05wtkry73z8u2vs84sghykmvphrncqlgshpzgpm", - "bc1p4g048x2lq8ee299hz7ycqe6v7cwx7q44vzvv8mcmwnpvnpj8wepsnk9hx5", - "bc1pkjlqxz646fwp8hf2szkt39tc65yk464rpmm2lxh867l2h87a3d2scysfps", - "bc1pef86c92xejfdtk2m4pjfp0dkwl47y4rtpdvsyuwz79f78jqqlx8q2lnlxn", - "bc1p5k7ly2uv9juylgkplw7djs7wm2elpurtjnvqm3cgurgf87fpvsdskwyrhp", - "bc1p5s0jh846uvalcdzkscmrxyun9gccrj75fusu9z4qyyuun0knt3usc4eyuk", - "bc1pr99selhwqstllqejdpaje89na52fvf2w26zx6mfye9xlc0z9deeqvlltyr", - "bc1pkxw6tzx6mcy5xu6sy94z84aau0txcdxt8r8cjvd7qmv9rpwpsgwsredrzu", - "bc1pqy8jvlvxkvpwnft73rsnu0kvgxmyray4w40dhs3y4s8qhgr0a0ps2n2d6u", - "bc1p8euq068jt0mclt7flwccw2smvhy308dtasslhseqdqf60wn8qadsg3a80n", - "bc1pf4q0xpnq4hmu7vzd4fupkm6tcv3kh8nzsxn59xt9s2u94e9egt4sy8u78u", - "bc1pv2j9ux98stf3m4jsfrm77qlnz96utfrl26lwtvpezkd4grl7ra5qe5jemp", - "bc1p7k9qxqwjhpcjdsqhddc95zqxmzqjkum6l97y02u6egezjwm623esadms82", - "bc1pdvjhar0a22snhgna2eaezdmd04us0as27n38xtesl6m64wz9u5zsc69gwd", - "bc1puq9gz8mx27n03pvpx7vfdv858vmqjvjtn2rh84ra8ucgq4w8p7uq3l5rxn", - "bc1pphngy0alt5l7sp5x7l4ezptgsyyu3jfkzdhjrzcce78g8zpnyvfquwqymf", - "bc1pm50m5yrxu2l02hrqxvh63uwq2j9ugc448m7py6fq9aq6ch7ktnmsclzlr4", - "bc1pgh0hq30rrj78fsszyf0lzft32yqfyh5upyf5vtr8d4gzhm7c7yvqc86xtq", - "bc1pnxalqyjl0g0wzq4vlgrf0udze6dskxygclunpr9g6z7vyhe9t5sss4lchq", - "bc1p4e2q784fape0mpeqerlrljxkvnqp9pysup97jzyjme0wllr5mrjslsvyc6", - "bc1p9fryzkss54hgsxcqvg39nk96v3rff524pqljr3uavmk3qlcul8wq72yypx", - "bc1pt35yskac793umz30hgvsgt3yeqv6rnman0wkt2usxh9t03n35lgqstam8c", - "bc1pwrvyzhspghger2sen48468nv77kqk6xxh4zrput2r4pqu6guhu8sfz2r2z", - "bc1px7yhlzvdc3w2en8tfh9k07mykx0dxj0yf98p436hc99g8utw3jfsvph0cr", - "bc1pzht80r9lwx0s2ptkky0ehjc8ka904s3sm57v076ua79n4z9tt4kqyz8k3a", - "bc1p3063wsrtg3wjp99sqgxv5e227q4fnjf8jhw30pc6fxnjr9f30mgqsme03v", - "bc1pje7mwjahhahncle3nv7k420jwrzsqcp5g7djqn6cw9pdkutawq6qp8wvej", - "bc1p56a9z8q47reye75mmnsq8lzkqdy3s3lhscyj26p56jx0h08z35uspt3lec", - "bc1p0xpm92l6fkmpwyjne75j4mc6at8lwcl9zm7lltvwjeqgfn9wn45s59xdya", - "bc1pmez9t0gjnel936j906jn8xyzu48qs2ahn9naeepwfgdkzgknqttsj397mm", - "bc1p7zgrvj9nc0kha2s97mayakawt7mf6vpwdztvjuyn48uqztx08ztsqtf6gh", - "bc1pw3h7rf6kal83kllgly4va5mr9m6hxn5hlpv32kw40h96vdgamhaq885ghf", - "bc1pmq8mp9pmpg4wmqpgzsenup4ww6naxyz623vz6kdjhv2dz79hg29srmw72w", - "bc1p70f8ahjneqxteh8exw3yj6rr37kg8xvmxe6lpmgvu8hn4mjdr4jqu5ht9a", - "bc1plw0pqd8d7l7j5fe4urrslg6v0z0nxvp6mzevwja4n0ypy6vxpzvsekm0ww", - "bc1p5vu5tp08graghe64upsmv400e6upszyumgkjas2x6g9ap2syy4zskwt2p4", - "bc1p5jnm3ee2fa3u8wrazjt80fveq2p33par30cxgcyk6cljkvutkdmsn4uujv", - "bc1pu7jlsgcyula76ypppuh5ntnenjmgwvggny7veeuseudfugdjlfkq6hs9s2", - "bc1ptpvcx3nw2z2c2se9txlp63pkljnxa2jtxe5tsgg7m4m95v93zhqqu7d0de", - "bc1paz5xp5f3egl0nt3tfc0zs3ztklc64xpy675hwpvdqp9zdfl2cp5sz2ys2a", - "bc1plc28erjndsxt6dnxfukywtleh5cjynhr0n5zh27p2877lmmxadms4qad9v", - "bc1p86tmgvpwxa7hue5csl30kqsnxunl5q2z9fy90pzlwfhty0msatcqnpw2f8", - "bc1p7wwscaz7akl6d27pnewz8fyvql24wsmhfek388hm45q2znn4ujxq82lddq", - "bc1pj8kzard8772xnu3xjz83nvcstmj7dk3ecxl603xdq6k00vtcuqfqrtunew", - "bc1pdff9cvc7pkpv60wmc5zrz62n4a2zcys87mn05tzd25q07qlvap5smw6d6w", - "bc1ptj0snq7agjn5deztz0tyf9se5atwpvgpqd82s9w78yvlh0sdhj0qd7efvz", - "bc1py9eauy4u50huc65p66mwzuhmvfspe0y3nv4ftgafqne3mmx4k34sspse6g", - "bc1pyj8fspeycdeftj3juulrf58q6lwwrnd4e0lrd30kmp0tpy7v8tssgytp7g", - "bc1pz08du2wm9c3wv54sgpnnx9sx2kjaf389h9a5tksjj96leym3hzssn3z83y", - "bc1pk8ekkhzs4xqr3yqj82968n345udkp9hcvtnlks2me2zgle3gucwqr2294a", - "bc1pprwzeaka5jcpxfm52waq4pjjc57kujvjupqh5r6fp8hslgsyp9pswryn2f", - "bc1pv25gprlgqgpthc4ju8fgtxasykergfrwg9wwz0zvmz9nsxs4sy9ssjvc2v", - "bc1pay457qu38efn49fhsc23c0cwvcdseks5hg246pfcjuy00cukh04qrk4cdw", - "bc1pfl43umqf5d49t2xpsy844dwu7p8gx2305pzqqsz7ge50zwmgsjfsg4gx0v", - "bc1pg83zayhfw8sjptumamyhjx9k0wg8extex0229q4fzpc9flgkwnks2qm3tt", - "bc1pj46szksxvqtvncs2je4a8yttfg9v9kw9cx9f75cpvmwfffjp2k5sf47mhc", - "bc1p2n5xmw3dqegddxxalkds2uthyrtd0rcgxdm95nxshdfu0g0v902q96ckw7", - "bc1pmnuuj36y4q9q5xw4xcwgmg9nyd6xwhfwqcdlxgrhrluud6gy0wpq7styfn", - "bc1pewf5fentnyep78sanwx048mkrfxgak45pj2s5yxnam5ynjlvnrlq4yw96s", - "bc1p4xu60lwr9egm36m0emhrptszly3kvgg6frwhypvengk4srm3jykqggp22r", - "bc1p3222shmjmswqw6ht4s58ady8rcxvql6lp4smqa42vrpug4n09c7sfv8kev", - "bc1pkr4z57cylug0he37dv2a53jquhdl5wf4qtx59p4sv07lpka7gans4wt5me", - "bc1pe4t6rymv4wwayyadkk6e5gluedj2c0fc3dskfy2c6nr796mf3uuskrxfzk", - "bc1p6sxed5g3w7dyxdlgr83w7g2ez40pfjrg96fghr0230fqv6j3uadsjx3msw", - "bc1p9z3xv54rfc949sdmdsw9qey7dwkt4qx993kzlquykrpvwps7fxns6gu5w2", - "bc1prpeywds8hgjcnqsc75n67mz6e2u38j9sgvpsny9t7e59ucye9c9q653k4r", - "bc1pdzyq9ruq7he5dgxspz77qvtw2ex2r8sfmnuzpmrrzph82v36m6tsa74dax", - "bc1pt97jmv4ay3avd6ae2xkshqkkg7c6ge5uktrktvllfs2seywnze0q4nm2t4", - "bc1p86749g86f4f6266cyul7hx9uu3jp9p7q7gpsuljdlaz772agtppqsa8cx3", - "bc1pavkuk90hct0erezjqm4ekxcwhjq3prn9dax82z2nuwmvwvds06tqevfuu2", - "bc1pm5jndljfkzlt43mensfqwqfrpmatytw867w3pq66re8vtewrtnysnrmcsj", - "bc1p64zpm66cj3y9j4nhjkvkrzepredsx64998atuh0u4h0gsxdmp2msny9wph", - "bc1pwuudp4mhw26r33sx88jyc43rkcg3gmep7uun9hpcnvqwdv6a5qnswdjyst", - "bc1p5drl2h2scrc0qep4trruj9kl2cfv3l7mkcgqrffp40zelf22kmxs5sa6ws", - "bc1pppmmvdqq0rspdx2ghx2aa94jugu65pqy0jvx0hqcvrujdtyxkkjsy7cna7", - "bc1p346s5frtkmd0eym3469y5mh3xu545uyqjflrr83ecyehyjqf754sflf20a", - "bc1pw0enq4hcpdfmnwtta7p6dpqr2lepqpkulapdw3zah8k5lzymhqgs5wt90a", - "bc1p08ykvs828ecrc5lqadgala5u3wme3fhyltt397mtvrglnsgfs9lq3tu43u", - "bc1p2wsj9v8ls98a4wm94nvcf44gv60vlzshz4myawukcppwc0laafhspnhk6v", - "bc1phfc6ynt5vhkw64q48lk3ux5lskxe3ffh9qdkarpf3dtt8p94tl5s0nwk7q", - "bc1paer03efptfl9cze78m58uqc2eak7zzd34fxj8rupd2ndce65z0kq3sumhq", - "bc1phtzvd6gp2yqyrk9eg3zeds0rvsw4cw49wjculguferfvd96l8vkqmhef8n", - "bc1plkyvaldx8gqvgsff0492qqzwk47fmzrmz6yjxk2xfknjxc4ml76qgyhh6e", - "bc1p34ase5s40c5srwsqf00rdpst8q9r5rqt6vkgwghsy3ne8cv06cgqajd7tz", - "bc1p6ugrk5yp3r7hsm8n6yq3clz9gfjc9qftlr9sujewsefez3xhggnqqc7l9w", - "bc1p2p9z459mgqhyh9mlxg6ywvtj3upd7r8zuek8vajqkyy6l7v6c2uq7dpn7h", - "bc1p6vlg3gx7y8u4s7mrmfj5nh7n7cpjdawmmufsg8az9h2pg2g04s8s6cjxs0", - "bc1pp028fqpfmvxhrs4eqphtgfv03lsm8dv6rke4gldq7ajxtzvjtnuq7npr0l", - "bc1p8vvk8wtxnwxy9zf62sy0qyr0xcusdmsjr5p9q98s2hrupm2xl8sqymchyj", - "bc1pm58mquzf82uzyn2pzvwfgc84r5rjndzzrss7vp86ay5wu4m8jk5stqsr5v", - "bc1pflq0ar28n8ejqm5v7jdcjhktg3ruecmd28gutexk7w3tc5fpvj7q5syhf0", - "bc1p8zkwx8j4pmjkaclntgtnd73c69a5fwg4nnz09lyeea9hvc8ddl8ql25e0g", - "bc1p632v0mpg28k8vwtpxt5exnthpuy8eytee8psqln2e0knvlayrp4qwtr59c", - "bc1pvd4d9w0zcdtpxjq9qmpwwxwe6ykknxa0kzs7ghd4dnj6lu8g49lq9eflkz", - "bc1p9pfwt90yhwd3y5x0xxmvq3vsaj428e32m0ysqev9l0lj7dyxtyyscsxka5", - "bc1pnvh4uttp5yxuya8ejnse3q76jkkjwueflx8yqdzwd8x2e64r3wxq262e37", - "bc1pqy9jyccwtdtqlvn26ytue00e4h4sss57q8phcjhjc7fcp4hgrzrsy93608", - "bc1pxvu4jung59k60sdnmdyh2sjlttcch9yhpfwnk00fx4ypj7wrcxgq86hvyf", - "bc1p4g3rtktdg79v52f0nvd46d89hvhya7w6nnsd4yl3fxkqu7pppp2szuvs5d", - "bc1pfmzsmz7upskgqt7y8nw2ye24usdlsdk7k3p2h379utyzhtc4l9nqeekq9j", - "bc1p84vmwr8hr6sztyevultuk2l6f636xnmvvfs36p0n6zhe28dxgumsv8mt3d", - "bc1pchwl8zamdg0k7ry27rgm8uqrdvj26qy70qj42dqfrzffzaq7dlvsazm3qr", - "bc1pdzvncggcya7ucs69e6s9m3x2l09vylkgk38gjnjxh9edht5j399s92hmhz", - "bc1ppzegrns4p3cq2snyhlyzz3ny0ctddmavrrpvmjlp6kpf4we6nyvs3nqknn", - "bc1phqprypjx2xxqdmgvelu96ch3lvshs7k6rxxa25x0h0n8a0kj42hsa7jprx", - "bc1pmw9d73029ynlcgp77mwazea0986xkjqdalja7u966c3jrefh7meq2cf7dn", - "bc1prery9n34mf9535y26hmvw59jj8qe6qnp606yrh5z49rv5t3u5ltsunwzxk", - "bc1puet7z7etlw96fs3ynjx3mv6xwkf3egt7z2tmqvgx3sd76h7cfkxsumrhdl", - "bc1py7gx3xfyld4arsnpnxzv8w0jx8gf70xpc9wljnpe8vxhawt2rjwqjt0zpu" - ] -} \ No newline at end of file diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 5c5411e480..611daf9347 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -1,11 +1,19 @@ -const { cexExports } = require('../helper/cex') -const bitcoinOwners = require('./bitcoin.json') +const { getConfig } = require('../helper/cache'); +const { sumTokens } = require('../helper/chain/bitcoin'); -const config = { - bitcoin: { - owners: [].concat(bitcoinOwners.core, bitcoinOwners.bbn), - } +const bitcoinOwnersUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/refs/heads/main/bitcoin.json'; + +async function tvl() { + let bitcoinOwners = (await getConfig('solv-protocol/solv-btc-lst', bitcoinOwnersUrl)); + + const owners = [].concat(bitcoinOwners.core, bitcoinOwners.bbn); + + return sumTokens({ owners }) } -module.exports = cexExports(config) -module.exports.methodology = 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.' \ No newline at end of file +module.exports = { + methodology: 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.', + bitcoin: { + tvl + } +} \ No newline at end of file diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index 6feca88cd8..bc9a7ef53c 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -1,16 +1,17 @@ const { getConfig } = require("../helper/cache"); const { sumTokens2, } = require("../helper/unwrapLPs"); -const { sumTokensExport, } = require('../helper/sumTokens'); +const { sumTokens } = require("../helper/chain/bitcoin"); const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; -const bitcionOwners = [ - 'bc1pjrxeuc9f3zqtx92s3mnf6202894jzufswur957l6s04rjns6dumsyh6u89', - 'bc1qdpwl80flfh3k6h6sumzwgws3ephkrmx307hk64', - 'bc1q5pzsptd5whcljevzyztavuqru0hugd5ymgx5ezksdqug3ztrjvmqauys2q', - 'bc1q437jw8wqph854vf9dwxy4c2u6daveupjm5dqptj469gxw6vcpp0qfpr0mh', - 'bc1q47ur7u0xh943s44kktvhr602sm29exylzn43ru' -] +async function bitcoinTvl(api) { + let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); + if (!solvbtc[api.chain]) { + return; + } + + return sumTokens({ owners: solvbtc[api.chain] }) +} async function tvl(api) { let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); @@ -38,7 +39,7 @@ async function otherDeposit(api, solvbtc) { ['bitcoin', 'ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin', 'avax', 'bob'].forEach(chain => { if (chain == 'bitcoin') { module.exports[chain] = { - tvl: sumTokensExport({ owners: bitcionOwners }), + tvl: bitcoinTvl, } } else { module.exports[chain] = { From 3943d9a1fdbd0685bb5d37c8574fa11186d2ccf4 Mon Sep 17 00:00:00 2001 From: shapeshed Date: Mon, 14 Oct 2024 22:28:02 +0100 Subject: [PATCH 0671/1768] Add Margined Protocol Vaults (#11909) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/cosmos.js | 3 +- projects/margined-protocol/index.js | 51 ++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index a5aaa88520..404411154b 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -189,7 +189,8 @@ async function lpMinter({ token, block, chain } = {}) { return data.minter; } -async function queryContract({ contract, chain, data }) { +async function queryContract({ contract, chain, data, api }) { + if (api) chain = api.chain; if (typeof data !== "string") data = JSON.stringify(data); data = Buffer.from(data).toString("base64"); return ( diff --git a/projects/margined-protocol/index.js b/projects/margined-protocol/index.js index 6a796969dd..3fa68abb0e 100644 --- a/projects/margined-protocol/index.js +++ b/projects/margined-protocol/index.js @@ -1,19 +1,40 @@ -const { sumTokensExport} = require('../helper/sumTokens') -const contractAddresses = [ - 'osmo1rk4hregdr63rlqqj0k2rjzk6kz7w6v6tw8f5fqx2wg8203eam5equ67tdl', - 'osmo1zttzenjrnfr8tgrsfyu8kw0eshd8mas7yky43jjtactkhvmtkg2qz769y2', - 'osmo18pfsg9n2kn6epty7uhur7vxfszadvflx6f66569ejc469k8p64pqrve3yz', -] +const { queryContract } = require('../helper/chain/cosmos') + +const osmosisVaults = { + stOSMO: "osmo16s3sxs5886p42kteunp6370pken2n5ukzszz0trkr39epqtawn2qk4r9l5", + stTIA: "osmo1q3w9kedgtc8sdh7xlcr77ydv3qu7fs2e3q6xznysp2lrdfyz9xyqv26yqv", + ampOSMO: "osmo1cztgw4e467vjljd0s2flz8asu3x3wg9q0ttga9t6kzmpyaauxxrs2gjshq", + bOSMO: "osmo159f7axyc32cyfgzx0gs9r98jwpgutj5qz4ns97xvu7nw3xzpavzsg2uxr3", + qOSMO: "osmo18vk0rsu4qwzx74g9alu2f7x5zs99sluwkuh5wp70yed2ne4pmutqf9lvdu", + usdcaxlGrid: "osmo1qngwlgzt0r3fdg6zgln5wa6mr5c7t6fek3qqgxesujjak5ds747sy6qu2f", + // usdtGrid: "osmo1cj8tzmvun6urr0djrax7v92jyk86gnp8hsep0hacf83quvknq5lsutucjj", + OSMORedemption: "osmo15fqmdl8lfl9h0qflljd63ufw9j2m7xmsk3hu5vsn8xpta4hk5chqt7mddc", + TIARedemption: "osmo1reyz7pwu7y9e7lmzqg6j4h7jcv32du7n7jhnk2lz93a9lxr56ess2qtgzl", + ATOMRedemption: "osmo1hvl5kj4xzdj4udxjv2dzk2zfqhzkd9afqygwq3t84tn53e0250zqrltj48", +} + +const neutronVaults = { + ATOMFund: "neutron1puedrclm6rn33x3zv66xg6m23qcdagayqua6jj2wqzvfznlqef8qe53wr2", + NTRNStructured: "neutron13h4jzme5880knnc23xvwu9gytynnxu5cc0fek6fndmjyctzznj9sd5yhhy", +} + +const config = { + osmosis: osmosisVaults, + neutron: neutronVaults, +} module.exports = { - methodology: 'Total collateral held on power perpetual contracts', - osmosis: { - tvl: sumTokensExport({ owners: contractAddresses}), - }, - hallmarks:[ - [Math.floor(new Date('2023-11-06') / 1e3), 'sqOSMO contract deployed'], - [Math.floor(new Date('2023-11-21') / 1e3), 'sqATOM contract deployed'], - [Math.floor(new Date('2024-01-19') / 1e3), 'sqTIA contract deployed'], - ] + methodology: 'Total TVL on vaults', +} + +Object.keys(config).forEach(chain => module.exports[chain] = { tvl }) + +async function tvl(api) { + const vaults = config[api.chain] + for (const contract of Object.values(vaults)) { + let vaultInfo = await queryContract({ contract, api, data: { 'info': {} }, }); + let totalAssets = await queryContract({ contract, api, data: { 'total_assets': {} }, }); + api.add(vaultInfo.base_token, totalAssets); + } } From c5f82becd4abc7ea517bff38633d442b3b26a2e8 Mon Sep 17 00:00:00 2001 From: Valdislav Dihtiarenko <66130898+Digtyarenk0@users.noreply.github.com> Date: Mon, 14 Oct 2024 23:48:33 +0200 Subject: [PATCH 0672/1768] UPD/PRIM: Add new tokens and buckets factoryv2 (#11905) Co-authored-by: Eugene Mormul --- projects/primex-finance/index.js | 62 +++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/projects/primex-finance/index.js b/projects/primex-finance/index.js index 78d3fb750c..d8e2ae8568 100644 --- a/projects/primex-finance/index.js +++ b/projects/primex-finance/index.js @@ -5,6 +5,7 @@ const { abi } = require('./abi') const config = { polygon: { bucketsFactory: '0x7E6915D307F434E4171cCee90e180f5021c60089', + bucketsFactoryv2: '0x9649CfDCfAa9c80907e63dD9Cb161cBA2033F3A0', positionManager: '0x02bcaA4633E466d151b34112608f60A82a4F6035', traderBalanceVault: '0x0801896C67CF024606BcC92bd788d6Eb077CC74F', defaultTokens: { @@ -21,7 +22,7 @@ const config = { EPMX: "0xDc6D1bd104E1efa4A1bf0BBCf6E0BD093614E31A", OM: "0xc3ec80343d2bae2f8e680fdadde7c17e71e114ea", SAND: "0xbbba073c31bf03b8acf7c28ef0738decf3695683", - QUICK: ADDRESSES.polygon.QUICK, + QUICK: "0xb5c064f955d8e7f38fe0460c556a72987494ee17", UNI: "0xb33eaad8d922b1083446dc23f610c2567fb5180f", MANA: "0xa1c57f48f0deb89f569dfbe6e2b7f46d33606fd4", BAL: "0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3", @@ -30,7 +31,13 @@ const config = { GHST: "0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7", AVAX: "0x2c89bbc92bd86f8075d1decc58c7f4e0107f286b", CRV: "0x172370d5cd63279efa6d502dab29171933a610af", - SUSHI: "0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a" + SUSHI: "0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a", + SOL: "0x7dff46370e9ea5f0bad3c4e29711ad50062ea7a4", + PAXG: "0x553d3d295e0f695b9228246232edf400ed3560b5", + WSTETH: "0x03b54a6e9a984069379fae1a4fc4dbae93b3bccd", + LDO: "0xC3C7d422809852031b44ab29EEC9F1EfF2A58756", + FRAX: "0x45c32fa6df82ead1e2ef74d17b76547eddfaff89", + FXS: "0x1a3acf6d19267e2d3e7f898f42803e90c9219062" }, aaveTokens: { [ADDRESSES.polygon.WETH_1]: "0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8", @@ -42,6 +49,7 @@ const config = { }, arbitrum: { bucketsFactory: '0x4e6f7372bCE4083c779c17B240A94dc2EA57AE67', + bucketsFactoryv2: '0xB4d3A9f10D3D687FaF3b05b9aa3054856A1d7be8', positionManager: '0x86890E30cE9E1e13Db5560BbEb435c55567Af1cd', traderBalanceVault: '0xc08FFBBA8c5f42beb7e6dd29142cC61855a3076B', defaultTokens: { @@ -72,6 +80,20 @@ const config = { FXS: "0x9d2F299715D94d8A7E6F5eaa8E654E8c74a988A7", TIA: "0xD56734d7f9979dD94FAE3d67C7e928234e71cD4C", RPL: "0xB766039cc6DB368759C1E56B79AFfE831d0Cc507", + AAVE: "0xba5DdD1f9d7F570dc94a51479a000E3BCE967196", + WSTETH: "0x5979D7b546E38E414F7E9822514be443A4800529", + RETH: "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8", + WEETH: "0x35751007a407ca6feffe80b3cb397736d2cf4dbe", + ETHFI: "0x7189fb5B6504bbfF6a852B13B7B82a3c118fDc27", + EZETH: "0x2416092f143378750bb29b79eD961ab195CcEea5", + RSETH: "0x4186bfc76e2e237523cbc30fd220fe055156b41f", + USDE: "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", + CBETH: "0x1debd73e752beaf79865fd6446b0c970eae7732f", + USDY: "0x35e050d3C0eC2d29D269a8EcEa763a183bDF9A9D", + TBTC: "0x6c84a8f1c29108f47a79964b5fe888d4f4d0de40", + FRAX: "0x17fc002b466eec40dae837fc4be5c67993ddbd6f", + FRXETH: "0x178412e79c25968a32e89b11f63b33f733770c2a", + SFRXETH: "0x95ab45875cffdba1e5f451b950bc2e42c0053f39" }, aaveTokens: { [ADDRESSES.arbitrum.DAI]: "0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE", @@ -84,6 +106,7 @@ const config = { }, ethereum: { bucketsFactory: '0x7dE8607157124c894Ba9F18dd6138B5E8AAd5890', + bucketsFactoryv2: '0x55120da310A0c5fd81Fd3bb8C177F6649bE30ACc', positionManager: '0x99d63fEA4b3Ef6ca77941df3C5740dAd1586f0B8', traderBalanceVault: '0x156e2fC8e1906507412BEeEB6640Bf999a1Ea76b', defaultTokens: { @@ -103,7 +126,30 @@ const config = { COMP: "0xc00e94cb662c3520282e6f5717214004a7f26888", CRV: ADDRESSES.ethereum.CRV, ['1INCH']: '0x111111111117dC0aa78b770fA6A738034120C302', - EPMX: "0xA533f744B179F2431f5395978e391107DC76e103" + EPMX: "0xA533f744B179F2431f5395978e391107DC76e103", + POL: "0x455e53cbb86018ac2b8092fdcd39d8444affc3f6", + PAXG: "0x45804880de22913dafe09f4980848ece6ecbaf78", + WSTETH: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", + RETH: "0xae78736cd615f374d3085123a210448e74fc6393", + SDAI: "0x83F20F44975D03b1b09e64809B757c47f942BEeA", + WEETH: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", + ETHFI: "0xfe0c30065b384f05761f15d0cc899d4f9f9cc0eb", + LDO: "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32", + EZETH: "0xbf5495efe5db9ce00f80364c8b423567e58d2110", + RSETH: "0xa1290d69c65a6fe4df752f95823fae25cb99e5a7", + RSWETH: "0xfae103dc9cf190ed75350761e95403b7b8afa6c0", + USDE: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3", + SUSDE: "0x9d39a5de30e57443bff2a8307a4256c8797a3497", + PUFETH: "0xd9a442856c234a39a81a089c06451ebaa4306a72", + CDETH: "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + USDP: "0x8e870d67f660d95d5be530380d0ec0bd388289e1", + PYUSD: "0x6c3ea9036406852006290770bedfcaba0e23a0e8", + ONDO: "0xfaba6f8e4a5e8ab82f62fe7c39859fa577269be3", + TBTC: "0x18084fba666a33d37592fa2633fd49a74dd93a88", + FRAX: "0x853d955acef822db058eb8505911ed77f175b99e", + FXS: "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", + FRXETH: "0x5e8422345238f34275888049021821e8e08caa1f", + SFRXETH: "0xac3e018457b222d93114458476f3e3416abbe38f" }, aaveTokens: { [ADDRESSES.ethereum.WETH]: "0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8", @@ -120,19 +166,25 @@ const config = { module.exports = {} Object.keys(config).forEach(chain => { - const { bucketsFactory, positionManager, traderBalanceVault, defaultTokens, aaveTokens } = config[chain] + const { bucketsFactory, bucketsFactoryv2, positionManager, traderBalanceVault, defaultTokens, aaveTokens } = config[chain] module.exports[chain] = { tvl: async (api) => { const buckets = await api.call({ target: bucketsFactory, abi: abi.allBuckets }) const borrowedTokensAddresses = await api.multiCall({ abi: abi.borrowedAsset, calls: buckets }) + const bucketsv2 = await api.call({ target: bucketsFactoryv2, abi: abi.allBuckets }) + const borrowedTokensAddressesv2 = await api.multiCall({ abi: abi.borrowedAsset, calls: bucketsv2 }) + const tokensAndOwnersBucketsv2 = bucketsv2.map((b, i) => [borrowedTokensAddressesv2[i], b]) + const aTokensAndOwnersBucketsv2 = bucketsv2.map((b, i) => [aaveTokens[borrowedTokensAddressesv2[i].toLowerCase()], b]).filter((p) => p[0]) + const tokensAndOwnersBuckets = buckets.map((b, i) => [borrowedTokensAddresses[i], b]) const aTokensAndOwnersBuckets = buckets.map((b, i) => [aaveTokens[borrowedTokensAddresses[i].toLowerCase()], b]).filter((p) => p[0]) + const tokensAndOwnersPM = Object.values(defaultTokens).map(t => [t, positionManager]) const tokensAndOwnersTBV = Object.values(defaultTokens).map(t => [t, traderBalanceVault]) - const tokensAndOwners = tokensAndOwnersBuckets.concat(aTokensAndOwnersBuckets, tokensAndOwnersPM, tokensAndOwnersTBV) + const tokensAndOwners = tokensAndOwnersBuckets.concat(tokensAndOwnersBucketsv2, aTokensAndOwnersBuckets, aTokensAndOwnersBucketsv2, tokensAndOwnersPM, tokensAndOwnersTBV) return sumTokens2({ api, tokensAndOwners }) } From 152109e4cc00a1edb34765ac8c600fc93fbb1cc3 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 15 Oct 2024 01:46:00 +0200 Subject: [PATCH 0673/1768] Feat: add m0 (#11811) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/m0/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/m0/index.js diff --git a/projects/m0/index.js b/projects/m0/index.js new file mode 100644 index 0000000000..3bb30964b3 --- /dev/null +++ b/projects/m0/index.js @@ -0,0 +1,18 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const ADDRESSES = require('../helper/coreAssets.json') + +const minterGateway = '0xf7f9638cb444d65e5a40bf5ff98ebe4ff319f04e' +const eventAbi = "event MinterActivated(address indexed minter, address indexed caller)" +const abi = 'function collateralOf(address minter_) view returns (uint240)' + +const tvl = async (api) => { + const logs = await getLogs2({ api, target: minterGateway, eventAbi, fromBlock: 19818447, extraKey: 'MinterActivated' }) + const minters = [...new Set(logs.map(log => log.minter))]; + const collateralOf = await api.multiCall({ target: minterGateway, calls: minters, abi }) + api.add(ADDRESSES.ethereum.USDC, collateralOf) +} + +module.exports = { + methodology: "TVL corresponds to the value minted by an institution by depositing short-term T-bills", + ethereum: { tvl } +} \ No newline at end of file From 96c0983fda570c68d18574cbdfa221161f61e2cd Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Tue, 15 Oct 2024 08:50:36 +0100 Subject: [PATCH 0674/1768] remove ref to fetch adapters --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ab14d8212a..a5021fe702 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Also, don't hesitate to send a message on [our discord](https://discord.defillam 1. PLEASE PLEASE **enable "Allow edits by maintainers" while putting up the PR.** 2. Once your adapter has been merged, it takes time to show on the UI. No need to notify us on Discord. -3. Sorry, We no longer accept fetch adapter for new projects (reason: https://github.com/DefiLlama/DefiLlama-Adapters/discussions/432), we prefer the tvl to be computed from blockchain data, if you have trouble with creating a the adapter, please hop onto our discord, we are happy to assist you. +3. TVL must be computed from blockchain data (reason: https://github.com/DefiLlama/DefiLlama-Adapters/discussions/432), if you have trouble with creating a the adapter, please hop onto our discord, we are happy to assist you. 4. **For updating listing info** It is a different repo, you can find your listing in this file: https://github.com/DefiLlama/defillama-server/blob/master/defi/src/protocols/data2.ts, you can edit it there and put up a PR 5. Do not edit/push `package-lock.json` file as part of your changes, we use lockfileVersion 2, and most use v1 and using that messes up our CI 6. No need to go to our discord and announce that you've created a PR, we monitor all PRs and will review it asap From 8045e9e8c5365d4b329cf38251eaca8831c8638d Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 15 Oct 2024 17:49:37 +0100 Subject: [PATCH 0675/1768] add scroll and kroma --- projects/logx-v2/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index 23f27b00ee..1553c15ad0 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -11,6 +11,8 @@ const config = { mode: ['0x4882520D47491561F51ea96aBC0397776Efc6cFd','0x8BF17893f08C570fBA78E9268d3aFc61f42557f1'], bob: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], sei: ['0xc010f83ae18dC5f40e888898F6605F075686432e','0x0B3b4FAFDe8baFde82C3BfD38538B7aEe4407498'], + scroll: ['0x1C70cc9F8236C4Ae2ce3d34d4Da4696Aea611f90','0xcfFe53CEd05A750Fa58304c11997a0335dE731b6'], + kroma: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'] } Object.keys(config).forEach(chain => { From fcc1055df9dae06e53b64e150ec8a49648e2d3f9 Mon Sep 17 00:00:00 2001 From: irlpotato <166589843+irlpotato@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:44:55 +0800 Subject: [PATCH 0676/1768] feat: add hallmark (#11922) --- projects/treehouse/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 0ef88333e0..138d9d45a8 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -46,7 +46,7 @@ async function tvl(api) { module.exports = { methodology: 'Token balance in vault and strategy contracts', start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM, - hallmarks: [[1727218691, "TVL Cap Raised"],], + hallmarks: [[1727218691, "TVL Cap Raise 1"],[1729045223, "TVL Cap Raise 2"]], ethereum: { tvl, } From 3b3b0a73a1bdef2810e6baaa9c99274a5f2da386 Mon Sep 17 00:00:00 2001 From: "Luren L." Date: Wed, 16 Oct 2024 01:45:42 -0400 Subject: [PATCH 0677/1768] add new configs to NAVI (#11919) --- projects/navi/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/navi/index.js b/projects/navi/index.js index e294e19212..d84d474699 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -9,6 +9,8 @@ const decimalShift = { ['0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN']: -1, // WBTC [ADDRESSES.sui.USDC_CIRCLE]: -3, // native USDC ['0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH']: -1, // native ETH + ['0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY']: -3, // USDY + ['0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a::fdusd::FDUSD']: -3, // FDUSD } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" From 7e1f34e4af70c958ce1c5025ab9e6d3b58400cdd Mon Sep 17 00:00:00 2001 From: noah-wasd3r Date: Wed, 16 Oct 2024 19:20:09 +0900 Subject: [PATCH 0678/1768] feat: add synstation tvl (#11923) --- projects/synstation/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/synstation/index.js diff --git a/projects/synstation/index.js b/projects/synstation/index.js new file mode 100644 index 0000000000..666e1c35bc --- /dev/null +++ b/projects/synstation/index.js @@ -0,0 +1,19 @@ +const { sumUnknownTokens } = require("../helper/unknownTokens") + +const config = { + ethereum: "0x3BaC111A6F5ED6A554616373d5c7D858d7c10d88" +} + +Object.keys(config).forEach(chain => { + const prestakingAddress = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const data = await api.fetchList({ lengthAbi: 'uint256:poolLength', itemAbi: 'function poolInfo(uint256) view returns (address want, uint256 totalDeposited,uint256,uint256)', target: prestakingAddress, }) + + const tokens = data.map(i => i.want) + const bals = data.map(i => i.totalDeposited) + bals.forEach((v, i) => v && api.add(tokens[i], v)) + return sumUnknownTokens({ api, resolveLP: true, useDefaultCoreAssets: true, }) + } + } + }) \ No newline at end of file From cf5753890f3abcd495a280124b7d18df66ad8281 Mon Sep 17 00:00:00 2001 From: 0xMyrddin <85377907+0xMyrddin@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:21:07 +0200 Subject: [PATCH 0679/1768] Add camelot deployment on gravity (v2 and v3 factories) (#11921) --- projects/camelot-v2/index.js | 1 + projects/camelot/index.js | 3 +++ 2 files changed, 4 insertions(+) diff --git a/projects/camelot-v2/index.js b/projects/camelot-v2/index.js index 86744d174c..4531ce7b67 100644 --- a/projects/camelot-v2/index.js +++ b/projects/camelot-v2/index.js @@ -12,6 +12,7 @@ const export2 = uniV3Export({ sanko: { factory: '0xcF8d0723e69c6215523253a190eB9Bc3f68E0FFa', fromBlock: 51, isAlgebra: true}, arbitrum: { factory: '0xd490f2f6990c0291597fd1247651b4e0dcf684dd', fromBlock: 75633510, isAlgebra: true, }, reya: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 2932166, isAlgebra: true, }, + gravity: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 11988, isAlgebra: true, }, }) module.exports = mergeExports([export1, export2 ]) \ No newline at end of file diff --git a/projects/camelot/index.js b/projects/camelot/index.js index 0309b5817c..60c30208ca 100644 --- a/projects/camelot/index.js +++ b/projects/camelot/index.js @@ -17,5 +17,8 @@ module.exports = { }, reya: { tvl: getUniTVL({factory: '0x7d8c6B58BA2d40FC6E34C25f9A488067Fe0D2dB4', useDefaultCoreAssets: true}) + }, + gravity: { + tvl: getUniTVL({factory: '0x7d8c6B58BA2d40FC6E34C25f9A488067Fe0D2dB4', useDefaultCoreAssets: true}) } }; \ No newline at end of file From 7a6ac428e22a032d969156a4b60caa85caafa964 Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:21:36 +0800 Subject: [PATCH 0680/1768] Add ioTex chain (#11924) --- projects/pell/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pell/index.js b/projects/pell/index.js index 8a02724ce5..f2be7456b2 100644 --- a/projects/pell/index.js +++ b/projects/pell/index.js @@ -1,7 +1,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require('../helper/cache') -const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'base', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer'] +const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'base', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer', 'iotex'] chains.forEach(chain => { module.exports[chain] = { From 4c3a08247be560a212700233bd605790469b0590 Mon Sep 17 00:00:00 2001 From: TsimakuridzeNikolozi <100114440+TsimakuridzeNikolozi@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:21:53 +0400 Subject: [PATCH 0681/1768] Added hETH token to registry (#11920) --- projects/hinkal/registryTokens.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/hinkal/registryTokens.js b/projects/hinkal/registryTokens.js index cad8bd180d..6481f4fa50 100644 --- a/projects/hinkal/registryTokens.js +++ b/projects/hinkal/registryTokens.js @@ -254,6 +254,7 @@ const ETHEREUM_REGISTRY_TOKENS = [ "0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5", "0x35d8949372d46b7a3d5a56006ae77b215fc69bc0", "0x1f7e9321ce32af1f9ea1185fd10d31fea31ffd95", + "0x270B7748CdF8243bFe68FaCE7230ef0fCE695389", ]; const ARBITRUM_REGISTRY_TOKENS = [ From 6d8f217c06b670b257812dcfefbe7fd4b2e66d61 Mon Sep 17 00:00:00 2001 From: imfeng Date: Wed, 16 Oct 2024 18:22:20 +0800 Subject: [PATCH 0682/1768] Updated TVL For Satoshi Protocol on Bob chain (#11926) --- projects/satoshi-protocol/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/satoshi-protocol/index.js b/projects/satoshi-protocol/index.js index 93a7a9af2c..9bc4338352 100644 --- a/projects/satoshi-protocol/index.js +++ b/projects/satoshi-protocol/index.js @@ -65,6 +65,8 @@ module.exports = { '0xc50D117C21054455aE9602237d3d17ca5Fa91288', // BOB WETH Collateral '0xBDFedF992128CbF10974DC935976116e10665Cc9', // BOB WBTC Collateral '0x8FAE9D3dBeE1c66b84E90df21A1DbdBab9262843', // BOB tBTC Collateral + '0xFFFE50D535aaA9B16499D2fDb3BbD94144ca5336', // BOB SolvBTC Collateral + '0xa0B2325BB635679cCFbf50570edd0C6F3D7dA81e', // BOB SolvBTC.BBN Collateral ], nymInformation: { address: '0x7253493c3259137431a120752e410b38d0c715C2', From 9d6432b3b34c5948641941af439da8d3d1e5e591 Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:52:56 +0530 Subject: [PATCH 0683/1768] new pools (#11912) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index 13fb78e13b..fd943ee7c8 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -67,7 +67,30 @@ const ALPHAFI_CETUS_TVL_IDS = [ token0Type: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA", token1Type: ADDRESSES.sui.SUI }, - + // usdc sui + { + poolID: "0x727882553d1ab69b0cabad2984331e7e39445f91cb4046bf7113c36980685528", + cetusPoolID: "0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105", + investorID: "0xba6acd0350eab1c6bc433b6c869e5592fe0667ae96a3115f89d5c79dd78396ef", + token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + token1Type: ADDRESSES.sui.SUI + }, + // usdc usdt + { + poolID: "0xa213f04c6049f842a7ffe7d39e0c6138a863dc6e25416df950d23ddb27d75661", + cetusPoolID: "0x6bd72983b0b5a77774af8c77567bb593b418ae3cd750a5926814fcd236409aaa", + investorID: "0xe553be450b7290025d5810da45102abdbaa211c5735e47f6740b4dd880edc0bd", + token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + token1Type: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN" + }, + // usdc wusdc + { + poolID: "0x568a47adf2b10219f0973a5600096822b38b4a460c699431afb6dad385614d66", + cetusPoolID: "0x1efc96c99c9d91ac0f54f0ca78d2d9a6ba11377d29354c0a192c86f0495ddec7", + investorID: "0x6cc5e671a2a6e9b8c8635ff1fb16ae62abd7834558c3a632d97f393c0f022972", + token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + token1Type: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN" + }, ] const ALPHAFI_NAVI_TVL_IDS = [ @@ -96,6 +119,11 @@ const ALPHAFI_NAVI_TVL_IDS = [ tokenType: ADDRESSES.sui.WETH, expo: 8 }, + { + poolID: "0x04378cf67d21b41399dc0b6653a5f73f8d3a03cc7643463e47e8d378f8b0bdfa", + tokenType: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + expo: 6 + }, ] const ALPHAFI_NAVI_LOOP_TVL_IDS = [ { @@ -119,6 +147,13 @@ const ALPHAFI_POOL2_IDS = [{ token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", token1Type: ADDRESSES.sui.USDC }, +{ + poolID: "0x4c0e42f1826170ad9283b321a7f9a453ef9f65aaa626f7d9ee5837726664ecdc", + cetusPoolID: "0x29e218b46e35b4cf8eedc7478b8795d2a9bcce9c61e11101b3a039ec93305126", + investorID: "0xb43d1defd5f76ef084d68d6b56e903b54d0a3b01be8bb920ed1fa84b42c32ee1", + token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", + token1Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC" +}, ] const ALPHA_POOL_ID = "0x6ee8f60226edf48772f81e5986994745dae249c2605a5b12de6602ef1b05b0c1" From ea318cb9c2588e9067e74c27bbc291eda4b8d49f Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Wed, 16 Oct 2024 18:24:06 +0800 Subject: [PATCH 0684/1768] update stakestone sbtc ethereum vault (#11918) --- projects/stakestone-btc/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/stakestone-btc/index.js b/projects/stakestone-btc/index.js index 768e9d8c3a..1a0bf4984b 100644 --- a/projects/stakestone-btc/index.js +++ b/projects/stakestone-btc/index.js @@ -3,15 +3,24 @@ const vaultABI = { } const VaultBSC = '0x3aa0670E24Cb122e1d5307Ed74b0c44d619aFF9b'; +const VaultETH = '0x7dBAC0aA440A25D7FB43951f7b178FF7A809108D'; const bscTvl = async (api) => { const [btclist] = await api.call({ abi: vaultABI.getDepositAmounts, target: VaultBSC }) return api.sumTokens({ owner: VaultBSC, tokens: btclist }) } +const ethTvl = async (api) => { + const [btclist] = await api.call({ abi: vaultABI.getDepositAmounts, target: VaultETH }) + return api.sumTokens({ owner: VaultETH, tokens: btclist }) +} + module.exports = { start: 42326440, bsc: { tvl: bscTvl, + }, + ethereum: { + tvl: ethTvl, } } From 617a15f6e6a2cefadd6ec4144443291e247e66fd Mon Sep 17 00:00:00 2001 From: etherpilled Date: Wed, 16 Oct 2024 06:25:08 -0400 Subject: [PATCH 0685/1768] Update index.js (#11917) --- projects/infinite/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/infinite/index.js b/projects/infinite/index.js index 9d9e1d84f0..d1428ff44b 100644 --- a/projects/infinite/index.js +++ b/projects/infinite/index.js @@ -3,6 +3,7 @@ const ITP_VAULT_ADDRRESS= '0x23371aEEaF8718955C93aEC726b3CAFC772B9E37' const ITP_ON_OPTIMISM = "0x0a7B751FcDBBAA8BB988B9217ad5Fb5cfe7bf7A0"; const VELO_PRICE_ORACLE = "0x395942C2049604a314d39F370Dfb8D87AAC89e16"; const WETH_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000006"; +const VELO_TOKEN_ADDRESS = "0x3c8b650257cfb5f272f799f5e2b4e65093a11a05"; const OP_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000042"; const USDC_OP_TOKEN_ADDRESS = "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"; const ITP_STAKED_ABI = "function getVaultInfo() view returns (uint256, uint256, uint256, uint256, uint256, uint256[], uint256)"; @@ -18,6 +19,7 @@ const getStakedTVL = async (api) => { 1, [ ITP_ON_OPTIMISM, + VELO_TOKEN_ADDRESS, WETH_TOKEN_ADDRESS, OP_TOKEN_ADDRESS, USDC_OP_TOKEN_ADDRESS, From 3dbf568c304000a3b37c781af7c4da9f05f01aef Mon Sep 17 00:00:00 2001 From: Brdd Mnk Date: Wed, 16 Oct 2024 13:25:44 +0300 Subject: [PATCH 0686/1768] Zero1 Labs new staking vault added (#11916) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/zero1-labs/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/zero1-labs/index.js b/projects/zero1-labs/index.js index 488fb7619e..de777e952e 100644 --- a/projects/zero1-labs/index.js +++ b/projects/zero1-labs/index.js @@ -8,6 +8,7 @@ module.exports = { "0x7AabE771aCcAa3F54a1B7c05d65c6E55d0Cd0Af6", "0x88062FE2751f3D5cEC18F6113A532A611632ae79", "0x8DBA1f564458dd46283ca3a4CDf6CA019963aB42", + "0x68605AA964F25aC8c7C159331F9dF050321FDcc6", ], "0x1495bc9e44Af1F8BCB62278D2bEC4540cF0C05ea"), }, } From 2edc4d4797bc6e7fde7a36ee851f7ca6d08d34cd Mon Sep 17 00:00:00 2001 From: coshi190 <106068123+coshi190@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:29:25 +0700 Subject: [PATCH 0687/1768] feat: add networks of cmdao-gameswap protocol (#11915) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/cmdao-gameswap/index.js | 15 +++++++++++---- projects/helper/coreAssets.json | 3 +++ projects/helper/tokenMapping.js | 3 +++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/projects/cmdao-gameswap/index.js b/projects/cmdao-gameswap/index.js index 3e280724b4..315e900272 100644 --- a/projects/cmdao-gameswap/index.js +++ b/projects/cmdao-gameswap/index.js @@ -1,11 +1,18 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unknownTokens'); +const { pool2 } = require("../helper/pool2"); module.exports = { jbc: { - tvl: sumTokensExport({ - owner: '0x280608DD7712a5675041b95d0000B9089903B569', - tokens: [ADDRESSES.jbc.JUSDT], - }), + tvl: sumTokensExport({ + owner: '0x280608DD7712a5675041b95d0000B9089903B569', + tokens: [ADDRESSES.jbc.JUSDT], + }), + }, + optimism: { + pool2: pool2('0x51f97e67b2ff5ed064dc2b27b7a745e0d4c47ee0', ['0xA41F70B283b8f097112ca3Bb63cB2718EE662e49']), + }, + bitkub: { + pool2: pool2('0xe5B764566CB5b26fE7568e59370368ACf9c7c5c3', ['0x5Cced24E580586841f326d5088D288e6Ddd201dA']), } }; diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 3aaf08ac6b..58311321aa 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1943,5 +1943,8 @@ }, "etn": { "WETN": "0x138dafbda0ccb3d8e39c19edb0510fc31b7c1c77" + }, + "bitkub": { + "KKUB": "0x67ebd850304c70d983b2d1b93ea79c7cd6c3f6b5" } } diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index fb378c92b9..d6fdd26c8f 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -92,6 +92,9 @@ const fixBalancesTokens = { taiko: { '0xd347949f8c85d9f3d6b06bfc4f8c2e07c161f064': { coingeckoId: "loopring", decimals: 18 }, }, + bitkub: { + [ADDRESSES.bitkub.KKUB]: { coingeckoId: 'bitkub-coin', decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 7ce0f60a04c3f4e8c8bc5da0174031f80075c2e6 Mon Sep 17 00:00:00 2001 From: ZuluSpl0it <55359362+ZuluSpl0it@users.noreply.github.com> Date: Wed, 16 Oct 2024 05:30:23 -0500 Subject: [PATCH 0688/1768] Update BackBoneLab project (#11913) --- projects/backbonelabs/index.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/projects/backbonelabs/index.js b/projects/backbonelabs/index.js index f4d583c320..8e53eda9be 100644 --- a/projects/backbonelabs/index.js +++ b/projects/backbonelabs/index.js @@ -2,21 +2,21 @@ const { queryContract: queryContractCosmos } = require("../helper/chain/cosmos") const ADDRESSES = require('../helper/coreAssets.json') const config = { - terra2: { - token: ADDRESSES.terra2.LUNA, - hub: "terra1l2nd99yze5fszmhl5svyh5fky9wm4nz4etlgnztfu4e8809gd52q04n3ea", - boneToken: "terra17aj4ty4sz4yhgm08na8drc0v03v2jwr3waxcqrwhajj729zhl7zqnpc0ml", - }, - migaloo: { - token: ADDRESSES.migaloo.WHALE, - hub: "migaloo1mf6ptkssddfmxvhdx0ech0k03ktp6kf9yk59renau2gvht3nq2gqdhts4u", - boneToken: "factory/migaloo1mf6ptkssddfmxvhdx0ech0k03ktp6kf9yk59renau2gvht3nq2gqdhts4u/boneWhale" + archway: { + token: ADDRESSES.archway.ARCH, + hub: "archway12ejj99vkawuxfv0rg9l08hsun35juc6evprracmpe3mka3lsk5fqpjxhgl", + boneToken: "archway12yurzx8zynv3ck7uh4tucre48tqsm4fac4hfk9p3l24qs2cn08dqr684cg" }, chihuahua: { token: ADDRESSES.chihuahua.HUAHUA, hub: "chihuahua1psf89r2g9vdlttrjphspcpzzfx87r2r4nl5fg703ky42mp2706wsw5330f", boneToken: "chihuahua1jz5n4aynhpxx7clf2m8hrv9dp5nz83k67fgaxhy4p9dfwl6zssrq3ymr6w" }, + injective: { + token: ADDRESSES.injective.INJ, + hub: "inj1dxp690rd86xltejgfq2fa7f2nxtgmm5cer3hvu", + boneToken: "factory/inj1dxp690rd86xltejgfq2fa7f2nxtgmm5cer3hvu/bINJ" + }, juno: { token: ADDRESSES.juno.JUNO, hub: "juno102at0mu2xeluyw9efg257yy6pyhv088qqhmp4f8wszqcwxnpdcgqsfq0nv", @@ -27,10 +27,20 @@ const config = { hub: "kujira15e8q5wzlk5k38gjxlhse3vu6vqnafysncx2ltexd6y9gx50vuj2qpt7dgv", boneToken: "factory/kujira15e8q5wzlk5k38gjxlhse3vu6vqnafysncx2ltexd6y9gx50vuj2qpt7dgv/boneKuji" }, + migaloo: { + token: ADDRESSES.migaloo.WHALE, + hub: "migaloo1mf6ptkssddfmxvhdx0ech0k03ktp6kf9yk59renau2gvht3nq2gqdhts4u", + boneToken: "factory/migaloo1mf6ptkssddfmxvhdx0ech0k03ktp6kf9yk59renau2gvht3nq2gqdhts4u/boneWhale" + }, osmosis: { token: ADDRESSES.osmosis.OSMO, hub: "osmo1s3l0lcqc7tu0vpj6wdjz9wqpxv8nk6eraevje4fuwkyjnwuy82qsx3lduv", boneToken: "factory/osmo1s3l0lcqc7tu0vpj6wdjz9wqpxv8nk6eraevje4fuwkyjnwuy82qsx3lduv/boneOsmo" + }, + terra2: { + token: ADDRESSES.terra2.LUNA, + hub: "terra1l2nd99yze5fszmhl5svyh5fky9wm4nz4etlgnztfu4e8809gd52q04n3ea", + boneToken: "terra17aj4ty4sz4yhgm08na8drc0v03v2jwr3waxcqrwhajj729zhl7zqnpc0ml", } }; From 472ffa51577ce25aabf8aec75292562fade22a18 Mon Sep 17 00:00:00 2001 From: LevenR <156494841+LevenR@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:57:49 +0800 Subject: [PATCH 0689/1768] Update btc tvl address after lorenzo stake btc to babylon. (#11881) Co-authored-by: Leven --- projects/lorenzo/index.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/projects/lorenzo/index.js b/projects/lorenzo/index.js index c0ee691cba..0c442499f9 100644 --- a/projects/lorenzo/index.js +++ b/projects/lorenzo/index.js @@ -1,8 +1,6 @@ const { sumTokensExport } = require("../helper/sumTokens"); const LorenzoOwners = [ - "bc1pzd6luyardlle9f7lul2y8fl72c22p6vxspc4k4g4gzgjf8975s0sr042yt", - "bc1p7agkadaau66jtva9n8k5pg3lsctuyqur8a2l5y9hzwqkh5nlmd0skuhws3", "bc1qaf6laj9m7jteztyz4lulrtcjtpusfcfnd7r7xn", "bc1qf6cj2z2e2mzuvfrl80vgt53k7jc2vf36ckahgy", "bc1q5hc68n6krnzgzswf7rknha2aqxzrzup4vlhce8", @@ -12,7 +10,27 @@ const LorenzoOwners = [ "bc1qrx3fpr5j6sprxett45c2kl9p4pajyxep0mapfd", "bc1q00t2ntm46c2nfvcer6ukj6npaxjurujthse4qq", "bc1q3pzhncle68gct6me08kn5kf9awkevt6ettwrmg", - "bc1qw6cvwx8ajprmp2lzkhrsps2qx4k9r2pj4xj98x" + "bc1qw6cvwx8ajprmp2lzkhrsps2qx4k9r2pj4xj98x", + + //btc script-address after lorenzo stake to babylon + //cap 1, Delegate to Lorenzo FP(db9160428e401753dc1a9952ffd4fa3386c7609cf8411d2b6d79c42323ca9923) + "bc1pjy5mq7vlqkq6nldxghauq0sqgh3hjdrp2adl7tcalkavt9ly5g8q3zkymk", + "bc1pck8hnfa76k9gqtddyjvt0syzlxj5atfr5g0dk0ktmdr9u9h2gnesge0f5v", + + //cap2, Delegate to Lorenzo FP(db9160428e401753dc1a9952ffd4fa3386c7609cf8411d2b6d79c42323ca9923) + "bc1pf2x7w0wwutvj5qznrxygpv5wcj3nvzq9dqhpmkyfk84nkg778q0qa605e8", + "bc1pstunan5nv657dqx32tdup3y8uxq6eja6z3d4kukspjpq23gxf4zqdce4hn", + + //cap2, Delegate to BSquaredNetwork FP(2f8ec74d558fe7a97d10be230bf1485db9be675228abfbf957ba050c714b679a) + "bc1py54xje6lxdd8ej9hqxdxnp5dyjwu2eda2rxa2yuaptv3lrw3t2tscly6y7", + "bc1pydkry09hpqqv4hxrrlrgpddky4u39xrpqd0xvsf9smjpd65s49qqnq5zel", + + //cap2, Delegate to ChainUp FP(31287a9728f7b11863b9c56fc4cca103f0473dcgitdc6746ed7f79050d3adff644b) + "bc1p6dltgypr57fc648txjj7zwk6k605ca9x2ul0pycld22x86jcvxmsg7547j", + "bc1pw8za3k5upa565n0kv55e89a8l0hkzpnfenj767j0cwfu7rn83yhqvuehcd", + + //cap2, Delegate to Lombard FP(609b4b8e27e214fd830e69a83a8270a03f7af356f64dde433a7e4b81b2399806) + "bc1pa56692v3hxguvu8vgu5d7dh9twlj7wm87qvzvxdru3rnluv8nmdqk58ewz" ]; module.exports = { From 363ec29ce85ebc3d1b84e463e84db44fc4561959 Mon Sep 17 00:00:00 2001 From: chainupk <121842069+chainupk@users.noreply.github.com> Date: Wed, 16 Oct 2024 21:53:45 +0800 Subject: [PATCH 0690/1768] Included an additional address in our TVL (#11928) Co-authored-by: zhenhao goh Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/obelisk/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/obelisk/index.js b/projects/obelisk/index.js index e318451601..46abeb6122 100644 --- a/projects/obelisk/index.js +++ b/projects/obelisk/index.js @@ -3,7 +3,8 @@ const sdk = require('@defillama/sdk') const staticAddresses = [ 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', - '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP' + '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP', + 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj' ] const abi = { From 89a2621509949e72e8067e0a4791459043a8e963 Mon Sep 17 00:00:00 2001 From: 0xYFLOW <139814596+0xYFLOW@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:53:57 +0400 Subject: [PATCH 0691/1768] add new arb and gmx pool (#11927) --- projects/yieldflow/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/yieldflow/index.js b/projects/yieldflow/index.js index 41088f514c..dfee5c3bd9 100644 --- a/projects/yieldflow/index.js +++ b/projects/yieldflow/index.js @@ -66,6 +66,14 @@ const managers = [ '0xD4c68a094De7e1336E261c6EDD595F64cd70A064', '0x88609B69feDc0EEF4326c3390a8ae1b2073DcF03', '0xdcC4391042d462158C847f73F4232ce47A8F999c', + + '0xB67EFF6590D8457c870f84b5eA3B2CeEb7dbCD50', + '0xE7cC8F17295cb9975e3D9aB3798C4fe0AA378c5F', + '0xfb35BeDFB647c0445B9177aFFd6e7b81Bb8Ab9Bc', + + '0x590905F3adC1a16Af6A144Eaca57ba65760e93Cf', + '0x4568936B2846debb1Ed65122841A500B639f49A7', + '0x17263600ABccf294C6D0Ec02bCc23A240e883c7D', ] async function tvl(api) { From 515bb870aa376688bbdbcc7f650d53574f888264 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 16 Oct 2024 19:49:15 +0100 Subject: [PATCH 0692/1768] velocimeter v4 --- projects/velocimeter-v4/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/velocimeter-v4/index.js diff --git a/projects/velocimeter-v4/index.js b/projects/velocimeter-v4/index.js new file mode 100644 index 0000000000..abdf1edba1 --- /dev/null +++ b/projects/velocimeter-v4/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + iotaevm: { + tvl: getUniTVL({ + factory: '0x10A288eF87586BE54ea690998cAC82F7Cc90BC50', + useDefaultCoreAssets: true, + hasStablePools: true, + }) + }, +} From 1fe6f7771e329ef9089d98c9649c340f953b5954 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 01:47:55 +0200 Subject: [PATCH 0693/1768] elixir: remove doublecount --- projects/elixir/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/elixir/index.js b/projects/elixir/index.js index d2453940cd..14febf5d5b 100644 --- a/projects/elixir/index.js +++ b/projects/elixir/index.js @@ -37,8 +37,8 @@ const integration = async (api, manager, poolIds, tokens) => { module.exports = { ethereum: { tvl: async (api) => { - const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) - api.add(deUSD, deusdSupply); + // const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) + // api.add(deUSD, deusdSupply); await api.sumTokens({ owners: [COMMITS, FOUNDATION, FOUNDATION_2], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null, ADDRESSES.ethereum.SDAI] }) }, pool2: sumTokensExport({ owner: DEUSD_LP_STAKING, tokens: LP_TOKENS }) From c5fbcc36821aff6490f8f76cf2c03a7b1c8f9908 Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Thu, 17 Oct 2024 01:56:13 +0200 Subject: [PATCH 0694/1768] Add cbBTC, BNB, ETHB and BTCB assets on Folks Finance xChain (#11934) --- projects/folks-xchain/constants.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/projects/folks-xchain/constants.js b/projects/folks-xchain/constants.js index ba7d50782a..b55eca2b3e 100644 --- a/projects/folks-xchain/constants.js +++ b/projects/folks-xchain/constants.js @@ -50,6 +50,28 @@ const HubPools = { tokenAddress: "0x0000000000000000000000000000000000000000", chainPoolAddress: '0xe3B0e4Db870aA58A24f87d895c62D3dc5CD05883', }, + { // cbBTC_base + poolAddress: "0x9eD81F0b5b0E9b6dE00F374fFc7f270902576EF7", + tokenAddress: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", + chainPoolAddress: '0x50d5Bb3Cf57D2fB003b602A6fD10F90baa8567EA', + }, + ], + 'bsc': [ + { // BNB + poolAddress: "0x89970d3662614a5A4C9857Fcc9D9C3FA03824fe3", + tokenAddress: "0x0000000000000000000000000000000000000000", + chainPoolAddress: '0x5f2F4771B7dc7e2F7E9c1308B154E1e8957ecAB0', + }, + { // ETHB_bsc + poolAddress: "0x18031B374a571F9e060de41De58Abb5957cD5258", + tokenAddress: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + chainPoolAddress: '0x4Db12F554623E4B0b3F5bAcF1c8490D4493380A5', + }, + { // BTCB_bsc + poolAddress: "0xC2FD40D9Ec4Ae7e71068652209EB75258809e131", + tokenAddress: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + chainPoolAddress: '0x12Db9758c4D9902334C523b94e436258EB54156f', + }, ] } From dbb6e306f69736b9130a5c6e5f781f548d9553f2 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 02:24:21 +0200 Subject: [PATCH 0695/1768] fix meteora tvl --- projects/mercurial.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/mercurial.js b/projects/mercurial.js index 7848842675..747ab9a663 100644 --- a/projects/mercurial.js +++ b/projects/mercurial.js @@ -99,7 +99,9 @@ async function tvl() { tokensAndOwners.push([i.tokenAMint, i.aVault]) tokensAndOwners.push([i.tokenBMint, i.bVault]) }) - return sumTokens2({ tokensAndOwners }) + const balances = await sumTokens2({ tokensAndOwners }) + delete balances['solana:AwRErBEFGTnohzfLeRSBH9HddQEy2oeRxnWLrbvFFh95'] + return balances } module.exports = { From a59f5203b1e9dfd91beb1e5c7480f46b246a4130 Mon Sep 17 00:00:00 2001 From: Loki-sama Date: Thu, 17 Oct 2024 02:29:12 +0200 Subject: [PATCH 0696/1768] Add KelpGain adapter (#11914) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/kelp-gain/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/kelp-gain/index.js diff --git a/projects/kelp-gain/index.js b/projects/kelp-gain/index.js new file mode 100644 index 0000000000..02aeab1095 --- /dev/null +++ b/projects/kelp-gain/index.js @@ -0,0 +1,9 @@ +const { sumERC4626VaultsExport } = require('../helper/erc4626') + +module.exports = { + doublecounted: true, + methodology: "TVL corresponds to the sum of rsETH from all active loans managed by the pool and the rsETH balance held within the pool.", + ethereum: { + tvl: sumERC4626VaultsExport({ vaults: ['0xe1b4d34e8754600962cd944b535180bd758e6c2e'], isOG4626: true }), + }, +} From 23ac6f607c798f8b318814fdea1590a6c4517a5b Mon Sep 17 00:00:00 2001 From: xyzseer <157058933+xyzseer@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:09:57 -0300 Subject: [PATCH 0697/1768] add seer (#11892) Co-authored-by: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> --- projects/seer/index.js | 117 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 projects/seer/index.js diff --git a/projects/seer/index.js b/projects/seer/index.js new file mode 100644 index 0000000000..eef13ffa86 --- /dev/null +++ b/projects/seer/index.js @@ -0,0 +1,117 @@ +const config = { + 'ethereum': { + marketFactory: ['0x1F728c2fD6a3008935c1446a965a313E657b7904'], + marketView: '0xAb797C4C6022A401c31543E316D3cd04c67a87fC', + collateralToken: '0x83F20F44975D03b1b09e64809B757c47f942BEeA' + }, + 'xdai': { + marketFactory: ['0x83183DA839Ce8228E31Ae41222EaD9EDBb5cDcf1'], + marketView: '0x995dC9c89B6605a1E8cc028B37cb8e568e27626f', + collateralToken: '0xaf204776c7245bf4147c2612bf6e5972ee483701' + }, +} + +const MARKET_VIEW_ABI = + 'function getMarket(address marketFactory, address market) public view returns (tuple(address id, string marketName, string[] outcomes, address parentMarket, uint256 parentOutcome, address[] wrappedTokens, uint256 outcomesSupply, uint256 lowerBound, uint256 upperBound, bytes32 parentCollectionId, bytes32 conditionId, bytes32 questionId, uint256 templateId, tuple(bytes32 content_hash, address arbitrator, uint32 opening_ts, uint32 timeout, uint32 finalize_ts, bool is_pending_arbitration, uint256 bounty, bytes32 best_answer, bytes32 history_hash, uint256 bond, uint256 min_bond)[] questions, bytes32[] questionsIds, string[] encodedQuestions,bool payoutReported) memory)' + +async function tvl(api) { + const { marketFactory, marketView, collateralToken } = config[api.chain] + // get all markets + const markets = await api.multiCall({ abi: 'address[]:allMarkets', calls: marketFactory }) + const dataCalls = markets.map((v, i) => { + return v.map(val => ({ params: [marketFactory[i], val] })) + }).flat() + + /* + * marketsData is an array of objects with the following structure: + * - id + * - parentMarket + * - parentOutcome + * - wrappedTokens + * - outcomesSupply + */ + const marketsData = (await api.multiCall({ abi: MARKET_VIEW_ABI, calls: dataCalls, target: marketView })).map(market => ({ + id: market.id, + parentMarket: market.parentMarket, + parentOutcome: market.parentOutcome, + wrappedTokens: market.wrappedTokens, + outcomesSupply: (market.wrappedTokens ?? []).map(_ => 0), + })) + + const idIndexMapping = [] + const supplyCalls = [] + marketsData.forEach((marketData, index) => { + marketData.wrappedTokens.forEach((outcomeToken, idx2) => { + idIndexMapping.push([index, idx2]) + supplyCalls.push(outcomeToken) + }) + }) + + const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: supplyCalls }) + supplies.forEach((supply, i) => { + const [marketIndex, outcomeIndex] = idIndexMapping[i] + marketsData[marketIndex].outcomesSupply[outcomeIndex] = +supply + }) + + const totalSupply = calculateTotalSupply(marketsData); + + api.add(collateralToken, totalSupply); +} + +/** + * When a child market is created, the parent market's supply is decreased by the amount used to mint the child market. + * This function calculates the total supply of parent markets by merging child market supplies into parent markets + * and summing up the unique supplies. These unique supplies represent the TVL of sDAI backing the parent markets. + */ +function calculateTotalSupply(marketsData) { + const marketSupplies = new Map(); + const processedTokens = new Set(); + + marketsData.forEach((market, index) => { + const supply = market.outcomesSupply + const uniqueSupply = [] + let i = 0 + for (const token of market.wrappedTokens) { + if (!processedTokens.has(token)) { + uniqueSupply.push(supply[i]) + processedTokens.add(token) + } + i++ + } + + marketSupplies.set(market.id, uniqueSupply); + }); + + // Merge child market supplies into parent markets + marketsData.forEach((market) => { + if (market.parentMarket !== '0x0000000000000000000000000000000000000000') { + const parentSupply = marketSupplies.get(market.parentMarket); + const childSupply = marketSupplies.get(market.id); + + if (parentSupply && childSupply) { + // Add child market supply to the corresponding parent outcome + parentSupply[market.parentOutcome] = (parentSupply[market.parentOutcome] || 0) + childSupply.reduce((a, b) => a > b ? a : b, 0); + marketSupplies.set(market.parentMarket, parentSupply); + } + } + }); + + // Calculate total supply of parent markets (parent markets are backed by sDAI) + let totalSupply = 0; + marketsData.forEach((market) => { + if (market.parentMarket === '0x0000000000000000000000000000000000000000') { + const marketSupply = marketSupplies.get(market.id); + if (marketSupply) { + totalSupply += marketSupply.reduce((a, b) => a > b ? a : b, 0); + } + } + }); + + return totalSupply; +} + +module.exports = { + ethereum: { tvl }, + xdai: { tvl }, + methodology: 'TVL represents the total quantity of sDAI held in the conditional tokens contract. The sDAI is withdrawn when the participants merge or redeem their tokens.', +} From 713389888edeadef1ae74bb51477ca312722d362 Mon Sep 17 00:00:00 2001 From: Solazan <85551951+sarp07@users.noreply.github.com> Date: Thu, 17 Oct 2024 04:16:55 +0300 Subject: [PATCH 0698/1768] Hello we added new function with new tokens on platform. Can we list on defillama to new version ? (#11931) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/microcreditproject/index.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/projects/microcreditproject/index.js b/projects/microcreditproject/index.js index 65dd641dab..17f5e34e55 100644 --- a/projects/microcreditproject/index.js +++ b/projects/microcreditproject/index.js @@ -1,17 +1,18 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const TOKENS = [ - '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', + '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', + '0x0CE35b0D42608Ca54Eb7bcc8044f7087C18E7717', ] const INVESTMENT_CONTRACT = '0x951d1571C75C519Cc3D09b6B71595C6aCe1c06dB' const PROFIT_SHARE_CONTRACT = '0x165D74d2DEFe37794371eB63c63999ab5620DBfB' module.exports = { - islm: { - tvl: sumTokensExport({ - owners: [INVESTMENT_CONTRACT, PROFIT_SHARE_CONTRACT], - tokens: TOKENS - }), - }, + islm: { + tvl: sumTokensExport({ + owners: [INVESTMENT_CONTRACT, PROFIT_SHARE_CONTRACT], + tokens: TOKENS + }), + }, } From aee80a4817e3f649828987aa7bf1cefaf6022694 Mon Sep 17 00:00:00 2001 From: Yield Enhancement Labs Date: Thu, 17 Oct 2024 04:26:01 +0300 Subject: [PATCH 0699/1768] YEL FINANCE - Update Blast tvl and add Base tvl (#11925) Co-authored-by: able1f --- projects/yel/index.js | 76 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 6 deletions(-) diff --git a/projects/yel/index.js b/projects/yel/index.js index 2b470a01b0..e1b1a5a911 100644 --- a/projects/yel/index.js +++ b/projects/yel/index.js @@ -1,5 +1,9 @@ -const { sumUnknownTokens } = require('../helper/unknownTokens') +const { sumUnknownTokens, getTokenPrices } = require('../helper/unknownTokens') const { sumTokens2 } = require('../helper/unwrapLPs') +const { + normalizeAddress, +} = require('../helper/tokenMapping') + const ADDRESSES = require('../helper/coreAssets.json') const config = { @@ -16,14 +20,69 @@ const config = { farms: ['0x954b15065e4FA1243Cd45a020766511b68Ea9b6E', '0x0379C1BbE394f835366D2EFDBf2AF09fBa0689A4'], lps: ['0x8bAb87ECF28Bf45507Bd745bc70532e968b5c2De'], ownTokens: ['0xd3b71117e6c1558c1553305b44988cd944e97300'] }, blast: { - ownTokensAndOwners: [['0x949185D3BE66775Ea648F4a306740EA9eFF9C567', '0x7d2f5881F0C4B840fcFA2c49F4052d1A004eAf0d']], + ownTokensAndOwners: [ + // Token Potion(lToken) slToken + ['0x949185D3BE66775Ea648F4a306740EA9eFF9C567', '0x7d2f5881F0C4B840fcFA2c49F4052d1A004eAf0d', '0xD451E3443Fc9e12d37F64EC0FeD100cE2c10D22A'] + ], tokensAndOwners: [ - [ADDRESSES.blast.WETH, '0x795a85CD543D0E2d29F7e11e33a20a38A4b5121e'], - [ADDRESSES.blast.BLAST, '0x7D8490333315EaAa5e93F3C6983d1e8128D7f50f'], + // Token Potion(lToken) slToken + ['0x4300000000000000000000000000000000000004', '0x795a85CD543D0E2d29F7e11e33a20a38A4b5121e', '0x7D8490333315EaAa5e93F3C6983d1e8128D7f50f' ], + ['0xb1a5700fa2358173fe465e6ea4ff52e36e88e2ad', '0x07BF0Bc908Ef4badF8ec0fB1f77A8dBFe33c33c0', '0x73681f24a4a099E71e0Ddd084f2310bA1E0b3a36' ], + ], + }, + base: { + ownTokensAndOwners: [ + // Token Potion(lToken) slToken + ['0x949185D3BE66775Ea648F4a306740EA9eFF9C567', '0x516712404013200B499Cd8fAE4575E5d48F6Ba65', '0x38b8b2B4b063e71047474018707Fab2E9a2bB971'] + ], + tokensAndOwners: [ + // Token Potion(lToken) slToken + ['0x4200000000000000000000000000000000000006', '0x0540f15374eCF13aAB3c0a76b643333CE0D00579', '0x0E7De1d6A1aA4178CBfce3dE4EAaD0427034f924'], + ['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', '0xE7349C94BDE0D13599Ed496342857bb231FeF02B', '0xabb4D7866e1059bD21581FC5FC6D49388D30a323'], + ['0x1509706a6c66CA549ff0cB464de88231DDBe213B', '0x8a27CE3A836C8A9D962D86C099f229f3baF3EB4a', '0xFfeC8bAAa8cf32Bc7F85ea6a7C44Ad541309FD1F'] ], } } +async function tvl( api, coveredAssets){ + for(const assets of coveredAssets){ + const originalToken = normalizeAddress(assets[0]) + const potion = normalizeAddress(assets[1]) + const slToken = normalizeAddress(assets[2]) + + let totalTokenBalance = 0 + const balances = await api.multiCall({ + abi : 'erc20:balanceOf', + calls : [ + { + target : originalToken, + params : potion + }, + { + target : potion, + params : slToken + } + ] + }) + + let potionSupply = Number( + await api.call({ + abi : 'erc20:totalSupply', + target : potion, + }) + ) + + const tokenBalanceOnPotion = Number(balances[0]) + const ltokenBalanceOnSLToken = Number(balances[1]) + + const cbr = tokenBalanceOnPotion / potionSupply + + totalTokenBalance = tokenBalanceOnPotion + (ltokenBalanceOnSLToken * cbr) + + api.add(originalToken, totalTokenBalance) + } +} + Object.keys(config).forEach(chain => { const { farms = [], lps = [], ownTokens = [], ownTokensAndOwners, tokensAndOwners, } = config[chain] module.exports[chain] = { @@ -41,7 +100,10 @@ Object.keys(config).forEach(chain => { await sumTokens2({ api, ownerTokens, blacklistedTokens: [...lps, ...ownTokens], resolveLP: true, }) } - if (tokensAndOwners) return api.sumTokens({ tokensAndOwners }) + if (tokensAndOwners){ + await tvl(api, tokensAndOwners) + } + }, pool2: async (api) => { if (farms.length && lps.length) @@ -52,7 +114,9 @@ Object.keys(config).forEach(chain => { if (farms.length && ownTokens.length) await sumUnknownTokens({ api, owners: farms, tokens: ownTokens, useDefaultCoreAssets: true, lps, }) - if (ownTokensAndOwners) return api.sumTokens({ tokensAndOwners: ownTokensAndOwners }) + if (ownTokensAndOwners){ + await tvl(api, ownTokensAndOwners) + } }, } }) \ No newline at end of file From eab5edb1e0f5a6af4dd53cc84ad6aad397f294b5 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 17 Oct 2024 03:27:24 +0200 Subject: [PATCH 0700/1768] Update: Eigenlayer strategies (#11933) --- projects/eigenlayer/index.js | 87 +++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/projects/eigenlayer/index.js b/projects/eigenlayer/index.js index a0d3c71249..ffd6c185c7 100644 --- a/projects/eigenlayer/index.js +++ b/projects/eigenlayer/index.js @@ -1,10 +1,14 @@ -const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') -const { getLogs } = require('../helper/cache/getLogs') -const { startAlliumQuery, retrieveAlliumResults } = require('../helper/allium') -const { getCache, setCache, } = require('../helper/cache') +const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); +const { getLogs2 } = require("../helper/cache/getLogs"); +const { startAlliumQuery, retrieveAlliumResults } = require("../helper/allium"); +const { getCache, setCache } = require("../helper/cache"); + +const EIGEN = '0xec53bF9167f50cDEB3Ae105f56099aaaB9061F83' +const eigenStrategy = '0xaCB55C530Acdb2849e6d4f36992Cd8c9D50ED8F7' +const bEIGEN = '0x83e9115d334d248ce39a6f36144aeab5b3456e75' async function getEigenPods(timestamp) { - const queryId = await getCache('eigenlayer', 'eigenpods-query') + const queryId = await getCache("eigenlayer", "eigenpods-query"); const offset = 3; const newQuery = await startAlliumQuery(` select @@ -26,50 +30,51 @@ async function getEigenPods(timestamp) { from beacon.validator.balances where status in ('active_ongoing', 'pending_queued', 'pending_initialized', 'withdrawal_possible') - and slot_timestamp = '${new Date(timestamp * 1e3 - offset * 24 * 3600e3).toISOString().split('T')[0]}T23:59:59' - ) beacon where pods.params['eigenPod'] = beacon.WITHDRAWAL_ADDRESS`) - await setCache('eigenlayer', 'eigenpods-query', newQuery) - const eigenPods = await retrieveAlliumResults(queryId) - const sum = eigenPods[0]?.["sum"] + and slot_timestamp = '${ + new Date(timestamp * 1e3 - offset * 24 * 3600e3).toISOString().split("T")[0] + }T23:59:59' + ) beacon where pods.params['eigenPod'] = beacon.WITHDRAWAL_ADDRESS`); + await setCache("eigenlayer", "eigenpods-query", newQuery); + const eigenPods = await retrieveAlliumResults(queryId); + const sum = eigenPods[0]?.["sum"]; if (!sum) { - throw new Error("Empty eigenpods") + throw new Error("Empty eigenpods"); } - return sum + return sum; } -async function tvl({timestamp}, _b, _cb, { api, }) { - /* - const podLogs = await getLogs({ - api, - target: '0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338', - topics: ['0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a'], - eventAbi: "event PodDeployed (address indexed eigenPod, address indexed podOwner)", - onlyArgs: true, - fromBlock: 17445564, - }) - const pods = podLogs.map(log => log.eigenPod) - const restakedStatus = await api.multiCall({ abi: 'bool:hasRestaked', calls: pods }) - restakedStatus.filter(i => i).forEach(() => api.add(nullAddress, 32 * 1e18)) - */ +const fetchLogs = async (api, eventAbi) => getLogs2({ + api, + target: "0x858646372cc42e1a627fce94aa7a7033e7cf075a", + eventAbi, + fromBlock: 17445564, +}); +const tvl = async ({ timestamp }, _b, _cb, { api }) => { api.add(nullAddress, await getEigenPods(timestamp) * 1e18) - const logs = await getLogs({ - api, - target: '0x858646372CC42E1A627fcE94aa7A7033e7CF075A', - topic: 'StrategyAddedToDepositWhitelist(address)', - eventAbi: "event StrategyAddedToDepositWhitelist(address strategy)", - onlyArgs: true, - fromBlock: 17445564, - }) - const strategies = logs.map(log => log.strategy) - const tokens = await api.multiCall({ abi: 'address:underlyingToken', calls: strategies }) - return sumTokens2({ api, tokensAndOwners2: [tokens, strategies] }) + + const [addeds, removeds] = await Promise.all([ + fetchLogs(api, "event StrategyAddedToDepositWhitelist(address strategy)"), + fetchLogs(api, "event StrategyRemovedFromDepositWhitelist(address strategy)"), + ]); + + const activeStrategies = addeds + .map(item => item[0]) + .filter(strategy => !removeds.some(removed => removed[0] === strategy)); + + const rawUnderlyingTokens = await api.multiCall({ abi: 'address:underlyingToken', calls: activeStrategies }) + const underlyingTokens = rawUnderlyingTokens.filter((t) => t.toLowerCase() !== bEIGEN) // filter out bEIGEN + return sumTokens2({ api, tokensAndOwners2: [underlyingTokens, activeStrategies] }) + +}; + +const staking = async (api) => { + const balance = await api.call({ target: bEIGEN, params: [eigenStrategy], abi: 'erc20:balanceOf' }) + api.add(EIGEN, balance) } // https://github.com/Layr-Labs/eigenlayer-contracts/blob/master/script/output/M1_deployment_mainnet_2023_6_9.json module.exports = { timetravel: false, - ethereum: { - tvl, - }, -} + ethereum: { tvl, staking }, +}; \ No newline at end of file From 62873275306f1dd1f76868c688ba674081c6b1a4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 03:34:55 +0200 Subject: [PATCH 0701/1768] Swapsicle (#11936) Co-authored-by: Himanshu Pandey Co-authored-by: paoloswap <122459630+paoloswap@users.noreply.github.com> --- projects/swapsicle-v2/index.js | 160 ++++++++++++--------------------- 1 file changed, 56 insertions(+), 104 deletions(-) diff --git a/projects/swapsicle-v2/index.js b/projects/swapsicle-v2/index.js index cdac04cecf..0d1d0bac44 100644 --- a/projects/swapsicle-v2/index.js +++ b/projects/swapsicle-v2/index.js @@ -16,23 +16,30 @@ module.exports = uniV3Export({ fromBlock: 301362984, isAlgebra: true, }, + taiko: { + factory: "0xBa90FC740a95A6997306255853959Bb284cb748a", + fromBlock: 338445, + isAlgebra: true, + }, }); const contracts = { telos: { stakingContract_iceCreamVan: "0xA234Bb3BEb60e654601BEa72Ff3fB130f9ed2aa7", stakingContract_zombieVan: "0x67275189e0deb3ce9eb918928c0011a0a582bd0e", - stakingContract_iceCreamZombies: - "0x581b6d860aa138c46dcaf6d5c709cd070cd77eb8", + stakingContract_iceCreamZombies: "0x581b6d860aa138c46dcaf6d5c709cd070cd77eb8", slush: "0xac45ede2098bc989dfe0798b4630872006e24c3f", }, mantle: { stakingContract_iceCreamVan: "0xe0ac81c7692b9119658e01edc1d743bf4c2ec21a", stakingContract_zombieVan: "0x049a58a2aa1b15628aa0cda0433d716f6f63cbba", - stakingContract_iceCreamZombies: - "0x21b276de139ce8c75a7b4f750328dbf356195b49", + stakingContract_iceCreamZombies: "0x21b276de139ce8c75a7b4f750328dbf356195b49", slush: "0x8309bc8bb43fb54db02da7d8bf87192355532829", }, + taiko: { + stakingContract_iceCreamVan: "0x0cdde1dead51b156bd62113664d60b354b4df4ab", + slush: "0x36bfe1f1b36cfdb4fe75cc592ff5dc6200ad3e0f", + }, }; const config = { @@ -42,130 +49,75 @@ const config = { }, telos: { endpoint: - "https://telos.subgraph.swapsicle.io/subgraphs/name/cryptoalgebra/analytics", + "https://test.telos.subgraph.swapsicle.io/subgraphs/name/cryptoalgebra/analytics", + }, + taiko: { + endpoint: + "https://api.goldsky.com/api/public/project_clr6mlufzbtuy01vd012wgt5k/subgraphs/swapsicle-analytics-taiko/prod/gn", }, }; -const query = `{ - pools { - id - token0 { id } - token1 { id } - } -}`; - const slushPriceQuery = `{ token(id: "TOKENID") { derivedMatic } }`; -const WTLOS = ADDRESSES.telos.WTLOS; -const WMNT = ADDRESSES.mantle.WMNT; - -function getTLOSAddress(address) { - return `telos:${address}`; -} - -function getMantleAddress(address) { - return `mantle:${address}`; -} +const nativeTokenAddresses = { + telos: `telos:${ADDRESSES.telos.WTLOS}`, + mantle: `mantle:${ADDRESSES.mantle.WMNT}`, + taiko: `taiko:${ADDRESSES.taiko.WETH}`, +}; -async function slushToEthConvert(slushAmount, chain) { - const slushETH = await cachedGraphQuery( +async function slushToNativeConvert(slushAmount, chain) { + const slushNativePrice = await cachedGraphQuery( "swapsicle-slush-eth-price/" + chain, - chain == "telos" ? config.telos.endpoint : config.mantle.endpoint, + config[chain].endpoint, slushPriceQuery.replace( "TOKENID", - chain == "telos" ? contracts.telos.slush : contracts.mantle.slush + contracts[chain].slush ) ); - - const slushStaked = slushAmount / 10 ** 18; - return slushStaked * slushETH.token.derivedMatic; + return slushAmount / 10 ** 18 * slushNativePrice.token.derivedMatic; } -async function iceCreamVanStake({ chain, telos: block }) { - const tokenBalance = - chain == "telos" - ? await sdk.api.abi.call({ - target: contracts.telos.stakingContract_iceCreamVan, - abi: iceCreamVanABI.totalShares, - chain: "telos", - block, - }) - : await sdk.api.abi.call({ - target: contracts.mantle.stakingContract_iceCreamVan, - abi: iceCreamVanABI.totalShares, - chain: "mantle", - block, - }); - - const ETHBalance = await slushToEthConvert(tokenBalance.output, chain); - - const balances = {}; - balances[chain == "telos" ? getTLOSAddress(WTLOS) : getMantleAddress(WMNT)] = - ETHBalance * 10 ** 18; - - return balances; +/** Returns an object as follows { `chainName:nativeTokenAddress`: slushBalanceInNativeToken } */ +async function getStakeBalance(slushBalance, chain) { + const nativeBalance = await slushToNativeConvert(slushBalance, chain); + return { + [nativeTokenAddresses[chain]]: nativeBalance * 10 ** 18 + }; } -async function ZombieVanStake({ chain, telos: block }) { - const tokenBalance = - chain == "telos" - ? await sdk.api.abi.call({ - target: contracts.telos.stakingContract_zombieVan, - abi: zombieVanABI.totalStaked, - chain: "telos", - block, - }) - : await sdk.api.abi.call({ - target: contracts.mantle.stakingContract_zombieVan, - abi: zombieVanABI.totalStaked, - chain: "mantle", - block, - }); - - const ETHBalance = await slushToEthConvert(tokenBalance.output, chain); - - const balances = {}; - balances[chain == "telos" ? getTLOSAddress(WTLOS) : getMantleAddress(WMNT)] = - ETHBalance * 10 ** 18; - - return balances; +async function iceCreamVanStake(api) { + const response = await api.call({ + target: contracts[api.chain].stakingContract_iceCreamVan, + abi: iceCreamVanABI.totalShares, + }) + return getStakeBalance(response, api.chain); } -async function ICZStake({ chain, telos: block }) { - const tokenBalance = - chain == "telos" - ? await sdk.api.erc20.balanceOf({ - target: contracts.telos.slush, - owner: contracts.telos.stakingContract_iceCreamZombies, - chain: "telos", - block, - }) - : await sdk.api.erc20.balanceOf({ - target: contracts.mantle.slush, - owner: contracts.mantle.stakingContract_iceCreamZombies, - chain: "mantle", - block, - }); - - const ETHBalance = await slushToEthConvert(tokenBalance.output, chain); - - const balances = {}; - balances[chain == "telos" ? getTLOSAddress(WTLOS) : getMantleAddress(WMNT)] = - ETHBalance * 10 ** 18; +async function ZombieVanStake(api) { + const response = await api.call({ + target: contracts[api.chain].stakingContract_zombieVan, + abi: zombieVanABI.totalStaked, + }) + return getStakeBalance(response, api.chain); +} - return balances; +async function ICZStake(api) { + const response = await api.call({ + abi: 'erc20:balanceOf', + target: contracts[api.chain].slush, + params: contracts[api.chain].stakingContract_iceCreamZombies, + }) + return getStakeBalance(response, api.chain); } Object.keys(config).forEach((chain) => { - const { endpoint } = config[chain]; module.exports[chain].staking = sdk.util.sumChainTvls([ - () => iceCreamVanStake({ chain }), - () => ZombieVanStake({ chain }), - // NFT's - () => ICZStake({ chain }), - ]) + (api) => iceCreamVanStake(api), + (api) => (chain !== 'taiko' ? ZombieVanStake(api) : 0), + (api) => (chain !== 'taiko' ? ICZStake(api) : 0), + ]); }); From 5f92ef0950d25b09513901b05af60172158129c4 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:30:47 +0200 Subject: [PATCH 0702/1768] fix radiant --- projects/radiant-v2/index.js | 55 +++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/projects/radiant-v2/index.js b/projects/radiant-v2/index.js index 42906dfcbd..9dccdb336a 100644 --- a/projects/radiant-v2/index.js +++ b/projects/radiant-v2/index.js @@ -1,5 +1,5 @@ const { staking } = require("../helper/staking"); -const { sumTokensExport } = require("../helper/unknownTokens"); +const { sumTokensExport } = require("../helper/unwrapLPs"); const { aaveExports, methodology, } = require("../helper/aave"); module.exports = { @@ -28,3 +28,56 @@ module.exports = { pool2: staking("0xD87F8a52a91680c993ece968B281bf92505A3741", "0x8a76639fe8e390ed16ea88f87beb46d6a5328254") }, }; + +const config = { + bsc: {aTokens: [ + '0x34d4F4459c1b529BEbE1c426F1e584151BE2C1e5', + '0x4Ff2DD7c6435789E0BB56B0553142Ad00878a004', + '0x89d763e8532D256a3e3e60c1C218Ac71E71cF664', + '0x3bDCEf9e656fD9D03eA98605946b4fbF362C342b', + '0x455a281D508B4e34d55b31AC2e4579BD9b77cA8E', + '0x58b0BB56CFDfc5192989461dD43568bcfB2797Db', + '0x6350e53461c7C95964D699cfa4e84cec993eebb1' + ] , tokens: [ + '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', + '0x55d398326f99059fF775485246999027B3197955', + '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', + '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', + '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', + '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', + '0xa2E3356610840701BDf5611a53974510Ae27E2e1' + ]}, + arbitrum: {aTokens: [ + '0x727354712BDFcd8596a3852Fd2065b3C34F4F770', + '0xd69D402D1bDB9A2b8c3d88D98b9CEaf9e4Cd72d9', + '0x48a29E756CC1C097388f3B2f3b570ED270423b3d', + '0x0D914606f3424804FA1BbBE56CCC3416733acEC6', + '0x0dF5dfd95966753f01cb80E76dc20EA958238C46', + '0x42C248D137512907048021B30d9dA17f48B5b7B2', + '0x2dADe5b7df9DA3a7e1c9748d169Cd6dFf77e3d01', + '0x3a2d44e354f2d88EF6DA7A5A4646fd70182A7F55', + '0xb11A56DA177c5532D5E29cC8363d145bD0822c81', + '0x876F38f474e48A104c4af4F06cA488099C436C93', + '0xd15a6568Dc891Fd04Aa2f64aF56C66C2bede59d6', + '0x19f0bE6a603967c72bE32a30915a38d52cA31Ae2' + ] , tokens: [ + '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + '0x5979D7b546E38E414F7E9822514be443A4800529', + '0x912CE59144191C1204E64559FE8253a0e49E6548', + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', + '0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe', + '0x47c031236e19d024b42f8AE6780E44A573170703', + '0x70d95587d40A2caf56bd97485aB3Eec10Bee6336', + '0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34' + ]}, +} + +Object.keys(config).forEach(chain => { + const {aTokens, tokens,} = config[chain] + module.exports[chain].tvl = sumTokensExport({ tokensAndOwners2: [tokens, aTokens], }) + module.exports[chain].borrowed = () => ({}) +}) \ No newline at end of file From b1e2cfb6f060c15d06eeaa4a29d0a929722a55df Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:36:09 +0200 Subject: [PATCH 0703/1768] add hallmark --- projects/radiant-v2/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/radiant-v2/index.js b/projects/radiant-v2/index.js index 9dccdb336a..9dddd86c39 100644 --- a/projects/radiant-v2/index.js +++ b/projects/radiant-v2/index.js @@ -2,9 +2,11 @@ const { staking } = require("../helper/staking"); const { sumTokensExport } = require("../helper/unwrapLPs"); const { aaveExports, methodology, } = require("../helper/aave"); + module.exports = { hallmarks: [ - [1704178500,"flash loan exploit"] + [1704178500,"flash loan exploit"], + [Math.floor(new Date('2024-10-16')/1e3), 'Multisig was compromised'], ], methodology, arbitrum: { From aaca2a1ad64b1cdc494b57a460223c1eeef6cebe Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:35:29 +0200 Subject: [PATCH 0704/1768] bugfix --- projects/fxdao/api.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/fxdao/api.js b/projects/fxdao/api.js index 84b016c641..8843008c09 100644 --- a/projects/fxdao/api.js +++ b/projects/fxdao/api.js @@ -16,6 +16,7 @@ async function tvl(api) { const balance = scValToNative(response.val.value().val()).amount; const parsedBalance = Number(balance) / 1e7; api.addCGToken('stellar', parsedBalance); + return api.getBalances() } module.exports = { From 390ed7003adb41e9d0ed56414a50d767a2f5b8f1 Mon Sep 17 00:00:00 2001 From: baklavaspace <93024988+baklavaspace@users.noreply.github.com> Date: Thu, 17 Oct 2024 20:11:31 +0800 Subject: [PATCH 0705/1768] Adding Base Aerodrome vAMM Vaults (#11938) --- projects/baklava-space/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/baklava-space/index.js b/projects/baklava-space/index.js index abcb3083ff..8c589c35f6 100644 --- a/projects/baklava-space/index.js +++ b/projects/baklava-space/index.js @@ -38,7 +38,16 @@ const config = { '0x49AF8CAf88CFc8394FcF08Cf997f69Cee2105f2b', '0x83B2D994A1d16E6A3A44281D12542E2bc0d5EBFD', '0xea505C49B43CD0F9Ed3b40D77CAF1e32b0097328', - '0xc5DFb9698440Eaeb0A7C9dAA5a795e9B48CacadF' + '0xc5DFb9698440Eaeb0A7C9dAA5a795e9B48CacadF', + '0x6067776741a82Ad90Dff7e8D9af495F245b71782', + '0x0324a1a68d6Ef3C5037DCc5a305F941eD240197A', + '0x21c502F430A0Ff9Cbc37dcb60a0528e8C76d559f', + '0x3C27C6a8cD5A60dE337772c2c441fF83279d5855', + '0xFefa438D90227Bb6312b0846a28787Db8A0f0c2A', + '0xf81Ac49CEeA834deC340aB08a544fB1E79d44c31', + '0xed1031885D7DE7DB78BE921F5FeAacD3f6E9a127', + '0x9bD9b6600eeE5f8318913cCb17BF836E1e9d2f4F', + '0x90011B2AB095c9a9f70a8eBEe21313FB3989029f' // CLM pool ], bsc: [ '0x6659B42C106222a50EE555F76BaD09b68EC056f9', From 875ac9b57c4be7f12c962aac431d79c349d66688 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:10:44 +0200 Subject: [PATCH 0706/1768] track kraken btc --- projects/kraken-btc/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/kraken-btc/index.js diff --git a/projects/kraken-btc/index.js b/projects/kraken-btc/index.js new file mode 100644 index 0000000000..2a28405498 --- /dev/null +++ b/projects/kraken-btc/index.js @@ -0,0 +1,6 @@ +const { sumTokensExport } = require('../helper/sumTokens') + +// https://www.kraken.com/kbtc +module.exports = { + bitcoin: { tvl: sumTokensExport({ owners: ['bc1qqwf6hexnnswmj6yuhz5xyj20frtp8exv7mclck'] }) } +} \ No newline at end of file From e9028a428a21bfa573c663741cc4078f31e05fa3 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 17 Oct 2024 14:30:20 +0100 Subject: [PATCH 0707/1768] fuel bridge --- projects/fuel/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/fuel/index.js diff --git a/projects/fuel/index.js b/projects/fuel/index.js new file mode 100644 index 0000000000..617fa74d2d --- /dev/null +++ b/projects/fuel/index.js @@ -0,0 +1,15 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0xAEB0c00D0125A8a788956ade4f4F12Ead9f65DDf", + "0xa4cA04d02bfdC3A2DF56B9b6994520E69dF43F67", + ], + fetchCoValentTokens: true, + }), + }, +}; From d80c88426e06bb585f01a606f7ffada397d69289 Mon Sep 17 00:00:00 2001 From: Chaitanya Joshi Date: Thu, 17 Oct 2024 19:36:31 +0530 Subject: [PATCH 0708/1768] fix: ithaca tvl (#11940) --- projects/ithaca/index.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/projects/ithaca/index.js b/projects/ithaca/index.js index 4f6229cbf4..201b6181ee 100644 --- a/projects/ithaca/index.js +++ b/projects/ithaca/index.js @@ -4,6 +4,10 @@ const { sumTokensExport } = require("../helper/unwrapLPs"); const ITHACA_FUNDLOCK_CONTRACT = '0x4a20d341315b8ead4e5ebecc65d95080a47a7316'; const WETH_CONTRACT = ADDRESSES.arbitrum.WETH; const USDC_CONTRACT = ADDRESSES.arbitrum.USDC_CIRCLE; +const ITHACA_WETH_AAVE_STRATEGY_CONTRACT = '0xb2dd2f67132e2e5bc37cb2c1d3b193909b7fb26c' +const ITHACA_USDC_AAVE_STRATEGY_CONTRACT = '0x9f494058e0501498f09fd0173d5024e1d3a6fc57' +const AWETH_CONTRACT = '0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8' +const AUSDC_CONTRACT = '0x724dc807b04555b71ed48a6896b6F41593b8C637' module.exports = { timetravel: true, @@ -11,9 +15,13 @@ module.exports = { methodology: 'counts the number of WETH and USDC in Ithaca Fundlock contract', start: 176036233, arbitrum: { - tvl: sumTokensExport({ - owner: ITHACA_FUNDLOCK_CONTRACT, - tokens: [ WETH_CONTRACT, USDC_CONTRACT ], + tvl: sumTokensExport({ + tokensAndOwners: [ + [WETH_CONTRACT, ITHACA_FUNDLOCK_CONTRACT], + [USDC_CONTRACT, ITHACA_FUNDLOCK_CONTRACT], + [AWETH_CONTRACT, ITHACA_WETH_AAVE_STRATEGY_CONTRACT], + [AUSDC_CONTRACT, ITHACA_USDC_AAVE_STRATEGY_CONTRACT], + ], }), } }; \ No newline at end of file From b7ab703a4d18992e5a8cc8e5285dcf3bae7d68fd Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 17 Oct 2024 19:52:27 +0100 Subject: [PATCH 0709/1768] split eddyfinance by product --- projects/eddyfinance-stableswap/index.js | 37 ++++++++++++++++++++++++ projects/eddyfinance/index.js | 7 +++-- 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 projects/eddyfinance-stableswap/index.js diff --git a/projects/eddyfinance-stableswap/index.js b/projects/eddyfinance-stableswap/index.js new file mode 100644 index 0000000000..a6d880d409 --- /dev/null +++ b/projects/eddyfinance-stableswap/index.js @@ -0,0 +1,37 @@ +const { getUniTVL } = require('../helper/unknownTokens') +const sdk = require('@defillama/sdk'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)'; + +const stablePools = [ + '0x448028804461e8e5a8877c228F3adFd58c3Da6B6', // 4 asset pool + '0x01a9cd602c6c3f05ea9a3a55184c2181bd43e4b8', // 2 asset pool accumulated finance + '0xee1629de70afaf3ae3592a9d6d859949750aa697', // 2 asset pool zearn + '0x89cb3fA2A7910A268e9f7F619108aFADBD7587c4' // 2 asset UltiVerse pool +] + +async function stableSwapTvl(api) { + const params = [0, 1, 2, 3] + const calls = [] + stablePools.forEach(pool => { + params.forEach(param => + calls.push({ target: pool, params: param })) + }) + const tokens = await api.multiCall({ abi: 'function coins(uint256) view returns (address)', calls, permitFailure: true }) + const tokensAndOwners = [] + tokens.forEach((token, i) => { + if (!token) return; + tokensAndOwners.push([token, calls[i].target]) + }) + + return sumTokens2({ api, tokensAndOwners, blacklistedTokens: stablePools }) +} + + + +module.exports = { + misrepresentedTokens: true, + methodology: "Sum of tvl of the StableSwap pools", + zeta: { tvl: stableSwapTvl }, +}; \ No newline at end of file diff --git a/projects/eddyfinance/index.js b/projects/eddyfinance/index.js index ec2774d676..48885f559f 100644 --- a/projects/eddyfinance/index.js +++ b/projects/eddyfinance/index.js @@ -3,7 +3,7 @@ const sdk = require('@defillama/sdk'); const { sumTokens2 } = require('../helper/unwrapLPs'); const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)'; - +/* const stablePools = [ '0x448028804461e8e5a8877c228F3adFd58c3Da6B6', // 4 asset pool '0x01a9cd602c6c3f05ea9a3a55184c2181bd43e4b8', // 2 asset pool accumulated finance @@ -27,11 +27,12 @@ async function stableSwapTvl(api) { return sumTokens2({ api, tokensAndOwners, blacklistedTokens: stablePools }) } +*/ // separate into eddyfinance-stableswap adapter const uniTvl = getUniTVL({ factory: '0x9fd96203f7b22bCF72d9DCb40ff98302376cE09c', abis: { getReserves } }) module.exports = { misrepresentedTokens: true, - methodology: "Sum of tvl of UniV2 pools and StableSwap pools", - zeta: { tvl: sdk.util.sumChainTvls([uniTvl, stableSwapTvl]) }, + methodology: "Sum of tvl of UniV2 pools", + zeta: { tvl: uniTvl }, }; \ No newline at end of file From 91fe1e69b8adf772df9a7daa0059f2236330fb34 Mon Sep 17 00:00:00 2001 From: MD <0xhyoga@cygnusdao.finance> Date: Fri, 18 Oct 2024 05:10:38 +0200 Subject: [PATCH 0710/1768] add `real` network (#11944) --- projects/impermax/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/impermax/index.js b/projects/impermax/index.js index 9a991c4522..c48c0a9d64 100644 --- a/projects/impermax/index.js +++ b/projects/impermax/index.js @@ -71,6 +71,11 @@ const config = { factories: [ '0xa058Ba91958cD30D44c7B0Cf58A369876Fb70B05' ] + }, + real: { + factories: [ + '0x3b1f3a48a70e372144307a4b126a5cda46e169ad' + ] } } @@ -116,7 +121,8 @@ const blacklistedPools = { scroll: [], base: [], mantle: [], - optimism: [] + optimism: [], + real: [] } module.exports = {} From f142b61a3364eb2b4034fd908387d374c1efd8c8 Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:11:07 +0800 Subject: [PATCH 0711/1768] Update Desyn core chain (#11947) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-farm1/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/desyn-farm1/index.js b/projects/desyn-farm1/index.js index 3ef14151f4..98c47f0894 100644 --- a/projects/desyn-farm1/index.js +++ b/projects/desyn-farm1/index.js @@ -7,7 +7,8 @@ module.exports = { const config = { btr: { factory: '0x09eFC8C8F08B810F1F76B0c926D6dCeb37409665', fromBlock: 2393247}, mode: { factory: '0x09Dfee598d5217da799bEAd56206beC0fDB0D17B', fromBlock: 9912410}, - zklink: { factory: '0xCCA610644f19d7d8f96b90a896B160f54cBE3204', fromBlock: 4734230} + zklink: { factory: '0xCCA610644f19d7d8f96b90a896B160f54cBE3204', fromBlock: 4734230}, + core: { factory: '0x5C3027D8Cb28A712413553206A094213337E88c5', fromBlock: 17552799} } Object.keys(config).forEach(chain => { From 730af7bbfc6858103a1ab3a8fae612a70220d7aa Mon Sep 17 00:00:00 2001 From: MatthewTristan Date: Thu, 17 Oct 2024 20:14:20 -0700 Subject: [PATCH 0712/1768] Moneta (#11946) --- projects/moneta/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/moneta/index.js diff --git a/projects/moneta/index.js b/projects/moneta/index.js new file mode 100644 index 0000000000..5fdbda8049 --- /dev/null +++ b/projects/moneta/index.js @@ -0,0 +1,23 @@ +const { addressesUtxosAssetAll, getScriptsDatum} = require('../helper/chain/cardano/blockfrost') + +const usdm_count_nft_asset = "e319d8e6629ff7991c8ae4f8aec2e0f10463ebdf29b57d26d34914f65553444d5f434f554e54" +const count_address = "addr1wyl82v9qy06hsz50hqqdy0u6xw9hdewy7twjahgek2tpp7c0qajez" + +async function tvl() { + const utxo = (await addressesUtxosAssetAll(count_address, usdm_count_nft_asset))[0] + const datum_hash = utxo.data_hash + const datum = await getScriptsDatum(datum_hash) + const total_value_locked = datum.json_value.fields[0].int/1_000_000 + return { + usd: total_value_locked + } + +} + +module.exports={ + timetravel: false, + methodology: "Gets the total circulating supply of USDM from the datum of the USDM counter UTxO.", + cardano:{ + tvl + } +} \ No newline at end of file From b9be11884fd164d40f6674500d24c2d7529d700c Mon Sep 17 00:00:00 2001 From: soilking <157099073+soilking@users.noreply.github.com> Date: Thu, 17 Oct 2024 20:21:10 -0700 Subject: [PATCH 0713/1768] Basin on Arbitrum (#11910) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/basin/index.js | 49 ++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/projects/basin/index.js b/projects/basin/index.js index f7b341d6c7..491a76161d 100644 --- a/projects/basin/index.js +++ b/projects/basin/index.js @@ -1,34 +1,29 @@ -const { getLogs2 } = require('../helper/cache/getLogs'); - -// Aquifer -const FACTORY = "0xba51aaaa95aeefc1292515b36d86c51dc7877773"; -const BORE_WELL_ABI = "event BoreWell (address well, address implementation, address[] tokens, (address, bytes) wellFunction, (address, bytes)[] pumps, bytes wellData)"; - -const startBlocks = { - ethereum: 17977905 +const { cachedGraphQuery } = require('../helper/cache') +const chains = { + ethereum: { + startBlock: 17977905, + subgraphUrl: "https://graph.bean.money/basin_eth" + }, + arbitrum: { + startBlock: 261772155, + subgraphUrl: "https://graph.bean.money/basin" + } } -function chainTvl(chain) { - return async (api) => { - // Find all BoreWell events - const START_BLOCK = startBlocks[chain]; - const logs = await getLogs2({ - api, - target: FACTORY, - fromBlock: START_BLOCK, - eventAbi: BORE_WELL_ABI, - topics: ['0xff64a5823907c85a1e7c0400576024f76bd1640c74350033bd0d689f793202f2'], - }); - - const ownerTokens = logs.map(log => [log.tokens, log.well]) - return api.sumTokens({ ownerTokens }) - } +async function tvl(api) { + const { subgraphUrl } = chains[api.chain]; + const wells = await cachedGraphQuery('basin/' + api.chain, subgraphUrl, `{ + wells { + id tokens { id } + } + }`) + const ownerTokens = wells.wells.map(well => [well.tokens.map(t => t.id), well.id]); + return api.sumTokens({ ownerTokens }); } module.exports = { methodology: "Counts the value of token reserves inside all deployed Wells.", - start: 17977905, - ethereum: { - tvl: chainTvl('ethereum') - } + start: 1692797303, + ethereum: { tvl }, + arbitrum: { tvl } }; From 3d5843180c75806a32910eb19c9532287668c848 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 18 Oct 2024 06:26:24 +0200 Subject: [PATCH 0714/1768] dojoswap: bugfix --- projects/helper/portedTokens.js | 1 + projects/terraswap/factoryTvl.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/projects/helper/portedTokens.js b/projects/helper/portedTokens.js index 1db3a4f770..01eb946f4a 100644 --- a/projects/helper/portedTokens.js +++ b/projects/helper/portedTokens.js @@ -16,6 +16,7 @@ async function transformInjectiveAddress() { addr = addr.replace(/\//g, ':') if (addr.startsWith('peggy0x')) return `ethereum:${addr.replace('peggy', '')}` + if (addr.startsWith('injective:') || addr.startsWith('ethereum:')) return addr return `injective:${addr}`; }; } diff --git a/projects/terraswap/factoryTvl.js b/projects/terraswap/factoryTvl.js index e6c929eaa0..a038c565b7 100644 --- a/projects/terraswap/factoryTvl.js +++ b/projects/terraswap/factoryTvl.js @@ -49,14 +49,14 @@ async function getAllPairs(factory, chain, { blacklistedPairs = [] } = {}) { return dtos } -const isNotXYK = (pair) => pair.pair_type && (pair.pair_type.xyk || pair.pair_type.custom === 'concentrated') +const isNotXYK = (pair) => pair.pair_type && pair.pair_type.custom === 'concentrated' function getFactoryTvl(factory, { blacklistedPairs = [] } = {}) { return async (api) => { const pairs = (await getAllPairs(factory, api.chain, { blacklistedPairs })).filter(pair => (pair.assets[0].balance && pair.assets[1].balance)) - const xykPairs = pairs.filter(isNotXYK) - const otherPairs = pairs.filter(pair => !isNotXYK(pair)) + const otherPairs = pairs.filter(isNotXYK) + const xykPairs = pairs.filter(pair => !isNotXYK(pair)) otherPairs.forEach(({ assets }) => { api.add(assets[0].addr, assets[0].balance) api.add(assets[1].addr, assets[1].balance) From 199d5db8c428573a6a786f8ebadc488454b7cbe5 Mon Sep 17 00:00:00 2001 From: Barak Uri <140400738+dev-uri@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:39:08 +0300 Subject: [PATCH 0715/1768] feat: Update Rollspace contracts (#11949) --- projects/rollspace/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/rollspace/index.js b/projects/rollspace/index.js index 82f3cb7aa0..5a38b0cdf8 100644 --- a/projects/rollspace/index.js +++ b/projects/rollspace/index.js @@ -1,9 +1,9 @@ const { nullAddress } = require("../helper/tokenMapping"); const { sumTokensExport } = require("../helper/unwrapLPs"); -const BSC_POOL_CONTRACT = '0xB1FcDb8Ed3c2Bc572440b08a5A93984f366BBf3C'; -const BLAST_POOL_CONTRACT = '0x4E927c4bc1432dc7608d2199a77e630cc1676eD7'; -const BASE_POOL_CONTRACT = '0x35a7E7f5A8ECe30585364c28EE5974E3ECe375DC'; +const BSC_POOL_CONTRACT = '0x011b1b59Dac73AA584546dD05bbF300c9D4ecdA0'; +const BLAST_POOL_CONTRACT = '0x7b0DDc2BD91Cf1a7d4e026ebdEcd575Ef760D9B8'; +const BASE_POOL_CONTRACT = '0x0994c10372BB1d994a6EcCcF81E1225da589A010'; const MODE_POOL_CONTRACT = '0xbADaC8BDFdC6Ef7be408e94AbE3ddC6bec783E59'; module.exports = { From f1d66fd065f0abf41fce6d52bdb42c9992a11b42 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 18 Oct 2024 08:50:04 +0200 Subject: [PATCH 0716/1768] track https://truemarkets.org --- projects/truemarkets/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/truemarkets/index.js diff --git a/projects/truemarkets/index.js b/projects/truemarkets/index.js new file mode 100644 index 0000000000..2df572e6cc --- /dev/null +++ b/projects/truemarkets/index.js @@ -0,0 +1,18 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const { base } = require('../radiant-v2') + +const config = { + base: { factory: '0x288025b60330e01d793B6e83c1a0dE22bb943459', fromBlock: 21180486 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event MarketCreatedWithDescription (address marketAddress, string marketQuestion, string marketSource, string additionalInfo, uint256 endOfTrading, uint256 yesNoTokenCap, address marketOwner)', fromBlock, }) + const markets = logs.map(log => log.marketAddress) + const tokens = await api.multiCall({ abi: 'address:paymentToken', calls: markets}) + return api.sumTokens({ tokensAndOwners2: [tokens, markets]}) + } + } +}) \ No newline at end of file From a5fed0a7575a697ce99d4780260817dd7b151d18 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:41:37 +0200 Subject: [PATCH 0717/1768] track mira.ly --- projects/helper/chain/fuel.js | 34 +++++++++++++++++++++++++++++++++ projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 10 ++++++++++ projects/mira-ly/index.js | 20 +++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 projects/helper/chain/fuel.js create mode 100644 projects/mira-ly/index.js diff --git a/projects/helper/chain/fuel.js b/projects/helper/chain/fuel.js new file mode 100644 index 0000000000..240224438a --- /dev/null +++ b/projects/helper/chain/fuel.js @@ -0,0 +1,34 @@ + +const { GraphQLClient, } = require('graphql-request') +const { transformBalances } = require('../portedTokens') +const client = new GraphQLClient('https://mainnet.fuel.network/v1/graphql') + +async function sumTokens({ api, owner, owners, token, tokens = [], tokensAndOwners = [] }) { + if (token) + tokens = [token] + if (owner) + owners = [owner] + if (owners) + tokensAndOwners = tokens.map(token => owners.map(owner => [token, owner])).flat() + + tokensAndOwners = getUniqueToA(tokensAndOwners) + + const query = tokensAndOwners.map(([token, owner], i) => `q${i}: contractBalance( + contract: "${owner}" asset: "${token}" +) { contract assetId amount}`).join('\n'); + + const results = await client.request(`{${query}}`) + Object.values(results).forEach(i => api.add(i.assetId, i.amount)) + return transformBalances('fuel', api.getBalances()) + + function getUniqueToA(toa) { + toa = toa.map(i => i.join('-').toLowerCase()) + toa = new Set(toa) + return [...toa].map(i => i.split('-')) + } +} + + +module.exports = { + sumTokens, +} \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 9aeaca4ff3..e8ff467401 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -126,6 +126,7 @@ "fsc", "ftn", "functionx", + "fuel", "fuse", "fusion", "genesys", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index d6fdd26c8f..22200f0a54 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -95,6 +95,16 @@ const fixBalancesTokens = { bitkub: { [ADDRESSES.bitkub.KKUB]: { coingeckoId: 'bitkub-coin', decimals: 18 }, }, + fuel: { + // https://docs.fuel.network/docs/verified-addresses/assets/ + '0x286c479da40dc953bddc3bb4c453b608bba2e0ac483b077bd475174115395e6b': { coingeckoId: 'usd-coin', decimals: 6 }, + '0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07': { coingeckoId: 'ethereum', decimals: 9 }, + '0xa0265fb5c32f6e8db3197af3c7eb05c48ae373605b8165b6f4a51c5b0ba4812e': { coingeckoId: 'tether', decimals: 6 }, + '0x9e46f919fbf978f3cad7cd34cca982d5613af63ff8aab6c379e4faa179552958': { coingeckoId: 'savings-dai', decimals: 9 }, + '0xaf3111a248ff7a3238cdeea845bb2d43cf3835f1f6b8c9d28360728b55b9ce5b': { coingeckoId: 'manta-mbtc', decimals: 9 }, + '0xafd219f513317b1750783c6581f55530d6cf189a5863fd18bd1b3ffcec1714b4': { coingeckoId: 'manta-meth', decimals: 9 }, + '0x91b3559edb2619cde8ffb2aa7b3c3be97efd794ea46700db7092abeee62281b0': { coingeckoId: 'renzo-restaked-eth', decimals: 9 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/mira-ly/index.js b/projects/mira-ly/index.js new file mode 100644 index 0000000000..74812e583f --- /dev/null +++ b/projects/mira-ly/index.js @@ -0,0 +1,20 @@ +const { sumTokens } = require("../helper/chain/fuel") +const { configPost } = require('../helper/cache') + +async function tvl(api) { + const contractId = '0x2e40f2b244b98ed6b8204b3de0156c6961f98525c8162f80162fcf53eebd90e7' + const { pools } = await configPost('mira-ly', 'https://prod.api.mira.ly/pools', { "volume_hours": 24, "apr_days": 1 }) + const tokens = pools.map(i => i.id.split('_').slice(0, 2)).flat() + // const provider = await fuels.Provider.create('https://mainnet.fuel.network/v1/graphql') + // const contract = new fuels.Contract(contractId, abi, provider) + // const { value } = await contract.functions.total_assets().get() + // console.log(contract.functions, +value) + return sumTokens({ api, owner: contractId, tokens }) +} + +module.exports = { + fuel: { tvl }, + timetravel: false, +} + +// https://github.com/mira-amm/mira-v1-ts/blob/main/sway_abis/contracts/mira_amm_contract/release/mira_amm_contract-abi.json From 2768cb5dc684fc32b912483757624c9d43aa0002 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 18 Oct 2024 12:53:41 +0100 Subject: [PATCH 0718/1768] use addresses instead --- projects/helper/karpatkey.js | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/projects/helper/karpatkey.js b/projects/helper/karpatkey.js index d412e0fe79..9484f6ce62 100644 --- a/projects/helper/karpatkey.js +++ b/projects/helper/karpatkey.js @@ -1,29 +1,14 @@ const { sumSingleBalance } = require("@defillama/sdk/build/generalUtil") const { fetchURL } = require("./utils") -const symbolToId = { - "BAL":"balancer", - "DAI":"dai", - "ETH":"ethereum", - "USDC":"usd-coin", - "USDT":"tether", - "WBTC":"bitcoin", - "WETH":"ethereum", - "rETH2":"reth2", - "stETH":"staked-ether", - "sETH2":"seth2", - "rETH": "rocket-pool-eth", - "ankrETH":"ankreth", - "cbETH":"coinbase-wrapped-staked-eth", - "ETHx": "stader-ethx", - "GNO": "gnosis", - wstETH: "wrapped-steth", - WXDAI: "dai", - XDAI: "dai" -} - const MONTH = 30*24*3600e3 +const chainMapping = { + "Gnosis": "xdai", + "Avalanche": "avax", + "Binance": "bsc" +} + async function karpatKeyTvl({timestamp}, daoName, tokenToExclude) { const {data} = await fetchURL("https://aumapi.karpatkey.dev/our_daos_token_details") let date = new Date(timestamp*1e3) @@ -37,8 +22,9 @@ async function karpatKeyTvl({timestamp}, daoName, tokenToExclude) { } const balances = {} monthlyData.forEach(bal=>{ - if(symbolToId[bal.token_symbol] && tokenToExclude !== bal.token_symbol){ - sumSingleBalance(balances, symbolToId[bal.token_symbol], bal.token_balance) + if(tokenToExclude !== bal.token_symbol){ + const chain = chainMapping[bal.blockchain] ?? bal.blockchain.toLowerCase() + sumSingleBalance(balances, chain +':' + bal.token_address, bal.value) } else { console.log(`Skipping ${bal.token_symbol}`) } From 839a88c53cf6b2b56b127df380c9b36e2b279776 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 18 Oct 2024 19:04:28 +0100 Subject: [PATCH 0719/1768] add taiko --- projects/logx-v2/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index 1553c15ad0..297e0ff3cf 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -12,7 +12,8 @@ const config = { bob: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], sei: ['0xc010f83ae18dC5f40e888898F6605F075686432e','0x0B3b4FAFDe8baFde82C3BfD38538B7aEe4407498'], scroll: ['0x1C70cc9F8236C4Ae2ce3d34d4Da4696Aea611f90','0xcfFe53CEd05A750Fa58304c11997a0335dE731b6'], - kroma: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'] + kroma: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], + taiko: ['0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8','0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6'] } Object.keys(config).forEach(chain => { From 2f22408c5a6be989d5c7822ff0364def34d6aafe Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:49:02 +0100 Subject: [PATCH 0720/1768] add btc echo lending (#11966) --- projects/echo-lending/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/echo-lending/index.js b/projects/echo-lending/index.js index bbdb7b9563..4fef0c6646 100644 --- a/projects/echo-lending/index.js +++ b/projects/echo-lending/index.js @@ -29,7 +29,7 @@ async function getData() { item.debt = item.reserve[3] item.balance = +item.reserve[2] - +item.debt } - return resources.filter(i => i.uToken && i.uToken !== '0x4e1854f6d332c9525e258fb6e66f84b6af8aba687bbcb832a24768c4e175feec::abtc::ABTC') + return resources.filter(i => i.uToken); } } From 32e63a596797e494b06846d0b4006d5db7f9067d Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 21 Oct 2024 13:32:55 +0100 Subject: [PATCH 0721/1768] add world chain (#11967) --- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 7 +++++++ projects/uniswap/index.js | 1 + 4 files changed, 10 insertions(+) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index e8ff467401..7f9d68aaf8 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -334,6 +334,7 @@ "wan", "waves", "wax", + "wc", "wemix", "xai", "xdai", diff --git a/projects/helper/env.js b/projects/helper/env.js index ecc98b4ae1..ea4b276e45 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -20,6 +20,7 @@ const DEFAULTS = { MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", SHAPE_RPC:'https://mainnet.shape.network', SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public" } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 22200f0a54..7589bfb91c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -104,6 +104,13 @@ const fixBalancesTokens = { '0xaf3111a248ff7a3238cdeea845bb2d43cf3835f1f6b8c9d28360728b55b9ce5b': { coingeckoId: 'manta-mbtc', decimals: 9 }, '0xafd219f513317b1750783c6581f55530d6cf189a5863fd18bd1b3ffcec1714b4': { coingeckoId: 'manta-meth', decimals: 9 }, '0x91b3559edb2619cde8ffb2aa7b3c3be97efd794ea46700db7092abeee62281b0': { coingeckoId: 'renzo-restaked-eth', decimals: 9 }, + }, + wc: { + + '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1': { coingeckoId: 'usd-coin', decimals: 6 }, + '0x2cFc85d8E48F8EAB294be644d9E25C3030863003': { coingeckoId: 'worldcoin-wld', decimals: 18 }, + '0x03C7054BCB39f7b2e5B2c7AcB37583e32D70Cfa3': { coingeckoId: 'bitcoin', decimals: 8 }, + '0x4200000000000000000000000000000000000006': { coingeckoId: 'weth', decimals: 18 } } } diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index 734655327c..cc57513de3 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -91,6 +91,7 @@ module.exports = { xdai: { factory: "0xe32F7dD7e3f098D518ff19A22d5f028e076489B1", fromBlock: 27416614 }, bob: { factory: "0xcb2436774C3e191c85056d248EF4260ce5f27A9D", fromBlock: 5188280 }, lisk: { factory: "0x0d922Fb1Bc191F64970ac40376643808b4B74Df9", fromBlock: 577168 }, + wc: { factory: "0x7a5028BDa40e7B173C278C5342087826455ea25a", fromBlock: 1603366 }, }), filecoin: { tvl: filecoinTvl }, } From 382cf76f214876adf0a1dac1a53bd2858c6be706 Mon Sep 17 00:00:00 2001 From: CardanoTokenIO <163329108+CardanoTokenIO@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:10:12 +0200 Subject: [PATCH 0722/1768] Updating one script address on protocol DANZO APP (new wallet) (#11962) --- projects/danzo-arena/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/danzo-arena/index.js b/projects/danzo-arena/index.js index d3fc32f1e4..95b91240b0 100644 --- a/projects/danzo-arena/index.js +++ b/projects/danzo-arena/index.js @@ -1,8 +1,8 @@ const { sumTokensExport } = require("../helper/chain/cardano"); const scriptAdresses = [ - "addr1vx4caaf06swdn7cdfc7pu3sw235zvuhd02tw2np4uac9mwcp2vt4y", //Danzo Tokens locked inside the address for the DeFi game DANZO ARENA: https://cardanzoada.com/arena/ - "addr1v858vfzl7hdqduqqa4vsj58nfy9njtw5q98q8tzzds58uncqjezd7", //Danzo Tokens locked inside the address for the DeFi game DANZO Game: https://cardanzoada.com/app/#/games + "addr1vx4caaf06swdn7cdfc7pu3sw235zvuhd02tw2np4uac9mwcp2vt4y", //Danzo Tokens locked inside the address for the DeFi game DANZO ARENA: https://danzo.gg/arena/ + "addr1q8wu9v2wn8hkzq2g7q3ez8a99thw0gwmlhgpc2crmfk982xr2rqrszevgfwunrxu8ajh7pfhmaf6ppj60nj8rnhqhl4srgnekp", //Danzo Tokens locked inside the address for the DeFi game DANZO Game: https://danzo.gg ]; module.exports = { From aebccc0513b234b0585bf24a9b5900ad561f912f Mon Sep 17 00:00:00 2001 From: yanfeizuo <18856856693@163.com> Date: Tue, 22 Oct 2024 08:21:53 +0800 Subject: [PATCH 0723/1768] config bsquared for sumer --- projects/sumer/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index 797a3d92bd..9170858fb4 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -5,5 +5,6 @@ module.exports = { base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), arbitrum: compoundExports2({ comptroller: '0xBfb69860C91A22A2287df1Ff3Cdf0476c5aab24A' }), ethereum: compoundExports2({ comptroller: '0x60A4570bE892fb41280eDFE9DB75e1a62C70456F' }), - zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }) + zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }), + bsquared: compoundExports2({ comptroller: '0xdD9C863197df28f47721107f94eb031b548B5e48' }), } \ No newline at end of file From ddf653c80f9688c530b090614a0e0389d72f8329 Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Tue, 22 Oct 2024 01:48:21 -0700 Subject: [PATCH 0724/1768] Add Worldchain and Sushi OP (#11978) --- projects/visor/config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/visor/config.js b/projects/visor/config.js index 8aa4ca67f1..6f8b860e4f 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -34,6 +34,7 @@ const HYPE_REGISTRY = { ], optimism: [ ["0xF5BFA20F4A77933fEE0C7bB7F39E7642A070d599", 6538026], // Uniswap + ["0x617BA5fcB4e74758795DceBecA420116e50bD289", 126667774], // Sushiswap ["0xF802D5c44dC4E3bB0eCcf680a6bA82Cbd24B9F33", 125319599], // Velodrome ], arbitrum: [ @@ -150,6 +151,9 @@ const HYPE_REGISTRY = { ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 1216191], // Gmeow ["0x683292172E2175bd08e3927a5e72FC301b161300", 1216165], // Circuit ], + wc: [ + ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 4799965], // Uniswap + ], }; Object.keys(HYPE_REGISTRY).forEach(chain => { From de2fe46c2480880899857baeccdba6b941255b7e Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:57:09 +0200 Subject: [PATCH 0725/1768] Fix: Eigenlayer skipCache (#11963) --- projects/eigenlayer/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/eigenlayer/index.js b/projects/eigenlayer/index.js index ffd6c185c7..6f34f2bb37 100644 --- a/projects/eigenlayer/index.js +++ b/projects/eigenlayer/index.js @@ -48,6 +48,7 @@ const fetchLogs = async (api, eventAbi) => getLogs2({ target: "0x858646372cc42e1a627fce94aa7a7033e7cf075a", eventAbi, fromBlock: 17445564, + skipCacheRead: true }); const tvl = async ({ timestamp }, _b, _cb, { api }) => { From 09093dbd7ead34c79df8e28fa7d451a4a0790349 Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:05:25 +0800 Subject: [PATCH 0726/1768] Add the base chain of the SolvBTC project. (#11954) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solvbtc/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index bc9a7ef53c..405202021c 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -36,7 +36,7 @@ async function otherDeposit(api, solvbtc) { } // node test.js projects/solvbtc -['bitcoin', 'ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin', 'avax', 'bob'].forEach(chain => { +['bitcoin', 'ethereum', 'bsc', 'polygon', 'arbitrum', 'mantle', 'merlin', 'avax', 'bob', 'base'].forEach(chain => { if (chain == 'bitcoin') { module.exports[chain] = { tvl: bitcoinTvl, From a1cbe4d29d99aa3198537955dea499391ce1f413 Mon Sep 17 00:00:00 2001 From: 0xajing <163371347+0xajing@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:09:00 +0800 Subject: [PATCH 0727/1768] Feat/lorenzo bsc tvl (#11965) Co-authored-by: Leven Co-authored-by: lorenzo Co-authored-by: LevenR <156494841+LevenR@users.noreply.github.com> --- projects/lorenzo-bsc-lst/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/lorenzo-bsc-lst/index.js diff --git a/projects/lorenzo-bsc-lst/index.js b/projects/lorenzo-bsc-lst/index.js new file mode 100644 index 0000000000..09fedff989 --- /dev/null +++ b/projects/lorenzo-bsc-lst/index.js @@ -0,0 +1,20 @@ +const sdk = require('@defillama/sdk'); + +async function bscTvl(api) { + const stBTCTokenAddress = '0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3'; + const totalSupply = await api.call({ + abi: 'erc20:totalSupply', + target: stBTCTokenAddress, + }); + + const balances = {}; + sdk.util.sumSingleBalance(balances, 'coingecko:bitcoin', totalSupply / (1e18)); + return balances; +} + +module.exports = { + methodology: "Lorenzo, As the Bitcoin Liquidity Finance Layer", + bsc: { + tvl: bscTvl, + } +}; \ No newline at end of file From face47334fbc9d553d724400fc56b3400a1e2528 Mon Sep 17 00:00:00 2001 From: Samster91 <37342443+samster91@users.noreply.github.com> Date: Tue, 22 Oct 2024 11:49:05 +0200 Subject: [PATCH 0728/1768] Idle Dao - Fasanara Yield Vault (#11955) Co-authored-by: Samster91 Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/idle/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/idle/index.js b/projects/idle/index.js index 6cd4367607..e15ae60c79 100644 --- a/projects/idle/index.js +++ b/projects/idle/index.js @@ -41,8 +41,7 @@ const contracts = { // "0xd0DbcD556cA22d3f3c142e9a3220053FD7a247BC", // "0x1f5A97fB665e295303D2F7215bA2160cc5313c8E", // "0x8E0A8A5c1e5B3ac0670Ea5a613bB15724D51Fc37", // Instadapp stETH - "0x9e0c5ee5e4B187Cf18B23745FCF2b6aE66a9B52f", // Amphor wstETH - "0x1EB1b47D0d8BCD9D761f52D26FCD90bBa225344C" // Ethena USDe + "0xf6223C567F21E33e859ED7A045773526E9E3c2D5" // Fasanara Yield vault ] }, polygon: { From 365630c0ccc56592e0ce91d72948c7300b0f9cd2 Mon Sep 17 00:00:00 2001 From: Andre Date: Tue, 22 Oct 2024 13:15:03 +0300 Subject: [PATCH 0729/1768] Exmo adapter (#11986) Co-authored-by: Andre Kidd --- projects/exmo/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/exmo/index.js diff --git a/projects/exmo/index.js b/projects/exmo/index.js new file mode 100644 index 0000000000..f830a3aced --- /dev/null +++ b/projects/exmo/index.js @@ -0,0 +1,21 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + '0x7029B8aaE2399a9f4B82d4516D6D16A35A52ff2e', + ], + }, + doge: { + owners: [ + 'DC1GBAsLTJMvShigDk4UR3oVnkmiH4xaoE', + ] + }, + ripple: { + owners: [ + 'rDfvwaonnG198FJKiugQDn96kVW4Ej6bUX', + ] + }, +} + +module.exports = cexExports(config) \ No newline at end of file From 484cb3d3abb50637c3f3c36228b6476c272f622c Mon Sep 17 00:00:00 2001 From: "Bagful.io" Date: Tue, 22 Oct 2024 18:18:49 +0800 Subject: [PATCH 0730/1768] add bagful (#11980) Co-authored-by: Define101 <93603962+Define101@users.noreply.github.com> --- projects/bagful/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/bagful/index.js diff --git a/projects/bagful/index.js b/projects/bagful/index.js new file mode 100644 index 0000000000..f9543aa99f --- /dev/null +++ b/projects/bagful/index.js @@ -0,0 +1,25 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const AGGREGATOR = "0x6bD057Dae9aA5aE05c782F2eB988CBdE53Be9620"; + + +async function tvl(api) { + let pools = await api.call({ abi: abiInfo.poolTvls, target: AGGREGATOR }); + pools.forEach(pool=>{ + api.add(pool.poolAssets,pool.tvl) + }) + return await sumTokens2({api,resolveLP:true}) +} + + +module.exports = { +doublecounted: true, + linea: { + tvl, + }, +}; + +const abiInfo = { + poolTvls: + "function getPoolTotalTvl() view returns (tuple(uint256 pid, address poolAddress,address poolAssets, uint256 tvl)[])", +}; From defbc4e598bbd1fcf64faef0bb43d837a3d94cfa Mon Sep 17 00:00:00 2001 From: tstemko <57684389+tstemko@users.noreply.github.com> Date: Tue, 22 Oct 2024 06:21:37 -0400 Subject: [PATCH 0731/1768] Add Flare, Mode and Re.al to tvl calcs (#11972) Co-authored-by: Tatyana Stemkovski --- projects/ichifarm/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index 15462f2083..89cff51d35 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -95,6 +95,11 @@ const config = { { factory: '0x89FFdaa18b296d9F0CF02fBD88e5c633FEFA5f34', fromBlock: 79156621, isAlgebra: true, }, // Spiritswap ] }, + flare: { + vaultConfigs: [ + { factory: '0x85a4dd4ed356A7976a8302b1b690202d58583c55', fromBlock: 30879155, isAlgebra: false, }, // SparkDex + ] + }, fuse: { vaultConfigs: [ { factory: '0xfBf38920cCbCFF7268Ad714ae5F9Fad6dF607065', fromBlock: 30026180, isAlgebra: false, }, // Voltage @@ -124,6 +129,11 @@ const config = { { factory: '0xbBB97d634460DACCA0d41E249510Bb741ef46ad3', fromBlock: 39366721, isAlgebra: false, }, // Cleo ] }, + mode: { + vaultConfigs: [ + { factory: '0x9FAb4bdD4E05f5C023CCC85D2071b49791D7418F', fromBlock: 12395812, isAlgebra: true, }, // Kim + ] + }, op_bnb: { vaultConfigs: [ { factory: '0xADDA3A15EA71c223a82Af86d4578EF2B076035F1', fromBlock: 13911597, isAlgebra: true, }, // Thena @@ -143,6 +153,11 @@ const config = { { factory: '0x1721cB3ff3cAF70a79bDE9d771B27646ed8115b1', fromBlock: 11102475, isAlgebra: true, }, // QuickSwap ] }, + real: { + vaultConfigs: [ + { factory: '0x860F3881aCBbF05D48a324C5b8ca9004D31A146C', fromBlock: 599247, isAlgebra: false, }, // Pearl + ] + }, scroll: { vaultConfigs: [ { factory: '0xb42D5956cDe4386B65C087CfCD16910aB6114F15', fromBlock: 5264782, isAlgebra: false, }, // Metavault From a58d53780fcf98242b527603496716a226b20d14 Mon Sep 17 00:00:00 2001 From: yanfeizuo <69463394+yanfeizuo@users.noreply.github.com> Date: Tue, 22 Oct 2024 18:21:56 +0800 Subject: [PATCH 0732/1768] Add bsquared for sumer (#11979) --- projects/sumer/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index 797a3d92bd..9170858fb4 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -5,5 +5,6 @@ module.exports = { base: compoundExports2({ comptroller: '0x611375907733D9576907E125Fb29704712F0BAfA' }), arbitrum: compoundExports2({ comptroller: '0xBfb69860C91A22A2287df1Ff3Cdf0476c5aab24A' }), ethereum: compoundExports2({ comptroller: '0x60A4570bE892fb41280eDFE9DB75e1a62C70456F' }), - zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }) + zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }), + bsquared: compoundExports2({ comptroller: '0xdD9C863197df28f47721107f94eb031b548B5e48' }), } \ No newline at end of file From dfc818716a0711d60a8e5a397c5ed497da13ba84 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:24:07 +0200 Subject: [PATCH 0733/1768] Feat: Adapter, lisUSD: add pool2 (#11969) --- projects/helio-money/index.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index 6dcb3134de..94e1253e48 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -2,6 +2,31 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { staking } = require("../helper/staking"); const { sumTokensExport } = require("../helper/unknownTokens"); +const lisLPs = [ + "0xe8f4644637f127aFf11F9492F41269eB5e8b8dD2", // Lista LP Stable-LP + "0xFf5ed1E64aCA62c822B178FFa5C36B40c112Eb00", // Lista LP aSnBNB-WBNB + "0x4b2D67Bf25245783Fc4C33a48962775437F9159c", // Lista LP aUSDT-LISTA + "0xC23d348f9cC86dDB059ec798e87E7F76FBC077C1", // Lista LP aHAY-USDT + "0xF6aB5cfdB46357f37b0190b793fB199D62Dcf504", // Lista LP UV-17-THE + "0x1Cf9c6D475CdcA67942d41B0a34BD9cB9D336C4d", // Lista LP sAMM-HAY/FRAX + ]; + +const abi = { + lpToken: "address:lpToken", + lpTotalSupply: "uint256:lpTotalSupply", +}; + +const pool2 = async (api) => { + const [lisLpTokens, lisLpBalances] = await Promise.all([ + api.multiCall({calls: lisLPs.map((lis) => ({ target: lis })), abi: abi.lpToken }), + api.multiCall({calls: lisLPs.map((lis) => ({ target: lis })), abi: abi.lpTotalSupply }), + ]); + + lisLPs.forEach((_lp, i) => { + api.add(lisLpTokens[i], lisLpBalances[i]) + }) +} + module.exports = { methodology: "The TVL is calculated by summing the values of tokens held in the specified vault addresses", hallmarks: [ @@ -66,6 +91,7 @@ module.exports = { ], ], }), + pool2, staking: staking('0xd0C380D31DB43CD291E2bbE2Da2fD6dc877b87b3','0xFceB31A79F71AC9CBDCF853519c1b12D379EdC46') }, }; From 68632a69ba72c8b3fe3ea28971eba649d88b9738 Mon Sep 17 00:00:00 2001 From: 0x77 <42128352+0x0077@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:28:15 +0800 Subject: [PATCH 0734/1768] Add Oxiswap adapter (#11960) --- projects/helper/chain/fuel.js | 15 +++++++++++++++ projects/oxiswap/index.js | 12 ++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 projects/oxiswap/index.js diff --git a/projects/helper/chain/fuel.js b/projects/helper/chain/fuel.js index 240224438a..fd1dd1e077 100644 --- a/projects/helper/chain/fuel.js +++ b/projects/helper/chain/fuel.js @@ -28,7 +28,22 @@ async function sumTokens({ api, owner, owners, token, tokens = [], tokensAndOwne } } +async function sumAllTokens({ api, owners = [] }) { + const query = owners.map((owner, i) => `q${i}: contractBalances( + filter: { contract: "${owner}" }, first: 100 + ) { nodes { assetId amount } }`).join('\n'); + + const results = await client.request(`{${query}}`); + Object.values(results).forEach(res => { + res.nodes.forEach(node => { + api.add(node.assetId, node.amount); + }); + }); + + return transformBalances('fuel', api.getBalances()); +} module.exports = { sumTokens, + sumAllTokens } \ No newline at end of file diff --git a/projects/oxiswap/index.js b/projects/oxiswap/index.js new file mode 100644 index 0000000000..884a12beef --- /dev/null +++ b/projects/oxiswap/index.js @@ -0,0 +1,12 @@ +const { sumAllTokens } = require("../helper/chain/fuel") + +async function tvl(_, _1, _2, { api }) { + const pairContract = '0x0da1be8528c8f546521ba9507d334cdb06cbc8b8842b3c0a871b1b4195635363'; + return sumAllTokens({ api, owners: [pairContract] }); +} + +module.exports = { + methodology: "TVL is calculated by summing the value of all tokens held in the pair contract.", + fuel: { tvl }, + timetravel: false, +}; \ No newline at end of file From 02a1b87ee1b4b03ad968f42ecc2821cc857ad2a7 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 22 Oct 2024 13:38:19 +0100 Subject: [PATCH 0735/1768] add historical to test.js --- README.md | 4 +++- test.js | 14 ++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a5021fe702..c78ecdb136 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,10 @@ This is a work in progress. The goal is to eventually handle historical data. De If you have any suggestions, want to contribute or want to chat, please join [our discord](https://discord.defillama.com/) and drop a message. ## Testing adapters -``` +```bash node test.js projects/pangolin/index.js +# Add a timestamp at the end to run the adapter at a historical timestamp +node test.js projects/aave/v3.js 1729080692 ``` ## Changing RPC providers diff --git a/test.js b/test.js index 1518dd2ae7..2533a52f6d 100644 --- a/test.js +++ b/test.js @@ -10,7 +10,7 @@ const path = require("path"); require("dotenv").config(); const { ENV_KEYS } = require("./projects/helper/env"); const { util: { - blocks: { getCurrentBlocks }, + blocks: { getBlocks }, humanizeNumber: { humanizeNumber }, } } = require("@defillama/sdk"); const { util } = require("@defillama/sdk"); @@ -142,9 +142,15 @@ function validateHallmarks(hallmark) { // await initCache() const chains = Object.keys(module).filter(item => typeof module[item] === 'object' && !Array.isArray(module[item])); checkExportKeys(module, passedFile, chains) - const unixTimestamp = Math.round(Date.now() / 1000) - 60; - // const { chainBlocks } = await getCurrentBlocks([]); // fetch only ethereum block for local test - const chainBlocks = {} + + let unixTimestamp = Math.round(Date.now() / 1000) - 60; + let chainBlocks = {} + const passedTimestamp = process.argv[3] + if(passedTimestamp !== undefined){ + unixTimestamp = Number(passedTimestamp) + const res = await getBlocks(unixTimestamp, chains) + chainBlocks = res.chainBlocks + } const ethBlock = chainBlocks.ethereum; const usdTvls = {}; const tokensBalances = {}; From ae2709fbeeecb1994c2ad621260155e8ae96552d Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:42:55 +0100 Subject: [PATCH 0736/1768] add wallet obelisk (#11988) --- projects/obelisk/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/obelisk/index.js b/projects/obelisk/index.js index 46abeb6122..67023bb3ca 100644 --- a/projects/obelisk/index.js +++ b/projects/obelisk/index.js @@ -4,7 +4,8 @@ const sdk = require('@defillama/sdk') const staticAddresses = [ 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP', - 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj' + 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj', + 'bc1pr6pga0d44xm3t8z36qnya6sfznsm8fwkn507x6gqt86xtnvm4h4sj2zqus' ] const abi = { From d21e0132feae6d28c8d1359b8bdb4e592521d567 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:34:57 -0600 Subject: [PATCH 0737/1768] Create index.js --- projects/babylon/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/babylon/index.js diff --git a/projects/babylon/index.js b/projects/babylon/index.js new file mode 100644 index 0000000000..fd074ef267 --- /dev/null +++ b/projects/babylon/index.js @@ -0,0 +1,22 @@ +// Babylon Chain TVL Adapter + +const axios = require('axios'); + +async function tvl(api) { + // Call the Babylon staking API to get the TVL data + const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); + const activeTvl = response.data.data.active_tvl; + + // Add the active TVL to the balances + api.add('bitcoin', activeTvl); +} + +module.exports = { + methodology: 'The TVL is calculated by taking the total Bitcoin (in satoshis) locked in the Babylon Chain staking protocol.', + start: 1729000000, + timetravel: false, // Disallow backfill as the API doesn't support timestamps + misrepresentedTokens: false, + bitcoin: { + tvl, + }, +}; \ No newline at end of file From 1b65b6718dda74953bdcfd1a4d8c5685f9a2ad69 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:42:19 -0600 Subject: [PATCH 0738/1768] Update index.js --- projects/babylon/index.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index fd074ef267..97d05c5c34 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -1,20 +1,28 @@ -// Babylon Chain TVL Adapter - const axios = require('axios'); async function tvl(api) { - // Call the Babylon staking API to get the TVL data - const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); - const activeTvl = response.data.data.active_tvl; + try { + const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); + const activeTvl = response.data.data.active_tvl; + + + console.log('Active TVL (in satoshis):', activeTvl); - // Add the active TVL to the balances - api.add('bitcoin', activeTvl); + + if (activeTvl) { + api.add('bitcoin', activeTvl); + } else { + console.error('No active TVL returned from API.'); + } + } catch (error) { + console.error('Error fetching TVL:', error); + } } module.exports = { methodology: 'The TVL is calculated by taking the total Bitcoin (in satoshis) locked in the Babylon Chain staking protocol.', start: 1729000000, - timetravel: false, // Disallow backfill as the API doesn't support timestamps + timetravel: false, misrepresentedTokens: false, bitcoin: { tvl, From 8d1e05deb7a0e3ac459f9d40796c5657a25ac781 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:52:17 -0600 Subject: [PATCH 0739/1768] Update index.js --- projects/babylon/index.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index 97d05c5c34..fb6f748a28 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -3,16 +3,17 @@ const axios = require('axios'); async function tvl(api) { try { const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); - const activeTvl = response.data.data.active_tvl; + const activeTvlSatoshis = response.data.data.active_tvl; - console.log('Active TVL (in satoshis):', activeTvl); + const activeTvlBitcoin = activeTvlSatoshis / 100000000; - - if (activeTvl) { - api.add('bitcoin', activeTvl); + console.log('Active TVL (in Bitcoin):', activeTvlBitcoin); + + if (activeTvlBitcoin && activeTvlBitcoin > 0) { + api.add('bitcoin', activeTvlBitcoin); } else { - console.error('No active TVL returned from API.'); + console.error('No valid active TVL returned from API.'); } } catch (error) { console.error('Error fetching TVL:', error); @@ -20,9 +21,9 @@ async function tvl(api) { } module.exports = { - methodology: 'The TVL is calculated by taking the total Bitcoin (in satoshis) locked in the Babylon Chain staking protocol.', - start: 1729000000, - timetravel: false, + methodology: 'The TVL is calculated by taking the total Bitcoin locked in the Babylon Chain staking protocol.', + start: 1729000000, + timetravel: false, misrepresentedTokens: false, bitcoin: { tvl, From 58bad21591cc04b152b180c59b5f1acda4d35045 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:00:02 -0600 Subject: [PATCH 0740/1768] Update index.js --- projects/babylon/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index fb6f748a28..32e5b518b3 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -8,10 +8,14 @@ async function tvl(api) { const activeTvlBitcoin = activeTvlSatoshis / 100000000; + console.log('Active TVL (in Bitcoin):', activeTvlBitcoin); + if (activeTvlBitcoin && activeTvlBitcoin > 0) { + console.log('Attempting to add TVL to API...'); api.add('bitcoin', activeTvlBitcoin); + console.log('TVL added:', activeTvlBitcoin); } else { console.error('No valid active TVL returned from API.'); } @@ -21,9 +25,9 @@ async function tvl(api) { } module.exports = { - methodology: 'The TVL is calculated by taking the total Bitcoin locked in the Babylon Chain staking protocol.', + methodology: 'The TVL is calculated by taking the total Bitcoin locked in the Babylon Chain staking protocol, fetched from the Babylon API.', start: 1729000000, - timetravel: false, + timetravel: false, misrepresentedTokens: false, bitcoin: { tvl, From 50661ceb7dbb4b83b9b9f5931613c9d40af19340 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:38:01 -0600 Subject: [PATCH 0741/1768] Update index.js --- projects/babylon/index.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index 32e5b518b3..b21bff1aa3 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -4,30 +4,26 @@ async function tvl(api) { try { const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); const activeTvlSatoshis = response.data.data.active_tvl; - - const activeTvlBitcoin = activeTvlSatoshis / 100000000; - console.log('Active TVL (in Bitcoin):', activeTvlBitcoin); - if (activeTvlBitcoin && activeTvlBitcoin > 0) { console.log('Attempting to add TVL to API...'); - api.add('bitcoin', activeTvlBitcoin); - console.log('TVL added:', activeTvlBitcoin); + api.add('bitcoin', activeTvlBitcoin.toString()); + console.log('TVL added successfully:', activeTvlBitcoin); } else { console.error('No valid active TVL returned from API.'); } } catch (error) { - console.error('Error fetching TVL:', error); + console.error('Error fetching or adding TVL:', error); } } module.exports = { methodology: 'The TVL is calculated by taking the total Bitcoin locked in the Babylon Chain staking protocol, fetched from the Babylon API.', - start: 1729000000, - timetravel: false, + start: 1729000000, + timetravel: false, misrepresentedTokens: false, bitcoin: { tvl, From 8ca04e619f248c58b12b5d33dfca97c0ee239bb5 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:36:21 -0600 Subject: [PATCH 0742/1768] Update index.js --- projects/babylon/index.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index b21bff1aa3..00a63908d9 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -1,27 +1,34 @@ const axios = require('axios'); -async function tvl(api) { +async function tvl() { try { + console.log('Fetching TVL from Babylon API...'); const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); + console.log('Full API Response:', response.data); + const activeTvlSatoshis = response.data.data.active_tvl; - const activeTvlBitcoin = activeTvlSatoshis / 100000000; - - console.log('Active TVL (in Bitcoin):', activeTvlBitcoin); + const activeTvlBitcoin = activeTvlSatoshis / 1e8; + + console.log('TVL in Bitcoin being added:', activeTvlBitcoin); if (activeTvlBitcoin && activeTvlBitcoin > 0) { - console.log('Attempting to add TVL to API...'); - api.add('bitcoin', activeTvlBitcoin.toString()); - console.log('TVL added successfully:', activeTvlBitcoin); + const balances = { + 'bitcoin': activeTvlBitcoin, + }; + console.log('TVL added successfully:', balances); + return balances; } else { console.error('No valid active TVL returned from API.'); + return {}; } } catch (error) { console.error('Error fetching or adding TVL:', error); + return {}; } } module.exports = { - methodology: 'The TVL is calculated by taking the total Bitcoin locked in the Babylon Chain staking protocol, fetched from the Babylon API.', + methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', start: 1729000000, timetravel: false, misrepresentedTokens: false, From a970932faf9b06ed1aec0b12bf459e777468b3d5 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:50:35 -0600 Subject: [PATCH 0743/1768] Update index.js --- projects/babylon/index.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index 00a63908d9..63d124567e 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -2,34 +2,25 @@ const axios = require('axios'); async function tvl() { try { - console.log('Fetching TVL from Babylon API...'); const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); - console.log('Full API Response:', response.data); - const activeTvlSatoshis = response.data.data.active_tvl; const activeTvlBitcoin = activeTvlSatoshis / 1e8; - console.log('TVL in Bitcoin being added:', activeTvlBitcoin); - if (activeTvlBitcoin && activeTvlBitcoin > 0) { - const balances = { - 'bitcoin': activeTvlBitcoin, + return { + bitcoin: activeTvlBitcoin, }; - console.log('TVL added successfully:', balances); - return balances; } else { - console.error('No valid active TVL returned from API.'); return {}; } } catch (error) { - console.error('Error fetching or adding TVL:', error); return {}; } } module.exports = { methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', - start: 1729000000, + start: 1729000000, timetravel: false, misrepresentedTokens: false, bitcoin: { From 30969faec6573951ebc2b212b4b0c03b62b989d0 Mon Sep 17 00:00:00 2001 From: domodata <137194840+domodata@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:59:00 -0600 Subject: [PATCH 0744/1768] Update index.js --- projects/babylon/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index 63d124567e..19d40e19cb 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -20,7 +20,7 @@ async function tvl() { module.exports = { methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', - start: 1729000000, + start: 1724351485, timetravel: false, misrepresentedTokens: false, bitcoin: { From 03661f6156a4e233f533067739fef9959c2e0d2d Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@proton.me> Date: Tue, 22 Oct 2024 15:42:10 +0200 Subject: [PATCH 0745/1768] add doublecounted:true --- projects/babylon/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index 19d40e19cb..c43236e464 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -19,6 +19,7 @@ async function tvl() { } module.exports = { + doublecounted:true, methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', start: 1724351485, timetravel: false, From b5ee65d971efd068473609d398f827a892e0a4db Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:05:24 +0100 Subject: [PATCH 0746/1768] Add apechain camelot (#11989) Co-authored-by: domodata <137194840+domodata@users.noreply.github.com> Co-authored-by: 0xpeluche <0xpeluche@proton.me> --- projects/babylon/index.js | 30 ++++++++++++++++++++++++++++++ projects/camelot-v2/index.js | 2 +- projects/camelot/index.js | 3 +++ projects/helper/chains.json | 1 + projects/helper/env.js | 3 ++- projects/helper/tokenMapping.js | 6 +++++- 6 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 projects/babylon/index.js diff --git a/projects/babylon/index.js b/projects/babylon/index.js new file mode 100644 index 0000000000..c43236e464 --- /dev/null +++ b/projects/babylon/index.js @@ -0,0 +1,30 @@ +const axios = require('axios'); + +async function tvl() { + try { + const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); + const activeTvlSatoshis = response.data.data.active_tvl; + const activeTvlBitcoin = activeTvlSatoshis / 1e8; + + if (activeTvlBitcoin && activeTvlBitcoin > 0) { + return { + bitcoin: activeTvlBitcoin, + }; + } else { + return {}; + } + } catch (error) { + return {}; + } +} + +module.exports = { + doublecounted:true, + methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', + start: 1724351485, + timetravel: false, + misrepresentedTokens: false, + bitcoin: { + tvl, + }, +}; \ No newline at end of file diff --git a/projects/camelot-v2/index.js b/projects/camelot-v2/index.js index 4531ce7b67..ec282cb373 100644 --- a/projects/camelot-v2/index.js +++ b/projects/camelot-v2/index.js @@ -1,4 +1,3 @@ - const { uniV3Export } = require('../helper/uniswapV3') const { mergeExports } = require('../helper/utils'); @@ -13,6 +12,7 @@ const export2 = uniV3Export({ arbitrum: { factory: '0xd490f2f6990c0291597fd1247651b4e0dcf684dd', fromBlock: 75633510, isAlgebra: true, }, reya: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 2932166, isAlgebra: true, }, gravity: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 11988, isAlgebra: true, }, + apechain: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 60224, isAlgebra: true, }, }) module.exports = mergeExports([export1, export2 ]) \ No newline at end of file diff --git a/projects/camelot/index.js b/projects/camelot/index.js index 60c30208ca..195068af3f 100644 --- a/projects/camelot/index.js +++ b/projects/camelot/index.js @@ -20,5 +20,8 @@ module.exports = { }, gravity: { tvl: getUniTVL({factory: '0x7d8c6B58BA2d40FC6E34C25f9A488067Fe0D2dB4', useDefaultCoreAssets: true}) + }, + apechain: { + tvl: getUniTVL({factory: '0x7d8c6B58BA2d40FC6E34C25f9A488067Fe0D2dB4', useDefaultCoreAssets: true}) } }; \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 7f9d68aaf8..29abe24e0f 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -14,6 +14,7 @@ "ancient8", "archway", "area", + "apechain", "astar", "astrzk", "aura", diff --git a/projects/helper/env.js b/projects/helper/env.js index ea4b276e45..30372bc4a0 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -20,7 +20,8 @@ const DEFAULTS = { MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", SHAPE_RPC:'https://mainnet.shape.network', SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", - WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public" + WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", + APECHAIN_RPC: "https://rpc.apechain.com" } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 7589bfb91c..2dc87687ef 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -106,11 +106,15 @@ const fixBalancesTokens = { '0x91b3559edb2619cde8ffb2aa7b3c3be97efd794ea46700db7092abeee62281b0': { coingeckoId: 'renzo-restaked-eth', decimals: 9 }, }, wc: { - '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1': { coingeckoId: 'usd-coin', decimals: 6 }, '0x2cFc85d8E48F8EAB294be644d9E25C3030863003': { coingeckoId: 'worldcoin-wld', decimals: 18 }, '0x03C7054BCB39f7b2e5B2c7AcB37583e32D70Cfa3': { coingeckoId: 'bitcoin', decimals: 8 }, '0x4200000000000000000000000000000000000006': { coingeckoId: 'weth', decimals: 18 } + }, + apechain: { + '0x48b62137EdfA95a428D35C09E44256a739F6B557': { coingeckoId: 'wrapped-apecoin', decimals: 18 }, + '0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4': { coingeckoId: 'savings-dai', decimals: 18 }, + '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, } } From 27922a9893310ae7ac6027f71690a7e1e96d30e1 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:41:52 +0100 Subject: [PATCH 0747/1768] doublecounted Babylon projects (#11992) --- projects/allo/index.js | 1 + projects/babylon/index.js | 1 - projects/lombard/index.js | 1 + projects/lorenzo/index.js | 1 + projects/pstake-btc/index.js | 1 + projects/solv-btc-lst/index.js | 1 + projects/xlink-btc-lst/index.js | 1 + 7 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/allo/index.js b/projects/allo/index.js index 3cd9652cc9..7e35687d24 100644 --- a/projects/allo/index.js +++ b/projects/allo/index.js @@ -12,6 +12,7 @@ const owner = [ module.exports = { methodology: `Total amount of BTC in restaked on babylon`, + doublecounted:true, bitcoin: { tvl: sumTokensExport({ owner }), }, diff --git a/projects/babylon/index.js b/projects/babylon/index.js index c43236e464..19d40e19cb 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -19,7 +19,6 @@ async function tvl() { } module.exports = { - doublecounted:true, methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', start: 1724351485, timetravel: false, diff --git a/projects/lombard/index.js b/projects/lombard/index.js index 4ca0729ebd..a301f706dd 100644 --- a/projects/lombard/index.js +++ b/projects/lombard/index.js @@ -35,6 +35,7 @@ async function tvl() { } module.exports = { + doublecounted:true, timetravel: false, isHeavyProtocol: true, bitcoin: { diff --git a/projects/lorenzo/index.js b/projects/lorenzo/index.js index 0c442499f9..fe745f0aa1 100644 --- a/projects/lorenzo/index.js +++ b/projects/lorenzo/index.js @@ -35,6 +35,7 @@ const LorenzoOwners = [ module.exports = { methodology: "Lorenzo, As the Bitcoin Liquidity Finance Layer", + doublecounted:true, bitcoin: { tvl: sumTokensExport({ owners : LorenzoOwners }), } diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 19248616fa..64adca0a4e 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -5,6 +5,7 @@ const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4c module.exports = { methodology: `Total amount of BTC in ${owner.join(", ")}. Restaked on babylon`, + doublecounted:true, bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owner })]), }, diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 611daf9347..1bde1c82f9 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -13,6 +13,7 @@ async function tvl() { module.exports = { methodology: 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.', + doublecounted:true, bitcoin: { tvl } diff --git a/projects/xlink-btc-lst/index.js b/projects/xlink-btc-lst/index.js index 6dd544cfcf..2e08d588ed 100644 --- a/projects/xlink-btc-lst/index.js +++ b/projects/xlink-btc-lst/index.js @@ -7,6 +7,7 @@ const owners = [ module.exports = { methodology: "Staking tokens via Babylon counts as TVL", + doublecounted:true, bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), }} \ No newline at end of file From 6a831b01e8e5b2fbc3f68e5a61a181dd245c2077 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 22 Oct 2024 16:20:35 +0100 Subject: [PATCH 0748/1768] add more wallets HTX/huobi (#11995) --- projects/huobi/index.js | 325 ++++++++++++++++++++++------------------ 1 file changed, 183 insertions(+), 142 deletions(-) diff --git a/projects/huobi/index.js b/projects/huobi/index.js index b26b1f88d3..25b5c5e65a 100644 --- a/projects/huobi/index.js +++ b/projects/huobi/index.js @@ -1,205 +1,246 @@ -const { cexExports } = require('../helper/cex') -const { mergeExports, sliceIntoChunks, sleep } = require('../helper/utils') -const { post, get } = require('../helper/http') -const sdk = require('@defillama/sdk') +const { cexExports } = require("../helper/cex"); +const { mergeExports, sliceIntoChunks, sleep } = require("../helper/utils"); +const { post, get } = require("../helper/http"); +const sdk = require("@defillama/sdk"); const config = { bitcoin: { owners: [ - '12qTdZHx6f77aQ74CPCZGSY47VaRwYjVD8', - '143gLvWYUojXaWZRrxquRKpVNTkhmr415B', - // '1KVpuCfhftkzJ67ZUegaMuaYey7qni7pPj', this wallet is backing USDD acording here https://prnt.sc/i3cFaak7H9Y8. For that reason, it should not included as HTX. + "12qTdZHx6f77aQ74CPCZGSY47VaRwYjVD8", + "143gLvWYUojXaWZRrxquRKpVNTkhmr415B", + // '1KVpuCfhftkzJ67ZUegaMuaYey7qni7pPj', this wallet is backing USDD acording here https://prnt.sc/i3cFaak7H9Y8. For that reason, it should not included as HTX. //These 3 addresses has 48,555 #Bitcoin. This is only less than 3% of the total high value assets we have, including btc, usd, stablecoins, T-bills.. According to Justin Sun https://twitter.com/justinsuntron/status/1590311559242612743 - '14XKsv8tT6tt8P8mfDQZgNF8wtN5erNu5D', - '1LXzGrDQqKqVBqxfGDUyhC6rTRBN5s8Sbj', - '1HckjUpRGcrrRAtFaaCAUaGjsPx9oYmLaZ', // add on 08/08/2023 (we defillama) - '1L15W6b9vkxV81xW5HDtmMBycrdiettHEL', // add on 08/08/2023 (we defillama) - '14o5ywJJmLPJe8egNo7a5fSdtEgarkus33', // add on 08/08/2023 (we defillama) - '1BuiWj9wPbQwNY97xU53LRPhzqNQccSquM', // add on 08/08/2023 (we defillama) - '1AQLXAB6aXSVbRMjbhSBudLf1kcsbWSEjg', // add on 23/02/2024 (we defillama) - '1ENWYLQZJRAZGtwBmoWrhmTtDUtJ5LseVj' + "14XKsv8tT6tt8P8mfDQZgNF8wtN5erNu5D", + "1LXzGrDQqKqVBqxfGDUyhC6rTRBN5s8Sbj", + "1HckjUpRGcrrRAtFaaCAUaGjsPx9oYmLaZ", // add on 08/08/2023 (we defillama) + "1L15W6b9vkxV81xW5HDtmMBycrdiettHEL", // add on 08/08/2023 (we defillama) + "14o5ywJJmLPJe8egNo7a5fSdtEgarkus33", // add on 08/08/2023 (we defillama) + "1BuiWj9wPbQwNY97xU53LRPhzqNQccSquM", // add on 08/08/2023 (we defillama) + "1AQLXAB6aXSVbRMjbhSBudLf1kcsbWSEjg", // add on 23/02/2024 (we defillama) + "1ENWYLQZJRAZGtwBmoWrhmTtDUtJ5LseVj", ], }, ethereum: { owners: [ - '0xa929022c9107643515f5c777ce9a910f0d1e490c', - '0x18709e89bd403f470088abdacebe86cc60dda12e', - '0xcac725bef4f114f728cbcfd744a731c2a463c3fc', - '0x0511509A39377F1C6c78DB4330FBfcC16D8A602f', - '0x1205E4f0D2f02262E667fd72f95a68913b4F7462', - '0xE4818f8fDe0C977A01DA4Fa467365B8bF22b071E', - '0x5C985E89DDe482eFE97ea9f1950aD149Eb73829B', - '0xc589b275e60dda57ad7e117c6dd837ab524a5666', - '0x6b2286fc3a9265bab3f064808022aca54de4b6ce', // add on 08/08/2023 (we defillama) - '0x3d655889d197125fb90dcb72e4a287a8410ed1b9', // add on 08/08/2023 (we defillama) - '0x2abc22eb9a09ebbe7b41737ccde147f586efeb6a', // add on 08/08/2023 (we defillama) - '0xa5d7f0f7027fa8f4d1be8042e1e43bbdec36951e', // add on 08/08/2023 (we defillama) - '0xeee28d484628d41a82d01e21d12e2e78d69920da', // add on 08/08/2023 (we defillama) - '0x6748f50f686bfbca6fe8ad62b22228b87f31ff2b', // add on 08/08/2023 (we defillama) - '0x34189c75cbb13bdb4f5953cda6c3045cfca84a9e', // add on 08/08/2023 (we defillama) - '0x1062a747393198f70f71ec65a582423dba7e5ab3', // add on 08/08/2023 (we defillama) - '0xab5c66752a9e8167967685f1450532fb96d5d24f', // add on 08/08/2023 (we defillama) - '0xdb0e89a9b003a28a4055ef772e345e8089987bfd', // add on 08/08/2023 (we defillama) - '0xfdb16996831753d5331ff813c29a93c76834a0ad', // add on 08/08/2023 (we defillama) - '0x46705dfff24256421a05d056c29e81bdc09723b8', // add on 08/08/2023 (we defillama) - '0xfd54078badd5653571726c3370afb127351a6f26', // add on 08/08/2023 (we defillama) - '0x07ef60deca209ea0f3f3f08c1ad21a6db5ef9d33', // add on 08/08/2023 (we defillama) - '0x18916e1a2933cb349145a280473a5de8eb6630cb', // add on 08/08/2023 (we defillama) - '0xfa4b5be3f2f84f56703c42eb22142744e95a2c58', // add on 08/08/2023 (we defillama) - '0x0a98fb70939162725ae66e626fe4b52cff62c2e5', // add on 08/08/2023 (we defillama) - '0x918800e018a0eeea672740f88a60091c7d327a79', // add on 08/08/2023 (we defillama) - '0xadb2b42f6bd96f5c65920b9ac88619dce4166f94', // add on 08/08/2023 (we defillama) - '0x42dc966b7ecc3c6cc73e7bc04862859d5bddce65', // add on 08/08/2023 (we defillama) - '0xe8d8a02601f54acb6fb69537be1f1d7cc76ccd8c', // add on 08/08/2023 (we defillama) - '0xf881bcb3705926cea9c598ab05a837cf41a833a9', // add on 08/08/2023 (we defillama) - '0xa03400e098f4421b34a3a44a1b4e571419517687', - '0x598273ea2cabd9f798564877851788c5e0d5b7b9', // start add on 23/02/2024 (we defillama) - '0x4fb312915b779b1339388e14b6d079741ca83128', - '0x30741289523c2e4d2a62c7d6722686d14e723851', - '0xe93381fb4c4f14bda253907b18fad305d799241a', // end add on 23/02/2024 (we defillama) - '0x6663613FbD927cE78abBF7F5Ca7e2c3FE0d96d18', // add on 22/07/2024 + "0xa929022c9107643515f5c777ce9a910f0d1e490c", + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0xcac725bef4f114f728cbcfd744a731c2a463c3fc", + "0x0511509A39377F1C6c78DB4330FBfcC16D8A602f", + "0x1205E4f0D2f02262E667fd72f95a68913b4F7462", + "0xE4818f8fDe0C977A01DA4Fa467365B8bF22b071E", + "0x5C985E89DDe482eFE97ea9f1950aD149Eb73829B", + "0xc589b275e60dda57ad7e117c6dd837ab524a5666", + "0x6b2286fc3a9265bab3f064808022aca54de4b6ce", // add on 08/08/2023 (we defillama) + "0x3d655889d197125fb90dcb72e4a287a8410ed1b9", // add on 08/08/2023 (we defillama) + "0x2abc22eb9a09ebbe7b41737ccde147f586efeb6a", // add on 08/08/2023 (we defillama) + "0xa5d7f0f7027fa8f4d1be8042e1e43bbdec36951e", // add on 08/08/2023 (we defillama) + "0xeee28d484628d41a82d01e21d12e2e78d69920da", // add on 08/08/2023 (we defillama) + "0x6748f50f686bfbca6fe8ad62b22228b87f31ff2b", // add on 08/08/2023 (we defillama) + "0x34189c75cbb13bdb4f5953cda6c3045cfca84a9e", // add on 08/08/2023 (we defillama) + "0x1062a747393198f70f71ec65a582423dba7e5ab3", // add on 08/08/2023 (we defillama) + "0xab5c66752a9e8167967685f1450532fb96d5d24f", // add on 08/08/2023 (we defillama) + "0xdb0e89a9b003a28a4055ef772e345e8089987bfd", // add on 08/08/2023 (we defillama) + "0xfdb16996831753d5331ff813c29a93c76834a0ad", // add on 08/08/2023 (we defillama) + "0x46705dfff24256421a05d056c29e81bdc09723b8", // add on 08/08/2023 (we defillama) + "0xfd54078badd5653571726c3370afb127351a6f26", // add on 08/08/2023 (we defillama) + "0x07ef60deca209ea0f3f3f08c1ad21a6db5ef9d33", // add on 08/08/2023 (we defillama) + "0x18916e1a2933cb349145a280473a5de8eb6630cb", // add on 08/08/2023 (we defillama) + "0xfa4b5be3f2f84f56703c42eb22142744e95a2c58", // add on 08/08/2023 (we defillama) + "0x0a98fb70939162725ae66e626fe4b52cff62c2e5", // add on 08/08/2023 (we defillama) + "0x918800e018a0eeea672740f88a60091c7d327a79", // add on 08/08/2023 (we defillama) + "0xadb2b42f6bd96f5c65920b9ac88619dce4166f94", // add on 08/08/2023 (we defillama) + "0x42dc966b7ecc3c6cc73e7bc04862859d5bddce65", // add on 08/08/2023 (we defillama) + "0xe8d8a02601f54acb6fb69537be1f1d7cc76ccd8c", // add on 08/08/2023 (we defillama) + "0xf881bcb3705926cea9c598ab05a837cf41a833a9", // add on 08/08/2023 (we defillama) + "0xa03400e098f4421b34a3a44a1b4e571419517687", + "0x598273ea2cabd9f798564877851788c5e0d5b7b9", // start add on 23/02/2024 (we defillama) + "0x4fb312915b779b1339388e14b6d079741ca83128", + "0x30741289523c2e4d2a62c7d6722686d14e723851", + "0xe93381fb4c4f14bda253907b18fad305d799241a", // end add on 23/02/2024 (we defillama) + "0x6663613FbD927cE78abBF7F5Ca7e2c3FE0d96d18", // add on 22/07/2024 ], blacklistedTokens: [ - '0x0316eb71485b0ab14103307bf65a021042c6d380', // HBTC , we already track their backed BTC (1btc wallet on the list) - ] + "0x0316eb71485b0ab14103307bf65a021042c6d380", // HBTC , we already track their backed BTC (1btc wallet on the list) + ], }, polygon: { owners: [ - '0xd70250731a72c33bfb93016e3d1f0ca160df7e42', - '0x9a7ffd7f6c42ab805e0edf16c25101964c6326b6', // add on 23/02/2024 - '0x18709e89bd403f470088abdacebe86cc60dda12e', - '0x2177c77a1f3c4900de7668662706633db4688726', - ] + "0xd70250731a72c33bfb93016e3d1f0ca160df7e42", + "0x9a7ffd7f6c42ab805e0edf16c25101964c6326b6", // add on 23/02/2024 + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0x2177c77a1f3c4900de7668662706633db4688726", + ], }, litecoin: { owners: [ - 'MNky8PL58UjL14mcZm3ESvEkYQkzMY9kfu', - 'LYmdXiH1u6UN2bFetfTGnNuFgEG64FWVLU', - 'MGZv8pEkrsmpa2YAXRVXTtdCPBMnnR28fY', - 'MCRXTQ5uuBh6Qt8t4LuqZNvruZ5SmWXjrY' - ] + "MNky8PL58UjL14mcZm3ESvEkYQkzMY9kfu", + "LYmdXiH1u6UN2bFetfTGnNuFgEG64FWVLU", + "MGZv8pEkrsmpa2YAXRVXTtdCPBMnnR28fY", + "MCRXTQ5uuBh6Qt8t4LuqZNvruZ5SmWXjrY", + ], }, solana: { owners: [ - '88xTWZMeKfiTgbfEmPLdsUCQcZinwUfk25EBQZ21XMAZ', - 'BY4StcU9Y2BpgH8quZzorg31EGE4L1rjomN8FNsCBEcx', // add on 23/02/2024 - '8NBEbxLknGv5aRYefFrW2qFXoDZyi9fSHJNiJRvEcMBE', - '5bJcc9eb2XE7mqcET2xDuAdMGuXWybb4YPmAHLjKLhQG', - ] + "88xTWZMeKfiTgbfEmPLdsUCQcZinwUfk25EBQZ21XMAZ", + "BY4StcU9Y2BpgH8quZzorg31EGE4L1rjomN8FNsCBEcx", // add on 23/02/2024 + "8NBEbxLknGv5aRYefFrW2qFXoDZyi9fSHJNiJRvEcMBE", + "5bJcc9eb2XE7mqcET2xDuAdMGuXWybb4YPmAHLjKLhQG", + ], }, tron: { owners: [ - 'TYh6mgoMNZTCsgpYHBz7gttEfrQmDMABub', - 'TKgD8Qnx9Zw3DNvG6o83PkufnMbtEXis4T', - 'TCQQjfccKdMi4CnPAzmZW5TALH4HbwceVb', - 'TNaRAoLUyYEV2uF7GUrzSjRQTU8v5ZJ5VR', - 'TDToUxX8sH4z6moQpK3ZLAN24eupu2ivA4', - 'TCiRCBNFrL6bFKWL94yWQi5hNMGNp1Nu27', - 'TGn1uvntAVntT1pG8o7qoKkbViiYfeg6Gj', - 'TAuUCiH4JVNBZmDnEDZkXEUXDARdGpXTmX', - 'TF2fmSbg5HAD34KPUH7WtWCxxvgXHohzYM', - 'THZovMcKoZaV9zzFTWteQYd2f3NEvnzxAM', - // 'TZ1SsapyhKNWaVLca6P2qgVzkHTdk6nkXa', // this wallet is backing USDD acording here https://prnt.sc/lvIQUtCNbk2X. For that reason, it should not included as HTX. - 'TDvf1dSBhR7dEskJs17HxGHheJrjXhiFyM', - 'TUJGLHo3rq4EAUY1LHRhNkHPX8qmrv9WFs', // add on 08/08/2023 (we defillama) - 'TRSXRWudzfzY4jH7AaMowdMNUXDkHisbcd', // add on 08/08/2023 (we defillama) - 'TU1ZA8T2g8PvLK8BfM7N94xpmSSpyfxZoK', - 'TFTWNgDBkQ5wQoP8RXpRznnHvAVV8x5jLu', // add on 23/02/2024 - 'TK86Qm97uM848dMk8G7xNbJB7zG1uW3h1n', - 'TT5iK8oqGEyRKJAnRwrLSZ4fM5y77F2LNT', - ] + "TYh6mgoMNZTCsgpYHBz7gttEfrQmDMABub", + "TKgD8Qnx9Zw3DNvG6o83PkufnMbtEXis4T", + "TCQQjfccKdMi4CnPAzmZW5TALH4HbwceVb", + "TNaRAoLUyYEV2uF7GUrzSjRQTU8v5ZJ5VR", + "TDToUxX8sH4z6moQpK3ZLAN24eupu2ivA4", + "TCiRCBNFrL6bFKWL94yWQi5hNMGNp1Nu27", + "TGn1uvntAVntT1pG8o7qoKkbViiYfeg6Gj", + "TAuUCiH4JVNBZmDnEDZkXEUXDARdGpXTmX", + "TF2fmSbg5HAD34KPUH7WtWCxxvgXHohzYM", + "THZovMcKoZaV9zzFTWteQYd2f3NEvnzxAM", + // 'TZ1SsapyhKNWaVLca6P2qgVzkHTdk6nkXa', // this wallet is backing USDD acording here https://prnt.sc/lvIQUtCNbk2X. For that reason, it should not included as HTX. + "TDvf1dSBhR7dEskJs17HxGHheJrjXhiFyM", + "TUJGLHo3rq4EAUY1LHRhNkHPX8qmrv9WFs", // add on 08/08/2023 (we defillama) + "TRSXRWudzfzY4jH7AaMowdMNUXDkHisbcd", // add on 08/08/2023 (we defillama) + "TU1ZA8T2g8PvLK8BfM7N94xpmSSpyfxZoK", + "TFTWNgDBkQ5wQoP8RXpRznnHvAVV8x5jLu", // add on 23/02/2024 + "TK86Qm97uM848dMk8G7xNbJB7zG1uW3h1n", + "TT5iK8oqGEyRKJAnRwrLSZ4fM5y77F2LNT", + ], }, algorand: { - owners: ['J4AEINCSSLDA7LNBNWM4ZXFCTLTOZT5LG3F5BLMFPJYGFWVCMU37EZI2AM'] + owners: ["J4AEINCSSLDA7LNBNWM4ZXFCTLTOZT5LG3F5BLMFPJYGFWVCMU37EZI2AM"], }, avax: { owners: [ - '0xe195b82df6a797551eb1acd506e892531824af27', - '0xa77ff0e1c52f58363a53282624c7baa5fa91687d', //start add on 23/02/2024 - '0x18709e89bd403f470088abdacebe86cc60dda12e', - '0x8b6a3587676719a4fecbb24b503a3634c44a44d5', - ] + "0xe195b82df6a797551eb1acd506e892531824af27", + "0xa77ff0e1c52f58363a53282624c7baa5fa91687d", //start add on 23/02/2024 + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0x8b6a3587676719a4fecbb24b503a3634c44a44d5", + ], }, eos: { - owners: ['vuniyuoxoeub'], + owners: ["vuniyuoxoeub"], }, ripple: { owners: [ - 'rKUDvXFJMFu65LqPTH3Yfpii4rbKT9bSQT', - 'raC4udvEeeni6aLPHbz9RKjHTQiWxKPfom', - 'ra4haepf6fehiCfVvB33j1D7vmv7JJD8M5', // add on 23/02/2024 - 'rNPuS242i9ufMPEMusnjYPxyyu4STqSDGq', - 'rPzT7GA6vWU3PvYSXBpdP5fQPnzwVLwL24', + "rKUDvXFJMFu65LqPTH3Yfpii4rbKT9bSQT", + "raC4udvEeeni6aLPHbz9RKjHTQiWxKPfom", + "ra4haepf6fehiCfVvB33j1D7vmv7JJD8M5", // add on 23/02/2024 + "rNPuS242i9ufMPEMusnjYPxyyu4STqSDGq", + "rPzT7GA6vWU3PvYSXBpdP5fQPnzwVLwL24", ], }, arbitrum: { owners: [ - '0xf2dbc42875e7764edbd89732a15214a9a0deb085', - '0xce7ec11a5f306c6b896526149db1a86c7d1531e2', // add on 23/02/2024 - '0x18709e89bd403f470088abdacebe86cc60dda12e', - '0x82d015d74670d8645b56c3f453398a3e799ee582', - ], + "0xf2dbc42875e7764edbd89732a15214a9a0deb085", + "0xce7ec11a5f306c6b896526149db1a86c7d1531e2", // add on 23/02/2024 + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0x82d015d74670d8645b56c3f453398a3e799ee582", + ], }, optimism: { owners: [ - '0x9ef21be1c270aa1c3c3d750f458442397fbffcb6', - '0xe0b7a39fef902c21bad124b144c62e7f85f5f5fa', // add on 23/02/2024 - '0x18709e89bd403f470088abdacebe86cc60dda12e', - '0xd3cc0c7d40366a061397274eae7c387d840e6ff8' - ], + "0x9ef21be1c270aa1c3c3d750f458442397fbffcb6", + "0xe0b7a39fef902c21bad124b144c62e7f85f5f5fa", // add on 23/02/2024 + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0xd3cc0c7d40366a061397274eae7c387d840e6ff8", + ], }, bsc: { owners: [ - '0xdd3cb5c974601bc3974d908ea4a86020f9999e0c', // add on 23/02/2024 - '0x18709e89bd403f470088abdacebe86cc60dda12e', - '0xafdfd157d9361e621e476036fee62f688450692b', - ], + "0xdd3cb5c974601bc3974d908ea4a86020f9999e0c", // add on 23/02/2024 + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0xafdfd157d9361e621e476036fee62f688450692b", + ], }, starknet: { owners: [ - '0x03fd14213a96e9d90563ebe1b224f357c6481a755ee6f046c8ce9acd9b8654a7' - ], + "0x03fd14213a96e9d90563ebe1b224f357c6481a755ee6f046c8ce9acd9b8654a7", + ], }, -} + doge: { + owners: [ + "DRRU8L7fF4k9w7SF3Z6ei8onPCsh9hjGX1", + "9ztZpRN3v9xv5JhAT7MTtmy4DfyMEAG8YU", + "DLzCvKskasu4Adj3XgbyNitKBukBSa5JPP", + ], + }, + cardano: { + owners: [ + "addr1q8wk8rw6xeqzerhahlhweuukkxme0fjsy4xqsqze3m4r8lxavwxa5djq9j80m0lwaneedvdhj7n9qf2vpqq9nrh2x07qfmr8sf", + "addr1q9n8v7e76pt4mmvxqprc4k7nk5nqz4x2flplfr0azq9dtnz5wckfyaph0sj98f7nc5g98q9dv2v8ece9jm8w30upgfvq4zhpjy", + "DdzFFzCqrhsuQV5ohP1EBh9d4UjmmWDb2Vui2s2SACSBDeEW74kHhp3zj9hvLFDb9mK7hRr7fbctu1UYatPaF1omXiXPwf12bn7DQvbT" + ], + }, + core: { + owners: [ + "0x18709e89bd403f470088abdacebe86cc60dda12e", + "0x6635dbb3d78671be495a6d876940752a0c4e7743", + "0x27387a41fd7c6cf86b4c96a54a4a1d8bd0b926bf" + ], + }, + sui: { + owners: [ + "0d9948b61478ec1609b4c00cd0162131109e7fd60d7d2ebb539cb414f3ec7b9d", + "0x1f7b27844f2c4a0262b2c481f7ab956d10ace524c5a7b06c3742cfb8701db714", + ], + }, + ton: { + owners: [ + "EQBf6sUcCkUrRCMzmpOW22P3BOD4XgL_solOp3M4n6Vb8_1c", + "EQC2bRkktc-ZATV_VK8B1dmN3KXZRKiblMiyvFW_aUzNTwxS", + "EQA9Q1P4Wtm5orpfWgV_DTbqoeRUx7h8LCqdx38x5RwIkuS3", + "EQCFr3jo0DXpIBF82mVGFc3zcdRkSAtinhENPFMQ2FqzYqDB" + ], + }, +}; module.exports = mergeExports([ cexExports(config), - { ethereum: { tvl: stakingTVL, } } -]) -module.exports.methodology = 'We added the wallets from here https://github.com/huobiapi/Tool-Node.js-VerifyAddress/blob/main/snapshot/huobi_por_20230701.csv . We are not tracking 3 wallets, 2 on Heco Chain, 1 on BTTC chain. We also count stUSDT.' -module.exports.hallmarks = [ - [1723066836,"remove usdd collateral"] -] - + { ethereum: { tvl: stakingTVL } }, +]); +module.exports.methodology = + "We added the wallets from here https://github.com/huobiapi/Tool-Node.js-VerifyAddress/blob/main/snapshot/huobi_por_20230701.csv . We are not tracking 3 wallets, 2 on Heco Chain, 1 on BTTC chain. We also count stUSDT."; +module.exports.hallmarks = [[1723066836, "remove usdd collateral"]]; async function stakingTVL() { - const withdrawalAddress = '0x08DeB6278D671E2a1aDc7b00839b402B9cF3375d' - let fetchedValidators = 2400 - let size = 200 - let ethBalance = (await sdk.api2.eth.getBalance({ target: '0x08DeB6278D671E2a1aDc7b00839b402B9cF3375d'})).output/1e18 + const withdrawalAddress = "0x08DeB6278D671E2a1aDc7b00839b402B9cF3375d"; + let fetchedValidators = 2400; + let size = 200; + let ethBalance = + ( + await sdk.api2.eth.getBalance({ + target: "0x08DeB6278D671E2a1aDc7b00839b402B9cF3375d", + }) + ).output / 1e18; do { - const validators = (await get(`https://beaconcha.in/api/v1/validator/withdrawalCredentials/${withdrawalAddress}?limit=${size}&offset=${fetchedValidators}`)).data.map(i => i.publickey) - fetchedValidators += validators.length - await addValidatorBalance(validators) - await sleep(10000) - } while (fetchedValidators % size === 0) + const validators = ( + await get( + `https://beaconcha.in/api/v1/validator/withdrawalCredentials/${withdrawalAddress}?limit=${size}&offset=${fetchedValidators}` + ) + ).data.map((i) => i.publickey); + fetchedValidators += validators.length; + await addValidatorBalance(validators); + await sleep(10000); + } while (fetchedValidators % size === 0); return { - ethereum: ethBalance - } + ethereum: ethBalance, + }; async function addValidatorBalance(validators) { if (validators.length > 100) { - const chunks = sliceIntoChunks(validators, 100) - for (const chunk of chunks) await addValidatorBalance(chunk) + const chunks = sliceIntoChunks(validators, 100); + for (const chunk of chunks) await addValidatorBalance(chunk); return; } - const { data } = await post('https://beaconcha.in/api/v1/validator', { - indicesOrPubkey: validators.join(',') - }) - + const { data } = await post("https://beaconcha.in/api/v1/validator", { + indicesOrPubkey: validators.join(","), + }); - data.forEach((i) => ethBalance += i.balance/1e9) + data.forEach((i) => (ethBalance += i.balance / 1e9)); } -} \ No newline at end of file +} From dd9f6376aa50673d566d425c69754ff78c084779 Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:31:15 +0200 Subject: [PATCH 0749/1768] SwissBorg: Add new SOL wallet (#11990) --- projects/swissborg/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index 28c2ba62c4..c990800bf0 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -52,6 +52,7 @@ const config = { 'Cet3t77x2BBVSmiEFm8ZPoDSngbpso2RuWPL79Ky7SpA', '9qoUcyhKSWMbk6tqGUYQUpeosPcdUnJszG4eQKwfe4gL', 'Fe7SEekiKygziaEGKxsDsgLVzrCfNvVBvAYsaJBwFA8s', + 'AR2ecEWY2vfsXmd4fUxc196LhbX5p8TnhvJg8t3fgYUN', ], }, polkadot: { From 141d2de43c63d436434e989237a6c1425eb5b874 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 02:17:22 +0200 Subject: [PATCH 0750/1768] minor fix --- projects/truemarkets/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/truemarkets/index.js b/projects/truemarkets/index.js index 2df572e6cc..9d1d7047ee 100644 --- a/projects/truemarkets/index.js +++ b/projects/truemarkets/index.js @@ -1,5 +1,4 @@ const { getLogs2 } = require('../helper/cache/getLogs') -const { base } = require('../radiant-v2') const config = { base: { factory: '0x288025b60330e01d793B6e83c1a0dE22bb943459', fromBlock: 21180486 }, From ac2721b509acb41165e0db5c8c4ed5019895b3a1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 02:29:29 +0200 Subject: [PATCH 0751/1768] Gravita (#12002) Co-authored-by: gbirckan --- projects/gravita-protocol/index.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/projects/gravita-protocol/index.js b/projects/gravita-protocol/index.js index e8ad230f81..05686b9570 100644 --- a/projects/gravita-protocol/index.js +++ b/projects/gravita-protocol/index.js @@ -1,4 +1,5 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); +const { sumERC4626Vaults } = require("../helper/erc4626"); const ADMIN_ADDRESSES = { arbitrum: "0x4928c8F8c20A1E3C295DddBe05095A9aBBdB3d14", @@ -10,18 +11,20 @@ const ADMIN_ADDRESSES = { mantle: "0x4F39F12064D83F6Dd7A2BDb0D53aF8be560356A6", }; +const erc4626Vaults = { + ethereum: [ + "0xBB22d59B73D7a6F3A8a83A214BECc67Eb3b511fE", // WETH Vault - constellation + "0x1DB1Afd9552eeB28e2e36597082440598B7F1320", // RPL Vault - constellation + ] +} + async function tvl(api) { const adminContract = ADMIN_ADDRESSES[api.chain]; - const collAddresses = await api.call({ - abi: "address[]:getValidCollateral", - target: adminContract, - }); - const activePool = await api.call({ - abi: "address:activePool", - target: adminContract, - }); - const balances = await sumTokens2({ api, tokens: collAddresses, owner: activePool }); - return balances + const vaults = erc4626Vaults[api.chain] ?? [] + const collAddresses = await api.call({ abi: "address[]:getValidCollateral", target: adminContract, }); + const activePool = await api.call({ abi: "address:activePool", target: adminContract, }); + await sumTokens2({ api, tokens: collAddresses, owner: activePool, }); + await sumERC4626Vaults({ api, calls: vaults, isOG4626: true,}); } module.exports = { From a2584d9e485350193d8d375e0b7ba4ca52a8843f Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Tue, 22 Oct 2024 17:40:29 -0700 Subject: [PATCH 0752/1768] Add apechain/camelot and zircuit/ocelex (#11999) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 5 ++++- projects/visor/config.js | 4 ++++ projects/visor/index.js | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 2dc87687ef..8ba04f3f4c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -115,7 +115,10 @@ const fixBalancesTokens = { '0x48b62137EdfA95a428D35C09E44256a739F6B557': { coingeckoId: 'wrapped-apecoin', decimals: 18 }, '0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4': { coingeckoId: 'savings-dai', decimals: 18 }, '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, - } + }, + zircuit: { + '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/visor/config.js b/projects/visor/config.js index 6f8b860e4f..4b8d6af40f 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -150,10 +150,14 @@ const HYPE_REGISTRY = { zircuit: [ ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 1216191], // Gmeow ["0x683292172E2175bd08e3927a5e72FC301b161300", 1216165], // Circuit + ["0x17307DaC1384719d263556aAcC3e62c0053FE25D", 4826564], // Ocelex ], wc: [ ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 4799965], // Uniswap ], + apechain: [ + ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 476343], // Camelot + ], }; Object.keys(HYPE_REGISTRY).forEach(chain => { diff --git a/projects/visor/index.js b/projects/visor/index.js index 595add42c6..e2e8bfe846 100644 --- a/projects/visor/index.js +++ b/projects/visor/index.js @@ -5,6 +5,7 @@ const getTotalAmounts = "function getTotalAmounts() view returns (uint256 total0, uint256 total1)"; const { getUniqueAddresses } = require("../helper/utils"); const config = require("./config"); +const { sumTokens2 } = require('../helper/unwrapLPs') module.exports = { doublecounted: true, @@ -53,7 +54,7 @@ Object.keys(config).forEach(chain => { api.add(token0s[i], total0); api.add(token1s[i], total1); }); - return api.getBalances() + return sumTokens2({ api }) } } }) From 6bb031e9e5ea3623702e18a9569250bd21668f82 Mon Sep 17 00:00:00 2001 From: zak Date: Tue, 22 Oct 2024 19:54:07 -0500 Subject: [PATCH 0753/1768] Adds Contract For Beta Silo (#11994) --- projects/corn-l2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/corn-l2/index.js b/projects/corn-l2/index.js index 99289b89f9..1b170f4851 100644 --- a/projects/corn-l2/index.js +++ b/projects/corn-l2/index.js @@ -5,6 +5,7 @@ module.exports = { tvl: sumTokensExport({ owners: [ "0x8bc93498b861fd98277c3b51d240e7e56e48f23c", + "0x6d85d1c7f58fd5d05b1b633e8b0ce2e57fca9d80", ], fetchCoValentTokens: true, permitFailure: true From c69e6ae945cf328483c423d5a630526cd08be88a Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 23 Oct 2024 03:00:40 +0200 Subject: [PATCH 0754/1768] Feat: adapter, Swell-earnEth (#11987) Co-authored-by: darvin --- projects/swell-earn-eth/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/swell-earn-eth/index.js diff --git a/projects/swell-earn-eth/index.js b/projects/swell-earn-eth/index.js new file mode 100644 index 0000000000..eb00e8e51d --- /dev/null +++ b/projects/swell-earn-eth/index.js @@ -0,0 +1,20 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const earnETHVault = '0x9Ed15383940CC380fAEF0a75edacE507cC775f22'; + +const tokens = [ + '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0', // rswETH + '0xf951E335afb289353dc249e82926178EaC7DEd78', // swETH + '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', // wstETH + '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH +] + +const tvl = async (api) => { + return sumTokens2({ api, tokens, owner: earnETHVault }) +} + +module.exports = { + methodology: 'TVL represents the sum of tokens deposited in the vault', + doublecounted: true, + ethereum : { tvl } +} \ No newline at end of file From c96297b7f0c4e8094feff1803dff03ed2b2c4173 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen <139751487+thanh-wombat@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:10:12 +0700 Subject: [PATCH 0755/1768] Update TVL logic of Capybara Exchange (#11985) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/capybara-exchange/config.js | 7 +------ projects/capybara-exchange/index.js | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/projects/capybara-exchange/config.js b/projects/capybara-exchange/config.js index f563c219ab..9d552c09fc 100644 --- a/projects/capybara-exchange/config.js +++ b/projects/capybara-exchange/config.js @@ -1,10 +1,5 @@ module.exports = { klaytn: { - pools: { - mainPool: "0x540cce8ed7d210f71eeabb9e7ed7698ac745e077", - volatilePool: "0x6389dbfa1427a3b0a89cddc7ea9bbda6e73dece7", - lstPool: "0x5CDE63386D78362267d9A3edC8DA204bB64D07D3", - stargatePool: "0x1dE1578476d9B4237F963eca5D37500Fc33DF3D1", - }, + master: "0x3CA30C862769b5de7987D2E2db4c1A72800A1Da1", }, }; diff --git a/projects/capybara-exchange/index.js b/projects/capybara-exchange/index.js index 9810ad1be6..4f34cd275c 100644 --- a/projects/capybara-exchange/index.js +++ b/projects/capybara-exchange/index.js @@ -2,23 +2,20 @@ const config = require("./config"); const { sumTokens2 } = require("../helper/unwrapLPs"); Object.keys(config).forEach((chain) => { - const arg = config[chain]; + const { master } = config[chain]; module.exports[chain] = { tvl: async (api) => { - const pools = Object.values(arg["pools"]); - - let allUnderlying = await api.multiCall({ abi: "address[]:getTokens", calls: pools, }); - - const tokens = []; - const calls = []; - pools.forEach((v, i) => { - allUnderlying[i].forEach((t) => { - tokens.push(t); - calls.push({ target: v, params: t }); - }); + const poolInfos = await api.fetchList({ + // Reference: https://github.com/wombat-exchange/v1-core/blob/5887ec5e1f1cbd067eaee8aee49fcb857fb867c5/contracts/wombat-governance/MasterWombatV3.sol#L587 + lengthAbi: 'poolLength', + itemAbi: "function poolInfo(uint256) external view returns (address asset, uint96, address, uint256, uint104, uint104, uint40)", + target: master, }); - const wTokens = await api.multiCall({ abi: "function addressOfAsset(address) view returns (address)", calls, }); - return sumTokens2({ api, tokensAndOwners2: [tokens, wTokens], }); + // Reference: https://github.com/wombat-exchange/v1-core/blob/5887ec5e1f1cbd067eaee8aee49fcb857fb867c5/contracts/wombat-core/asset/Asset.sol#L4 + const assets = poolInfos.map(i => i.asset); + const uTokens = await api.multiCall({ abi: 'address:underlyingToken', calls: assets }) + + return sumTokens2({ api, tokensAndOwners2: [uTokens, assets], }); }, }; }); From 37d15d8ab536947dcb9270f70b672eced399a463 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 03:40:10 +0200 Subject: [PATCH 0756/1768] Goldstation (#12004) Co-authored-by: Booyoun --- projects/goldstation-dex/index.js | 13 +++++++++++++ projects/goldstation-rwa/index.js | 19 +++++++++++++++++++ projects/goldstation-staking/index.js | 11 +++++++++++ projects/helper/coreAssets.json | 1 + 4 files changed, 44 insertions(+) create mode 100644 projects/goldstation-dex/index.js create mode 100644 projects/goldstation-rwa/index.js create mode 100644 projects/goldstation-staking/index.js diff --git a/projects/goldstation-dex/index.js b/projects/goldstation-dex/index.js new file mode 100644 index 0000000000..7a965859b3 --- /dev/null +++ b/projects/goldstation-dex/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require('../helper/unknownTokens'); +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + misrepresentedTokens: true, + klaytn: { + tvl: getUniTVL({ factory: '0x347E5ce6764DF9DF85487BEA523D3e242762aE88', useDefaultCoreAssets: true }), + staking: sumTokensExport({ tokensAndOwners: [ + ['0x4836cc1f355bb2a61c210eaa0cd3f729160cd95e', '0x4d55B04AC52b2CA41ad04337FF13CbAefbdC8954'], + ]}) + } +} + diff --git a/projects/goldstation-rwa/index.js b/projects/goldstation-rwa/index.js new file mode 100644 index 0000000000..ba828d7a03 --- /dev/null +++ b/projects/goldstation-rwa/index.js @@ -0,0 +1,19 @@ +const { sumUnknownTokens } = require('../helper/unknownTokens'); + +const GPC = '0x27397bfbefd58a437f2636f80a8e70cfc363d4ff'; + +async function tvl(api) { + const supply = await api.call({ abi: 'erc20:totalSupply', target: GPC }) + api.add(GPC, supply) + + const lps = ['0xCd13CD31fb61345Abe7B7376A4664784622817EE'] + return sumUnknownTokens({ api, lps, useDefaultCoreAssets: true }) +} + +module.exports = { + misrepresentedTokens: true, + klaytn: { + tvl, + } +} + diff --git a/projects/goldstation-staking/index.js b/projects/goldstation-staking/index.js new file mode 100644 index 0000000000..8a2dba4ab1 --- /dev/null +++ b/projects/goldstation-staking/index.js @@ -0,0 +1,11 @@ +const klayStakingContract = '0x6569B14043c03537B5B125F5Ac5De3605a47dC76'; + +async function tvl(api) { + const totalStaked = await api.call({ target: klayStakingContract, abi: "uint256:totalStaked", }); + api.addGasToken(totalStaked); +} + +module.exports = { + klaytn: { tvl } +} + diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 58311321aa..1e162d640a 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -439,6 +439,7 @@ }, "klaytn": { "WKLAY": "0x57d1a61e4fd09fbf16e35b04959e94dcf2032974", + "WKLAY_1": "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432", "BORA": "0x02cbe46fb8a1f579254a9b485788f2d86cad51aa", "DAI": "0xcb2c7998696ef7a582dfd0aafadcd008d03e791a", "USDC": "0x608792deb376cce1c9fa4d0e6b7b44f507cffa6a", From 8a5d31de4f48b55876104332422022807aa794b6 Mon Sep 17 00:00:00 2001 From: mememan-anon Date: Tue, 22 Oct 2024 21:43:23 -0400 Subject: [PATCH 0757/1768] zenolend adapter (#12003) --- projects/zenolend/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/zenolend/index.js diff --git a/projects/zenolend/index.js b/projects/zenolend/index.js new file mode 100644 index 0000000000..995ab15332 --- /dev/null +++ b/projects/zenolend/index.js @@ -0,0 +1,10 @@ + +const { compoundExports2 } = require('../helper/compound') + +const config = { + apechain: '0xc2C583093Af9241E17B2Ec51844154468D21bF6F', +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = compoundExports2({ comptroller: config[chain] }) +}); \ No newline at end of file From 830eb0da4f5a02693315f524a4c349aabf68456f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 03:48:39 +0200 Subject: [PATCH 0758/1768] track https://star-fleet.io/harbor/liquid-staking/ --- projects/airdao-harbor/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/airdao-harbor/index.js diff --git a/projects/airdao-harbor/index.js b/projects/airdao-harbor/index.js new file mode 100644 index 0000000000..c129cf5ee5 --- /dev/null +++ b/projects/airdao-harbor/index.js @@ -0,0 +1,11 @@ +async function tvl(api) { + const totalStake = await api.call({ abi: 'uint256:getTotalStAmb', target: '0xBda7cf631Db4535A500ED16Dd98099C04e66F1d5' }) + api.addGasToken(totalStake) +} + +module.exports = { + methodology: `TVL counts deposits made to Harbor liquid staking on AirDAO.`, + airdao: { + tvl + } +} \ No newline at end of file From b2030c86206557c101367e53f9631e095875670d Mon Sep 17 00:00:00 2001 From: sandy-wombat <142200506+sandy-wombat@users.noreply.github.com> Date: Wed, 23 Oct 2024 09:52:05 +0800 Subject: [PATCH 0759/1768] feat: add capybara perp (#11982) --- projects/capybara-perp/index.js | 8 ++++++++ projects/helper/coreAssets.json | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 projects/capybara-perp/index.js diff --git a/projects/capybara-perp/index.js b/projects/capybara-perp/index.js new file mode 100644 index 0000000000..27ea0a80f5 --- /dev/null +++ b/projects/capybara-perp/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + klaytn: { + tvl: sumTokensExport({ owners: ['0xeB23e0a5065D96FCa71DE240C6b302B9Da14Ac0e', '0x94b231dD60E64ba8bCC72892cE4B4B9A5004730d'], tokens: [ADDRESSES.klaytn.stKaia] }), + } +} diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 1e162d640a..328881d828 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -468,7 +468,8 @@ "aDAI": "0x2ff5371dad5c6ef76d55213b7c5a519f6654ba17", "aDAI_Wormhole_": "0xe9a88c33abf71c902f7581321d05e6516cbca761", "USDK": "0xd2137fdf10bd9e4e850c17539eb24cfe28777753", - "NPT": "0xe06597d02a2c3aa7a9708de2cfa587b128bd3815" + "NPT": "0xe06597d02a2c3aa7a9708de2cfa587b128bd3815", + "stKaia": "0x42952B873ed6f7f0A7E4992E2a9818E3A9001995" }, "nova": { "NUSD": "0x1f5396f254ee25377a5c1b9c6bff5f44e9294fff" From a9b0e312a639128dc866cc914c2d4247b155e57a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 04:04:04 +0200 Subject: [PATCH 0760/1768] update perfect pool #11974 --- projects/perfect-pool/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/perfect-pool/index.js b/projects/perfect-pool/index.js index dd2fe8827c..3eabd8a9c7 100644 --- a/projects/perfect-pool/index.js +++ b/projects/perfect-pool/index.js @@ -2,10 +2,13 @@ const { sumTokensExport } = require("../helper/unwrapLPs") const ADDRESSES = require('../helper/coreAssets.json') const NFT_ACE8 = '0x21F3ea812734b6492D88D268622CF068e9E6D596' +const NFT_ACE16 = '0x70A254c8201adbD88d88D17937d5e8aBb8B8095F' module.exports = { start: 1725311445, base: { - tvl: sumTokensExport({ owner: NFT_ACE8, token: ADDRESSES.base.USDC }), + tvl: sumTokensExport( + { owners: [NFT_ACE8, NFT_ACE16], token: ADDRESSES.base.USDC }, + ), } } \ No newline at end of file From a179ec0046ed8b3358a4652440e10fe1962058f0 Mon Sep 17 00:00:00 2001 From: Daniel Contreras Salinas Date: Wed, 23 Oct 2024 04:13:17 +0200 Subject: [PATCH 0761/1768] feat: update Arrakis Finance to add Arrakis Modular TVL (#11973) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/arrakis-modular/index.js | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 projects/arrakis-modular/index.js diff --git a/projects/arrakis-modular/index.js b/projects/arrakis-modular/index.js new file mode 100644 index 0000000000..a9a7ed4b13 --- /dev/null +++ b/projects/arrakis-modular/index.js @@ -0,0 +1,41 @@ +const config = { + ethereum: { + factory: '0x820FB8127a689327C863de8433278d6181123982', + fromBlock: 20540819, + }, + arbitrum: { + factory: '0x820FB8127a689327C863de8433278d6181123982', + fromBlock: 243467827, + }, + base: { + factory: '0x820FB8127a689327C863de8433278d6181123982', + fromBlock: 18512550, + }, +} + +module.exports = { + doublecounted: true, +}; + +Object.keys(config).forEach(chain => { + const { factory } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const numPublicVaults = await api.call({ abi: 'uint256:numOfPublicVaults', target: factory }) + const numPrivateVaults = await api.call({ abi: 'uint256:numOfPrivateVaults', target: factory }) + const publicVaults = numPublicVaults > 0 ? await api.call({ abi: 'function publicVaults(uint256 startIndex_, uint256 endIndex_) returns (address[] memory)', target: factory, params: [0, numPublicVaults] }) : [] + const privateVaults = numPrivateVaults > 0 ? await api.call({ abi: 'function privateVaults(uint256 startIndex_, uint256 endIndex_) returns (address[] memory)', target: factory, params: [0, numPrivateVaults] }) : [] + const vaults = [...publicVaults, ...privateVaults] + const [token0s, token1s, bals] = await Promise.all([ + api.multiCall({ abi: 'address:token0', calls: vaults }), + api.multiCall({ abi: 'address:token1', calls: vaults }), + api.multiCall({ abi: 'function totalUnderlying() view returns (uint256, uint256)', calls: vaults }), + ]) + + bals.forEach(([v0, v1], i) => { + api.add(token0s[i], v0) + api.add(token1s[i], v1) + }) + } + } +}) \ No newline at end of file From 4eadabe69d1ab049277c201b75597afd373e82a3 Mon Sep 17 00:00:00 2001 From: ratex-tony Date: Wed, 23 Oct 2024 10:13:54 +0800 Subject: [PATCH 0762/1768] add rate-x adapter (#11971) --- projects/rate-x/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/rate-x/index.js diff --git a/projects/rate-x/index.js b/projects/rate-x/index.js new file mode 100644 index 0000000000..f5ee1e5163 --- /dev/null +++ b/projects/rate-x/index.js @@ -0,0 +1,23 @@ +const { sumTokens2 } = require("../helper/solana"); + +async function tvl(api) { + return sumTokens2({ + tokenAccounts: [ + 'EmLhAPj7J6LTAnomsLfZUKDtb4t2A8e6eofDSfTwMgkY', + 'DY3Rw6BZwf6epvWnVo8DSV6kYptEdCh7HbYmFRpdPxuH', + '3CppdkMFxuz7ASS27pB35EDbwgfUhwrarFYuWDBWWwHB', + 'Grk7mshVug1TafphUvuYBrzwRqadtmCcf7GGPoPKkgs6', + '5mB83ye3jdjneDJDx15HAvYxT7SCsGZF5urpVMzuLr1t', + '4nyfJ4JBsRJLij7VGCVUeHwKSLAAku66ptJamoodY29L', + '6opMSfkHgWsvG5KmZo8y2DuShaDHwXfB6VUuTx6W4Age', + '4Ejjk5w7HAWvmXYT57s5uwn8rs7i61nbpcTRQ9ABB11M' + ], + balances: api.getBalances() + }) +} + +module.exports = { + timetravel: false, + methodology: "TVL is calculated by summing the value of the traders' vault, LP vault, and earn vault.", + solana: { tvl }, +}; From 6770ee33a8ae74a43b9a33b3b498304899fbf0a4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 04:38:45 +0200 Subject: [PATCH 0763/1768] track apETH #11968 --- projects/aqua-patina/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/aqua-patina/index.js diff --git a/projects/aqua-patina/index.js b/projects/aqua-patina/index.js new file mode 100644 index 0000000000..14053941fa --- /dev/null +++ b/projects/aqua-patina/index.js @@ -0,0 +1,16 @@ +const apETH = '0xAaAaAAaBC6CBc3A1FD3a0fe0FDec43251C6562F5' + +async function tvl(api) { + const supply = await api.call({ target: apETH, abi: 'uint256:totalSupply' }) + const multiplier = await api.call({ target: apETH, abi: 'uint256:ethPerAPEth' }) + api.addGasToken(supply * multiplier / 1e18) +} + +module.exports = { + doublecounted: true, + methodology: 'Returns the ETH equivalent value of the total supply of apETH tokens on Ethereum. This is calculated by the multiplier used in the contract to determine the ETH value of each token when minting apETH.', + start: 20937454, + ethereum: { + tvl, + } +} \ No newline at end of file From b577f568f99510a32dbf2a3459beb1559f04e457 Mon Sep 17 00:00:00 2001 From: inumune Date: Wed, 23 Oct 2024 09:39:25 +0700 Subject: [PATCH 0764/1768] Create panko tvl (#11970) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/panko/index.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/panko/index.js diff --git a/projects/panko/index.js b/projects/panko/index.js new file mode 100644 index 0000000000..a6cdfbbe50 --- /dev/null +++ b/projects/panko/index.js @@ -0,0 +1,31 @@ +const { uniV3Export } = require("../helper/uniswapV3") +const { getLogs2 } = require('../helper/cache/getLogs') +const { mergeExports } = require("../helper/utils") +const { nullAddress } = require("../helper/unwrapLPs") + +const uniTvl = uniV3Export({ + taiko: { factory: '0x99960D7076297a1E0C86f3cc60FfA5d6f2B507B5', fromBlock: 433329 } +}) + +const stableswapConfig = { + taiko: { factory: '0x542E849ff47da056c127F35710b01242A59705d2', fromBlock: 433341 } +} +const stableTvl = {} + +Object.keys(stableswapConfig).forEach(chain => { + const { factory, fromBlock, } = stableswapConfig[chain] + stableTvl[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ + api, + factory, + eventAbi: 'event NewStableSwapPair(address indexed swapContract, address tokenA, address tokenB, address tokenC, address LP)', + fromBlock, + }) + const ownerTokens = logs.map(i => [[i.tokenA, i.tokenB, i.tokenC].filter(i => i !== nullAddress), i.swapContract]) + return api.sumTokens({ ownerTokens }) + } + } +}) + +module.exports = mergeExports([uniTvl, stableTvl]) \ No newline at end of file From 6c81fd83b7db1161850b6fe95e0b1edab080fb72 Mon Sep 17 00:00:00 2001 From: 0xR <99395193+0xrmvdao@users.noreply.github.com> Date: Wed, 23 Oct 2024 05:42:50 +0300 Subject: [PATCH 0765/1768] Update Kinetix AMM V3 adapter to use uniV3GraphExport helper. (uniV3Export missed cache) (#11964) --- projects/kinetix-v3/index.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/projects/kinetix-v3/index.js b/projects/kinetix-v3/index.js index 4f26b6b52c..8361c26f38 100644 --- a/projects/kinetix-v3/index.js +++ b/projects/kinetix-v3/index.js @@ -1,12 +1,16 @@ -const { uniV3Export } = require("../helper/uniswapV3"); +const { uniV3GraphExport } = require('../helper/uniswapV3') -module.exports = uniV3Export({ +module.exports = { kava: { - factory: "0x2dBB6254231C5569B6A4313c6C1F5Fe1340b35C2", - fromBlock: 6069472, + tvl: uniV3GraphExport({ + graphURL: 'https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/v3-subgraph', + name: 'kinetixfi/kava-v3', + }) }, base: { - factory: "0xdDF5a3259a88Ab79D5530eB3eB14c1C92CD97FCf", - fromBlock: 14195510, - }, -}); + tvl: uniV3GraphExport({ + graphURL: 'https://api.studio.thegraph.com/query/55804/kinetixfi-base-v3/version/latest', + name: 'kinetixfi/base-v3', + }) + } +} From 9f6e65563ab9992a03354ce24b6fe476b7751387 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 04:53:51 +0200 Subject: [PATCH 0766/1768] track stake ease #11953 --- projects/stakeease/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/stakeease/index.js diff --git a/projects/stakeease/index.js b/projects/stakeease/index.js new file mode 100644 index 0000000000..9c914a3e6e --- /dev/null +++ b/projects/stakeease/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs") + +const SX_ETH_VAULT = "0x466B447D68112090ea46a98E15f22da44f87AF7F" + +module.exports = { + ethereum: { + tvl: sumTokensExport({ owner: SX_ETH_VAULT, tokens: [ + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.EETH, + '0xbf5495Efe5DB9ce00f80364C8B423567e58d2110', + '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0', + '0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7', + ]}), + } +}; From 4be9e7f79cdf0c8d1d291029226d03aa0c6c5bf2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 04:55:45 +0200 Subject: [PATCH 0767/1768] minor fix --- projects/moneta/index.js | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/projects/moneta/index.js b/projects/moneta/index.js index 5fdbda8049..5b85850933 100644 --- a/projects/moneta/index.js +++ b/projects/moneta/index.js @@ -1,23 +1,21 @@ -const { addressesUtxosAssetAll, getScriptsDatum} = require('../helper/chain/cardano/blockfrost') +const { addressesUtxosAssetAll, getScriptsDatum } = require('../helper/chain/cardano/blockfrost') const usdm_count_nft_asset = "e319d8e6629ff7991c8ae4f8aec2e0f10463ebdf29b57d26d34914f65553444d5f434f554e54" const count_address = "addr1wyl82v9qy06hsz50hqqdy0u6xw9hdewy7twjahgek2tpp7c0qajez" -async function tvl() { - const utxo = (await addressesUtxosAssetAll(count_address, usdm_count_nft_asset))[0] - const datum_hash = utxo.data_hash - const datum = await getScriptsDatum(datum_hash) - const total_value_locked = datum.json_value.fields[0].int/1_000_000 - return { - usd: total_value_locked - } - +async function tvl(api) { + const utxo = (await addressesUtxosAssetAll(count_address, usdm_count_nft_asset))[0] + const datum_hash = utxo.data_hash + const datum = await getScriptsDatum(datum_hash) + const total_value_locked = datum.json_value.fields[0].int / 1_000_000 + api.addUSDValue(total_value_locked) } -module.exports={ - timetravel: false, - methodology: "Gets the total circulating supply of USDM from the datum of the USDM counter UTxO.", - cardano:{ - tvl - } +module.exports = { + timetravel: false, + misrepresentedTokens: true, + methodology: "Gets the total circulating supply of USDM from the datum of the USDM counter UTxO.", + cardano: { + tvl + } } \ No newline at end of file From 3f21309e3c692b5a2035def10496e0d897c504c3 Mon Sep 17 00:00:00 2001 From: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Date: Wed, 23 Oct 2024 13:32:12 +0800 Subject: [PATCH 0768/1768] [Bucket - TVL update] add new supported collaterals (#12005) --- projects/bucket-protocol/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index 9628e67f09..e804a4a7b5 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -3,11 +3,14 @@ const sui = require("../helper/chain/sui"); const MAINNET_PROTOCOL_ID = "0x9e3dab13212b27f5434416939db5dec6a319d15b89a84fd074d03ece6350d3df"; - const SUI = ADDRESSES.sui.SUI; +// Token +const SUI = ADDRESSES.sui.SUI; const BUCK = ADDRESSES.sui.BUCK; const USDC = ADDRESSES.sui.USDC; const USDT = ADDRESSES.sui.USDT; const USDC_CIRCLE= ADDRESSES.sui.USDC_CIRCLE +const SCALLOP_swUSDC = "0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC" +const SCALLOP_sUSDC = "0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC" const AF_LP_IDs = [ "0xe2569ee20149c2909f0f6527c210bc9d97047fe948d34737de5420fab2db7062", @@ -141,7 +144,11 @@ async function tvl(api) { for (const bucket of bucketList) { //AF_LP doesn't have price, need to split the tokens if (bucket.type.includes("AF_LP")) continue; - const coin = bucket.type.split("<").pop()?.replace(">", "") ?? ""; + let coin = bucket.type.split("<").pop()?.replace(">", "") ?? ""; + + /// Since we're unable to fetch the price of Scallop's sCOIN, we'll regard sCOIN as underlying assets + if(coin === SCALLOP_swUSDC) coin = ADDRESSES.sui.USDC + if(coin === SCALLOP_sUSDC) coin = ADDRESSES.sui.USDC_CIRCLE api.add(coin, bucket.fields.collateral_vault); } From 5e2878a434ceb598aa95e6b3a8dc7154cc4932cf Mon Sep 17 00:00:00 2001 From: will2024 Date: Wed, 23 Oct 2024 13:44:11 +0800 Subject: [PATCH 0769/1768] WORLDES is a RWA Liquidity Yield Protocol (#11952) Co-authored-by: zhaowei Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/worldes/index.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 projects/worldes/index.js diff --git a/projects/worldes/index.js b/projects/worldes/index.js new file mode 100644 index 0000000000..0a55a0699c --- /dev/null +++ b/projects/worldes/index.js @@ -0,0 +1,32 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +const config = { + arbitrum: { dvmFactory: '0x3bA0388E64900e274f2C6fCfaE34Eed65c01282A', fromBlock: 228710000, dspFactory: '0xf3AadDd00C2E263d760BE52BB7142276B74E8b47', WorldesRWATokenFactory: '0x4Ef31B45919aE1874840B9563D46FCD57E2Ae0b7', WorldesDvmProxy: '0x7e93ED796aFD3D9a6e9a24c668153fBb981bE60E', WorldesDspProxy: '0xE6933Fb2dc110a43fdeC6bB83d6ae99aC557c452', WorldesMineProxy: '0x2eFda50249176e3ee1A26964Ad6496DC5aA2aCE7' }, +} + +Object.keys(config).forEach(chain => { + const { dvmFactory, fromBlock, dspFactory, blacklistedTokens, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const ownerTokens = [] + + await builder(dvmFactory, 'event NewDVM(address baseToken, address quoteToken, address creator, address pool)'); + await builder(dspFactory, 'event NewDSP(address baseToken, address quoteToken, address creator, address pool)'); + + return api.sumTokens({ ownerTokens, blacklistedTokens, permitFailure: true, }) + + async function builder(factorys, event) { + if (!Array.isArray(factorys)) + factorys = [factorys]; + const res = factorys.map(factory => addLogs(factory, event)); + await Promise.all(res) + } + + async function addLogs(target, eventAbi) { + const convert = i => [[i.baseToken, i.quoteToken], i.pool] + let logs = await getLogs2({ api, target, eventAbi, fromBlock }) + ownerTokens.push(...logs.map(convert)) + } + } + } +}) \ No newline at end of file From 2236039bc95d2e7b3356053235eb564634de3090 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 07:58:58 +0200 Subject: [PATCH 0770/1768] update babylon --- projects/babylon/index.js | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/projects/babylon/index.js b/projects/babylon/index.js index 19d40e19cb..ad038db97e 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -1,28 +1,20 @@ const axios = require('axios'); -async function tvl() { - try { - const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); - const activeTvlSatoshis = response.data.data.active_tvl; - const activeTvlBitcoin = activeTvlSatoshis / 1e8; +async function tvl(api) { + const response = await axios.get('https://staking-api.babylonlabs.io/v1/stats'); + const activeTvlSatoshis = response.data.data.active_tvl; + const activeTvlBitcoin = activeTvlSatoshis / 1e8; - if (activeTvlBitcoin && activeTvlBitcoin > 0) { - return { - bitcoin: activeTvlBitcoin, - }; - } else { - return {}; - } - } catch (error) { - return {}; - } + if (activeTvlBitcoin > 0) + api.addCGToken('bitcoin', activeTvlBitcoin) + else + throw new Error('Babylon: Invalid TVL value'); } module.exports = { methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', - start: 1724351485, + start: 1724351485, timetravel: false, - misrepresentedTokens: false, bitcoin: { tvl, }, From 6e12b299beeee8064b9bb00bc11ecbbfc728b706 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:31:54 +0200 Subject: [PATCH 0771/1768] track swaylend --- projects/helper/chain/fuel.js | 40 +++++++++++++++++++---------------- projects/helper/utils.js | 2 +- projects/mira-ly/index.js | 8 +++---- projects/oxiswap/index.js | 6 +++--- projects/swaylend/index.js | 12 +++++++++++ 5 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 projects/swaylend/index.js diff --git a/projects/helper/chain/fuel.js b/projects/helper/chain/fuel.js index fd1dd1e077..615e5e003f 100644 --- a/projects/helper/chain/fuel.js +++ b/projects/helper/chain/fuel.js @@ -8,17 +8,23 @@ async function sumTokens({ api, owner, owners, token, tokens = [], tokensAndOwne tokens = [token] if (owner) owners = [owner] - if (owners) + + if (owners.length && !tokens.length) { + await addAllTokenBalances({ api, owners }) + } else if (owners.length) tokensAndOwners = tokens.map(token => owners.map(owner => [token, owner])).flat() tokensAndOwners = getUniqueToA(tokensAndOwners) - const query = tokensAndOwners.map(([token, owner], i) => `q${i}: contractBalance( - contract: "${owner}" asset: "${token}" -) { contract assetId amount}`).join('\n'); + if (tokensAndOwners.length) { + const query = tokensAndOwners.map(([token, owner], i) => `q${i}: contractBalance( + contract: "${owner}" asset: "${token}" + ) { contract assetId amount}`).join('\n'); + + const results = await client.request(`{${query}}`) + Object.values(results).forEach(i => api.add(i.assetId, i.amount)) + } - const results = await client.request(`{${query}}`) - Object.values(results).forEach(i => api.add(i.assetId, i.amount)) return transformBalances('fuel', api.getBalances()) function getUniqueToA(toa) { @@ -28,22 +34,20 @@ async function sumTokens({ api, owner, owners, token, tokens = [], tokensAndOwne } } -async function sumAllTokens({ api, owners = [] }) { - const query = owners.map((owner, i) => `q${i}: contractBalances( - filter: { contract: "${owner}" }, first: 100 - ) { nodes { assetId amount } }`).join('\n'); +async function addAllTokenBalances({ api, owners = [] }) { - const results = await client.request(`{${query}}`); - Object.values(results).forEach(res => { - res.nodes.forEach(node => { - api.add(node.assetId, node.amount); - }); - }); + for (const owner of owners) { + const query = `contractBalances( + filter: { contract: "${owner}" }, first: 1000 + ) { nodes { assetId amount } }` - return transformBalances('fuel', api.getBalances()); + const results = await client.request(`{${query}}`) + results.contractBalances.nodes.forEach(node => { + api.add(node.assetId, node.amount); + }) + } } module.exports = { sumTokens, - sumAllTokens } \ No newline at end of file diff --git a/projects/helper/utils.js b/projects/helper/utils.js index 15e958316a..17c49bb6a0 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -257,7 +257,7 @@ async function debugBalances({ balances = {}, chain, log = false, tableLabel = ' labelMapping[label] = token return } - const blacklistedChains = ['starknet', 'solana', 'sui', 'aptos'] + const blacklistedChains = ['starknet', 'solana', 'sui', 'aptos', 'fuel'] if (!token.startsWith('0x') || blacklistedChains.includes(chain)) return; if (!label.startsWith(chain)) ethTokens.push(token) diff --git a/projects/mira-ly/index.js b/projects/mira-ly/index.js index 74812e583f..83252fe01d 100644 --- a/projects/mira-ly/index.js +++ b/projects/mira-ly/index.js @@ -1,15 +1,15 @@ const { sumTokens } = require("../helper/chain/fuel") -const { configPost } = require('../helper/cache') +// const { configPost } = require('../helper/cache') async function tvl(api) { const contractId = '0x2e40f2b244b98ed6b8204b3de0156c6961f98525c8162f80162fcf53eebd90e7' - const { pools } = await configPost('mira-ly', 'https://prod.api.mira.ly/pools', { "volume_hours": 24, "apr_days": 1 }) - const tokens = pools.map(i => i.id.split('_').slice(0, 2)).flat() + // const { pools } = await configPost('mira-ly', 'https://prod.api.mira.ly/pools', { "volume_hours": 24, "apr_days": 1 }) + // const tokens = pools.map(i => i.id.split('_').slice(0, 2)).flat() // const provider = await fuels.Provider.create('https://mainnet.fuel.network/v1/graphql') // const contract = new fuels.Contract(contractId, abi, provider) // const { value } = await contract.functions.total_assets().get() // console.log(contract.functions, +value) - return sumTokens({ api, owner: contractId, tokens }) + return sumTokens({ api, owner: contractId, }) } module.exports = { diff --git a/projects/oxiswap/index.js b/projects/oxiswap/index.js index 884a12beef..86eb48f42d 100644 --- a/projects/oxiswap/index.js +++ b/projects/oxiswap/index.js @@ -1,8 +1,8 @@ -const { sumAllTokens } = require("../helper/chain/fuel") +const { sumTokens } = require("../helper/chain/fuel") -async function tvl(_, _1, _2, { api }) { +async function tvl(api) { const pairContract = '0x0da1be8528c8f546521ba9507d334cdb06cbc8b8842b3c0a871b1b4195635363'; - return sumAllTokens({ api, owners: [pairContract] }); + return sumTokens({ api, owners: [pairContract] }); } module.exports = { diff --git a/projects/swaylend/index.js b/projects/swaylend/index.js new file mode 100644 index 0000000000..03d992009e --- /dev/null +++ b/projects/swaylend/index.js @@ -0,0 +1,12 @@ +const { sumTokens } = require("../helper/chain/fuel") + +async function tvl(api) { + const usdcMarket = '0x657ab45a6eb98a4893a99fd104347179151e8b3828fd8f2a108cc09770d1ebae' + return sumTokens({ api, owner: usdcMarket, }) +} + +module.exports = { + fuel: { tvl }, + timetravel: false, +} + From 194258a722c022cb3f64e10642ba1c7e7f06da4f Mon Sep 17 00:00:00 2001 From: 0xALUCARD <0xALUCARD@protonmail.com> Date: Wed, 23 Oct 2024 09:01:02 +0200 Subject: [PATCH 0772/1768] add spookyswap v3 dex --- projects/spookyswap-v3/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/spookyswap-v3/index.js diff --git a/projects/spookyswap-v3/index.js b/projects/spookyswap-v3/index.js new file mode 100644 index 0000000000..ea06e35f49 --- /dev/null +++ b/projects/spookyswap-v3/index.js @@ -0,0 +1,10 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +const factory = "0x7928a2c48754501f3a8064765ECaE541daE5c3E6"; +const factory_bttc = "0xE12b00681dD2e90f51d9Edf55CE1A7D171338165"; + +module.exports = uniV3Export({ + fantom: { factory, fromBlock: 70992836, blacklistedTokens:['0x6e5e3ce13e2c7d4de000f93c4909164d0aa59f0b'] }, + //eon: { factory, fromBlock: 679684 }, + bittorrent: { factory: factory_bttc, fromBlock: 26441276 }, +}) From b9d5114868081ea4d22c6985c612a90935d63a6c Mon Sep 17 00:00:00 2001 From: 0xALUCARD <95947347+0xALUCARD@users.noreply.github.com> Date: Wed, 23 Oct 2024 19:38:13 +0900 Subject: [PATCH 0773/1768] Add SpookySwap V3 DEX (#12007) --- projects/spookyswap-v3/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/spookyswap-v3/index.js diff --git a/projects/spookyswap-v3/index.js b/projects/spookyswap-v3/index.js new file mode 100644 index 0000000000..ea06e35f49 --- /dev/null +++ b/projects/spookyswap-v3/index.js @@ -0,0 +1,10 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +const factory = "0x7928a2c48754501f3a8064765ECaE541daE5c3E6"; +const factory_bttc = "0xE12b00681dD2e90f51d9Edf55CE1A7D171338165"; + +module.exports = uniV3Export({ + fantom: { factory, fromBlock: 70992836, blacklistedTokens:['0x6e5e3ce13e2c7d4de000f93c4909164d0aa59f0b'] }, + //eon: { factory, fromBlock: 679684 }, + bittorrent: { factory: factory_bttc, fromBlock: 26441276 }, +}) From ff9f674d2d2ee1ea852f663e2afc4dadae4721df Mon Sep 17 00:00:00 2001 From: Defx Engineering <142865223+defx-engg@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:10:09 +0530 Subject: [PATCH 0774/1768] Added TVL adapter for Defx. (#12009) --- projects/defx/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/defx/index.js diff --git a/projects/defx/index.js b/projects/defx/index.js new file mode 100644 index 0000000000..98626e678f --- /dev/null +++ b/projects/defx/index.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +module.exports = { + arbitrum: { + tvl: sumTokensExport({ tokensAndOwners: [ + [ + ADDRESSES.arbitrum.USDC_CIRCLE, + '0x091486F9427cf07942fa17Ad7194BE3feaDfa46d' + ] + ]}) + } +} \ No newline at end of file From d084759eacbf0c36888a92d15ee1758d2f1401c4 Mon Sep 17 00:00:00 2001 From: Crumbs <97379465+0xCrumb@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:41:09 +0100 Subject: [PATCH 0775/1768] [Gains Network | gTrade] Add missing gTokens + Base deployment (#12008) --- projects/gainsNetwork.js | 45 ++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/projects/gainsNetwork.js b/projects/gainsNetwork.js index 7e99fc19df..46b86f0da0 100644 --- a/projects/gainsNetwork.js +++ b/projects/gainsNetwork.js @@ -6,35 +6,54 @@ const { sumTokens2 } = require("./helper/unwrapLPs"); const tokens = { polygon: { DAI: ADDRESSES.polygon.DAI, - dQUICK: "0xf28164a485b0b2c90639e47b0f377b4a438a16b1", + USDC: ADDRESSES.polygon.USDC_CIRCLE, + WETH: ADDRESSES.polygon.WETH_1 }, arbitrum: { - DAI: ADDRESSES.optimism.DAI, + DAI: ADDRESSES.arbitrum.DAI, + USDC: ADDRESSES.arbitrum.USDC_CIRCLE, + WETH: ADDRESSES.arbitrum.WETH + }, + base: { + USDC: ADDRESSES.base.USDC, }, }; async function polyTvl(api) { const tokensAndOwners = [ - [tokens.polygon.dQUICK, "0x151757c2E830C467B28Fe6C09c3174b6c76aA0c5"], - [tokens.polygon.dQUICK, "0x203F5c9567d533038d2da70Cbc20e6E8B3f309F9"], - [tokens.polygon.DAI, "0xaee4d11a16B2bc65EDD6416Fb626EB404a6D65BD"], - [tokens.polygon.DAI, "0xd7052EC0Fe1fe25b20B7D65F6f3d490fCE58804f"], - [tokens.polygon.DAI, "0x91993f2101cc758D0dEB7279d41e880F7dEFe827"], - [tokens.polygon.DAI, "0xaee4d11a16B2bc65EDD6416Fb626EB404a6D65BD"], + [tokens.polygon.DAI, "0x91993f2101cc758D0dEB7279d41e880F7dEFe827"], // gDAI + [tokens.polygon.USDC, "0x29019Fe2e72E8d4D2118E8D0318BeF389ffe2C81"], // gUSDC + [tokens.polygon.WETH, "0x1544E1fF1a6f6Bdbfb901622C12bb352a43464Fb"], // gETH + [tokens.polygon.DAI, "0x209A9A01980377916851af2cA075C2b170452018"], // Diamond + [tokens.polygon.WETH, "0x209A9A01980377916851af2cA075C2b170452018"], // Diamond + [tokens.polygon.USDC, "0x209A9A01980377916851af2cA075C2b170452018"], // Diamond ]; return sumTokens2({ api, tokensAndOwners }); } async function arbiTvl(api) { const tokensAndOwners = [ - [tokens.arbitrum.DAI, "0xd85E038593d7A098614721EaE955EC2022B9B91B"], - [tokens.arbitrum.DAI, "0xcFa6ebD475d89dB04cAd5A756fff1cb2BC5bE33c"], + [tokens.arbitrum.DAI, "0xd85E038593d7A098614721EaE955EC2022B9B91B"], // gDAI + [tokens.arbitrum.USDC, "0xd3443ee1e91aF28e5FB858Fbd0D72A63bA8046E0"], // gUSDC + [tokens.arbitrum.WETH, "0x5977A9682D7AF81D347CFc338c61692163a2784C"], // gETH + [tokens.arbitrum.DAI, "0xFF162c694eAA571f685030649814282eA457f169"], // Diamond + [tokens.arbitrum.USDC, "0xFF162c694eAA571f685030649814282eA457f169"], // Diamond + [tokens.arbitrum.WETH, "0xFF162c694eAA571f685030649814282eA457f169"], // Diamond + ]; + return sumTokens2({ api, tokensAndOwners }); +} +async function baseTvl(api) { + const tokensAndOwners = [ + [tokens.base.USDC, "0xad20523A7dC37bAbc1CC74897E4977232b3D02e5"], // gUSDC + [tokens.base.USDC, "0x6cD5aC19a07518A8092eEFfDA4f1174C72704eeb"], // Diamond ]; return sumTokens2({ api, tokensAndOwners }); } // node test.js projects/gainsNetwork.js module.exports = { hallmarks: [ - [1672531200,"Launch on Arbitrum"] + [1672531200,"Launch on Arbitrum"], + [1705553229,"Launched gETH and gUSDC"], + [1727650801,"Launch on Base"], ], polygon: { tvl: polyTvl, @@ -49,4 +68,8 @@ module.exports = { tvl: arbiTvl, staking: staking(['0x6b8d3c08072a020ac065c467ce922e3a36d3f9d6', '0x7edDE7e5900633F698EaB0Dbc97DE640fC5dC015'], '0x18c11fd286c5ec11c3b683caa813b77f5163a122'), }, + base: { + tvl: baseTvl, + staking: staking(['0x28efAa11199DAF45AA8fBf95f920e5bc090DCbF3'], '0xFB1Aaba03c31EA98A3eEC7591808AcB1947ee7Ac'), + }, }; From 856c2c5f120e2ec782310b5f4e2b716257b71fb3 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 23 Oct 2024 13:08:49 +0200 Subject: [PATCH 0776/1768] Update: Openeden-tBill, add solana chain (#12010) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/fuel.js | 2 ++ projects/helper/chain/rpcProxy.js | 23 +++++++++++++++++++++ projects/helper/env.js | 3 ++- projects/openeden-tbill/index.js | 34 ++++++++++++++++--------------- projects/swaylend/index.js | 28 +++++++++++++++++++++---- projects/xrpl-dex/app.js | 2 +- 6 files changed, 70 insertions(+), 22 deletions(-) create mode 100644 projects/helper/chain/rpcProxy.js diff --git a/projects/helper/chain/fuel.js b/projects/helper/chain/fuel.js index 615e5e003f..43ead7d6cc 100644 --- a/projects/helper/chain/fuel.js +++ b/projects/helper/chain/fuel.js @@ -1,6 +1,7 @@ const { GraphQLClient, } = require('graphql-request') const { transformBalances } = require('../portedTokens') +const { fuel: { query }} = require('./rpcProxy') const client = new GraphQLClient('https://mainnet.fuel.network/v1/graphql') async function sumTokens({ api, owner, owners, token, tokens = [], tokensAndOwners = [] }) { @@ -50,4 +51,5 @@ async function addAllTokenBalances({ api, owners = [] }) { module.exports = { sumTokens, + query, } \ No newline at end of file diff --git a/projects/helper/chain/rpcProxy.js b/projects/helper/chain/rpcProxy.js new file mode 100644 index 0000000000..9851d9658b --- /dev/null +++ b/projects/helper/chain/rpcProxy.js @@ -0,0 +1,23 @@ +const axios = require('axios') +const { getEnv } = require('../env') + +const client = axios.create({ + baseURL: getEnv('RPC_PROXY_URL'), + timeout: 30000, +}) + + +module.exports = { + fuel: { + query: async ({ contractId, abi, method }) => { + const { data } = await client.post('/fuel/query', { contractId, abi, method }) + return data + } + }, + ripple: { + gatewayBalances: async ({ account, hotwallet }) => { + const { data } = await client.post('/ripple/gateway_balances', { account, hotwallet }) + return data + } + }, +} \ No newline at end of file diff --git a/projects/helper/env.js b/projects/helper/env.js index 30372bc4a0..27dbfdf4e3 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -21,7 +21,8 @@ const DEFAULTS = { SHAPE_RPC:'https://mainnet.shape.network', SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", - APECHAIN_RPC: "https://rpc.apechain.com" + APECHAIN_RPC: "https://rpc.apechain.com", + RPC_PROXY_URL: "https://rpc-proxy.llama.fi", } const ENV_KEYS = [ diff --git a/projects/openeden-tbill/index.js b/projects/openeden-tbill/index.js index 888ba0787c..6b102e529d 100644 --- a/projects/openeden-tbill/index.js +++ b/projects/openeden-tbill/index.js @@ -1,13 +1,12 @@ const { getCache, } = require("../helper/cache"); +const { getTokenSupply } = require('../helper/solana') +const { ripple } = require('../helper/chain/rpcProxy') const ADDRESSES = require('../helper/coreAssets.json') const tbill = "0xdd50C053C096CB04A3e3362E2b622529EC5f2e8a" +const solTbill = '4MmJVdwYN8LwvbGeCowYjSx7KoEi6BJWg8XXnW4fDDp6' -function getTimeNow() { - return Math.floor(Date.now() / 1000); -} - -async function tvl(api) { +async function evmTvl(api) { let contract = tbill if (api.chain === 'arbitrum') contract = '0xF84D28A8D28292842dD73D1c5F99476A80b6666A' const [bal, token] = await api.batchCall([ @@ -17,19 +16,22 @@ async function tvl(api) { api.add(token, bal) } +async function solTvl (api) { + const tvl = (await getTokenSupply(solTbill) * 10 ** 6) + api.add(solTbill, tvl) +} + async function ripplTvl (api) { - const timeNow = getTimeNow() - const aDayInSeconds = 60 * 60 * 24; - const projectKey = 'openeden-tbill' - const cacheKey = 'cache' - let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !tvl) - throw new Error("stale/missing tvl data"); - api.add(tbill, tvl * 10 ** 6, { skipChain: true }) + const issuerAddress = "rJNE2NNz83GJYtWVLwMvchDWEon3huWnFn"; + const subscriptionOperatorAddress = "rB56JZWRKvpWNeyqM3QYfZwW4fS9YEyPWM"; + + const data = await ripple.gatewayBalances({ account: issuerAddress, hotwallet: subscriptionOperatorAddress }) + api.add(tbill, Number(data.obligations?.TBL) * 1e6, { skipChain: true }) } module.exports = { - ethereum: { tvl }, - arbitrum: { tvl }, - ripple: { tvl: ripplTvl } + ethereum: { tvl: evmTvl }, + arbitrum: { tvl: evmTvl }, + ripple: { tvl: ripplTvl }, + solana: { tvl: solTvl } } \ No newline at end of file diff --git a/projects/swaylend/index.js b/projects/swaylend/index.js index 03d992009e..e4e2335760 100644 --- a/projects/swaylend/index.js +++ b/projects/swaylend/index.js @@ -1,12 +1,32 @@ -const { sumTokens } = require("../helper/chain/fuel") +const { sumTokens, query } = require("../helper/chain/fuel") +const { getConfig } = require('../helper/cache') +const { get } = require('../helper/http') +const markets = [ + '0x657ab45a6eb98a4893a99fd104347179151e8b3828fd8f2a108cc09770d1ebae', // USDC market +] async function tvl(api) { - const usdcMarket = '0x657ab45a6eb98a4893a99fd104347179151e8b3828fd8f2a108cc09770d1ebae' - return sumTokens({ api, owner: usdcMarket, }) + return sumTokens({ api, owners: markets, }) +} + +async function borrowed(api) { + const abi = await getConfig('swaylend/abi', undefined,{ + fetcher: async () => { + let data = await get('https://raw.githubusercontent.com/Swaylend/swaylend-monorepo/refs/heads/develop/apps/frontend/src/contract-types/Market.ts') + data = data.split('const abi =')[1].split(';')[0] + return JSON.parse(data) // ensure that this doesnt fail + // return data + } + }) + for (const market of markets) { + const { base_token } = await query({ contractId: market, abi, method: 'get_market_configuration' }) + const { total_borrow_base }= await query({ contractId: market, abi, method: 'get_market_basics' }) + api.add(base_token.bits, +total_borrow_base ) + } } module.exports = { - fuel: { tvl }, + fuel: { tvl, borrowed, }, timetravel: false, } diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js index b895078a60..c802dd38fb 100644 --- a/projects/xrpl-dex/app.js +++ b/projects/xrpl-dex/app.js @@ -197,7 +197,7 @@ async function openedenRippleTvl() { async function main() { return Promise.allSettled([ - openedenRippleTvl(), + // openedenRippleTvl(), xrplDex() ]) } \ No newline at end of file From 1d79d340118ecc12eeb06e8102d4306fcbb06df7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 13:35:09 +0200 Subject: [PATCH 0777/1768] track Thorn #12011 --- projects/thorn-protocol/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/thorn-protocol/index.js diff --git a/projects/thorn-protocol/index.js b/projects/thorn-protocol/index.js new file mode 100644 index 0000000000..7778a25348 --- /dev/null +++ b/projects/thorn-protocol/index.js @@ -0,0 +1,18 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + let target = "0x888099De8EA8068D92bB04b47A743B82195c4aD2" + const pairs = await api.fetchList({ lengthAbi: 'pairLength', itemAbi: 'swapPairContract', target }) + const res = await api.fetchList({ lengthAbi: 'N_COINS', itemAbi: 'coins', targets: pairs, groupedByInput: true, }) + const ownerTokens = res.map((tokens, i) => [tokens, pairs[i]]) + return sumTokens2({ api, ownerTokens, permitFailure: true, }) +} + +module.exports = { + methodology: + "Uses factory(0x888099De8EA8068D92bB04b47A743B82195c4aD2) address and whitelisted tokens address to find and price Liquidity Pool pairs", + start: 1729159200, + sapphire: { + tvl, + }, +}; From 4c72e535cc71cad8a339e244f942258e81632846 Mon Sep 17 00:00:00 2001 From: Masayoshi <82962873+0xMasayoshi@users.noreply.github.com> Date: Wed, 23 Oct 2024 23:53:02 +0800 Subject: [PATCH 0778/1768] create saru adapter (#12012) --- projects/saru/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 projects/saru/index.js diff --git a/projects/saru/index.js b/projects/saru/index.js new file mode 100644 index 0000000000..c334269529 --- /dev/null +++ b/projects/saru/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require("../helper/unknownTokens") + +module.exports = { + misrepresentedTokens: true, + apechain: { + tvl: getUniTVL({ factory: '0x57bfFa72db682f7eb6C132DAE03FF36bBEB0c459', useDefaultCoreAssets: true }) + } +}; \ No newline at end of file From 1d797ebecd69a1c9b26ab9d19f6a3a3b395cd405 Mon Sep 17 00:00:00 2001 From: Kacper Bak <290936+kbak@users.noreply.github.com> Date: Wed, 23 Oct 2024 09:02:52 -0700 Subject: [PATCH 0779/1768] Added Zircuit Staking L2 TVL (#11941) --- projects/zircuit/index.js | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index 3c16d07952..8cd2852393 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -1,9 +1,10 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); -const ZIRCUIT_STAKING_CONTRACT = '0xf047ab4c75cebf0eb9ed34ae2c186f3611aeafa6'; +const ZIRCUIT_STAKING_CONTRACT_ETHEREUM = '0xf047ab4c75cebf0eb9ed34ae2c186f3611aeafa6'; +const ZIRCUIT_STAKING_CONTRACT_ZIRCUIT = '0x7d8311839eB44Dd5194abd2dd3998722455A24E0'; -const TOKEN_CONTRACTS = [ +const TOKEN_CONTRACTS_ETHEREUM = [ '0xa1290d69c65a6fe4df752f95823fae25cb99e5a7', // rsETH '0xbf5495Efe5DB9ce00f80364C8B423567e58d2110', // ezETH '0x8c1BEd5b9a0928467c9B1341Da1D7BD5e10b6549', // lsETH @@ -32,11 +33,35 @@ const TOKEN_CONTRACTS = [ ADDRESSES.ethereum.FDUSD // FDUSD ]; +const TOKEN_CONTRACTS_ZIRCUIT = [ + '0x4200000000000000000000000000000000000006', // wETH + '0x91a0F6EBdCa0B4945FbF63ED4a95189d2b57163D', // mETH + '0xD8b29106d4ceBad087C30B10c0E41BAa3A9ea703', // rswETH + '0x850CDF416668210ED0c36bfFF5d21921C7adA3b8', // swETH + '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC + '0x9cb41CD74D01ae4b4f640EC40f7A60cA1bCF83E7', // pzETH + '0x80137510979822322193FC997d400D5A6C747bf7', // STONE + '0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34', // USDe + '0xF97c7A9bECe498FD6e31e344643589aACC96206A', // LsETH + '0x4186BFC76E2E237523CBC30FD220FE055156b41F', // rsETH + '0xf0e673Bc224A8Ca3ff67a61605814666b1234833', // wstETH + '0x2416092f143378750bb29b79eD961ab195CcEea5', // ezETH + '0x3535DF6e1d776631D0cBA53FE9efD34bCbDcEeD4', // weETH + '0x4b03831043082E3e5191218ad5331E99AaaC4A81', // weETHs + '0x5661cE45EE081CbE1f81BF23E46f4E01E11795D4' // FBTC +]; + module.exports = { ethereum: { tvl: sumTokensExport({ - owner: ZIRCUIT_STAKING_CONTRACT, - tokens: TOKEN_CONTRACTS, + owner: ZIRCUIT_STAKING_CONTRACT_ETHEREUM, + tokens: TOKEN_CONTRACTS_ETHEREUM, + }), + }, + zircuit: { + tvl: sumTokensExport({ + owner: ZIRCUIT_STAKING_CONTRACT_ZIRCUIT, + tokens: TOKEN_CONTRACTS_ZIRCUIT, }), } }; \ No newline at end of file From c7bc55f6322a9097bf70b58713348800434ec5e6 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 23 Oct 2024 20:16:21 +0200 Subject: [PATCH 0780/1768] Fix aave (#11997) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/aave-v3/index.js | 58 +++++++++++++++++++++++++++++++++++++++ projects/aave/v3.js | 43 ----------------------------- 2 files changed, 58 insertions(+), 43 deletions(-) create mode 100644 projects/aave-v3/index.js delete mode 100644 projects/aave/v3.js diff --git a/projects/aave-v3/index.js b/projects/aave-v3/index.js new file mode 100644 index 0000000000..2bb6fcc040 --- /dev/null +++ b/projects/aave-v3/index.js @@ -0,0 +1,58 @@ +const abi = { + getReserveTokensAddresses: "function getReserveTokensAddresses(address asset) view returns (address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress)", + getAllReservesTokens: "function getAllReservesTokens() view returns ((string symbol, address tokenAddress)[])", + getReserveData: "function getReserveData(address asset) view returns (uint256 unbacked, uint256 accruedToTreasuryScaled, uint256 totalAToken, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", +}; + +const CONFIG = { + ethereum: ['0x41393e5e337606dc3821075Af65AeE84D7688CBD', '0x08795CFE08C7a81dCDFf482BbAAF474B240f31cD', '0xE7d490885A68f00d9886508DF281D67263ed5758'], + polygon: ['0x7F23D86Ee20D869112572136221e173428DD740B'], + avax: ['0x7F23D86Ee20D869112572136221e173428DD740B'], + arbitrum: ['0x7F23D86Ee20D869112572136221e173428DD740B'], + optimism: ['0x7F23D86Ee20D869112572136221e173428DD740B'], + harmony: ['0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654'], + fantom: ['0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654'], + metis: ['0xC01372469A17b6716A38F00c277533917B6859c0'], + base: ['0xd82a47fdebB5bf5329b09441C3DaB4b5df2153Ad'], + xdai: ['0x57038C3e3Fe0a170BB72DE2fD56E98e4d1a69717'], + scroll: ['0xe2108b60623C6Dcf7bBd535bD15a451fd0811f7b'], + bsc: ['0x23dF2a19384231aFD114b036C14b6b03324D79BC'], + era: ['0x5F2A704cE47B373c908fE8A29514249469b52b99'] +}; + +const fetchReserveData = async (api, poolDatas, isBorrowed) => { + const reserveTokens = await api.multiCall({ calls: poolDatas, abi: abi.getAllReservesTokens }); + const calls = [] + + poolDatas.map((pool, i) => { + reserveTokens[i].forEach(({ tokenAddress }) => calls.push({ target: pool, params: tokenAddress })); + }); + const reserveData = await api.multiCall({ abi: isBorrowed ? abi.getReserveData : abi.getReserveTokensAddresses, calls, }) + const tokensAndOwners = [] + reserveData.forEach((data, i) => { + const token = calls[i].params + if (isBorrowed) { + api.add(token, data.totalVariableDebt) + api.add(token, data.totalStableDebt) + } else + tokensAndOwners.push([token, data.aTokenAddress]) + }) + + if (isBorrowed) return api.getBalances() + return api.sumTokens({ tokensAndOwners }) +} + +module.exports.methodology = "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending." + +Object.keys(CONFIG).forEach((chain) => { + const poolDatas = CONFIG[chain]; + module.exports[chain] = { + tvl: (api) => fetchReserveData(api, poolDatas), + borrowed: (api) => fetchReserveData(api, poolDatas, true), + }; +}); + +module.exports.hallmarks = [ + [1659630089, "Start OP Rewards"], + [1650471689, "Start AVAX Rewards"] +] diff --git a/projects/aave/v3.js b/projects/aave/v3.js deleted file mode 100644 index 02f47848d7..0000000000 --- a/projects/aave/v3.js +++ /dev/null @@ -1,43 +0,0 @@ -const { aaveChainTvl, aaveExports } = require('../helper/aave'); -const methodologies = require('../helper/methodologies'); -const { mergeExports } = require('../helper/utils'); - -const v3params = ["0x770ef9f4fe897e59daCc474EF11238303F9552b6", undefined, ["0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654"]] - -function v3(chain) { - let params = v3params - if (chain === 'ethereum') - params = ['0xbaA999AC55EAce41CcAE355c77809e68Bb345170', undefined, ['0x7B4EB56E7CD4b454BA8ff71E4518426369a138a3']] - else if (chain === 'metis') - params = ['0x9E7B73ffD9D2026F3ff4212c29E209E09C8A91F5', undefined, ['0x99411FC17Ad1B56f49719E3850B2CDcc0f9bBFd8']] - else if (chain === 'base') - params = ['0x2f6571d3Eb9a4e350C68C36bCD2afe39530078E2', undefined, ['0x2d8A3C5677189723C4cB8873CfC9C8976FDF38Ac']] - else if (chain === 'xdai') - params = ['0x36616cf17557639614c1cdDb356b1B83fc0B2132', undefined, ['0x501B4c19dd9C2e06E94dA7b6D5Ed4ddA013EC741']] - else if (chain === 'scroll') - params = ['0xFBedc64AeE24921cb43004312B9eF367a4162b57', undefined, ['0xa99F4E69acF23C6838DE90dD1B5c02EA928A53ee']] - else if (chain === 'bsc') - params = ['0x117684358D990E42Eb1649E7e8C4691951dc1E71', undefined, ['0x41585C50524fb8c3899B43D7D797d9486AAc94DB']] - else if (chain === 'era') - params = ['0x0753E3637ddC6efc40759D9c347251046644F25F', undefined, ['0x48B96565291d1B23a014bb9f68E07F4B2bb3Cd6D']] - const section = borrowed => aaveChainTvl(chain, ...params, borrowed, true); - return { - tvl: section(false), - borrowed: section(true) - } -} - -module.exports = mergeExports({ - methodology: methodologies.lendingMarket, - avax: v3("avax"), - ...["optimism", "fantom", "harmony", "arbitrum", "polygon", "ethereum", "metis", "base", "xdai", "scroll", "bsc", "era"].reduce((t, c) => ({ ...t, [c]: v3(c) }), {}), -}, { - // Lido pool - ethereum: aaveExports(undefined, "0x770ef9f4fe897e59daCc474EF11238303F9552b6", undefined, ["0xa3206d66cF94AA1e93B21a9D8d409d6375309F4A"], { v3: true, }), -}); - -module.exports.hallmarks = [ - [1659630089, "Start OP Rewards"], - [1650471689, "Start AVAX Rewards"] -] -// node test.js projects/aave/index.js From 4e004b6e71d66bae6e3ca58bcbce16d8463c73d5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:12:55 +0200 Subject: [PATCH 0781/1768] track hydro farm tvl #11883 --- projects/helper/chain/rpcProxy.js | 6 ++ projects/hydro-farm/index.js | 94 +++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 projects/hydro-farm/index.js diff --git a/projects/helper/chain/rpcProxy.js b/projects/helper/chain/rpcProxy.js index 9851d9658b..0c7d948074 100644 --- a/projects/helper/chain/rpcProxy.js +++ b/projects/helper/chain/rpcProxy.js @@ -20,4 +20,10 @@ module.exports = { return data } }, + injective: { + mitoVaultQuery: async ({ address }) => { + const { data } = await client.get('/injective/mito-vault/' + address) + return data + } + }, } \ No newline at end of file diff --git a/projects/hydro-farm/index.js b/projects/hydro-farm/index.js new file mode 100644 index 0000000000..8260dc4d3e --- /dev/null +++ b/projects/hydro-farm/index.js @@ -0,0 +1,94 @@ +const { queryContract, endPoints, } = require("../helper/chain/cosmos"); +const { get } = require("../helper/http"); +const { injective: { mitoVaultQuery } } = require("../helper/chain/rpcProxy") + +// Contract +const lrpManager = "inj1rv7ztpa8nkywc89a05eys52fzgezlnzjq3grkz" +const vaultMaster = "inj1vcqkkvqs7prqu70dpddfj7kqeqfdz5gg662qs3" + +async function getAllRegisteredVaults(api) { + let startAfterSubaccount + let results = [] + let loop = true + + while (loop) { + const { registered_vaults } = await queryContract({ + chain: api.chain, + contract: vaultMaster, + data: { + get_registered_vaults: { + start_after_subaccount: startAfterSubaccount, + limit: 30, + } + } + }) + + if (registered_vaults.length === 0) { + loop = false + return results + } + + results.push(...registered_vaults) + const lastOne = results[results.length - 1] + startAfterSubaccount = lastOne.vault.master_subaccount_id + } +} + +async function getMitoLpPrice(api, lrp, vaults) { + const { vault_subaccount_id } = await queryContract({ chain: api.chain, contract: lrp.yield_proxy_address, data: { config: {} } }) + const { vault: { address } } = vaults.find((vault) => vault.vault.master_subaccount_id === vault_subaccount_id) + const res = await mitoVaultQuery({ address }) + return res.lpTokenPrice +} + +async function tvl(api) { + const { lrps } = await queryContract({ chain: api.chain, contract: lrpManager, data: { lrps: { limit: 100 } } }) + const vaults = await getAllRegisteredVaults(api) + + for (const lrp of lrps) { + const { total_supply: lrpTotalSupply } = await queryContract({ chain: api.chain, contract: lrp.lrp_address, data: { token_info: {} } }) + if (+lrpTotalSupply === 0) continue; + + const { contract_info } = await get(`${endPoints[api.chain]}/cosmwasm/wasm/v1/contract/${lrp.yield_proxy_address}`, undefined, api.chain) + const isDojo = contract_info.label.includes("dojo") + const isMito = contract_info.label.includes("mito") + + if (isDojo) { + const asset_infos = lrp.bond_tokens.map((i) => { + if (i.native) return { native_token: { denom: i.native } } + console.error({ lrp, i, contract_info, lrpTotalSupply }) + throw new Error("Unknown asset_infos") + }) + + // get LP contract address + const { contract_addr } = await queryContract({ + chain: api.chain, contract: 'inj1pc2vxcmnyzawnwkf03n2ggvt997avtuwagqngk', data: { + pair: { asset_infos } + } + }) + const { assets, total_share } = await queryContract({ chain: api.chain, contract: contract_addr, data: { pool: {} } }) + const ratio = lrpTotalSupply / total_share + assets.forEach((asset) => { + api.add(getToken(asset), asset.amount * ratio) + }) + + } else if (isMito) { + const lpPrice = await getMitoLpPrice(api, lrp, vaults) + api.addUSDValue(lpPrice * lrpTotalSupply) + } else { + console.error("Unknown lrp type", { lrp, contract_info }) + } + } +} + +module.exports = { + methodology: "Liquidity on hydro-protocol", + misrepresentedTokens: true, + injective: { + tvl, + }, +}; + +function getToken(asset) { + return asset.info.native_token?.denom ?? asset.info.token?.contract_addr +} \ No newline at end of file From 44534fa9a103885ec0f1f2ea489153da91628de8 Mon Sep 17 00:00:00 2001 From: lyfmantle <161433628+lyfmantle@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:44:28 +0800 Subject: [PATCH 0782/1768] update fbtc addresses (#11882) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/fbtc/index.js | 40 +++++++++++++++------------------------- projects/helper/env.js | 1 + 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/projects/fbtc/index.js b/projects/fbtc/index.js index 6d656a7ca9..df7d51d347 100644 --- a/projects/fbtc/index.js +++ b/projects/fbtc/index.js @@ -1,34 +1,24 @@ +const { getConfig } = require('../helper/cache') const { sumTokens } = require('../helper/chain/bitcoin') const sdk = require('@defillama/sdk') +const { get } = require('../helper/http') +const { getEnv } = require('../helper/env') -const staticAddresses = [ - // https://docs.fbtc.com/security/bitcoin-reserve-address - 'bc1q7jgulg69frc8zuzy0ng8d5208kae7t0twyfjwm', - 'bc1q6c3c0t3zvnphce37ufr4yz9veaqvew2wg0shwr', - '3HjNJWcn2ayFLikzmKRaFtcbLufYChQo3T', - '374vhN24WryvNWUUZR2uDAnL4oNP5EW4qR', - - 'bc1qr5nz7n8ulcdz0w3s6fska80fawxhvqlh273qypm3rkjequ9wpmhs65ppw7', - 'bc1qhu98nf6ddz6ja73rn72encdr8ezsyhexwpdzap0vcs7lg2wpmrnq5ygfsl', - 'bc1qg6asmzjr7nr5f5upg3xqyrdxl2tq8ef58hha7t0s82mzzx6zjxesyccp4h', - 'bc1qxe3md4lehg8gmrlx3e8xqju5mytt266l4hcy8khl6tm5mahghmeqtxlgqq', - 'bc1qy48h0kuv0r3e330wjfs6r74sk49pkzumnm907t5mhqjxml22r3ss2ucuxc', - - '32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', - 'bc1qj9w5ee2kf4akvtzrj59p77yc6x02nqqg9m0tcd', - 'bc1q6w7dn3fkky587a2qwxp6swyhlwgueh2ew26zem', - - '3Pg6HJJPhm3X7eWrdHbPFQeHU723a9GSJ7', - '35cUDQg2EBuc3wadWmcEFW2YG7Uj2yfNRq', - 'bc1qwgnhe6vn5zzu7csukavhfatzdasvmkavktqe4udzx96dk602ghsqaz8vt6', - 'bc1qf2lqvumkq2l2d3qej7u6w9u84djfnmy7kfcqdulfpcm7zqxl330smc0mkj', - 'bc1qyzsetzfrwzxs7zzqtsmyaz39mumhrh58mu04kyjcy8pynn9zhk5q2dc2r3', - 'bc1qxsuy93rr0mat8sdlzjuk86z6ajpr04634wfx04lcuerw7dj52k5q8k6qaq' -] const abi = { - getQualifiedUserInfo: "function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)", + getQualifiedUserInfo: 'function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)', } async function tvl() { + const staticAddresses = await getConfig('fbtc', undefined, { + fetcher: async () => { + const token = getEnv('FBTC_ACCESS_TOKEN') + const { result } = await get('https://fbtc.phalcon.blocksec.com/api/v1/extension/fbtc-reserved-addr', { + headers: { + 'access-token': token + } + }) + return result.map(r => r.address) + } + }) const api = new sdk.ChainApi({ chain: 'ethereum' }) const users = await api.call({ abi: 'address[]:getQualifiedUsers', target: '0xbee335BB44e75C4794a0b9B54E8027b111395943' }) const userInfos = await api.multiCall({ abi: abi.getQualifiedUserInfo, target: '0xbee335BB44e75C4794a0b9B54E8027b111395943', calls: users }) diff --git a/projects/helper/env.js b/projects/helper/env.js index 27dbfdf4e3..90b0c9b531 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -36,6 +36,7 @@ const ENV_KEYS = [ 'SUMMER_AJNA_ENDPOINT', 'SUMMER_CONFIRMED_VAULTS_ENDPOINT', 'ETHEREUM_TOKENS_ENDPOINT', + 'FBTC_ACCESS_TOKEN', 'UNISAT_AUTH' ] From 3888f19bdd10010013ae33d53b57bf20bd98dfa5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 04:59:28 +0200 Subject: [PATCH 0783/1768] track root #12013 --- projects/root-finance/index.js | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 projects/root-finance/index.js diff --git a/projects/root-finance/index.js b/projects/root-finance/index.js new file mode 100644 index 0000000000..701d7b7b40 --- /dev/null +++ b/projects/root-finance/index.js @@ -0,0 +1,55 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const { queryAddresses, sumTokens } = require('../helper/chain/radixdlt'); + +const pools = [ + { + pool: 'component_rdx1cqasw720453g8pr2jc3nxq2h9rrv9cvfjy35q6jhskukqqs0t7qcky', + resource: ADDRESSES.radixdlt.XRD, + }, + { + pool: 'component_rdx1cqz0f5znwhyy2d4q2rhncetm5tfpvu2c73kvfertktkw33drxcawk8', + resource: 'resource_rdx1thrvr3xfs2tarm2dl9emvs26vjqxu6mqvfgvqjne940jv0lnrrg7rw', + }, + { + pool: 'component_rdx1cp5hd3a2daw4vuzx0hywn56ur2pmat7nnytl5v3pv36xky5hkpr84y', + resource: 'resource_rdx1t580qxc7upat7lww4l2c4jckacafjeudxj5wpjrrct0p3e82sq4y75', + }, + { + pool: 'component_rdx1cr87dx5laxnffdkyv4fsrwms3m62vexgye9x9xpxyrv63gzpgwt97d', + resource: 'resource_rdx1th88qcj5syl9ghka2g9l7tw497vy5x6zaatyvgfkwcfe8n9jt2npww', + }, + { + pool: 'component_rdx1czuk76y4vhgd44sxly0un2tqegws670dqp0usl2tlsgfkhmdl8dad3', + resource: 'resource_rdx1t5kmyj54jt85malva7fxdrnpvgfgs623yt7ywdaval25vrdlmnwe97', + }, + { + pool: 'component_rdx1cqlfmwmhdmp0ln4gaera4skn3yz30p4k5ssv7lqflgh0rjeakwzs9f', + resource: 'resource_rdx1t4upr78guuapv5ept7d7ptekk9mqhy605zgms33mcszen8l9fac8vf', + } +] + +async function fetchData(addresses) { + return await queryAddresses({ addresses }); +} + +async function tvl(api) { + return sumTokens({ api, owners: pools.map((item) => item.pool) }); +} + +async function borrowed(api) { + const [poolData,] = await Promise.all([ + fetchData(pools.map((item) => item.pool)), + ]); + + + pools.forEach((pool, i) => { + const { details } = poolData.find((item) => item.address === pool.pool); + api.add(pools[i].resource, Number(details.state.fields[1].value)); + }); +} + +module.exports = { + radixdlt: { tvl, borrowed }, + timetravel: false, +}; From 1b00db7a60a450b4a1258e9858caf9d83255eba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=85=BE=E5=AE=87?= <992899491@qq.com> Date: Thu, 24 Oct 2024 11:00:49 +0800 Subject: [PATCH 0784/1768] ModeMax V2 TVL (#12016) Co-authored-by: gengbingbing --- projects/modemax-perp-v2/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/modemax-perp-v2/index.js diff --git a/projects/modemax-perp-v2/index.js b/projects/modemax-perp-v2/index.js new file mode 100644 index 0000000000..c9aadc03ce --- /dev/null +++ b/projects/modemax-perp-v2/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + mode: { + tvl: gmxExports({ vault: '0x6824AbeA9D564e469B8FAaA0300b04cAFdD78341' }) + }, +}; From 1bfcb161fbfb488e9986b50fb3990547cad8e80c Mon Sep 17 00:00:00 2001 From: noah-wasd3r Date: Thu, 24 Oct 2024 12:01:28 +0900 Subject: [PATCH 0785/1768] add astar (#12015) --- projects/synstation/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/synstation/index.js b/projects/synstation/index.js index 666e1c35bc..d7c9dac062 100644 --- a/projects/synstation/index.js +++ b/projects/synstation/index.js @@ -1,7 +1,8 @@ const { sumUnknownTokens } = require("../helper/unknownTokens") const config = { - ethereum: "0x3BaC111A6F5ED6A554616373d5c7D858d7c10d88" + ethereum: "0x3BaC111A6F5ED6A554616373d5c7D858d7c10d88", + astar: "0xe9B85D6A1727d4B22595bab40018bf9B7407c677" } Object.keys(config).forEach(chain => { From 3434f234d0c366bca50466d10bebd73d47e7750d Mon Sep 17 00:00:00 2001 From: 0xLight <109751758+0xLightt@users.noreply.github.com> Date: Thu, 24 Oct 2024 04:02:08 +0100 Subject: [PATCH 0786/1768] Update Ulysses adapter - update branch port addresses (#12014) --- projects/ulysses/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/ulysses/index.js b/projects/ulysses/index.js index 3c3422ad77..9e9bf5b14d 100644 --- a/projects/ulysses/index.js +++ b/projects/ulysses/index.js @@ -1,9 +1,9 @@ const { sumTokensExport } = require("../helper/unwrapLPs") const ADDRESSES = require('../helper/coreAssets.json') -const defaultPort = '0x6C6d3FB0289039b0FCa2E7244A06Cf9403464646' +const defaultPort = '0x0000151d008235A6cC00004F00FA2bDF9dF95400' const ports = { - arbitrum: '0x0c453ef35986E1d8dA22043fF00BF03cEB42e1f7', + arbitrum: '0x79f4b04FFCa54BC946aa0ef8E33eE723467f0192', ethereum: undefined, optimism: undefined, base: undefined, From e5f9518ebd569b45d7f3c8a13b764e80d17b9c5a Mon Sep 17 00:00:00 2001 From: Shoebill Finance <118880028+ShoebillFinance@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:41:04 +0900 Subject: [PATCH 0787/1768] Add ZetaChain (#12017) --- projects/shoebillFinance-v2/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/shoebillFinance-v2/index.js b/projects/shoebillFinance-v2/index.js index 720f27cd0e..61421cb7fe 100644 --- a/projects/shoebillFinance-v2/index.js +++ b/projects/shoebillFinance-v2/index.js @@ -1,5 +1,6 @@ const { compoundExports2 } = require("../helper/compound"); const { mergeExports } = require("../helper/utils"); +const { aaveExports } = require("../helper/aave"); module.exports = mergeExports([ { @@ -87,4 +88,8 @@ module.exports = mergeExports([ cether: "0x4dA697a89ea1D166881362b56E6863294820eC97", }), }, + { + zeta: aaveExports(undefined, undefined, undefined, ['0x2B6647f63f6Fab5c73e96FBf974f4ed2AB8a4308'], { v3: true }) + } + ]); From 59b09c95d61aeb607f7d529e2510f740c15dd007 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 05:51:00 +0200 Subject: [PATCH 0788/1768] Chainge (#12019) Co-authored-by: thomga --- projects/chainge.js | 30 ++++++++++++++++++++++-------- projects/helper/coreAssets.json | 9 ++++++++- projects/helper/tokenMapping.js | 2 ++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/projects/chainge.js b/projects/chainge.js index e438c9fd93..687a427253 100644 --- a/projects/chainge.js +++ b/projects/chainge.js @@ -1,13 +1,27 @@ -const utils = require('./helper/utils'); +const ADDRESSES = require('./helper/coreAssets.json') +const { sumTokensExport } = require('./helper/unwrapLPs') -// fusion -async function fetch() { - let tvl = await utils.fetchURL('https://info.chainge.finance/api/v1/info/getInfoOuterTvl') - - return tvl.data.data.totalTvl +const config = { + rollux: { + chaingeAddress: "0x66ff2f0AC3214758D1e61B16b41e3d5e62CAEcF1", + tokens: [ + ADDRESSES.rollux.USDC, + ADDRESSES.rollux.USDT, + ADDRESSES.rollux.WBTC, + ADDRESSES.rollux.WETH, + ADDRESSES.rollux.WSYS, + ADDRESSES.null, // for native SYS + ] + } } module.exports = { - methodology: "assets in liquidity are counted as TVL", - fetch + methodology: "assets in liquidity are counted as TVL + balances of all tokens (USDC, USDT, WBTC, WETH, WSYS, and native SYS) held in the Chainge treasury address on the Rollux network. These tokens are used to provide liquidity for cross-chain swaps.", } + +Object.keys(config).forEach(chain => { + const { chaingeAddress, tokens } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owner: chaingeAddress, tokens }) + } +}) \ No newline at end of file diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 328881d828..30ce87b735 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1039,6 +1039,13 @@ "ETH": "0x7c598c96d02398d89fbcb9d41eab3df0c16f227d", "USDT": "0x922d641a426dcffaef11680e5358f34d97d112e1" }, + "rollux": { + "WSYS": "0x4200000000000000000000000000000000000006", + "USDC": "0x368433cac2a0b8d76e64681a9835502a1f2a8a30", + "WETH": "0xaa1c53afd099e415208f47fcfa2c880f659e6904", + "USDT": "0x28c9c7fb3fe3104d2116af26cc8ef7905547349c", + "WBTC": "0x2a4dc2e946b92ab4a1f7d62844eb237788f9056c" + }, "vision": { "USDT": "0x1db6cdc620388a0b6046b20cd59503a0839adcff", "VBTC": "0x4dE4B92C12dD4584873e72447573382C41da5597", @@ -1949,4 +1956,4 @@ "bitkub": { "KKUB": "0x67ebd850304c70d983b2d1b93ea79c7cd6c3f6b5" } -} +} \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 8ba04f3f4c..89a0f6c23c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -88,6 +88,8 @@ const fixBalancesTokens = { }, rollux: { '0x570baA32dB74279a50491E88D712C957F4C9E409': { coingeckoId: 'uno-re', decimals: 18 }, + '0xaa1c53afd099e415208f47fcfa2c880f659e6904': { coingeckoId: 'weth', decimals: 18 }, + '0x2a4dc2e946b92ab4a1f7d62844eb237788f9056c': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, }, taiko: { '0xd347949f8c85d9f3d6b06bfc4f8c2e07c161f064': { coingeckoId: "loopring", decimals: 18 }, From 45cb1e7cc3129fed2bb336586b97bcfa38f34aea Mon Sep 17 00:00:00 2001 From: morkie-stack Date: Thu, 24 Oct 2024 08:42:37 +0300 Subject: [PATCH 0789/1768] add morkie adapter (#12021) Co-authored-by: morkie-stack --- projects/morkie/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/morkie/index.js diff --git a/projects/morkie/index.js b/projects/morkie/index.js new file mode 100644 index 0000000000..de3b74d8b4 --- /dev/null +++ b/projects/morkie/index.js @@ -0,0 +1,11 @@ +const { staking } = require('../helper/staking'); + +module.exports = { + polygon: { + tvl: () => ({}), + staking: staking( + '0xee1198CF7575dfb2D5D666964322B6569B23E56b', + '0xAFb755c5f2ea2aadBaE693d3BF2Dc2C35158dC04' + ) + } +}; From 9d1dab3bff7f04b04a64d84080b0cc8897b2a1d6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 07:58:51 +0200 Subject: [PATCH 0790/1768] Metavault (#12022) Co-authored-by: 0xR <0xr@metavault.trade> --- projects/kinetix/index.js | 7 ++- projects/metavault.trade/index.js | 3 +- projects/metavault/index.js | 75 ++++++++++--------------------- 3 files changed, 32 insertions(+), 53 deletions(-) diff --git a/projects/kinetix/index.js b/projects/kinetix/index.js index d6e0c16762..062d667e7c 100644 --- a/projects/kinetix/index.js +++ b/projects/kinetix/index.js @@ -1,7 +1,12 @@ const { gmxExports } = require('../helper/gmx') +const { staking } = require('../helper/staking'); + +const KAI_ADDRESS_KAVA = "0x52369B1539EA8F4e1eadEEF18D85462Dcf9a3658" +const veKAI_ADDRESS_KAVA = "0x2A0A26D08E2F7A8E86431Ddf6910Fe7cD59b9908" module.exports = { kava: { - tvl: gmxExports({ vault: "0xa721f9f61CECf902B2BCBDDbd83E71c191dEcd8b", }) + tvl: gmxExports({ vault: "0xa721f9f61CECf902B2BCBDDbd83E71c191dEcd8b", }), + staking: staking(veKAI_ADDRESS_KAVA, KAI_ADDRESS_KAVA), }, }; \ No newline at end of file diff --git a/projects/metavault.trade/index.js b/projects/metavault.trade/index.js index 63f80c08e2..9fc38e2375 100644 --- a/projects/metavault.trade/index.js +++ b/projects/metavault.trade/index.js @@ -4,6 +4,7 @@ const { staking } = require("../helper/staking"); const polygonVault = "0x32848E2d3aeCFA7364595609FB050A301050A6B4"; const polygonStaking = "0xE8e2E78D8cA52f238CAf69f020fA961f8A7632e9"; // Staked MVX, sMVX const polygonMVX = "0x2760e46d9bb43dafcbecaad1f64b93207f9f0ed7"; +const polygonMvxVester = "0x543e07eb4a260e10310fbcf2403e97c762a8db0b" // New Vester const polygonTVL = async (api) => { const tokens = await api.fetchList({ lengthAbi: abi.allWhitelistedTokensLength, itemAbi: abi.allWhitelistedTokens, target: polygonVault}) @@ -12,7 +13,7 @@ const polygonTVL = async (api) => { module.exports = { polygon: { - staking: staking(polygonStaking, polygonMVX), + staking: staking([polygonStaking, polygonMvxVester], polygonMVX, ), tvl: polygonTVL, }, }; \ No newline at end of file diff --git a/projects/metavault/index.js b/projects/metavault/index.js index d4f00986ca..49b59edd41 100644 --- a/projects/metavault/index.js +++ b/projects/metavault/index.js @@ -1,16 +1,13 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk"); const readerAbi = require("./reader.json"); const mvlpManagerAbi = require("./mvlpManager.json"); const { staking } = require("../helper/staking"); -const { sumTokens2 } = require('../helper/unwrapLPs'); -const { default: BigNumber } = require("bignumber.js"); +const { sumTokensExport } = require('../helper/unwrapLPs'); const DAI_ADDRESS = ADDRESSES.ethereum.DAI; const USDC_ADDRESS = ADDRESSES.ethereum.USDC; const MVLP_ADDRESS = "0x9F4f8bc00F48663B7C204c96b932C29ccc43A2E8"; -const MVLP_DECIMALS = 18; const REDEEM_CONTRACT = "0xd15C4677A81Ac9d744a01ecaAad684E6d296b8f3"; const GOV_CLUB_CONTRACT = "0x12fc8b560925166c39E85c70E9fD4058Ca9e11c9"; @@ -23,65 +20,41 @@ const READER_CONTRACT = "0x01dd8B434A83cbdDFa24f2ef1fe2D6920ca03734"; // getToke const stakingAddress = "0x42162457006DB4DA3a7af5B53DFee5A891243b4D"; // Governance Staking const stakingTokenAddress = "0x788B6D2B37Aa51D916F2837Ae25b05f0e61339d1"; // MVD -const ADDRESS_ZERO = ADDRESSES.null; -async function getTvl(timestamp, block) { - const toa = [ - [DAI_ADDRESS, REDEEM_CONTRACT,], - [USDC_ADDRESS, GOV_CLUB_CONTRACT,], - ] +const mvdStakingAddressArbitrum = "0xFA69292726A53d62111c9485C03ac551Ba05679b"; // gMVD Staking +const mvdTokenAddressArbitrum = "0x15a808ed3846D25e88AE868DE79F1bcB1Ac382B5"; // MVD - return sumTokens2({ tokensAndOwners: toa, block }) -} +const ADDRESS_ZERO = ADDRESSES.null; -async function polygon(_, _b, { polygon: block }) { - const chain = 'polygon' +async function polygon(api) { // Metavault DAO MVLP Holdings - const aums = ( - await sdk.api.abi.call({ - target: MVLP_MANAGER_CONTRACT, - abi: mvlpManagerAbi.getAums, - chain, block, - }) - ).output; - - const averageAums = (+aums[0] + +aums[1]) / 2 - - const supplies = ( - await sdk.api.abi.call({ - target: READER_CONTRACT, - params: [ADDRESS_ZERO, [MVLP_ADDRESS]], - chain, block, - abi: readerAbi.getTokenBalancesWithSupplies, - }) - ).output; - + const aums = await api.call({ target: MVLP_MANAGER_CONTRACT, abi: mvlpManagerAbi.getAums, }) + const supplies = await api.call({ target: READER_CONTRACT, params: [ADDRESS_ZERO, [MVLP_ADDRESS]], abi: readerAbi.getTokenBalancesWithSupplies, }) + const metavaultDaoMvlpHoldings = await api.call({ abi: 'erc20:balanceOf', target: MVLP_TRACKER_CONTRACT, params: MVD_DAO_MULTI_SIG_WALLET, }) + const mvlpSupply = supplies[1]; - + const averageAums = (+aums[0] + +aums[1]) / 2 const mvlpPrice = averageAums / mvlpSupply - - const metavaultDaoMvlpHoldings = ( - await sdk.api.erc20.balanceOf({ - chain, block, - target: MVLP_TRACKER_CONTRACT, - owner: MVD_DAO_MULTI_SIG_WALLET, - }) - ).output; - - const daoMvlpHoldingsValue = metavaultDaoMvlpHoldings * mvlpPrice; - - const sum = BigNumber(daoMvlpHoldingsValue / 1e24).toFixed(0); - - return { - [USDC_ADDRESS]: sum, - }; + const daoMvlpHoldingsValue = metavaultDaoMvlpHoldings * mvlpPrice / 1e30 + api.addUSDValue(daoMvlpHoldingsValue) } module.exports = { + hallmarks: [ + [1676592000, "Launch on Arbitrum"] + ], misrepresentedTokens: true, + arbitrum: { + staking: staking(mvdStakingAddressArbitrum, mvdTokenAddressArbitrum,), + }, ethereum: { - tvl: getTvl, + tvl: sumTokensExport({ + tokensAndOwners: [ + [DAI_ADDRESS, REDEEM_CONTRACT,], + [USDC_ADDRESS, GOV_CLUB_CONTRACT,], + ] + }), staking: staking(stakingAddress, stakingTokenAddress,), }, polygon: { From 675ccfc0c7c53ee29eb1a7224f3ebe155f51230b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 08:01:21 +0200 Subject: [PATCH 0791/1768] minor fix --- projects/chainge.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/chainge.js b/projects/chainge.js index 687a427253..790526fcad 100644 --- a/projects/chainge.js +++ b/projects/chainge.js @@ -17,6 +17,7 @@ const config = { module.exports = { methodology: "assets in liquidity are counted as TVL + balances of all tokens (USDC, USDT, WBTC, WETH, WSYS, and native SYS) held in the Chainge treasury address on the Rollux network. These tokens are used to provide liquidity for cross-chain swaps.", + fusion: { tvl: () => ({})} } Object.keys(config).forEach(chain => { From 15ee624d5497999c07e9bbc2c93d4a370ef38992 Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Thu, 24 Oct 2024 17:17:17 +0800 Subject: [PATCH 0792/1768] feat: add rootstock chain (#12023) --- projects/helper/tokenMapping.js | 3 +++ projects/pell/index.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 89a0f6c23c..ca032bb39c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -121,6 +121,9 @@ const fixBalancesTokens = { zircuit: { '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, }, + bsquared: { + '0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3': { coingeckoId: 'lorenzo-stbtc', decimals: 18 } + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/pell/index.js b/projects/pell/index.js index f2be7456b2..5ec2b56909 100644 --- a/projects/pell/index.js +++ b/projects/pell/index.js @@ -1,7 +1,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require('../helper/cache') -const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'base', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer', 'iotex'] +const chains = ['ethereum', 'arbitrum', 'merlin', 'bouncebit', 'btr', 'bsc', 'base', 'bsquared', 'core', 'bevm', 'mantle', 'scroll', 'bob', 'ailayer', 'iotex', 'rsk'] chains.forEach(chain => { module.exports[chain] = { From 6d8fd14917963a201bc56d50560a2bb5cacd8a6c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 11:21:51 +0200 Subject: [PATCH 0793/1768] add token mapping #12027 --- projects/helper/tokenMapping.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ca032bb39c..9719fe45a9 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -118,6 +118,10 @@ const fixBalancesTokens = { '0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4': { coingeckoId: 'savings-dai', decimals: 18 }, '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, }, + lac: { + '0x7dc8b9e3b083c26c68f0b124ca923aaec7fbee39': { coingeckoId: 'tether', decimals: 6 }, + '0x51115241c7b8361eee88d8610f71d0a92cee5323': { coingeckoId: 'usd-coin', decimals: 6 }, + }, zircuit: { '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, }, From 4cb0e1ac0a08e83b1b5718bfcdd4bf474f143a48 Mon Sep 17 00:00:00 2001 From: ouchifinance <169087314+ouchifinance@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:36:43 +0300 Subject: [PATCH 0794/1768] track swapos tvl (#12025) Co-authored-by: ouchifinance --- projects/swapos/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/swapos/index.js diff --git a/projects/swapos/index.js b/projects/swapos/index.js new file mode 100644 index 0000000000..710642fa8e --- /dev/null +++ b/projects/swapos/index.js @@ -0,0 +1,6 @@ +const { uniTvlExport } = require('../helper/unknownTokens'); + +module.exports = uniTvlExport( + 'ethereum', + '0xfB1Eb9a45Feb7269f3277233AF513482Bc04Ea63' +); From 650ba1ef07f0e5ff91b963c3b4bd20ff3c853d2e Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:55:22 +0100 Subject: [PATCH 0795/1768] tron btc + btc wallets (#12030) --- projects/obelisk/index.js | 3 +- projects/tron-btc/index.js | 75 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 projects/tron-btc/index.js diff --git a/projects/obelisk/index.js b/projects/obelisk/index.js index 67023bb3ca..8d6d2f2a7c 100644 --- a/projects/obelisk/index.js +++ b/projects/obelisk/index.js @@ -5,7 +5,8 @@ const staticAddresses = [ 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP', 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj', - 'bc1pr6pga0d44xm3t8z36qnya6sfznsm8fwkn507x6gqt86xtnvm4h4sj2zqus' + 'bc1pr6pga0d44xm3t8z36qnya6sfznsm8fwkn507x6gqt86xtnvm4h4sj2zqus', + 'bc1qy4pkldj4dqxtqypz6awwj7y8vahkht8uqhdlw3' ] const abi = { diff --git a/projects/tron-btc/index.js b/projects/tron-btc/index.js new file mode 100644 index 0000000000..e253ef5202 --- /dev/null +++ b/projects/tron-btc/index.js @@ -0,0 +1,75 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk'); +const { sumTokensExport: sumBRC20TokensExport } = require("../helper/chain/brc20"); +const { sumTokensExport } = require('../helper/sumTokens'); + +// On the 23/10/2024 , defillma receive a PoR from Tron/HTX team with the respective BTC collateral backing BTC on tron chain +const owners = [ + "1NBX1UZE3EFPTnYNkDfVhRADvVc8v6pRYu", + "14NEbSYdjumn9h4spMjbp3PdUpeXuM5PBZ" +] + +module.exports = { + methodology: "Collateral for BTC on tron chain", + bitcoin: { + tvl: sdk.util.sumChainTvls([ + sumTokensExport({ owners }), + ]), + }, + ethereum: { + tvl: sumTokensExport({ + ownerTokens: [ + [[ADDRESSES.ethereum.WBTC], "0xbe6d2444a717767544a8b0ba77833aa6519d81cd",], //WBTC + [["0xc96de26018a54d51c097160568752c4e3bd6c364"], "0x38d516a43f9bab90455c16f9299866217062467e",],//FBTC +] + }), + }, + merlin: { + tvl: sumTokensExport({ + owners: ["0x06fe862f2eefe9a5e9a2cf9799941706665e833a"], + tokens: ["0xb880fd278198bd590252621d4cd071b1842e9bcd", "0x93919784c523f39cacaa98ee0a9d96c3f32b593e"] // M-BTC AND UNIBTC + }), + }, + zklink: { + tvl: sumTokensExport({ + owners: ["0x3aa95613091a3a9512956c3a2a2b724dce375a2d"], + tokens: ["0xbeaf16cfd8efe0fc97c2a07e349b9411f5dc272c"] // SolvBTC.m + }), + }, + linea: { + tvl: sumTokensExport({ + owners: ["0x399c4e524cff47d9e670f9d1ca0381bbe746e97a", "0x533806b821ec94091228d7d34e697b93bb79f8f6"], + tokens: ["0xe4d584ae9b753e549cae66200a6475d2f00705f7", "0x5ffce65a40f6d3de5332766fff6a28bf491c868c", "0x96155858a02c410c3c814bb32fdc413b3241b62e"] // m-btc, SolvBTC.m , solvBTC.B + }), + }, + mode: { + tvl: sumTokensExport({ + owners: ["0x399c4e524cff47d9e670f9d1ca0381bbe746e97a", "0x533806b821ec94091228d7d34e697b93bb79f8f6"], + tokens: ["0x59889b7021243db5b1e065385f918316cd90d46c", ] // m-btc + }), + }, + core: { + tvl: sumTokensExport({ + owners: ["0x533806b821ec94091228d7d34e697b93bb79f8f6"], + tokens: ["0xe04d21d999faedf1e72ade6629e20a11a1ed14fa", ] // solvBTC.M + }), + }, + kroma: { + tvl: sumTokensExport({ + owners: ["0x533806b821ec94091228d7d34e697b93bb79f8f6"], + tokens: ["0x0f921c39efd98809fe6d20a88a4357454578987a", ] // m-BTC + }), + }, + kava: { + tvl: sumTokensExport({ + owners: ["0x533806b821ec94091228d7d34e697b93bb79f8f6"], + tokens: ["0x59889b7021243db5b1e065385f918316cd90d46c", ] // m-BTC + }), + }, + bsc: { + tvl: sumTokensExport({ + owners: ["0x533806b821ec94091228d7d34e697b93bb79f8f6"], + tokens: ["0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", ] // BTCB + }), + }, +}; \ No newline at end of file From 4b3cb2beb703dc9e2643154a44a67b5f20dce3e7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 11:57:22 +0200 Subject: [PATCH 0796/1768] update zetaearn #12026 --- projects/zetaEarn/index.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/projects/zetaEarn/index.js b/projects/zetaEarn/index.js index 4411f0b53d..937c715b18 100644 --- a/projects/zetaEarn/index.js +++ b/projects/zetaEarn/index.js @@ -1,6 +1,18 @@ -async function tvl(api) { +async function zetaTvl(api) { api.addGasToken(await api.call({target: '0x45334a5b0a01ce6c260f2b570ec941c680ea62c0', abi: 'uint256:getTotalPooledZETA'})) - } -module.exports = { zeta: { tvl } } \ No newline at end of file +const btrZTokens = [ + '0xd53E6f1d37f430d84eFad8060F9Fec558B36F6fa', // zbtc + '0xdc842A54dB9E6136c7972eA863Efd6CE0d45602c', // zordi + '0xb86e3Cc68d9C56E1b87DEddF49c4A6fdaaF04A82' // zsats +]; + +async function btrTvl(api) { + for (const token of btrZTokens) { + const supply = await api.call({ abi: 'uint256:totalSupply', target: token }); + api.add(token, supply); + } +} + +module.exports = { zeta: { tvl: zetaTvl }, btr: { tvl: btrTvl } } From 6f566c43329c6e3ff6fd78900f41eda94f67c005 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 24 Oct 2024 11:59:00 +0200 Subject: [PATCH 0797/1768] fix lac issue #12028 --- projects/helper/tokenMapping.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 9719fe45a9..d2a3ba9db2 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -63,6 +63,8 @@ const fixBalancesTokens = { lac: { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, + '0x7dc8b9e3b083c26c68f0b124ca923aaec7fbee39': { coingeckoId: 'tether', decimals: 6 }, + '0x51115241c7b8361eee88d8610f71d0a92cee5323': { coingeckoId: 'usd-coin', decimals: 6 }, }, lisk: { '0x05d032ac25d322df992303dca074ee7392c117b9': { coingeckoId: 'tether', decimals: 6 }, @@ -118,10 +120,6 @@ const fixBalancesTokens = { '0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4': { coingeckoId: 'savings-dai', decimals: 18 }, '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, }, - lac: { - '0x7dc8b9e3b083c26c68f0b124ca923aaec7fbee39': { coingeckoId: 'tether', decimals: 6 }, - '0x51115241c7b8361eee88d8610f71d0a92cee5323': { coingeckoId: 'usd-coin', decimals: 6 }, - }, zircuit: { '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, }, From 3c19210b406ebd29afacc531c59d350b69806299 Mon Sep 17 00:00:00 2001 From: chainupk <121842069+chainupk@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:01:02 +0800 Subject: [PATCH 0798/1768] Added new address for obelisk protocol (#12029) Co-authored-by: zhenhao goh Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> From 72e40e9a6d02d3e8a8d0ba2c950b989cc31922bd Mon Sep 17 00:00:00 2001 From: Danil Cherevashko Date: Fri, 25 Oct 2024 08:07:43 +0300 Subject: [PATCH 0799/1768] Add swap.coffee staking and pool2 adapter (#12031) --- projects/helper/chain/ton.js | 12 +++++++++ projects/swap-coffee/index.js | 46 +++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 projects/swap-coffee/index.js diff --git a/projects/helper/chain/ton.js b/projects/helper/chain/ton.js index d0345dcc65..e9f9e10cfd 100644 --- a/projects/helper/chain/ton.js +++ b/projects/helper/chain/ton.js @@ -11,6 +11,17 @@ async function getTonBalance(addr) { return res.balance } +async function getJettonBalances(addr) { + const response = await get(`https://tonapi.io/v2/accounts/${addr}/jettons?currencies=usd`) + + const res = { } + response.balances.forEach(val => { + res[val.jetton.address] = { balance: val.balance, price: val.price.prices.USD, decimals: val.jetton.decimals } + }) + + return res +} + async function _sumTokensAccount({ api, addr, tokens = [], onlyWhitelistedTokens = false }) { if (tokens.includes(ADDRESSES.null)) { const balance = await getTonBalance(addr) @@ -91,4 +102,5 @@ module.exports = { sumTokens, sumTokensExport, call, + getJettonBalances, } \ No newline at end of file diff --git a/projects/swap-coffee/index.js b/projects/swap-coffee/index.js new file mode 100644 index 0000000000..add69ba5f3 --- /dev/null +++ b/projects/swap-coffee/index.js @@ -0,0 +1,46 @@ +const { call, sumTokensExport, getTokenRates, getJettonBalances } = require('../helper/chain/ton') +const {sleep} = require("../helper/utils"); + +const CES_MASTER = "0:a5d12e31be87867851a28d3ce271203c8fa1a28ae826256e73c506d94d49edad" +const STAKING_CONTRACT = "0:29f90533937d696105883b981e9427d1ae411eef5b08eab83f4af89c495d27df" +const DEDUST_TON_CES_POOL = "0:123e245683bd5e93ae787764ebf22291306f4a3fcbb2dcfcf9e337186af92c83" +const STONFI_CES_TON_POOL = "0:6a839f7a9d6e5303d71f51e3c41469f2c35574179eb4bfb420dca624bb989753" + +async function getTokenSupply(addr) { + return (await call({ target: addr, abi: "get_jetton_data"}))[0] / 1e9 +} + +function calcVolume(reserve, supply, rate) { + return ((reserve / 1e9) / supply) * rate +} + +module.exports = { + methodology: "Counts swap.coffee smartcontract balance as TVL.", + timetravel: false, + ton: { + tvl: () => { }, + staking: sumTokensExport({ owners: [STAKING_CONTRACT], tokens: [CES_MASTER]}), + pool2: async (api) => { + const dedustPoolReserves = await call({ target: DEDUST_TON_CES_POOL, abi: "get_reserves" }) + const dedustLpSupply = await getTokenSupply(DEDUST_TON_CES_POOL) + + // toncenter api is rate limited + await sleep(3000) + + const stonfiPoolReserves = await call({ target: STONFI_CES_TON_POOL, abi: "get_pool_data" }) + const stonfiLpSupply = await getTokenSupply(STONFI_CES_TON_POOL) + + const rates = await getTokenRates({ tokens: ["TON", CES_MASTER] }) + + const stonLpPrice = calcVolume(stonfiPoolReserves[0], stonfiLpSupply, rates[CES_MASTER]) + + calcVolume(stonfiPoolReserves[1], stonfiLpSupply, rates["TON"]) + const dedustLpPrice = calcVolume(dedustPoolReserves[0], dedustLpSupply, rates["TON"]) + + calcVolume(dedustPoolReserves[1], dedustLpSupply, rates[CES_MASTER]) + + const balances = await getJettonBalances(STAKING_CONTRACT) + + return api.addUSDValue((stonLpPrice * balances[STONFI_CES_TON_POOL].balance / 1e9) + + (dedustLpPrice * balances[DEDUST_TON_CES_POOL].balance / 1e9)) + } + } +} \ No newline at end of file From f5ef3239c079f8a79e549737b0c81cc951423898 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 25 Oct 2024 07:38:45 +0200 Subject: [PATCH 0800/1768] update solv btc lst #12032 --- projects/solv-btc-lst/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 1bde1c82f9..16a1efdceb 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -6,7 +6,7 @@ const bitcoinOwnersUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slo async function tvl() { let bitcoinOwners = (await getConfig('solv-protocol/solv-btc-lst', bitcoinOwnersUrl)); - const owners = [].concat(bitcoinOwners.core, bitcoinOwners.bbn); + const owners = Object.values(bitcoinOwners).flat(); return sumTokens({ owners }) } From d2ebaed83e14fd5cac15c583dc4065ba175f3edf Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 24 Oct 2024 22:47:07 -0700 Subject: [PATCH 0801/1768] Origin ARM: Add TVL Adapter (#12037) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/originarm/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/originarm/index.js diff --git a/projects/originarm/index.js b/projects/originarm/index.js new file mode 100644 index 0000000000..87afd109f1 --- /dev/null +++ b/projects/originarm/index.js @@ -0,0 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + ethereum: { + tvl: async (api) => { + const originLidoArm = "0x85b78aca6deae198fbf201c82daf6ca21942acc6"; + const outstandingSteth = await api.call({abi: 'uint256:lidoWithdrawalQueueAmount', target: originLidoArm }) + api.add(ADDRESSES.ethereum.STETH, outstandingSteth) + return api.sumTokens({ owner: originLidoArm, tokens: [ADDRESSES.ethereum.WETH, ADDRESSES.ethereum.STETH] }) + }, + }, +}; From db486c2d609dceba5497af25a838f6076620e36e Mon Sep 17 00:00:00 2001 From: Henrique Date: Fri, 25 Oct 2024 06:47:21 +0100 Subject: [PATCH 0802/1768] feat: add ethereum vault on bakerfi (#12036) --- projects/bakerfi/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/bakerfi/index.js b/projects/bakerfi/index.js index ef0652ad0b..4452fe8612 100644 --- a/projects/bakerfi/index.js +++ b/projects/bakerfi/index.js @@ -5,6 +5,9 @@ const config = { base: { vaults: ["0x37327c99bBc522e677a97d01021dB20227faF60A"] }, + ethereum: { + vaults: ["0x01280b3683fE20Dc9cCF4D9526418F252871E4F7"] + }, } async function getVaultTVL(api, vaults) { From f6660d7352d7f5285e27c5d22e7102066984d30f Mon Sep 17 00:00:00 2001 From: 0x33 <166445471+0x33dm@users.noreply.github.com> Date: Fri, 25 Oct 2024 07:48:56 +0200 Subject: [PATCH 0803/1768] adding base to defi-money adapter (#12035) --- projects/defi-money/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/defi-money/index.js b/projects/defi-money/index.js index ed6010732e..984d9f3788 100644 --- a/projects/defi-money/index.js +++ b/projects/defi-money/index.js @@ -25,6 +25,17 @@ const config = { "0x07aDF588508b923B8eA0389d27b61b9CB8a197Cb", // FRAX/MONEY ], }, + base: { + controller: "0x1337F001E280420EcCe9E7B934Fa07D67fdb62CD", + MONEY: "0xEbE54BEE7A397919C53850bA68E126b0A6b295ed", + stakeLPs: [ + // "0x9F04112af02CE57C10d946481Ea06373719c1E7E", // MONEY - already included in tvl + "0xe0f7c023763d782970ab45e9232255a64290cd6a", // crvUSD/MONEY + "0xb7698c690752ae034e914a29a0de67339a94982b", // USDC/MONEY + "0x45acdee3c9f7e1c7ad6cc10c9cb9f74eb52d0e70", // USDbC/MONEY + "0xac786337dde86b768ea3cc90afa03250bccfff28", // DAI/MONEY + ], + }, } const tvl = async (api) => { From 939a39ad6e05a43c6f8f2e0290bd7247b0466540 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:26:14 +0200 Subject: [PATCH 0804/1768] Fix: Uni-v1 (Subgraph was Outdated) (#12034) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/uniswap-v1/index.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/projects/uniswap-v1/index.js b/projects/uniswap-v1/index.js index 305756f274..2cabc673fe 100644 --- a/projects/uniswap-v1/index.js +++ b/projects/uniswap-v1/index.js @@ -1,13 +1,23 @@ -const { getChainTvl } = require('../helper/getUniSubgraphTvl'); +const { nullAddress } = require('../helper/unwrapLPs') -const v1graph = getChainTvl({ - ethereum: 'ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ' -}, "uniswaps", "totalLiquidityUSD") +const uniFactory = '0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95' + +const abi = { + getExchange: "function getExchange(address token) view returns (address)", + getTokenWithId: "function getTokenWithId(uint256 token_id) view returns (address)", + tokenCount: "function tokenCount() view returns (uint256)", +} + +const tvl = async (api) => { + let pools = await api.fetchList({ lengthAbi: abi.tokenCount, itemAbi: abi.getTokenWithId, target: uniFactory, itemAbi2: abi.getExchange, }) + pools = pools.filter(i => i !== nullAddress) + await api.sumTokens({ owners: pools, tokens: [nullAddress] }) + const balancesV2 = api.getBalancesV2() + return balancesV2.clone(2).getBalances() // // Since Uniswap V1 only allowed swaps against ETH, it's enough to know the amount of ETH and multiply it by two to determine the pool's value without needing to know the price of the collateral in question +} module.exports = { misrepresentedTokens: true, - methodology: `Counts the tokens locked on AMM pools, pulling the data from the 'ianlapham/uniswapv2' subgraph`, - ethereum: { - tvl: v1graph("ethereum"), - } -} + methodology: `Counts the tokens in ETH value locked in AMM pools`, + ethereum: { tvl } +} \ No newline at end of file From dbff19c71822b3d7898c4cb2ddb8ce0bd1d4a3ee Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 25 Oct 2024 20:40:35 +0200 Subject: [PATCH 0805/1768] track adrastea LRT --- projects/adrastea-lrt/index.js | 6 ++++++ projects/helper/chain/sui.js | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 projects/adrastea-lrt/index.js diff --git a/projects/adrastea-lrt/index.js b/projects/adrastea-lrt/index.js new file mode 100644 index 0000000000..f75e94027a --- /dev/null +++ b/projects/adrastea-lrt/index.js @@ -0,0 +1,6 @@ +const { sumTokensExport } = require('../helper/solana') +module.exports = { + solana: { + tvl: sumTokensExport({ owners: ['wYPqKV6XuRBSBU1zYiYB1ZTPhkR8PsDRz5kKgmSyum1'] }) + } +} diff --git a/projects/helper/chain/sui.js b/projects/helper/chain/sui.js index dcdfdf459e..650205208e 100644 --- a/projects/helper/chain/sui.js +++ b/projects/helper/chain/sui.js @@ -73,8 +73,9 @@ async function getDynamicFieldObjects({ parent, cursor = null, limit = 48, items async function call(method, params, { withMetadata = false } = {}) { if (!Array.isArray(params)) params = [params] const { - result + result, error } = await http.post(endpoint(), { jsonrpc: "2.0", id: 1, method, params, }) + if (!result && error) throw new Error(`[sui] ${error.message}`) if (['suix_getAllBalances'].includes(method)) return result return withMetadata ? result : result.data } From ce2f424dcef51360257c02ce86d871337f7ffcf0 Mon Sep 17 00:00:00 2001 From: alex-hourglass <141623230+alex-hourglass@users.noreply.github.com> Date: Fri, 25 Oct 2024 21:56:23 +0300 Subject: [PATCH 0806/1768] Hourglass adaptor (#11956) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/hourglass/index.js | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 projects/hourglass/index.js diff --git a/projects/hourglass/index.js b/projects/hourglass/index.js new file mode 100644 index 0000000000..f0ac27afab --- /dev/null +++ b/projects/hourglass/index.js @@ -0,0 +1,44 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { getLogs2 } = require('../helper/cache/getLogs') + +const ethereum_pitchfxs = '0x11ebe21e9d7bf541a18e1e3ac94939018ce88f0b'; + +const config = { + ethereum: { factory: '0x679619FA685a18782a86dD5850124A75E83daD8F', fromBlock: 19877998 }, + mantle: { factory: '0x624bd5ba06A856C4D5f60c8Ba29eeE1f684Ddf05', fromBlock: 65870976 }, +} + +module.exports = { + methodology: 'TVL accounts for all assets deposited into our boosted vaults. It also includes the amount of FXS time-locked and minted as pitchFXS.', +}; + + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + if (chain === 'ethereum') + await computePitchfxsTvl(api) + const logs = await getLogs2({ + api, + factory, + eventAbi: 'event NewMaturityCreated (uint256 deploymentIndex, address depositor, address[] receipts)', + fromBlock, + }) + + const vaults = logs.map(log => log.depositor) + const tokens = await api.multiCall({ abi: 'address:getUnderlying', calls: vaults }) + return api.sumTokens({ tokensAndOwners2: [tokens, vaults] }) + } + } +}) + +const computePitchfxsTvl = async (api) => { + const balance = await api.call({ + target: ethereum_pitchfxs, + params: [], + abi: 'erc20:totalSupply', + }); + + api.addToken(ADDRESSES.ethereum.FXS, balance); +} From 694bc5f51cced4fb54c1881fc031454a49606f3a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 25 Oct 2024 21:00:24 +0200 Subject: [PATCH 0807/1768] update cygnus #12057 --- projects/cygnus-fi-restake/index.js | 30 ++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/projects/cygnus-fi-restake/index.js b/projects/cygnus-fi-restake/index.js index 8ef5e2683e..af16c2f48b 100644 --- a/projects/cygnus-fi-restake/index.js +++ b/projects/cygnus-fi-restake/index.js @@ -3,13 +3,29 @@ const ADDRESSES = require('../helper/coreAssets.json') // Cygnus is extending the restaking protocol to more chains. // Bsquared is one of the first chains we are supporting. -const CYGNUS_RESTAKE_VAULT = { - bsquared: '0x7551aEa51588AaCe99B89c3FaC3CFc4108DB8094' + +const CYGNUS_POOL_CONFIG = { + bsquared: { + UBTC: { + depositToken: ADDRESSES.bsquared.UBTC, + vault: '0x7551aEa51588AaCe99B89c3FaC3CFc4108DB8094' + }, + STBTC: { + depositToken: '0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3', + vault: '0x0Ce45dd53affbb011884EF1866E0738f58AB7969' + }, + UNIBTC: { + depositToken: '0x93919784C523f39CACaa98Ee0a9d96c3F32b593e', + vault: '0xBc323bA4bbf2559417C3Ca47A75e2Ea341Cf8320' + } + } } module.exports = { - methodology: "Calculates assets locked in cygnus restaking vault", - bsquared: { - tvl: sumTokensExport({ owner: CYGNUS_RESTAKE_VAULT.bsquared, tokens: [ADDRESSES.bsquared.UBTC] }) - } -} \ No newline at end of file + methodology: "Calculates assets locked in cygnus restaking vault", +} + +Object.keys(CYGNUS_POOL_CONFIG).forEach(chain => { + const tokensAndOwners = Object.values(CYGNUS_POOL_CONFIG[chain]).map(i => [i.depositToken, i.vault]) + module.exports[chain] = { tvl: sumTokensExport({ tokensAndOwners }) } +}) \ No newline at end of file From 1c8be0efd70647706a7a81583a14fe2139e7bcba Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Sat, 26 Oct 2024 03:08:11 +0800 Subject: [PATCH 0808/1768] feat: add bsquared to xlink (#12054) --- projects/xlink/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/projects/xlink/index.js b/projects/xlink/index.js index 60d365746a..3be86a15cc 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -60,4 +60,14 @@ module.exports = { ], }), }, + bsquared: { + tvl: sumTokensExport({ + owners: [ + '0x10eeCCc43172458F0ff9Cc3E9730aB256fAEE32e' + ], + tokens: [ + ADDRESSES.bsquared.UBTC + ] + }), + } }; From 432367f0be7f9d9703f5ccc51f91060ec6e7e34e Mon Sep 17 00:00:00 2001 From: Merlin <39942523+0xmer1in@users.noreply.github.com> Date: Sat, 26 Oct 2024 03:12:36 +0800 Subject: [PATCH 0809/1768] Add WOOFi pool token and update WOOFi earn adapter (#12048) --- projects/woofi-earn/index.js | 2 +- projects/woofi.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/woofi-earn/index.js b/projects/woofi-earn/index.js index fdb802a815..5eed025498 100644 --- a/projects/woofi-earn/index.js +++ b/projects/woofi-earn/index.js @@ -6,7 +6,7 @@ module.exports = { misrepresentedTokens: true, }; -(['fantom', 'bsc', 'avax', 'polygon', 'arbitrum', 'optimism', ]).forEach(chain => { +(['fantom', 'bsc', 'avax', 'polygon', 'arbitrum', 'optimism', 'zksync', 'base', 'mantle']).forEach(chain => { module.exports[chain] = { tvl: async () => { let data = await get('https://fi-api.woo.org/yield?network=' + chain) diff --git a/projects/woofi.js b/projects/woofi.js index 1dcba24a85..1293b021b8 100644 --- a/projects/woofi.js +++ b/projects/woofi.js @@ -57,6 +57,7 @@ const wooPPConfig = { ethereum: [], era: [ ADDRESSES.era.WETH, // WETH + ADDRESSES.era.ZK, // ZK ADDRESSES.era.USDC, // USDC.e '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4', // native USDC ], @@ -66,16 +67,20 @@ const wooPPConfig = { ], linea: [ ADDRESSES.linea.WETH, // WETH + '0x3aAB2285ddcDdaD8edf438C1bAB47e1a9D05a9b4', // WBTC ADDRESSES.linea.USDC, // native USDC + ADDRESSES.linea.USDT, // USDT ], base: [ ADDRESSES.base.WETH, // WETH + '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC ADDRESSES.base.USDbC, // USDbC ADDRESSES.base.USDC, // native USDC ], mantle: [ ADDRESSES.mantle.WMNT, // WMNT ADDRESSES.mantle.WETH, // WETH + '0xcDA86A272531e8640cD7F1a92c01839911B90bb0', // mETH ADDRESSES.mantle.USDT, // USDT ADDRESSES.mantle.USDC, // USDC ], From dee690c50ce8a44b8cebc36752ebf3fd07fd7b25 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 25 Oct 2024 21:39:38 +0200 Subject: [PATCH 0810/1768] add @coral-xyz/anchor #11519 --- package-lock.json | 61 ++++++++++++++++++++++++++++++++++++++--------- package.json | 1 + 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 006772e551..f1eed9d6e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { + "@coral-xyz/anchor": "^0.30.1", "@defillama/sdk": "latest", "@project-serum/anchor": "^0.26.0", "@solana/web3.js": "^1.87.6", @@ -930,14 +931,15 @@ } }, "node_modules/@coral-xyz/anchor": { - "version": "0.28.1-beta.2", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.1-beta.2.tgz", - "integrity": "sha512-xreUcOFF8+IQKWOBUrDKJbIw2ftpRVybFlEPVrbSlOBCbreCWrQ5754Gt9cHIcuBDAzearCDiBqzsGQdNgPJiw==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", + "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", + "license": "(MIT OR Apache-2.0)", "dependencies": { - "@coral-xyz/borsh": "^0.28.0", + "@coral-xyz/anchor-errors": "^0.30.1", + "@coral-xyz/borsh": "^0.30.1", "@noble/hashes": "^1.3.1", "@solana/web3.js": "^1.68.0", - "base64-js": "^1.5.1", "bn.js": "^5.1.2", "bs58": "^4.0.1", "buffer-layout": "^1.2.2", @@ -954,10 +956,20 @@ "node": ">=11" } }, + "node_modules/@coral-xyz/anchor-errors": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz", + "integrity": "sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, "node_modules/@coral-xyz/anchor/node_modules/@coral-xyz/borsh": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", - "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz", + "integrity": "sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==", + "license": "Apache-2.0", "dependencies": { "bn.js": "^5.1.2", "buffer-layout": "^1.2.0" @@ -997,9 +1009,10 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.94", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.94.tgz", - "integrity": "sha512-XlR5Gawx/uQXvkWZN962DBGXz2+6W4L8NaDIJ3b04vkD2QRhBYAftTKZfHgsYqBh/dFCOGQxh5P0jM49sf8dFw==", + "version": "5.0.96", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.96.tgz", + "integrity": "sha512-xaQUecL8V2fWT1Z6LEg/3iV3DCsW32VItRZ5oRqeDzvyeYnFS22GntkJiyxBRMFdCKHRpr1zNAn+IKOKGfpHUg==", + "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", @@ -1260,6 +1273,32 @@ "@solana/web3.js": "^1.30.2" } }, + "node_modules/@pythnetwork/client/node_modules/@coral-xyz/anchor": { + "version": "0.28.1-beta.2", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.1-beta.2.tgz", + "integrity": "sha512-xreUcOFF8+IQKWOBUrDKJbIw2ftpRVybFlEPVrbSlOBCbreCWrQ5754Gt9cHIcuBDAzearCDiBqzsGQdNgPJiw==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/borsh": "^0.28.0", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, "node_modules/@pythnetwork/client/node_modules/@coral-xyz/borsh": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", diff --git a/package.json b/package.json index 5f2df394d3..9889a037ec 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "author": "", "license": "ISC", "dependencies": { + "@coral-xyz/anchor": "^0.30.1", "@defillama/sdk": "latest", "@project-serum/anchor": "^0.26.0", "@solana/web3.js": "^1.87.6", From 91696d369f29148dda08561a18c3dabd63d05804 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 26 Oct 2024 12:57:03 +0200 Subject: [PATCH 0811/1768] track nest credit #12058 --- projects/nest-staking/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/nest-staking/index.js diff --git a/projects/nest-staking/index.js b/projects/nest-staking/index.js new file mode 100644 index 0000000000..9c9bec13c4 --- /dev/null +++ b/projects/nest-staking/index.js @@ -0,0 +1,17 @@ + +const RWA_STAKING = "0xdbd03d676e1cf3c3b656972f88ed21784372acab" +const RESERVE_STAKING = "0xba0ae7069f94643853fce3b8af7f55acbc11e397" +const SBTC = "0x094c0e36210634c3CfA25DC11B96b562E0b07624" +const STONE = "0x7122985656e38bdc0302db86685bb972b145bd3c" + +async function tvl(api) { + // Get allowed stablecoins from RWA Staking + const stablecoins = await api.call({ target: RWA_STAKING, abi: 'address[]:getAllowedStablecoins', }) + const ownerTokens = [[stablecoins, RWA_STAKING], [[SBTC, STONE], RESERVE_STAKING]] + return api.sumTokens({ ownerTokens}) +} + +module.exports = { + methodology: "Counts total value locked in both RWA Staking (stablecoins) and Reserve Staking (SBTC and STONE) contracts", + ethereum: { tvl } +} \ No newline at end of file From c0176aa074724d63aeec7cd68251bcdfa9eec950 Mon Sep 17 00:00:00 2001 From: deep-path <54880778+deep-path@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:59:31 +0800 Subject: [PATCH 0812/1768] remove anchor for add solana tvl (#12053) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/deltatrade.js | 44 ++++++++++++++++++++++++++++++++++- projects/helper/chain/near.js | 1 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/projects/deltatrade.js b/projects/deltatrade.js index bea7ad2566..37af707c01 100644 --- a/projects/deltatrade.js +++ b/projects/deltatrade.js @@ -1,5 +1,14 @@ const ADDRESSES = require('./helper/coreAssets.json') -const { sumTokens } = require('./helper/chain/near'); +const { sumTokens } = require('./helper/chain/near') +const { getConfig } = require('./helper/cache') +const { get } = require('./helper/http') + +const { PublicKey } = require('@solana/web3.js'); +const { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, } = require("@solana/spl-token"); +const { sumTokens2 } = require('./helper/solana') + +const state = new PublicKey('FRcbUFpGHQppvXAyJrNYLKME1BQfowh4xKZB2vt9j6yn'); +const programId = new PublicKey('CNLGhYQgNwjyDfHZTEjHfk1MPkqwP96qZahWN82UfcLM'); const GRID_CONTRACT_ID = 'grid.deltatrade.near'; const DCA_CONTRACT_ID = 'dca.deltatrade.near'; @@ -23,4 +32,37 @@ module.exports = { near: { tvl: () => sumTokens({ tokens, owners: [GRID_CONTRACT_ID, DCA_CONTRACT_ID] }), }, + solana: { + tvl: solanaTvl, + } +} + +async function getTokens() { + return getConfig('deltatrade/sol-pairs', undefined, { + fetcher: async () => { + const { data } = await get('https://solapi.deltatrade.ai/api/bot/grid/pairs'); + const tokenSet = new Set() + data.forEach(pair => { + tokenSet.add(pair.base_token.code) + tokenSet.add(pair.quote_token.code) + }) + const arry = Array.from(tokenSet) + arry.sort() + return arry + } + }) +} + +function getGlobalBalanceUser(token) { + const [globalBalPda] = PublicKey.findProgramAddressSync([Buffer.from("global_balance_user"), state.toBuffer(), new PublicKey(token).toBuffer()], programId); + + // const globalBalTokenAccount = await Token.getAssociatedTokenAddress(ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, new PublicKey(token), new PublicKey(globalBalPda.toString()), true); + const [tokenAccount] = PublicKey.findProgramAddressSync([new PublicKey(globalBalPda.toString()), TOKEN_PROGRAM_ID, new PublicKey(token)].map(i => i.toBuffer()), ASSOCIATED_TOKEN_PROGRAM_ID) + return tokenAccount.toString(); +} + +async function solanaTvl() { + const tokens = await getTokens(); + const tokenAccounts = tokens.map(getGlobalBalanceUser) + return sumTokens2({ tokenAccounts }) } diff --git a/projects/helper/chain/near.js b/projects/helper/chain/near.js index a1540a0d47..c79feedea2 100644 --- a/projects/helper/chain/near.js +++ b/projects/helper/chain/near.js @@ -13,6 +13,7 @@ function transformAddress(addr) { } const endpoint = "https://rpc.mainnet.near.org" +// const endpoint = "https://near.lava.build" const tokenMapping = { 'wrap.near': { name: 'near', decimals: 24, }, From 839aae60c43e027b9ffc867b358c0b43fde8673f Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sat, 26 Oct 2024 19:46:12 +0700 Subject: [PATCH 0813/1768] update DackieSwap V2 V3 on World Chain --- projects/dackieswap-v2/index.js | 1 + projects/dackieswap/index.js | 1 + 2 files changed, 2 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index d4f3c037f0..2fce6ef050 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -16,6 +16,7 @@ const config = { mode: '0x757cd583004400ee67e5cc3c7a60c6a62e3f6d30', base: '0x591f122D1df761E616c13d265006fcbf4c6d6551', linea: '0x9790713770039CeFcf4FAaf076E2846c9B7a4630', + wc: '0x757cD583004400ee67e5cC3c7A60C6a62E3F6d30', } module.exports = { diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 4ae6f29003..d7b1425e6f 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -9,4 +9,5 @@ module.exports = uniV3Export({ mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, xlayer: { factory: "0xc6f3966e5d08ced98ac30f8b65beab5882be54c7", fromBlock: 278971 }, linea: { factory: "0xc6255ec7CDb11C890d02EBfE77825976457B2470", fromBlock: 8488016 }, + wc: { factory: "0xB9010964301326160173da694c0697a2FcE82F39", fromBlock: 4523073 }, }); \ No newline at end of file From a6e1c2b443b90d397fa4dd80c520c642f9b2a8da Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 26 Oct 2024 15:34:25 +0200 Subject: [PATCH 0814/1768] update raydium --- projects/helper/utils.js | 6 +++++- projects/raydium/api.js | 3 +++ projects/raydium/index.js | 2 ++ test.js | 11 ++++++++--- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/projects/helper/utils.js b/projects/helper/utils.js index 17c49bb6a0..86edb86dbb 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -306,12 +306,16 @@ async function debugBalances({ balances = {}, chain, log = false, tableLabel = ' }) sdk.log('Balance table for [%s] %s', chain, tableLabel) - const filtered = logObj.filter(i => { + let filtered = logObj.filter(i => { const symbol = i.symbol?.toLowerCase() ?? '' if (/\.(com|net|org|xyz|site|io)/.test(symbol)) return false if (/claim|access|airdrop/.test(symbol)) return false return true }) + if (filtered.length > 300) { + sdk.log('Too many unknowns to display #'+filtered.length, 'displaying first 100') + filtered = filtered.slice(0, 100) + } if (filtered.length) console.table(filtered) } diff --git a/projects/raydium/api.js b/projects/raydium/api.js index 01ea1e8f65..08fd7e18a6 100644 --- a/projects/raydium/api.js +++ b/projects/raydium/api.js @@ -3,6 +3,7 @@ const { sumTokens2 } = require('../helper/solana') module.exports = { timetravel: false, + isHeavyProtocol: true, } const { solana: { tvl } } = getExports("raydium", ['solana']) @@ -14,6 +15,8 @@ module.exports.solana = { async function tvlWithCheck(api) { const balances = await tvl(api) api.addBalances(balances) + api.removeTokenBalance('DS4QiZfkp39PsHXYCRV3NkyDUKV9SpTczp2qnAUg6Nt6') // ZMB + // api.removeTokenBalance('HDa3zJc12ahykSsBRvgiWzr6WLEByf36yzKKbVvy4gnF') // SOS const usdValue = await api.getUSDValue() // for some godforsaken reason, the TVL is sometimes reported as 60M, we fail in that case rather than report a wrong number if (usdValue < 2e8) throw new Error('TVL is too low :' + usdValue / 1e6 + 'M') diff --git a/projects/raydium/index.js b/projects/raydium/index.js index 816005d17f..ce47ced0ff 100644 --- a/projects/raydium/index.js +++ b/projects/raydium/index.js @@ -154,8 +154,10 @@ async function combinedTvl(api) { module.exports = { timetravel: false, + isHeavyProtocol: true, misrepresentedTokens: true, hallmarks: [[1667865600, "FTX collapse"]], + solana: { tvl: combinedTvl, staking: () => sumTokens2({ tokenAccounts: ['8tnpAECxAT9nHBqR1Ba494Ar5dQMPGhL31MmPJz1zZvY'] }) diff --git a/test.js b/test.js index 2533a52f6d..790967699c 100644 --- a/test.js +++ b/test.js @@ -236,9 +236,14 @@ function validateHallmarks(hallmark) { Object.entries(usdTokenBalances).forEach(([chain, balances]) => { console.log(`--- ${chain} ---`); - Object.entries(balances) - .sort((a, b) => b[1] - a[1]) - .forEach(([symbol, balance]) => { + let entries = Object.entries(balances) + entries.sort((a, b) => b[1] - a[1]) + + if (entries.length > 30) { + console.log("Showing top 30 tokens, total tokens:", entries.length) + entries = entries.slice(0, 30) + } + entries.forEach(([symbol, balance]) => { console.log(symbol.padEnd(25, " "), humanizeNumber(balance)); }); console.log("Total:", humanizeNumber(usdTvls[chain]), "\n"); From d5aa1fa2b52b3588aa01afa0805cff181e5c7b6a Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 26 Oct 2024 18:47:37 +0100 Subject: [PATCH 0815/1768] fix --- projects/velvet-capital-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js index aae6f8a296..9b320f7ddc 100644 --- a/projects/velvet-capital-v3/index.js +++ b/projects/velvet-capital-v3/index.js @@ -8,7 +8,7 @@ async function tvl(api) { ]) const ownerTokens = tokens.map((tokens, i) => [tokens, vaults[i]]); - return sumTokens2({ api, ownerTokens, resolveLP: true }); + return sumTokens2({ api, ownerTokens, resolveLP: true, blacklistedTokens: ['0x55d398326f99059ff775485246999027b3197955'] }); } module.exports = { From 702785a3753d4d6d82c775c80365b5e0da50d3a3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 27 Oct 2024 06:52:40 +0100 Subject: [PATCH 0816/1768] exclude SOS from raydium --- projects/raydium/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/raydium/api.js b/projects/raydium/api.js index 08fd7e18a6..f03307d7d0 100644 --- a/projects/raydium/api.js +++ b/projects/raydium/api.js @@ -16,7 +16,7 @@ async function tvlWithCheck(api) { const balances = await tvl(api) api.addBalances(balances) api.removeTokenBalance('DS4QiZfkp39PsHXYCRV3NkyDUKV9SpTczp2qnAUg6Nt6') // ZMB - // api.removeTokenBalance('HDa3zJc12ahykSsBRvgiWzr6WLEByf36yzKKbVvy4gnF') // SOS + api.removeTokenBalance('HDa3zJc12ahykSsBRvgiWzr6WLEByf36yzKKbVvy4gnF') // SOS const usdValue = await api.getUSDValue() // for some godforsaken reason, the TVL is sometimes reported as 60M, we fail in that case rather than report a wrong number if (usdValue < 2e8) throw new Error('TVL is too low :' + usdValue / 1e6 + 'M') From 32b1ba837e9fc0a0d1b28110c5ef6a65220f6e1c Mon Sep 17 00:00:00 2001 From: SaarWu Date: Sun, 27 Oct 2024 13:34:48 +0700 Subject: [PATCH 0817/1768] Add SuiMarket tvl (#12056) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/sui.js | 24 ++++++++++++++++++++++++ projects/helper/env.js | 1 + projects/suimarket/index.js | 20 ++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 projects/suimarket/index.js diff --git a/projects/helper/chain/sui.js b/projects/helper/chain/sui.js index 650205208e..aa832b2077 100644 --- a/projects/helper/chain/sui.js +++ b/projects/helper/chain/sui.js @@ -9,6 +9,7 @@ const { sliceIntoChunks, getUniqueAddresses } = require('../utils') //https://docs.sui.io/sui-jsonrpc const endpoint = () => getEnv('SUI_RPC') +const graphEndpoint = () => getEnv('SUI_GRAPH_RPC') async function getObject(objectId) { return (await call('sui_getObject', [objectId, { @@ -140,6 +141,28 @@ async function sumTokens({ balances = {}, owners = [], blacklistedTokens = [], t return api.getBalances() } +async function queryEventsByType({ eventType, transform = i => i }) { + const query = `query GetEvents($after: String, $eventType: String!) { + events(first: 50, after: $after, filter: { eventType: $eventType }) { + pageInfo { + endCursor + hasNextPage + } + nodes { + json + } + } +}` + const items = [] + let after = null + do { + const { events: { pageInfo: { endCursor, hasNextPage}, nodes } } = await sdk.graph.request(graphEndpoint(), query, {variables: { after, eventType}}) + after = hasNextPage ? endCursor : null + items.push(...nodes.map(i => i.json).map(transform)) + } while (after) + return items +} + module.exports = { endpoint: endpoint(), call, @@ -151,4 +174,5 @@ module.exports = { getDynamicFieldObjects, dexExport, sumTokens, + queryEventsByType, }; diff --git a/projects/helper/env.js b/projects/helper/env.js index 90b0c9b531..a118b42cb7 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -9,6 +9,7 @@ const DEFAULTS = { SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', APTOS_RPC: 'https://aptos-mainnet.pontem.network', SUI_RPC: 'https://fullnode.mainnet.sui.io/', + SUI_GRAPH_RPC: 'https://sui-mainnet.mystenlabs.com/graphql', FLOW_RPC: 'https://rest-mainnet.onflow.org', FLOW_EVM_RPC: 'https://mainnet.evm.nodes.onflow.org', MULTIVERSX_RPC: 'https://api.multiversx.com', diff --git a/projects/suimarket/index.js b/projects/suimarket/index.js new file mode 100644 index 0000000000..23879551e9 --- /dev/null +++ b/projects/suimarket/index.js @@ -0,0 +1,20 @@ +const { queryEventsByType, getObjects, } = require('../helper/chain/sui') + +async function tvl(api) { + const eventType = '0xb61e324fa43746f5c24b2db3362afb382b644b32bce39a53f1f796a0109828e0::suimarket::EventCreated' + let events = await queryEventsByType({ eventType, transform: i => i.event_id }) + events = await getObjects(events) + + events.forEach(object => { + const coin = object.type.split('<')[1].replace('>', '') + const amount = object.fields.total_base_coin + api.add(coin, amount) + }) +} + +module.exports = { + timetravel: false, + sui: { + tvl + }, +} From cd3267d7ba114266f59a55236fe89c7f73bbf613 Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Sun, 27 Oct 2024 12:05:28 +0530 Subject: [PATCH 0818/1768] updated pools (#12062) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 57 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index fd943ee7c8..2b5535ffd9 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -91,6 +91,30 @@ const ALPHAFI_CETUS_TVL_IDS = [ token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", token1Type: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN" }, + // usdc eth + { + poolID: "0xc04f71f32a65ddf9ebf6fb69f39261457da28918bfda5d3760013f3ea782a594", + cetusPoolID: "0x9e59de50d9e5979fc03ac5bcacdb581c823dbd27d63a036131e17b391f2fac88", + investorID: "0xb0bff60783536f9dc0b38e43150a73b73b8a4f1969446f7721e187821915bd00", + token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + token1Type: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH" + }, + // deep sui + { + poolID: "0xff496f73a1f9bf7461882fbdad0c6c6c73d301d3137932f7fce2428244359eaa", + cetusPoolID: "0xe01243f37f712ef87e556afb9b1d03d0fae13f96d324ec912daffc339dfdcbd2", + investorID: "0x5e195363175e4b5139749d901ddd5ef1ffc751777a7051b558c45fa12f24abc3", + token0Type: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP", + token1Type: ADDRESSES.sui.SUI + }, + // buck sui + { + poolID: "0xeb44ecef39cc7873de0c418311557c6b8a60a0af4f1fe1fecece85d5fbe02ab5", + cetusPoolID: "0x59cf0d333464ad29443d92bfd2ddfd1f794c5830141a5ee4a815d1ef3395bf6c", + investorID: "0x9b7c9b6086d3baf413bccdfbb6f60f04dedd5f5387dee531eef5b811afdfaedc", + token0Type: "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", + token1Type: ADDRESSES.sui.SUI + }, ] const ALPHAFI_NAVI_TVL_IDS = [ @@ -124,6 +148,21 @@ const ALPHAFI_NAVI_TVL_IDS = [ tokenType: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", expo: 6 }, + { + poolID: "0xea3c2a2d29144bf8f22e412ca5e2954c5d3021d3259ff276e3b62424a624ad1f", + tokenType: "0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY", + expo: 6 + }, + { + poolID: "0x8ebe04b51e8a272d4db107ad19cfbc184d1dafeeaab0b61c26e613b804e7777a", + tokenType: "0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD", + expo: 6 + }, + { + poolID: "0xc37ec956fdef6c217505e62444ab93f833c20923755d67d1c8588c9b093ae00e", + tokenType: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", + expo: 8 + }, ] const ALPHAFI_NAVI_LOOP_TVL_IDS = [ { @@ -133,6 +172,13 @@ const ALPHAFI_NAVI_LOOP_TVL_IDS = [ expo: 9 }, ] +const ALPHAFI_BUCKET_TVL_IDS = [ + { + poolID: "0x2c5c14b9fb21f93f36cac0f363acf59ecb21f34c4c9b1a1b383f635ecdc7b507", + tokenType: "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", + }, + +] const ALPHAFI_POOL2_IDS = [{ poolID: "0x594f13b8f287003fd48e4264e7056e274b84709ada31e3657f00eeedc1547e37", cetusPoolID: "0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720", @@ -213,9 +259,18 @@ async function addPoolTVL3(api, alphafiNaviLoopPools){ } } +async function addPoolTVL4(api, alphafiBucketPools){ + + for (const { poolID, tokenType } of alphafiBucketPools){ + let poolObject = await sui.getObject(poolID); + let tokensInvested = poolObject.fields.tokensInvested; + api.add(tokenType, tokensInvested); + } +} + async function tvl(api) { - await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS)]) + await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS), addPoolTVL4(api, ALPHAFI_BUCKET_TVL_IDS)]) } async function pool2(api) { From 807bc7880a102a3f972bfc9057d790afa776cf4e Mon Sep 17 00:00:00 2001 From: DackieSwap <132213730+DackieSwap@users.noreply.github.com> Date: Sun, 27 Oct 2024 13:35:55 +0700 Subject: [PATCH 0819/1768] Update DackieSwap V2 V3 on World Chain (#12060) Co-authored-by: andreapn.eth --- projects/dackieswap-v2/index.js | 1 + projects/dackieswap/index.js | 1 + 2 files changed, 2 insertions(+) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index d4f3c037f0..2fce6ef050 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -16,6 +16,7 @@ const config = { mode: '0x757cd583004400ee67e5cc3c7a60c6a62e3f6d30', base: '0x591f122D1df761E616c13d265006fcbf4c6d6551', linea: '0x9790713770039CeFcf4FAaf076E2846c9B7a4630', + wc: '0x757cD583004400ee67e5cC3c7A60C6a62E3F6d30', } module.exports = { diff --git a/projects/dackieswap/index.js b/projects/dackieswap/index.js index 4ae6f29003..d7b1425e6f 100644 --- a/projects/dackieswap/index.js +++ b/projects/dackieswap/index.js @@ -9,4 +9,5 @@ module.exports = uniV3Export({ mode: { factory: "0xc6f3966E5D08Ced98aC30f8B65BeAB5882Be54C7", fromBlock: 6102035 }, xlayer: { factory: "0xc6f3966e5d08ced98ac30f8b65beab5882be54c7", fromBlock: 278971 }, linea: { factory: "0xc6255ec7CDb11C890d02EBfE77825976457B2470", fromBlock: 8488016 }, + wc: { factory: "0xB9010964301326160173da694c0697a2FcE82F39", fromBlock: 4523073 }, }); \ No newline at end of file From 2b72a955069bb49511d4a197ecd06ed26ecf18bb Mon Sep 17 00:00:00 2001 From: degen-pool <114661125+dead-pool-aka-wilson@users.noreply.github.com> Date: Sun, 27 Oct 2024 16:00:08 +0900 Subject: [PATCH 0820/1768] add fragmetric adapter (#11605) Co-authored-by: Kangji --- projects/fragmetric/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/fragmetric/index.js diff --git a/projects/fragmetric/index.js b/projects/fragmetric/index.js new file mode 100644 index 0000000000..39b5de3908 --- /dev/null +++ b/projects/fragmetric/index.js @@ -0,0 +1,20 @@ +const { sumTokens2 } = require("../helper/solana"); + +async function tvl() { + return sumTokens2({ + tokenAccounts: [ + "EVUJsmfM3cqh48eTrwmLe552F3pzmhRMJGVpmweg2fBt", + "7HPaAWDuzsSEm4JZnRudJF11pNanPNfP5mqHUCkXh5kD", + "BaoCDUcKbYSaxA5scygSeMNZV1GPsNeKqLwg92f9pi5v", + ], + solOwners: [ + "3TK9fNePM4qdKC4dwvDe8Bamv14prDqdVfuANxPeiryb", + ] + }) +} + +module.exports = { + timetravel: false, + solana: { tvl }, + methodology: 'TVL is calculated by summing all restaked assets.', +}; From 06a0e97461db44cb5f42e27cf2cf0d8267c426f4 Mon Sep 17 00:00:00 2001 From: 0xmer1in <39942523+0xmer1in@users.noreply.github.com> Date: Sun, 27 Oct 2024 16:39:47 +0800 Subject: [PATCH 0821/1768] chore: update WOOFi Earn ZKsync Era config --- projects/woofi-earn/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/woofi-earn/index.js b/projects/woofi-earn/index.js index 5eed025498..71d8507fdc 100644 --- a/projects/woofi-earn/index.js +++ b/projects/woofi-earn/index.js @@ -6,9 +6,13 @@ module.exports = { misrepresentedTokens: true, }; -(['fantom', 'bsc', 'avax', 'polygon', 'arbitrum', 'optimism', 'zksync', 'base', 'mantle']).forEach(chain => { +(['fantom', 'bsc', 'avax', 'polygon', 'arbitrum', 'optimism', 'era', 'base', 'mantle']).forEach(chain => { module.exports[chain] = { tvl: async () => { + let network = chain + if (chain == 'era') { + network = 'zksync' + } let data = await get('https://fi-api.woo.org/yield?network=' + chain) const tvl = data.data.total_deposit / 1e18 return toUSDTBalances(tvl) From c777cc9a2047985748c3b4f02ec924aa5ee8132f Mon Sep 17 00:00:00 2001 From: 0xmer1in <39942523+0xmer1in@users.noreply.github.com> Date: Sun, 27 Oct 2024 16:42:02 +0800 Subject: [PATCH 0822/1768] chore: fix --- projects/woofi-earn/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/woofi-earn/index.js b/projects/woofi-earn/index.js index 71d8507fdc..76132e08a6 100644 --- a/projects/woofi-earn/index.js +++ b/projects/woofi-earn/index.js @@ -13,7 +13,7 @@ module.exports = { if (chain == 'era') { network = 'zksync' } - let data = await get('https://fi-api.woo.org/yield?network=' + chain) + let data = await get('https://fi-api.woo.org/yield?network=' + network) const tvl = data.data.total_deposit / 1e18 return toUSDTBalances(tvl) } From eb38119b9d28c363bdc9dec51ef4fb02356227e7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 27 Oct 2024 10:28:26 +0100 Subject: [PATCH 0823/1768] Bonzo (#12064) Co-authored-by: Jason Fabritz Co-authored-by: Jason Fabritz --- projects/bonzo/index.js | 7 +++++++ projects/helper/tokenMapping.js | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 projects/bonzo/index.js diff --git a/projects/bonzo/index.js b/projects/bonzo/index.js new file mode 100644 index 0000000000..a0262ffd94 --- /dev/null +++ b/projects/bonzo/index.js @@ -0,0 +1,7 @@ +const { aaveV2Export, methodology } = require("../helper/aave") + +module.exports = { + timetravel: false, + methodology, + hedera: aaveV2Export('0x236897c518996163E7b313aD21D1C9fCC7BA1afc'), +} \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index d2a3ba9db2..bd685eb3a7 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -126,6 +126,18 @@ const fixBalancesTokens = { bsquared: { '0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3': { coingeckoId: 'lorenzo-stbtc', decimals: 18 } }, + hedera: { + '0x00000000000000000000000000000000001647e8': { coingeckoId: 'xsauce', decimals: 6 }, + '0x000000000000000000000000000000000006f89a': { coingeckoId: 'usd-coin', decimals: 6 }, + '0x000000000000000000000000000000000022d6de': { coingeckoId: 'karate-combat', decimals: 8}, + '0x00000000000000000000000000000000000cba44': { coingeckoId: 'hbarx', decimals: 8 }, + '0x00000000000000000000000000000000000b2ad5': { coingeckoId: 'saucerswap', decimals: 6 }, + '0x0000000000000000000000000000000000163b5a': { coingeckoId: 'hedera-hashgraph', decimals: 8 }, + '0x000000000000000000000000000000000038b3db': { coingeckoId: 'dovu-2', decimals: 8 }, + '0x00000000000000000000000000000000000ec585': { coingeckoId: 'headstarter', decimals: 8 }, + '0x0000000000000000000000000000000000492a28': { coingeckoId: 'hashpack', decimals: 6 }, + '0x000000000000000000000000000000000030fb8b': { coingeckoId: 'steam', decimals: 2 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From ccc8e1637e024b4280e7b3d9aa84665628e36864 Mon Sep 17 00:00:00 2001 From: Merlin <39942523+0xmer1in@users.noreply.github.com> Date: Sun, 27 Oct 2024 17:30:32 +0800 Subject: [PATCH 0824/1768] Update WOOFi Earn ZKsync Era config (#12063) --- projects/woofi-earn/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/woofi-earn/index.js b/projects/woofi-earn/index.js index 5eed025498..76132e08a6 100644 --- a/projects/woofi-earn/index.js +++ b/projects/woofi-earn/index.js @@ -6,10 +6,14 @@ module.exports = { misrepresentedTokens: true, }; -(['fantom', 'bsc', 'avax', 'polygon', 'arbitrum', 'optimism', 'zksync', 'base', 'mantle']).forEach(chain => { +(['fantom', 'bsc', 'avax', 'polygon', 'arbitrum', 'optimism', 'era', 'base', 'mantle']).forEach(chain => { module.exports[chain] = { tvl: async () => { - let data = await get('https://fi-api.woo.org/yield?network=' + chain) + let network = chain + if (chain == 'era') { + network = 'zksync' + } + let data = await get('https://fi-api.woo.org/yield?network=' + network) const tvl = data.data.total_deposit / 1e18 return toUSDTBalances(tvl) } From 448dc28f220de9d222b24320843d77a9b3174dcd Mon Sep 17 00:00:00 2001 From: Akarsh Maurya <57176420+Havoc19@users.noreply.github.com> Date: Sun, 27 Oct 2024 21:20:16 +0530 Subject: [PATCH 0825/1768] Added tvl logic for bsc + added chain specific token fix (#12065) --- projects/velvet-capital-v3/index.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js index 9b320f7ddc..978856c9a1 100644 --- a/projects/velvet-capital-v3/index.js +++ b/projects/velvet-capital-v3/index.js @@ -7,8 +7,20 @@ async function tvl(api) { api.multiCall({ abi: 'address:vault', calls: indexes }), ]) + const blacklistsByChain = { + base: [ + "0x55d398326f99059ff775485246999027b3197955" + ], + bsc: [ + "0x4200000000000000000000000000000000000006" + ] + } + + const blacklistedTokens = blacklistsByChain[api.chain] || [] + + const ownerTokens = tokens.map((tokens, i) => [tokens, vaults[i]]); - return sumTokens2({ api, ownerTokens, resolveLP: true, blacklistedTokens: ['0x55d398326f99059ff775485246999027b3197955'] }); + return sumTokens2({ api, ownerTokens, resolveLP: true, blacklistedTokens}); } module.exports = { @@ -16,7 +28,8 @@ module.exports = { } const config = { - base : '0xf93659fb357899e092813bc3a2959ceDb3282a7f' + base : '0xf93659fb357899e092813bc3a2959ceDb3282a7f', + bsc: '0xA1fe1C37Bf899C7F7521082C002dFA4fEbAaA8dd' } Object.keys(config).forEach(chain => { From 78daf518818e146c67e3330dafb87a1c0b2273c5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:28:07 +0100 Subject: [PATCH 0826/1768] mark bubbleswap as dead --- projects/bubbleswap-v2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/bubbleswap-v2/index.js b/projects/bubbleswap-v2/index.js index 2ec1923a3e..3bd32bcbc8 100644 --- a/projects/bubbleswap-v2/index.js +++ b/projects/bubbleswap-v2/index.js @@ -3,6 +3,7 @@ module.exports = { hedera: { tvl: () => ({}), }, + deadFrom: '2023-07-01', timetravel: false, methodology: "Data is retrieved from the api at https://api.bubbleswap.io/", hallmarks: [ From 90e099c371f98600866330db0b9cae0ac6cb37a3 Mon Sep 17 00:00:00 2001 From: DLHTX <35157091+DLHTX@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:34:44 +0800 Subject: [PATCH 0827/1768] Add mimoswap V3 DEX (#12067) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/mimoswap-v3/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/mimoswap-v3/index.js diff --git a/projects/mimoswap-v3/index.js b/projects/mimoswap-v3/index.js new file mode 100644 index 0000000000..59d78a216c --- /dev/null +++ b/projects/mimoswap-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + iotex: { factory: "0xF36788bF206f75F29f99Aa9d418fD8164b3B8198", fromBlock: 27707694, blacklistedTokens: ['0x95cb18889b968ababb9104f30af5b310bd007fd8'] } +}) \ No newline at end of file From a654ff036d47622b7bde9226c3b2acb4d79bded1 Mon Sep 17 00:00:00 2001 From: MishaShWoof Date: Mon, 28 Oct 2024 15:05:23 +0200 Subject: [PATCH 0828/1768] Add Mainnet cWstETHv3 and cUSDSv3 and Base cAEROv3 Compound markets (#12076) --- projects/compound-v3/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/compound-v3/index.js b/projects/compound-v3/index.js index b31c059606..0d4ca453e2 100644 --- a/projects/compound-v3/index.js +++ b/projects/compound-v3/index.js @@ -6,6 +6,8 @@ module.exports = compoundV3Exports({ '0xc3d688B66703497DAA19211EEdff47f25384cdc3', // USDC Market '0xa17581a9e3356d9a858b789d68b4d866e593ae94', // ETH Market '0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840', // USDT Market + '0x3D0bb1ccaB520A66e607822fC55BC921738fAFE3', // wstETH Market + '0x5D409e56D886231aDAf00c8775665AD0f9897b56', // USDS Market ], }, arbitrum: { @@ -27,6 +29,7 @@ module.exports = compoundV3Exports({ '0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf', // USDbC Market '0x46e6b214b524310239732D51387075E0e70970bf', // ETH Market '0xb125E6687d4313864e53df431d5425969c15Eb2F', // USDC Market + '0x784efeB622244d2348d4F2522f8860B96fbEcE89', // AERO Market ], }, scroll: { From 23dea7d6f6e576e2ccc1569eac017159f59ce6ea Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:06:48 +0100 Subject: [PATCH 0829/1768] Fix: Jones-dao (#12074) --- projects/jones-dao/aura-locker-abi.json | 48 ----------- projects/jones-dao/index.js | 106 ++++++++++-------------- 2 files changed, 44 insertions(+), 110 deletions(-) delete mode 100644 projects/jones-dao/aura-locker-abi.json diff --git a/projects/jones-dao/aura-locker-abi.json b/projects/jones-dao/aura-locker-abi.json deleted file mode 100644 index 32a964f6ed..0000000000 --- a/projects/jones-dao/aura-locker-abi.json +++ /dev/null @@ -1,48 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_user", - "type": "address" - } - ], - "name": "lockedBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "total", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unlockable", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "locked", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint112", - "name": "amount", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unlockTime", - "type": "uint32" - } - ], - "internalType": "struct AuraLocker.LockedBalance[]", - "name": "lockData", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file diff --git a/projects/jones-dao/index.js b/projects/jones-dao/index.js index fa378a17fe..5b1e2dfd97 100644 --- a/projects/jones-dao/index.js +++ b/projects/jones-dao/index.js @@ -4,7 +4,6 @@ const { pool2s } = require("../helper/pool2"); const { stakings } = require("../helper/staking"); const { sumTokens2 } = require("../helper/unwrapLPs"); -const lockerABI = require("./aura-locker-abi.json"); const addresses = require("./addresses"); const jAssetToAsset = { @@ -14,94 +13,77 @@ const jAssetToAsset = { "0x1f6fa7a58701b3773b08a1a16d06b656b0eccb23": addresses.tokens.rdpx, // jrdpx }; -async function tvl(api) { +const tokensAndOwners = [ + [addresses.tokens.uvrt, addresses.glp.stableRewardTracker], + [addresses.tokens.uvrt, addresses.glp.router], + [addresses.tokens.glp, addresses.glp.leverageStrategy], +]; + +const abi = { + locker: "function lockedBalances(address _user) view returns (uint256 total, uint256 unlockable, uint256 locked, (uint112 amount, uint32 unlockTime)[] lockData)", + glpManager: "function getLPManagerContracts(uint256 _nonce) view returns (address lp,address viewer,address swapper,address receiver,address priceHelper,address lpManager,address doubleTracker,address singleTrackerZero,address singleTrackerOne,address compounder,address router)" +} + +async function tvl_arbitrum (api) { const [metavaultTokens, metavaultBalances, optionVaultTokens, optionVaultBalances, jusdcTvl] = await Promise.all([ - api.multiCall({ - abi: "address:depositToken", - calls: addresses.metaVaultsAddresses, - }), - api.multiCall({ - abi: "uint256:workingBalance", - calls: addresses.metaVaultsAddresses, - }), - api.multiCall({ - abi: "address:asset", - calls: addresses.optionVaultAddresses, - }), - api.multiCall({ - abi: "uint256:totalAssets", - calls: addresses.optionVaultAddresses, - }), - sdk.api.abi.call({ - abi: "uint256:totalAssets", - target: addresses.jusdc.underlyingVault, - chain: "arbitrum", - }), + api.multiCall({ abi: "address:depositToken", calls: addresses.metaVaultsAddresses }), + api.multiCall({ abi: "uint256:workingBalance", calls: addresses.metaVaultsAddresses }), + api.multiCall({ abi: "address:asset", calls: addresses.optionVaultAddresses }), + api.multiCall({ abi: "uint256:totalAssets", calls: addresses.optionVaultAddresses }), + api.call({ abi: "uint256:totalAssets", target: addresses.jusdc.underlyingVault }), ]); api.addTokens(metavaultTokens, metavaultBalances); api.addTokens(optionVaultTokens, optionVaultBalances); - api.addTokens(addresses.tokens.usdc, jusdcTvl.output); - const getLPManagerContractsABI = "function getLPManagerContracts(uint256 _nonce) view returns (address lp,address viewer,address swapper,address receiver,address priceHelper,address lpManager,address doubleTracker,address singleTrackerZero,address singleTrackerOne,address compounder,address router)" - + api.addTokens(addresses.tokens.usdc, jusdcTvl); for (const factoryAddress of addresses.smartLpArbFactories) { - const contracts = await api.fetchList({ lengthAbi: 'nonce', itemAbi: getLPManagerContractsABI, target: factoryAddress, startFromOne: true }) + const contracts = await api.fetchList({ lengthAbi: 'nonce', itemAbi: abi.glpManager, target: factoryAddress, startFromOne: true }) const lpManagers = contracts.map(c => c.lpManager) - const token0s = await api.multiCall({ abi: "address:token0", calls: lpManagers }) - const token1s = await api.multiCall({ abi: "address:token1", calls: lpManagers }) - const aums = await api.multiCall({ abi: "function aum() returns (uint256 amount0, uint256 amount1)", calls: lpManagers }) - - api.add(token0s, aums.map(a => a.amount0)) - api.add(token1s, aums.map(a => a.amount1)) + const [token0s, token1s, aums] = await Promise.all([ + api.multiCall({ abi: "address:token0", calls: lpManagers, permitFailure: true }), + api.multiCall({ abi: "address:token1", calls: lpManagers, permitFailure: true }), + api.multiCall({ abi: "function aum() returns (uint256 amount0, uint256 amount1)", calls: lpManagers, permitFailure: true }) + ]) + + lpManagers.forEach((_lp, i) => { + const token0 = token0s[i] + const token1 = token1s[i] + const aum = aums[i] + if (!token0 || !token1 || !aum) return + api.add(token0, aum.amount0) + api.add(token1, aum.amount1) + }) } - const tokensAndOwners = [ - [addresses.tokens.uvrt, addresses.glp.stableRewardTracker], - [addresses.tokens.uvrt, addresses.glp.router], - [addresses.tokens.glp, addresses.glp.leverageStrategy], - ]; - return sumTokens2({ api, tokensAndOwners }); } async function tvl_ethereum(api) { - const balances = {}; - - const leftoverStrategy = await sdk.api.erc20 - .balanceOf({ - target: addresses.tokens.aura, - owner: addresses.aura.strategy, - }) - .then((result) => result.output); - sdk.util.sumSingleBalance(balances, addresses.tokens.aura, leftoverStrategy); - - const lockedBalance = await sdk.api.abi - .call({ - abi: lockerABI.at(0), - target: addresses.aura.locker, - params: addresses.aura.strategy, - }) - .then((result) => result.output[0]); - sdk.util.sumSingleBalance(balances, addresses.tokens.aura, lockedBalance); - - return balances; + const [leftoverStrategy, total] = await Promise.all([ + api.call({ target: addresses.tokens.aura, params: [addresses.aura.strategy], abi: 'erc20:balanceOf' }), + api.call({ target: addresses.aura.locker, params: [addresses.aura.strategy], abi: abi.locker }).then(res => res.total) + ]); + + [leftoverStrategy, total].forEach((bals) => { + api.add(addresses.tokens.aura, bals) + }); } + module.exports = { arbitrum: { - tvl, + tvl: tvl_arbitrum, + staking: stakings(addresses.stakingContracts, addresses.tokens.jones, "arbitrum"), pool2: pool2s(addresses.lpStaking, addresses.lps, "arbitrum", (addr) => { addr = addr.toLowerCase(); return `arbitrum:${jAssetToAsset[addr] ?? addr}`; }), - staking: stakings(addresses.stakingContracts, addresses.tokens.jones, "arbitrum"), }, ethereum: { tvl: tvl_ethereum, }, }; -// node test.js projects/jones-dao/index.js From fb1f81abd53df5d10ddbfaa6b817da3663a2a233 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:10:25 +0100 Subject: [PATCH 0830/1768] Fix: Oh-finance (#12073) --- projects/oh-finance/abi.json | 4 -- projects/oh-finance/index.js | 80 ++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 40 deletions(-) delete mode 100644 projects/oh-finance/abi.json diff --git a/projects/oh-finance/abi.json b/projects/oh-finance/abi.json deleted file mode 100644 index 81c99ed36f..0000000000 --- a/projects/oh-finance/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "virtualBalance": "uint256:virtualBalance", - "underlying": "address:underlying" -} \ No newline at end of file diff --git a/projects/oh-finance/index.js b/projects/oh-finance/index.js index 5f3915a3d8..260b5ee737 100644 --- a/projects/oh-finance/index.js +++ b/projects/oh-finance/index.js @@ -1,39 +1,47 @@ -const sdk = require('@defillama/sdk'); -const abi = require('./abi.json') +const CONFIG = { + ethereum: [ + "0xa528639aae2e765351dcd1e0c2dd299d6279db52", // usdc + ], + avax: [ + "0x8B1Be96dc17875ee01cC1984e389507Bb227CaAB", // usdc.e + "0xd96AbEcf6AA022735CFa9CB512d63645b0834720", // usdt.e + "0xF74303DD14E511CCD90219594e8069d36Da01DCD", // dai.e + "0xe001DeCc1763F8BadBbc1b10c2D6db0900f9B928", // usdc + "0xB3ce618F43b53Cdc12077FB937f9fF465BcE1f60", // usdt + ], + moonriver: [ + "0x4C211F45876d8EC7bAb54CAc0e32AAD15095358A", // usdc + "0xdeA7Ff1D84B7E54587b434C1A585718857CF61d1", // usdt + ], + metis: [ + "0x4C211F45876d8EC7bAb54CAc0e32AAD15095358A", // m.usdc + "0xc53bC2517Fceff56308b492AFad4A53d96d16ed8", // m.usdt + ], +}; + +const abi = { + virtualBalance: "uint256:virtualBalance", + underlying: "address:underlying", +}; + +async function getBankTvl(api, vaults) { + const [investeds, underlyings] = await Promise.all([ + api.multiCall({ calls: vaults, abi: abi.virtualBalance, permitFailure: true }), + api.multiCall({ calls: vaults, abi: abi.underlying, permitFailure: true }), + ]); + + vaults.forEach((_vault, i) => { + const invested = investeds[i] + const underlying = underlyings[i] + if (!invested || !underlying ) return + api.add(underlying, invested) + }) -function getBankTvl(bankAddress, chain){ - return async (time, ethBlock, {[chain]: block})=>{ - const invested = await sdk.api.abi.call({target: bankAddress, block, chain, abi:abi.virtualBalance}) - const underlying = await sdk.api.abi.call({target: bankAddress, block, chain, abi:abi.underlying}) - return { - [chain+":"+underlying.output]: invested.output - } - } } -module.exports={ - ethereum:{ - tvl: getBankTvl("0xa528639aae2e765351dcd1e0c2dd299d6279db52", "ethereum"), // usdc - }, - avax:{ - tvl: sdk.util.sumChainTvls([ - getBankTvl("0x8B1Be96dc17875ee01cC1984e389507Bb227CaAB", "avax"), // usdc.e - getBankTvl("0xd96AbEcf6AA022735CFa9CB512d63645b0834720", "avax"), // usdt.e - getBankTvl("0xF74303DD14E511CCD90219594e8069d36Da01DCD", "avax"), // dai.e - getBankTvl("0xe001DeCc1763F8BadBbc1b10c2D6db0900f9B928", "avax"), // usdc - getBankTvl("0xB3ce618F43b53Cdc12077FB937f9fF465BcE1f60", "avax"), // usdt - ]) - }, - moonriver: { - tvl: sdk.util.sumChainTvls([ - getBankTvl("0x4C211F45876d8EC7bAb54CAc0e32AAD15095358A","moonriver"), // usdc - getBankTvl("0xdeA7Ff1D84B7E54587b434C1A585718857CF61d1","moonriver"), // usdt - ]) - }, - metis: { - tvl: sdk.util.sumChainTvls([ - getBankTvl("0x4C211F45876d8EC7bAb54CAc0e32AAD15095358A", "metis"), // m.usdc - getBankTvl("0xc53bC2517Fceff56308b492AFad4A53d96d16ed8", "metis"), // m.usdt - ]) - } -} \ No newline at end of file +Object.keys(CONFIG).forEach((chain) => { + const vaults = CONFIG[chain]; + module.exports[chain] = { + tvl: (api) => getBankTvl(api, vaults), + }; +}); From 12e4e5046568c45e127d5cc8fb7aac1e849a6ffc Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:11:18 +0100 Subject: [PATCH 0831/1768] Fix: Kogefarm logic (#12072) --- projects/kogefarm/abi.json | 4 --- projects/kogefarm/index.js | 61 ++++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 23 deletions(-) delete mode 100644 projects/kogefarm/abi.json diff --git a/projects/kogefarm/abi.json b/projects/kogefarm/abi.json deleted file mode 100644 index 7106043696..0000000000 --- a/projects/kogefarm/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "balance": "uint256:balance", - "token": "address:token" -} \ No newline at end of file diff --git a/projects/kogefarm/index.js b/projects/kogefarm/index.js index 0ca96c5eac..6708969d45 100644 --- a/projects/kogefarm/index.js +++ b/projects/kogefarm/index.js @@ -1,5 +1,4 @@ const { sumUnknownTokens } = require('../helper/unknownTokens') -const abi = require('./abi.json') const { getConfig } = require('../helper/cache') const kogeMasterChefAddr = '0x6275518a63e891b1bC54FEEBBb5333776E32fAbD' @@ -27,32 +26,56 @@ const _kogePool2 = [ ] const config = { - kava: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/kava_vault_addresses.json', }, - moonriver: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/movr_vault_addresses.json', }, - fantom: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/ftm_vault_addresses.json', }, - polygon: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/vaultaddresses', }, + kava: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/kava_vault_addresses.json' }, + moonriver: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/movr_vault_addresses.json' }, + fantom: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/ftm_vault_addresses.json' }, + polygon: { endpoint: 'https://raw.githubusercontent.com/kogecoin/vault-contracts/main/vaultaddresses' }, +} + +const abi = { + strategy: "function strategy() view returns (address)", + balance: "uint256:balance", + token: "address:token", + balanceOfPool: "function balanceOf() view returns (uint256)" } Object.keys(config).forEach(chain => { - const { endpoint } = config[chain] + const { endpoint } = config[chain]; module.exports[chain] = { tvl: async (api) => { - let info = (await getConfig('kogefarm/' + chain, endpoint)) - if (typeof info === 'string') info = JSON.parse(vaults.replace(/,(\s*[}\]])/g, '$1')) - let vaults = chain === 'polygon' ? info : info.map(v => v.vault) - if (chain === 'polygon') - vaults = vaults.filter(v => !_kogePool2.includes(v)) - const tokens = await api.multiCall({ abi: abi.token, calls: vaults }) - const bals = await api.multiCall({ abi: abi.balance, calls: vaults }) - api.addTokens(tokens, bals) - return sumUnknownTokens({ api, resolveLP: true, }) + let info = await getConfig('kogefarm/' + chain, endpoint); + if (typeof info === 'string') info = JSON.parse(info.replace(/,(\s*[}\]])/g, '$1')); + + let vaults = chain === 'polygon' ? info : info.map(v => v.vault); + if (chain === 'polygon') { + vaults = vaults.filter(v => !_kogePool2.includes(v)); + const [tokens, bals] = await Promise.all([ + api.multiCall({ abi: abi.token, calls: vaults }), + api.multiCall({ abi: abi.balance, calls: vaults }) + ]); + api.addTokens(tokens, bals); + + } else { + const [tokens, strategies] = await Promise.all([ + api.multiCall({ abi: abi.token, calls: vaults }), + api.multiCall({ abi: abi.strategy, calls: vaults }) + ]); + + const balanceOfPools = await api.multiCall({ calls: strategies, abi: abi.balanceOfPool }); + api.addTokens(tokens, balanceOfPools); + } + return sumUnknownTokens({ api, resolveLP: true }); } - } -}) + }; +}); + + module.exports.polygon.pool2 = async (api) => { - const tokens = await api.multiCall({ abi: abi.token, calls: _kogePool2 }) - const bals = await api.multiCall({ abi: abi.balance, calls: _kogePool2 }) + const [tokens, bals] = await Promise.all([ + api.multiCall({ abi: abi.token, calls: _kogePool2 }), + api.multiCall({ abi: abi.balance, calls: _kogePool2 }) + ]) api.addTokens(tokens, bals) return sumUnknownTokens({ api, resolveLP: true, tokens: ['0x3885503aef5e929fcb7035fbdca87239651c8154'], owner: kogeMasterChefAddr, }) } From 23a17dd0847381e4c892ef37f1b777306da51ae1 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:14:47 +0100 Subject: [PATCH 0832/1768] Fix: BSX-exchange, blacklist (#12071) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bsx-exchange/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/bsx-exchange/index.js b/projects/bsx-exchange/index.js index ce2bab3c6b..b7cb8e6afd 100644 --- a/projects/bsx-exchange/index.js +++ b/projects/bsx-exchange/index.js @@ -1,3 +1,5 @@ +const { nullAddress } = require("../helper/tokenMapping") + const config = { base: '0x26a54955a5fb9472d3edfeac9b8e4c0ab5779ed3', } @@ -7,7 +9,8 @@ Object.keys(config).forEach(chain => { module.exports[chain] = { tvl: async (api) => { const tokens = await api.call({ abi: 'address[]:getSupportedTokenList', target: exchange }) - return api.sumTokens({ owner: exchange, tokens }) + tokens.push(nullAddress) + return api.sumTokens({ owner: exchange, tokens, blacklistedTokens: ['0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'] }) } } }) From 43108dee5119aba65781498b4718f20f9d087f3e Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:15:10 +0100 Subject: [PATCH 0833/1768] Fix: AlienBase-v3 (#12070) --- projects/alienbase-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/alienbase-v3/index.js b/projects/alienbase-v3/index.js index 8240ecdc52..84e9b10caa 100644 --- a/projects/alienbase-v3/index.js +++ b/projects/alienbase-v3/index.js @@ -2,5 +2,5 @@ const { uniV3Export } = require('../helper/uniswapV3') const factory = '0x0Fd83557b2be93617c9C1C1B6fd549401C74558C' module.exports = uniV3Export({ - base: { factory, fromBlock: 7150708, }, + base: { factory, fromBlock: 7150708, permitFailure: true }, }) From 5569f86cfa92f2d836407d50a932610d5eb5cf8a Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 28 Oct 2024 13:41:43 +0000 Subject: [PATCH 0834/1768] add optimism and linea --- projects/logx-v2/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index 297e0ff3cf..adc4a2f6c0 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -13,7 +13,9 @@ const config = { sei: ['0xc010f83ae18dC5f40e888898F6605F075686432e','0x0B3b4FAFDe8baFde82C3BfD38538B7aEe4407498'], scroll: ['0x1C70cc9F8236C4Ae2ce3d34d4Da4696Aea611f90','0xcfFe53CEd05A750Fa58304c11997a0335dE731b6'], kroma: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], - taiko: ['0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8','0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6'] + taiko: ['0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8','0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6'], + optimism: ['0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8','0x4417613C0fe034f7D333BF8a6247EaAAF1d51965'], + linea: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'] } Object.keys(config).forEach(chain => { From 1a00106b63d677d7158ec3a7032e6317f45e1d2a Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Mon, 28 Oct 2024 22:20:50 +0800 Subject: [PATCH 0835/1768] update desyn core chain strategy pool (#12050) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-farm/index.js | 18 +++++++++++++++++- projects/desyn-farm1/index.js | 34 ++++++++++++++++++++++++++-------- projects/desyn/index.js | 5 +++-- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/projects/desyn-farm/index.js b/projects/desyn-farm/index.js index 9e773382f8..b87569fa86 100644 --- a/projects/desyn-farm/index.js +++ b/projects/desyn-farm/index.js @@ -9,6 +9,10 @@ const config = { merlin: { factory: '0x790b4ee7998A93702f29e56f8b615eF35BE5af43', fromBlock: 11260440}, } +const abi = { + getBalance: "function getBalance(address) view returns (uint256)" +} + Object.keys(config).forEach(chain => { const {factory, fromBlock, } = config[chain] module.exports[chain] = { @@ -20,9 +24,21 @@ Object.keys(config).forEach(chain => { onlyArgs: true, fromBlock, }) + const pools = logs.map(i=>i.pool) const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools}) - return api.sumTokens({ ownerTokens: tokens.map((tokens, i) => [tokens, pools[i]])}) + const calls = [] + const allTokens = [] + let i = 0 + for (const pool of pools) { + for (const token of tokens[i]) { + calls.push({ target: pool, params: token }) + allTokens.push(token) + } + i++ + } + const allBals = await api.multiCall({ abi: abi.getBalance, calls }) + api.add(allTokens, allBals) } } }) \ No newline at end of file diff --git a/projects/desyn-farm1/index.js b/projects/desyn-farm1/index.js index 98c47f0894..ace2e44e89 100644 --- a/projects/desyn-farm1/index.js +++ b/projects/desyn-farm1/index.js @@ -2,17 +2,23 @@ const { getLogs } = require('../helper/cache/getLogs') module.exports = { methodology: 'On-chain restaking', + doublecounted: true } const config = { - btr: { factory: '0x09eFC8C8F08B810F1F76B0c926D6dCeb37409665', fromBlock: 2393247}, - mode: { factory: '0x09Dfee598d5217da799bEAd56206beC0fDB0D17B', fromBlock: 9912410}, - zklink: { factory: '0xCCA610644f19d7d8f96b90a896B160f54cBE3204', fromBlock: 4734230}, - core: { factory: '0x5C3027D8Cb28A712413553206A094213337E88c5', fromBlock: 17552799} + btr: { factory: '0x09eFC8C8F08B810F1F76B0c926D6dCeb37409665', fromBlock: 2393247 }, + mode: { factory: '0x09Dfee598d5217da799bEAd56206beC0fDB0D17B', fromBlock: 9912410 }, + zklink: { factory: '0xCCA610644f19d7d8f96b90a896B160f54cBE3204', fromBlock: 4734230 }, + core: { factory: '0x5C3027D8Cb28A712413553206A094213337E88c5', fromBlock: 17552799 } + +} + +const abi = { + getBalance: "function getBalance(address) view returns (uint256)" } Object.keys(config).forEach(chain => { - const {factory, fromBlock, } = config[chain] + const { factory, fromBlock, } = config[chain] module.exports[chain] = { tvl: async (api) => { const logs = await getLogs({ @@ -22,9 +28,21 @@ Object.keys(config).forEach(chain => { onlyArgs: true, fromBlock, }) - const pools = logs.map(i=>i.pool) - const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools}) - return api.sumTokens({ ownerTokens: tokens.map((tokens, i) => [tokens, pools[i]])}) + + const pools = logs.map(i => i.pool) + const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools }) + const calls = [] + const allTokens = [] + let i = 0 + for (const pool of pools) { + for (const token of tokens[i]) { + calls.push({ target: pool, params: token }) + allTokens.push(token) + } + i++ + } + const allBals = await api.multiCall({ abi: abi.getBalance, calls }) + api.add(allTokens, allBals) } } }) \ No newline at end of file diff --git a/projects/desyn/index.js b/projects/desyn/index.js index 75f12cba84..a2fbc83e3e 100644 --- a/projects/desyn/index.js +++ b/projects/desyn/index.js @@ -1,11 +1,10 @@ +const sdk = require('@defillama/sdk') const { getLogs } = require('../helper/cache/getLogs') module.exports = { doublecounted: true, hallmarks: [ [1719734400, "Launched on Merlin Chain"], - [1718092800, "DeSyn KelpDAO Restaking Fund Launched"], - [1713340800, "Restaking Fund Series Launched"], ], methodology: 'Liquid restaking strategy', } @@ -21,6 +20,7 @@ const config = { Object.keys(config).forEach(chain => { const {factory, fromBlock, } = config[chain] + module.exports[chain] = { tvl: async (api) => { const logs = await getLogs({ @@ -30,6 +30,7 @@ Object.keys(config).forEach(chain => { onlyArgs: true, fromBlock, }) + const pools = logs.map(i=>i.pool) const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools}) return api.sumTokens({ ownerTokens: tokens.map((tokens, i) => [tokens, pools[i]])}) From d55e1a376f4e10b0f345c2f6814d08f018a9a0a9 Mon Sep 17 00:00:00 2001 From: Fisclend Date: Mon, 28 Oct 2024 22:23:47 +0800 Subject: [PATCH 0836/1768] create FiscLend adapter (#12077) --- projects/fisclend/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/fisclend/index.js diff --git a/projects/fisclend/index.js b/projects/fisclend/index.js new file mode 100644 index 0000000000..4730fc90a4 --- /dev/null +++ b/projects/fisclend/index.js @@ -0,0 +1,6 @@ +const { compoundExports2 } = require('../helper/compound') + +module.exports = { + apechain: compoundExports2({comptroller: '0xd11443B079D62700061F7311fC48C40B30BCEA91', cether: '0xB1974B31b60C7134978e5574F5f1fC8A16535b5D'}), + wc: compoundExports2({comptroller: '0xE3de48DCF4968B419BB55421D6B5bF2c049DaFB2', cether: '0xCD04992D1D8d42BB432AD794103c3B498016Da88'}), +} From 7bc43eba032cf6d0dda9ff76ce4cc59bfc4079ec Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 28 Oct 2024 14:46:08 +0000 Subject: [PATCH 0837/1768] zkl staking --- projects/zkLink/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/zkLink/index.js b/projects/zkLink/index.js index 3c3ec06b60..b567f98bf2 100644 --- a/projects/zkLink/index.js +++ b/projects/zkLink/index.js @@ -1,5 +1,6 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); const ADDRESSES = require("../helper/coreAssets.json"); +const { staking } = require("../helper/staking.js"); const config = { ethereum: { @@ -134,3 +135,7 @@ async function tvl(api) { Object.keys(config).forEach(async chain => { module.exports[chain] = { tvl } }) +module.exports.ethereum.staking = staking( + '0xAd16eDCF7DEB7e90096A259c81269d811544B6B6', + '0xfC385A1dF85660a7e041423DB512f779070FCede' +); \ No newline at end of file From fa7467627c1d6116e772e9a666c2515b2b9f8d22 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 28 Oct 2024 16:59:58 +0100 Subject: [PATCH 0838/1768] split helix --- projects/helper/chain/rpcProxy.js | 10 ++++- .../injective-orderbook-derivatives/index.js | 8 ++++ projects/injective-orderbook/index.js | 8 ++-- projects/injective-orderbook/util.js | 39 +++++++++++++++++++ 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 projects/injective-orderbook-derivatives/index.js create mode 100644 projects/injective-orderbook/util.js diff --git a/projects/helper/chain/rpcProxy.js b/projects/helper/chain/rpcProxy.js index 0c7d948074..203d0308cb 100644 --- a/projects/helper/chain/rpcProxy.js +++ b/projects/helper/chain/rpcProxy.js @@ -24,6 +24,14 @@ module.exports = { mitoVaultQuery: async ({ address }) => { const { data } = await client.get('/injective/mito-vault/' + address) return data - } + }, + getMarkets: async (body) => { + const { data } = await client.post('/injective/orderbook/markets', body) + return data + }, + getOrders: async (body) => { + const { data } = await client.post('/injective/orderbook/orders', body) + return data + }, }, } \ No newline at end of file diff --git a/projects/injective-orderbook-derivatives/index.js b/projects/injective-orderbook-derivatives/index.js new file mode 100644 index 0000000000..0cb6ae2e8d --- /dev/null +++ b/projects/injective-orderbook-derivatives/index.js @@ -0,0 +1,8 @@ +const { getOrderBookTvl, TYPES } = require('../injective-orderbook/util') + +module.exports = { + timetravel: false, + injective: { + tvl: getOrderBookTvl(TYPES.DERIVATIVES), + } +} \ No newline at end of file diff --git a/projects/injective-orderbook/index.js b/projects/injective-orderbook/index.js index 4be227fa2a..0eef6ddc69 100644 --- a/projects/injective-orderbook/index.js +++ b/projects/injective-orderbook/index.js @@ -1,6 +1,8 @@ -const { getExports } = require('../helper/heroku-api') +const { getOrderBookTvl, TYPES } = require('./util') module.exports = { timetravel: false, - ...getExports("injective-orderbook", ['injective']), -} + injective: { + tvl: getOrderBookTvl(TYPES.SPOT), + } +} \ No newline at end of file diff --git a/projects/injective-orderbook/util.js b/projects/injective-orderbook/util.js new file mode 100644 index 0000000000..8a0d89ff56 --- /dev/null +++ b/projects/injective-orderbook/util.js @@ -0,0 +1,39 @@ +const { injective: { getMarkets, getOrders } } = require('../helper/chain/rpcProxy') + +const TYPES = { + BANK: 'BANK', + SPOT: 'SPOT', + DERIVATIVES: 'DERIVATIVES', +} + +function getOrderBookTvl(typeStr) { + return async (api) => { + const markets = await getMarkets({ type: typeStr }) + const orders = await getOrders({ type: typeStr, marketIds: markets.map(i => i.marketId) }) + const marketObj = {} + for (const market of markets) + marketObj[market.marketId] = market + + for (const order of orders) marketObj[order.marketId].orderbook = order.orderbook + for (const { quoteDenom, baseDenom, orderbook: { buys, sells, } } of markets) { + for (const { price, quantity } of buys) + api.add(quoteDenom, Math.floor(quantity * price)) + + for (const { quantity } of sells) { + + if (typeStr === TYPES.SPOT) { + api.add(baseDenom, Math.floor(quantity)) + } else if (typeStr === TYPES.DERIVATIVES) { + const price = buys.length ? buys[0].price : 0 + api.add(quoteDenom, Math.floor(quantity * price)) + } + } + } + return api.getBalances() + } +} + +module.exports = { + TYPES, + getOrderBookTvl +} \ No newline at end of file From 578c0e1da3eafabc047fefb538d9bc0fe0d680fb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 28 Oct 2024 17:17:33 +0100 Subject: [PATCH 0839/1768] minor fix #12066 --- .../index.js | 2 +- projects/injective-orderbook/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename projects/{injective-orderbook-derivatives => injective-orderbook-spot}/index.js (75%) diff --git a/projects/injective-orderbook-derivatives/index.js b/projects/injective-orderbook-spot/index.js similarity index 75% rename from projects/injective-orderbook-derivatives/index.js rename to projects/injective-orderbook-spot/index.js index 0cb6ae2e8d..75da5bb07c 100644 --- a/projects/injective-orderbook-derivatives/index.js +++ b/projects/injective-orderbook-spot/index.js @@ -3,6 +3,6 @@ const { getOrderBookTvl, TYPES } = require('../injective-orderbook/util') module.exports = { timetravel: false, injective: { - tvl: getOrderBookTvl(TYPES.DERIVATIVES), + tvl: getOrderBookTvl(TYPES.SPOT), } } \ No newline at end of file diff --git a/projects/injective-orderbook/index.js b/projects/injective-orderbook/index.js index 0eef6ddc69..7a7a4304fd 100644 --- a/projects/injective-orderbook/index.js +++ b/projects/injective-orderbook/index.js @@ -3,6 +3,6 @@ const { getOrderBookTvl, TYPES } = require('./util') module.exports = { timetravel: false, injective: { - tvl: getOrderBookTvl(TYPES.SPOT), + tvl: getOrderBookTvl(TYPES.DERIVATIVES), } } \ No newline at end of file From 97c51d620e6def061768effb38f038cd1a52ced3 Mon Sep 17 00:00:00 2001 From: nuhbye Date: Mon, 28 Oct 2024 22:31:48 +0530 Subject: [PATCH 0840/1768] Added another pool to tonpools (#12079) --- projects/tonpools/index.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/projects/tonpools/index.js b/projects/tonpools/index.js index 3b616676e7..65889d5c44 100644 --- a/projects/tonpools/index.js +++ b/projects/tonpools/index.js @@ -1,11 +1,19 @@ -const { sumTokensExport } = require('../helper/chain/ton') +const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const tonpoolsContractAddress = "EQA7y9QkiP4xtX_BhOpY4xgVlLM7LPcYUA4QhBHhFZeL4fTa"; +const tonpoolsContractAddress = + "EQA7y9QkiP4xtX_BhOpY4xgVlLM7LPcYUA4QhBHhFZeL4fTa"; + +const tonpoolUSDTContractAddress = + "EQDrSz9W4tjwnqy1F4z-O4Vkdp8g2YP94cmh12X5RbYpejCw"; module.exports = { methodology: "Ton Pools's TVL includes all deposited supported assets", ton: { - tvl: sumTokensExport({ owner: tonpoolsContractAddress, tokens: [ADDRESSES.null] }), + tvl: sumTokensExport({ + owners: [tonpoolsContractAddress, tonpoolUSDTContractAddress], + tokens: [ADDRESSES.null], + }), }, -} +}; + From ee692a1120c8c404193b02a811fea690a5d0d753 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:05:04 +0100 Subject: [PATCH 0841/1768] Fix: Rebalance (#12083) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/rebalance/index.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/projects/rebalance/index.js b/projects/rebalance/index.js index e3a1da99e3..1ba5accb81 100644 --- a/projects/rebalance/index.js +++ b/projects/rebalance/index.js @@ -1,24 +1,32 @@ -const { sumERC4626VaultsExport } = require('../helper/erc4626'); const config = { arbitrum: [ - '0xCF86c768E5b8bcc823aC1D825F56f37c533d32F9', // rUSDT - '0x6eAFd6Ae0B766BAd90e9226627285685b2d702aB', // rUSDC - '0xa8aae282ab2e57B8E39ad2e70DA3566d315348A9', // rUSDC.e - '0xcd5357A4F48823ebC86D17205C12B0B268d292a7', // rWETH - '0x5A0F7b7Ea13eDee7AD76744c5A6b92163e51a99a', // rDAI - '0x3BCa6513BF284026b4237880b4e4D60cC94F686c', // rFRAX + "0xCF86c768E5b8bcc823aC1D825F56f37c533d32F9", // rUSDT + "0x6eAFd6Ae0B766BAd90e9226627285685b2d702aB", // rUSDC + "0xa8aae282ab2e57B8E39ad2e70DA3566d315348A9", // rUSDC.e + "0xcd5357A4F48823ebC86D17205C12B0B268d292a7", // rWETH + "0x5A0F7b7Ea13eDee7AD76744c5A6b92163e51a99a", // rDAI + "0x3BCa6513BF284026b4237880b4e4D60cC94F686c", // rFRAX ], }; +const abi = "function getDepositBalance(address user, address vault) view returns (uint256 balance)"; + module.exports = { - methodology: - 'TVL displays the total amount of assets stored in the REBALANCE vault contracts.', + methodology: "TVL displays the total amount of assets stored in the REBALANCE vault contracts.", start: 1712143874, - hallmarks: [[1712143874, 'Profitable vaults deployment']], + hallmarks: [[1712143874, "Profitable vaults deployment"]], }; Object.keys(config).forEach((chain) => { - module.exports[chain] = { - tvl: sumERC4626VaultsExport({ vaults: config[chain], isOG4626: true }), - }; -}); \ No newline at end of file + module.exports[chain] = { tvl: (api) => tvl(api, config[chain]) }; +}); + +const tvl = async (api, vaults) => { + const [providers, assets] = await Promise.all([ + api.multiCall({ calls: vaults, abi: "address:activeProvider" }), + api.multiCall({ calls: vaults, abi: "address:asset" }), + ]); + + const balances = await api.multiCall({ calls: vaults.map((vault, i) => ({ target: providers[i], params: [vault, vault] })), abi }) + api.add(assets, balances) +}; From f1cd749d62aaa8bb4a495309316664521e8237bd Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:06:32 +0100 Subject: [PATCH 0842/1768] Fix: Lila-Finance (#12082) --- projects/lila-finance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/lila-finance/index.js b/projects/lila-finance/index.js index 5a08174570..dbc86ded8a 100644 --- a/projects/lila-finance/index.js +++ b/projects/lila-finance/index.js @@ -10,7 +10,7 @@ async function tvl(api) { data = data.filter(i => i.strategy !== ADDRESSES.null) const aTokens = await api.multiCall({ abi: 'address:aToken', calls: data.map(i => i.strategy)}) const ownerTokens = data.map((i, idx) => [[i.asset, aTokens[idx]], i.strategy]) - return api.sumTokens({ ownerTokens }) + return api.sumTokens({ ownerTokens, blacklistedTokens: ['0x42c248d137512907048021b30d9da17f48b5b7b2'] }) } module.exports = { From de47364ec6cbdc3dea059a9e68bb2b5fc9d12f86 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:11:41 +0100 Subject: [PATCH 0843/1768] add cables RFQ #12081 --- projects/cables/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/cables/index.js diff --git a/projects/cables/index.js b/projects/cables/index.js new file mode 100644 index 0000000000..748416239d --- /dev/null +++ b/projects/cables/index.js @@ -0,0 +1,19 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const config = { + avax: { + owners: [ + '0xfA12DCB2e1FD72bD92E8255Db6A781b2c76adC20', + ], + }, + arbitrum: { + owners: [ + '0xfA12DCB2e1FD72bD92E8255Db6A781b2c76adC20', + ], + } +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport({ ...config[chain], fetchCoValentTokens: true, }) + } +}) \ No newline at end of file From 841d411b22b098b302d51fb0cf3047e31ab563ee Mon Sep 17 00:00:00 2001 From: Sam Bugs <101145325+0xsambugs@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:43:32 -0300 Subject: [PATCH 0844/1768] feat: add support for base to balmy/mean finance (#12084) --- projects/meanfinance/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/meanfinance/index.js b/projects/meanfinance/index.js index 3be9d2b6e7..0fa35f6c9d 100644 --- a/projects/meanfinance/index.js +++ b/projects/meanfinance/index.js @@ -67,6 +67,7 @@ module.exports = { moonbeam: getV2TvlObject('moonbeam'), avax: getV2TvlObject('avax'), rsk: getV2TvlObject('rsk'), + base: getV2TvlObject('base'), hallmarks: [ [1650082958, "Protocol is paused due to non-critical vulnerability"], [1654057358, "Deployment on Optimism"], From 8c67506decf7a08fbba07a2ccf85e5418012eb59 Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Tue, 29 Oct 2024 12:50:35 +0800 Subject: [PATCH 0845/1768] add base configs (#12090) --- projects/kiloex/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index 5aeb75e0c6..c6dc47d6a1 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -8,6 +8,7 @@ const manta_stone_token = "0xEc901DA9c68E90798BbBb74c11406A32A70652C3"; const manat_manta_token = "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5"; const taiko_owners = ["0x735D00A9368164B9dcB2e008d5Cd15b367649aD5", "0x235C5C450952C12C8b815086943A7bBCF96bc619","0x2646E743A8F47b8d2427dBcc10f89e911f2dBBaa"]; const bsquared_owners = ["0xA2E2F3726DF754C1848C8fd1CbeA6aAFF84FC5B2", "0x1EbEd4024308afcb05E6938eF8Ebd1ec5d6E8C46","0xB20Faa4BA0DdEbDe49299557f4F1ebB5532745e3"]; +const base_owners = ["0x43E3E6FFb2E363E64cD480Cbb7cd0CF47bc6b477", "0x7BC8D56cC78cF467C7230B77De0fcBDea9ac44cE","0xdf5ACC616cD3ea9556EC340a11B54859a393ebBB"]; module.exports = { start: 1690971144, @@ -51,4 +52,11 @@ module.exports = { ADDRESSES.bsquared.UBTC,//uBTC ] }) }, + base: { + tvl: sumTokensExport({ owners: base_owners, tokens: [ + ADDRESSES.base.USDC, //USDC + '0x3b86ad95859b6ab773f55f8d94b4b9d443ee931f', //SolvBTC + '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf',//cbBTC + ] }) + }, }; From 0b4ef92856d012c1d3abade98e21f9498092889e Mon Sep 17 00:00:00 2001 From: MD Date: Tue, 29 Oct 2024 05:51:39 +0100 Subject: [PATCH 0846/1768] add volatile factory on real (#12089) --- projects/impermax/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/impermax/index.js b/projects/impermax/index.js index c48c0a9d64..46a5659413 100644 --- a/projects/impermax/index.js +++ b/projects/impermax/index.js @@ -74,7 +74,8 @@ const config = { }, real: { factories: [ - '0x3b1f3a48a70e372144307a4b126a5cda46e169ad' + '0x3b1f3a48a70e372144307a4b126a5cda46e169ad', + '0x2944e1544cE201ae19e6385490bBA13DaA5f44e4' ] } } From f32d981c3effc8426c7a39752edb9f909d9c54bd Mon Sep 17 00:00:00 2001 From: irlpotato <166589843+irlpotato@users.noreply.github.com> Date: Tue, 29 Oct 2024 13:02:34 +0800 Subject: [PATCH 0847/1768] feat: update treehouse adapter to reflect mantle tvl (#12087) --- projects/treehouse/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 138d9d45a8..449f13ba0b 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -43,11 +43,18 @@ async function tvl(api) { }) } +async function tvlMantle(api) { + return api.sumTokens({ owner: '0x5E4ACCa7a9989007cD74aE4ed1b096c000779DCC', tokens: ['0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA'] }) +} + module.exports = { methodology: 'Token balance in vault and strategy contracts', start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM, hallmarks: [[1727218691, "TVL Cap Raise 1"],[1729045223, "TVL Cap Raise 2"]], ethereum: { tvl, + }, + mantle: { + tvl: tvlMantle } } \ No newline at end of file From 78bc7ad01018d07764a075a1909765500cf91ce7 Mon Sep 17 00:00:00 2001 From: Ncookie Date: Tue, 29 Oct 2024 01:04:21 -0400 Subject: [PATCH 0848/1768] PoolTogether V5 Update (#12086) --- projects/pooltogether-v5/index.js | 2 +- projects/pooltogether/index.js | 6 +++--- projects/pooltogether/v5.js | 19 ++++++++++++++++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/projects/pooltogether-v5/index.js b/projects/pooltogether-v5/index.js index 879280fd6d..914ca37adf 100644 --- a/projects/pooltogether-v5/index.js +++ b/projects/pooltogether-v5/index.js @@ -1,6 +1,6 @@ const { tvl } = require('../pooltogether/v5.js') -const chains = ['optimism', 'base', 'arbitrum'] +const chains = ['optimism', 'base', 'arbitrum', 'ethereum', 'scroll', 'xdai'] module.exports = { doublecounted: true, diff --git a/projects/pooltogether/index.js b/projects/pooltogether/index.js index a85f118868..8762e66ea9 100644 --- a/projects/pooltogether/index.js +++ b/projects/pooltogether/index.js @@ -6,9 +6,9 @@ module.exports = { doublecounted: true, hallmarks: [ [1_634_320_800, 'V4 Launch'], - [1_658_872_800, 'V4 OP Rewards Begin'], - [1_669_615_200, 'V4 OP Rewards Extended'], - [1_697_738_400, 'V5 Launch'] + [1_693_453_300, 'V5 Beta Launch'], + [1_697_738_400, 'V5 Canary Launch'], + [1_713_399_300, 'V5 Launch'] ], methodology: `TVL is the total tokens deposited in PoolTogether` } diff --git a/projects/pooltogether/v5.js b/projects/pooltogether/v5.js index b69a502a81..514d2c3765 100644 --- a/projects/pooltogether/v5.js +++ b/projects/pooltogether/v5.js @@ -2,9 +2,21 @@ const abi = require('./abi.json') const { sumTokens2 } = require('../helper/unwrapLPs') const V5_VAULT_FACTORIES = { - optimism: ['0xF65FA202907D6046D1eF33C521889B54BdE08081', '0x6B17EE3a95BcCd605340454c5919e693Ef8EfF0E', '0xF0F151494658baE060034c8f4f199F74910ea806', '0x0C379e9b71ba7079084aDa0D1c1Aeb85d24dFD39'], - base: ['0xE32F6344875494ca3643198d87524519Dc396DDf'], - arbitrum: ['0x44Be003E55e7cE8a2e0ECC3266f8a9A9de2c07BC'] + optimism: ['0xF65FA202907D6046D1eF33C521889B54BdE08081', '0x6B17EE3a95BcCd605340454c5919e693Ef8EfF0E', '0xF0F151494658baE060034c8f4f199F74910ea806', '0x0C379e9b71ba7079084aDa0D1c1Aeb85d24dFD39', '0xec9f59bd06465b105e719c0b0483a4ed6a656775'], + base: ['0xE32F6344875494ca3643198d87524519Dc396DDf', '0xa55a74A457D8a24D68DdA0b5d1E0341746d444Bf'], + arbitrum: ['0x44Be003E55e7cE8a2e0ECC3266f8a9A9de2c07BC', '0x8020Fb37b21E0eF1707aDa7A914baf44F9045E52'], + ethereum: ['0x29c102109D6cb2D866CFEc380E0E10E9a287A75f', '0xd499CcF3e93F4cfb335Ac388E3C896D59cdDe7c3'], + scroll: ['0x3fdd8bFdF2F589c10C58457CDAE989C7943A30A5'], + xdai: ['0xc3aE3FE36A2645a93b2Fe350D81E80A14831e2A6'] +} + +const V5_NON_FACTORY_VAULTS = { + optimism: ['0xa52e38a9147f5ea9e0c5547376c21c9e3f3e5e1f'], + base: [], + arbitrum: [], + ethereum: [], + scroll: [], + xdai: [] } async function tvl(api) { @@ -15,6 +27,7 @@ async function tvl(api) { const _vaults = await api.fetchList({ lengthAbi: abi.totalVaults, itemAbi: abi.allVaults, target: factory }) vaults.push(..._vaults) } + vaults.push(...V5_NON_FACTORY_VAULTS[api.chain]) const tokens = await api.multiCall({ abi: abi.asset, calls: vaults }) const bals = await api.multiCall({ abi: abi.totalAssets, calls: vaults }) api.addTokens(tokens, bals) From b9db2c8e733ee19105f438ebff15c09d21460afe Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 29 Oct 2024 07:43:32 +0100 Subject: [PATCH 0849/1768] track https://www.surge.trade --- projects/surge-trade/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/surge-trade/index.js diff --git a/projects/surge-trade/index.js b/projects/surge-trade/index.js new file mode 100644 index 0000000000..122506f684 --- /dev/null +++ b/projects/surge-trade/index.js @@ -0,0 +1,5 @@ +const { sumTokensExport } = require('../helper/chain/radixdlt') + +module.exports = { + radixdlt: { tvl: sumTokensExport({ owner: 'component_rdx1crqujzfeukp9d565sh8usdnjsd8k30saa00h540vnwja7se8qqp8g7'}) }, +} \ No newline at end of file From 9a78eb7b3488e0535747ac9db81975381d3b33b9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 29 Oct 2024 08:59:00 +0100 Subject: [PATCH 0850/1768] update surge trade --- projects/helper/chain/radixdlt.js | 3 ++- projects/surge-trade/index.js | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/projects/helper/chain/radixdlt.js b/projects/helper/chain/radixdlt.js index 84bd139608..eaafd8f80c 100644 --- a/projects/helper/chain/radixdlt.js +++ b/projects/helper/chain/radixdlt.js @@ -30,11 +30,12 @@ async function sumTokens({ owner, owners = [], api, transformLSU = false, }) { return fixBalances(api.getBalances()) } -async function queryAddresses({ addresses = [], }) { +async function queryAddresses({ addresses = [], miscQuery = {}}) { let items = [] const chunks = sliceIntoChunks(addresses, 20) for (const chunk of chunks) { const body = { + ...miscQuery, "addresses": chunk, "opt_ins": { "explicit_metadata": ["name"] } } diff --git a/projects/surge-trade/index.js b/projects/surge-trade/index.js index 122506f684..9257be46e3 100644 --- a/projects/surge-trade/index.js +++ b/projects/surge-trade/index.js @@ -1,5 +1,14 @@ -const { sumTokensExport } = require('../helper/chain/radixdlt') +const { queryAddresses } = require('../helper/chain/radixdlt') module.exports = { - radixdlt: { tvl: sumTokensExport({ owner: 'component_rdx1crqujzfeukp9d565sh8usdnjsd8k30saa00h540vnwja7se8qqp8g7'}) }, -} \ No newline at end of file + radixdlt: { tvl }, +} + +async function tvl(api) { + const [{ details: { state }, fungible_resources }] = await queryAddresses({ addresses: ['component_rdx1crezrpxw9ypg6v2panqjqwevnwplg94yeej0rhqq9k7p4kgnltrc9g'], miscQuery: { "aggregation_level": "Vault" } }) + const stateObj = {} + state.fields.map(i => stateObj[i.field_name] = +i.value) + const poolAmount = parseFloat(fungible_resources.items[0].vaults.items[0].amount) + const tvl_usd = poolAmount + stateObj.virtual_balance + stateObj.unrealized_pool_funding + stateObj.pnl_snap + api.add('resource_rdx1t4upr78guuapv5ept7d7ptekk9mqhy605zgms33mcszen8l9fac8vf', tvl_usd) +} From 3e8169a69b84fb333e65b0d13f89039224e24049 Mon Sep 17 00:00:00 2001 From: calvin-bedrock <142883013+calvin-bedrock@users.noreply.github.com> Date: Tue, 29 Oct 2024 18:24:35 +0800 Subject: [PATCH 0851/1768] Add Bedrock uniBTC (#12095) Co-authored-by: Calvin Crypto --- projects/bedrock/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/bedrock/index.js diff --git a/projects/bedrock/index.js b/projects/bedrock/index.js new file mode 100644 index 0000000000..9e9b9bb885 --- /dev/null +++ b/projects/bedrock/index.js @@ -0,0 +1,18 @@ +const { getConfig } = require('../helper/cache') +const { sumTokens } = require('../helper/chain/bitcoin') +const sdk = require('@defillama/sdk') + +const API_URL = 'https://bedrock-datacenter.rockx.com/uniBTC/reserve/address' + +async function tvl() { + const response = await getConfig('bedrock.btc_address', API_URL) + sdk.log(`API load completed: ${response.btc.length} addresses`) + return sumTokens({ owners: response.btc }) +} + +module.exports = { + timetravel: false, + bitcoin: { + tvl + } +} From 4c9bf7ce5f2a5fd2f598281e2f3c2f45c4fef09b Mon Sep 17 00:00:00 2001 From: 0xajing <163371347+0xajing@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:30:36 +0800 Subject: [PATCH 0852/1768] Feat/lorenzo enzoBTC tvl (#12069) Co-authored-by: Leven Co-authored-by: lorenzo Co-authored-by: LevenR <156494841+LevenR@users.noreply.github.com> --- projects/lorenzo-enzoBTC/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/lorenzo-enzoBTC/index.js diff --git a/projects/lorenzo-enzoBTC/index.js b/projects/lorenzo-enzoBTC/index.js new file mode 100644 index 0000000000..b659942289 --- /dev/null +++ b/projects/lorenzo-enzoBTC/index.js @@ -0,0 +1,16 @@ +const { sumTokens } = require('../helper/chain/bitcoin') + +const staticAddresses = [ + 'bc1qnvgmve5gs89ugf4n94jzqgan202dve5dtrj220', + '19wFRSr3GYHmVQtnmbkx7Wkjw3jZdyYB9a' +] +async function tvl() { + return sumTokens({ owners: staticAddresses }) +} + +module.exports = { + methodology: "enzoBTC, Lorenzo Wrapped Bitcoin", + bitcoin: { + tvl: tvl + } +}; \ No newline at end of file From 93d00b4f196fda4ec269b4b399dbc552383a8b55 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 29 Oct 2024 12:42:36 +0100 Subject: [PATCH 0853/1768] solana: replace getTokenSupply --- projects/fluidity-money/index.js | 6 ++-- projects/helper/solana.js | 29 +++++++++++++------ projects/helper/utils/solana/layout.js | 3 +- .../utils/solana/layouts/mixed-layout.js | 12 +++++++- projects/ondofinance/index.js | 12 ++------ projects/openeden-tbill/index.js | 11 +++---- projects/ren/index.js | 11 ++++--- projects/vnx-rwa/index.js | 7 ++--- 8 files changed, 53 insertions(+), 38 deletions(-) diff --git a/projects/fluidity-money/index.js b/projects/fluidity-money/index.js index 530a1a9920..8acb56eb3c 100644 --- a/projects/fluidity-money/index.js +++ b/projects/fluidity-money/index.js @@ -1,5 +1,5 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); -const { getTokenSupply } = require("../helper/solana") +const { getTokenSupplies } = require("../helper/solana") const ATOKENS_ETHEREUM = ['0x028171bCA77440897B824Ca71D1c56caC55b68A3', '0x101cc05f4A51C0319f570d5E146a8C625198e636', '0xd4937682df3C8aEF4FE912A96A74121C0829E664']; const APOOL_ETHEREUM = ['0xFC66c25dbDb0606e7F9cA1d2754Eb0A0f8306dA9', '0x5E88f6dc0aa126FA28A137B24d0B4d7231352a0B', '0xB7a2930e66D84Da74CdcFE4f97FaE9fC8f1114e8']; const ATOKENS_ARBITRUM = ['0x6ab707Aca953eDAeFBc4fD23bA73294241490620', '0x625E7708f30cA75bfd92586e17077590C60eb4cD', '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE', '0x724dc807b04555b71ed48a6896b6f41593b8c637']; @@ -19,8 +19,8 @@ async function tvl_arb(api) { async function tvl_sol(api) { const fUSDC = 'Ez2zVjw85tZan1ycnJ5PywNNxR6Gm4jbXQtZKyQNu3Lv' - const supply = await getTokenSupply(fUSDC) - api.add(fUSDC, supply * 1e6) + const res = await getTokenSupplies([fUSDC]) + api.add(fUSDC, res[fUSDC]) } module.exports = { diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 05f88094cb..f138b63aae 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -50,14 +50,25 @@ function getProvider(chain = 'solana') { return provider; } -async function getTokenSupply(token) { - const tokenSupply = await http.post(endpoint(), { - jsonrpc: "2.0", - id: 1, - method: "getTokenSupply", - params: [token], - }); - return tokenSupply.result.value.uiAmount; +async function getTokenSupplies(tokens) { + const sleepTime = tokens.length > 2000 ? 2000 : 200 + const connection = getConnection() + tokens = tokens.map(i => typeof i === 'string' ? new PublicKey(i) : i) + const res = await runInChunks(tokens, chunk => connection.getMultipleAccountsInfo(chunk), { sleepTime }) + const response = {} + res.forEach((data, idx) => { + if (!data) { + sdk.log(`Invalid account: ${tokens[idx]}`) + return; + } + try { + data = decodeAccount('mint', data) + response[tokens[idx].toString()] = data.supply.toString() + } catch (e) { + sdk.log(`Error decoding account: ${tokens[idx]}`) + } + }) + return response } async function getTokenAccountBalances(tokenAccounts, { individual = false, allowError = false, chain = 'solana' } = {}) { @@ -355,7 +366,6 @@ async function runInChunks(inputs, fn, { chunkSize = 99, sleepTime } = {}) { module.exports = { endpoint: endpoint(), - getTokenSupply, getMultipleAccounts, exportDexTVL, getProvider, @@ -368,4 +378,5 @@ module.exports = { blacklistedTokens_default, getStakedSol, getSolBalanceFromStakePool, + getTokenSupplies, }; diff --git a/projects/helper/utils/solana/layout.js b/projects/helper/utils/solana/layout.js index 42e27acd27..e1cdfc4028 100644 --- a/projects/helper/utils/solana/layout.js +++ b/projects/helper/utils/solana/layout.js @@ -5,7 +5,7 @@ const { parsePhoenix } = require('./layouts/phoenix-dex') const { RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM, RAYDIUM_STABLE_STATE_LAYOUT_V1, } = require('./layouts/raydium-layout') const { INVESTIN_FUND_DATA, } = require('./layouts/investin-layout') const { MARKET_STATE_LAYOUT_V3, OPEN_ORDERS_LAYOUT_V2, MARKET_STATE_LAYOUT_V3_MINIMAL } = require('./layouts/openbook-layout') -const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, } = require('./layouts/mixed-layout'); +const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, TOKEN_MINT_LAYOUT, } = require('./layouts/mixed-layout'); const { SCN_STAKE_POOL, TOKEN_LAYOUT, } = require("./layouts/scnSOL"); const { SANCTUM_INFINITY } = require("./layouts/sanctum-infinity-layout"); const { parseSanctumLstStateList } = require("./layouts/sanctum-validators-lsts-layout"); @@ -65,6 +65,7 @@ const customDecoders = { stakePool: defaultParseLayout(STAKE_POOL_LAYOUT), hhParlay: defaultParseLayout(PARLAY_LAYOUT_PARTIAL), hhPari: defaultParseLayout(HH_PARI_LAYOUT_PARTIAL), + tokenMint: defaultParseLayout(TOKEN_MINT_LAYOUT), } function decodeAccount(layout, accountInfo) { diff --git a/projects/helper/utils/solana/layouts/mixed-layout.js b/projects/helper/utils/solana/layouts/mixed-layout.js index 53962af37c..37047f0271 100644 --- a/projects/helper/utils/solana/layouts/mixed-layout.js +++ b/projects/helper/utils/solana/layouts/mixed-layout.js @@ -269,8 +269,18 @@ const HH_PARI_LAYOUT_PARTIAL = BufferLayout.struct([ BufferLayout.seq(u64(), u8().span, 'amounts'), ]); +const TOKEN_MINT_LAYOUT = struct([ + u8('mintAuthorityOption'), + u8('mintAuthority'), + u64('supply'), + u8('decimals'), + u8('isInitialized'), + u8('freezeAuthorityOption'), + u8('freezeAuthority'), +]); + module.exports = { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, - PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, + PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, TOKEN_MINT_LAYOUT, } diff --git a/projects/ondofinance/index.js b/projects/ondofinance/index.js index 62f1c3ce36..4618e1e782 100644 --- a/projects/ondofinance/index.js +++ b/projects/ondofinance/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { getTokenSupply } = require("../helper/solana"); +const { getTokenSupplies } = require("../helper/solana"); const sui = require("../helper/chain/sui"); const { aQuery } = require("../helper/chain/aptos"); const { get } = require("../helper/http"); @@ -53,14 +53,8 @@ Object.keys(config).forEach((chain) => { tvl: async (api) => { let supplies; if (chain === "solana") { - supplies = await Promise.all(fundAddresses.map(getTokenSupply)).catch( - (error) => { - throw error; - } - ); - - const scaledSupplies = supplies.map((supply) => supply * 1_000_000); - api.addTokens(fundAddresses, scaledSupplies); + supplies = await getTokenSupplies(fundAddresses) + api.addTokens(Object.keys(supplies), Object.values(supplies)); } else if (chain === "sui") { let usdySupply = await getUSDYTotalSupplySUI(); api.addTokens(fundAddresses, [usdySupply]); diff --git a/projects/openeden-tbill/index.js b/projects/openeden-tbill/index.js index 6b102e529d..b917bf45cc 100644 --- a/projects/openeden-tbill/index.js +++ b/projects/openeden-tbill/index.js @@ -1,7 +1,5 @@ -const { getCache, } = require("../helper/cache"); -const { getTokenSupply } = require('../helper/solana') +const { getTokenSupplies } = require('../helper/solana') const { ripple } = require('../helper/chain/rpcProxy') -const ADDRESSES = require('../helper/coreAssets.json') const tbill = "0xdd50C053C096CB04A3e3362E2b622529EC5f2e8a" const solTbill = '4MmJVdwYN8LwvbGeCowYjSx7KoEi6BJWg8XXnW4fDDp6' @@ -17,8 +15,11 @@ async function evmTvl(api) { } async function solTvl (api) { - const tvl = (await getTokenSupply(solTbill) * 10 ** 6) - api.add(solTbill, tvl) + const res = await getTokenSupplies([solTbill]) + console.log(res) + Object.entries(res).forEach(([token, balance]) => { + api.add(token, balance) + }) } async function ripplTvl (api) { diff --git a/projects/ren/index.js b/projects/ren/index.js index e52debcd52..a7aa4ac429 100644 --- a/projects/ren/index.js +++ b/projects/ren/index.js @@ -1,7 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { request, gql } = require("graphql-request"); const sdk = require("@defillama/sdk"); -const { getTokenSupply } = require('../helper/solana') const ethGraphUrl = sdk.graph.modifyEndpoint('AJaQdD8DUunuwHCbAsZk5h62AfyNG1etRtK9EcDH7gwH'); const bscGraphUrl = @@ -152,20 +151,17 @@ async function solana() { ["renLUNA", "8wv2KAykQstNAj2oW6AHANGBiFKVFhvMiyyzzjhkmGvE"], ] const balances = {} - await Promise.all(tokens.map(async token => { - balances[symbol(token[0])] = await getTokenSupply(token[1]) - })) return balances } module.exports = { - solana: { + solana: { tvl: solana }, ethereum: { tvl: eth, }, - avax:{ + avax: { tvl: avax, }, bsc: { @@ -187,3 +183,6 @@ module.exports = { tvl: optimism }, }; + + +Object.values(module.exports).forEach(chainExports => chainExports.tvl = () => ({})) diff --git a/projects/vnx-rwa/index.js b/projects/vnx-rwa/index.js index 11f015f845..5dc8b3d762 100644 --- a/projects/vnx-rwa/index.js +++ b/projects/vnx-rwa/index.js @@ -1,4 +1,4 @@ -const { getTokenSupply } = require("../helper/solana"); +const { getTokenSupplies } = require("../helper/solana"); const fetch = require('node-fetch'); const ASSETS = { @@ -58,9 +58,8 @@ const fetchStellarSupply = async (asset) => { }; const solanaTvl = async (api, assets) => { - const supplies = await Promise.all(assets.map(getTokenSupply)); - const scaledSupplies = supplies.map((supply) => supply * 1e9); - api.add(assets, scaledSupplies); + const supplies = await getTokenSupplies(assets) + api.addTokens(Object.keys(supplies), Object.values(supplies)); }; const stellarTvl = async (api, assets) => { From 377375db51dbfd1d4bc31609247f15bc52186ae5 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 29 Oct 2024 11:46:51 +0000 Subject: [PATCH 0854/1768] deribit PoR (#12099) --- projects/deribit/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/deribit/index.js b/projects/deribit/index.js index 20910881e9..ba368589db 100644 --- a/projects/deribit/index.js +++ b/projects/deribit/index.js @@ -66,4 +66,4 @@ const config = { } module.exports = cexExports(config) -module.exports.methodology = 'This wallets where collect from here https://insights.deribit.com/exchange-updates/deribit-wallet-holdings/' +module.exports.methodology = 'This wallets where collect from here https://insights.deribit.com/exchange-updates/proof-of-reserves-deribit/' From 9ac9a21ae2523334eaa995b3fd3a39a106c98107 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 29 Oct 2024 13:15:45 +0100 Subject: [PATCH 0855/1768] merge rabbitx and blastfutures --- projects/blastfutures/index.js | 5 +++-- projects/helper/solana.js | 13 +++++++------ projects/helper/utils/solana/layout.js | 3 +-- .../helper/utils/solana/layouts/mixed-layout.js | 12 +----------- projects/rabbitx/index.js | 4 ++++ 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/projects/blastfutures/index.js b/projects/blastfutures/index.js index 291de17205..08bda7642f 100644 --- a/projects/blastfutures/index.js +++ b/projects/blastfutures/index.js @@ -4,7 +4,8 @@ const { staking } = require('../helper/staking') module.exports = { blast: { - tvl: sumTokensExport({ owner: '0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e', tokens: [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]}), - staking: staking('0x67dBA61709D78806395acDBa3EF9Df686aF5dc24', '0x236bb48fcF61ce996B2C8C196a9258c176100c7d'), + // tvl: sumTokensExport({ owner: '0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e', tokens: [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]}), + // staking: staking('0x67dBA61709D78806395acDBa3EF9Df686aF5dc24', '0x236bb48fcF61ce996B2C8C196a9258c176100c7d'), + tvl: () => ({}) // moved to rabbitx }, } diff --git a/projects/helper/solana.js b/projects/helper/solana.js index f138b63aae..1566b784c7 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -22,7 +22,8 @@ const blacklistedTokens_default = [ '5fTwKZP2AK39LtFN9Ayppu6hdCVKfMGVm79F2EgHCtsi', //WHEY ] -let connection, provider +let connection = {} +let provider = {} const endpoint = (isClient) => { if (isClient) return getEnv('SOLANA_RPC_CLIENT') ?? getEnv('SOLANA_RPC') @@ -36,18 +37,18 @@ const endpointMap = { } function getConnection(chain = 'solana') { - if (!connection) connection = new Connection(endpointMap[chain](true)) - return connection + if (!connection[chain]) connection[chain] = new Connection(endpointMap[chain](true)) + return connection[chain] } function getProvider(chain = 'solana') { - if (!provider) { + if (!provider[chain]) { const dummy_keypair = Keypair.generate(); const wallet = new Wallet(dummy_keypair); - provider = new Provider(getConnection(chain), wallet) + provider[chain] = new Provider(getConnection(chain), wallet) } - return provider; + return provider[chain] } async function getTokenSupplies(tokens) { diff --git a/projects/helper/utils/solana/layout.js b/projects/helper/utils/solana/layout.js index e1cdfc4028..42e27acd27 100644 --- a/projects/helper/utils/solana/layout.js +++ b/projects/helper/utils/solana/layout.js @@ -5,7 +5,7 @@ const { parsePhoenix } = require('./layouts/phoenix-dex') const { RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM, RAYDIUM_STABLE_STATE_LAYOUT_V1, } = require('./layouts/raydium-layout') const { INVESTIN_FUND_DATA, } = require('./layouts/investin-layout') const { MARKET_STATE_LAYOUT_V3, OPEN_ORDERS_LAYOUT_V2, MARKET_STATE_LAYOUT_V3_MINIMAL } = require('./layouts/openbook-layout') -const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, TOKEN_MINT_LAYOUT, } = require('./layouts/mixed-layout'); +const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, } = require('./layouts/mixed-layout'); const { SCN_STAKE_POOL, TOKEN_LAYOUT, } = require("./layouts/scnSOL"); const { SANCTUM_INFINITY } = require("./layouts/sanctum-infinity-layout"); const { parseSanctumLstStateList } = require("./layouts/sanctum-validators-lsts-layout"); @@ -65,7 +65,6 @@ const customDecoders = { stakePool: defaultParseLayout(STAKE_POOL_LAYOUT), hhParlay: defaultParseLayout(PARLAY_LAYOUT_PARTIAL), hhPari: defaultParseLayout(HH_PARI_LAYOUT_PARTIAL), - tokenMint: defaultParseLayout(TOKEN_MINT_LAYOUT), } function decodeAccount(layout, accountInfo) { diff --git a/projects/helper/utils/solana/layouts/mixed-layout.js b/projects/helper/utils/solana/layouts/mixed-layout.js index 37047f0271..53962af37c 100644 --- a/projects/helper/utils/solana/layouts/mixed-layout.js +++ b/projects/helper/utils/solana/layouts/mixed-layout.js @@ -269,18 +269,8 @@ const HH_PARI_LAYOUT_PARTIAL = BufferLayout.struct([ BufferLayout.seq(u64(), u8().span, 'amounts'), ]); -const TOKEN_MINT_LAYOUT = struct([ - u8('mintAuthorityOption'), - u8('mintAuthority'), - u64('supply'), - u8('decimals'), - u8('isInitialized'), - u8('freezeAuthorityOption'), - u8('freezeAuthority'), -]); - module.exports = { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, - PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, TOKEN_MINT_LAYOUT, + PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, } diff --git a/projects/rabbitx/index.js b/projects/rabbitx/index.js index 85f877326d..80f40d495c 100644 --- a/projects/rabbitx/index.js +++ b/projects/rabbitx/index.js @@ -7,4 +7,8 @@ module.exports = { tvl: sumTokensExport({ owners: ['0xFc7f884DE22a59c0009C91733196b012Aecb8F41', '0x3b8F6D6970a24A58b52374C539297ae02A3c4Ae4', '0x7fAb440A0251dA67B316d2c0431E3Ccf4520Cd42',], tokens: [ADDRESSES.ethereum.USDT]}), staking: staking('0x0c378FB17E87B180256a87e3f671cd83Bf3236DB', '0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e'), }, + blast: { + tvl: sumTokensExport({ owner: '0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e', tokens: [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]}), + staking: staking('0x67dBA61709D78806395acDBa3EF9Df686aF5dc24', '0x236bb48fcF61ce996B2C8C196a9258c176100c7d'), + }, } From 191c6a0dcd162932a13ae7f700afb50e86e2065b Mon Sep 17 00:00:00 2001 From: Arthur <166661318+goneural@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:54:21 +0300 Subject: [PATCH 0856/1768] add Neural TVL (#12098) Co-authored-by: goneural --- projects/neuralai/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/neuralai/index.js diff --git a/projects/neuralai/index.js b/projects/neuralai/index.js new file mode 100644 index 0000000000..50b7109824 --- /dev/null +++ b/projects/neuralai/index.js @@ -0,0 +1,14 @@ +const { staking } = require('../helper/staking'); + +const CONTRACT_ADDRESS = "0xbe2cf8DA9887e2AB997Ed53cC49263eBD09B20C3"; +const TOKENS = [ + "0x32B053F2CBA79F80ada5078cb6b305da92BDe6e1", // neural + "0x77E06c9eCCf2E797fd462A92B6D7642EF85b0A44" // wtao +]; + +module.exports = { + ethereum: { + tvl: () => ({}), + staking: staking(CONTRACT_ADDRESS, TOKENS), + }, +}; From e72e9f1b5fc9d5b63c60812a2c281139c9f5f3ae Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 29 Oct 2024 13:58:25 +0100 Subject: [PATCH 0857/1768] Update: Karak (add v2 factories) (#12096) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/karak/index.js | 46 +++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/projects/karak/index.js b/projects/karak/index.js index 3cd0de8cf0..ba5290c9c3 100644 --- a/projects/karak/index.js +++ b/projects/karak/index.js @@ -1,22 +1,38 @@ +const { getLogs2 } = require('../helper/cache/getLogs') const { sumTokens2 } = require("../helper/unwrapLPs") const config = { - ethereum: { factory: '0x54e44dbb92dba848ace27f44c0cb4268981ef1cc', }, - arbitrum: { factory: '0x399f22ae52a18382a67542b3de9bed52b7b9a4ad', }, - karak: { factory: '0xB308474350D75447cA8731B7Ce87c9ee9DA03B1C', }, - mantle: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD', }, - bsc: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD', }, - blast: { factory: '0x58b5dc145ca2BE84fe087614CFe36055be609BB3', }, - fraxtal: { factory: '0xdF922c74CC0dc394022ea002Af5aFaa32348670e', }, + ethereum: { v1: { factory: '0x54e44dbb92dba848ace27f44c0cb4268981ef1cc' } }, + arbitrum: { v1: { factory: '0x399f22ae52a18382a67542b3de9bed52b7b9a4ad' }, v2: { factory: '0xc4B3D494c166eBbFF9C716Da4cec39B579795A0d', block: 261874079 }}, + karak: { v1: { factory:'0xB308474350D75447cA8731B7Ce87c9ee9DA03B1C' } }, + mantle: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'} }, + bsc: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'} }, + blast: { v1: { factory: '0x58b5dc145ca2BE84fe087614CFe36055be609BB3'} }, + fraxtal: { v1: { factory: '0xdF922c74CC0dc394022ea002Af5aFaa32348670e'}, v2: { factory: '0x04962047B6a9E8c99C8Da874D34c4285a87d541E', block: 11669871 } }, +} + +const eventAbi = 'event DeployedVault(address operator, address vault, address asset)' + +const karak_v1_tvl = async (api, { factory }) => { + const vaults = await api.call({ abi: 'address[]:getVaults', target: factory }) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + return sumTokens2({ api, tokensAndOwners2: [tokens, vaults] }) +} + +const karak_v2_tvl = async (api, { factory, block }) => { + const logs = await getLogs2({ api, target: factory, fromBlock: block, eventAbi }) + const vaults = logs.map(log => log[1]) + const tokens = logs.map(log => log[2]) + return sumTokens2({ api, tokensAndOwners2: [tokens, vaults] }) +} + +const tvl = async (api, factories) => { + const { v1, v2 } = factories + if (v1) await karak_v1_tvl(api, v1) + if (v2) await karak_v2_tvl(api, v2) } Object.keys(config).forEach(chain => { - const { factory, } = config[chain] - module.exports[chain] = { - tvl: async (api) => { - const vaults = await api.call({ abi: 'address[]:getVaults', target: factory }) - const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) - return sumTokens2({ api, tokensAndOwners2: [tokens, vaults] }) - } - } + const factories = config[chain] + module.exports[chain] = { tvl: (api) => tvl(api, factories) } }) From 906eb31305440e58b7dbfcd695c1c510b82aed7e Mon Sep 17 00:00:00 2001 From: vokkantthakkar <51082769+vokkantthakkar@users.noreply.github.com> Date: Tue, 29 Oct 2024 18:29:31 +0530 Subject: [PATCH 0858/1768] Update Renzo TVL (#12094) --- projects/renzo/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/projects/renzo/index.js b/projects/renzo/index.js index 94b80e7611..0cfc832366 100644 --- a/projects/renzo/index.js +++ b/projects/renzo/index.js @@ -3,11 +3,12 @@ const L1_EZ_ETH_ADDRESS = "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110"; const L2_EZ_ETH_ADDRESS = ADDRESSES.blast.ezETH; const L1_LOCKBOX_ADDRESS = "0xC8140dA31E6bCa19b287cC35531c2212763C2059"; const L1_PZ_ETH_ADDRESS = "0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811"; +const SEI_EZ_ETH_ADDRESS = "0x6DCfbF4729890043DFd34A93A2694E5303BA2703"; async function L2Tvl(api) { - return { - [L1_EZ_ETH_ADDRESS]: await api.call({ target: L2_EZ_ETH_ADDRESS, abi: "erc20:totalSupply" }) - } + const targetAddress = api.chain === "sei" ? SEI_EZ_ETH_ADDRESS : L2_EZ_ETH_ADDRESS; + const supply = await api.call({ target: targetAddress, abi: "erc20:totalSupply" }); + return { [L1_EZ_ETH_ADDRESS]: supply }; } async function ethTvl(api) { @@ -18,7 +19,7 @@ async function ethTvl(api) { api.add(L1_PZ_ETH_ADDRESS, pzEthBalance); } -const chains = ["mode", "blast", "bsc", "linea", "arbitrum", "base"] +const chains = ["mode", "blast", "bsc", "linea", "arbitrum", "base", "optimism", "fraxtal","zircuit","sei" ] module.exports = { doublecounted: true, @@ -29,4 +30,4 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { tvl: L2Tvl } -}) \ No newline at end of file +}) From 99f2f2afa43c35900207af58e494c0056ff546f6 Mon Sep 17 00:00:00 2001 From: murmky <184486394+murmky@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:18:52 +0100 Subject: [PATCH 0859/1768] Add Kyros (#12102) --- projects/kyros/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/kyros/index.js diff --git a/projects/kyros/index.js b/projects/kyros/index.js new file mode 100644 index 0000000000..7015c61d16 --- /dev/null +++ b/projects/kyros/index.js @@ -0,0 +1,15 @@ +const { sumTokens2 } = require("../helper/solana"); + +async function tvl() { + return sumTokens2({ + tokenAccounts: [ + "CRFtzwkekKorgdTRSdvsYeqL1vEuVvwGRvweuWCyaRt3", // jitoSOL token account in kySOL Vault address + ] + }) +} + +module.exports = { + timetravel: false, + solana: { tvl }, + methodology: 'The TVL is calculated by summing all restaked assets.', +}; From ae071c671a0a1178985295761b6375f1472c0958 Mon Sep 17 00:00:00 2001 From: 0xYFLOW <139814596+0xYFLOW@users.noreply.github.com> Date: Tue, 29 Oct 2024 18:20:30 +0400 Subject: [PATCH 0860/1768] Add XBG (#12101) --- projects/yieldflow/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/yieldflow/index.js b/projects/yieldflow/index.js index dfee5c3bd9..65872ca4fc 100644 --- a/projects/yieldflow/index.js +++ b/projects/yieldflow/index.js @@ -74,6 +74,10 @@ const managers = [ '0x590905F3adC1a16Af6A144Eaca57ba65760e93Cf', '0x4568936B2846debb1Ed65122841A500B639f49A7', '0x17263600ABccf294C6D0Ec02bCc23A240e883c7D', + + '0x1F73AbC7e254980AB26974C9A13c8493143F97Bc', + '0x599Dd6b1205E51fbcb2879105051C0EBbfa76b03', + '0xcC125F83BFe2A30F1BEfdf6E06043dB5a7a02A61', ] async function tvl(api) { From eedbb29ca363ae7fe2400a030e35bb21ae2381e2 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:15:19 +0000 Subject: [PATCH 0861/1768] doublecount on bedrock (#12103) --- projects/bedrock/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/bedrock/index.js b/projects/bedrock/index.js index 9e9b9bb885..358a8d7164 100644 --- a/projects/bedrock/index.js +++ b/projects/bedrock/index.js @@ -12,6 +12,7 @@ async function tvl() { module.exports = { timetravel: false, + doublecounted:true, bitcoin: { tvl } From 0e31e528d3d7ce2cc571594e84f0384e5c3fcd0a Mon Sep 17 00:00:00 2001 From: 0xaslan <161349919+0xaslan@users.noreply.github.com> Date: Wed, 30 Oct 2024 00:09:29 -0400 Subject: [PATCH 0862/1768] DeepBook V3 Adapter (#11993) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/deepbook-v3/index.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 projects/deepbook-v3/index.js diff --git a/projects/deepbook-v3/index.js b/projects/deepbook-v3/index.js new file mode 100644 index 0000000000..3d15824017 --- /dev/null +++ b/projects/deepbook-v3/index.js @@ -0,0 +1,29 @@ +const { get } = require("../helper/http"); + +const coins = { + deepType: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP", + suiType: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", + usdcType: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + bethType: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", + wusdtType: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN", + wusdcType: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN", +} + +const endpointUrl = "https://deepbook-indexer.mainnet.mystenlabs.com" +const endpointName = "get_net_deposits" + +const tvl = async (api) => { + const url = `${endpointUrl}/${endpointName}/${Object.values(coins).join(',')}/${api.timestamp}` + const data = await get(url) + Object.keys(data).forEach(coin => { + api.add(coin, data[coin]) + }) +} + +module.exports = { + methodology: "All deposits into all BalanceManagers minutes all withdrawals from all BalanceManagers", + start: 1728858752, + sui: { + tvl, + } +} \ No newline at end of file From 52e4c6e94f62d0c3b3b1214ec8f429f99acad08b Mon Sep 17 00:00:00 2001 From: Chase Brown <54334583+chasebrownn@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:15:15 -0700 Subject: [PATCH 0863/1768] Removing blacklisted tokens (#12104) --- projects/pearl-v2/index.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/projects/pearl-v2/index.js b/projects/pearl-v2/index.js index 5119a191f7..dac961beb7 100644 --- a/projects/pearl-v2/index.js +++ b/projects/pearl-v2/index.js @@ -1,12 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { uniV3Export } = require('../helper/uniswapV3') -const ownTokens = [ - '0xaec9e50e3397f9ddc635c6c429c8c7eca418a143', - ADDRESSES.real.RWA, - '0x25ea98ac87a38142561ea70143fd44c4772a16b6', -] - module.exports = uniV3Export({ - 'real': { factory: '0xeF0b0a33815146b599A8D4d3215B18447F2A8101', fromBlock: 33062, blacklistedTokens: ownTokens,} + 'real': { factory: '0xeF0b0a33815146b599A8D4d3215B18447F2A8101', fromBlock: 33062,} }) \ No newline at end of file From f24ef8f709d403c4d40e0d9c945f8f418b2d8366 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 30 Oct 2024 06:48:42 +0100 Subject: [PATCH 0864/1768] track liquidity slicing #12093 --- projects/liquidity-slicing/index.js | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 projects/liquidity-slicing/index.js diff --git a/projects/liquidity-slicing/index.js b/projects/liquidity-slicing/index.js new file mode 100644 index 0000000000..e5ec5a0d6a --- /dev/null +++ b/projects/liquidity-slicing/index.js @@ -0,0 +1,55 @@ +const { ethers } = require('ethers'); + +const abi = { + "checkContract": "function checkContract(uint16,bytes32) view returns (uint256)", + "nodeStates": "function nodeStates(uint256,bytes32) view returns (uint256 totalStaked,uint256,uint256)" +} + + +const MANAGER_CONTRACT_ADDRESS = "0x1F0ea3b63F3Fca05719E54E7469Ef897754eF666"; + +const config = { + manta: { + transformToken: "manta-network", + chainId: 2, + decimals: 18, + delegator: { + "0x89060B31DB21C6cB4e946EaCB28EFefF085C275a": ["0x2847e7f2823a5048f4ae2cd808a5e978aa6ce41fcbb6e7e7bbbb1b64446b0639"] + }, + validator: { + "0xaB21907461313127Ce944F6f168888d93C091363": ["0x8e8103383262ff2256490767e2338ffc452bf602b0addede203da3218cc9d241"] + } + }, + aleo: { + transformToken: "aleo", + chainId: 5, + decimals: 6, + delegator: { + "0x52ade9c48599d71603cf661f98c9b7bd21cfb8ba448efd6204e89096b969c30c": ["0xbb57045a8a9c39dfb06baaf5ed6cb02343a17feecbf63aba9b15a6694476140f"] + }, + validator: { + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff": ["0x0000000000000000000000000000000000000000000000000000000000000005"] + } + } +}; + +async function tvl(api) { + for (const chain of Object.keys(config)) { + const { transformToken: tokenId, chainId, decimals, delegator, validator, } = config[chain]; + const allConfig = { ...delegator, ...validator }; + + for (const [hostAddr, nodes] of Object.entries(allConfig)) { + const i = await api.call({ abi: abi.checkContract, target: MANAGER_CONTRACT_ADDRESS, params: [chainId, ethers.zeroPadValue(hostAddr, 32)] }); + const calls = nodes.map(v => ({ params: [i, v] })) + const stakes = (await api.multiCall({ abi: abi.nodeStates, calls, target: MANAGER_CONTRACT_ADDRESS })).map(i => i.totalStaked) + stakes.forEach(val => api.addCGToken(tokenId, val / (10 ** decimals))) + } + } +} + +module.exports = { + arbitrum: { + start: 224198345, + tvl, + } +} From cf08b1c866be35650831a82fe0189bb0353bfc8e Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 30 Oct 2024 07:23:39 +0100 Subject: [PATCH 0865/1768] Fix: Contango-v2 (#12080) --- projects/contango-v2/index.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/projects/contango-v2/index.js b/projects/contango-v2/index.js index f3d69ee3f2..00a537adc4 100644 --- a/projects/contango-v2/index.js +++ b/projects/contango-v2/index.js @@ -3,14 +3,24 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); const CONTANGO_PROXY = "0x6Cae28b3D09D8f8Fc74ccD496AC986FC84C0C24E"; const CONTANGO_LENS_PROXY = "0xe03835Dfae2644F37049c1feF13E8ceD6b1Bb72a"; -const alchemyGraphUrl = (chain) => - `https://subgraph.satsuma-prod.com/773bd6dfe1c6/egills-team/v2-${chain}/api` +const alchemyGraphUrl = (chain) => `https://subgraph.satsuma-prod.com/773bd6dfe1c6/egills-team/v2-${chain}/api` + +const excludedIds_arb = [ + "0x415242555344540000000000000000000bffffffff0000000000000000000623", + "0x555344435745544800000000000000000bffffffff000000000000000000030a", + "0x574554485553444300000000000000000bffffffff00000000000000000001df", + "0x574554485553444300000000000000000bffffffff00000000000000000001e8", + "0x574554485553444300000000000000000bffffffff0000000000000000000309", + "0x776545544857455448000000000000000bffffffff0000000000000000003099", + "0x777374455448574554480000000000000bffffffff00000000000000000010a7" +]; const config = { arbitrum: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, graphUrl: alchemyGraphUrl('arbitrum'), + excludedIds: excludedIds_arb }, optimism: { contango: CONTANGO_PROXY, @@ -61,23 +71,24 @@ const config = { }; module.exports = { + hallmarks: [[1729036800, "Affected by the Radiant hack"]], doublecounted: true, methodology: `Counts the tokens locked in the positions to be used as margin + user's tokens locked in the protocol's vault. Borrowed coins are discounted from the TVL, so only the position margins are counted. The reason behind this is that the protocol only added the user's margin to the underlying money market. Adding the borrowed coins to the TVL can be used as a proxy for the protocol's open interest.`, }; Object.keys(config).forEach((chain) => { - const { contango, contango_lens, graphUrl } = config[chain]; + const { contango, contango_lens, graphUrl, excludedIds = [] } = config[chain]; module.exports[chain] = { tvl: async (api) => { await Promise.all([ - positionsTvl(api, contango_lens, graphUrl, false), + positionsTvl(api, contango_lens, graphUrl, false, excludedIds), vaultTvl(api, contango, graphUrl), ]); return sumTokens2({ api }) }, borrowed: async (api) => { - await positionsTvl(api, contango_lens, graphUrl, true) + await positionsTvl(api, contango_lens, graphUrl, true, excludedIds) return sumTokens2({ api }) } }; @@ -88,6 +99,7 @@ async function positionsTvl( contangoLens, graphUrl, borrowed, + excludedIds ) { const cacheKey = `contango-positions-${api.chain}`; const positions = await cachedGraphQuery(cacheKey, graphUrl, graphQueries.position, { @@ -96,10 +108,10 @@ async function positionsTvl( fetchById: true, safeBlockLimit: 3000, }) - const parts = positions.map(({ id, instrument: { base, quote } }) => [ - id, - [base.id, quote.id], - ]); + + const parts = positions + .filter(({ id }) => !excludedIds.includes(id)) + .map(({ id, instrument: { base, quote } }) => [id, [base.id, quote.id]]); const balances = await api.multiCall({ target: contangoLens, From a5213fb4f43962debdcfb81b0987caf5207ab8b1 Mon Sep 17 00:00:00 2001 From: 0xchimz <5950717+0xchimz@users.noreply.github.com> Date: Wed, 30 Oct 2024 19:37:56 +0700 Subject: [PATCH 0866/1768] Add RabbitSwap (#12108) Co-authored-by: 0xchimz --- projects/rabbitswap-v3/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/rabbitswap-v3/index.js diff --git a/projects/rabbitswap-v3/index.js b/projects/rabbitswap-v3/index.js new file mode 100644 index 0000000000..ce3b106f80 --- /dev/null +++ b/projects/rabbitswap-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + tomochain: { factory: '0x8Ab5815E0A6a059d203F53496fAAb3045d01A25A', fromBlock: 86168117, isAlgebra: false }, +}) From 74ff539ec92bbc4b83cb5bc69d6a9369f92c5f70 Mon Sep 17 00:00:00 2001 From: PinSwap-IoteX Date: Wed, 30 Oct 2024 20:39:03 +0800 Subject: [PATCH 0867/1768] add PinSwap (#12106) Co-authored-by: deployer --- projects/PinSwap/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/PinSwap/index.js diff --git a/projects/PinSwap/index.js b/projects/PinSwap/index.js new file mode 100644 index 0000000000..10fc1049a5 --- /dev/null +++ b/projects/PinSwap/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +module.exports = { + misrepresentedTokens: true, + iotex: { + tvl: getUniTVL({ + factory: "0x0A753dD1AFDE272a2d4bf55dF616568744201577", + useDefaultCoreAssets: true, + }), + }, +}; From 7d49c2208bc4a35730193c87a25b9d9cfe63b5b7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:47:21 +0100 Subject: [PATCH 0868/1768] track loxodrome perp #12107 --- projects/loxodrome-perp/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/loxodrome-perp/index.js diff --git a/projects/loxodrome-perp/index.js b/projects/loxodrome-perp/index.js new file mode 100644 index 0000000000..e716fec840 --- /dev/null +++ b/projects/loxodrome-perp/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + iotex: { + tvl: gmxExports({ vault: '0x22e239513f03C5cc890DAad846Bb279C4837d242' }) + }, +} \ No newline at end of file From 64dbe0992ef6b0bac486d73839e87a778993ea26 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:09:28 +0100 Subject: [PATCH 0869/1768] track bulbaswap on morph --- projects/bulbaswap-v2/index.js | 4 ++++ projects/bulbaswap-v3/index.js | 3 +++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 7 ++++++- 5 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 projects/bulbaswap-v2/index.js create mode 100644 projects/bulbaswap-v3/index.js diff --git a/projects/bulbaswap-v2/index.js b/projects/bulbaswap-v2/index.js new file mode 100644 index 0000000000..c7df338a40 --- /dev/null +++ b/projects/bulbaswap-v2/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'morph': '0x8D2A8b8F7d200d75Bf5F9E84e01F9272f90EFB8b' +}) \ No newline at end of file diff --git a/projects/bulbaswap-v3/index.js b/projects/bulbaswap-v3/index.js new file mode 100644 index 0000000000..c7ac10b8b7 --- /dev/null +++ b/projects/bulbaswap-v3/index.js @@ -0,0 +1,3 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ morph: { factory: '0xFf8578C2949148A6F19b7958aE86CAAb2779CDDD', fromBlock: 25159, } }) \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 29abe24e0f..df9c3b56d5 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -209,6 +209,7 @@ "mode", "moonbeam", "moonriver", + "morph", "multivac", "muuchain", "mvc", diff --git a/projects/helper/env.js b/projects/helper/env.js index a118b42cb7..81f9102f84 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -21,6 +21,7 @@ const DEFAULTS = { MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", SHAPE_RPC:'https://mainnet.shape.network', SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + MORPH_RPC_MULTICALL: "0x33A213b1049D5AD2eeE6e61dAe040955e60383D4", WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", APECHAIN_RPC: "https://rpc.apechain.com", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index bd685eb3a7..0c1a05eed3 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -137,7 +137,12 @@ const fixBalancesTokens = { '0x00000000000000000000000000000000000ec585': { coingeckoId: 'headstarter', decimals: 8 }, '0x0000000000000000000000000000000000492a28': { coingeckoId: 'hashpack', decimals: 6 }, '0x000000000000000000000000000000000030fb8b': { coingeckoId: 'steam', decimals: 2 }, - } + }, + morph: { + '0x5300000000000000000000000000000000000011': { coingeckoId: 'ethereum', decimals: 18 }, + '0xc7d67a9cbb121b3b0b9c053dd9f469523243379a': { coingeckoId: 'tether', decimals: 6 }, + '0x803dce4d3f4ae2e17af6c51343040dee320c149d': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From eac20476452739dac25a4e3275cb95c95a912121 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:18:19 +0100 Subject: [PATCH 0870/1768] add morph bridge --- projects/morph/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/morph/index.js diff --git a/projects/morph/index.js b/projects/morph/index.js new file mode 100644 index 0000000000..2426de75e0 --- /dev/null +++ b/projects/morph/index.js @@ -0,0 +1,13 @@ +const { getConfig } = require('../helper/cache') +const { nullAddress } = require('../helper/tokenMapping') + +async function tvl(api) { + const { tokens } = await getConfig('morph/bridge', 'https://raw.githubusercontent.com/morph-l2/morph-list/main/src/mainnet/tokenList.json') + const tokensAndOwners = tokens.filter(i => i.chainId === '1').map(i => [i.address, i.gatewayAddress]) + tokensAndOwners.push([nullAddress, '0xDc71366EFFA760804DCFC3EDF87fa2A6f1623304']) + return api.sumTokens({ tokensAndOwners }) +} + +module.exports = { + ethereum: { tvl }, +} \ No newline at end of file From 5d396b458c7d090ff8536e982f69d22e0e39cdf1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 06:09:21 +0100 Subject: [PATCH 0871/1768] fix deepbook --- projects/deepbook-sui/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/deepbook-sui/index.js b/projects/deepbook-sui/index.js index f09f1fb55a..48e9623c26 100644 --- a/projects/deepbook-sui/index.js +++ b/projects/deepbook-sui/index.js @@ -34,6 +34,7 @@ function findClosestTvl(data, ts) { // Sum all unique values together let totalTvl = Object.values(aggregatedTvl).reduce((acc, current) => acc + current, 0); + if (+totalTvl<0) return 0 return totalTvl; } From f4c43202d24d8b10aa35b61059e37f1573b4a829 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 06:42:52 +0100 Subject: [PATCH 0872/1768] track yamfore #12117 --- projects/treasury/yamfore.js | 40 ++++++++++++++++++++++++++++++++++++ projects/yamfore/index.js | 24 ++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 projects/treasury/yamfore.js create mode 100644 projects/yamfore/index.js diff --git a/projects/treasury/yamfore.js b/projects/treasury/yamfore.js new file mode 100644 index 0000000000..72c8be11ae --- /dev/null +++ b/projects/treasury/yamfore.js @@ -0,0 +1,40 @@ +const { sumTokens2 } = require("../helper/chain/cardano"); +const { assetsAddresses } = require('../helper/chain/cardano/blockfrost'); +const { nullAddress } = require("../helper/tokenMapping"); + +async function adaHandleToAddress(handle) { + // https://docs.adahandle.com/reference/api-reference/cardano-node + const policyID = 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a'; + const assetName = Buffer.from(handle).toString('hex'); + const [holder] = await assetsAddresses(`${policyID}000de140${assetName}`) + return holder.address +} + +async function tvl() { + // const TREASURY_ADDRESS = await adaHandleToAddress('bigblymp') + const TREASURY_ADDRESS = 'addr1qx2m86m788l8zrcc6ecfg0yq698s2ryqpz3c52z2ratw5jh8yqevyugcr8w4ezlj3sry6798h9ynqjgce3mqfwxfma9qts79w0' + + return sumTokens2({ + owners: [TREASURY_ADDRESS,], tokens: [ + nullAddress, + 'c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d' + ], + }) +} + +async function ownTokens() { + // const TREASURY_ADDRESS = await adaHandleToAddress('bigblymp') + const TREASURY_ADDRESS = 'addr1qx2m86m788l8zrcc6ecfg0yq698s2ryqpz3c52z2ratw5jh8yqevyugcr8w4ezlj3sry6798h9ynqjgce3mqfwxfma9qts79w0' + + return sumTokens2({ + owners: [TREASURY_ADDRESS,], tokens: [ + 'ee0633e757fdd1423220f43688c74678abde1cead7ce265ba8a24fcd43424c50', + ], + }) +} + +module.exports = { + cardano: { + tvl, ownTokens, + }, +}; diff --git a/projects/yamfore/index.js b/projects/yamfore/index.js new file mode 100644 index 0000000000..9a5e32faa3 --- /dev/null +++ b/projects/yamfore/index.js @@ -0,0 +1,24 @@ +const { sumTokens2 } = require("../helper/chain/cardano"); +const { nullAddress } = require("../helper/tokenMapping"); + +const V1_PROTOCOL_SCRIPT_ADDRESS = "addr1xywgm3cqq35eh8p83x7gymkgqs8r9zzeg9sgq74d59apepgu3hrsqprfnwwz0zdusfhvspqwx2y9jstqspa2mgt6rjzs2v0fp9" + +async function tvl() { + return sumTokens2({ + owners: [ + V1_PROTOCOL_SCRIPT_ADDRESS, + ], + tokens: [ + nullAddress, + 'c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d' + ], + }) +} + +module.exports = { + cardano: { + tvl + }, + start: 1728878400, + methodology: "TVL is equal to all ADA, CBLP and USDM (USDM by Moneta) held in the treasury and unlent funds, collected fees and loan collateral held by the V1 script.", +}; From d81ecd2841089120b0d0a1b2c08114e3dc653762 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 31 Oct 2024 13:46:45 +0800 Subject: [PATCH 0873/1768] feat: update pumpbtc adapter (add some addresses on base chain) (#12120) --- projects/pumpbtc/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index b5c00f0d19..000fbaaf7b 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -11,6 +11,7 @@ const config = { bsc: { owners: ['0x2Ee808F769AB697C477E0aF8357315069b66bCBb', '0x80922aD2771c5Ea9C14bA5FF4a903EC6B0f7e7C9', '0x2b4B9047C9fEA54705218388bFC7Aa7bADA4BB5E', '0x8A0727B87fa1027c419c3aa2caf56C799d5Bd8c5'], tokens: [ADDRESSES.bsc.BTCB, '0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, mantle: { owners: ['0xd6Ab15B2458B6EC3E94cE210174d860FdBdd6b96'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, bitcoin: {}, + base: { owners: ['0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', '0x4913D495cBA3e1380218d2258126F22Ea5dE5f8B', '0xC7DA129335F8815d62fBd3ca7183A3b2791CdB5e', '0xca873913BBf124441857d32Bb23f723b68433465', '0xF1D06Be8dF2F7Ed4Cdc9ac05915EA2b618FFA3Fb'], tokens: ['0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf'], }, } Object.keys(config).forEach(chain => { From 2a392639e7ddb067e35fa363fdda910462fd3e6a Mon Sep 17 00:00:00 2001 From: Jiho Kang Date: Thu, 31 Oct 2024 14:47:09 +0900 Subject: [PATCH 0874/1768] adding jito restaking tvl tracker for fragmetric (#12119) --- projects/fragmetric/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/fragmetric/index.js b/projects/fragmetric/index.js index 39b5de3908..3f0a6532d2 100644 --- a/projects/fragmetric/index.js +++ b/projects/fragmetric/index.js @@ -6,6 +6,9 @@ async function tvl() { "EVUJsmfM3cqh48eTrwmLe552F3pzmhRMJGVpmweg2fBt", "7HPaAWDuzsSEm4JZnRudJF11pNanPNfP5mqHUCkXh5kD", "BaoCDUcKbYSaxA5scygSeMNZV1GPsNeKqLwg92f9pi5v", + "96h95Nkfy5SPu8ddb3V4b44CTNaZoWsKCCUXY8MKzn6Y", + "DYyfr8fTAchSMZPm6nUu6MHARYVuCuvzwBQrroSW6mQm", + "HakiuyCy3STaWaPtPUFyyHwEjzrRDGaLfqwV8kV6j1pn", ], solOwners: [ "3TK9fNePM4qdKC4dwvDe8Bamv14prDqdVfuANxPeiryb", From 9d7a763f89d7cd05220420dc3b16441fb2f6cbb6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 06:51:25 +0100 Subject: [PATCH 0875/1768] update predx #12118 --- projects/predx/index.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/projects/predx/index.js b/projects/predx/index.js index 7965c70c8c..3233e6c110 100644 --- a/projects/predx/index.js +++ b/projects/predx/index.js @@ -4,13 +4,13 @@ const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { zklink: { tvl: sumTokensExport({ - owners: ["0x986Ca3A4F05AA7EA5733d81Da6649043f43cB9A8"], + owners: ["0x21855483F45ab1801CbE4248b9a2F178320c444B"], tokens: [ADDRESSES.zklink.USDT] }), }, base: { tvl: sumTokensExport({ - owners: ["0xa6368fd44e699f6bca2ab3a02C44beFCA7257cF4"], + owners: ["0x10dE7F398C76341B5a5C33693C930609863F692C"], tokens: [ADDRESSES.base.USDC] }), }, @@ -22,26 +22,26 @@ module.exports = { }, linea: { tvl: sumTokensExport({ - owners: ["0xF9AD26Bb325f4C82F26bF2549b65e6f9a4a04a78"], + owners: ["0x3F8D22db689A9c6F0560baCE255cdD854Ab84Ca5"], tokens: [ADDRESSES.linea.USDC] }), }, bsc: { tvl: sumTokensExport({ - owners: ["0x38Db024F8EA400A57c15C25D1DC46aE868C08a2F"], + owners: ["0x2e8c67E73883e787A164cD9FeA592d0AcDbC61D4"], tokens: [ADDRESSES.bsc.USDT] }), }, mantle: { tvl: sumTokensExport({ - owners: ["0x38Db024F8EA400A57c15C25D1DC46aE868C08a2F"], + owners: ["0x8D2DB5B86b7C079FF8F7190D788766EeB789F104"], tokens: [ADDRESSES.mantle.USDC] }), }, btr: { tvl: sumTokensExport({ - owners: ["0x92CdC3a149A6bc3f39136eF4A94292cDC2Cc4b9b"], - tokens: ["0xf8c374ce88a3be3d374e8888349c7768b607c755"] + owners: ["0x8E4fb0169aECB4768220d97aA1D0106322716678"], + tokens: ["0xf8C374CE88A3BE3d374e8888349C7768B607c755"] }), }, } From 11e311ffeb5d426359d90552ef703e1d527be216 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 06:54:05 +0100 Subject: [PATCH 0876/1768] use token label --- projects/alphafi/index.js | 20 ++++++++-------- projects/bean/index.js | 15 ++++++------ projects/bouncebit-premium/index.js | 3 ++- projects/crackandstack/index.js | 2 +- projects/crosscurve/index.js | 22 ++++++++--------- projects/deepbook-v3/index.js | 7 +++--- projects/folks-xchain/constants.js | 23 +++++++++--------- projects/helper/tokenMapping.js | 22 ++++++++--------- projects/infinite/index.js | 7 +++--- projects/liquidity-slicing/index.js | 1 + projects/lorenzo/index.js | 1 + projects/microcreditproject/index.js | 5 ++-- projects/navi/index.js | 2 +- projects/primex-finance/index.js | 36 ++++++++++++++-------------- projects/radiant-v2/index.js | 31 ++++++++++++------------ projects/root-finance/index.js | 2 +- projects/seer/index.js | 9 +++---- projects/swell-earn-eth/index.js | 5 ++-- projects/taidog/index.js | 2 +- projects/taikodrips/index.js | 3 ++- projects/trado/index.js | 2 +- projects/tron-btc/index.js | 4 ++-- projects/unore/index.js | 2 +- projects/velvet-capital-v3/index.js | 5 ++-- projects/yel/index.js | 8 +++---- projects/zircuit/index.js | 8 +++---- 26 files changed, 130 insertions(+), 117 deletions(-) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index 2b5535ffd9..11557856f8 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -72,7 +72,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ poolID: "0x727882553d1ab69b0cabad2984331e7e39445f91cb4046bf7113c36980685528", cetusPoolID: "0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105", investorID: "0xba6acd0350eab1c6bc433b6c869e5592fe0667ae96a3115f89d5c79dd78396ef", - token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + token0Type: ADDRESSES.sui.USDC_CIRCLE, token1Type: ADDRESSES.sui.SUI }, // usdc usdt @@ -80,23 +80,23 @@ const ALPHAFI_CETUS_TVL_IDS = [ poolID: "0xa213f04c6049f842a7ffe7d39e0c6138a863dc6e25416df950d23ddb27d75661", cetusPoolID: "0x6bd72983b0b5a77774af8c77567bb593b418ae3cd750a5926814fcd236409aaa", investorID: "0xe553be450b7290025d5810da45102abdbaa211c5735e47f6740b4dd880edc0bd", - token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", - token1Type: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN" + token0Type: ADDRESSES.sui.USDC_CIRCLE, + token1Type: ADDRESSES.sui.USDT }, // usdc wusdc { poolID: "0x568a47adf2b10219f0973a5600096822b38b4a460c699431afb6dad385614d66", cetusPoolID: "0x1efc96c99c9d91ac0f54f0ca78d2d9a6ba11377d29354c0a192c86f0495ddec7", investorID: "0x6cc5e671a2a6e9b8c8635ff1fb16ae62abd7834558c3a632d97f393c0f022972", - token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", - token1Type: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN" + token0Type: ADDRESSES.sui.USDC_CIRCLE, + token1Type: ADDRESSES.sui.USDC }, // usdc eth { poolID: "0xc04f71f32a65ddf9ebf6fb69f39261457da28918bfda5d3760013f3ea782a594", cetusPoolID: "0x9e59de50d9e5979fc03ac5bcacdb581c823dbd27d63a036131e17b391f2fac88", investorID: "0xb0bff60783536f9dc0b38e43150a73b73b8a4f1969446f7721e187821915bd00", - token0Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + token0Type: ADDRESSES.sui.USDC_CIRCLE, token1Type: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH" }, // deep sui @@ -112,7 +112,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ poolID: "0xeb44ecef39cc7873de0c418311557c6b8a60a0af4f1fe1fecece85d5fbe02ab5", cetusPoolID: "0x59cf0d333464ad29443d92bfd2ddfd1f794c5830141a5ee4a815d1ef3395bf6c", investorID: "0x9b7c9b6086d3baf413bccdfbb6f60f04dedd5f5387dee531eef5b811afdfaedc", - token0Type: "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", + token0Type: ADDRESSES.sui.BUCK, token1Type: ADDRESSES.sui.SUI }, ] @@ -145,7 +145,7 @@ const ALPHAFI_NAVI_TVL_IDS = [ }, { poolID: "0x04378cf67d21b41399dc0b6653a5f73f8d3a03cc7643463e47e8d378f8b0bdfa", - tokenType: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + tokenType: ADDRESSES.sui.USDC_CIRCLE, expo: 6 }, { @@ -175,7 +175,7 @@ const ALPHAFI_NAVI_LOOP_TVL_IDS = [ const ALPHAFI_BUCKET_TVL_IDS = [ { poolID: "0x2c5c14b9fb21f93f36cac0f363acf59ecb21f34c4c9b1a1b383f635ecdc7b507", - tokenType: "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", + tokenType: ADDRESSES.sui.BUCK, }, ] @@ -198,7 +198,7 @@ const ALPHAFI_POOL2_IDS = [{ cetusPoolID: "0x29e218b46e35b4cf8eedc7478b8795d2a9bcce9c61e11101b3a039ec93305126", investorID: "0xb43d1defd5f76ef084d68d6b56e903b54d0a3b01be8bb920ed1fa84b42c32ee1", token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", - token1Type: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC" + token1Type: ADDRESSES.sui.USDC_CIRCLE }, ] diff --git a/projects/bean/index.js b/projects/bean/index.js index 79d259946c..b30c77d6a7 100644 --- a/projects/bean/index.js +++ b/projects/bean/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const ADDR = { ethereum: { BEANSTALK: "0xc1e088fc1323b20bcbee9bd1b9fc9546db5624c5", @@ -11,9 +12,9 @@ const ADDR = { BEAN3CRV_V2: "0xc9c32cd16bf7efb85ff14e0c8603cc90f6f2ee49", BEANETH_V2: "0xbea0e11282e2bb5893bece110cf199501e872bad", // Underlying non-bean tokens - WETH: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + WETH: ADDRESSES.ethereum.WETH, CRV3: "0x6c3f90f043a72fa612cbac8115ee7e52bde6e490", - LUSD: "0x5f98805a4e8be255a32880fdec7f6728c6568ba0" + LUSD: ADDRESSES.ethereum.LUSD }, arbitrum: { BEANSTALK: "0xd1a0060ba708bc4bcd3da6c37efa8dedf015fb70", @@ -27,12 +28,12 @@ const ADDR = { UNRIPE_BEAN_ERC20: "0x1bea054dddbca12889e07b3e076f511bf1d27543", UNRIPE_LP_ERC20: "0x1bea059c3ea15f6c10be1c53d70c75fd1266d788", // Underlying non-bean tokens - WETH: "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", - WSTETH: "0x5979d7b546e38e414f7e9822514be443a4800529", + WETH: ADDRESSES.arbitrum.WETH, + WSTETH: ADDRESSES.arbitrum.WSTETH, WEETH: "0x35751007a407ca6feffe80b3cb397736d2cf4dbe", - WBTC: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", - USDC: "0xaf88d065e77c8cc2239327c5edb3a432268e5831", - USDT: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9" + WBTC: ADDRESSES.arbitrum.WBTC, + USDC: ADDRESSES.arbitrum.USDC_CIRCLE, + USDT: ADDRESSES.arbitrum.USDT } }; diff --git a/projects/bouncebit-premium/index.js b/projects/bouncebit-premium/index.js index fde3876f9d..afee6eefcb 100644 --- a/projects/bouncebit-premium/index.js +++ b/projects/bouncebit-premium/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens, sumTokensExport } = require('../helper/sumTokens'); const BBTC = '0xF5e11df1ebCf78b6b6D26E04FF19cD786a1e81dC' -const BBUSD = '0x77776b40C3d75cb07ce54dEA4b2Fd1D07F865222' +const BBUSD = ADDRESSES.bouncebit.BBUSD // const stBBTC = '0x7F150c293c97172C75983BD8ac084c187107eA19' const stBBTC_STAKE_ABI = diff --git a/projects/crackandstack/index.js b/projects/crackandstack/index.js index 5207ad3835..8bbecfa14f 100644 --- a/projects/crackandstack/index.js +++ b/projects/crackandstack/index.js @@ -1,7 +1,7 @@ const { sumTokensExport } = require("../helper/unwrapLPs"); const coreAssets = require("../helper/coreAssets.json"); -const TAIKO_TOKEN = "0xA9d23408b9bA935c230493c40C73824Df71A0975"; +const TAIKO_TOKEN = ADDRESSES.taiko.TAIKO; const CONTRACTS = ["0x2c301eBfB0bb42Af519377578099b63E921515B7", "0xD8F7cd7d919c5266777FB83542F956dD30E80187", "0x12689b6ddE632E69fBAA70d066f86aC9fDd33dd1"]; diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index be9a056b48..1cd9439331 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -14,7 +14,7 @@ module.exports = { "0x390f3595bCa2Df7d23783dFd126427CCeb997BF4", // crvUSDT "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3Crv "0xc4AD29ba4B3c580e6D59105FFf484999997675Ff", // crv3crypto - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH + ADDRESSES.ethereum.WETH, // WETH "0xb7ecb2aa52aa64a717180e030241bc75cd946726", // tBTC/WBTC ], }), @@ -31,7 +31,7 @@ module.exports = { "0x82670f35306253222F8a165869B28c64739ac62e", // 3c-crvUSD "0x73aF1150F265419Ef8a5DB41908B700C32D49135", // crvUSDT "0x7f90122BF0700F9E7e1F688fe926940E8839F353", // 2CRV - "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // WETH + ADDRESSES.arbitrum.WETH, // WETH "0x186cf879186986a20aadfb7ead50e3c20cb26cec", // 2BTC-ng ], }), @@ -48,7 +48,7 @@ module.exports = { "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171", // aave "0xa70af99bff6b168327f9d1480e29173e757c7904", // crvUSDT "0xdad97f7713ae9437fa9249920ec8507e5fbb23d3", // crv3crypto - "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", // WBTC + ADDRESSES.polygon.WBTC, // WBTC ], }), }, @@ -63,7 +63,7 @@ module.exports = { "0xc4ec3ab41182e70ca45a764ffc5c45b9a82ccc97", // crvUSDC "0xA5E0E46462970C9Ee8C2ECadcde254c483748Ec4", // b3pool "0xae87e5fa20f335ce14aa3b9e0616308d9ac7d4ce", // crvUSDT - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", // BTCB + ADDRESSES.bsc.BTCB, // BTCB ], }), }, @@ -78,7 +78,7 @@ module.exports = { "0x03771e24b7c9172d163bf447490b142a15be3485", // crvUSDC "0x1337bedc9d22ecbe766df105c9623922a27963ec", // 3pool "0xd1b30ba128573fcd7d141c8a987961b40e047bb6", // crvUSDT - "0x4200000000000000000000000000000000000006", // WETH + ADDRESSES.optimism.WETH_1, // WETH "0x1dc5c0f8668a9f54ed922171d578011850ca0341", // 2BTC ], }), @@ -93,7 +93,7 @@ module.exports = { ADDRESSES.avax.DAI, // DAI "0x1337BedC9D22ecbe766dF105c9623922A27963EC", // av3crv "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", // crv3crypto - "0x152b9d0FdC40C096757F570A51E494bd4b943E50", // BTC.b + ADDRESSES.avax.BTC_b, // BTC.b ], }), }, @@ -102,7 +102,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0xf6C5F01C7F3148891ad0e19DF78743D31E390D1f", // 4pool - "0x4200000000000000000000000000000000000006", // WETH + ADDRESSES.optimism.WETH_1, // WETH "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf", // cbBTC ], }), @@ -119,7 +119,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0x4300000000000000000000000000000000000004", // WETH + ADDRESSES.blast.WETH, // WETH ], }), }, @@ -127,7 +127,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111", // WETH + ADDRESSES.mantle.WETH, // WETH ], }), }, @@ -135,7 +135,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", // WETH + ADDRESSES.linea.WETH, // WETH "0x3aab2285ddcddad8edf438c1bab47e1a9d05a9b4", // WBTC ], }), @@ -144,7 +144,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0xa51894664a773981c6c112c43ce576f315d5b1b6", // WETH + ADDRESSES.taiko.WETH, // WETH ], }), }, diff --git a/projects/deepbook-v3/index.js b/projects/deepbook-v3/index.js index 3d15824017..6f8d51f4c5 100644 --- a/projects/deepbook-v3/index.js +++ b/projects/deepbook-v3/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { get } = require("../helper/http"); const coins = { deepType: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP", suiType: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", - usdcType: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + usdcType: ADDRESSES.sui.USDC_CIRCLE, bethType: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", - wusdtType: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN", - wusdcType: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN", + wusdtType: ADDRESSES.sui.USDT, + wusdcType: ADDRESSES.sui.USDC, } const endpointUrl = "https://deepbook-indexer.mainnet.mystenlabs.com" diff --git a/projects/folks-xchain/constants.js b/projects/folks-xchain/constants.js index b55eca2b3e..8efed9a4ab 100644 --- a/projects/folks-xchain/constants.js +++ b/projects/folks-xchain/constants.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const HubPoolAbi = { getDepositData: "function getDepositData() view returns (uint16 optimalUtilisationRatio, uint256 totalAmount, uint256 interestRate, uint256 interestIndex)", getVariableBorrowData: "function getVariableBorrowData() view returns (uint32 vr0, uint32 vr1, uint32 vr2, uint256 totalAmount, uint256 interestRate, uint256 interestIndex)", @@ -7,26 +8,26 @@ const HubPools = { 'avax': [ { // USDC poolAddress: "0x88f15e36308ED060d8543DA8E2a5dA0810Efded2", - tokenAddress: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", + tokenAddress: ADDRESSES.avax.USDC, }, { // AVAX poolAddress: "0x0259617bE41aDA4D97deD60dAf848Caa6db3F228", - tokenAddress: "0x0000000000000000000000000000000000000000", + tokenAddress: ADDRESSES.null, chainPoolAddress: '0xe69e068539Ee627bAb1Ce878843a6C76484CBd2c', }, { // sAVAX poolAddress: "0x7033105d1a527d342bE618ab1F222BB310C8d70b", - tokenAddress: "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE", + tokenAddress: ADDRESSES.avax.SAVAX, chainPoolAddress: '0x23a96D92C80E8b926dA40E574d615d9e806A87F6', }, { // wETH_ava poolAddress: "0x795CcF6f7601edb41E4b3123c778C56F0F19389A", - tokenAddress: "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", + tokenAddress: ADDRESSES.avax.WETH_e, chainPoolAddress: '0x0e563B9fe6D9EF642bDbA20D53ac5137EB0d78DC', }, { // BTCb_ava poolAddress: "0x1C51AA1516e1156d98075F2F64e259906051ABa9", - tokenAddress: "0x152b9d0FdC40C096757F570A51E494bd4b943E50", + tokenAddress: ADDRESSES.avax.BTC_b, chainPoolAddress: '0xef7a6EBEDe2ad558DB8c36Df65365b209E5d57dC', }, ], @@ -34,20 +35,20 @@ const HubPools = { // excluding USDC cause bridged { // ETH_eth poolAddress: "0xB6DF8914C084242A19A4C7fb15368be244Da3c75", - tokenAddress: "0x0000000000000000000000000000000000000000", + tokenAddress: ADDRESSES.null, chainPoolAddress: '0xe3B0e4Db870aA58A24f87d895c62D3dc5CD05883', }, { // wBTC_eth poolAddress: "0x9936812835476504D6Cf495F4F0C718Ec19B3Aff", chainPoolAddress: "0xb39c03297E87032fF69f4D42A6698e4c4A934449", - tokenAddress: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + tokenAddress: ADDRESSES.ethereum.WBTC, }, ], 'base': [ // excluding USDC cause bridged { // ETH_base poolAddress: "0x51958ed7B96F57142CE63BB223bbd9ce23DA7125", - tokenAddress: "0x0000000000000000000000000000000000000000", + tokenAddress: ADDRESSES.null, chainPoolAddress: '0xe3B0e4Db870aA58A24f87d895c62D3dc5CD05883', }, { // cbBTC_base @@ -59,17 +60,17 @@ const HubPools = { 'bsc': [ { // BNB poolAddress: "0x89970d3662614a5A4C9857Fcc9D9C3FA03824fe3", - tokenAddress: "0x0000000000000000000000000000000000000000", + tokenAddress: ADDRESSES.null, chainPoolAddress: '0x5f2F4771B7dc7e2F7E9c1308B154E1e8957ecAB0', }, { // ETHB_bsc poolAddress: "0x18031B374a571F9e060de41De58Abb5957cD5258", - tokenAddress: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + tokenAddress: ADDRESSES.bsc.ETH, chainPoolAddress: '0x4Db12F554623E4B0b3F5bAcF1c8490D4493380A5', }, { // BTCB_bsc poolAddress: "0xC2FD40D9Ec4Ae7e71068652209EB75258809e131", - tokenAddress: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + tokenAddress: ADDRESSES.bsc.BTCB, chainPoolAddress: '0x12Db9758c4D9902334C523b94e436258EB54156f', }, ] diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 0c1a05eed3..62dd00a440 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -41,7 +41,7 @@ const fixBalancesTokens = { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, shape: { - '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, '0x48A9B22b80F566E88f0f1DcC90Ea15A8A3bAE8a4': { coingeckoId: 'ethereum', decimals: 18 }, }, hela: { @@ -67,8 +67,8 @@ const fixBalancesTokens = { '0x51115241c7b8361eee88d8610f71d0a92cee5323': { coingeckoId: 'usd-coin', decimals: 6 }, }, lisk: { - '0x05d032ac25d322df992303dca074ee7392c117b9': { coingeckoId: 'tether', decimals: 6 }, - '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.bob.USDT]: { coingeckoId: 'tether', decimals: 6 }, + [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, '0xac485391eb2d7d88253a7f1ef18c37f4242d1a24': { coingeckoId: 'lisk', decimals: 18 }, }, bob: { @@ -79,22 +79,22 @@ const fixBalancesTokens = { flow: { '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e': { coingeckoId: 'flow', decimals: 18 }, '0x1b97100ea1d7126c4d60027e231ea4cb25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, - '0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52': { coingeckoId: 'usd-coin', decimals: 6 }, + [ADDRESSES.milkomeda.BNB]: { coingeckoId: 'usd-coin', decimals: 6 }, }, core: { '0x782e2b85fda9a8224c17b191fc5de1e085a962b2': { coingeckoId: "wrapped-bitcoin-universal", decimals: 18 }, }, matchain: { [ADDRESSES.null]: { coingeckoId: 'binancecoin', decimals: 18 }, - '0x4200000000000000000000000000000000000006': { coingeckoId: 'binancecoin', decimals: 18 }, + [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'binancecoin', decimals: 18 }, }, rollux: { '0x570baA32dB74279a50491E88D712C957F4C9E409': { coingeckoId: 'uno-re', decimals: 18 }, - '0xaa1c53afd099e415208f47fcfa2c880f659e6904': { coingeckoId: 'weth', decimals: 18 }, - '0x2a4dc2e946b92ab4a1f7d62844eb237788f9056c': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, + [ADDRESSES.rollux.WETH]: { coingeckoId: 'weth', decimals: 18 }, + [ADDRESSES.rollux.WBTC]: { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, }, taiko: { - '0xd347949f8c85d9f3d6b06bfc4f8c2e07c161f064': { coingeckoId: "loopring", decimals: 18 }, + [ADDRESSES.taiko.LRC]: { coingeckoId: "loopring", decimals: 18 }, }, bitkub: { [ADDRESSES.bitkub.KKUB]: { coingeckoId: 'bitkub-coin', decimals: 18 }, @@ -112,8 +112,8 @@ const fixBalancesTokens = { wc: { '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1': { coingeckoId: 'usd-coin', decimals: 6 }, '0x2cFc85d8E48F8EAB294be644d9E25C3030863003': { coingeckoId: 'worldcoin-wld', decimals: 18 }, - '0x03C7054BCB39f7b2e5B2c7AcB37583e32D70Cfa3': { coingeckoId: 'bitcoin', decimals: 8 }, - '0x4200000000000000000000000000000000000006': { coingeckoId: 'weth', decimals: 18 } + [ADDRESSES.bob.WBTC]: { coingeckoId: 'bitcoin', decimals: 8 }, + [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'weth', decimals: 18 } }, apechain: { '0x48b62137EdfA95a428D35C09E44256a739F6B557': { coingeckoId: 'wrapped-apecoin', decimals: 18 }, @@ -121,7 +121,7 @@ const fixBalancesTokens = { '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, }, zircuit: { - '0x4200000000000000000000000000000000000006': { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, }, bsquared: { '0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3': { coingeckoId: 'lorenzo-stbtc', decimals: 18 } diff --git a/projects/infinite/index.js b/projects/infinite/index.js index d1428ff44b..5b7c53d3aa 100644 --- a/projects/infinite/index.js +++ b/projects/infinite/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const ITP_VAULT_ADDRRESS= '0x23371aEEaF8718955C93aEC726b3CAFC772B9E37' const ITP_ON_OPTIMISM = "0x0a7B751FcDBBAA8BB988B9217ad5Fb5cfe7bf7A0"; const VELO_PRICE_ORACLE = "0x395942C2049604a314d39F370Dfb8D87AAC89e16"; -const WETH_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000006"; +const WETH_TOKEN_ADDRESS = ADDRESSES.optimism.WETH_1; const VELO_TOKEN_ADDRESS = "0x3c8b650257cfb5f272f799f5e2b4e65093a11a05"; -const OP_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000042"; -const USDC_OP_TOKEN_ADDRESS = "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"; +const OP_TOKEN_ADDRESS = ADDRESSES.optimism.OP; +const USDC_OP_TOKEN_ADDRESS = ADDRESSES.optimism.USDC_CIRCLE; const ITP_STAKED_ABI = "function getVaultInfo() view returns (uint256, uint256, uint256, uint256, uint256, uint256[], uint256)"; const getStakedTVL = async (api) => { diff --git a/projects/liquidity-slicing/index.js b/projects/liquidity-slicing/index.js index e5ec5a0d6a..4737eeb067 100644 --- a/projects/liquidity-slicing/index.js +++ b/projects/liquidity-slicing/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ethers } = require('ethers'); const abi = { diff --git a/projects/lorenzo/index.js b/projects/lorenzo/index.js index fe745f0aa1..b8a69bd003 100644 --- a/projects/lorenzo/index.js +++ b/projects/lorenzo/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/sumTokens"); const LorenzoOwners = [ diff --git a/projects/microcreditproject/index.js b/projects/microcreditproject/index.js index 17f5e34e55..6399d79c0a 100644 --- a/projects/microcreditproject/index.js +++ b/projects/microcreditproject/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const TOKENS = [ - '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', - '0x0CE35b0D42608Ca54Eb7bcc8044f7087C18E7717', + ADDRESSES.functionx.WFX, + ADDRESSES.islm.USDC, ] const INVESTMENT_CONTRACT = '0x951d1571C75C519Cc3D09b6B71595C6aCe1c06dB' diff --git a/projects/navi/index.js b/projects/navi/index.js index d84d474699..28a92dffd4 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -6,7 +6,7 @@ const decimalShift = { [ADDRESSES.sui.USDT]: -3, // USDT [ADDRESSES.sui.WETH]: -1, // WETH ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, // AUSD - ['0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN']: -1, // WBTC + [ADDRESSES.sui.WBTC]: -1, // WBTC [ADDRESSES.sui.USDC_CIRCLE]: -3, // native USDC ['0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH']: -1, // native ETH ['0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY']: -3, // USDY diff --git a/projects/primex-finance/index.js b/projects/primex-finance/index.js index d8e2ae8568..2065b18db1 100644 --- a/projects/primex-finance/index.js +++ b/projects/primex-finance/index.js @@ -22,7 +22,7 @@ const config = { EPMX: "0xDc6D1bd104E1efa4A1bf0BBCf6E0BD093614E31A", OM: "0xc3ec80343d2bae2f8e680fdadde7c17e71e114ea", SAND: "0xbbba073c31bf03b8acf7c28ef0738decf3695683", - QUICK: "0xb5c064f955d8e7f38fe0460c556a72987494ee17", + QUICK: ADDRESSES.polygon.QUICK, UNI: "0xb33eaad8d922b1083446dc23f610c2567fb5180f", MANA: "0xa1c57f48f0deb89f569dfbe6e2b7f46d33606fd4", BAL: "0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3", @@ -34,9 +34,9 @@ const config = { SUSHI: "0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a", SOL: "0x7dff46370e9ea5f0bad3c4e29711ad50062ea7a4", PAXG: "0x553d3d295e0f695b9228246232edf400ed3560b5", - WSTETH: "0x03b54a6e9a984069379fae1a4fc4dbae93b3bccd", + WSTETH: ADDRESSES.polygon.WSTETH, LDO: "0xC3C7d422809852031b44ab29EEC9F1EfF2A58756", - FRAX: "0x45c32fa6df82ead1e2ef74d17b76547eddfaff89", + FRAX: ADDRESSES.polygon.FRAX, FXS: "0x1a3acf6d19267e2d3e7f898f42803e90c9219062" }, aaveTokens: { @@ -81,17 +81,17 @@ const config = { TIA: "0xD56734d7f9979dD94FAE3d67C7e928234e71cD4C", RPL: "0xB766039cc6DB368759C1E56B79AFfE831d0Cc507", AAVE: "0xba5DdD1f9d7F570dc94a51479a000E3BCE967196", - WSTETH: "0x5979D7b546E38E414F7E9822514be443A4800529", + WSTETH: ADDRESSES.arbitrum.WSTETH, RETH: "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8", WEETH: "0x35751007a407ca6feffe80b3cb397736d2cf4dbe", ETHFI: "0x7189fb5B6504bbfF6a852B13B7B82a3c118fDc27", - EZETH: "0x2416092f143378750bb29b79eD961ab195CcEea5", + EZETH: ADDRESSES.optimism.ezETH, RSETH: "0x4186bfc76e2e237523cbc30fd220fe055156b41f", - USDE: "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", + USDE: ADDRESSES.arbitrum.USDe, CBETH: "0x1debd73e752beaf79865fd6446b0c970eae7732f", USDY: "0x35e050d3C0eC2d29D269a8EcEa763a183bDF9A9D", TBTC: "0x6c84a8f1c29108f47a79964b5fe888d4f4d0de40", - FRAX: "0x17fc002b466eec40dae837fc4be5c67993ddbd6f", + FRAX: ADDRESSES.arbitrum.FRAX, FRXETH: "0x178412e79c25968a32e89b11f63b33f733770c2a", SFRXETH: "0x95ab45875cffdba1e5f451b950bc2e42c0053f39" }, @@ -129,27 +129,27 @@ const config = { EPMX: "0xA533f744B179F2431f5395978e391107DC76e103", POL: "0x455e53cbb86018ac2b8092fdcd39d8444affc3f6", PAXG: "0x45804880de22913dafe09f4980848ece6ecbaf78", - WSTETH: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", - RETH: "0xae78736cd615f374d3085123a210448e74fc6393", - SDAI: "0x83F20F44975D03b1b09e64809B757c47f942BEeA", + WSTETH: ADDRESSES.ethereum.WSTETH, + RETH: ADDRESSES.ethereum.RETH, + SDAI: ADDRESSES.ethereum.SDAI, WEETH: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", ETHFI: "0xfe0c30065b384f05761f15d0cc899d4f9f9cc0eb", - LDO: "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32", + LDO: ADDRESSES.ethereum.LIDO, EZETH: "0xbf5495efe5db9ce00f80364c8b423567e58d2110", RSETH: "0xa1290d69c65a6fe4df752f95823fae25cb99e5a7", RSWETH: "0xfae103dc9cf190ed75350761e95403b7b8afa6c0", - USDE: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3", - SUSDE: "0x9d39a5de30e57443bff2a8307a4256c8797a3497", + USDE: ADDRESSES.ethereum.USDe, + SUSDE: ADDRESSES.ethereum.sUSDe, PUFETH: "0xd9a442856c234a39a81a089c06451ebaa4306a72", - CDETH: "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + CDETH: ADDRESSES.ethereum.cbETH, USDP: "0x8e870d67f660d95d5be530380d0ec0bd388289e1", PYUSD: "0x6c3ea9036406852006290770bedfcaba0e23a0e8", ONDO: "0xfaba6f8e4a5e8ab82f62fe7c39859fa577269be3", - TBTC: "0x18084fba666a33d37592fa2633fd49a74dd93a88", - FRAX: "0x853d955acef822db058eb8505911ed77f175b99e", - FXS: "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", + TBTC: ADDRESSES.ethereum.tBTC, + FRAX: ADDRESSES.ethereum.FRAX, + FXS: ADDRESSES.ethereum.FXS, FRXETH: "0x5e8422345238f34275888049021821e8e08caa1f", - SFRXETH: "0xac3e018457b222d93114458476f3e3416abbe38f" + SFRXETH: ADDRESSES.ethereum.sfrxETH }, aaveTokens: { [ADDRESSES.ethereum.WETH]: "0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8", diff --git a/projects/radiant-v2/index.js b/projects/radiant-v2/index.js index 9dddd86c39..a02299a4b6 100644 --- a/projects/radiant-v2/index.js +++ b/projects/radiant-v2/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { sumTokensExport } = require("../helper/unwrapLPs"); const { aaveExports, methodology, } = require("../helper/aave"); @@ -41,12 +42,12 @@ const config = { '0x58b0BB56CFDfc5192989461dD43568bcfB2797Db', '0x6350e53461c7C95964D699cfa4e84cec993eebb1' ] , tokens: [ - '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', - '0x55d398326f99059fF775485246999027B3197955', - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', - '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.WBNB, '0xa2E3356610840701BDf5611a53974510Ae27E2e1' ]}, arbitrum: {aTokens: [ @@ -63,18 +64,18 @@ const config = { '0xd15a6568Dc891Fd04Aa2f64aF56C66C2bede59d6', '0x19f0bE6a603967c72bE32a30915a38d52cA31Ae2' ] , tokens: [ - '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', - '0x5979D7b546E38E414F7E9822514be443A4800529', - '0x912CE59144191C1204E64559FE8253a0e49E6548', - '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC, + ADDRESSES.optimism.DAI, + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.WSTETH, + ADDRESSES.arbitrum.ARB, + ADDRESSES.arbitrum.USDC_CIRCLE, '0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe', '0x47c031236e19d024b42f8AE6780E44A573170703', '0x70d95587d40A2caf56bd97485aB3Eec10Bee6336', - '0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34' + ADDRESSES.arbitrum.USDe ]}, } diff --git a/projects/root-finance/index.js b/projects/root-finance/index.js index 701d7b7b40..b731b4f68c 100644 --- a/projects/root-finance/index.js +++ b/projects/root-finance/index.js @@ -17,7 +17,7 @@ const pools = [ }, { pool: 'component_rdx1cr87dx5laxnffdkyv4fsrwms3m62vexgye9x9xpxyrv63gzpgwt97d', - resource: 'resource_rdx1th88qcj5syl9ghka2g9l7tw497vy5x6zaatyvgfkwcfe8n9jt2npww', + resource: ADDRESSES.radixdlt.WETH, }, { pool: 'component_rdx1czuk76y4vhgd44sxly0un2tqegws670dqp0usl2tlsgfkhmdl8dad3', diff --git a/projects/seer/index.js b/projects/seer/index.js index eef13ffa86..e5fc7b982c 100644 --- a/projects/seer/index.js +++ b/projects/seer/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const config = { 'ethereum': { marketFactory: ['0x1F728c2fD6a3008935c1446a965a313E657b7904'], marketView: '0xAb797C4C6022A401c31543E316D3cd04c67a87fC', - collateralToken: '0x83F20F44975D03b1b09e64809B757c47f942BEeA' + collateralToken: ADDRESSES.ethereum.SDAI }, 'xdai': { marketFactory: ['0x83183DA839Ce8228E31Ae41222EaD9EDBb5cDcf1'], marketView: '0x995dC9c89B6605a1E8cc028B37cb8e568e27626f', - collateralToken: '0xaf204776c7245bf4147c2612bf6e5972ee483701' + collateralToken: ADDRESSES.xdai.SDAI }, } @@ -84,7 +85,7 @@ function calculateTotalSupply(marketsData) { // Merge child market supplies into parent markets marketsData.forEach((market) => { - if (market.parentMarket !== '0x0000000000000000000000000000000000000000') { + if (market.parentMarket !== ADDRESSES.null) { const parentSupply = marketSupplies.get(market.parentMarket); const childSupply = marketSupplies.get(market.id); @@ -99,7 +100,7 @@ function calculateTotalSupply(marketsData) { // Calculate total supply of parent markets (parent markets are backed by sDAI) let totalSupply = 0; marketsData.forEach((market) => { - if (market.parentMarket === '0x0000000000000000000000000000000000000000') { + if (market.parentMarket === ADDRESSES.null) { const marketSupply = marketSupplies.get(market.id); if (marketSupply) { totalSupply += marketSupply.reduce((a, b) => a > b ? a : b, 0); diff --git a/projects/swell-earn-eth/index.js b/projects/swell-earn-eth/index.js index eb00e8e51d..873acfa41c 100644 --- a/projects/swell-earn-eth/index.js +++ b/projects/swell-earn-eth/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const earnETHVault = '0x9Ed15383940CC380fAEF0a75edacE507cC775f22'; @@ -5,8 +6,8 @@ const earnETHVault = '0x9Ed15383940CC380fAEF0a75edacE507cC775f22'; const tokens = [ '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0', // rswETH '0xf951E335afb289353dc249e82926178EaC7DEd78', // swETH - '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', // wstETH - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH + ADDRESSES.ethereum.WSTETH, // wstETH + ADDRESSES.ethereum.WETH, // WETH ] const tvl = async (api) => { diff --git a/projects/taidog/index.js b/projects/taidog/index.js index 8e56a5ad2d..b7a89476a5 100644 --- a/projects/taidog/index.js +++ b/projects/taidog/index.js @@ -7,7 +7,7 @@ const TAIDOG_STAKING_CONTRACT = "0x9b4484D5A2665930702d09f74086CAD86d96b25E"; const TAIDOG_WETH_LP = "0x28Be5f9caBd48B712a031a901590b71f5509526D"; const LP_STAKING_CONTRACT = "0xD664c3b22c60b4927ab1e0035b99F157bc2d8F1B"; -const TAIKO_TOKEN = "0xA9d23408b9bA935c230493c40C73824Df71A0975"; +const TAIKO_TOKEN = ADDRESSES.taiko.TAIKO; const TAIKO_STAKING_CONTRACT = "0x89a95021E45AcAB4B89eb20C18691E3E0D1d2170"; async function poolsTvl(api) { diff --git a/projects/taikodrips/index.js b/projects/taikodrips/index.js index 31d1ce46e1..6a13030c3b 100644 --- a/projects/taikodrips/index.js +++ b/projects/taikodrips/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking") -const TaikoToken = "0xA9d23408b9bA935c230493c40C73824Df71A0975" +const TaikoToken = ADDRESSES.taiko.TAIKO const FarmingContract = '0xf90209C44dBf5Fa3d40ac85a008206b5A8c24899' module.exports = { diff --git a/projects/trado/index.js b/projects/trado/index.js index 5923a87d7f..ddc132d3f8 100644 --- a/projects/trado/index.js +++ b/projects/trado/index.js @@ -1,7 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); // perp -const USDCe = '0x7f27352D5F83Db87a5A3E00f4B07Cc2138D8ee52' +const USDCe = ADDRESSES.milkomeda.BNB const USDX = '0xAeBE92ebc1a67F810Cb35fdcdA6398f6136DCD50' module.exports = { diff --git a/projects/tron-btc/index.js b/projects/tron-btc/index.js index e253ef5202..b12cff7560 100644 --- a/projects/tron-btc/index.js +++ b/projects/tron-btc/index.js @@ -27,7 +27,7 @@ module.exports = { merlin: { tvl: sumTokensExport({ owners: ["0x06fe862f2eefe9a5e9a2cf9799941706665e833a"], - tokens: ["0xb880fd278198bd590252621d4cd071b1842e9bcd", "0x93919784c523f39cacaa98ee0a9d96c3f32b593e"] // M-BTC AND UNIBTC + tokens: [ADDRESSES.merlin.WBTC_1, "0x93919784c523f39cacaa98ee0a9d96c3f32b593e"] // M-BTC AND UNIBTC }), }, zklink: { @@ -69,7 +69,7 @@ module.exports = { bsc: { tvl: sumTokensExport({ owners: ["0x533806b821ec94091228d7d34e697b93bb79f8f6"], - tokens: ["0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", ] // BTCB + tokens: [ADDRESSES.bsc.BTCB, ] // BTCB }), }, }; \ No newline at end of file diff --git a/projects/unore/index.js b/projects/unore/index.js index c3ab008095..2e173218aa 100644 --- a/projects/unore/index.js +++ b/projects/unore/index.js @@ -33,7 +33,7 @@ const config = { rollux: { uToken: uno_rollux, // UNO Rollux token for staking only tokensAndOwners: [ - ['0x4200000000000000000000000000000000000006', '0x7393310FdC8ed40B35D2afD79848BC7166Ae0474'], // Plutus + [ADDRESSES.optimism.WETH_1, '0x7393310FdC8ed40B35D2afD79848BC7166Ae0474'], // Plutus ], pools: [ '0x8685C2b4D2024805a1FF6831Bc4cc8569457811D', // Athena diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js index 978856c9a1..e5d4f0f52c 100644 --- a/projects/velvet-capital-v3/index.js +++ b/projects/velvet-capital-v3/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') async function tvl(api) { @@ -9,10 +10,10 @@ async function tvl(api) { const blacklistsByChain = { base: [ - "0x55d398326f99059ff775485246999027b3197955" + ADDRESSES.bsc.USDT ], bsc: [ - "0x4200000000000000000000000000000000000006" + ADDRESSES.optimism.WETH_1 ] } diff --git a/projects/yel/index.js b/projects/yel/index.js index e1b1a5a911..0087bc801a 100644 --- a/projects/yel/index.js +++ b/projects/yel/index.js @@ -26,8 +26,8 @@ const config = { ], tokensAndOwners: [ // Token Potion(lToken) slToken - ['0x4300000000000000000000000000000000000004', '0x795a85CD543D0E2d29F7e11e33a20a38A4b5121e', '0x7D8490333315EaAa5e93F3C6983d1e8128D7f50f' ], - ['0xb1a5700fa2358173fe465e6ea4ff52e36e88e2ad', '0x07BF0Bc908Ef4badF8ec0fB1f77A8dBFe33c33c0', '0x73681f24a4a099E71e0Ddd084f2310bA1E0b3a36' ], + [ADDRESSES.blast.WETH, '0x795a85CD543D0E2d29F7e11e33a20a38A4b5121e', '0x7D8490333315EaAa5e93F3C6983d1e8128D7f50f' ], + [ADDRESSES.blast.BLAST, '0x07BF0Bc908Ef4badF8ec0fB1f77A8dBFe33c33c0', '0x73681f24a4a099E71e0Ddd084f2310bA1E0b3a36' ], ], }, base: { @@ -37,8 +37,8 @@ const config = { ], tokensAndOwners: [ // Token Potion(lToken) slToken - ['0x4200000000000000000000000000000000000006', '0x0540f15374eCF13aAB3c0a76b643333CE0D00579', '0x0E7De1d6A1aA4178CBfce3dE4EAaD0427034f924'], - ['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', '0xE7349C94BDE0D13599Ed496342857bb231FeF02B', '0xabb4D7866e1059bD21581FC5FC6D49388D30a323'], + [ADDRESSES.optimism.WETH_1, '0x0540f15374eCF13aAB3c0a76b643333CE0D00579', '0x0E7De1d6A1aA4178CBfce3dE4EAaD0427034f924'], + [ADDRESSES.base.USDC, '0xE7349C94BDE0D13599Ed496342857bb231FeF02B', '0xabb4D7866e1059bD21581FC5FC6D49388D30a323'], ['0x1509706a6c66CA549ff0cB464de88231DDBe213B', '0x8a27CE3A836C8A9D962D86C099f229f3baF3EB4a', '0xFfeC8bAAa8cf32Bc7F85ea6a7C44Ad541309FD1F'] ], } diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index 8cd2852393..7aa750582c 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -34,18 +34,18 @@ const TOKEN_CONTRACTS_ETHEREUM = [ ]; const TOKEN_CONTRACTS_ZIRCUIT = [ - '0x4200000000000000000000000000000000000006', // wETH + ADDRESSES.optimism.WETH_1, // wETH '0x91a0F6EBdCa0B4945FbF63ED4a95189d2b57163D', // mETH '0xD8b29106d4ceBad087C30B10c0E41BAa3A9ea703', // rswETH '0x850CDF416668210ED0c36bfFF5d21921C7adA3b8', // swETH '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC '0x9cb41CD74D01ae4b4f640EC40f7A60cA1bCF83E7', // pzETH - '0x80137510979822322193FC997d400D5A6C747bf7', // STONE - '0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34', // USDe + ADDRESSES.scroll.STONE, // STONE + ADDRESSES.arbitrum.USDe, // USDe '0xF97c7A9bECe498FD6e31e344643589aACC96206A', // LsETH '0x4186BFC76E2E237523CBC30FD220FE055156b41F', // rsETH '0xf0e673Bc224A8Ca3ff67a61605814666b1234833', // wstETH - '0x2416092f143378750bb29b79eD961ab195CcEea5', // ezETH + ADDRESSES.optimism.ezETH, // ezETH '0x3535DF6e1d776631D0cBA53FE9efD34bCbDcEeD4', // weETH '0x4b03831043082E3e5191218ad5331E99AaaC4A81', // weETHs '0x5661cE45EE081CbE1f81BF23E46f4E01E11795D4' // FBTC From 8ffa74db8bbb16a4202d8f125a2c719fafad2f92 Mon Sep 17 00:00:00 2001 From: fico23 Date: Thu, 31 Oct 2024 06:56:39 +0100 Subject: [PATCH 0877/1768] AERA Finance - add gearbox, arrakis and llamapay integrations (#12116) --- projects/aera/index.js | 227 ++++++++++++++++++++++++++++------------- 1 file changed, 157 insertions(+), 70 deletions(-) diff --git a/projects/aera/index.js b/projects/aera/index.js index 68c73fe61f..4e6dadc4f7 100644 --- a/projects/aera/index.js +++ b/projects/aera/index.js @@ -4,6 +4,9 @@ const { getLogs } = require('../helper/cache/getLogs') const COMPOUND_ORACLE_NAME = 'CompoundV3PositionOracle' const AAVE_ORACLE_NAME = 'AaveV3PositionOracle' +const LLAMAPAY_ROUTER_ORACLE_NAME = 'LlamaPayRouterOracle' +const GEARBOX_TOKEN_PREFIX = 'Farming of' +const ARRAKIS_TOKEN_PREFIX = 'Arrakis Vault V2' const config = { polygon: { @@ -16,6 +19,7 @@ const config = { } ], cometReward: '0x45939657d1CA34A8FA39A924B71D28Fe8431e581', + arrakisHelper: '0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6', vaultFactories: [ { address: "0xfa6295a04f99815e8fa65240ed2cf9ad383c50ba", @@ -49,6 +53,7 @@ const config = { } ], cometReward: '0x1B0e765F6224C21223AeA2af16c1C46E38885a40', + arrakisHelper: '0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6', vaultFactories: [ { address: "0x8a7c03e9f037ba096f1fa8b48bfd65c7578327c9", @@ -86,6 +91,7 @@ const config = { }, ], cometReward: '0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae', + arrakisHelper: '0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6', vaultFactories: [ { address: "0xaF2762E1F75DeCdb8d240576e7A2CEc1A365cD46", @@ -111,6 +117,7 @@ const config = { }, ], cometReward: '0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1', + arrakisHelper: '0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6', vaultFactories: [ { address: "0x5CD0Cb0DcDEF98a8d07a8D44054a13F2c35C53E1", @@ -130,6 +137,7 @@ Object.keys(config).forEach(chain => { const AAVE_POOL_DATA_PROVIDER = config[chain].aavePoolDataProvider const COMETS = config[chain].comets const COMET_REWARD = config[chain].cometReward + const ARRAKIS_HELPER = config[chain].arrakisHelper const vaultFactories = config[chain].vaultFactories const vaultCreateds = [] @@ -153,24 +161,44 @@ Object.keys(config).forEach(chain => { }) const assets = await api.multiCall({ abi: abi.assets, calls: assetRegistries }) + const uniqueAssets = [...new Set(assets.flatMap(x => x.map(y => y.asset)))] + const assetNames = await api.multiCall({ abi: 'string:name', calls: uniqueAssets, permitFailure: true }) const erc4626sAndOwners = [] const tokensAndOwners = [] const erc4626UnderylingMap = {} - const positions = [] + const aaveVaults = [] + const compoundVaults = [] + const llamapayRouters = [] + const gearboxFarmingPools = [] + const arrakisVaults = [] for (let i = 0; i < vaults.length; ++i) { const vault = vaults[i] for (let j = 0; j < assets[i].length; ++j) { const assetInfo = assets[i][j] - // position assets - if (assetInfo.asset === assetInfo.oracle) { - positions.push([assetInfo.asset, vault]) - continue + const assetName = assetNames[uniqueAssets.findIndex(x => x === assetInfo.asset)] + if (assetName) { + if (assetName === COMPOUND_ORACLE_NAME) { + compoundVaults.push(vault) + } + if (assetName === AAVE_ORACLE_NAME) { + aaveVaults.push(vault) + } + if (assetName === LLAMAPAY_ROUTER_ORACLE_NAME) { + llamapayRouters.push(assetInfo.asset) + } + if (assetName.startsWith(GEARBOX_TOKEN_PREFIX)) { + gearboxFarmingPools.push([vault, assetInfo.asset]) + } + if (assetName.startsWith(ARRAKIS_TOKEN_PREFIX)) { + arrakisVaults.push(assetInfo.asset) + } } + if (assetInfo.isERC4626) { if (!erc4626UnderylingMap[assetInfo.asset]) erc4626UnderylingMap[assetInfo.asset] = null erc4626sAndOwners.push([assetInfo.asset, vault]) @@ -180,12 +208,17 @@ Object.keys(config).forEach(chain => { } } - const [underlyingTokens, vaultErc4626Balances, tokenNames,] = await Promise.all([ + const [underlyingTokens, vaultErc4626Balances] = await Promise.all([ api.multiCall({ abi: 'address:asset', calls: Object.keys(erc4626UnderylingMap) }), api.multiCall({ abi: 'erc20:balanceOf', calls: erc4626sAndOwners.map(x => ({ target: x[0], params: x[1] })) }), - api.multiCall({ abi: 'string:name', calls: positions.map(x => x[0]), permitFailure: true }), ]) - await processLendingTvls(positions, tokenNames, api, AAVE_POOL, AAVE_POOL_DATA_PROVIDER, COMETS, vaults, COMET_REWARD) + await Promise.all([ + processAaveTvl(aaveVaults, api, AAVE_POOL, AAVE_POOL_DATA_PROVIDER), + processCompoundTvl(compoundVaults, api, COMETS, vaults, COMET_REWARD), + processLlamaPayTvl(llamapayRouters, api), + processGearboxTvl(gearboxFarmingPools, api), + processArrakisTvl(arrakisVaults, api, ARRAKIS_HELPER) + ]) Object.keys(erc4626UnderylingMap).forEach((erc4626Asset, i) => erc4626UnderylingMap[erc4626Asset] = underlyingTokens[i]) @@ -201,80 +234,118 @@ Object.keys(config).forEach(chain => { } }) -async function processLendingTvls(positions, tokenNames, api, AAVE_POOL, AAVE_POOL_DATA_PROVIDER, COMETS, vaults, COMET_REWARD) { - const compoundVaults = []; - const aaveVaults = []; - for (let i = 0; i < positions.length; ++i) { - if (tokenNames[i] === COMPOUND_ORACLE_NAME) { - compoundVaults.push(positions[i][1]); - } else if (tokenNames[i] === AAVE_ORACLE_NAME) { - aaveVaults.push(positions[i][1]); - } - } +async function processArrakisTvl(arrakisVaults, api, arrakisHelper) { + if (arrakisVaults.length === 0) return + + const [tokens0, tokens1, totalUnderlyings] = await Promise.all([ + api.multiCall({ abi: abi.token0, calls: arrakisVaults}), + api.multiCall({ abi: abi.token1, calls: arrakisVaults}), + api.multiCall({ abi: abi.totalUnderlying, calls: arrakisVaults.map(x => ({target: arrakisHelper, params: [x]}))}) + ]) + + totalUnderlyings.forEach((v, i) => { + api.addToken(tokens0[i], v.totalAmount0) + api.addToken(tokens1[i], v.totalAmount1) + }) +} + +async function processGearboxTvl(farmingPools, api) { + if (farmingPools.length === 0) return + + const [stakingTokens, stakingTokenBalances, rewardTokens, farmed] = await Promise.all([ + api.multiCall({ abi: abi.stakingToken, calls: farmingPools.map(x => x[1])}), + api.multiCall({ abi: 'erc20:balanceOf', calls: farmingPools.map(x => ({target: x[1], params:[x[0]]}))}), + api.multiCall({ abi: abi.rewardsToken, calls: farmingPools.map(x => x[1])}), + api.multiCall({ abi: abi.farmed, calls: farmingPools.map(x => ({target: x[1], params: [x[0]]}))}) + ]) + + const [underlyingTokens, underlyingBalances] = await Promise.all([ + api.multiCall({ abi: 'address:asset', calls: stakingTokens}), + api.multiCall({ abi: abi.convertToAssets, calls: stakingTokens.map((x, i) => ({target: x, params: [stakingTokenBalances[i]]}))}) + ]) + + rewardTokens.forEach((rewardToken, i) => { + api.addToken(rewardToken, farmed[i]) + }) + underlyingTokens.forEach((underlyingToken, i) => { + api.addToken(underlyingToken, underlyingBalances[i]) + }) +} - await Promise.all([ - processAaveTvl(aaveVaults, api, AAVE_POOL, AAVE_POOL_DATA_PROVIDER), - processCompoundTvl(compoundVaults, api, COMETS, vaults, COMET_REWARD) +async function processLlamaPayTvl(llamaPayRouters, api) { + if (llamaPayRouters.length === 0) return + + const llamaPayInfos = await api.multiCall({ abi: abi.llamaPayInfoList, calls: llamaPayRouters.map(x => ({target: x})) }) + + const [llamaPayTokens, decimalDivisors, llamaPayBalances] = await Promise.all([ + api.multiCall({abi: abi.token, calls: llamaPayInfos.flatMap(x => x.map(y => y[0]))}), + api.multiCall({abi: abi.DECIMALS_DIVISOR, calls: llamaPayInfos.flatMap(x => x.map(y => y[0]))}), + api.multiCall({abi: abi.balances, calls: llamaPayInfos.flatMap((v, i) => v.map(y => ({target: y[0], params:[llamaPayRouters[i]]})))}) ]) + + llamaPayTokens.forEach((token, i) => { + api.addToken(token, BigInt(llamaPayBalances[i]) / BigInt(decimalDivisors[i])) + }) } async function processCompoundTvl(compoundVaults, api, COMETS, vaults, COMET_REWARD) { - if (compoundVaults.length) { - const numAssets = await api.multiCall({ abi: 'uint8:numAssets', calls: COMETS.map(x => x.address) }); - - - const collateralCalls = []; - COMETS.forEach((comet, i) => [...Array(parseInt(numAssets[i])).keys()].forEach(assetIndex => collateralCalls.push({ target: comet.address, params: assetIndex }))); - const balanceOfCalls = []; - vaults.forEach(vault => COMETS.forEach(comet => balanceOfCalls.push({ target: comet.address, params: vault, baseToken: comet.baseToken }))); - const rewardOwedCalls = []; - vaults.forEach(vault => COMETS.forEach(comet => rewardOwedCalls.push({ target: COMET_REWARD, params: [comet.address, vault] }))); - - const [collateralInfos, balanceOfs, borrowBalanceOfs, rewardOwed] = await Promise.all([ - api.multiCall({ abi: abi.getAssetInfo, calls: collateralCalls }), - api.multiCall({ abi: 'erc20:balanceOf', calls: balanceOfCalls }), - api.multiCall({ abi: abi.borrowBalanceOf, calls: balanceOfCalls }), - api.multiCall({ abi: abi.getRewardOwed, calls: rewardOwedCalls }) - ]); - - balanceOfs.forEach((balance, i) => { - const sum = (BigInt(balance) - BigInt(borrowBalanceOfs[i])).toString(); - api.addToken(balanceOfCalls[i].baseToken, sum); - }); - - rewardOwed.forEach(reward => { - api.addToken(reward.token, reward.owed); - }); - - const collateralBalanceOfCalls = []; - vaults.forEach(vault => collateralInfos.forEach((collateral, i) => collateralBalanceOfCalls.push({ target: collateralCalls[i].target, params: [vault, collateral.asset] }))); - const collateralBalanceOfs = await api.multiCall({ abi: abi.collateralBalanceOf, calls: collateralBalanceOfCalls }); - - collateralBalanceOfs.forEach((balance, i) => { - api.addToken(collateralBalanceOfCalls[i].params[1], balance); - }); - } + if (compoundVaults.length === 0 || !COMETS || !COMET_REWARD) return + + const numAssets = await api.multiCall({ abi: 'uint8:numAssets', calls: COMETS.map(x => x.address) }); + + + const collateralCalls = []; + COMETS.forEach((comet, i) => [...Array(parseInt(numAssets[i])).keys()].forEach(assetIndex => collateralCalls.push({ target: comet.address, params: assetIndex }))); + const balanceOfCalls = []; + vaults.forEach(vault => COMETS.forEach(comet => balanceOfCalls.push({ target: comet.address, params: vault, baseToken: comet.baseToken }))); + const rewardOwedCalls = []; + vaults.forEach(vault => COMETS.forEach(comet => rewardOwedCalls.push({ target: COMET_REWARD, params: [comet.address, vault] }))); + + const [collateralInfos, balanceOfs, borrowBalanceOfs, rewardOwed] = await Promise.all([ + api.multiCall({ abi: abi.getAssetInfo, calls: collateralCalls }), + api.multiCall({ abi: 'erc20:balanceOf', calls: balanceOfCalls }), + api.multiCall({ abi: abi.borrowBalanceOf, calls: balanceOfCalls }), + api.multiCall({ abi: abi.getRewardOwed, calls: rewardOwedCalls }) + ]); + + balanceOfs.forEach((balance, i) => { + const sum = (BigInt(balance) - BigInt(borrowBalanceOfs[i])).toString(); + api.addToken(balanceOfCalls[i].baseToken, sum); + }); + + rewardOwed.forEach(reward => { + api.addToken(reward.token, reward.owed); + }); + + const collateralBalanceOfCalls = []; + vaults.forEach(vault => collateralInfos.forEach((collateral, i) => collateralBalanceOfCalls.push({ target: collateralCalls[i].target, params: [vault, collateral.asset] }))); + const collateralBalanceOfs = await api.multiCall({ abi: abi.collateralBalanceOf, calls: collateralBalanceOfCalls }); + + collateralBalanceOfs.forEach((balance, i) => { + api.addToken(collateralBalanceOfCalls[i].params[1], balance); + }); } async function processAaveTvl(aaveVaults, api, AAVE_POOL, AAVE_POOL_DATA_PROVIDER) { - if (aaveVaults.length) { - const aaveReservesList = await api.call({ abi: abi.getReservesList, target: AAVE_POOL }); + if (aaveVaults.length === 0 || !AAVE_POOL || !AAVE_POOL_DATA_PROVIDER) return - const aaveReserveDetails = await api.multiCall({ abi: abi.getReserveData, target: AAVE_POOL, calls: aaveReservesList }); + const aaveReservesList = await api.call({ abi: abi.getReservesList, target: AAVE_POOL }); - const aaveQueryParams = []; - aaveReservesList.forEach(asset => aaveVaults.forEach(vault => aaveQueryParams.push({ params: [asset, vault], }))); - const aavePositions = await api.multiCall({ abi: abi.getUserReserveData, target: AAVE_POOL_DATA_PROVIDER, calls: aaveQueryParams }); + const aaveReserveDetails = await api.multiCall({ abi: abi.getReserveData, target: AAVE_POOL, calls: aaveReservesList }); - for (const i in aavePositions) { - const aavePosition = aavePositions[i]; - const reserveIdx = aaveReservesList.findIndex(x => x === aaveQueryParams[i].params[0]); + const aaveQueryParams = []; + aaveReservesList.forEach(asset => aaveVaults.forEach(vault => aaveQueryParams.push({ params: [asset, vault], }))); + const aavePositions = await api.multiCall({ abi: abi.getUserReserveData, target: AAVE_POOL_DATA_PROVIDER, calls: aaveQueryParams }); - api.addToken(aaveReserveDetails[reserveIdx].aTokenAddress, aavePosition.currentATokenBalance); - api.addToken(aaveReserveDetails[reserveIdx].stableDebtTokenAddress, aavePosition.currentStableDebt); - api.addToken(aaveReserveDetails[reserveIdx].variableDebtTokenAddress, aavePosition.currentVariableDebt); - } + for (const i in aavePositions) { + const aavePosition = aavePositions[i]; + const reserveIdx = aaveReservesList.findIndex(x => x === aaveQueryParams[i].params[0]); + + api.addToken(aaveReserveDetails[reserveIdx].aTokenAddress, aavePosition.currentATokenBalance); + api.addToken(aaveReserveDetails[reserveIdx].stableDebtTokenAddress, aavePosition.currentStableDebt); + api.addToken(aaveReserveDetails[reserveIdx].variableDebtTokenAddress, aavePosition.currentVariableDebt); } + } const abi = { @@ -286,5 +357,21 @@ const abi = { "getReservesList": "address[]:getReservesList", "getAssetInfo": "function getAssetInfo(uint8 i) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))", "borrowBalanceOf": "function borrowBalanceOf(address account) view returns (uint256)", - "getRewardOwed": "function getRewardOwed(address comet, address account) returns ((address token, uint256 owed))" + "getRewardOwed": "function getRewardOwed(address comet, address account) returns ((address token, uint256 owed))", + "llamaPayCount": "function llamaPayCount() returns (uint256 count)", + "llamaPayInfoList": "function llamaPayInfoList() returns ((address llamapay, address priceFeed, bool invertPrice)[])", + "token": "function token() returns (address token)", + "balances": "function balances(address) returns (uint256)", + "DECIMALS_DIVISOR": "function DECIMALS_DIVISOR() returns (uint256)", + "stakingToken": "function stakingToken() returns (address)", + "rewardsToken": "function rewardsToken() returns (address)", + "farmed": "function farmed(address) returns (uint256)", + "totalUnderlying": "function totalUnderlying(address) returns (uint256 totalAmount0, uint256 totalAmount1)", + "token0": "function token0() returns (address)", + "token1": "function token1() returns (address)", + "stakerStrategyShares": "function stakerStrategyShares(address,address) returns (uint256)", + "strategy": "function stakerStrategyShares() returns (address)", + "underlyingToken": "function underlyingToken() returns (address)", + "sharesToUnderlyingView": "function sharesToUnderlyingView(uint256) returns (uint256)", + "queuedWithdrawals": "function queuedWithdrawals(uint256) returns (bytes32 root, uint256 shares)" } \ No newline at end of file From 113d8a16d3c757df298327b88a326e7dbce60ec2 Mon Sep 17 00:00:00 2001 From: Lawson Graham <45542987+LawsonGraham@users.noreply.github.com> Date: Wed, 30 Oct 2024 22:58:36 -0700 Subject: [PATCH 0878/1768] fix vethl tvl api endpoint (#12114) --- projects/thala-vethl/index.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/projects/thala-vethl/index.js b/projects/thala-vethl/index.js index d00714ddb5..8c9c0fa077 100644 --- a/projects/thala-vethl/index.js +++ b/projects/thala-vethl/index.js @@ -2,19 +2,19 @@ const utils = require("../helper/utils"); const sdk = require("@defillama/sdk"); const { transformBalances } = require("../helper/portedTokens"); -const THALA_API = "https://app.thala.fi/api"; +const THALA_API_VETHL = "https://app.thala.fi/api/vethl-tvl"; const thlAddress = "0x7fd500c11216f0fe3095d0c4b8aa4d64a4e2e04f83758462f2b127255643615::thl_coin::THL"; const thlDecimals = 8; module.exports = { - timetravel: true, + timetravel: false, start: 1692598825, methodology: `TVL data is pulled from the Thala's API "https://app.thala.fi/api/vethl-tvl".`, aptos: { tvl: () => ({}), - staking: async ({ timestamp }) => { - const response = await utils.fetchURL(`${THALA_API}/vethl-tvl?timestamp=${ timestamp }`); + staking: async () => { + const response = await utils.fetchURL(THALA_API_VETHL); const thlAmount = response.data.data * 10**thlDecimals; const balances = {}; @@ -24,4 +24,3 @@ module.exports = { }, }, }; - From 642cef540f340e4d196ff7cd62a3f22426b0158b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 08:08:05 +0100 Subject: [PATCH 0879/1768] track synatra #12112 --- projects/helper/solana.js | 3 ++- projects/synatra/index.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 projects/synatra/index.js diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 1566b784c7..58a3d11e24 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -51,7 +51,7 @@ function getProvider(chain = 'solana') { return provider[chain] } -async function getTokenSupplies(tokens) { +async function getTokenSupplies(tokens, { api } = {}) { const sleepTime = tokens.length > 2000 ? 2000 : 200 const connection = getConnection() tokens = tokens.map(i => typeof i === 'string' ? new PublicKey(i) : i) @@ -65,6 +65,7 @@ async function getTokenSupplies(tokens) { try { data = decodeAccount('mint', data) response[tokens[idx].toString()] = data.supply.toString() + if (api) api.add(tokens[idx].toString(), data.supply.toString()) } catch (e) { sdk.log(`Error decoding account: ${tokens[idx]}`) } diff --git a/projects/synatra/index.js b/projects/synatra/index.js new file mode 100644 index 0000000000..8acc14204a --- /dev/null +++ b/projects/synatra/index.js @@ -0,0 +1,15 @@ +const { getTokenSupplies,} = require("../helper/solana"); + +const ySOL_MINT = 'yso11zxLbHA3wBJ9HAtVu6wnesqz9A2qxnhxanasZ4N'; +const yUSD_MINT = 'yUSDX7W89jXWn4zzDPLnhykDymSjQSmpaJ8e4fjC1fg'; +const TOKEN_MINTS = [ySOL_MINT, yUSD_MINT] + +async function tvl(api) { + await getTokenSupplies(TOKEN_MINTS, {api }) +} + +module.exports = { + doublecounted: true, + methodology: 'Tracks tvl via number of tokens currently minted for each pool.', + solana: { tvl, }, +} From 22cb3e60c6f7aa70c2a006d0a0f50b4904f8b4d5 Mon Sep 17 00:00:00 2001 From: xwaynec Date: Thu, 31 Oct 2024 15:27:00 +0800 Subject: [PATCH 0880/1768] add aave aArbGHO for zomma arbitrum tvl (#12122) --- projects/zomma/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/zomma/index.js b/projects/zomma/index.js index 506c406cb1..949b4741d2 100644 --- a/projects/zomma/index.js +++ b/projects/zomma/index.js @@ -13,6 +13,7 @@ const ZOMMA_ARB_CONTRACT_ETH = "0xa9DEb981b735EC0525c8D4C959267429FdD82347"; const ZOMMA_ARB_CONTRACT_BTC = "0x275376e25e068c894d0df5cc9a3d1893d94e9f4a"; const ARB_USDC_CONTRACT = ADDRESSES.arbitrum.USDC_CIRCLE; const ARB_AAVE_USDC_CONTRACT = "0x724dc807b04555b71ed48a6896b6F41593b8C637"; +const ARB_AAVE_GHO_CONTRACT = "0xeBe517846d0F36eCEd99C735cbF6131e1fEB775D"; module.exports = { methodology: @@ -20,7 +21,7 @@ module.exports = { arbitrum: { tvl: sumTokensExport({ owners: [ZOMMA_ARB_VAULT, ZOMMA_ARB_VAULT2, ZOMMA_ARB_CONTRACT_ETH, ZOMMA_ARB_CONTRACT_BTC], - tokens: [ARB_USDC_CONTRACT, ARB_AAVE_USDC_CONTRACT], + tokens: [ARB_USDC_CONTRACT, ARB_AAVE_USDC_CONTRACT, ARB_AAVE_GHO_CONTRACT], }), }, era: { From c58355caf2ea1c3c383d59d7e22ff7b4ed744d80 Mon Sep 17 00:00:00 2001 From: maybeyonas Date: Thu, 31 Oct 2024 12:59:06 +0530 Subject: [PATCH 0881/1768] adding pendle pools and vault to earnETH (#12115) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/unwrapLPs.js | 4 +--- projects/swell-earn-eth/index.js | 40 +++++++++++++++++++++++++------- test.js | 16 +++++-------- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index 6995cc4cab..18edbcb2e1 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -4,7 +4,6 @@ const BigNumber = require("bignumber.js"); const token0 = 'address:token0' const symbol = 'string:symbol' const { getPoolTokens, getPoolId, bPool, getCurrentTokens, } = require('./abis/balancer.json') -const { requery } = require('./requery') const { getChainTransform, getFixBalances } = require('./portedTokens') const { getUniqueAddresses, normalizeAddress } = require('./tokenMapping') const creamAbi = require('./abis/cream.json') @@ -192,7 +191,7 @@ async function unwrapUniswapV3NFT({ balances, owner, owners, nftAddress, block, let positionIds = uniV3ExtraConfig.positionIds if (!positionIds) { - if (!owners && owner) owners = [owner] + if (!owners?.length && owner) owners = [owner] owners = getUniqueAddresses(owners, chain) const { output: lengths } = await sdk.api.abi.multiCall({ block, chain, abi: wildCreditABI.balanceOf, @@ -214,7 +213,6 @@ async function unwrapUniswapV3NFT({ balances, owner, owners, nftAddress, block, block, chain, abi: wildCreditABI.positions, target: nftAddress, calls: positionIds.map((position) => ({ params: [position] })), })).output.map(positionsCall => positionsCall.output) - const lpInfo = {} positions.forEach(position => lpInfo[getKey(position)] = position) const lpInfoArray = Object.values(lpInfo) diff --git a/projects/swell-earn-eth/index.js b/projects/swell-earn-eth/index.js index 873acfa41c..6eb2e6e268 100644 --- a/projects/swell-earn-eth/index.js +++ b/projects/swell-earn-eth/index.js @@ -1,21 +1,43 @@ +const { sumTokens2, PANCAKE_NFT_ADDRESS } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens2 } = require('../helper/unwrapLPs') const earnETHVault = '0x9Ed15383940CC380fAEF0a75edacE507cC775f22'; +const pancakeswapMasterChef = '0x556B9306565093C855AEA9AE92A594704c2Cd59e' + +const ethTokens = [ + '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0', // rswETH + '0xf951E335afb289353dc249e82926178EaC7DEd78', // swETH + ADDRESSES.ethereum.WSTETH, // wstETH + ADDRESSES.ethereum.WETH, // WETH +] + +const pendleLPTokens = [ + "0x7C7FbB2d11803C35Aa3e283985237aD27f64406B", //rswETH 26Dec2024 + "0x0e1C5509B503358eA1Dac119C1D413e28Cc4b303", //swETH 26December2024 +] + +const vaultTokens = [ + "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0", // Re7 WETH +] const tokens = [ - '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0', // rswETH - '0xf951E335afb289353dc249e82926178EaC7DEd78', // swETH - ADDRESSES.ethereum.WSTETH, // wstETH - ADDRESSES.ethereum.WETH, // WETH + ...ethTokens, + ...pendleLPTokens, + ...vaultTokens, ] + const tvl = async (api) => { - return sumTokens2({ api, tokens, owner: earnETHVault }) + return sumTokens2({ + api, + owner: earnETHVault, tokens, + uniV3nftsAndOwners: [[PANCAKE_NFT_ADDRESS, earnETHVault]], + uniV3ExtraConfig: { nftIdFetcher: pancakeswapMasterChef } + }) } module.exports = { - methodology: 'TVL represents the sum of tokens deposited in the vault', - doublecounted: true, - ethereum : { tvl } + methodology: 'TVL represents the sum of tokens deposited in the vault + LP positions', + doublecounted: true, + ethereum: { tvl } } \ No newline at end of file diff --git a/test.js b/test.js index 790967699c..686d68c1fd 100644 --- a/test.js +++ b/test.js @@ -114,7 +114,7 @@ function validateHallmarks(hallmark) { const year = new Date(timestamp * 1000).getFullYear() const currentYear = new Date().getFullYear() if (year < 2010 || year > currentYear) { - throw new Error("Hallmark timestamp should be between 2010 and "+ currentYear + " but got " + year) + throw new Error("Hallmark timestamp should be between 2010 and " + currentYear + " but got " + year) } if (typeof text !== 'string') { @@ -124,16 +124,12 @@ function validateHallmarks(hallmark) { (async () => { let module = {}; - try { - module = require(passedFile) - } catch (e) { - console.log(e) - } + module = require(passedFile) if (module.hallmarks) { if (!Array.isArray(module.hallmarks)) { throw new Error("Hallmarks should be an array of arrays") } - if(module.hallmarks.length > 6){ + if (module.hallmarks.length > 6) { console.error("WARNING: Hallmarks should only be set for events that led to a big change in TVL, please reduce hallmarks to only those that meet this condition") } @@ -146,7 +142,7 @@ function validateHallmarks(hallmark) { let unixTimestamp = Math.round(Date.now() / 1000) - 60; let chainBlocks = {} const passedTimestamp = process.argv[3] - if(passedTimestamp !== undefined){ + if (passedTimestamp !== undefined) { unixTimestamp = Number(passedTimestamp) const res = await getBlocks(unixTimestamp, chains) chainBlocks = res.chainBlocks @@ -244,8 +240,8 @@ function validateHallmarks(hallmark) { entries = entries.slice(0, 30) } entries.forEach(([symbol, balance]) => { - console.log(symbol.padEnd(25, " "), humanizeNumber(balance)); - }); + console.log(symbol.padEnd(25, " "), humanizeNumber(balance)); + }); console.log("Total:", humanizeNumber(usdTvls[chain]), "\n"); }); console.log(`------ TVL ------`); From b10f14d6c0bab0404e8cb2e41b133e43a0c63bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=85=BE=E5=AE=87?= <992899491@qq.com> Date: Thu, 31 Oct 2024 15:29:21 +0800 Subject: [PATCH 0882/1768] Update ModeMax Perp V2 TVL Address (#12121) --- projects/modemax-perp-v2/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/modemax-perp-v2/index.js b/projects/modemax-perp-v2/index.js index c9aadc03ce..90d3803716 100644 --- a/projects/modemax-perp-v2/index.js +++ b/projects/modemax-perp-v2/index.js @@ -2,6 +2,6 @@ const { gmxExports } = require('../helper/gmx') module.exports = { mode: { - tvl: gmxExports({ vault: '0x6824AbeA9D564e469B8FAaA0300b04cAFdD78341' }) + tvl: gmxExports({ vault: '0xc3d266Af004B2556f2f900e88e9C73Ac42978AE6' }) }, }; From 8d9f7fe45c7d744a7b01d731824b946a8d000c7a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 08:30:52 +0100 Subject: [PATCH 0883/1768] code refactor --- projects/crackandstack/index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/projects/crackandstack/index.js b/projects/crackandstack/index.js index 8bbecfa14f..39d351216e 100644 --- a/projects/crackandstack/index.js +++ b/projects/crackandstack/index.js @@ -1,7 +1,6 @@ -const { sumTokensExport } = require("../helper/unwrapLPs"); -const coreAssets = require("../helper/coreAssets.json"); -const TAIKO_TOKEN = ADDRESSES.taiko.TAIKO; +const { sumTokensExport } = require("../helper/unwrapLPs"); +const ADDRESSES = require("../helper/coreAssets.json"); const CONTRACTS = ["0x2c301eBfB0bb42Af519377578099b63E921515B7", "0xD8F7cd7d919c5266777FB83542F956dD30E80187", "0x12689b6ddE632E69fBAA70d066f86aC9fDd33dd1"]; @@ -12,7 +11,7 @@ module.exports = { taiko: { tvl: sumTokensExport({ owners: CONTRACTS, - tokens: [coreAssets.null, coreAssets.taiko.USDT, coreAssets.taiko.USDC_e, coreAssets.taiko.USDC, TAIKO_TOKEN] + tokens: [ADDRESSES.null, ADDRESSES.taiko.USDT, ADDRESSES.taiko.USDC_e, ADDRESSES.taiko.USDC, ADDRESSES.taiko.TAIKO] }), }, } From c9d661b82997a9e04b5f8dbdf96e0a3a9c2c6b67 Mon Sep 17 00:00:00 2001 From: Chase Brown <54334583+chasebrownn@users.noreply.github.com> Date: Thu, 31 Oct 2024 00:32:53 -0700 Subject: [PATCH 0884/1768] New adapter for Pearl's UniV2 style pools on re.al to capture TVL (#12109) --- projects/pearl-v1.5/index.js | 9 +++++++++ projects/pearl-v2/index.js | 1 - 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 projects/pearl-v1.5/index.js diff --git a/projects/pearl-v1.5/index.js b/projects/pearl-v1.5/index.js new file mode 100644 index 0000000000..4252916e5c --- /dev/null +++ b/projects/pearl-v1.5/index.js @@ -0,0 +1,9 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + 'real': { + tvl: getUniTVL({ + factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', + }) + } +}; \ No newline at end of file diff --git a/projects/pearl-v2/index.js b/projects/pearl-v2/index.js index dac961beb7..5e12421acd 100644 --- a/projects/pearl-v2/index.js +++ b/projects/pearl-v2/index.js @@ -1,4 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { uniV3Export } = require('../helper/uniswapV3') module.exports = uniV3Export({ From 87d615b4f89a829b5729319889485a0c905bfefd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 08:34:46 +0100 Subject: [PATCH 0885/1768] rename folder --- projects/{pearl-v1.5 => pearl-v1-5}/index.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename projects/{pearl-v1.5 => pearl-v1-5}/index.js (100%) diff --git a/projects/pearl-v1.5/index.js b/projects/pearl-v1-5/index.js similarity index 100% rename from projects/pearl-v1.5/index.js rename to projects/pearl-v1-5/index.js From cf70fb4cd824b9f37e1355b511ca3562e3ff99e8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 08:35:46 +0100 Subject: [PATCH 0886/1768] minor fix --- projects/pearl-v1-5/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pearl-v1-5/index.js b/projects/pearl-v1-5/index.js index 4252916e5c..1d631c1d3e 100644 --- a/projects/pearl-v1-5/index.js +++ b/projects/pearl-v1-5/index.js @@ -3,7 +3,7 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { 'real': { tvl: getUniTVL({ - factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', + factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true, }) } }; \ No newline at end of file From 4670cacbc9ef5ed093cf7b1af2725c2333209b82 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 08:36:04 +0100 Subject: [PATCH 0887/1768] minor fix --- projects/pearl-v1-5/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pearl-v1-5/index.js b/projects/pearl-v1-5/index.js index 1d631c1d3e..0f2b532b7d 100644 --- a/projects/pearl-v1-5/index.js +++ b/projects/pearl-v1-5/index.js @@ -1,6 +1,7 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + misrepresentedTokens: true, 'real': { tvl: getUniTVL({ factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true, From d2bff74837bf6c7fdb3d77bbffd47301a4c1de7d Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Thu, 31 Oct 2024 03:36:31 -0400 Subject: [PATCH 0888/1768] Feat: add IoTex and B^2 Network market for Avalon Finance (#12110) --- projects/avalon-finance/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index ef941e7aeb..97a6c59e8f 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -8,6 +8,8 @@ const mainMarket = { merlin: aaveExports('', '0x6aB5d5E96aC59f66baB57450275cc16961219796', undefined, ['0x5F314b36412765f3E1016632fD1Ad528929536CA'], {v3: true}), btr: aaveExports('', '0x6aB5d5E96aC59f66baB57450275cc16961219796', undefined, ['0x5F314b36412765f3E1016632fD1Ad528929536CA'], {v3: true}), scroll: aaveExports('', '0xFBb77A68ee35e7902F1ABE0Bd34B263023e90c70', undefined, ['0x18cbe70602Ee17f79D56971F685E9EaF49DA53F2'], { v3: true }), + iotex: aaveExports('', '', undefined, ['0xBa77520d38953BF6a8395D118CfF714Ed672533f'], { v3: true }), + bsquared: aaveExports('', '', undefined, ['0x4Ea93E846b8C6E7b3D5a5BEDF4fe6B8AED58FCEe'], { v3: true }), } const innovativeMarket = { From 4240dd968eafff1fb12ef8ec732b8755d584285a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 08:59:23 +0100 Subject: [PATCH 0889/1768] track maxapy #12111 --- projects/maxapy/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/maxapy/index.js diff --git a/projects/maxapy/index.js b/projects/maxapy/index.js new file mode 100644 index 0000000000..72b46a7051 --- /dev/null +++ b/projects/maxapy/index.js @@ -0,0 +1,23 @@ +const { sumERC4626VaultsExport } = require('../helper/erc4626') + +module.exports = { + doublecounted: true, + methodology: "Counts total value locked in ERC4626 vaults", +} + +const config = { + ethereum: [ + "0x9847c14fca377305c8e2d10a760349c667c367d4", + "0x349c996c4a53208b6eb09c103782d86a3f1bb57e", + ], + polygon: [ + "0xe7fe898a1ec421f991b807288851241f91c7e376", + "0xa02aa8774e8c95f5105e33c2f73bdc87ea45bd29", + ] +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumERC4626VaultsExport({ vaults: config[chain], isOG4626: true, }) + } +}) From 07eda541ee6f070d7299be89c3730332e79a8385 Mon Sep 17 00:00:00 2001 From: gWhy <73211553+gWhy-j@users.noreply.github.com> Date: Thu, 31 Oct 2024 17:51:25 +0900 Subject: [PATCH 0890/1768] Added adapter for Morfi (#12124) --- projects/MorFi/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/MorFi/index.js diff --git a/projects/MorFi/index.js b/projects/MorFi/index.js new file mode 100644 index 0000000000..c0ab9c3f66 --- /dev/null +++ b/projects/MorFi/index.js @@ -0,0 +1,9 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + morph: { + factory: "0x1be404c921ef85537233ef2be251a27583072861", + fromBlock: 166014, + isAlgebra: true, + }, +}); \ No newline at end of file From 9935f910f022950d725f488ce0f636ef0f2635a1 Mon Sep 17 00:00:00 2001 From: Jonathan Lodge Date: Thu, 31 Oct 2024 21:15:39 +0800 Subject: [PATCH 0891/1768] Add staking of CBL in the Raging Bull Staking Vault to Credbull SDK Adapter. (#12126) --- projects/credbull/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/credbull/index.js b/projects/credbull/index.js index aeeb7c6c6b..fc22664bea 100644 --- a/projects/credbull/index.js +++ b/projects/credbull/index.js @@ -1,5 +1,8 @@ const { getConfig } = require('../helper/cache'); +const STAKING_VAULT_CONTRACT = "0xe4a4d891f02DF7bFFc5ff9e691313DE8a9E76b91"; +const CBL_TOKEN = "0xD6b3d81868770083307840F513A3491960b95cb6"; + async function tvl(api) { let vaults = await getConfig('credbull', "https://incredbull.io/api/vaults") vaults = vaults[api.chain] @@ -13,12 +16,17 @@ async function borrowed(api) { const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) const bals = await api.multiCall({ abi: 'address:totalAssets', calls: vaults }) api.add(tokens, bals) - const tBals = (await api.multiCall({ abi: 'erc20:balanceOf', calls: tokens.map((t,i) => ({ target: t, params: vaults[i] })) })).map(i => i * -1) + const tBals = (await api.multiCall({ abi: 'erc20:balanceOf', calls: tokens.map((t, i) => ({ target: t, params: vaults[i] })) })).map(i => i * -1) api.add(tokens, tBals) } +async function stakedCbl(api) { + const bals = await api.multiCall({ abi: 'address:totalAssets', calls: [STAKING_VAULT_CONTRACT,] }) + api.add(CBL_TOKEN, bals) +} + module.exports = { methodology: 'TVL consist of the sum of every deposit of all vaults for a given asset.', btr: { tvl, borrowed, }, - arbitrum: { tvl, borrowed }, + arbitrum: { tvl, borrowed, staking: stakedCbl }, }; From 437221bade2f5bee6941ae878fd054a1a6d2150c Mon Sep 17 00:00:00 2001 From: AbstraDexXYZ <155727634+AbstraDexXYZ@users.noreply.github.com> Date: Thu, 31 Oct 2024 20:16:09 +0700 Subject: [PATCH 0892/1768] add morph config (#12125) --- projects/abstraDex/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/abstraDex/index.js b/projects/abstraDex/index.js index 823febf75e..75dcb1d9ba 100644 --- a/projects/abstraDex/index.js +++ b/projects/abstraDex/index.js @@ -10,6 +10,7 @@ const config = { blast: '0xA7afB6163c331DDb0845843889D6f9544328846F', cyeth: '0x174c4c03dfea09682728a5959a253bf1f7c7766f', cronos_zkevm: '0x76D1fC018676f8A973474C24F40A2e14e401b770', + morph: '0x174c4C03DfeA09682728A5959A253bf1F7C7766F', } module.exports = { From d73d802cb9189c2e5f827b8bdb84f50113c05ff7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:02:28 +0100 Subject: [PATCH 0893/1768] solayer: track sUSD #12123 --- projects/solayer/index.js | 40 ++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/projects/solayer/index.js b/projects/solayer/index.js index 6e4b7d6a45..589a239dfb 100644 --- a/projects/solayer/index.js +++ b/projects/solayer/index.js @@ -1,17 +1,35 @@ -const { sumTokens2, getSolBalanceFromStakePool } = require("../helper/solana"); +const { sumTokens2, getConnection, } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js"); +const ADDRESSES = require('../helper/coreAssets.json') async function tvl(api) { - await getSolBalanceFromStakePool('po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2', api) + const connection = getConnection(); + + // add SOL staking + const stakeAccount = await connection.getAccountInfo(new PublicKey('po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2')) + api.add(ADDRESSES.solana.SOL, Number(stakeAccount.data.readBigUint64LE(258))) + + // get LST details + const data = await connection.getProgramAccounts(new PublicKey('sSo1iU21jBrU9VaJ8PJib1MtorefUV4fzC9GURa2KNn'), { + filters: [{ dataSize: 74, },], + }) + const tokensAndOwners = data.map((i) => { + const offset = 8 + const lstMint = new PublicKey(i.account.data.slice(offset + 0, offset + 32)); + return [lstMint.toString(), i.pubkey.toString()] + }) + + // add SUSD Backing + tokensAndOwners.push( + ['4MmJVdwYN8LwvbGeCowYjSx7KoEi6BJWg8XXnW4fDDp6', 'FhVcYNEe58SMtxpZGnTu2kpYJrTu2vwCZDGpPLqbd2yG'], + [ADDRESSES.solana.USDC, 'FhVcYNEe58SMtxpZGnTu2kpYJrTu2vwCZDGpPLqbd2yG'], + ) + return sumTokens2({ - tokenAccounts: [ - 'AGuwBAj91dgz1fhaK4qgYcH7SohyZEMK1VXTizFsWjq7', - 'Q75n2KgZp7insTKkavJWftWWuGDDUuHMquosQ5hbn7G', - 'HBjQ1jF2ynYFpwx46qiZsKE3rmvgEcxnkhvKeGP6omUd', - '6eLZQKhbiBNmR4PiDFJgE6TZAoH3BwR6ceVwc3K1YjBZ', - 'HNw9tA7sWvjDH4cDCykj23Q4ifkKZerr6MbMfFXgyp62', - 'Gwa3a4VJbAyorLhn6TEeWLbQ4tWyup4E6oL3WjAga7tx', - ], - balances: api.getBalances() + balances: api.getBalances(), tokensAndOwners, blacklistedTokens: [ + 'sSo1wxKKr6zW2hqf5hZrp2CawLibcwi1pMBqk5bg2G4', + 'testqcAoCvfFpuFNtdmrBnBMSfFoXKkSTJ3ky6cPKjx', + ] }) } From 6f93b5db66c7180b4baa3b3eed02435631d9f45f Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 31 Oct 2024 15:13:34 +0000 Subject: [PATCH 0894/1768] include hasStablePools: true --- projects/pearl-v1-5/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pearl-v1-5/index.js b/projects/pearl-v1-5/index.js index 0f2b532b7d..081aea6645 100644 --- a/projects/pearl-v1-5/index.js +++ b/projects/pearl-v1-5/index.js @@ -4,7 +4,7 @@ module.exports = { misrepresentedTokens: true, 'real': { tvl: getUniTVL({ - factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true, + factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true, hasStablePools: true }) } }; \ No newline at end of file From 417697a4915dc728874ed972344bb99d0325d5aa Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 31 Oct 2024 15:18:24 +0000 Subject: [PATCH 0895/1768] revert --- projects/pearl-v1-5/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pearl-v1-5/index.js b/projects/pearl-v1-5/index.js index 081aea6645..09fb9b4ea5 100644 --- a/projects/pearl-v1-5/index.js +++ b/projects/pearl-v1-5/index.js @@ -4,7 +4,7 @@ module.exports = { misrepresentedTokens: true, 'real': { tvl: getUniTVL({ - factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true, hasStablePools: true + factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true }) } }; \ No newline at end of file From 1e921c7ab6684500cfd73b6890713f495ba28f2a Mon Sep 17 00:00:00 2001 From: yellow <8539006+yellowBirdy@users.noreply.github.com> Date: Thu, 31 Oct 2024 18:30:44 +0100 Subject: [PATCH 0896/1768] Nabla Finance (#12127) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/nabla/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/nabla/index.js diff --git a/projects/nabla/index.js b/projects/nabla/index.js new file mode 100644 index 0000000000..e1fc5d8481 --- /dev/null +++ b/projects/nabla/index.js @@ -0,0 +1,23 @@ + +const { getLogs2 } = require('../helper/cache/getLogs') + +const config = { + base: { factory: '0x791Fee7b66ABeF59630943194aF17B029c6F487B', fromBlock: 19980311 }, + arbitrum: { factory: '0x7bcFc8b8ff61456ad7C5E2be8517D01df006d18d', fromBlock: 240797440 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: "event SwapPoolRegistered(address indexed sender, address pool, address asset)", fromBlock, }) + const pools = logs.map(log => log.pool) + const tokensAndOwners = logs.map(i => [i.asset, i.pool]) + let backstops = await api.multiCall({ abi: 'address:backstop', calls: pools }) + backstops = [...new Set(backstops)] + const bTokens = await api.multiCall({ abi: 'address:asset', calls: backstops }) + backstops.forEach((backstop, i) => tokensAndOwners.push([bTokens[i], backstop])) + return api.sumTokens({ tokensAndOwners }) + } + } +}) From ef2290465c2e1b89afc381f37304532b08fd3a74 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 1 Nov 2024 01:33:39 +0000 Subject: [PATCH 0897/1768] hasStablePools: true --- projects/pearl-v1-5/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pearl-v1-5/index.js b/projects/pearl-v1-5/index.js index 09fb9b4ea5..081aea6645 100644 --- a/projects/pearl-v1-5/index.js +++ b/projects/pearl-v1-5/index.js @@ -4,7 +4,7 @@ module.exports = { misrepresentedTokens: true, 'real': { tvl: getUniTVL({ - factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true + factory: '0xAed0A784f357BE9C3f8113BB227a7517a3444Efe', useDefaultCoreAssets: true, hasStablePools: true }) } }; \ No newline at end of file From 3c58646dea4c2db519a0626b87267f45893eba9e Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:44:13 +0800 Subject: [PATCH 0898/1768] add config (#12134) --- projects/kiloex/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index c6dc47d6a1..2cd96c4275 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -20,7 +20,8 @@ module.exports = { '0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b',//slisBNB '0x0782b6d8c4551b9760e74c0545a9bcd90bdc41e5',//lisUSD ADDRESSES.bsc.USDC, //usdc - + '0xf6718b2701d4a6498ef77d7c152b2137ab28b8a3', //stBTC + '0x4aae823a6a0b376de6a78e74ecc5b079d38cbcf7', //SolvBTC ], }) }, op_bnb: { tvl: sumTokensExport({ owners: opbnb_owners, tokens: [ @@ -29,6 +30,7 @@ module.exports = { ADDRESSES.optimism.WETH_1, //WBNB ADDRESSES.defiverse.USDC, //BTCB ADDRESSES.defiverse.ETH, //ETH + ] }) }, manta: { From c31ef32a8ac7baeef1519cc7a7e7f4c4d96ae858 Mon Sep 17 00:00:00 2001 From: 0xajing <163371347+0xajing@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:45:33 +0800 Subject: [PATCH 0899/1768] feat/lorenzo enzoBTC:update btc address (#12132) Co-authored-by: Leven Co-authored-by: lorenzo Co-authored-by: LevenR <156494841+LevenR@users.noreply.github.com> --- projects/lorenzo-enzoBTC/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/lorenzo-enzoBTC/index.js b/projects/lorenzo-enzoBTC/index.js index b659942289..af81c984e9 100644 --- a/projects/lorenzo-enzoBTC/index.js +++ b/projects/lorenzo-enzoBTC/index.js @@ -1,7 +1,7 @@ const { sumTokens } = require('../helper/chain/bitcoin') const staticAddresses = [ - 'bc1qnvgmve5gs89ugf4n94jzqgan202dve5dtrj220', + 'bc1qndzgrwj3y2lhcklme4t72jxq3df2h05vjdgzpp', '19wFRSr3GYHmVQtnmbkx7Wkjw3jZdyYB9a' ] async function tvl() { From e2880e5472fae9448181d5918fc6709062b3bf33 Mon Sep 17 00:00:00 2001 From: kexley <87971154+kexleyBeefy@users.noreply.github.com> Date: Fri, 1 Nov 2024 03:46:46 +0000 Subject: [PATCH 0900/1768] Add Scroll to Beefy (#12129) --- projects/beefy/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/beefy/index.js b/projects/beefy/index.js index 42a2fb0324..58dba00600 100644 --- a/projects/beefy/index.js +++ b/projects/beefy/index.js @@ -60,6 +60,7 @@ const chains = { avax: 43114, linea: 59144, real: 111188, + scroll: 534352, aurora: 1313161554, harmony: 1666600000 } From f61e988782280d2286f76b18995564166a8618a7 Mon Sep 17 00:00:00 2001 From: Da Sichuan <86024678+DaSichuan@users.noreply.github.com> Date: Thu, 31 Oct 2024 20:47:11 -0700 Subject: [PATCH 0901/1768] Add spring sui (#12130) --- projects/spring-sui/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/spring-sui/index.js diff --git a/projects/spring-sui/index.js b/projects/spring-sui/index.js new file mode 100644 index 0000000000..9b31771faa --- /dev/null +++ b/projects/spring-sui/index.js @@ -0,0 +1,16 @@ +const sui = require('../helper/chain/sui') + +async function tvl() { + const pool = await sui.getObject('0x15eda7330c8f99c30e430b4d82fd7ab2af3ead4ae17046fcb224aa9bad394f6b'); + const suiAmount = pool.fields.storage.fields.total_sui_supply / 10 ** 9 + return { + sui: suiAmount, + } +} + +module.exports = { + methodology: "Calculates the amount of SUI staked in Spring Sui liquid staking contracts.", + sui: { + tvl, + } +} From 0f63527731360941d6dbf23518f1efe17c690762 Mon Sep 17 00:00:00 2001 From: xieqiancaosissi Date: Fri, 1 Nov 2024 11:50:51 +0800 Subject: [PATCH 0902/1768] feat: update ref finance tvl logic (#12133) Co-authored-by: naturexie <786281870@qq.com> --- projects/reffinance.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/reffinance.js b/projects/reffinance.js index 3142d1bf1e..4e41da809c 100644 --- a/projects/reffinance.js +++ b/projects/reffinance.js @@ -21,7 +21,7 @@ async function tvl() { pools .filter(({ shares_total_supply }) => +shares_total_supply > 0) // Token pair must have some liquidity .map(({ token_account_ids, pool_kind, amounts }) => { - if (!['SIMPLE_POOL', 'STABLE_SWAP', "RATED_SWAP"].includes(pool_kind)) throw new Error('Unknown pool kind.') + // if (!['SIMPLE_POOL', 'STABLE_SWAP', "RATED_SWAP"].includes(pool_kind)) throw new Error('Unknown pool kind.') token_account_ids.forEach((token, index) => { sumSingleBalance(balances, token, amounts[index]) }) From e8bff2429add3ab965e0fa061956f47fdf642b2e Mon Sep 17 00:00:00 2001 From: Ryang-21 <104600435+Ryang-21@users.noreply.github.com> Date: Thu, 31 Oct 2024 22:05:42 -0600 Subject: [PATCH 0903/1768] Fix blend supply and borrow calculations (#12128) Co-authored-by: llama --- projects/blend-pools/api.js | 16 ++++++++-------- projects/helper/coreAssets.json | 3 ++- projects/helper/tokenMapping.js | 5 +++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/projects/blend-pools/api.js b/projects/blend-pools/api.js index fa85d3cb59..bac0cd1ba0 100644 --- a/projects/blend-pools/api.js +++ b/projects/blend-pools/api.js @@ -15,12 +15,12 @@ const network = { async function getReserveDeposits(poolId, reserveId, isBorrowed = false) { const data = await ReserveData.load(network, poolId, reserveId) - const rate = Number(data.bRate) / 1e9 - const supply = Number(data.bSupply) - const borrowed = Number(data.dSupply) - if (isBorrowed) - return borrowed * rate - return (supply - borrowed) * rate + // bRate and dRate have 9 decimals + const supply = Number(data.bSupply) * Number(data.bRate) / 1e9; + const borrowed = Number(data.dSupply) * Number(data.dRate) / 1e9 + if (isBorrowed) + return borrowed + return supply - borrowed } @@ -39,9 +39,9 @@ async function addPoolTVL(poolId, api, isBorrowed = false) { async function tvl(api) { let backstop = await BackstopConfig.load(network, BACKSTOP_ID); - for (const pool of backstop.rewardZone) + for (const pool of backstop.rewardZone){ await addPoolTVL(pool, api); - +} return sumTokens2({ api }) } diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 30ce87b735..a87d0f2064 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1860,7 +1860,8 @@ }, "stellar": { "XLM": "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA", - "USDC": "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75" + "USDC": "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75", + "EURC": "CDTKPWPLOURQA2SGTKTUQOWRCBZEORB4BWBOMJ3D3ZTQQSGE5F6JBQLV" }, "lukso": { "WLYX": "0x2db41674f2b882889e5e1bd09a3f3613952bc472" diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 62dd00a440..c8dde620db 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,6 +40,11 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + stellar: { + "CDTKPWPLOURQA2SGTKTUQOWRCBZEORB4BWBOMJ3D3ZTQQSGE5F6JBQLV": { coingeckoId: "euro-coin", decimals: 7}, + "CAUIKL3IYGMERDRUN6YSCLWVAKIFG5Q4YJHUKM4S4NJZQIA3BAS6OJPK": { coingeckoId: "aquarius", decimals: 7}, + + }, shape: { [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, '0x48A9B22b80F566E88f0f1DcC90Ea15A8A3bAE8a4': { coingeckoId: 'ethereum', decimals: 18 }, From 1f70900834586ea0e7a3298ce1d28601520fb3f1 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Fri, 1 Nov 2024 00:19:24 -0400 Subject: [PATCH 0904/1768] Add: Avalon USDa (#12088) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/avalon-finance-usda/index.js | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 projects/avalon-finance-usda/index.js diff --git a/projects/avalon-finance-usda/index.js b/projects/avalon-finance-usda/index.js new file mode 100644 index 0000000000..5de4e4c950 --- /dev/null +++ b/projects/avalon-finance-usda/index.js @@ -0,0 +1,33 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const config = { + ethereum: { + poolAddress: '0x3f390dD6EF69f68f9877aACC086856a200808693', + fbtcAddress: '0xC96dE26018A54D51c097160568752c4E3BD6C364', + lfbtcAddress: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', + usdaAddress: '0x0b4D6DA52dF60D44Ce7140F1044F2aD5fabd6316', + }, + bsc: { + poolAddress: '0xC757E47d6bC20FEab54e16F2939F51Aa4826deF7', + fbtcAddress: '0xC96dE26018A54D51c097160568752c4E3BD6C364', + lfbtcAddress: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', + usdaAddress: '0x8a4bA6C340894B7B1De0F6A03F25Aa6afb7f0224', + }, + mantle: { + poolAddress: '0x8f778806CBea29F0f64BA6A4B7724BCD5EEd543E', + fbtcAddress: '0xC96dE26018A54D51c097160568752c4E3BD6C364', + lfbtcAddress: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', + usdaAddress: '0x2BDC204b6d192921605c66B7260cFEF7bE34Eb2E', + }, +} + +module.exports = { + methodology: `FBTC and LFFBTC as collateral`, +} + +Object.keys(config).forEach(chain => { + const {poolAddress, lfbtcAddress, fbtcAddress,} = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owner: poolAddress, tokens: [lfbtcAddress, fbtcAddress], }), + } +}) \ No newline at end of file From 7be476d35a7c63f5ab80b6e2a5f01c1d3977e214 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 1 Nov 2024 11:12:09 +0000 Subject: [PATCH 0905/1768] fix mapping (coingecko for WAPE broke --- projects/helper/tokenMapping.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c8dde620db..19b74251ea 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -121,7 +121,7 @@ const fixBalancesTokens = { [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'weth', decimals: 18 } }, apechain: { - '0x48b62137EdfA95a428D35C09E44256a739F6B557': { coingeckoId: 'wrapped-apecoin', decimals: 18 }, + '0x48b62137EdfA95a428D35C09E44256a739F6B557': { coingeckoId: 'apecoin', decimals: 18 }, '0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4': { coingeckoId: 'savings-dai', decimals: 18 }, '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, }, From 4411c85073e6b82796f746366a49c2ddf0295e75 Mon Sep 17 00:00:00 2001 From: 0xchimz <5950717+0xchimz@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:00:17 +0700 Subject: [PATCH 0906/1768] Fix the factory contract address (#12140) Co-authored-by: 0xchimz --- projects/rabbitswap-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/rabbitswap-v3/index.js b/projects/rabbitswap-v3/index.js index ce3b106f80..96c15aa065 100644 --- a/projects/rabbitswap-v3/index.js +++ b/projects/rabbitswap-v3/index.js @@ -1,5 +1,5 @@ const { uniV3Export } = require('../helper/uniswapV3') module.exports = uniV3Export({ - tomochain: { factory: '0x8Ab5815E0A6a059d203F53496fAAb3045d01A25A', fromBlock: 86168117, isAlgebra: false }, + tomochain: { factory: '0xe615c973e92bDcB584Bf9085c4612E342164e12A', fromBlock: 86210948, isAlgebra: false }, }) From 3559520efca40325591e12c0173b7e09ceae0275 Mon Sep 17 00:00:00 2001 From: basicdavid <144406528+basicdavid@users.noreply.github.com> Date: Fri, 1 Nov 2024 21:52:39 +0800 Subject: [PATCH 0907/1768] configured for Basic (#12137) --- projects/basic/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/basic/index.js diff --git a/projects/basic/index.js b/projects/basic/index.js new file mode 100644 index 0000000000..b542170fe7 --- /dev/null +++ b/projects/basic/index.js @@ -0,0 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { compoundExports2 } = require("../helper/compound"); + +module.exports = { + iotex: compoundExports2({ + cether: '0x83C51de03f03C5E23f02F674dbD2032e164112Fc', + comptroller: '0x47D7B83947Aa12fEb95f5f55527Dc9B32E4ec009', + cetheEquivalent: ADDRESSES.iotex.WIOTX + }) +}; \ No newline at end of file From 38367fcc7c6c586161f0899ad6dcb64deff09993 Mon Sep 17 00:00:00 2001 From: quenta2024 <161811915+quenta2024@users.noreply.github.com> Date: Fri, 1 Nov 2024 21:52:53 +0800 Subject: [PATCH 0908/1768] ADD Quenta tvl (#12135) --- projects/quenta/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/quenta/index.js diff --git a/projects/quenta/index.js b/projects/quenta/index.js new file mode 100644 index 0000000000..cda0b9e9dd --- /dev/null +++ b/projects/quenta/index.js @@ -0,0 +1,11 @@ + +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const ioUSDC = '0x3b2bf2b523f54c4e454f08aa286d03115aff326c' +const ioUSDT = '0x6fbcdc1169b5130c59e72e51ed68a84841c98cd1' +const USDQ = '0xEE43369197F78CFDF0D8fc48D296964C50AC7B57' + +module.exports = { + iotex: { tvl: sumTokensExport({ owner: USDQ, tokens: [ioUSDC, ioUSDT], })}, + methodology: `The calculation method for Quenta's TVL is the total value of all stablecoins (ioUSDC, ioUSDT) staked in the USDQ contract.`, +}; From b0e090f6b9a701b97d7975896b555451314a6240 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:55:29 +0100 Subject: [PATCH 0909/1768] Clober (#12142) Co-authored-by: Xavier Co-authored-by: Tae Hwan Jung --- projects/clober-liquidity-vault/index.js | 32 ++++++++++++++++++++++++ projects/clober-v2/index.js | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 projects/clober-liquidity-vault/index.js diff --git a/projects/clober-liquidity-vault/index.js b/projects/clober-liquidity-vault/index.js new file mode 100644 index 0000000000..0ceb589677 --- /dev/null +++ b/projects/clober-liquidity-vault/index.js @@ -0,0 +1,32 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +const abi = { + openEvent: 'event Open(bytes32 indexed key, uint192 indexed bookIdA, uint192 indexed bookIdB, bytes32 salt, address strategy)', + getBookKey: "function getBookKey(uint192 id) view returns ((address base, uint64 unitSize, address quote, uint24 makerPolicy, address hooks, uint24 takerPolicy))", + getLiquidity: "function getLiquidity(bytes32 key) view returns ((uint256 reserve, uint256 claimable, uint256 cancelable) liquidityA, (uint256 reserve, uint256 claimable, uint256 cancelable) liquidityB)", +} + +const config = { + base: { + rebalancer: '0x13f2Ff6Cc952f4181D6c316426e9CbdA957c6482', + bookManager: '0x382CCccbD3b142D7DA063bF68cd0c89634767F76', + fromBlock: 21715410, + }, +} + +async function tvl(api) { + const { rebalancer, bookManager, fromBlock } = config[api.chain] + const logs = await getLogs2({ api, factory: rebalancer, eventAbi: abi.openEvent, fromBlock, extraKey: 'open-bookid' }) + const bookIds = logs.map(i => [i.bookIdA, i.bookIdB]).flat() + const res = await api.multiCall({ abi: abi.getBookKey, calls: bookIds, target: bookManager }) + const tokens = res.map(i => [i.base, i.quote]).flat() + return api.sumTokens({ owners: [rebalancer,], tokens }) +} + +module.exports = { + methodology: "TVL includes all assets deposited into the Clober Liquidity Vault contract, specifically allocated for liquidity provision and market-making within the Clober ecosystem", +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) diff --git a/projects/clober-v2/index.js b/projects/clober-v2/index.js index 84fd0a8586..d704c67ef2 100644 --- a/projects/clober-v2/index.js +++ b/projects/clober-v2/index.js @@ -11,7 +11,7 @@ const config = { async function tvl(api) { const { factory, fromBlock } = config[api.chain] - const logs = await getLogs2({ api, factory, eventAbi: abi.openEvent, fromBlock, }) + const logs = await getLogs2({ api, factory, eventAbi: abi.openEvent, fromBlock, extraKey: 'open-address', }) const tokens = logs.map(({ base, quote }) => [base, quote]).flat() return api.sumTokens({ owner: factory, tokens, }) } From 5ac4e44c0dd745738e330adef77a5535a4f8ffbb Mon Sep 17 00:00:00 2001 From: ratex-tony Date: Fri, 1 Nov 2024 21:56:51 +0800 Subject: [PATCH 0910/1768] fix: update bbsol earn margin market vault address (#12141) --- projects/rate-x/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/rate-x/index.js b/projects/rate-x/index.js index f5ee1e5163..760fbb795c 100644 --- a/projects/rate-x/index.js +++ b/projects/rate-x/index.js @@ -7,7 +7,7 @@ async function tvl(api) { 'DY3Rw6BZwf6epvWnVo8DSV6kYptEdCh7HbYmFRpdPxuH', '3CppdkMFxuz7ASS27pB35EDbwgfUhwrarFYuWDBWWwHB', 'Grk7mshVug1TafphUvuYBrzwRqadtmCcf7GGPoPKkgs6', - '5mB83ye3jdjneDJDx15HAvYxT7SCsGZF5urpVMzuLr1t', + 'BpYbhwDZGpPvcKw3cSh5f9UqRaHfuxgz3avW9g324LUz', '4nyfJ4JBsRJLij7VGCVUeHwKSLAAku66ptJamoodY29L', '6opMSfkHgWsvG5KmZo8y2DuShaDHwXfB6VUuTx6W4Age', '4Ejjk5w7HAWvmXYT57s5uwn8rs7i61nbpcTRQ9ABB11M' From 19d728105f52a917eb7b7db73029811fa0eecd16 Mon Sep 17 00:00:00 2001 From: jan-magpie <155635960+jan-magpie@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:31:20 +0530 Subject: [PATCH 0911/1768] added zircuit chain (#12138) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/eigenpie/config.js | 17 ++++++++++++----- projects/eigenpie/index.js | 27 ++++++++++++++++++--------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/projects/eigenpie/config.js b/projects/eigenpie/config.js index 544eaf2619..d45891839f 100644 --- a/projects/eigenpie/config.js +++ b/projects/eigenpie/config.js @@ -1,6 +1,13 @@ module.exports = { - ethereum: { - eigenConfig: "0x20b70E4A1883b81429533FeD944d7957121c7CAB", - eigenStaking: "0x24db6717dB1C75B9Db6eA47164D8730B63875dB7", - } - }; \ No newline at end of file + ethereum: { + eigenConfig: "0x20b70E4A1883b81429533FeD944d7957121c7CAB", + eigenStaking: "0x24db6717dB1C75B9Db6eA47164D8730B63875dB7", + }, + zircuit:{ + msteth: "0x1C1Fb35334290b5ff1bF7B4c09130885b10Fc0f4", + egeth: "0x4bcc7c793534246BC18acD3737aA4897FF23B458", + wsteth: "0xf0e673Bc224A8Ca3ff67a61605814666b1234833", + weth: "0x4200000000000000000000000000000000000006", + } + +}; \ No newline at end of file diff --git a/projects/eigenpie/index.js b/projects/eigenpie/index.js index a19b6d398d..849fd8c5a2 100644 --- a/projects/eigenpie/index.js +++ b/projects/eigenpie/index.js @@ -1,20 +1,29 @@ const config = require("./config"); -const ADDRESSES = require('../helper/coreAssets.json') async function tvl(api) { - const { eigenConfig, eigenStaking } = config[api.chain]; + const { eigenConfig, } = config[api.chain]; let tokens = await api.call({ abi: 'address[]:getSupportedAssetList', target: eigenConfig, }); const mlrttokens = await api.multiCall({ abi: 'function mLRTReceiptByAsset(address) view returns (address)', calls: tokens, target: eigenConfig }) - const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens}) - tokens = tokens.map(token => token.toLowerCase() === '0xeFEfeFEfeFeFEFEFEfefeFeFefEfEfEfeFEFEFEf'.toLowerCase() ? ADDRESSES.null : token) + const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens }) api.add(tokens, tokenSupplies) } -Object.keys(config).forEach((chain) => { - module.exports[chain] = { - tvl, - }; -}); +async function tvl_zircuit(api) { + const { msteth, egeth, wsteth, weth } = config[api.chain]; + const mlrttokens = [msteth, egeth] + const tokens = [wsteth, weth] + const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens }) + api.add(tokens, tokenSupplies) +} + +module.exports = { + ethereum: { + tvl: tvl, + }, + zircuit: { + tvl: tvl_zircuit, + } +} module.exports.doublecounted = true \ No newline at end of file From 41c4d1928f9c8b88acf02a39d2968ba03f2d27bd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 2 Nov 2024 08:22:18 +0100 Subject: [PATCH 0912/1768] update loxodrome perp #12145 --- projects/loxodrome-perp/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/loxodrome-perp/index.js b/projects/loxodrome-perp/index.js index e716fec840..8aded92dff 100644 --- a/projects/loxodrome-perp/index.js +++ b/projects/loxodrome-perp/index.js @@ -2,6 +2,6 @@ const { gmxExports } = require('../helper/gmx') module.exports = { iotex: { - tvl: gmxExports({ vault: '0x22e239513f03C5cc890DAad846Bb279C4837d242' }) + tvl: gmxExports({ vault: '0x13904291B7d3e87d23070d22Bc34FA514F99Db18' }) }, } \ No newline at end of file From ef44d2607989be7f8136afb182cbb6477d5a6bed Mon Sep 17 00:00:00 2001 From: MD Date: Sun, 3 Nov 2024 01:44:53 +0100 Subject: [PATCH 0913/1768] feat: update blacklist (#12146) --- projects/impermax/index.js | 66 ++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/projects/impermax/index.js b/projects/impermax/index.js index 46a5659413..1d78ec640b 100644 --- a/projects/impermax/index.js +++ b/projects/impermax/index.js @@ -89,14 +89,29 @@ const blacklistedPools = { '0xdf5096804705d135656b50b62f9ee13041253d97', // YPIE-ETH ], polygon: [ - '0x76483d4ba1177f69fa1448db58d2f1dbe0fb65fa', // IMX-WETH - '0x8ce3bf56767dd87e87487f3fae63e557b821ea32', // IMX-WETH - '0xd4f5f9643a4368324ac920414781b1c5655baed1', // IMX-WETH - '0x5f819f510ca9b1469e6a3ffe4ecd7f0c1126f8f5', // IMX-WETH - '0x23312fceadb118381c33b34343a61c7812f7a6a3', // IMX-WETH - '0x5ed3147f07708a269f744b43c489e6cf3b60aec4', // USDT-DAI - '0xb957d5a232eebd7c4c4b0a1af9f2043430304e65', // USDC-rUSD - '0x87B94444d0f2c1e4610A2De8504D5d7b81898221', // QUICK-POLYDOGE + // QuickSwap + "0x5ed3147F07708A269f744B43c489e6Cf3B60aEC4", //DAI-USDT + "0x87B94444d0f2c1e4610A2De8504D5d7b81898221", //QUICK-POLYDOGE + "0x5f819f510ca9b1469e6a3ffe4ecd7f0c1126f8f5", //IMX-ETH [OLD] + "0xb957D5a232EEbD7C4c4B0A1af9F2043430304E65", //rUSD-USDC + "0x23312FCEADb118381C33B34343A61c7812f7a6a3", //IMX-ETH + "0x76483D4Ba1177F69FA1448dB58d2f1dBE0Fb65fa", //IMX-QUICK + "0xD4f5F9643A4368324aC920414781B1c5655BaeD1", //IMX-QUICK + "0x8ce3bf56767dD87E87487f3fae63e557B821Ea32", //IMX-WETH + "0x8ce3bf56767dd87e87487f3fae63e557b821ea32", //IMX-ETH + // Pearl + "0x2712fbb291d8784b7bf75e50f472968d0bd43fc1", //USDR-ETH + "0x7c91c66f7df3d23858937b0d419fd10b72bdc6d3", //USDR-BTC + "0xbde0990EeB2509931a0f73f78010F00191D746BA", //USDR-MATIC + "0x281Db118b0CB2865d9370c98AaC6e42523582AED", //USDR-PEARL + "0x822363B6dFaa8C41c1ADa904F1829143375EA6Da", //USDR-TNGBL + "0x6467FeF60a061f541967415fcBcDFb6Dc964f711", //USDR-IBEX + // Satin + "0x7166f0509bd1deedf90e42046025d929078089b4", //MATIC-LIBERA + "0x06D3AE1Cfe7D3D27B8b9f541E2d76e5f33778923", //SATIN-CASH + "0x3E626179241585235FF7B002cc4dC5439338990e", //IBEX-WETH + "0xCB091859dd1d994d513721fB9722Ca9f8839A825", //ETH-CASH + "0x7b750A5C4c0c7b36D206383353AB3c54DeE74deF", //MATIC-CASH ], arbitrum: [ '0xb7e5e74b52b9ada1042594cfd8abbdee506cc6c5', // IMX-WETH @@ -105,10 +120,30 @@ const blacklistedPools = { '0x4062f4775bc001595838fbaae38908b250ee07cf', // SWPR-ETH ], avax: [ - '0xde0037afbe805c00d3cec67093a40882880779b7', // IMX-WETH - '0xe9439f67201894c30f1c1c6b362f0e9195fb8e2c', // IMX-WETH - '0xa34862a7de51a0e1aee6d3912c3767594390586d', // IMX-WETH - '0x69c1c44e8742b66d892294a7eeb9aac51891b0eb', // USDC-UST + // Traderjoe + "0x21249FC0Ad45fB3e33C12BE0fA2B81000A290C5f", //SPELL-AVAX + "0xa34862a7de51a0e1aee6d3912c3767594390586d", //IMX-AVAX OLD + // Pangolin V1 + "0xE9439f67201894C30F1C1c6b362F0e9195FB8e2C", //IMX-AVAX + // Pangolin V2 + "0xde0037aFbE805C00d3CEc67093A40882880779b7", //IMX-AVAX + "0x69c1C44e8742b66D892294a7EEB9aac51891B0EB", //USDC-UST + "0xc6E68d77d0f4FA925A1cF2611dAB6b10900Eaf2B", //UST-AVAX + // Thorus + "0xd60709441b483453e84aD8E1C30F2e9EE116851D", //USDC-THO + // Pangolin + "0xE429Fbdc3275e29cA4c11F9c1EB4C8Cee1fCAda3", //WBTC-USDC + "0xc532a2885027677c4BE61F710F7D41941dBaD1B1", //ETH-AVAX + "0x677dCE0683e6Db30325cD97e8d04D138F34821A6", //PNG-AVAX + "0x65A9a0b25A2397e67Fe688361Bf4113cf4Fa5313", //USDT-AVAX + // Glacier + "0x96f1F13865f11E2EC0E15051415f420dAC440EC1", //WETH-USDT.e + "0x674A38dE6dC83FBde29784C9A974D38a11EbFB37", //BTC.b-AVAX + "0x4ab56108FD36F5da28b56a43b17909f745d560e4", //AVAX-USDT + "0x29327d37Ee0395a22dd419E2E81F3Bf2da066cfe", //GMX-USDC + "0x0d4E0EaFA9002957371a0cadbD3BF168d6D0741A", //fBOMB-AVAX + "0x7AEDD611c361cfc53d14953A6CbDC2d4Cd48AC94", //AVAX-WMEMO + "0x8dc6fae7fedd7a60ecbb27c17af830f5811d773e", //MMTH-BTC.b ], moonriver: [ '0x6ed3bc66dfcc5ac05daec840a75836da935fac97', // IMX-WETH @@ -119,7 +154,12 @@ const blacklistedPools = { '0x877a330af63094d88792b9ca28ac36c71673eb1c', // IMX-FTM '0xb97b6ed451480fe6466a558e9c54eaac32e6c696', // OXD-FTM ], - scroll: [], + scroll: [ + "0x94d81405985A4c34EaC4945d2b98c74258EdD07F", // tkn/chi - stakedlp + "0xE8f4895DF06a0c69A9BA87509EfdBBFBAFe86c2d", // weth/tkn - stakedlp + "0x7c80Be56a6f23A3E598822648baaFD7524fe1239", // chi/wUKRE stakedlp + "0xDD14d0c651C63e1EeA5bd8b250cf99757425D68F", // chi/usdc stakedlp + ], base: [], mantle: [], optimism: [], From 67a073da8d1d9a0d7854ddcccc39aea728e92058 Mon Sep 17 00:00:00 2001 From: Maxime Desalle <70470326+maxdesalle@users.noreply.github.com> Date: Sat, 2 Nov 2024 20:45:21 -0400 Subject: [PATCH 0914/1768] refactor: support mode & linea for sablier (#12148) --- projects/sablier-v2/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/sablier-v2/index.js b/projects/sablier-v2/index.js index 5f99693128..25f8db886f 100644 --- a/projects/sablier-v2/index.js +++ b/projects/sablier-v2/index.js @@ -41,6 +41,8 @@ const config = { blast: { endpoints: ['BXoC2ToMZXnTmCjWftQRPh9zMyM7ysijMN54Nxzb2CEY'], }, scroll: { endpoints: ['HVcngokCByfveLwguuafrBC34xB65Ne6tpGrXHmqDSrh'], }, era: { endpoints: ['GY2fGozmfZiZ3xF2MfevohLR4YGnyxGxAyxzi9zmU5bY'], }, + mode: { endpoints: ['5ezGnVwNucVTW45WCb91VBiKBEdiqT4ceHDhh1KGigYG'], }, + linea: { endpoints: ['FoJnatzCZKyp9XjZyUBaw1juTb5ydnFvJvWUxS3oRCHZ'], }, } Object.keys(config).forEach(chain => { From 12f0b4697cb8eb782531754472d5b600b76c4f71 Mon Sep 17 00:00:00 2001 From: SeanTuring Date: Mon, 4 Nov 2024 14:51:11 +0800 Subject: [PATCH 0915/1768] add exsat credit staking adapter (#12152) --- projects/exsat-credit-staking/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/exsat-credit-staking/index.js diff --git a/projects/exsat-credit-staking/index.js b/projects/exsat-credit-staking/index.js new file mode 100644 index 0000000000..c9280c46e8 --- /dev/null +++ b/projects/exsat-credit-staking/index.js @@ -0,0 +1,24 @@ +const axios = require('axios'); +const { sumTokens } = require("../helper/chain/bitcoin"); + +async function tvl(api) { + const { data: response } = await axios.post('https://rpc-us.exsat.network/v1/chain/get_table_rows', { + json: true, + code: "custody.xsat", + scope: "custody.xsat", + table: "custodies", + limit: "100", + show_payer: true + }); + + const owners = response.rows.map(row => row.data.btc_address); + return sumTokens({ owners }); +} + +module.exports = { + methodology: 'TVL is based on Bitcoin addresses in the exSat credit staking contract, summing their associated Bitcoin balances.', + start: 1729684800, + bitcoin: { + tvl, + }, +}; From 5c01f4f6775f2ad9da8d51bd7891b54ce99b830e Mon Sep 17 00:00:00 2001 From: bitcoincashautist <80100588+A60AB5450353F40E@users.noreply.github.com> Date: Mon, 4 Nov 2024 07:54:30 +0100 Subject: [PATCH 0916/1768] AnyHedge - fix data cut-off and update hallmarks (#12143) --- projects/anyhedge/index.js | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/projects/anyhedge/index.js b/projects/anyhedge/index.js index a53a8e2d9c..4b03fd90e8 100644 --- a/projects/anyhedge/index.js +++ b/projects/anyhedge/index.js @@ -23,15 +23,15 @@ async function tvl({timestamp}) { // tvl data lags by contract duration since contracts are secret until settled // so tvl at current time will always be 0, and only later when contracts are revealed // can it be calculated in retrospect and stats back-filled - // for this reason, we cut-off the data at (today-31d) - const lastTimestamp = Math.floor(new Date().getTime() / 1000 - 31*86400); + // for this reason, we cut-off the data at (today-91d) + const lastTimestamp = Math.floor(new Date().getTime() / 1000 - 91*86400); if (timestamp > lastTimestamp) throw "Data for the date is incomplete, awaiting contract reveals." tvlAnyHedge = await getTVLAnyHedge(timestamp) - testDataSource = await getTVLAnyHedge(timestamp + 31*86400) + testDataSource = await getTVLAnyHedge(timestamp + 91*86400) - // if we're querying data for `timestamp`, a row for `timestamp+31d` should exist + // if we're querying data for `timestamp`, a row for `timestamp+91d` should exist if (testDataSource == null) throw "Data source hasn't been updated yet." @@ -47,20 +47,13 @@ async function tvl({timestamp}) { } module.exports = { - methodology: "Scrape the blockchain and filter for spent transaction outputs that match the contract's input script template. Aggregate them to compute TVL. The TVL data lags by contract duration since contracts are secret until settled. So, TVL at the current time will always be 0 and can only be calculated in retrospect and stats back-filled when contracts are revealed. For this reason, the code cuts-off the data at 31 days ago. See here for more details: https://gitlab.com/0353F40E/anyhedge-stats/-/blob/master/readme.md", + methodology: "Scrape the blockchain and filter for spent transaction outputs that match the contract's input script template. Aggregate them to compute TVL. The TVL data lags by contract duration since contracts are secret until settled. So, TVL at the current time will always be 0 and can only be calculated in retrospect and stats back-filled when contracts are revealed. For this reason, the code cuts-off the data at 91 days ago. See here for more details: https://gitlab.com/0353F40E/anyhedge-stats/-/blob/master/readme.md", start: 1654787405, bitcoincash: { tvl }, hallmarks: [ - [1654787405, "First AnyHedge v0.11 Contract"], - [1663106400, "AnyHedge Alpha is live and available"], - [1666585080, "The BCH Bull (Beta) goes live"], - [1666785960, "Paytaca wallet's product live"], - [1680356040, "BCH Bull trials P2P contracts"], - [1681725240, "BCH Bull is released"], - [1683634380, "BCH Bull adds Achievements"], - [1686651480, "BCH Bull raise max contract to $100k"], - [1687330080, "BCH Bull raise max leverage to 7.77x"], - [1703054100, "BCH Bull enables Early Settlements"], + [1681725240, "BCH Bull public release (AnyHedge v0.11 contract)"], + [1703054100, "BCH Bull enables early settlement feture"], + [1720612800, "BCH Bull enables leveraged shorting feature (AnyHedge v0.12 contract)"] ] }; From a216132fc68f1ce89588ba777c9ee6c9051bdce4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 5 Nov 2024 06:57:40 +0100 Subject: [PATCH 0917/1768] track g8keep.xyz --- projects/g8keep/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/g8keep/index.js diff --git a/projects/g8keep/index.js b/projects/g8keep/index.js new file mode 100644 index 0000000000..c41239e858 --- /dev/null +++ b/projects/g8keep/index.js @@ -0,0 +1,20 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const { sumUnknownTokens } = require('../helper/unknownTokens') + +const config = { + base: { factory: '0x3C0B43867Cd04fEdfD6a95497e5ea7e3aFF8cCaE', fromBlock: 21977940 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event TokenDeployed (address indexed token, address indexed pair, address indexed deployer, string symbol)', fromBlock, }) + const tokens = logs.map(log => log.pair) + return sumUnknownTokens({api, owner: factory, tokens, useDefaultCoreAssets: true, lps: tokens}) + } + } +}) + +module.exports.doublecounted = true +module.exports.misrepresentedTokens = true \ No newline at end of file From 87f50881f8202cad67025be0f8c61189be2441e4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 5 Nov 2024 07:16:57 +0100 Subject: [PATCH 0918/1768] track pearl staking #12163 --- projects/pearl-v2/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/pearl-v2/index.js b/projects/pearl-v2/index.js index 5e12421acd..d1a1ed5c33 100644 --- a/projects/pearl-v2/index.js +++ b/projects/pearl-v2/index.js @@ -1,5 +1,8 @@ const { uniV3Export } = require('../helper/uniswapV3') +const { staking } = require('../helper/staking') module.exports = uniV3Export({ - 'real': { factory: '0xeF0b0a33815146b599A8D4d3215B18447F2A8101', fromBlock: 33062,} -}) \ No newline at end of file + 'real': { factory: '0xeF0b0a33815146b599A8D4d3215B18447F2A8101', fromBlock: 33062, }, +}) + +module.exports.real.staking = staking('0x7f8F92C2446E044af45DCf15476Bc931Fd1d0020', '0xB08F026f8a096E6d92eb5BcbE102c273A7a2d51C') \ No newline at end of file From bf66aa6e72eaf24eef4be666d570939762716579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kre=C5=A1imir=20Klas?= Date: Tue, 5 Nov 2024 07:18:08 +0100 Subject: [PATCH 0919/1768] kai: track native usdc vault (#12162) --- projects/kai/index.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/projects/kai/index.js b/projects/kai/index.js index 6cccb37455..cd9c63b41d 100644 --- a/projects/kai/index.js +++ b/projects/kai/index.js @@ -1,11 +1,11 @@ const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui"); -const UsdcVault = { +const wUsdcVault = { id: '0x7a2f75a3e50fd5f72dfc2f8c9910da5eaa3a1486e4eb1e54a825c09d82214526', tType: ADDRESSES.sui.USDC } -const UsdtVault = { +const wUsdtVault = { id: '0x0fce8baed43faadf6831cd27e5b3a32a11d2a05b3cd1ed36c7c09c5f7bcb4ef4', tType: ADDRESSES.sui.USDT } @@ -13,9 +13,13 @@ const SuiVault = { id: '0x16272b75d880ab944c308d47e91d46b2027f55136ee61b3db99098a926b3973c', tType: ADDRESSES.sui.SUI } +const UsdcVault = { + id: '0x5663035df5f403ad5a015cc2a3264de30370650bc043c4dab4d0012ea5cb7671', + tType: ADDRESSES.sui.USDC_CIRCLE +} async function tvl(api) { - const vaults = [UsdcVault, UsdtVault, SuiVault] + const vaults = [wUsdcVault, wUsdtVault, SuiVault, UsdcVault] const vaultObjs = await sui.getObjects(vaults.map(v => v.id)) for (let i = 0; i < vaults.length; i++) { From 4b35b3b11d2a3e2acb35f2b93d021132b9112a82 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Mon, 4 Nov 2024 23:18:25 -0700 Subject: [PATCH 0920/1768] Feat: new markets: Taiko, BSC-WBTC (#12161) --- projects/avalon-finance/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 97a6c59e8f..f7a293d4fc 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -10,6 +10,7 @@ const mainMarket = { scroll: aaveExports('', '0xFBb77A68ee35e7902F1ABE0Bd34B263023e90c70', undefined, ['0x18cbe70602Ee17f79D56971F685E9EaF49DA53F2'], { v3: true }), iotex: aaveExports('', '', undefined, ['0xBa77520d38953BF6a8395D118CfF714Ed672533f'], { v3: true }), bsquared: aaveExports('', '', undefined, ['0x4Ea93E846b8C6E7b3D5a5BEDF4fe6B8AED58FCEe'], { v3: true }), + taiko: aaveExports('', '', undefined, ['0xF6Aa54a5b60c324602C9359E8221423793e5205d'], { v3: true }), } const innovativeMarket = { @@ -45,6 +46,8 @@ const stbtcMarkets = { const otherProtocolTokenMarkets = { // ETH - Swell BTC ethereum: aaveExports('', '0x3975BE5E668b189b8Ac9049B96A9D9561c4F5273', undefined, ['0x87Ed94868f6fbaA834Db81a1C5854c445caCaB67'], { v3: true }), + // BSC - WBTC + bsc: aaveExports('', '', undefined, ['0xA34F1a928024E3609C8968fEA90C747e8D1fA20f'], { v3: true }), } module.exports = mergeExports( From 929901d621da42cc24aeed5b597f7ad95a6699d9 Mon Sep 17 00:00:00 2001 From: Cryptonomy Date: Tue, 5 Nov 2024 01:26:33 -0500 Subject: [PATCH 0921/1768] Create index.js for Hliquity Protocol (#12159) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 1 + projects/hliquity/index.js | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 projects/hliquity/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 19b74251ea..61c4584a4a 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -137,6 +137,7 @@ const fixBalancesTokens = { '0x000000000000000000000000000000000022d6de': { coingeckoId: 'karate-combat', decimals: 8}, '0x00000000000000000000000000000000000cba44': { coingeckoId: 'hbarx', decimals: 8 }, '0x00000000000000000000000000000000000b2ad5': { coingeckoId: 'saucerswap', decimals: 6 }, + '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, '0x0000000000000000000000000000000000163b5a': { coingeckoId: 'hedera-hashgraph', decimals: 8 }, '0x000000000000000000000000000000000038b3db': { coingeckoId: 'dovu-2', decimals: 8 }, '0x00000000000000000000000000000000000ec585': { coingeckoId: 'headstarter', decimals: 8 }, diff --git a/projects/hliquity/index.js b/projects/hliquity/index.js new file mode 100644 index 0000000000..737f36cdf7 --- /dev/null +++ b/projects/hliquity/index.js @@ -0,0 +1,13 @@ +const { nullAddress, sumTokens2 } = require("../helper/unwrapLPs"); + +const ACTIVE_POOL_CONTRACT = '0x00000000000000000000000000000000005c9f0b'; +async function tvl(api) { + await sumTokens2({ api, owner: ACTIVE_POOL_CONTRACT, token: nullAddress }) +} + +module.exports = { + methodology: 'the amount of locked hbar in the HLiquity protocol', + hedera: { + tvl, + } +}; From 601612897e8707b131926fcfff6e23b13f41679e Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 5 Nov 2024 07:27:06 +0100 Subject: [PATCH 0922/1768] Fix: Jarvis (#12158) --- projects/jarvis/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/jarvis/index.js b/projects/jarvis/index.js index e246481a14..4bdd6b4dd4 100644 --- a/projects/jarvis/index.js +++ b/projects/jarvis/index.js @@ -75,9 +75,11 @@ async function tvl(api) { ].map(i => i.toLowerCase()) const calls = liquidityPools.filter(i => !blacklistedPools.includes(i.toLowerCase())) const collateralTokens = await api.multiCall({ abi: abi.collateralToken, calls }) - const totalCollateralAmounts = await api.multiCall({ abi: abi.totalCollateralAmount, calls }) + const totalCollateralAmounts = await api.multiCall({ abi: abi.totalCollateralAmount, calls, permitFailure: true }) collateralTokens.forEach((data, i) => { - api.add(data, totalCollateralAmounts[i].totalCollateral) + const totalCollateralAmount = totalCollateralAmounts[i] + if (!totalCollateralAmount) return + api.add(data, totalCollateralAmount.totalCollateral) }) } else if (version === 5) { // Get balances of every LiquidityPool and SynthToken Contracts From 894fefccedabce0ca730c703696bff89d91e7d16 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 5 Nov 2024 07:27:59 +0100 Subject: [PATCH 0923/1768] Fix: Origami (#12157) --- projects/origami/index.js | 52 ++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/projects/origami/index.js b/projects/origami/index.js index e136642cc2..2401bcb86a 100644 --- a/projects/origami/index.js +++ b/projects/origami/index.js @@ -6,6 +6,8 @@ const GRAPH_URLS = { arbitrum: sdk.graph.modifyEndpoint('https://subgraph.satsuma-prod.com/a912521dd162/templedao/origami-arbitrum/api'), // arbitrum } +const osUSDS = '0x0f90a6962e86b5587b4c11ba2b9697dc3ba84800' + module.exports = { doublecounted: true, } @@ -21,16 +23,42 @@ async function tvl(api) { const levVaults = investmentVaults.filter(isLeveraged).map(v => v.id) const nonLevVaults = investmentVaults.filter(v => !isLeveraged(v)).map(v => v.id) - let nonLevTokens = await api.multiCall({ abi: 'address:reserveToken', calls: nonLevVaults }) - nonLevTokens = await api.multiCall({ abi: 'address:baseToken', calls: nonLevTokens }) - const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: nonLevVaults }) - const supplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: nonLevVaults }) - const reserves = await api.multiCall({ abi: 'uint256:reservesPerShare', calls: nonLevVaults }) - const bals = supplies.map((supply, idx) => reserves[idx] * supply / 10 ** decimals[idx]) - api.add(nonLevTokens, bals) - - const levReserveTokens = await api.multiCall({ calls: levVaults, abi: 'address:reserveToken' }) - const assetsAndLiabilities = await api.multiCall({ abi: 'function assetsAndLiabilities() external view returns (uint256 assets,uint256 liabilities,uint256 ratio)', calls: levVaults }) - const levBals = assetsAndLiabilities.map(({ assets, liabilities }) => assets - liabilities) - api.add(levReserveTokens, levBals) + const [decimals, supplies, reserves, rawNonLevTokens] = await Promise.all([ + api.multiCall({ abi: 'uint8:decimals', calls: nonLevVaults, permitFailure: true }), + api.multiCall({ abi: 'uint256:totalSupply', calls: nonLevVaults, permitFailure: true }), + api.multiCall({ abi: 'uint256:reservesPerShare', calls: nonLevVaults, permitFailure: true }), + api.multiCall({ abi: 'address:reserveToken', calls: nonLevVaults, permitFailure: true }) + ]) + + await Promise.all(nonLevVaults.map(async (_vault, i) => { + const decimal = decimals[i] + const supply = supplies[i] + const reserve = reserves[i] + const rawNonLevToken = rawNonLevTokens[i] + if (!decimals || !supply || !reserve || !rawNonLevToken) return + const nonLevToken = await api.call({ abi: 'address:baseToken', target: rawNonLevToken }) + const bal = reserve * supply / 10 ** decimal + api.add(nonLevToken, bal) + })) + + const [levReserveTokens, assetsAndLiabilities] = await Promise.all([ + api.multiCall({ calls: levVaults, abi: 'address:reserveToken', permitFailure: true }), + api.multiCall({ abi: 'function assetsAndLiabilities() external view returns (uint256 assets,uint256 liabilities,uint256 ratio)', calls: levVaults, permitFailure: true }) + ]) + + levVaults.forEach((_vault, i) => { + const levReserveToken = levReserveTokens[i] + const assetsAndLiability = assetsAndLiabilities[i] + if(!levReserveToken || !assetsAndLiability) return + const levBal = assetsAndLiability.assets - assetsAndLiability.liabilities + api.add(levReserveToken, levBal) + }) + + if (api.chain ==='ethereum') { + const [asset, totalAssets] = await Promise.all([ + api.call({ target: osUSDS, abi: 'address:asset' }), + api.call({ target: osUSDS, abi: 'uint256:totalAssets' }) + ]) + api.add(asset, totalAssets) + } } From ade55ba3bc824ee04733f6e3e690c4c1c1cfac03 Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:04:02 +0530 Subject: [PATCH 0924/1768] added new pool (#12155) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index 11557856f8..fa3f7404d6 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -115,6 +115,14 @@ const ALPHAFI_CETUS_TVL_IDS = [ token0Type: ADDRESSES.sui.BUCK, token1Type: ADDRESSES.sui.SUI }, + // fud sui + { + poolID: "0x005a2ebeb982a1e569a54795bce1eeb4d88900b674440f8487c2846da1706182", + cetusPoolID: "0xfc6a11998f1acf1dd55acb58acd7716564049cfd5fd95e754b0b4fe9444f4c9d", + investorID: "0xaa17ff01024678a94381fee24d0021a96d4f3a11855b0745facbb5d2eb9df730", + token0Type: "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD", + token1Type: ADDRESSES.sui.SUI + }, ] const ALPHAFI_NAVI_TVL_IDS = [ From 39f6c605c2b5ce10cec079655d5ccd291543b3b4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 5 Nov 2024 07:45:00 +0100 Subject: [PATCH 0925/1768] fix strudel --- projects/strudel.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/projects/strudel.js b/projects/strudel.js index 5a2896b567..98b70a04e9 100644 --- a/projects/strudel.js +++ b/projects/strudel.js @@ -1,9 +1,4 @@ -async function tvl(api) { - const BTC = '0xe1406825186D63980fd6e2eC61888f7B91C4bAe4' - const supply = await api.call({ abi: 'erc20:totalSupply', target: BTC }) - api.addCGToken('bitcoin', supply/1e18) -} - module.exports = { - ethereum: { tvl }, + ethereum: { tvl: () => ({}) }, + // deadFrom: "2022-02-31", } From 289d7a09e97a03b44b432a1c056984d87e55dc16 Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:13:10 +0800 Subject: [PATCH 0926/1768] add config (#12165) --- projects/kiloex/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index 2cd96c4275..057ded5fa8 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -59,6 +59,8 @@ module.exports = { ADDRESSES.base.USDC, //USDC '0x3b86ad95859b6ab773f55f8d94b4b9d443ee931f', //SolvBTC '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf',//cbBTC + '0x04c0599ae5a44757c0af6f9ec3b93da8976c150a',//weETH + '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452',//wstETH ] }) }, }; From 762595106ab814efc6f74dab1d630a5d3437b314 Mon Sep 17 00:00:00 2001 From: peroxy Date: Tue, 5 Nov 2024 12:03:58 +0100 Subject: [PATCH 0927/1768] Update kamino-sdk package (#12168) --- projects/kamino/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/kamino/api.js b/projects/kamino/api.js index 29a30ff912..c0c58e761c 100644 --- a/projects/kamino/api.js +++ b/projects/kamino/api.js @@ -1,4 +1,4 @@ -const { Kamino } = require('@hubbleprotocol/kamino-sdk') +const { Kamino } = require('@kamino-finance/kliquidity-sdk') const { getConnection, } = require('../helper/solana') async function tvl() { From f58250d81fe8bacbd8bec13ee7dee134e77f130e Mon Sep 17 00:00:00 2001 From: Rozalenok Mikhail <32734898+deathwing00000@users.noreply.github.com> Date: Tue, 5 Nov 2024 18:38:14 +0700 Subject: [PATCH 0928/1768] MORE Markets adapter added (#12167) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 2 +- projects/more-markets/index.js | 51 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 projects/more-markets/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 61c4584a4a..be9aca5dcc 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -83,7 +83,7 @@ const fixBalancesTokens = { }, flow: { '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e': { coingeckoId: 'flow', decimals: 18 }, - '0x1b97100ea1d7126c4d60027e231ea4cb25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, + '0x1b97100eA1D7126C4d60027e231EA4CB25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, [ADDRESSES.milkomeda.BNB]: { coingeckoId: 'usd-coin', decimals: 6 }, }, core: { diff --git a/projects/more-markets/index.js b/projects/more-markets/index.js new file mode 100644 index 0000000000..8fe40b7574 --- /dev/null +++ b/projects/more-markets/index.js @@ -0,0 +1,51 @@ +const { getLogs2 } = require("../helper/cache/getLogs") +const { sumTokens2 } = require('../helper/unwrapLPs') + +const abi = { + "idToMarketParams": "function idToMarketParams(bytes32 Id) returns (bool isPremiumMarket, address loanToken, address collateralToken, address oracle, address irm, uint256 lltv, address creditAttestationService, uint96 irxMaxLltv, uint256[] categoryLltv)", + "market": "function market(bytes32 input) returns (uint128 totalSupplyAssets, uint128 totalSupplyShares, uint128 totalBorrowAssets, uint128 totalBorrowShares, uint128 lastUpdate, uint128 fee, uint256 premiumFee)" +} + +module.exports = { + methodology: `Collateral (supply minus borrows) in the balance of the MORE Markets contracts`, +}; + +const config = { + flow: { + moreMarkets: "0x94A2a9202EFf6422ab80B6338d41c89014E5DD72", + fromBlock: 2871764, + }, +}; + +Object.keys(config).forEach((chain) => { + const { moreMarkets, fromBlock, } = config[chain]; + module.exports[chain] = { + tvl: async (api) => { + const marketIds = await getMarkets(api); + const tokens = (await api.multiCall({ target: moreMarkets, calls: marketIds, abi: abi.idToMarketParams, })) + .map((i) => [i.collateralToken, i.loanToken]) + .flat(); + return sumTokens2({ api, owner: moreMarkets, tokens, }); + }, + borrowed: async (api) => { + const marketIds = await getMarkets(api); + const marketInfo = await api.multiCall({ target: moreMarkets, calls: marketIds, abi: abi.idToMarketParams, }); + const marketData = await api.multiCall({ target: moreMarkets, calls: marketIds, abi: abi.market, }); + marketData.forEach((i, idx) => { + api.add(marketInfo[idx].loanToken, i.totalBorrowAssets); + }); + return sumTokens2({ api }) + }, + }; + + async function getMarkets(api) { + const logs = await getLogs2({ + api, + target: moreMarkets, + eventAbi: "event CreateMarket(bytes32 indexed id, (bool,address,address,address,address,uint256,address,uint96,uint256[]) marketParams)", + fromBlock, + }); + return logs.map((i) => i.id); + } + +}) \ No newline at end of file From c816c18b725c883976242b246f750670e02dfe8b Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 5 Nov 2024 14:32:32 +0100 Subject: [PATCH 0929/1768] Fix: Xswap-v3 (#12170) --- projects/xspswap-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/xspswap-v3/index.js b/projects/xspswap-v3/index.js index 9b74be6cdd..b1d5865bf1 100644 --- a/projects/xspswap-v3/index.js +++ b/projects/xspswap-v3/index.js @@ -2,5 +2,5 @@ const { uniV3Export } = require('../helper/uniswapV3') const factory = '0x30F317A9EC0f0D06d5de0f8D248Ec3506b7E4a8A' module.exports = uniV3Export({ - xdc: { factory, fromBlock: 59782067, methodology: 'TVL accounts for the liquidity on all AMM pools taken from the factory contract', }, + xdc: { factory, fromBlock: 59782067, methodology: 'TVL accounts for the liquidity on all AMM pools taken from the factory contract', permitFailure: true }, }) \ No newline at end of file From 0bdd1c3131ba44e370564fe2b6bb9fd305e0b5ab Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:52:40 +0000 Subject: [PATCH 0930/1768] use eslint version from package.json --- .github/workflows/test.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6509cb7efa..69b6f38f34 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,4 +56,6 @@ jobs: done - name: Run ESLint - uses: eslint/github-action@v0 + run: | + npm ci + npm run lint From e1811ab7ea532aa5bf9b3e0f45c838f8cf1c6b6b Mon Sep 17 00:00:00 2001 From: Da Sichuan <86024678+DaSichuan@users.noreply.github.com> Date: Tue, 5 Nov 2024 14:55:56 -0800 Subject: [PATCH 0931/1768] Change name of spring sui to springsui (#12175) --- projects/{spring-sui => springsui}/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename projects/{spring-sui => springsui}/index.js (91%) diff --git a/projects/spring-sui/index.js b/projects/springsui/index.js similarity index 91% rename from projects/spring-sui/index.js rename to projects/springsui/index.js index 9b31771faa..72797930af 100644 --- a/projects/spring-sui/index.js +++ b/projects/springsui/index.js @@ -9,7 +9,7 @@ async function tvl() { } module.exports = { - methodology: "Calculates the amount of SUI staked in Spring Sui liquid staking contracts.", + methodology: "Calculates the amount of SUI staked in SpringSui liquid staking contracts.", sui: { tvl, } From c9ca10f26b58a32a343b1af555ef0be797fefaa6 Mon Sep 17 00:00:00 2001 From: ratex-tony Date: Wed, 6 Nov 2024 14:55:30 +0800 Subject: [PATCH 0932/1768] feat: add bnsol vaults (#12177) --- projects/rate-x/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/rate-x/index.js b/projects/rate-x/index.js index 760fbb795c..f4c264872e 100644 --- a/projects/rate-x/index.js +++ b/projects/rate-x/index.js @@ -10,7 +10,9 @@ async function tvl(api) { 'BpYbhwDZGpPvcKw3cSh5f9UqRaHfuxgz3avW9g324LUz', '4nyfJ4JBsRJLij7VGCVUeHwKSLAAku66ptJamoodY29L', '6opMSfkHgWsvG5KmZo8y2DuShaDHwXfB6VUuTx6W4Age', - '4Ejjk5w7HAWvmXYT57s5uwn8rs7i61nbpcTRQ9ABB11M' + '4Ejjk5w7HAWvmXYT57s5uwn8rs7i61nbpcTRQ9ABB11M', + '4xq7VjrJCU2Smk5JcJToik5hiEJ8RCvECReePP8Jg6q8', + 'B2YeVM6Kf3SKYLuH2nfucCmZwy8KJcQpd9e9JEuwv9mt' ], balances: api.getBalances() }) From c14dc7bd5ca51be9facaaea9983d637ceb019bfb Mon Sep 17 00:00:00 2001 From: Aqualoan Date: Wed, 6 Nov 2024 15:59:33 +0900 Subject: [PATCH 0933/1768] Added Aqualoan (#12171) Co-authored-by: techaqualoan --- projects/aqualoan/index.js | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 projects/aqualoan/index.js diff --git a/projects/aqualoan/index.js b/projects/aqualoan/index.js new file mode 100644 index 0000000000..9ffc6fb251 --- /dev/null +++ b/projects/aqualoan/index.js @@ -0,0 +1,44 @@ +const abi = { + getReserveTokensAddresses: "function getReserveTokensAddresses(address asset) view returns (address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress)", + getAllReservesTokens: "function getAllReservesTokens() view returns ((string symbol, address tokenAddress)[])", + getReserveData: "function getReserveData(address asset) view returns (uint256 unbacked, uint256 accruedToTreasuryScaled, uint256 totalAToken, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", +}; + +const CONFIG = { + bsc: ['0xDc33eAA50B8707f791478Cec324e451E20FDa7ed'] +}; + +const fetchReserveData = async (api, poolDatas, isBorrowed) => { + const reserveTokens = await api.multiCall({ calls: poolDatas, abi: abi.getAllReservesTokens }); + const calls = [] + + poolDatas.map((pool, i) => { + reserveTokens[i].forEach(({ tokenAddress }) => calls.push({ target: pool, params: tokenAddress })); + }); + const reserveData = await api.multiCall({ abi: isBorrowed ? abi.getReserveData : abi.getReserveTokensAddresses, calls, }) + const tokensAndOwners = [] + reserveData.forEach((data, i) => { + const token = calls[i].params + if (isBorrowed) { + api.add(token, data.totalVariableDebt) + api.add(token, data.totalStableDebt) + } else + tokensAndOwners.push([token, data.aTokenAddress]) + }) + + if (isBorrowed) return api.getBalances() + return api.sumTokens({ tokensAndOwners }) +} + +module.exports.methodology = "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending." + +Object.keys(CONFIG).forEach((chain) => { + const poolDatas = CONFIG[chain]; + module.exports[chain] = { + tvl: (api) => fetchReserveData(api, poolDatas), + borrowed: (api) => fetchReserveData(api, poolDatas, true), + }; +}); + +module.exports.hallmarks = [ +] From ed9e9811e4cc221d1d64b25ad91c6c9504d48ec5 Mon Sep 17 00:00:00 2001 From: Kylix Afonso <59728053+kylixafonso@users.noreply.github.com> Date: Wed, 6 Nov 2024 06:59:56 +0000 Subject: [PATCH 0934/1768] fix: add USDM token mapping (#12176) --- projects/liqwid/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/liqwid/index.js b/projects/liqwid/index.js index 9a251c1e71..020298cf5e 100644 --- a/projects/liqwid/index.js +++ b/projects/liqwid/index.js @@ -62,7 +62,7 @@ const tokenMapping = { Ada: 'lovelace', DJED: '8db269c3ec630e06ae29f74bc39edd1f87c819f1056206e879a1cd61446a65644d6963726f555344', DAI: 'dai', - + USDM: 'c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d' } const getToken = (market) => tokenMapping[market.id] ?? market.asset.currencySymbol + toHex(market.asset.name) From d33ca5b305a95d44f4ce3cbb74b8a257f17fb944 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 6 Nov 2024 11:00:37 +0400 Subject: [PATCH 0935/1768] add stETH restaking (#12172) Co-authored-by: Evgeny Rozanov --- projects/accumulated-finance/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/accumulated-finance/index.js b/projects/accumulated-finance/index.js index 8779d0c22f..f844b04379 100644 --- a/projects/accumulated-finance/index.js +++ b/projects/accumulated-finance/index.js @@ -67,7 +67,16 @@ const config = { { "sapphire": { "LST": "0xed57966f1566de1a90042d07403021ea52ad4724" - }} + } + } + ], + "stETH": [ + { + "ethereum": { + "baseToken": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84", + "LST": "0x684d7fd1067ed8e9686e6fd764d048b9bf92dfa9" + } + }, ] } From c64f1848473de0d01769373e60c1a6ccfd867c92 Mon Sep 17 00:00:00 2001 From: monprotocol <163447238+monprotocol@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:19:25 +0300 Subject: [PATCH 0936/1768] added monprotocol adapter (#12183) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/monprotocol/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/monprotocol/index.js diff --git a/projects/monprotocol/index.js b/projects/monprotocol/index.js new file mode 100644 index 0000000000..a0aa6bdbca --- /dev/null +++ b/projects/monprotocol/index.js @@ -0,0 +1,15 @@ +const { staking } = require('../helper/staking') +const tokenAddress = '0xc555D625828c4527d477e595fF1Dd5801B4a600e'; +const stakingContracts = [ + '0x65A8b32bc4dE5E0156DBa85Ce615d9ef8ea59780', + '0xd0c40b774ecfBc7B0632d23F871Cc0E523aad8F3', + '0xa305A8C63a5305Cc2D4d58c41F1d7C662C95475b', + '0x57136E05e6b1F502bd56B5439fCC1039A8250ED2' +] +module.exports = { + ethereum: { + tvl: () => ({}), + staking: staking(stakingContracts, tokenAddress), + }, + methodology: 'Counts the balance of staked tokens in the staking, claims, and rewards registry.', +}; From 77cba4675765a196092e5e63329a5f2907c6d73a Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:19:49 +0100 Subject: [PATCH 0937/1768] Add ARB, ETH Arb and SolvBTC assets on Folks Finance xChain (#12182) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/folks-xchain/constants.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/projects/folks-xchain/constants.js b/projects/folks-xchain/constants.js index 8efed9a4ab..efaf73e65d 100644 --- a/projects/folks-xchain/constants.js +++ b/projects/folks-xchain/constants.js @@ -30,9 +30,14 @@ const HubPools = { tokenAddress: ADDRESSES.avax.BTC_b, chainPoolAddress: '0xef7a6EBEDe2ad558DB8c36Df65365b209E5d57dC', }, + { // SolvBTC + poolAddress: "0x307bCEC89624660Ed06C97033EDb7eF49Ab0EB2D", + tokenAddress: '0xbc78D84Ba0c46dFe32cf2895a19939c86b81a777', + }, ], 'ethereum': [ // excluding USDC cause bridged + // excluding SolvBTC cause bridged { // ETH_eth poolAddress: "0xB6DF8914C084242A19A4C7fb15368be244Da3c75", tokenAddress: ADDRESSES.null, @@ -46,7 +51,8 @@ const HubPools = { ], 'base': [ // excluding USDC cause bridged - { // ETH_base + // excluding SolvBTC cause bridged + { // ETH_base poolAddress: "0x51958ed7B96F57142CE63BB223bbd9ce23DA7125", tokenAddress: ADDRESSES.null, chainPoolAddress: '0xe3B0e4Db870aA58A24f87d895c62D3dc5CD05883', @@ -58,7 +64,8 @@ const HubPools = { }, ], 'bsc': [ - { // BNB + // excluding SolvBTC cause bridged + { // BNB poolAddress: "0x89970d3662614a5A4C9857Fcc9D9C3FA03824fe3", tokenAddress: ADDRESSES.null, chainPoolAddress: '0x5f2F4771B7dc7e2F7E9c1308B154E1e8957ecAB0', @@ -73,6 +80,20 @@ const HubPools = { tokenAddress: ADDRESSES.bsc.BTCB, chainPoolAddress: '0x12Db9758c4D9902334C523b94e436258EB54156f', }, + ], + 'arbitrum': [ + // excluding USDC cause bridged + // excluding SolvBTC cause bridged + { // ETH_arb + poolAddress: "0x44E0d0809AF8Ee37BFb1A4e75D5EF5B96F6346A3", + tokenAddress: ADDRESSES.null, + chainPoolAddress: '0x37d761883a01e9F0B0d7fe59EEC8c21D94393CDD', + }, + { // ARB + poolAddress: "0x1177A3c2CccDb9c50D52Fc2D30a13b2c3C40BCF4", + tokenAddress: ADDRESSES.arbitrum.ARB, + chainPoolAddress: '0x1b2a8d56967d00700DD5C94E27B1a116a1deF8Df', + }, ] } From 2c39e55487cf6478f7f5aa1e02607f7e94d2df5b Mon Sep 17 00:00:00 2001 From: SeanTuring Date: Wed, 6 Nov 2024 18:20:33 +0800 Subject: [PATCH 0938/1768] add exsat bridge adapter (#12179) --- projects/exsat/index.js | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 projects/exsat/index.js diff --git a/projects/exsat/index.js b/projects/exsat/index.js new file mode 100644 index 0000000000..200768838d --- /dev/null +++ b/projects/exsat/index.js @@ -0,0 +1,46 @@ +const axios = require('axios'); +const { sumTokens } = require("../helper/chain/bitcoin"); +const { getConfig } = require('../helper/cache'); + +async function tvl(api) { + const config = await getConfig('exsat', 'https://raw.githubusercontent.com/exsat-network/exsat-defillama/refs/heads/main/bridge-bitcoin.json'); + const custody_addresses = config['custody_addresses']; + const custody_ids = config['custody_ids']; + const owners = [...custody_addresses]; + + for (let custody_id of custody_ids) { + let lower_bound = null; + let hasMore = true; + + while (hasMore) { + const { data: response } = await axios.post('https://rpc-us.exsat.network/v1/chain/get_table_rows', { + "json": true, + "code": "brdgmng.xsat", + "scope": custody_id, + "table": "addrmappings", + "lower_bound": lower_bound, + "upper_bound": null, + "index_position": 1, + "key_type": "", + "limit": "100", + "reverse": false, + "show_payer": true + }); + + const addrs = response.rows.map(row => row.data.btc_address); + owners.push(...addrs); + + hasMore = response.more; + lower_bound = response.next_key; + } + } + + return sumTokens({ owners }); +} + +module.exports = { + methodology: 'TVL for the exSat Bridge represents the total balance in custody BTC addresses, reflecting BTC assets bridged to the exSat network.', + bitcoin: { + tvl, + }, +}; From 2bac27d971c27210a101446a2f155b11e3438adc Mon Sep 17 00:00:00 2001 From: sofa-org <161308389+sofa-org@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:34:45 +0800 Subject: [PATCH 0939/1768] add okx earn vaults (#12181) --- projects/sofa-org/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/sofa-org/index.js b/projects/sofa-org/index.js index 0fb00932e9..9f38c147d1 100644 --- a/projects/sofa-org/index.js +++ b/projects/sofa-org/index.js @@ -39,6 +39,11 @@ const config = { '0x8F9259a355933737F8F11f95d32460eCd5ED0706', '0x3AbC7053ec29e26c1429195fd971F280422ecA80', '0x071E0C2BE2b16c8B00173c6535eF8331b8e1feeD', + // okx + '0xe483d580664cd72B0A8cae0D65EFfA6587bd2263', + '0x21f759Bcb31739032A00b37e3560a216AE52eFDC', + '0x3191a0008415dEB5c5161C4B394Ec46C8C703f8c', + '0xC9Aa266e2E50EC2474cD881566845480F8daE931', ], }, arbitrum: { From f5da14efd3a0be075302fd740c5ab5307ec2d49c Mon Sep 17 00:00:00 2001 From: MethLab <167086493+MethLabxyz@users.noreply.github.com> Date: Wed, 6 Nov 2024 16:15:57 +0530 Subject: [PATCH 0940/1768] Added new Methlab contracts (#12180) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/methlab-xyz/index.js | 60 +++++++++++++++-------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/projects/methlab-xyz/index.js b/projects/methlab-xyz/index.js index 4867d11164..12dffbc60e 100644 --- a/projects/methlab-xyz/index.js +++ b/projects/methlab-xyz/index.js @@ -1,48 +1,38 @@ -const { getLogs } = require('../helper/cache/getLogs') +const { getLogs2 } = require('../helper/cache/getLogs') const { mergeExports } = require('../helper/utils') const { uniV3Export } = require('../helper/uniswapV3') + + +const abi = { + evt_Strategy: 'event StrategyStatusChange (address indexed strategy, bool status)', + evt_VaultAdded: 'event VaultAdded (address indexed vault)', + evt_LoanAdded: 'event LoanAdded (address indexed vault, address indexed loan, address loanImplUsed)', + strategy_collToken: 'address:collToken', + strategy_borrowToken: 'address:borrowToken' +} + const config = { - mantle: { - factories: [{ target: '0x6Cc0c2D8F9533dFd2276337DdEaBBCEE9dd0747F', fromBlock: 51253051 },], - } + mantle: { factory: '0xB375DfF90F8dafeA50E2EA7a0666B426Ed786C5D', fromBlock: 69177970 } } Object.keys(config).forEach(chain => { - const { factories } = config[chain] + const { factory, fromBlock } = config[chain]; + module.exports[chain] = { tvl: async (api) => { - const vaults = [] - for (const { target, fromBlock, } of factories) { - const logs = await getLogs({ api, target, fromBlock, onlyArgs: true, eventAbi: 'event VaultAdded (address indexed vault)' }) - vaults.push(...logs.map(log => log.vault)) - } - const counters = await api.multiCall({ abi: abi.collectionCounter, calls: vaults }) - const callOwners = [] - const calls = [] - for (let i = 0; i < vaults.length; i++) { - const counter = counters[i] - for (let j = 0; j < +counter; j++) { - calls.push({ target: vaults[i], params: j }) - callOwners.push(vaults[i]) - } - } - const results = await api.multiCall({ abi: abi.collection, calls }) - const tokenSet = new Set() - results.forEach((result, i) => { - tokenSet.add(result.collToken) - tokenSet.add(result.borrowToken) - // tokensAndOwners.push([result.collToken, callOwners[i]]) - // tokensAndOwners.push([result.borrowToken, callOwners[i]]) - }) - return api.sumTokens({ owners: vaults, tokens: Array.from(tokenSet), blacklistedTokens: ['0x401307732d732dd3b05ac1138b8661c0f55830ea'] }) + const logArgs = { api, target: factory, fromBlock }; + + const strategies = (await getLogs2({ ...logArgs, eventAbi: abi.evt_Strategy, extraKey: 'strategy' })).map(log => log.strategy); + const vaults = (await getLogs2({ ...logArgs, eventAbi: abi.evt_VaultAdded, extraKey: 'vault' })).map(log => log.vault); + const loans = (await getLogs2({ ...logArgs, eventAbi: abi.evt_LoanAdded, extraKey: 'loan' })).map(log => log.loan); + + const collTokens = await api.multiCall({ abi: abi.strategy_collToken, calls: strategies }); + const borrowTokens = await api.multiCall({ abi: abi.strategy_borrowToken, calls: strategies }); + const tokens = collTokens.concat(borrowTokens) + return api.sumTokens({ tokens, owners: loans.concat(vaults), blacklistedTokens: ['0x401307732d732dd3b05ac1138b8661c0f55830ea'] }); } } -}) - -const abi = { - "collection": "function collection(uint256 collectionId) view returns ((address collToken, address borrowToken, uint256 minSingleLoanAmt, uint256 maxSingleLoanAmt, uint256 expiresAt, bool isEnabled, (uint256 strikePrice, uint256 interestRate, uint256 duration)[] intents))", - "collectionCounter": "uint256:collectionCounter", -} +}); module.exports = mergeExports([ module.exports, From 193f20f2b0f49b86a47f710c960a71de6c5fe574 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 6 Nov 2024 12:59:31 +0100 Subject: [PATCH 0941/1768] Feat: Bitcoin book (populate) (#12169) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/21-co/index.js | 7 +- projects/ainn-layer2/index.js | 24 +- projects/allo/index.js | 12 +- projects/avalance-btc/index.js | 9 +- projects/avalon-finance-cedefi/index.js | 10 +- projects/bedrock/index.js | 9 +- projects/bevm/index.js | 9 +- projects/biconomy-cex/index.js | 5 +- projects/bigone/index.js | 6 +- projects/binance-btc/index.js | 7 +- projects/bing-cex/index.js | 7 +- projects/bitfinex/index.js | 7 +- projects/bitget/index.js | 16 +- projects/bitmake/index.js | 11 +- projects/bitmark/index.js | 3 +- projects/bitmex/index.js | 6 +- projects/bitstable-finance/index.js | 8 +- projects/bitunix-cex/index.js | 7 +- projects/bitvenus/index.js | 10 +- projects/blofin-cex/index.js | 3 +- projects/boringdao/index.js | 4 +- projects/bsquared/index.js | 30 +- projects/btse/index.js | 8 +- projects/bybit/index.js | 12 +- projects/cake-defi/index.js | 3 +- projects/coindcx/index.js | 28 +- projects/coinex/index.js | 21 +- projects/coinsquare/index.js | 14 +- projects/coinw/index.js | 6 +- projects/crypto-com/index.js | 12 +- projects/deribit/index.js | 20 +- projects/entities/el-salvador.js | 3 +- projects/entities/fbi-dprk.js | 15 +- projects/entities/mt-gox.js | 13 +- projects/entities/silkroad-fbifunds.js | 13 +- projects/exsat-credit-staking/index.js | 22 +- projects/exsat/index.js | 41 +-- projects/fastex/index.js | 5 +- projects/fbtc/index.js | 29 +- projects/fire/index.js | 8 +- projects/flipster/index.js | 5 +- projects/garden/index.js | 5 +- projects/gate-io/index.js | 10 +- projects/hashkey-exchange/index.js | 8 +- projects/hashkey/index.js | 6 +- projects/helper/bitcoin-book/21Co.js | 4 + projects/helper/bitcoin-book/ainn-layer2.js | 20 + projects/helper/bitcoin-book/allo.js | 9 + projects/helper/bitcoin-book/avalanche-btc.js | 3 + projects/helper/bitcoin-book/avalon-cedefi.js | 8 + projects/helper/bitcoin-book/bevm.js | 4 + projects/helper/bitcoin-book/biconomy-cex.js | 3 + projects/helper/bitcoin-book/bigone.js | 4 + projects/helper/bitcoin-book/binance-btc.js | 3 + projects/helper/bitcoin-book/binance.js | 40 ++ projects/helper/bitcoin-book/bing-cex.js | 4 + projects/helper/bitcoin-book/bitfinex.js | 5 + projects/helper/bitcoin-book/bitget.js | 14 + projects/helper/bitcoin-book/bitmake.js | 4 + projects/helper/bitcoin-book/bitmark.js | 3 + .../bitcoin-book/bitmex.js} | 2 +- .../helper/bitcoin-book/bitstable-finance.js | 5 + projects/helper/bitcoin-book/bitunix-cex.js | 5 + projects/helper/bitcoin-book/bitvenus.js | 7 + projects/helper/bitcoin-book/blofin-cex.js | 5 + projects/helper/bitcoin-book/boringdao.js | 3 + projects/helper/bitcoin-book/bsquaredBRC20.js | 3 + projects/helper/bitcoin-book/bsquaredBTC.js | 20 + projects/helper/bitcoin-book/btse.js | 3 + projects/helper/bitcoin-book/bybit.js | 10 + projects/helper/bitcoin-book/cake-defi.js | 3 + projects/helper/bitcoin-book/coindcx.js | 26 ++ projects/helper/bitcoin-book/coinex.js | 19 + projects/helper/bitcoin-book/coinsquare.js | 12 + projects/helper/bitcoin-book/coinw.js | 4 + projects/helper/bitcoin-book/crypto-com.js | 10 + projects/helper/bitcoin-book/deribit.js | 16 + projects/helper/bitcoin-book/elSalvador.js | 3 + projects/helper/bitcoin-book/fastex.js | 3 + projects/helper/bitcoin-book/fbi-dprk.js | 9 + projects/helper/bitcoin-book/fetchers.js | 127 +++++++ projects/helper/bitcoin-book/fire.js | 6 + projects/helper/bitcoin-book/flipster.js | 3 + projects/helper/bitcoin-book/garden.js | 3 + projects/helper/bitcoin-book/gate-io.js | 8 + .../helper/bitcoin-book/hashkey-exchange.js | 6 + projects/helper/bitcoin-book/hashkey.js | 4 + projects/helper/bitcoin-book/hibt.js | 3 + projects/helper/bitcoin-book/hope-money.js | 7 + projects/helper/bitcoin-book/hotbit.js | 3 + projects/helper/bitcoin-book/huobi.js | 14 + projects/helper/bitcoin-book/imbtc.js | 3 + projects/helper/bitcoin-book/index.js | 173 +++++++++ projects/helper/bitcoin-book/india-covid.js | 3 + .../helper/bitcoin-book/klever-exchange.js | 5 + projects/helper/bitcoin-book/korbit.js | 23 ++ projects/helper/bitcoin-book/kraken-btc.js | 3 + projects/helper/bitcoin-book/kraken.js | 16 + projects/helper/bitcoin-book/kucoin.js | 114 ++++++ projects/helper/bitcoin-book/latoken.js | 5 + .../helper/bitcoin-book/lorenzo-enzoBTC.js | 4 + projects/helper/bitcoin-book/lorenzo.js | 32 ++ projects/helper/bitcoin-book/maskex.js | 4 + projects/helper/bitcoin-book/mento.js | 4 + projects/helper/bitcoin-book/merlin.js | 28 ++ projects/helper/bitcoin-book/mexc-cex.js | 3 + .../helper/bitcoin-book/mt-gox-entities.js | 7 + projects/helper/bitcoin-book/mt-gox.js | 81 ++++ projects/helper/bitcoin-book/multibit.js | 5 + projects/helper/bitcoin-book/nbx.js | 4 + projects/helper/bitcoin-book/nonkyc.js | 3 + projects/helper/bitcoin-book/obelisk.js | 7 + projects/helper/bitcoin-book/okcoin.js | 4 + projects/helper/bitcoin-book/okex.js | 186 ++++++++++ projects/helper/bitcoin-book/phemex.js | 3 + projects/helper/bitcoin-book/pionex-cex.js | 19 + projects/helper/bitcoin-book/probit.js | 5 + projects/helper/bitcoin-book/pstake-btc.js | 3 + projects/helper/bitcoin-book/robinhood.js | 5 + projects/helper/bitcoin-book/rosen-bridge.js | 3 + projects/helper/bitcoin-book/roup.js | 6 + .../silkroad-fbifunds-entities.js | 7 + projects/helper/bitcoin-book/silkroad.js | 7 + projects/helper/bitcoin-book/swissborg.js | 8 + projects/helper/bitcoin-book/toobit.js | 3 + projects/helper/bitcoin-book/tron-btc.js | 5 + projects/helper/bitcoin-book/wbtc.js | 341 +++++++++++++++++ projects/helper/bitcoin-book/woo-cex.js | 4 + projects/helper/bitcoin-book/xlink.js | 17 + projects/helper/bitcoin-book/xlinkLST.js | 3 + projects/helper/bitcoin-book/xrgb.js | 3 + projects/hibt/index.js | 5 +- projects/hope-money/index.js | 11 +- projects/hotbit/index.js | 3 +- projects/huobi/index.js | 17 +- projects/imbtc.js | 3 +- projects/klever-exchange/index.js | 7 +- projects/korbit/index.js | 25 +- projects/kraken-btc/index.js | 3 +- projects/kraken/index.js | 18 +- projects/kucoin/index.js | 116 +----- projects/latoken/index.js | 7 +- projects/lombard/index.js | 37 +- projects/lorenzo-enzoBTC/index.js | 15 +- projects/lorenzo/index.js | 39 +- projects/maskex/index.js | 5 +- projects/mento/index.js | 3 +- projects/merlin-l2/index.js | 34 +- projects/mexc-cex/index.js | 5 +- projects/mt-gox/index.js | 88 +---- projects/multibit/index.js | 7 +- projects/nbx/index.js | 6 +- projects/nonkyc/index.js | 5 +- projects/obelisk/index.js | 26 +- projects/okcoin/index.js | 6 +- projects/okex/index.js | 190 +--------- projects/phemex/index.js | 5 +- projects/pionex-cex/index.js | 21 +- projects/probit/index.js | 7 +- projects/pstake-btc/index.js | 9 +- projects/pumpbtc/index.js | 17 +- projects/robinhood/index.js | 7 +- projects/rosen-bridge/index.js | 3 +- projects/roup/index.js | 8 +- projects/silkroad-fbifunds/index.js | 13 +- projects/solv-btc-lst/index.js | 14 +- projects/swissborg/index.js | 10 +- projects/tbtc/index.js | 12 +- projects/toobit/index.js | 5 +- projects/treasury/india-covid-relief-fund.js | 7 +- projects/tron-btc/index.js | 10 +- projects/wbtc.js | 348 +----------------- projects/woo-cex/index.js | 8 +- projects/xlink-btc-lst/index.js | 10 +- projects/xlink/index.js | 23 +- projects/xrgb/index.js | 6 +- 176 files changed, 1844 insertions(+), 1536 deletions(-) create mode 100644 projects/helper/bitcoin-book/21Co.js create mode 100644 projects/helper/bitcoin-book/ainn-layer2.js create mode 100644 projects/helper/bitcoin-book/allo.js create mode 100644 projects/helper/bitcoin-book/avalanche-btc.js create mode 100644 projects/helper/bitcoin-book/avalon-cedefi.js create mode 100644 projects/helper/bitcoin-book/bevm.js create mode 100644 projects/helper/bitcoin-book/biconomy-cex.js create mode 100644 projects/helper/bitcoin-book/bigone.js create mode 100644 projects/helper/bitcoin-book/binance-btc.js create mode 100644 projects/helper/bitcoin-book/binance.js create mode 100644 projects/helper/bitcoin-book/bing-cex.js create mode 100644 projects/helper/bitcoin-book/bitfinex.js create mode 100644 projects/helper/bitcoin-book/bitget.js create mode 100644 projects/helper/bitcoin-book/bitmake.js create mode 100644 projects/helper/bitcoin-book/bitmark.js rename projects/{bitmex/bitcoin.json => helper/bitcoin-book/bitmex.js} (99%) create mode 100644 projects/helper/bitcoin-book/bitstable-finance.js create mode 100644 projects/helper/bitcoin-book/bitunix-cex.js create mode 100644 projects/helper/bitcoin-book/bitvenus.js create mode 100644 projects/helper/bitcoin-book/blofin-cex.js create mode 100644 projects/helper/bitcoin-book/boringdao.js create mode 100644 projects/helper/bitcoin-book/bsquaredBRC20.js create mode 100644 projects/helper/bitcoin-book/bsquaredBTC.js create mode 100644 projects/helper/bitcoin-book/btse.js create mode 100644 projects/helper/bitcoin-book/bybit.js create mode 100644 projects/helper/bitcoin-book/cake-defi.js create mode 100644 projects/helper/bitcoin-book/coindcx.js create mode 100644 projects/helper/bitcoin-book/coinex.js create mode 100644 projects/helper/bitcoin-book/coinsquare.js create mode 100644 projects/helper/bitcoin-book/coinw.js create mode 100644 projects/helper/bitcoin-book/crypto-com.js create mode 100644 projects/helper/bitcoin-book/deribit.js create mode 100644 projects/helper/bitcoin-book/elSalvador.js create mode 100644 projects/helper/bitcoin-book/fastex.js create mode 100644 projects/helper/bitcoin-book/fbi-dprk.js create mode 100644 projects/helper/bitcoin-book/fetchers.js create mode 100644 projects/helper/bitcoin-book/fire.js create mode 100644 projects/helper/bitcoin-book/flipster.js create mode 100644 projects/helper/bitcoin-book/garden.js create mode 100644 projects/helper/bitcoin-book/gate-io.js create mode 100644 projects/helper/bitcoin-book/hashkey-exchange.js create mode 100644 projects/helper/bitcoin-book/hashkey.js create mode 100644 projects/helper/bitcoin-book/hibt.js create mode 100644 projects/helper/bitcoin-book/hope-money.js create mode 100644 projects/helper/bitcoin-book/hotbit.js create mode 100644 projects/helper/bitcoin-book/huobi.js create mode 100644 projects/helper/bitcoin-book/imbtc.js create mode 100644 projects/helper/bitcoin-book/index.js create mode 100644 projects/helper/bitcoin-book/india-covid.js create mode 100644 projects/helper/bitcoin-book/klever-exchange.js create mode 100644 projects/helper/bitcoin-book/korbit.js create mode 100644 projects/helper/bitcoin-book/kraken-btc.js create mode 100644 projects/helper/bitcoin-book/kraken.js create mode 100644 projects/helper/bitcoin-book/kucoin.js create mode 100644 projects/helper/bitcoin-book/latoken.js create mode 100644 projects/helper/bitcoin-book/lorenzo-enzoBTC.js create mode 100644 projects/helper/bitcoin-book/lorenzo.js create mode 100644 projects/helper/bitcoin-book/maskex.js create mode 100644 projects/helper/bitcoin-book/mento.js create mode 100644 projects/helper/bitcoin-book/merlin.js create mode 100644 projects/helper/bitcoin-book/mexc-cex.js create mode 100644 projects/helper/bitcoin-book/mt-gox-entities.js create mode 100644 projects/helper/bitcoin-book/mt-gox.js create mode 100644 projects/helper/bitcoin-book/multibit.js create mode 100644 projects/helper/bitcoin-book/nbx.js create mode 100644 projects/helper/bitcoin-book/nonkyc.js create mode 100644 projects/helper/bitcoin-book/obelisk.js create mode 100644 projects/helper/bitcoin-book/okcoin.js create mode 100644 projects/helper/bitcoin-book/okex.js create mode 100644 projects/helper/bitcoin-book/phemex.js create mode 100644 projects/helper/bitcoin-book/pionex-cex.js create mode 100644 projects/helper/bitcoin-book/probit.js create mode 100644 projects/helper/bitcoin-book/pstake-btc.js create mode 100644 projects/helper/bitcoin-book/robinhood.js create mode 100644 projects/helper/bitcoin-book/rosen-bridge.js create mode 100644 projects/helper/bitcoin-book/roup.js create mode 100644 projects/helper/bitcoin-book/silkroad-fbifunds-entities.js create mode 100644 projects/helper/bitcoin-book/silkroad.js create mode 100644 projects/helper/bitcoin-book/swissborg.js create mode 100644 projects/helper/bitcoin-book/toobit.js create mode 100644 projects/helper/bitcoin-book/tron-btc.js create mode 100644 projects/helper/bitcoin-book/wbtc.js create mode 100644 projects/helper/bitcoin-book/woo-cex.js create mode 100644 projects/helper/bitcoin-book/xlink.js create mode 100644 projects/helper/bitcoin-book/xlinkLST.js create mode 100644 projects/helper/bitcoin-book/xrgb.js diff --git a/projects/21-co/index.js b/projects/21-co/index.js index 1d5299a08a..4254a70a3f 100644 --- a/projects/21-co/index.js +++ b/projects/21-co/index.js @@ -1,11 +1,10 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + const config = { bitcoin: { - owners: [ - '1HTGi4tfXSEtcXD4pk6S3vBs3s64hWY1pW', - '12WZhMFFLHQ4rCMSkeBfbJXRk7aGWyBh1M', - ], + owners: bitcoinAddressBook.twentyOneCo }, solana: { owners: [ diff --git a/projects/ainn-layer2/index.js b/projects/ainn-layer2/index.js index 6768c352a4..e14235bbff 100644 --- a/projects/ainn-layer2/index.js +++ b/projects/ainn-layer2/index.js @@ -1,33 +1,13 @@ const sdk = require('@defillama/sdk'); const { sumTokensExport } = require('../helper/sumTokens'); - -const BTCOwners = [ - "bc1q6dtp7ayaj5k2zv0z5ayhkdsvmtvdqgyaa9zs53", - "3H8cmLndtkBs7kiHByhHAddTzy8taUwYPt", - "bc1pepsapf26n8y2f4uftlmhy60ksghx6rqlxdcj4uacfqrkcg6pmncs52rzuu", - "bc1qu4ru2sph5jatscx5xuf0ttka36yvuql7hl5h4c", - "1JA46eiDpfx589wawn5RvtEXgwc518QfhZ", - "bc1qaajdlp5yrj5f77wq2ndtfqnmsamvvxhpy95662zkzykn9qhvdgys580hcs", - "368vZZKUWDFZRLWMFNRJzHo1HnibNeAJir", - "33hE9Wq65kjbiLsGD1NYwwNatP6hbsZv5H", - "32GU8Jux7SbsEbaAaLUnEQmc6JemLF6BUb", - "3CP5WJ2JSLCew7SETWUe5FxpBGrekMBiwk", - "39Fvw2Ho1fEkyDsos5sNTN5iMJZKzTL526", - "3Kptt4TZZRcjuGH8ikoQ8mV1TVxq45dnuS", - "3G4sMXWAAVTvTXTksr8u9zuu7W8RKsicEz", - "335DRGzLLG2tu4H4PnFBHYAwcj5pvV8zei", - "bc1qqg3cdyadq25zn99sdprr4lgpsxg2za998eygy8", - "bc1qw4vp94e9egkaxc04qsu5z9aq5pqpku2p6pzer8", - "bc1q3q7afjarz7l6v49538qs2prffhtawf38ss85k8", - "bc1q3smt9ut40eld6tgn42sdlp9yrx98s90unqw3pl" -]; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Staking tokens via AINN Layer2 Dataset counts as TVL.", bitcoin: { tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners: BTCOwners }), + sumTokensExport({ owners: bitcoinAddressBook.ainn }), ]), }, zklink: { diff --git a/projects/allo/index.js b/projects/allo/index.js index 7e35687d24..51a9d7ca84 100644 --- a/projects/allo/index.js +++ b/projects/allo/index.js @@ -1,19 +1,11 @@ const { sumTokensExport } = require("../helper/sumTokens"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const owner = [ - "bc1pn87rjuhzl3sr9tffhgx3nrrq7rhyxg7y58dl0uk5kyhmkfj26ssqz76lfc", - "bc1pu64y7m8hdekc5h4xtdl8ru9g3ct5n6mghmaqs8qtqecznccvy38s8tvdv4", - "bc1pjgn7m39vu02el3xpk2rtgt5kww8g5tkhmc55zevjld4n6cc9tuyq6akrq0", - "bc1pn29hejmt2mrslsa0ttfknp268qrpsmc7wqmw4ddxqytctzjl50ws2yrpmt", - "bc1pkpddzz2px40f803qug3l28c7d99qvvjkccgzj7tc80xx29pkd2vq3lqrg3", - "bc1p23su0d2sxwg95c7ny0p5vn4vf83jmvhyzacw3srjv84hmvynkacqe52r9d", - "bc1pn6rqr5z8yu5z9qphs0ccmcnt2c8ye04e3f2590rdxsd2mga0harq9k4207" -]; module.exports = { methodology: `Total amount of BTC in restaked on babylon`, doublecounted:true, bitcoin: { - tvl: sumTokensExport({ owner }), + tvl: sumTokensExport({ owners: bitcoinAddressBook.allo }), }, }; diff --git a/projects/avalance-btc/index.js b/projects/avalance-btc/index.js index 9ccfdf9a1a..ce1f9d4954 100644 --- a/projects/avalance-btc/index.js +++ b/projects/avalance-btc/index.js @@ -1,16 +1,11 @@ -const sdk = require('@defillama/sdk'); const { sumTokensExport } = require('../helper/sumTokens'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') //https://support.avax.network/en/articles/6349640-how-does-the-avalanche-bridge-work -const owners = [ -'bc1q2f0tczgrukdxjrhhadpft2fehzpcrwrz549u90', // https://prnt.sc/unrBvLvw3z1t -] module.exports = { methodology: 'BTC wallets on bc1q2f0tczgrukdxjrhhadpft2fehzpcrwrz549u90', bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), - ]), + tvl: sumTokensExport({ owners: bitcoinAddressBook.avalanche }), }, }; diff --git a/projects/avalon-finance-cedefi/index.js b/projects/avalon-finance-cedefi/index.js index 3ed542d253..203e16270f 100644 --- a/projects/avalon-finance-cedefi/index.js +++ b/projects/avalon-finance-cedefi/index.js @@ -1,6 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { sumTokensExport } = require('../helper/sumTokens'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const abi = { "getPoolManagerReserveInformation": "function getPoolManagerReserveInformation() view returns (tuple(uint256 userAmount, uint256 collateral, uint256 debt, uint256 claimableUSDT, uint256 claimableBTC) poolManagerReserveInfor)" @@ -11,14 +12,7 @@ const config = { } // @dev btcOwnersOfCedefi: Bitcoin owners of the Avalon CeDefi pool contract. -const btcOwnersOfCedefi = [ -'32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', -'bc1qr5nz7n8ulcdz0w3s6fska80fawxhvqlh273qypm3rkjequ9wpmhs65ppw7', -'bc1qhu98nf6ddz6ja73rn72encdr8ezsyhexwpdzap0vcs7lg2wpmrnq5ygfsl', -'bc1qg6asmzjr7nr5f5upg3xqyrdxl2tq8ef58hha7t0s82mzzx6zjxesyccp4h', -'bc1qxe3md4lehg8gmrlx3e8xqju5mytt266l4hcy8khl6tm5mahghmeqtxlgqq', -'bc1qy48h0kuv0r3e330wjfs6r74sk49pkzumnm907t5mhqjxml22r3ss2ucuxc', -] +const btcOwnersOfCedefi = bitcoinAddressBook.avalonCedefi // @dev getMetrics: call to get the collateral and debt of the Avalon CeDefi pool contract. const getMetrics = async (api, borrowed) => { diff --git a/projects/bedrock/index.js b/projects/bedrock/index.js index 358a8d7164..d1327d026f 100644 --- a/projects/bedrock/index.js +++ b/projects/bedrock/index.js @@ -1,13 +1,8 @@ -const { getConfig } = require('../helper/cache') const { sumTokens } = require('../helper/chain/bitcoin') -const sdk = require('@defillama/sdk') - -const API_URL = 'https://bedrock-datacenter.rockx.com/uniBTC/reserve/address' +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') async function tvl() { - const response = await getConfig('bedrock.btc_address', API_URL) - sdk.log(`API load completed: ${response.btc.length} addresses`) - return sumTokens({ owners: response.btc }) + return sumTokens({ owners: await bitcoinAddressBook.bedrock() }) } module.exports = { diff --git a/projects/bevm/index.js b/projects/bevm/index.js index 342a3d12fb..d3fe043888 100644 --- a/projects/bevm/index.js +++ b/projects/bevm/index.js @@ -1,15 +1,10 @@ const { sumTokensExport } = require("../helper/sumTokens"); -const ADDRESSES = require("../helper/coreAssets.json"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "TVL counts tokens deposited in BEVM", //doublecounted: true, bitcoin: { - tvl: sumTokensExport({ - owners: [ - "bc1p43kqxnf7yxcz5gacmqu98cr2r5gndtauzrwpypdzmsgp7n3lssgs5wruvy", - "bc1p2s98z85m7dwc7agceh58j54le0nedmqwxvuuj4ex4mwpsv52pjxqkczev9", - ], - }), + tvl: sumTokensExport({ owners: bitcoinAddressBook.bevm }), }, }; diff --git a/projects/biconomy-cex/index.js b/projects/biconomy-cex/index.js index 4eb80765fb..fff4938b34 100644 --- a/projects/biconomy-cex/index.js +++ b/projects/biconomy-cex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -7,9 +8,7 @@ const config = { ], }, bitcoin: { - owners: [ - 'bc1qx70fn2550vhjetc748wmg4lzv5gy7t56ns92v8' - ] + owners: bitcoinAddressBook.biconomy }, polygon: { owners: [ diff --git a/projects/bigone/index.js b/projects/bigone/index.js index 08ad8d6874..360b25c9ec 100644 --- a/projects/bigone/index.js +++ b/projects/bigone/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -9,10 +10,7 @@ const config = { ], }, bitcoin: { - owners: [ - 'bc1qu02z43yduyjx6saeea4l54qqulvz568qnzgaes', - '1L5D4Eq2RkEKuN717Gc817MH1Sxs5WwMQh' - ] + owners: bitcoinAddressBook.bigone }, solana: { owners: [ diff --git a/projects/binance-btc/index.js b/projects/binance-btc/index.js index d9f2e15961..3847560af6 100644 --- a/projects/binance-btc/index.js +++ b/projects/binance-btc/index.js @@ -1,15 +1,12 @@ const sdk = require('@defillama/sdk'); const { sumTokensExport } = require('../helper/sumTokens'); - -const owners = [ -'3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb' -] +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "BTC on btc chain", bitcoin: { tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), + sumTokensExport({ owners: bitcoinAddressBook.binance2 }), ]), }, }; \ No newline at end of file diff --git a/projects/bing-cex/index.js b/projects/bing-cex/index.js index 103fb69b2e..91bec7b4f8 100644 --- a/projects/bing-cex/index.js +++ b/projects/bing-cex/index.js @@ -1,11 +1,10 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + const config = { bitcoin: { - owners: [ - 'bc1qr8e6kmev99jxnk7hpyhex434t59ke5tpvmnyd3', - 'bc1qzzn5tszxn3ha87xfke540k8pr4favsk9cusakq' - ] + owners: bitcoinAddressBook.bingCex }, arbitrum: { owners: [ diff --git a/projects/bitfinex/index.js b/projects/bitfinex/index.js index ae30d0f51c..0b0caf02f2 100644 --- a/projects/bitfinex/index.js +++ b/projects/bitfinex/index.js @@ -1,12 +1,9 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bitcoin: { - owners: [ - '1Kr6QSydW9bFQG1mXiPNNu6WpJGmUa9i1g', //BTC hot wallet - '3JZq4atUahhuA9rLhXLMhhTo133J9rF97j', //BTC cold wallet - 'bc1qgdjqv0av3q56jvd82tkdjpy7gdp9ut8tlqmgrpmv24sq90ecnvqqjwvw97', // BTC cold wallet - ], + owners: bitcoinAddressBook.bitfinex, }, ethereum: { owners: [ diff --git a/projects/bitget/index.js b/projects/bitget/index.js index e328c28be6..8cc714db9e 100644 --- a/projects/bitget/index.js +++ b/projects/bitget/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bsc: { @@ -64,20 +65,7 @@ const config = { ] }, bitcoin: { - owners: [ - '1FWQiwK27EnGXb6BiBMRLJvunJQZZPMcGd', - '1GDn5X4R5vjdSvFPrq1MJubXFkMHVcFJZv', - '3GbdoiTnQrJYatcr2nhq7MYASSCWEKmN6L', - '3HcSp9sR23w6MxeRrLqqyDzLqThtSMaypQ', - '3MdofQ2ouxom9MzC9kKazGUShoL5R3cVLG', - '3Jxc4zsvEruEVAFpvwj818TfZXq5y2DLyF', //add on 12/01/2024 - '3KUwtHc5UhWQ76z6WrZRQHHVTZMuUWiZcU', // add on 27/05/2024 - '3H6JnFoz5jcoATKQ83BuQ3cUUCHswqfgtG', // add on 27/05/2024 - '3AZHcgLnJL5C5xKo33mspyHpQX7x4H5bBw', // add on 27/05/2024 - '3DSST4myyyRbiGzgCBE1RVHY7GRjDCh4n9', // add on 27/05/2024 - '3Nu84pbqfcfaFztQ74qc9ni2PH5HGM1bzS', // add on 27/05/2024 - '34hatYbZ27CLLoZWhuJHzBgoTCwXEv8GwT', // add on 27/05/2024 - ] + owners: bitcoinAddressBook.bitget }, arbitrum: { owners: [ diff --git a/projects/bitmake/index.js b/projects/bitmake/index.js index 2a4781423b..eaa310102c 100644 --- a/projects/bitmake/index.js +++ b/projects/bitmake/index.js @@ -1,13 +1,6 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - // wallet provide by a bitmake team - owners: [ - "3F12ncAyx4VkfpvnS7ZxdpggFx4p9RKfVe", - ], - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.bitmake } } module.exports = cexExports(config) module.exports.methodology = 'We are only tracking one BTC wallet. We dont have information regarding other wallets' \ No newline at end of file diff --git a/projects/bitmark/index.js b/projects/bitmark/index.js index 83bd3e816c..c2bae74bae 100644 --- a/projects/bitmark/index.js +++ b/projects/bitmark/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') // https://support.bitmart.com/hc/en-us/articles/18473693031451-Enhancing-Transparency-and-Trust-at-BitMart const owners = [ @@ -18,7 +19,7 @@ const config = { owners: ['CgANddXc7FKSsdLSdFv67X8faZqQaRTeLMXkAVANkZD4'] }, bitcoin: { - owners: ['37RJkdkzPXCMYSTq74berJYj9FmNn7wFP5'] + owners: bitcoinAddressBook.bitmark }, starknet: { owners: ['0x04de639e634c071c3ce8b1c69fac0500aab5ddb25a08fd0f757176243e4c0467'] diff --git a/projects/bitmex/index.js b/projects/bitmex/index.js index 01756dad6c..949a8ea55e 100644 --- a/projects/bitmex/index.js +++ b/projects/bitmex/index.js @@ -1,15 +1,13 @@ const { cexExports } = require('../helper/cex') -const bitcoinOwners = require('./bitcoin.json') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { + bitcoin: { owners: bitcoinAddressBook.bitmex }, ethereum: { owners: [ '0xEEA81C4416d71CeF071224611359F6F99A4c4294', // Etherscan Label (seems cold) '0xfb8131c260749c7835a08ccbdb64728de432858e' // Etherscan Label (seems hot) ], - }, - bitcoin: { - owners: bitcoinOwners, } } diff --git a/projects/bitstable-finance/index.js b/projects/bitstable-finance/index.js index 45ccc16cfd..596f5d3d42 100644 --- a/projects/bitstable-finance/index.js +++ b/projects/bitstable-finance/index.js @@ -2,6 +2,8 @@ const ADDRESS = require("../helper/coreAssets.json"); const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require('@defillama/sdk') const { sumTokensExport: sumBRC20TokensExport } = require("../helper/chain/brc20"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + const BB_STAKE_CONTRACT = '0x8816353DA8A4D45E81C509A54AdbA8E57908958f' const BB_STAKE_ABI = 'function totalStakedAmount() view returns (uint256)' @@ -23,17 +25,17 @@ module.exports = { bitcoin: { tvl: sdk.util.sumChainTvls([ // Native(BTC) - sumTokensExport({ owners: ["bc1p36wvtxursam9cq8zmc9ppvsqf9ulefm7grvlfc4tzc5j83rcggsqh6nxw5"] }), + sumTokensExport({ owner: bitcoinAddressBook.bitstable[0] }), // BRC20 sumBRC20TokensExport({ // Deposit Address - owners: ["bc1p0uw83vg0h32v7kypyvjn9nextku2h7axjdeefy2ewstevnqffaksjzhrdf"], + owner: bitcoinAddressBook.bitstable[1], blacklistedTokens: ["BSSB", "DAII"], }), ]), staking: sumBRC20TokensExport({ // Farm Address - owners: ["bc1pvngqf24g3hhr5s4ptv472prz576uye8qmagy880ydq5gzpd30pdqtua3rd"], + owner: bitcoinAddressBook.bitstable[2], blacklistedTokens: ["DAII"], }), }, diff --git a/projects/bitunix-cex/index.js b/projects/bitunix-cex/index.js index 672e9cc210..e44bc0f87f 100644 --- a/projects/bitunix-cex/index.js +++ b/projects/bitunix-cex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -7,11 +8,7 @@ const config = { ], }, bitcoin: { - owners: [ - "bc1qxh9ruwejxz7ztzxejafd74tyxg4sgfeqxun42f", - "bc1qhjfnumgcsqsx6grxa7mfl7rr5g3u8xl4gtt7tr", - "bc1qkvrddql6hh00apslzsxnysl75hhnm5fpqdah37" - ], + owners: bitcoinAddressBook.bitunixCex, }, tron: { owners: [ diff --git a/projects/bitvenus/index.js b/projects/bitvenus/index.js index b4c04f8215..43cc471a90 100644 --- a/projects/bitvenus/index.js +++ b/projects/bitvenus/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -15,14 +16,7 @@ const config = { ], }, bitcoin: { - owners: [ - // '3FdoFGYYcD1EU7ekrt2x2u2mFrjmxouMJG', - // '358pjjkYRG8exw2BKZnn7Q9s6SCb7wZEWN', - // '3C1ykoWkHBMZwmY8PUUMVxtJJSBkZBCtN8', - 'bc1qrm2a7u9xyeffvulm6e589qvesmt0v0rjxqfkhv', - 'bc1qvht34dma2uy23l9j862nnqr38a42kjr66e6lec' - - ] + owners: bitcoinAddressBook.bitvenus }, bsc: { owners: [ diff --git a/projects/blofin-cex/index.js b/projects/blofin-cex/index.js index 0a0580fc1b..cea48485cf 100644 --- a/projects/blofin-cex/index.js +++ b/projects/blofin-cex/index.js @@ -1,8 +1,9 @@ const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bitcoin: { - owners: ["1PM8huQVFSirUT7eAwNm3rBBYTsDRzCaf3", "1Jw4meLNYAaDcNxJwQdMTRVw74hGPcuV8W", "bc1q6377fdmkvkhgzpw8drgu76jxulsl5wmmgwtrxu"], + owners: bitcoinAddressBook.blofinCex, }, bsc: { owners: ["0x1cA5aa5b1dd8D948bB0971A5fB1762FE172E0040"], diff --git a/projects/boringdao/index.js b/projects/boringdao/index.js index 8a2556e1d4..4259bd6f10 100644 --- a/projects/boringdao/index.js +++ b/projects/boringdao/index.js @@ -2,6 +2,8 @@ const { sumTokensExport } = require("../helper/sumTokens") const contracts = require("./contracts.json"); const sdk = require("@defillama/sdk"); const { staking } = require('../helper/staking') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + function chainTvl(chain) { const owners = Object.values(contracts[chain].contracts) @@ -14,7 +16,7 @@ function chainTvl(chain) { module.exports = { timetravel: false, bitcoin: { - tvl: sumTokensExport({ owner: '33ZibwpiZe4bM5pwpAdQNqqs2RthLkpJer'}) + tvl: sumTokensExport({ owners: bitcoinAddressBook.boringdao }) }, litecoin: { tvl: async (_, block) => { diff --git a/projects/bsquared/index.js b/projects/bsquared/index.js index df8c3fc94d..8ce3f7c70f 100644 --- a/projects/bsquared/index.js +++ b/projects/bsquared/index.js @@ -2,31 +2,7 @@ const sdk = require('@defillama/sdk'); const { sumTokensExport: sumBRC20TokensExport } = require("../helper/chain/brc20"); const { sumTokensExport } = require('../helper/sumTokens'); const ADDRESSES = require('../helper/coreAssets.json') - -const BTCOwners = [ - // pre deposited wallets //Bitcoin Multisig Addresses - "bc1q4fsk5pgnmnu7ngp79xclsw2t0yk46sjqw22ffz", - "bc1qva5m5e7da2zm590z03tdnj42u9q2uye3hgrehwrzgg8j4kxq9seq9rvw0m", //Bitcoin Multisig Addresses - "bc1qjv2lfrv672rqagycs5zdsggmury0cz2vufek46jj86ddqynyp2qsxm3qfs", //Bitcoin Multisig Addresses - //Bitcoin Custodian Addresses - "131fpYjELat58RVzPp2A9Bo8oNuKiP4vxg", - "bc1qr4cpjazz6hhjh44yrshqw4xs4e3eld60wnsq2m", - "14UwPgMLZY6rLZRDxxvmNWQ9rMkg2iraHG", - "bc1quetqhxs809mwgms0rhae4cw98chzqe0er8fryr", - "34ThPcBtz5ayRybbg1MXnQWBGtUzqUDCMa", - "bc1q082azm83lgpln7puvn4egc9dumlaqfqkqmsght", - "bc1qxxgxywxcq0q405849fyrlxa2zu4nxukf4ytg57", - "3LcCJLivWmaomMyhnyt4pqg8iWi2ECU92T", - "bc1qe4xx7eg5c4qjq8838zv05f7uzfmyyyftdpy48t", - "3GPVsXtvbfFNRYbLwJowaL7EXo8hqakfkv", - "bc1q8axfvwqa0fqds5w6vva9g5kej9e4mp4ap3dmff", - "bc1q6crqwsg59s2j4v5gvd94775pjj8l0fmflmv9jd", - "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2" -]; - -const BRC20Owners = [ - "bc1q97ctqygjgj0ljxgge4q735ujxvlad8smass7f0axc6x3ggffr8xqwn69hc", //Bitcoin Multisig Addresses -]; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const ADDRESSES_ETHEREUM_STONE = '0x7122985656e38BDC0302Db86685bb972b145bD3C'; @@ -37,8 +13,8 @@ module.exports = { methodology: "Staking tokens via BSquared Network Buzz counts as TVL", bitcoin: { tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners: BTCOwners }), - sumBRC20TokensExport({ owners: BRC20Owners }), + sumTokensExport({ owners: bitcoinAddressBook.bsquaredBTC }), + sumBRC20TokensExport({ owners: bitcoinAddressBook.bsquaredBRC20 }), ]), }, ethereum: { diff --git a/projects/btse/index.js b/projects/btse/index.js index 08ded778d9..1b1c1a9701 100644 --- a/projects/btse/index.js +++ b/projects/btse/index.js @@ -1,9 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - owners: ['bc1qaxyju6n2x2tednv8e7hgnhnz44vrfcmuhjxpfk'] - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.btse } } module.exports = cexExports(config) diff --git a/projects/bybit/index.js b/projects/bybit/index.js index 07f7f29103..eb982dcb46 100644 --- a/projects/bybit/index.js +++ b/projects/bybit/index.js @@ -1,4 +1,5 @@ const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -15,16 +16,7 @@ const config = { ], }, bitcoin: { - owners: [ - "bc1q2qqqt87kh33s0er58akh7v9cwjgd83z5smh9rp", - "bc1q9w4g79ndel72lygvwtqzem67z6uqv4yncvqjz3yn8my9swnwflxsutg4cx", - "bc1qjysjfd9t9aspttpjqzv68k0ydpe7pvyd5vlyn37868473lell5tqkz456m", - "1GrwDkr33gT6LuumniYjKEGjTLhsL5kmqC", - "bc1qs5vdqkusz4v7qac8ynx0vt9jrekwuupx2fl5udp9jql3sr03z3gsr2mf0f", - // added on the 15th of july 2024. - "bc1qa2eu6p5rl9255e3xz7fcgm6snn4wl5kdfh7zpt05qp5fad9dmsys0qjg0e", - "16jVbMCcqq1deKrMB3esL2HPso7kvqUsec" - ], + owners: bitcoinAddressBook.bybit, }, bsc: { owners: [ diff --git a/projects/cake-defi/index.js b/projects/cake-defi/index.js index 8d2bcba9dd..f6e1b0420c 100644 --- a/projects/cake-defi/index.js +++ b/projects/cake-defi/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -18,7 +19,7 @@ const config = { ] }, bitcoin: { - owners: ['3GcSHxkKY8ADMWRam51T1WYxYSb2vH62VL'] + owners: bitcoinAddressBook.cakeDefi }, litecoin: { owners: ['MLYQxJfnUfVqRwfYXjDJfmLbyA77hqzSXE'] diff --git a/projects/coindcx/index.js b/projects/coindcx/index.js index c690caf263..84a9a41485 100644 --- a/projects/coindcx/index.js +++ b/projects/coindcx/index.js @@ -1,5 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -55,32 +56,7 @@ const config = { ] }, bitcoin: { - owners: [ - '12hGEyxk4zMLquxiMiFrkvYSohsXz2D3uZ', - 'bc1qz22hegkllltcydg3pz3an6h352mjmyp7n2vhd9', - '1MzSJodjNmACPKyj9VUv9X55Pby87osLhc', - 'bc1qucl4n347qc6e48w85xdxcv86sm3an8fr250hhm', - '1F6CrpEnHEZh6gQtJ7cf1MtK7Y8GYKoP4i', - 'bc1qn2xm6agnanuyuwfcfw92el7nvt2lpsqr5s5c0w', - '17mxRZ9WeXigSwg3Cm62HxeATnuUphMxGL', - 'bc1qffg4ya27430vv5ymg2lhf4mj7tvtc3ur5qyyq3', - '1JV3umtGC6H6tFUVoFyV5KwbJDscUwrtX7', - 'bc1qhlyrdhfqry06nj902p9dxdftm4pxkhdqeum8y8', - '1KXxS6QnzpB8mSLm5kmXJXqvZF7wVvQDCw', - 'bc1qedxsgzuj8ga644gwlqw4nw7f3xncq4g2rskmzu', - '12T8i8tpeczk5JGf8ppZf1w6SFBRwEa9y4', - 'bc1qpl5kqjkugyncr72a4fhxvm0360ehfdl27e00ja', - '1PRwacjHVksLNTkSYNkiWkRgTm1yDSgLMG', - 'bc1q7c9ylgjsyc0yaxwm84jjh6avfajzfe7dhk6e0e', - '1477uXZ1NfUaaZZdnztQ7h8ftGRpuWQPfA', - 'bc1qygg2x02cfy0e6r7798v4qrcjjkzm8tl5t0xkwf', - 'bc1qljm7vwdgdy6ca97stsyjyl3zdjtkdsdm8vnh8f', - 'bc1qqhwh3tcg5duwq7hdlnlr5n2tg2uq755cwmkjqn', - 'bc1qqe4g7sjxzk90nsgj0mwufwcdtd7kufg7k32xch', - '1avi3SkWKGLis8dGCP9JUnFfVeheP8wkt', - 'bc1qmulc2ju4kykj24xuw0fu73h9h3usa897xhaucz', // - '3Dm2TL1pt1VzeBCq9jgvQG81QPv19PyReh' - ] + owners: bitcoinAddressBook.coindcx }, tron: { owners: [ diff --git a/projects/coinex/index.js b/projects/coinex/index.js index 5add34adb3..cf53e8ec92 100644 --- a/projects/coinex/index.js +++ b/projects/coinex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -15,25 +16,7 @@ const config = { ], }, bitcoin: { - owners: [ - '189myj1KAbiCWfqWhT6Td4noANKBuag3QN', - '1C2Pxf3ghtKyM4mKC3xSLKrN33YcKnKF2a', - '1JZw5HYSoAEfvGGVQ4U2JihZaQkjcXrr2i', - '16M3n9p6CLATDnpsJNTjCn22AaxzErxg5V', - '15cYMF4jcRwpcbjENMdMizCzAmd7Pc51So', - '18JQXgQ4GjZAuYCy1fNAFGHVEAWUui2q9h', - '1LGbUy11yMaNC9s73q7vEad8JTZyczCima', - '1DGXwH2gzBYM6UrVE57DaaQ3hJJm3s32YK', - '152GodsXfK5kYMdH4spzYD3Ttm1u2oNipN', - '18oxoXCq5mah3GjLjGCS3BRTQxxN7738rL', - '1H21g458T25SnAzvFDJiBrcyhfwHiCH5YF', - '14BhR6aE8Fkt2c8E1m2ydx76fBz5kpt62K', - '1Ef59jZsv87uAcwBZdDhNxiSbCceQ6bFTA', - '14ukjw4r3UFC5A8yvG7yt2GdvLUHEWtskS', - '141TDnaiLEW1vE5xd42Dw8HEhDCA2qrZTr', - '1Ew9SPwBHY8GjHd3uBxhtGcvVmyBN7PHcw', - '1LYrQCjUf54vf9G4qwFpJQ9RCyL2DprPqQ', - ] + owners: bitcoinAddressBook.coinex }, tron: { owners: [ diff --git a/projects/coinsquare/index.js b/projects/coinsquare/index.js index e38efba56d..88fcfa8e05 100644 --- a/projects/coinsquare/index.js +++ b/projects/coinsquare/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -29,18 +30,7 @@ const config = { ], }, bitcoin: { - owners: [ - '1P7cDFGeWm6ezez6XGXTAjvm8qcsGiMXe7', - 'bc1q0k5rpdwf7wnq3fuk7dfjqd59p3ke7ufqmlkfp4', - 'bc1qdstretw2uvhjen7hvgaya3nsjgr430x9jhqf4a', - 'bc1qez6ezccleuac4dnj5cpexz5mz3j0j3j655j6qn', - 'bc1qg6a9kpmge0fdwtrymjvq3cydfzgpcge7e05e7z', - 'bc1qg8fywv20ztsp0edtf53zpsnxeu5cqxrmdwmtjd', - 'bc1qm5mqpgtt2ufucfdvhu5xcdgs3vzehwu62wsyqy', - 'bc1qmkkejzrq7ayfjpy7w8gmkhd3uwcy7nryr5apch', - 'bc1qsjc50kf72r4q44ac28v3vrukaxjg4w30rh0cmm', - 'bc1qyz9mssutu8xxcgjvsucz38qvxt7hxwtnm5eh8k', - ] + owners: bitcoinAddressBook.coinsquare }, avax: { owners: ['0x14AA1AD09664c33679aE5689d93085B8F7c84bd3'] diff --git a/projects/coinw/index.js b/projects/coinw/index.js index 56de3cda34..408e75fdde 100644 --- a/projects/coinw/index.js +++ b/projects/coinw/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -13,10 +14,7 @@ const config = { ], }, bitcoin: { - owners: [ - '14Z9KSmCo1UjvBiXj2j9er35GmGmaFxsmE', - '1KYBKqRjGbRynSiyoiHndULssXrEeWhvU8', - ] + owners: bitcoinAddressBook.coinw }, tron: { owners: [ diff --git a/projects/crypto-com/index.js b/projects/crypto-com/index.js index 0df0171433..377bcf63c4 100644 --- a/projects/crypto-com/index.js +++ b/projects/crypto-com/index.js @@ -1,17 +1,9 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bitcoin: { - owners: [ - 'bc1qpy4jwethqenp4r7hqls660wy8287vw0my32lmy', - '3LhhDLBVWBZChNQv8Dn4nDKFnCyojG1FqN', - '3QsGsAXQ4rqRNvh5pEW55hf3F9PEyb7rVq', - 'bc1qr4dl5wa7kl8yu792dceg9z5knl2gkn220lk7a9', - 'bc1q4c8n5t00jmj8temxdgcc3t32nkg2wjwz24lywv', - '14m3sd9HCCFJW4LymahJCKMabAxTK4DAqW', - 'bc1qjqy709gqpse60hdsm2d2v0dzzu7yp5dej7fdrpl2x3taccvujq4s0vzsyd', - 'bc1qcdqj2smprre85c78d942wx5tauw5n7uw92r7wr' - ], + owners: bitcoinAddressBook.cryptoCom, }, ethereum: { owners: [ diff --git a/projects/deribit/index.js b/projects/deribit/index.js index ba368589db..1a8d8eb517 100644 --- a/projects/deribit/index.js +++ b/projects/deribit/index.js @@ -1,24 +1,8 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { - bitcoin: { - // from https://insights.deribit.com/exchange-updates/proof-of-reserves-deribit/ - owners: [ - "bc1qa3phj5uhnuauk6r62cku6r6fl9rawqx4n6d690", - "bc1qtq5zfllw9fs9w6stnfgalf9v59fgrcxxyawuvm", - "1MDq7zyLw6oKichbFiDDZ3aaK59byc6CT8", - "1932eKraQ3Ad9MeNBHb14WFQbNrLaKeEpT", - "13JJ1nxDeX5fMsDeyGHiLoK8rF2ayGq1cX", - "1MdrdcEzfiJdvs6eVSwUx6bWboPX8if5U3", - "35WHp4Hid61peyH4tuhNunwRj2gtNB41Lo", - "34ZHV8dd6uucEUABUydWpKi6F4qKQntEUf", - //added on the 26/06/2024 - "bc1qzwhw94uldd3c8736lsxrda6t6x56030f8zk8nr", - "bc1qrmuxak470z7zch5f3gz05dc6h4ngwqdq4wx80w", - "bc1qf6lm99tp5p27hsmyskve236nsv32lnfwt4h8wk", - "14HeA1YRUiJGb95HVpVTBuavMUBYGk6y7R", - ], - }, + bitcoin: { owners: bitcoinAddressBook.deribit }, ethereum:{ owners: [ "0x77021d475E36b3ab1921a0e3A8380f069d3263de", diff --git a/projects/entities/el-salvador.js b/projects/entities/el-salvador.js index 37e69daa82..1bdb7b30d4 100644 --- a/projects/entities/el-salvador.js +++ b/projects/entities/el-salvador.js @@ -1,5 +1,6 @@ const { sumTokensExport } = require('../helper/sumTokens') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { - bitcoin: { tvl: sumTokensExport({owner: '32ixEdVJWo3kmvJGMTZq5jAQVZZeuwnqzo'}) } + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.elSalvador }) } } \ No newline at end of file diff --git a/projects/entities/fbi-dprk.js b/projects/entities/fbi-dprk.js index cab5e93773..93f0017ec8 100644 --- a/projects/entities/fbi-dprk.js +++ b/projects/entities/fbi-dprk.js @@ -1,16 +1,5 @@ const { treasuryExports } = require("../helper/treasury") +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - owners: [ //source https://www.fbi.gov/news/press-releases/fbi-identifies-cryptocurrency-funds-stolen-by-dprk - "3LU8wRu4ZnXP4UM8Yo6kkTiGHM9BubgyiG", - "39idqitN9tYNmq3wYanwg3MitFB5TZCjWu", - "3AAUBbKJorvNhEUFhKnep9YTwmZECxE4Nk", - "3PjNaSeP8GzLjGeu51JR19Q2Lu8W2Te9oc", - "3NbdrezMzAVVfXv5MTQJn4hWqKhYCTCJoB", - "34VXKa5upLWVYMXmgid6bFM4BaQXHxSUoL" - ], - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.fbiDprk } } module.exports = treasuryExports(config) \ No newline at end of file diff --git a/projects/entities/mt-gox.js b/projects/entities/mt-gox.js index df5b55172c..9d4a8a9937 100644 --- a/projects/entities/mt-gox.js +++ b/projects/entities/mt-gox.js @@ -1,14 +1,5 @@ const { treasuryExports } = require("../helper/treasury") +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - owners: [ - "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", //https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ - 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', - 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', - 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' - ], - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.mtGoxEntities } } module.exports = treasuryExports(config) \ No newline at end of file diff --git a/projects/entities/silkroad-fbifunds.js b/projects/entities/silkroad-fbifunds.js index df5b55172c..0c9c2e09c8 100644 --- a/projects/entities/silkroad-fbifunds.js +++ b/projects/entities/silkroad-fbifunds.js @@ -1,14 +1,5 @@ const { treasuryExports } = require("../helper/treasury") +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - owners: [ - "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", //https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ - 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', - 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', - 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' - ], - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.silkroadFBIEntities } } module.exports = treasuryExports(config) \ No newline at end of file diff --git a/projects/exsat-credit-staking/index.js b/projects/exsat-credit-staking/index.js index c9280c46e8..1c7cd332c7 100644 --- a/projects/exsat-credit-staking/index.js +++ b/projects/exsat-credit-staking/index.js @@ -1,24 +1,12 @@ -const axios = require('axios'); const { sumTokens } = require("../helper/chain/bitcoin"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -async function tvl(api) { - const { data: response } = await axios.post('https://rpc-us.exsat.network/v1/chain/get_table_rows', { - json: true, - code: "custody.xsat", - scope: "custody.xsat", - table: "custodies", - limit: "100", - show_payer: true - }); - - const owners = response.rows.map(row => row.data.btc_address); - return sumTokens({ owners }); -} +async function tvl() { + return sumTokens({ owners: await bitcoinAddressBook.exsatCreditStaking() }) + } module.exports = { methodology: 'TVL is based on Bitcoin addresses in the exSat credit staking contract, summing their associated Bitcoin balances.', start: 1729684800, - bitcoin: { - tvl, - }, + bitcoin: { tvl }, }; diff --git a/projects/exsat/index.js b/projects/exsat/index.js index 200768838d..0edca69310 100644 --- a/projects/exsat/index.js +++ b/projects/exsat/index.js @@ -1,46 +1,11 @@ -const axios = require('axios'); const { sumTokens } = require("../helper/chain/bitcoin"); -const { getConfig } = require('../helper/cache'); +const bitcoinBook = require('../helper/bitcoin-book'); async function tvl(api) { - const config = await getConfig('exsat', 'https://raw.githubusercontent.com/exsat-network/exsat-defillama/refs/heads/main/bridge-bitcoin.json'); - const custody_addresses = config['custody_addresses']; - const custody_ids = config['custody_ids']; - const owners = [...custody_addresses]; - - for (let custody_id of custody_ids) { - let lower_bound = null; - let hasMore = true; - - while (hasMore) { - const { data: response } = await axios.post('https://rpc-us.exsat.network/v1/chain/get_table_rows', { - "json": true, - "code": "brdgmng.xsat", - "scope": custody_id, - "table": "addrmappings", - "lower_bound": lower_bound, - "upper_bound": null, - "index_position": 1, - "key_type": "", - "limit": "100", - "reverse": false, - "show_payer": true - }); - - const addrs = response.rows.map(row => row.data.btc_address); - owners.push(...addrs); - - hasMore = response.more; - lower_bound = response.next_key; - } - } - - return sumTokens({ owners }); + return sumTokens({ owners: await bitcoinBook.exsatBridge() }); } module.exports = { methodology: 'TVL for the exSat Bridge represents the total balance in custody BTC addresses, reflecting BTC assets bridged to the exSat network.', - bitcoin: { - tvl, - }, + bitcoin: { tvl }, }; diff --git a/projects/fastex/index.js b/projects/fastex/index.js index f86b57f052..34c9d1bfb2 100644 --- a/projects/fastex/index.js +++ b/projects/fastex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -8,9 +9,7 @@ const config = { ], }, bitcoin: { - owners: [ - 'bc1qs7yen7ljpvyw7vn58ql6zfaddqf4rcjalsgmt5' - ] + owners: bitcoinAddressBook.fastex }, tron: { owners: [ diff --git a/projects/fbtc/index.js b/projects/fbtc/index.js index df7d51d347..2a2bb3173e 100644 --- a/projects/fbtc/index.js +++ b/projects/fbtc/index.js @@ -1,34 +1,11 @@ -const { getConfig } = require('../helper/cache') const { sumTokens } = require('../helper/chain/bitcoin') -const sdk = require('@defillama/sdk') -const { get } = require('../helper/http') -const { getEnv } = require('../helper/env') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const abi = { - getQualifiedUserInfo: 'function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)', -} async function tvl() { - const staticAddresses = await getConfig('fbtc', undefined, { - fetcher: async () => { - const token = getEnv('FBTC_ACCESS_TOKEN') - const { result } = await get('https://fbtc.phalcon.blocksec.com/api/v1/extension/fbtc-reserved-addr', { - headers: { - 'access-token': token - } - }) - return result.map(r => r.address) - } - }) - const api = new sdk.ChainApi({ chain: 'ethereum' }) - const users = await api.call({ abi: 'address[]:getQualifiedUsers', target: '0xbee335BB44e75C4794a0b9B54E8027b111395943' }) - const userInfos = await api.multiCall({ abi: abi.getQualifiedUserInfo, target: '0xbee335BB44e75C4794a0b9B54E8027b111395943', calls: users }) - userInfos.forEach(i => staticAddresses.push(i.depositAddress)) - return sumTokens({ owners: staticAddresses }) + return sumTokens({ owners: await bitcoinAddressBook.fbtc() }) } module.exports = { timetravel: false, - bitcoin: { - tvl, - } + bitcoin: { tvl } } diff --git a/projects/fire/index.js b/projects/fire/index.js index 9c32a5a1f6..9021e42e27 100644 --- a/projects/fire/index.js +++ b/projects/fire/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -8,12 +9,7 @@ const config = { ], }, bitcoin: { - owners: [ - 'bc1q36c0rp4ydl6uvvguhw9nr7njm49addzkgftqev', - 'bc1q3z0khuld6nd7esv46nxj9ketteqw9qz86peyeh', - 'bc1q4hz59t7v0uxujuyrhp9679uppur7ke9u3vshvd', - 'bc1qdlrh7ycyqxe62vk5m70y353vmep9ullxx5j9ar', - ] + owners: bitcoinAddressBook.fire }, ripple: { owners: [ diff --git a/projects/flipster/index.js b/projects/flipster/index.js index e980af38f1..3c9e1e14cb 100644 --- a/projects/flipster/index.js +++ b/projects/flipster/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -12,9 +13,7 @@ const config = { ] }, bitcoin: { - owners: [ - '31iAUikiV7yKEYBzbA1iHPcanHNsLBFe8C' - ] + owners: bitcoinAddressBook.flipster }, arbitrum: { owners: [ diff --git a/projects/garden/index.js b/projects/garden/index.js index a5244db1cc..bb24cd53f2 100644 --- a/projects/garden/index.js +++ b/projects/garden/index.js @@ -1,17 +1,16 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require("@defillama/sdk"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const SEED_TOKEN_ADDRESS = "0x86f65121804D2Cdbef79F9f072D4e0c2eEbABC08"; // SEED TOKEN (Garden's Governance Token) Address const STAKING_CONTRACT_ADDRESS = "0xe2239938Ce088148b3Ab398b2b77Eedfcd9d1AfC"; - -const BTC_LIQUIDITY_ADDRESS = "bc1qhww67feqfdf6xasjat88x5stqa6vzx0c6fgtnj"; const WBTC_LIQUIDITY_ADDRESS = "0x9DD9C2D208B07Bf9A4eF9CA311F36d7185749635"; module.exports = { bitcoin: { tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners: [BTC_LIQUIDITY_ADDRESS] }), + sumTokensExport({ owners: bitcoinAddressBook.garden }), ]), }, ethereum: { diff --git a/projects/gate-io/index.js b/projects/gate-io/index.js index b988eb12b9..b91e6d5440 100644 --- a/projects/gate-io/index.js +++ b/projects/gate-io/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -72,14 +73,7 @@ const config = { ] }, bitcoin: { - owners: [ - '14kmvhQrWrNEHbrSKBySj4qHGjemDtS3SF', - '162bzZT2hJfv5Gm3ZmWfWfHJjCtMD6rHhw', - '1EkkGXR7dTbZbrKFKoe6YEP4gj4GzMeKvw', - '1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9', - '1HpED69tpKSaEaWpY3Udt1DtcVcuCUoh2Y', - '3HroDXv8hmzKRtaSfBffRgedKpru8fgy6M', - ] + owners: bitcoinAddressBook.gateIo }, tron: { owners: [ diff --git a/projects/hashkey-exchange/index.js b/projects/hashkey-exchange/index.js index 2786278e13..3057fb06a9 100644 --- a/projects/hashkey-exchange/index.js +++ b/projects/hashkey-exchange/index.js @@ -1,4 +1,5 @@ const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { avax: { @@ -8,12 +9,7 @@ const config = { ], }, bitcoin: { - owners: [ - "bc1qqe394jlqq86muq23d4vrnhzzvcv8jnepgt8lx7", - "1NfJSiqBw4fb74KgVQrPsk5W5aqitAD1Xv", - // "bc1qlrawqecuwgpzzwh04pkhtfsqsk33kald22ds3c", // bosera funds https://www.bosera.com/english/index.html - "18oxobhCNKnHjb7nEFDmPdXbCZthFWezrm", - ], + owners: bitcoinAddressBook.hashkeyExchange }, ethereum: { owners: [ diff --git a/projects/hashkey/index.js b/projects/hashkey/index.js index 5694e7c5e0..e47181151c 100644 --- a/projects/hashkey/index.js +++ b/projects/hashkey/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -8,10 +9,7 @@ const config = { ], }, bitcoin: { - owners: [ - "bc1qyvppkaa74d9jvtz664a6uxmj09hf0eyg3uhx4h", - "1DywJMqHHMWuP7xyfkRqJZCEe7GdEKFRcp" - ], + owners: bitcoinAddressBook.hashkey, }, litecoin: { owners: [ diff --git a/projects/helper/bitcoin-book/21Co.js b/projects/helper/bitcoin-book/21Co.js new file mode 100644 index 0000000000..f5c4e25efb --- /dev/null +++ b/projects/helper/bitcoin-book/21Co.js @@ -0,0 +1,4 @@ +module.exports = [ + '1HTGi4tfXSEtcXD4pk6S3vBs3s64hWY1pW', + '12WZhMFFLHQ4rCMSkeBfbJXRk7aGWyBh1M' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/ainn-layer2.js b/projects/helper/bitcoin-book/ainn-layer2.js new file mode 100644 index 0000000000..adcec5f7ec --- /dev/null +++ b/projects/helper/bitcoin-book/ainn-layer2.js @@ -0,0 +1,20 @@ +module.exports = [ + "bc1q6dtp7ayaj5k2zv0z5ayhkdsvmtvdqgyaa9zs53", + "3H8cmLndtkBs7kiHByhHAddTzy8taUwYPt", + "bc1pepsapf26n8y2f4uftlmhy60ksghx6rqlxdcj4uacfqrkcg6pmncs52rzuu", + "bc1qu4ru2sph5jatscx5xuf0ttka36yvuql7hl5h4c", + "1JA46eiDpfx589wawn5RvtEXgwc518QfhZ", + "bc1qaajdlp5yrj5f77wq2ndtfqnmsamvvxhpy95662zkzykn9qhvdgys580hcs", + "368vZZKUWDFZRLWMFNRJzHo1HnibNeAJir", + "33hE9Wq65kjbiLsGD1NYwwNatP6hbsZv5H", + "32GU8Jux7SbsEbaAaLUnEQmc6JemLF6BUb", + "3CP5WJ2JSLCew7SETWUe5FxpBGrekMBiwk", + "39Fvw2Ho1fEkyDsos5sNTN5iMJZKzTL526", + "3Kptt4TZZRcjuGH8ikoQ8mV1TVxq45dnuS", + "3G4sMXWAAVTvTXTksr8u9zuu7W8RKsicEz", + "335DRGzLLG2tu4H4PnFBHYAwcj5pvV8zei", + "bc1qqg3cdyadq25zn99sdprr4lgpsxg2za998eygy8", + "bc1qw4vp94e9egkaxc04qsu5z9aq5pqpku2p6pzer8", + "bc1q3q7afjarz7l6v49538qs2prffhtawf38ss85k8", + "bc1q3smt9ut40eld6tgn42sdlp9yrx98s90unqw3pl" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/allo.js b/projects/helper/bitcoin-book/allo.js new file mode 100644 index 0000000000..b8d3311f0b --- /dev/null +++ b/projects/helper/bitcoin-book/allo.js @@ -0,0 +1,9 @@ +module.exports = [ + "bc1pn87rjuhzl3sr9tffhgx3nrrq7rhyxg7y58dl0uk5kyhmkfj26ssqz76lfc", + "bc1pu64y7m8hdekc5h4xtdl8ru9g3ct5n6mghmaqs8qtqecznccvy38s8tvdv4", + "bc1pjgn7m39vu02el3xpk2rtgt5kww8g5tkhmc55zevjld4n6cc9tuyq6akrq0", + "bc1pn29hejmt2mrslsa0ttfknp268qrpsmc7wqmw4ddxqytctzjl50ws2yrpmt", + "bc1pkpddzz2px40f803qug3l28c7d99qvvjkccgzj7tc80xx29pkd2vq3lqrg3", + "bc1p23su0d2sxwg95c7ny0p5vn4vf83jmvhyzacw3srjv84hmvynkacqe52r9d", + "bc1pn6rqr5z8yu5z9qphs0ccmcnt2c8ye04e3f2590rdxsd2mga0harq9k4207" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/avalanche-btc.js b/projects/helper/bitcoin-book/avalanche-btc.js new file mode 100644 index 0000000000..ac1edf073e --- /dev/null +++ b/projects/helper/bitcoin-book/avalanche-btc.js @@ -0,0 +1,3 @@ +module.exports = [ + 'bc1q2f0tczgrukdxjrhhadpft2fehzpcrwrz549u90', // https://prnt.sc/unrBvLvw3z1t +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/avalon-cedefi.js b/projects/helper/bitcoin-book/avalon-cedefi.js new file mode 100644 index 0000000000..9451bd241a --- /dev/null +++ b/projects/helper/bitcoin-book/avalon-cedefi.js @@ -0,0 +1,8 @@ +module.exports = [ + '32DgQPVHSV6FSxLnw68nggvchp3ZNKquxA', + 'bc1qr5nz7n8ulcdz0w3s6fska80fawxhvqlh273qypm3rkjequ9wpmhs65ppw7', + 'bc1qhu98nf6ddz6ja73rn72encdr8ezsyhexwpdzap0vcs7lg2wpmrnq5ygfsl', + 'bc1qg6asmzjr7nr5f5upg3xqyrdxl2tq8ef58hha7t0s82mzzx6zjxesyccp4h', + 'bc1qxe3md4lehg8gmrlx3e8xqju5mytt266l4hcy8khl6tm5mahghmeqtxlgqq', + 'bc1qy48h0kuv0r3e330wjfs6r74sk49pkzumnm907t5mhqjxml22r3ss2ucuxc', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bevm.js b/projects/helper/bitcoin-book/bevm.js new file mode 100644 index 0000000000..35666effef --- /dev/null +++ b/projects/helper/bitcoin-book/bevm.js @@ -0,0 +1,4 @@ +module.exports = [ + "bc1p43kqxnf7yxcz5gacmqu98cr2r5gndtauzrwpypdzmsgp7n3lssgs5wruvy", + "bc1p2s98z85m7dwc7agceh58j54le0nedmqwxvuuj4ex4mwpsv52pjxqkczev9", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/biconomy-cex.js b/projects/helper/bitcoin-book/biconomy-cex.js new file mode 100644 index 0000000000..ac3d3c548c --- /dev/null +++ b/projects/helper/bitcoin-book/biconomy-cex.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qx70fn2550vhjetc748wmg4lzv5gy7t56ns92v8" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bigone.js b/projects/helper/bitcoin-book/bigone.js new file mode 100644 index 0000000000..1c05303a86 --- /dev/null +++ b/projects/helper/bitcoin-book/bigone.js @@ -0,0 +1,4 @@ +module.exports = [ + 'bc1qu02z43yduyjx6saeea4l54qqulvz568qnzgaes', + '1L5D4Eq2RkEKuN717Gc817MH1Sxs5WwMQh' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/binance-btc.js b/projects/helper/bitcoin-book/binance-btc.js new file mode 100644 index 0000000000..ee46fb4aa6 --- /dev/null +++ b/projects/helper/bitcoin-book/binance-btc.js @@ -0,0 +1,3 @@ +module.exports = [ + '3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/binance.js b/projects/helper/bitcoin-book/binance.js new file mode 100644 index 0000000000..d5ea8de294 --- /dev/null +++ b/projects/helper/bitcoin-book/binance.js @@ -0,0 +1,40 @@ +module.exports = [ + '1PJiGp2yDLvUgqeBsuZVCBADArNsk6XEiw', + '1Pzaqw98PeRfyHypfqyEgg5yycJRsENrE7', + '32bhzEniykYRFADVaRM5PYswsjC23cxtes', + '34GUzCVLbdkMQ2UdVTaA4nxPwoovVS7y2J', + '34HpHYiyQwg69gFmCq2BGHjF1DZnZnBeBP', + '34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo', + '36zSLdRv1jyewjaC12fqK5fptn7PqewunL', + '38DN2uFMZPiHLHJigfv4kWC9JWJrNnhLcn', + '38Xnrq8MZiKmYmwobbYdZQ5nnCbX1qvQfE', + '395vnFScKQ1ay695C6v7gf89UzoFpx3WuJ', + '39884E3j6KZj82FK4vcCrkUvWYL5MQaS3v', + '3AQ8bAh88TQU7JV1H3ovXrwsuV6s3zYZuN', + '3AeUiDpPPUrUBS377584sFCpx8KLfpX9Ry', + '3CySuFKbBS29M7rE5iJakZRNqb3msMeFoN', + '3E97AjYaCq9QYnfFMtBCYiCEsN956Rvpj2', + '3FHNBLobJnbCTFTVakh5TXmEneyf5PT61B', + '3HdGoUTbcztBnS7UzY4vSPYhwr424CiWAA', + '3JFJPpH8Chwo7CDbyYQ4XcfgcjEP1FGRMJ', + '3JJmF63ifcamPLiAmLgG96RA599yNtY3EQ', + '3JqPhvKkAPcFB3oLELBT7z2tQdjpnxuDi9', + '3Jy7A2rThtU9xm4o8gR3a9pvQuxXnRNuNF', + '3LQUu4v9z6KNch71j7kbj8GPeAGUo1FW6a', + '3LcgLHzTvjLKBixBvkKGiadtiw2GBSKKqH', + '3LtrsjtyLsHoG8WQMe2RFw3de4pLTQZNcY', + '3M219KR5vEneNb47ewrPfWyb5jQ2DjxRP6', + '3Me9QACjioepv2L2oKTC9QQ87NH6vFe1Zj', + '3NPL82eaehTFh4r3StpHqVQBTnZJFaGsyy', + '3NXCvmLGz9SxYi6TnjbBQfQMcwiZ1iQETa', + '3NjHh71XgjikBoTNYdWgXiNeZcLaKNThgb', + '3Qxak1CZhLyZ7GVckKphLURdLBCjMfz9bA', + 'bc1qdtmav38lca8yu3rrcknnqx5242cckgxqws7m72', + 'bc1q32lyrhp9zpww22phqjwwmelta0c8a5q990ghs6', + 'bc1q78ufzeu8w8fwvxuphrdlg446xhyptf28fkatu5', + 'bc1q7t9fxfaakmtk8pj7tdxjvwsng6y9x76czuaf5h', + 'bc1qm34lsc65zpw79lxes69zkqmk6ee3ewf0j77s3h', + // added on the 27/08/2024 + '3PXBET2GrTwCamkeDzKCx8DeGDyrbuGKoc', + '3QK5vQ9hucSg8ZC8Vizq83qEWeHFLAWMud', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bing-cex.js b/projects/helper/bitcoin-book/bing-cex.js new file mode 100644 index 0000000000..853a2aafcb --- /dev/null +++ b/projects/helper/bitcoin-book/bing-cex.js @@ -0,0 +1,4 @@ +module.exports = [ + 'bc1qr8e6kmev99jxnk7hpyhex434t59ke5tpvmnyd3', + 'bc1qzzn5tszxn3ha87xfke540k8pr4favsk9cusakq' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bitfinex.js b/projects/helper/bitcoin-book/bitfinex.js new file mode 100644 index 0000000000..34cc9d09cb --- /dev/null +++ b/projects/helper/bitcoin-book/bitfinex.js @@ -0,0 +1,5 @@ +module.exports = [ + '1Kr6QSydW9bFQG1mXiPNNu6WpJGmUa9i1g', // BTC hot wallet + '3JZq4atUahhuA9rLhXLMhhTo133J9rF97j', // BTC cold wallet + 'bc1qgdjqv0av3q56jvd82tkdjpy7gdp9ut8tlqmgrpmv24sq90ecnvqqjwvw97', // BTC cold wallet +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bitget.js b/projects/helper/bitcoin-book/bitget.js new file mode 100644 index 0000000000..0b7284235f --- /dev/null +++ b/projects/helper/bitcoin-book/bitget.js @@ -0,0 +1,14 @@ +module.exports = [ + '1FWQiwK27EnGXb6BiBMRLJvunJQZZPMcGd', + '1GDn5X4R5vjdSvFPrq1MJubXFkMHVcFJZv', + '3GbdoiTnQrJYatcr2nhq7MYASSCWEKmN6L', + '3HcSp9sR23w6MxeRrLqqyDzLqThtSMaypQ', + '3MdofQ2ouxom9MzC9kKazGUShoL5R3cVLG', + '3Jxc4zsvEruEVAFpvwj818TfZXq5y2DLyF', //add on 12/01/2024 + '3KUwtHc5UhWQ76z6WrZRQHHVTZMuUWiZcU', // add on 27/05/2024 + '3H6JnFoz5jcoATKQ83BuQ3cUUCHswqfgtG', // add on 27/05/2024 + '3AZHcgLnJL5C5xKo33mspyHpQX7x4H5bBw', // add on 27/05/2024 + '3DSST4myyyRbiGzgCBE1RVHY7GRjDCh4n9', // add on 27/05/2024 + '3Nu84pbqfcfaFztQ74qc9ni2PH5HGM1bzS', // add on 27/05/2024 + '34hatYbZ27CLLoZWhuJHzBgoTCwXEv8GwT', // add on 27/05/2024 +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bitmake.js b/projects/helper/bitcoin-book/bitmake.js new file mode 100644 index 0000000000..9e7ad5a81f --- /dev/null +++ b/projects/helper/bitcoin-book/bitmake.js @@ -0,0 +1,4 @@ +module.exports = [ + // wallet provide by a bitmake team + "3F12ncAyx4VkfpvnS7ZxdpggFx4p9RKfVe" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bitmark.js b/projects/helper/bitcoin-book/bitmark.js new file mode 100644 index 0000000000..fe27815ffb --- /dev/null +++ b/projects/helper/bitcoin-book/bitmark.js @@ -0,0 +1,3 @@ +module.exports = [ + "37RJkdkzPXCMYSTq74berJYj9FmNn7wFP5" +] \ No newline at end of file diff --git a/projects/bitmex/bitcoin.json b/projects/helper/bitcoin-book/bitmex.js similarity index 99% rename from projects/bitmex/bitcoin.json rename to projects/helper/bitcoin-book/bitmex.js index 08beb08319..373032a01e 100644 --- a/projects/bitmex/bitcoin.json +++ b/projects/helper/bitcoin-book/bitmex.js @@ -1,4 +1,4 @@ -[ +module.exports = [ "3BMEXqGpG4FxBA1KWhRFufXfSTRgzfDBhJ", "3BMEXxSMT2b2kvsnC4Q35d2kKJZ4u9bSLh", "3BMEXfK7c3STqJjYmy2VQTGtzD3QAXNz3T", diff --git a/projects/helper/bitcoin-book/bitstable-finance.js b/projects/helper/bitcoin-book/bitstable-finance.js new file mode 100644 index 0000000000..4f62f4b7d6 --- /dev/null +++ b/projects/helper/bitcoin-book/bitstable-finance.js @@ -0,0 +1,5 @@ +module.exports = [ + "bc1p36wvtxursam9cq8zmc9ppvsqf9ulefm7grvlfc4tzc5j83rcggsqh6nxw5", // Native(BTC) + "bc1p0uw83vg0h32v7kypyvjn9nextku2h7axjdeefy2ewstevnqffaksjzhrdf", // BRC20 deposit + "bc1pvngqf24g3hhr5s4ptv472prz576uye8qmagy880ydq5gzpd30pdqtua3rd" // BRC20 farm +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bitunix-cex.js b/projects/helper/bitcoin-book/bitunix-cex.js new file mode 100644 index 0000000000..f0daa7428e --- /dev/null +++ b/projects/helper/bitcoin-book/bitunix-cex.js @@ -0,0 +1,5 @@ +module.exports = [ + "bc1qxh9ruwejxz7ztzxejafd74tyxg4sgfeqxun42f", + "bc1qhjfnumgcsqsx6grxa7mfl7rr5g3u8xl4gtt7tr", + "bc1qkvrddql6hh00apslzsxnysl75hhnm5fpqdah37" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bitvenus.js b/projects/helper/bitcoin-book/bitvenus.js new file mode 100644 index 0000000000..60563624c6 --- /dev/null +++ b/projects/helper/bitcoin-book/bitvenus.js @@ -0,0 +1,7 @@ +module.exports = [ + // '3FdoFGYYcD1EU7ekrt2x2u2mFrjmxouMJG', + // '358pjjkYRG8exw2BKZnn7Q9s6SCb7wZEWN', + // '3C1ykoWkHBMZwmY8PUUMVxtJJSBkZBCtN8', + 'bc1qrm2a7u9xyeffvulm6e589qvesmt0v0rjxqfkhv', + 'bc1qvht34dma2uy23l9j862nnqr38a42kjr66e6lec' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/blofin-cex.js b/projects/helper/bitcoin-book/blofin-cex.js new file mode 100644 index 0000000000..a81fceca59 --- /dev/null +++ b/projects/helper/bitcoin-book/blofin-cex.js @@ -0,0 +1,5 @@ +module.exports = [ + "1PM8huQVFSirUT7eAwNm3rBBYTsDRzCaf3", + "1Jw4meLNYAaDcNxJwQdMTRVw74hGPcuV8W", + "bc1q6377fdmkvkhgzpw8drgu76jxulsl5wmmgwtrxu" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/boringdao.js b/projects/helper/bitcoin-book/boringdao.js new file mode 100644 index 0000000000..0cd7f4217c --- /dev/null +++ b/projects/helper/bitcoin-book/boringdao.js @@ -0,0 +1,3 @@ +module.exports = [ + '33ZibwpiZe4bM5pwpAdQNqqs2RthLkpJer' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bsquaredBRC20.js b/projects/helper/bitcoin-book/bsquaredBRC20.js new file mode 100644 index 0000000000..1398765ff1 --- /dev/null +++ b/projects/helper/bitcoin-book/bsquaredBRC20.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1q97ctqygjgj0ljxgge4q735ujxvlad8smass7f0axc6x3ggffr8xqwn69hc" // Bitcoin Multisig Addresses +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bsquaredBTC.js b/projects/helper/bitcoin-book/bsquaredBTC.js new file mode 100644 index 0000000000..6d334b2b18 --- /dev/null +++ b/projects/helper/bitcoin-book/bsquaredBTC.js @@ -0,0 +1,20 @@ +module.exports = [ + "bc1q4fsk5pgnmnu7ngp79xclsw2t0yk46sjqw22ffz", // pre deposited wallets //Bitcoin Multisig Addresses + "bc1qva5m5e7da2zm590z03tdnj42u9q2uye3hgrehwrzgg8j4kxq9seq9rvw0m", // Bitcoin Multisig Addresses + "bc1qjv2lfrv672rqagycs5zdsggmury0cz2vufek46jj86ddqynyp2qsxm3qfs", // Bitcoin Multisig Addresses + + // Bitcoin Custodian Addresses + "131fpYjELat58RVzPp2A9Bo8oNuKiP4vxg", + "bc1qr4cpjazz6hhjh44yrshqw4xs4e3eld60wnsq2m", + "14UwPgMLZY6rLZRDxxvmNWQ9rMkg2iraHG", + "bc1quetqhxs809mwgms0rhae4cw98chzqe0er8fryr", + "34ThPcBtz5ayRybbg1MXnQWBGtUzqUDCMa", + "bc1q082azm83lgpln7puvn4egc9dumlaqfqkqmsght", + "bc1qxxgxywxcq0q405849fyrlxa2zu4nxukf4ytg57", + "3LcCJLivWmaomMyhnyt4pqg8iWi2ECU92T", + "bc1qe4xx7eg5c4qjq8838zv05f7uzfmyyyftdpy48t", + "3GPVsXtvbfFNRYbLwJowaL7EXo8hqakfkv", + "bc1q8axfvwqa0fqds5w6vva9g5kej9e4mp4ap3dmff", + "bc1q6crqwsg59s2j4v5gvd94775pjj8l0fmflmv9jd", + "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/btse.js b/projects/helper/bitcoin-book/btse.js new file mode 100644 index 0000000000..f827da29cc --- /dev/null +++ b/projects/helper/bitcoin-book/btse.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qaxyju6n2x2tednv8e7hgnhnz44vrfcmuhjxpfk" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/bybit.js b/projects/helper/bitcoin-book/bybit.js new file mode 100644 index 0000000000..cecc36f59f --- /dev/null +++ b/projects/helper/bitcoin-book/bybit.js @@ -0,0 +1,10 @@ +module.exports = [ + "bc1q2qqqt87kh33s0er58akh7v9cwjgd83z5smh9rp", + "bc1q9w4g79ndel72lygvwtqzem67z6uqv4yncvqjz3yn8my9swnwflxsutg4cx", + "bc1qjysjfd9t9aspttpjqzv68k0ydpe7pvyd5vlyn37868473lell5tqkz456m", + "1GrwDkr33gT6LuumniYjKEGjTLhsL5kmqC", + "bc1qs5vdqkusz4v7qac8ynx0vt9jrekwuupx2fl5udp9jql3sr03z3gsr2mf0f", + // added on the 15th of july 2024. + "bc1qa2eu6p5rl9255e3xz7fcgm6snn4wl5kdfh7zpt05qp5fad9dmsys0qjg0e", + "16jVbMCcqq1deKrMB3esL2HPso7kvqUsec" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/cake-defi.js b/projects/helper/bitcoin-book/cake-defi.js new file mode 100644 index 0000000000..624456f392 --- /dev/null +++ b/projects/helper/bitcoin-book/cake-defi.js @@ -0,0 +1,3 @@ +module.exports = [ + "3GcSHxkKY8ADMWRam51T1WYxYSb2vH62VL" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/coindcx.js b/projects/helper/bitcoin-book/coindcx.js new file mode 100644 index 0000000000..4522d9ea5a --- /dev/null +++ b/projects/helper/bitcoin-book/coindcx.js @@ -0,0 +1,26 @@ +module.exports = [ + '12hGEyxk4zMLquxiMiFrkvYSohsXz2D3uZ', + 'bc1qz22hegkllltcydg3pz3an6h352mjmyp7n2vhd9', + '1MzSJodjNmACPKyj9VUv9X55Pby87osLhc', + 'bc1qucl4n347qc6e48w85xdxcv86sm3an8fr250hhm', + '1F6CrpEnHEZh6gQtJ7cf1MtK7Y8GYKoP4i', + 'bc1qn2xm6agnanuyuwfcfw92el7nvt2lpsqr5s5c0w', + '17mxRZ9WeXigSwg3Cm62HxeATnuUphMxGL', + 'bc1qffg4ya27430vv5ymg2lhf4mj7tvtc3ur5qyyq3', + '1JV3umtGC6H6tFUVoFyV5KwbJDscUwrtX7', + 'bc1qhlyrdhfqry06nj902p9dxdftm4pxkhdqeum8y8', + '1KXxS6QnzpB8mSLm5kmXJXqvZF7wVvQDCw', + 'bc1qedxsgzuj8ga644gwlqw4nw7f3xncq4g2rskmzu', + '12T8i8tpeczk5JGf8ppZf1w6SFBRwEa9y4', + 'bc1qpl5kqjkugyncr72a4fhxvm0360ehfdl27e00ja', + '1PRwacjHVksLNTkSYNkiWkRgTm1yDSgLMG', + 'bc1q7c9ylgjsyc0yaxwm84jjh6avfajzfe7dhk6e0e', + '1477uXZ1NfUaaZZdnztQ7h8ftGRpuWQPfA', + 'bc1qygg2x02cfy0e6r7798v4qrcjjkzm8tl5t0xkwf', + 'bc1qljm7vwdgdy6ca97stsyjyl3zdjtkdsdm8vnh8f', + 'bc1qqhwh3tcg5duwq7hdlnlr5n2tg2uq755cwmkjqn', + 'bc1qqe4g7sjxzk90nsgj0mwufwcdtd7kufg7k32xch', + '1avi3SkWKGLis8dGCP9JUnFfVeheP8wkt', + 'bc1qmulc2ju4kykj24xuw0fu73h9h3usa897xhaucz', // + '3Dm2TL1pt1VzeBCq9jgvQG81QPv19PyReh' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/coinex.js b/projects/helper/bitcoin-book/coinex.js new file mode 100644 index 0000000000..387e8adfb6 --- /dev/null +++ b/projects/helper/bitcoin-book/coinex.js @@ -0,0 +1,19 @@ +module.exports = [ + '189myj1KAbiCWfqWhT6Td4noANKBuag3QN', + '1C2Pxf3ghtKyM4mKC3xSLKrN33YcKnKF2a', + '1JZw5HYSoAEfvGGVQ4U2JihZaQkjcXrr2i', + '16M3n9p6CLATDnpsJNTjCn22AaxzErxg5V', + '15cYMF4jcRwpcbjENMdMizCzAmd7Pc51So', + '18JQXgQ4GjZAuYCy1fNAFGHVEAWUui2q9h', + '1LGbUy11yMaNC9s73q7vEad8JTZyczCima', + '1DGXwH2gzBYM6UrVE57DaaQ3hJJm3s32YK', + '152GodsXfK5kYMdH4spzYD3Ttm1u2oNipN', + '18oxoXCq5mah3GjLjGCS3BRTQxxN7738rL', + '1H21g458T25SnAzvFDJiBrcyhfwHiCH5YF', + '14BhR6aE8Fkt2c8E1m2ydx76fBz5kpt62K', + '1Ef59jZsv87uAcwBZdDhNxiSbCceQ6bFTA', + '14ukjw4r3UFC5A8yvG7yt2GdvLUHEWtskS', + '141TDnaiLEW1vE5xd42Dw8HEhDCA2qrZTr', + '1Ew9SPwBHY8GjHd3uBxhtGcvVmyBN7PHcw', + '1LYrQCjUf54vf9G4qwFpJQ9RCyL2DprPqQ', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/coinsquare.js b/projects/helper/bitcoin-book/coinsquare.js new file mode 100644 index 0000000000..1452f7562d --- /dev/null +++ b/projects/helper/bitcoin-book/coinsquare.js @@ -0,0 +1,12 @@ +module.exports = [ + '1P7cDFGeWm6ezez6XGXTAjvm8qcsGiMXe7', + 'bc1q0k5rpdwf7wnq3fuk7dfjqd59p3ke7ufqmlkfp4', + 'bc1qdstretw2uvhjen7hvgaya3nsjgr430x9jhqf4a', + 'bc1qez6ezccleuac4dnj5cpexz5mz3j0j3j655j6qn', + 'bc1qg6a9kpmge0fdwtrymjvq3cydfzgpcge7e05e7z', + 'bc1qg8fywv20ztsp0edtf53zpsnxeu5cqxrmdwmtjd', + 'bc1qm5mqpgtt2ufucfdvhu5xcdgs3vzehwu62wsyqy', + 'bc1qmkkejzrq7ayfjpy7w8gmkhd3uwcy7nryr5apch', + 'bc1qsjc50kf72r4q44ac28v3vrukaxjg4w30rh0cmm', + 'bc1qyz9mssutu8xxcgjvsucz38qvxt7hxwtnm5eh8k', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/coinw.js b/projects/helper/bitcoin-book/coinw.js new file mode 100644 index 0000000000..c81128c1b9 --- /dev/null +++ b/projects/helper/bitcoin-book/coinw.js @@ -0,0 +1,4 @@ +module.exports = [ + '14Z9KSmCo1UjvBiXj2j9er35GmGmaFxsmE', + '1KYBKqRjGbRynSiyoiHndULssXrEeWhvU8', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/crypto-com.js b/projects/helper/bitcoin-book/crypto-com.js new file mode 100644 index 0000000000..f092053a2a --- /dev/null +++ b/projects/helper/bitcoin-book/crypto-com.js @@ -0,0 +1,10 @@ +module.exports = [ + 'bc1qpy4jwethqenp4r7hqls660wy8287vw0my32lmy', + '3LhhDLBVWBZChNQv8Dn4nDKFnCyojG1FqN', + '3QsGsAXQ4rqRNvh5pEW55hf3F9PEyb7rVq', + 'bc1qr4dl5wa7kl8yu792dceg9z5knl2gkn220lk7a9', + 'bc1q4c8n5t00jmj8temxdgcc3t32nkg2wjwz24lywv', + '14m3sd9HCCFJW4LymahJCKMabAxTK4DAqW', + 'bc1qjqy709gqpse60hdsm2d2v0dzzu7yp5dej7fdrpl2x3taccvujq4s0vzsyd', + 'bc1qcdqj2smprre85c78d942wx5tauw5n7uw92r7wr' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/deribit.js b/projects/helper/bitcoin-book/deribit.js new file mode 100644 index 0000000000..d918bf65a1 --- /dev/null +++ b/projects/helper/bitcoin-book/deribit.js @@ -0,0 +1,16 @@ +module.exports = [ + // from https://insights.deribit.com/exchange-updates/proof-of-reserves-deribit/ + "bc1qa3phj5uhnuauk6r62cku6r6fl9rawqx4n6d690", + "bc1qtq5zfllw9fs9w6stnfgalf9v59fgrcxxyawuvm", + "1MDq7zyLw6oKichbFiDDZ3aaK59byc6CT8", + "1932eKraQ3Ad9MeNBHb14WFQbNrLaKeEpT", + "13JJ1nxDeX5fMsDeyGHiLoK8rF2ayGq1cX", + "1MdrdcEzfiJdvs6eVSwUx6bWboPX8if5U3", + "35WHp4Hid61peyH4tuhNunwRj2gtNB41Lo", + "34ZHV8dd6uucEUABUydWpKi6F4qKQntEUf", + // added on the 26/06/2024 + "bc1qzwhw94uldd3c8736lsxrda6t6x56030f8zk8nr", + "bc1qrmuxak470z7zch5f3gz05dc6h4ngwqdq4wx80w", + "bc1qf6lm99tp5p27hsmyskve236nsv32lnfwt4h8wk", + "14HeA1YRUiJGb95HVpVTBuavMUBYGk6y7R", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/elSalvador.js b/projects/helper/bitcoin-book/elSalvador.js new file mode 100644 index 0000000000..ba5ef8fda8 --- /dev/null +++ b/projects/helper/bitcoin-book/elSalvador.js @@ -0,0 +1,3 @@ +module.exports = [ + '32ixEdVJWo3kmvJGMTZq5jAQVZZeuwnqzo' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/fastex.js b/projects/helper/bitcoin-book/fastex.js new file mode 100644 index 0000000000..bcd87353da --- /dev/null +++ b/projects/helper/bitcoin-book/fastex.js @@ -0,0 +1,3 @@ +module.exports = [ + 'bc1qs7yen7ljpvyw7vn58ql6zfaddqf4rcjalsgmt5' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/fbi-dprk.js b/projects/helper/bitcoin-book/fbi-dprk.js new file mode 100644 index 0000000000..f0913effe2 --- /dev/null +++ b/projects/helper/bitcoin-book/fbi-dprk.js @@ -0,0 +1,9 @@ +module.exports = [ + //source https://www.fbi.gov/news/press-releases/fbi-identifies-cryptocurrency-funds-stolen-by-dprk + "3LU8wRu4ZnXP4UM8Yo6kkTiGHM9BubgyiG", + "39idqitN9tYNmq3wYanwg3MitFB5TZCjWu", + "3AAUBbKJorvNhEUFhKnep9YTwmZECxE4Nk", + "3PjNaSeP8GzLjGeu51JR19Q2Lu8W2Te9oc", + "3NbdrezMzAVVfXv5MTQJn4hWqKhYCTCJoB", + "34VXKa5upLWVYMXmgid6bFM4BaQXHxSUoL" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js new file mode 100644 index 0000000000..c6e7d795d2 --- /dev/null +++ b/projects/helper/bitcoin-book/fetchers.js @@ -0,0 +1,127 @@ +const { getConfig } = require('../cache') +const axios = require('axios'); +const { getEnv } = require('../env') +const { get } = require('../http') +const sdk = require('@defillama/sdk') + +const abi = { getQualifiedUserInfo: 'function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)' } + +module.exports = { + bedrock: async () => { + const API_URL = 'https://bedrock-datacenter.rockx.com/uniBTC/reserve/address' + const { btc } = await getConfig('bedrock.btc_address', API_URL) + return btc + }, + exsatCreditStaking: async () => { + const { data: response } = await axios.post('https://rpc-us.exsat.network/v1/chain/get_table_rows', { + json: true, + code: "custody.xsat", + scope: "custody.xsat", + table: "custodies", + limit: "100", + show_payer: true + }) + return response.rows.map(row => row.data.btc_address); + }, + fbtc: async () => { + const api = new sdk.ChainApi({ chain: 'ethereum' }) + const staticAddresses = await getConfig('fbtc', undefined, { + fetcher: async () => { + const token = getEnv('FBTC_ACCESS_TOKEN') + const { result } = await get('https://fbtc.phalcon.blocksec.com/api/v1/extension/fbtc-reserved-addr', { + headers: { + 'access-token': token + } + }) + return result.map(r => r.address) + } + }) + + const users = await api.call({ abi: 'address[]:getQualifiedUsers', target: '0xbee335BB44e75C4794a0b9B54E8027b111395943' }) + const userInfos = await api.multiCall({ abi: abi.getQualifiedUserInfo, target: '0xbee335BB44e75C4794a0b9B54E8027b111395943', calls: users }) + userInfos.forEach(i => staticAddresses.push(i.depositAddress)) + return staticAddresses + }, + lombard: async () => { + const API_URL = 'https://mainnet.prod.lombard.finance/api/v1/addresses' + const BATCH_SIZE = 1000 + + return getConfig('lombard', undefined, { + fetcher: async () => { + let allAddresses = []; + let offset = 0; + let batchNumber = 1; + let hasMore = true; + + while (hasMore) { + const { addresses: data, has_more } = await get(`${API_URL}?limit=${BATCH_SIZE}&offset=${offset}`); + const newAddresses = data.map(a => a.btc_address); + + allAddresses.push(...newAddresses); + sdk.log(`Batch ${batchNumber} completed: ${newAddresses.length} addresses`); + + hasMore = has_more; + offset += BATCH_SIZE; + batchNumber++; + } + + return allAddresses; + } + }) + }, + solvBTC: async () => { + const API_URL = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/refs/heads/main/bitcoin.json' + return Object.values(await getConfig('solv-protocol/solv-btc-lst', API_URL)).flat(); + }, + pumpBTC: async () => { + const API_URL = 'https://dashboard.pumpbtc.xyz/api/dashboard/btc/addresses' + return getConfig('pumpbtc', undefined, { + fetcher: async () => { + const { data } = await axios.get(API_URL) + return data.data || [] + } + }) + }, + tBTC: async () => { + const API_URL = 'https://api.threshold.network/tbtc/wallets/pof' + const { wallets } = await getConfig('tbtc/wallets', API_URL) + return wallets.filter(i => +i.walletBitcoinBalance > 0).map(wallet => wallet.walletBitcoinAddress) + }, + exsatBridge: async () => { + const API_URL = 'https://raw.githubusercontent.com/exsat-network/exsat-defillama/refs/heads/main/bridge-bitcoin.json' + const API2_URL = 'https://rpc-us.exsat.network/v1/chain/get_table_rows' + + const config = await getConfig('exsat', API_URL) + const custody_addresses = config['custody_addresses']; + const custody_ids = config['custody_ids']; + const owners = [...custody_addresses]; + + for (let custody_id of custody_ids) { + let lower_bound = null; + let hasMore = true; + + while (hasMore) { + const { data: response } = await axios.post(API2_URL, { + "json": true, + "code": "brdgmng.xsat", + "scope": custody_id, + "table": "addrmappings", + "lower_bound": lower_bound, + "upper_bound": null, + "index_position": 1, + "key_type": "", + "limit": "100", + "reverse": false, + "show_payer": true + }); + + const addrs = response.rows.map(row => row.data.btc_address); + owners.push(...addrs); + + hasMore = response.more; + lower_bound = response.next_key; + } + } + return owners + } +} \ No newline at end of file diff --git a/projects/helper/bitcoin-book/fire.js b/projects/helper/bitcoin-book/fire.js new file mode 100644 index 0000000000..bf91f24ca2 --- /dev/null +++ b/projects/helper/bitcoin-book/fire.js @@ -0,0 +1,6 @@ +module.exports = [ + 'bc1q36c0rp4ydl6uvvguhw9nr7njm49addzkgftqev', + 'bc1q3z0khuld6nd7esv46nxj9ketteqw9qz86peyeh', + 'bc1q4hz59t7v0uxujuyrhp9679uppur7ke9u3vshvd', + 'bc1qdlrh7ycyqxe62vk5m70y353vmep9ullxx5j9ar', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/flipster.js b/projects/helper/bitcoin-book/flipster.js new file mode 100644 index 0000000000..7ec436017a --- /dev/null +++ b/projects/helper/bitcoin-book/flipster.js @@ -0,0 +1,3 @@ +module.exports = [ + "31iAUikiV7yKEYBzbA1iHPcanHNsLBFe8C" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/garden.js b/projects/helper/bitcoin-book/garden.js new file mode 100644 index 0000000000..11ad3a29ca --- /dev/null +++ b/projects/helper/bitcoin-book/garden.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qhww67feqfdf6xasjat88x5stqa6vzx0c6fgtnj" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/gate-io.js b/projects/helper/bitcoin-book/gate-io.js new file mode 100644 index 0000000000..2a8cb8f5a9 --- /dev/null +++ b/projects/helper/bitcoin-book/gate-io.js @@ -0,0 +1,8 @@ +module.exports = [ + '14kmvhQrWrNEHbrSKBySj4qHGjemDtS3SF', + '162bzZT2hJfv5Gm3ZmWfWfHJjCtMD6rHhw', + '1EkkGXR7dTbZbrKFKoe6YEP4gj4GzMeKvw', + '1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9', + '1HpED69tpKSaEaWpY3Udt1DtcVcuCUoh2Y', + '3HroDXv8hmzKRtaSfBffRgedKpru8fgy6M', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/hashkey-exchange.js b/projects/helper/bitcoin-book/hashkey-exchange.js new file mode 100644 index 0000000000..978a0da1c2 --- /dev/null +++ b/projects/helper/bitcoin-book/hashkey-exchange.js @@ -0,0 +1,6 @@ +module.exports = [ + "bc1qqe394jlqq86muq23d4vrnhzzvcv8jnepgt8lx7", + "1NfJSiqBw4fb74KgVQrPsk5W5aqitAD1Xv", + // "bc1qlrawqecuwgpzzwh04pkhtfsqsk33kald22ds3c", // bosera funds https://www.bosera.com/english/index.html + "18oxobhCNKnHjb7nEFDmPdXbCZthFWezrm", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/hashkey.js b/projects/helper/bitcoin-book/hashkey.js new file mode 100644 index 0000000000..9dbb016d3b --- /dev/null +++ b/projects/helper/bitcoin-book/hashkey.js @@ -0,0 +1,4 @@ +module.exports = [ + "bc1qyvppkaa74d9jvtz664a6uxmj09hf0eyg3uhx4h", + "1DywJMqHHMWuP7xyfkRqJZCEe7GdEKFRcp" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/hibt.js b/projects/helper/bitcoin-book/hibt.js new file mode 100644 index 0000000000..24ca126ecd --- /dev/null +++ b/projects/helper/bitcoin-book/hibt.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qpxntlx09kqvpwl7vmjw9f28yvytdqkdx8xh63w" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/hope-money.js b/projects/helper/bitcoin-book/hope-money.js new file mode 100644 index 0000000000..3bc94a71f0 --- /dev/null +++ b/projects/helper/bitcoin-book/hope-money.js @@ -0,0 +1,7 @@ +module.exports = [ + '15PYHP5ZW29B3o19jFNKz6RyRdHCtzJj5H', + '16BLcAyJR8unm8RpQT9PGTwh5uPpZEf2ut', + '3JoCB8ifwhL4YKo9rCYMgVGbqxBqnpQpdS', + '179fgM9yyTHj4ZCTfAcGhUFiQMXuPx5xrF', + '1LaC3Xt8RZWYH1pjcvXxrWxLvXe7iR3ybe' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/hotbit.js b/projects/helper/bitcoin-book/hotbit.js new file mode 100644 index 0000000000..2ac17bafc8 --- /dev/null +++ b/projects/helper/bitcoin-book/hotbit.js @@ -0,0 +1,3 @@ +module.exports = [ + "1MiFZMJkFMhMrubjjo6f5oEhh7XgSwXWgp" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/huobi.js b/projects/helper/bitcoin-book/huobi.js new file mode 100644 index 0000000000..ee1188524d --- /dev/null +++ b/projects/helper/bitcoin-book/huobi.js @@ -0,0 +1,14 @@ +module.exports = [ + "12qTdZHx6f77aQ74CPCZGSY47VaRwYjVD8", + "143gLvWYUojXaWZRrxquRKpVNTkhmr415B", + // '1KVpuCfhftkzJ67ZUegaMuaYey7qni7pPj', this wallet is backing USDD acording here https://prnt.sc/i3cFaak7H9Y8. For that reason, it should not included as HTX. + //These 3 addresses has 48,555 #Bitcoin. This is only less than 3% of the total high value assets we have, including btc, usd, stablecoins, T-bills.. According to Justin Sun https://twitter.com/justinsuntron/status/1590311559242612743 + "14XKsv8tT6tt8P8mfDQZgNF8wtN5erNu5D", + "1LXzGrDQqKqVBqxfGDUyhC6rTRBN5s8Sbj", + "1HckjUpRGcrrRAtFaaCAUaGjsPx9oYmLaZ", // add on 08/08/2023 (we defillama) + "1L15W6b9vkxV81xW5HDtmMBycrdiettHEL", // add on 08/08/2023 (we defillama) + "14o5ywJJmLPJe8egNo7a5fSdtEgarkus33", // add on 08/08/2023 (we defillama) + "1BuiWj9wPbQwNY97xU53LRPhzqNQccSquM", // add on 08/08/2023 (we defillama) + "1AQLXAB6aXSVbRMjbhSBudLf1kcsbWSEjg", // add on 23/02/2024 (we defillama) + "1ENWYLQZJRAZGtwBmoWrhmTtDUtJ5LseVj", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/imbtc.js b/projects/helper/bitcoin-book/imbtc.js new file mode 100644 index 0000000000..e92993a2c3 --- /dev/null +++ b/projects/helper/bitcoin-book/imbtc.js @@ -0,0 +1,3 @@ +module.exports = [ + '3JMjHDTJjKPnrvS7DycPAgYcA6HrHRk8UG', '3GH4EhMi1MG8rxSiAWqfoiUCMLaWPTCxuy' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js new file mode 100644 index 0000000000..a8c9e3a461 --- /dev/null +++ b/projects/helper/bitcoin-book/index.js @@ -0,0 +1,173 @@ +const ainn = require('./ainn-layer2.js') +const allo = require('./allo.js') +const avalance = require('./avalanche-btc.js') +const fetchers = require('./fetchers.js') +const bevm = require('./bevm.js') +const binance = require('./binance.js') +const binance2 = require('./binance-btc.js') +const bitstable = require('./bitstable-finance.js') +const boringdao = require('./boringdao.js') +const bsquaredBTC = require('./bsquaredBTC.js') +const bsquaredBRC20 = require('./bsquaredBRC20.js') +const elSalvador = require('./elSalvador.js') +const garden = require('./garden.js') +const hopeMoney = require('./hope-money.js') +const krakenBTC = require('./kraken-btc.js') +const lorenzo = require('./lorenzo.js') +const lorenzo2 = require('./lorenzo-enzoBTC.js') +const merlin = require('./merlin.js') +const multibit = require('./multibit.js') +const obelisk = require('./obelisk.js') +const roup = require('./roup.js') +const tronBTC = require('./tron-btc.js') +const wbtc = require('./wbtc.js') +const xlink = require('./xlink.js') +const xlinkLST = require('./xlinkLST.js') +const xrgb = require('./xrgb.js') +const imbtc = require('./imbtc.js') +const twentyOneCo = require('./21Co.js') +const avalonCedefi = require('./avalon-cedefi.js') +const pstakeBTC = require('./pstake-btc.js') +const biconomy = require('./biconomy-cex.js') +const bigone = require('./bigone.js') +const bingCex = require('./bing-cex.js') +const bitfinex = require('./bitfinex.js') +const bitget = require('./bitget.js') +const bitmake = require('./bitmake.js') +const bitmark = require('./bitmark.js') +const bitmex = require('./bitmex.js') +const bitunixCex = require('./bitunix-cex.js') +const bitvenus = require('./bitvenus.js') +const blofinCex = require('./blofin-cex.js') +const btse = require('./btse.js') +const bybit = require('./bybit.js') +const cakeDefi = require('./cake-defi.js') +const coindcx = require('./coindcx.js') +const coinex = require('./coinex.js') +const coinsquare = require('./coinsquare.js') +const coinw = require('./coinw.js') +const cryptoCom = require('./crypto-com.js') +const deribit = require('./deribit.js') +const fbiDprk = require('./fbi-dprk.js') +const mtGoxEntities = require('./mt-gox-entities.js') +const silkroadFBIEntities = require('./silkroad-fbifunds-entities.js') +const fastex = require('./fastex.js') +const fire = require('./fire.js') +const flipster = require('./flipster.js') +const gateIo = require('./gate-io.js') +const hashkey = require('./hashkey.js') +const hashkeyExchange = require('./hashkey-exchange.js') +const hibt = require('./hibt.js') +const hotbit = require('./hotbit.js') +const huobi = require('./huobi.js') +const kleverExchange = require('./klever-exchange.js') +const korbit = require('./korbit.js') +const kraken = require('./kraken.js') +const kucoin = require('./kucoin.js') +const latoken = require('./latoken.js') +const maskex = require('./maskex.js') +const mento = require('./mento.js') +const mexcCex = require('./mexc-cex.js') +const mtGox = require('./mt-gox.js') +const nbx = require('./nbx.js') +const nonkyc = require('./nonkyc.js') +const okcoin = require('./okcoin.js') +const okex = require('./okex.js') +const phemex = require('./phemex.js') +const pionexCex = require('./pionex-cex.js') +const probit = require('./probit.js') +const robinhood = require('./robinhood.js') +const rosenBridge = require('./rosen-bridge.js') +const silkroad = require('./silkroad.js') +const swissborg = require('./swissborg.js') +const toobit = require('./toobit.js') +const indiaCovid = require('./india-covid.js') +const wooCEX = require('./woo-cex.js') + +module.exports = { + ...fetchers, + ainn, + allo, + avalance, + bevm, + binance, + binance2, + bitstable, + boringdao, + bsquaredBTC, + bsquaredBRC20, + elSalvador, + garden, + hopeMoney, + krakenBTC, + lorenzo, + lorenzo2, + merlin, + multibit, + obelisk, + roup, + tronBTC, + wbtc, + xlink, + xlinkLST, + xrgb, + imbtc, + twentyOneCo, + avalonCedefi, + pstakeBTC, + biconomy, + bigone, + bingCex, + bitfinex, + bitget, + bitmake, + bitmark, + bitmex, + bitunixCex, + bitvenus, + blofinCex, + btse, + bybit, + cakeDefi, + coindcx, + coinex, + coinsquare, + coinw, + cryptoCom, + deribit, + fbiDprk, + mtGoxEntities, + silkroadFBIEntities, + fastex, + fire, + flipster, + gateIo, + hashkey, + hashkeyExchange, + hibt, + hotbit, + huobi, + kleverExchange, + korbit, + kraken, + kucoin, + latoken, + maskex, + mento, + mexcCex, + mtGox, + nbx, + nonkyc, + okcoin, + okex, + phemex, + pionexCex, + probit, + robinhood, + rosenBridge, + silkroad, + swissborg, + toobit, + indiaCovid, + wooCEX +} \ No newline at end of file diff --git a/projects/helper/bitcoin-book/india-covid.js b/projects/helper/bitcoin-book/india-covid.js new file mode 100644 index 0000000000..ec4208aeec --- /dev/null +++ b/projects/helper/bitcoin-book/india-covid.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1q220k2449fau0pxu9hfn28q3w4k99ep9hwsa5fa" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/klever-exchange.js b/projects/helper/bitcoin-book/klever-exchange.js new file mode 100644 index 0000000000..6c2d7acf09 --- /dev/null +++ b/projects/helper/bitcoin-book/klever-exchange.js @@ -0,0 +1,5 @@ +module.exports = [ + 'bc1qze8pn5vywzk8enqdr9ve28lyas23kurzd37027', + 'bc1qgy5zyuvsw5wnt5lrx3m62tt2pmdl69avd5vw6n', + 'bc1qk4l4u3lh7rrufsw0z6vmkln5kesf0a9q0srnkr' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/korbit.js b/projects/helper/bitcoin-book/korbit.js new file mode 100644 index 0000000000..ccdfbe18b4 --- /dev/null +++ b/projects/helper/bitcoin-book/korbit.js @@ -0,0 +1,23 @@ +module.exports = [ + '1JtAupan5MSPXxSsWFiwA79bY9LD2Ga1je', + '3E8BTrBB7jxAemyUqSnN4YFLMC22cShZJZ', + '3GoBetHTvfnaRNQbR4yy5YNUjX4d8mTQKK', + 'bc1q09j44e0xxxusj3zsan20x7tuvtumxfv9smlq27t0nwp57gxf7htqq6m9lj', + 'bc1q0uffd8egas4w87dxq998ttfl6j3jtw6k7cafce9v4mvr5qc9tvfq9czqk9', + 'bc1q33m8td986p3vcnap9zqpx3d8v8zujtkvqacsya5xfvf945vmvxzqth4h4t', + 'bc1q3yn06lfl8ayjukya52ksff0uaveurfc8lm3ftdgu8ywvwanx8lqswj7w9u', + 'bc1q4sv2fxlp6w08wkq8ywmughxkm7n75d2fmrgnmvwun6rhepyknjxqm99v4x', + 'bc1q7fww9657ts2au45wh0ed39rjze6ja93z0498z4j89pqjky266wzs0sz8ka', + 'bc1q9pnwfyd4jtkulyk4w057wsdjhykaw6fftw06k2cn2m3y7jlsfe2qvxvm8e', + 'bc1qa8may4g0yzezjyesqcq0mwggy5wwzl0yhs0a8tk9ucej5qg6ujfqscv2jq', + 'bc1qgkx4ee8ac3as5y4ddhw6uedyk9adsywdzgc0fzxv304lcrh4qs9sn96agt', + 'bc1qku6z53kuyaj9r898kj6esqnwz7wke82mwgw43vhu33ld7sx3200s2u9p9x', + 'bc1ql0p3klhr2d8z07ja3t5d5dnxrenhp4gcjeszxpfflr08zaqqx5zqpkeqnl', + 'bc1qnerwvz93pcj653r5yd4hnd2d7np2drhdhyruj7qdvl3psc5wnf0q6x9me4', + 'bc1qs9ut74nue7vjknz2eqxegmtuzqhjzx9y8tzjymvlg05v8a5ffr5qz402cx', + 'bc1qsk6h7d2l7e7r2a8krlxjn6wdnhhszyrtzcugdsfa5zz4syajzl5spd52h5', + 'bc1qsmqvkwrsy5xw2hm885l5fv7s2hxzauz5fn9jayfmd86305wehrts2lztgs', + 'bc1qtlen0nuvln3aqcn2r3nljshdmzakq7z5z4rexpk23mj8u8lmc8ysc29jct', + 'bc1qzdt5z4f46jak59jku5jmvv3f2ru20htqs7jhy0whazgd5v4626eq4vkxqz', + 'bc1qzu4lnzfpskwsvnyvzud9a7ru4d2ft7whqvl5d3kskxxhgeupnjjquzvt97', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/kraken-btc.js b/projects/helper/bitcoin-book/kraken-btc.js new file mode 100644 index 0000000000..cb54d312af --- /dev/null +++ b/projects/helper/bitcoin-book/kraken-btc.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qqwf6hexnnswmj6yuhz5xyj20frtp8exv7mclck" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/kraken.js b/projects/helper/bitcoin-book/kraken.js new file mode 100644 index 0000000000..c089298260 --- /dev/null +++ b/projects/helper/bitcoin-book/kraken.js @@ -0,0 +1,16 @@ +module.exports = [ + 'bc1qnhmemsqfhycvp6g50v732h7wfwdt68el4ux5ttu8xwsrzngmxv0qr55aga', + 'bc1qa5aux0l2c3l99tpmd9c85770kqpksg3g6dxaw03jj6lphnwy4lqq68xfgc', + 'bc1q3gqqnn9hr0uachfk6rv3qhf3pp9z8a4z63ksc5qu0c2vvtykqd9qj3fyum', + 'bc1qplr053c80nzlqapuatfslyhmns6sfn32qzz3xkdn36jjryw8vsys8y7wlc', + 'bc1qhxv3pg2hsnw3m9jukuc6erjwwd03rzwhd2k6zh5uf6s2lwpuv3rq9zefru', + 'bc1q08n37tm63z3f0myqe6zjx7ymtng8c9qedpwpplq95qkmx0cpke7qyz4y8v', + 'bc1q02cq8du8r7ktuy5l0ltc4cv82xnaw4upaaw8y4rq6uycdp0k5nmquljtzk', + 'bc1qcf9qe8ytx5qlcq0ft4vm2xm3fyfvurrkende46hpmwwnzpctfu3szxpve2', + 'bc1qrj5vg73fxs6h6pmdjld387j5szkswc2y39rfutw8gl93h647wpksukyln9', + 'bc1q9hqaqzyf6zsd330pkvtq5uxcxprzr368zdsxx5srtep7kepx523q2gd0ef', + 'bc1q36l8mssxdlncj7njkqvayv3jumked9jdtjxete66cxnzluf4j0msjm4w80', + 'bc1qs8cyln26t2f5rwu2frnqvtltfxt0qqql0elmhrpsexlzveap82eqtyvsgu', + 'bc1qcds58swh4g6zsdmws9ltcdpqz4l44utu5wv9vfpmemps3whgdacqkakrk0', + 'bc1q75tsfq2c5cqp2ss32qksmnzd9yea2mjsjktdmrz900dcmg43ck4s66sgjx', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/kucoin.js b/projects/helper/bitcoin-book/kucoin.js new file mode 100644 index 0000000000..713bd603fb --- /dev/null +++ b/projects/helper/bitcoin-book/kucoin.js @@ -0,0 +1,114 @@ +module.exports = [ + 'bc1q04p5psjsp7j80sq6u4djgqk3c7pk6n93q43ply', + '38fJPq4dYGPoJizEUGCL9yWkqg73cJmC2n', + 'bc1q0243pvcnutwtm3m6t005402yk8utq4kfqqghhu', + 'bc1q080rkmk3kj86pxvf5nkxecdrw6nrx3zzy9xl7q', + 'bc1q07yhcr2qmwkc32z4gfaemtjtx90am6e6rpl9sg', + 'bc1q224fr84g5xqvp2lkwmzvyec9frwk5w5f5v5w38', + 'bc1q204dfzksn4l0rhhajm9fyd5h92dac8tnuur8jp', + '37nA3mMvQwPGVh6BKdLXKBiPjLFVbRLZEp', + 'bc1q0h72mfwgtsnfkcmpsnt3kmrrp4z5x3v469mz0k', + 'bc1q0l84mekaaszjfst7lswaheu7gcymv2h2k8z6fl', + 'bc1q2hpdg7pwghz9um27hqsmv2sg3f8f9fwtjvdenx', + 'bc1q3yy6h7x9wtffu8f7hpkhlyssw3s28xzj0nydye', + 'bc1q3kwpxug0q0w55qjrfrcykxu2yn02xhzn49fnxw', + 'bc1q2wxfd36s204jkpfmez2u0nh7540cctur2v27ht', + 'bc1q3g7sltlncshtqcu9wyhqavzxlfa4tj97whapup', + 'bc1q4jszmgxml90ernkn3l908sn4hr94zk6wynp788', + 'bc1q3sevrnv8khxe6fnl87ad8e4fjefu7rmp39pxl6', + 'bc1q4xt86cp0xf6zsrfsgspnfm8579ksurxppae66a', + 'bc1q4f8uwyargzd8eajj2vrdjz4l0hvhjdlpmchstm', + 'bc1q3fzjrvlvsl6j58x38gzk0c8dgvfudsqcsdqyry', + 'bc1q5h4ucvz7qqnhypekhd8jusc8z8msytxflzfs8s', + 'bc1q5ty9r24qftnx7c0vw0y76d5kneekse7hl878yv', + 'bc1q6z680y2fkmmu49ykm0dm0temp25p034p034fme', + 'bc1q5qsadcuj0at2xk4lfca5zull8mkgwfm06qduq4', + 'bc1q80elat9h0nfhuzvuvn4yl2nh0eqxwfzas5afnv', + 'bc1q6dr8nqmgm5qvuukuf5ux3m0fdthnhx033uv3vr', + 'bc1q6tj4wm295pndmx4dywkg27rj6vqfxl5gn8j7zr', + 'bc1q5w44vqvfpnwzpclwhdmx98uenwdtdfd85qtw34', + 'bc1q82qe6w4afzt2l94wn4d9e0uchj8t2x2dtdf2pu', + 'bc1q5cza73vpzhrsruy4e7gudvq6xv6vfs9hjs5pl3', + 'bc1qa482xwlzz479nyep2ve0z6t9t29dg0zem9wqt2', + 'bc1q8yja3gw33ngd8aunmfr4hj820adc9nlsv0syvz', + 'bc1q9uddlcfqdyh6dlu3pptchazr0va0cshnqss2yk', + 'bc1qa8jaa3pss396sx52hkft5ta2dey69fkrt8mfsc', + 'bc1q9020xphp6ukc4j72hy52gk2nxujwt4kr8dq6eu', + 'bc1q8jjlupqcvxv25usqu8hvlnd8ym0stcpq4jfy9x', + 'bc1q98mvmv9nl4p744tdf2zh3uzv30yea2njy0le9d', + 'bc1q9hrcsckdwrezlw7gspefeyk9nyqmwpy3ea8wwx', + 'bc1qa3h4re6gf6qmmesjqfzn0vu2rmc6e00s4gjjle', + 'bc1q9wvygkq7h9xgcp59mc6ghzczrqlgrj9k3ey9tz', + 'bc1qfyr7tvv0a2dcq6xp4dgr5nemfmnak2e2scn6hg', + 'bc1qdhqxc3h6dnc6x0k8emtcnuyt8aspy83w0g9xht', + 'bc1qfcuvuaam666pv777ad59wwue5l7j36hr95f8gv', + 'bc1qf3wwg8dayutammv2e6lahudyc7j2ef579hyx3m', + 'bc1qamlau4w545vsjsmnhzmztlv3sy4tu6v9cnxtcg', + 'bc1qea6uvmc2kqndhewtlnc9duh5aa30ptvp3mhk9h', + 'bc1qgrxsrmrhsapvh9addyx6sh8j4rw0sn9xtur9uq', + 'bc1qcyjkktrvwatdqyvpm04vs3k2x5r4ystnw7msrk', + 'bc1qggwgcwnjvlma9hr569jhgx2yuncaaq0ace5ywp', + 'bc1qartr66auwm2tlcjp7cqgs8cx4p6q7lydrtwf4p', + 'bc1qkrewa0m37wjmkcgs0w2gh9zhjqclkq74ckt4x4', + 'bc1qk947xflcafthv8k6gx7m2cvwzqzy68kl5npkyw', + 'bc1qh573eaggrqexqx7xzm4e57k6sm9r7zpuxwqxzn', + 'bc1qj5gnrfdmcftzxgrwcdts4plw4kaydjs5kq560l', + 'bc1qlldl5qma9glxwt3j06eef05590uyy2td3ye90c', + 'bc1qhafun32xkhxpec8dq3kpxyq5x9ur437mj4dusy', + 'bc1qh6tqdv9k2pew6vyvrmg76ae55n5rwa2djmyyyk', + 'bc1qjxv6j2sv6za57khvvd5yu9jxkv3g3qvxh6sach', + 'bc1qjefrh2gf28g6x56eeausc30gxewamj7qwtzfpg', + 'bc1qhs4u46ygdskuljadnxn6thqsrjw3nf9r8nfclm', + 'bc1qnl68wnf3d6jz532dl65hj9urw9j2432fjg03nr', + 'bc1qnetky45z2vguazzczuy7x2446vsjn4ku76d5k8', + 'bc1qlw4dv8nt5uc35dkmftlt3nt0rl0cte4he998qt', + 'bc1qnvdx4dt8kn68csvcqvdtnlzw8hadapk9e9k857', + 'bc1qnqhcfntmlh2nnu5rp25szqgxw7v3783xrgcd44', + 'bc1qp22u6u75j2nvvhychyfd9uxr6s2jkf5p985rct', + 'bc1qnxn6352sn9mm6dxgmfrn43fgtu0l2kcx2y3ddh', + 'bc1qm882j3900we3eewa5fdw4hlwlnef35phmsn7x8', + 'bc1qpafgjjmqlv32m6m6qpte2ldlz0wcuj3ajyt8gd', + 'bc1qmtvfu97nlrl8qtujvj5jg47dc0p3w8sun6esaf', + 'bc1qr9hf2v2gf6haq7tsvckel7u6ja46fnqfkt6u5p', + 'bc1qpuhnd3gqhqlezgcuuhc2ywfw2w03uyz0seg802', + 'bc1qr77hw0dek5f8uvmeazd3egym2m3npjf2nvrza5', + 'bc1qpdfchk5j5tvkwf0z4kpftysv88h5szz4ms8try', + 'bc1qprpm6caxcuewnme4at7h2skhv2rury274a0vln', + 'bc1qq9u67zacfe3vz40e36nltn3agt9hf75g7av2xx', + 'bc1qrf9llyljmwy8egcjjsw0z0a8n5sgjlhcemezcl', + 'bc1qqx0udc7ndr77yg4v7rwuugnwk8n8xqaydmakfu', + 'bc1qqg92jrprgh0vdq3pd8wctnzqyuwn5kp20hhfh6', + 'bc1qpnmkhx9ndgnk639wh5gyuex4nsx7s8t8d33pzt', + 'bc1qtcxldruuuhvk8zjmw3a3dpwfvu2d0m9qyctv82', + 'bc1qtlgfyl9yjyluwzyyayp2fs0r4kcjtv2axsmzl8', + 'bc1qs84j4s45nztsx9759vkha0wvvx28dlqk7p2n5y', + 'bc1qteec4z0tcvv40r6py855gg77rwnhe9ege42x0t', + 'bc1qrt7rkpswpgmcag7txzf6ps9mvepwgndshqdx6d', + 'bc1quqy97s6lj3mty7hdp4at7uvmlzssh57jezx85v', + 'bc1qseaaa4hnexjugx26p605getpdnkwy3up64uws9', + 'bc1qudtghe07cfslxyv36zk5ums65c32xcw0nz6zhg', + 'bc1qsfdf47l3ftsqv2muvfftnulcp4qwzypuxm9k30', + 'bc1qul97gsvkpfju6fa53cezzxx5wmv4t8rl6gdt62', + 'bc1qv3v2u78m6vec2jqe7w0esm6rccmysccdvkpr3t', + 'bc1qwjftm2nl65gmevmutfqe8q7k0aaahlxt3a9wam', + 'bc1qvh0zexe6422t85x3kzgvms9fd984606uhf44ug', + 'bc1qvj8a4kjq888c2l22pdgjx3cgaq94vm3hjzyq6l', + 'bc1qwgzyz8xpwdrx54rsm5p74ksc6wkxr8y4ncejwh', + 'bc1qvvqafwsqr2rquyvym4l6rtt7ayukpmw2sfxn7f', + 'bc1qvkzdg9x58zyupept40zcjhmztn3l2flqss2f4x', + 'bc1quyayxjg0r68wsj6c2zcu3f7nnj9um5pwdgr36m', + 'bc1qw83c8j8pf2azegtyeszqqdaafgqj4hl3xcdy95', + 'bc1qwxg6gra5g9tlvztr9qphzpruch30ka40e4tl48', + 'bc1qz0q4hyn5k8plleax2g52jsr0k07vgtqcr634g3', + 'bc1qz0nfyvylrvn9h2rqm7lcegzv79du2p5jezgept', + 'bc1qxfgeqygy229hrjrwmklzgwme70h8mmrjcyueag', + 'bc1qyz4zr7cv2922cjua9xrezsda82gl8z653w6ru4', + 'bc1qxnsr0al2lw7hqg90j05x9s0gxm5g4skmcslrut', + 'bc1qymcn42gst8jvcu4y9c6tf6ngfs38j66hd5zvhs', + 'bc1qzghz50r66hlp4wufyy55m5a3jjl5grkmetygsg', + 'bc1qyatvzh0ndg464ph7txwjw6kgkczw8kw03lcgg7', + 'bc1qy8054ua06akklh6avf06crt4u2hu4skasr5ead', + 'bc1qy7uquly0ha78lmn47hedd7e0swkmwpyft9j7e2', + 'bc1qzy4lg8yg6dsn0dppx3a4kq8tqe2hhrh6af3778', + 'bc1qzkqzmlj47z0ww253xu2egewcw4wagz6qfa6fr8' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/latoken.js b/projects/helper/bitcoin-book/latoken.js new file mode 100644 index 0000000000..220be747b8 --- /dev/null +++ b/projects/helper/bitcoin-book/latoken.js @@ -0,0 +1,5 @@ +module.exports = [ + "bc1q48amr6l7dvacdppgucvnswwuyleaqh4dus8z8h", + "bc1q2cgh9nxn7cqmqhk4hc5fu6mju8nzy9a20qqqh8", //cold + "bc1qw5fc9ml9vm4xq5c6xkcdu3vtwyw4gdn8lw0uwq" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/lorenzo-enzoBTC.js b/projects/helper/bitcoin-book/lorenzo-enzoBTC.js new file mode 100644 index 0000000000..bb7e56d6cb --- /dev/null +++ b/projects/helper/bitcoin-book/lorenzo-enzoBTC.js @@ -0,0 +1,4 @@ +module.exports = [ + 'bc1qndzgrwj3y2lhcklme4t72jxq3df2h05vjdgzpp', + '19wFRSr3GYHmVQtnmbkx7Wkjw3jZdyYB9a' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/lorenzo.js b/projects/helper/bitcoin-book/lorenzo.js new file mode 100644 index 0000000000..13ccded61a --- /dev/null +++ b/projects/helper/bitcoin-book/lorenzo.js @@ -0,0 +1,32 @@ +module.exports = [ + "bc1qaf6laj9m7jteztyz4lulrtcjtpusfcfnd7r7xn", + "bc1qf6cj2z2e2mzuvfrl80vgt53k7jc2vf36ckahgy", + "bc1q5hc68n6krnzgzswf7rknha2aqxzrzup4vlhce8", + "bc1qpxpmr3zdjulqnwa3jdvm83tpaek6dv3kc75ms7", + "bc1qaml9d9mqgfhsfuaa2ymutdl4psj8c2undx9n72", + "bc1qutgngqyrflxrfmk9k28ucvq0s2v8a43nwfwv02", + "bc1qrx3fpr5j6sprxett45c2kl9p4pajyxep0mapfd", + "bc1q00t2ntm46c2nfvcer6ukj6npaxjurujthse4qq", + "bc1q3pzhncle68gct6me08kn5kf9awkevt6ettwrmg", + "bc1qw6cvwx8ajprmp2lzkhrsps2qx4k9r2pj4xj98x", + + //btc script-address after lorenzo stake to babylon + //cap 1, Delegate to Lorenzo FP(db9160428e401753dc1a9952ffd4fa3386c7609cf8411d2b6d79c42323ca9923) + "bc1pjy5mq7vlqkq6nldxghauq0sqgh3hjdrp2adl7tcalkavt9ly5g8q3zkymk", + "bc1pck8hnfa76k9gqtddyjvt0syzlxj5atfr5g0dk0ktmdr9u9h2gnesge0f5v", + + //cap2, Delegate to Lorenzo FP(db9160428e401753dc1a9952ffd4fa3386c7609cf8411d2b6d79c42323ca9923) + "bc1pf2x7w0wwutvj5qznrxygpv5wcj3nvzq9dqhpmkyfk84nkg778q0qa605e8", + "bc1pstunan5nv657dqx32tdup3y8uxq6eja6z3d4kukspjpq23gxf4zqdce4hn", + + //cap2, Delegate to BSquaredNetwork FP(2f8ec74d558fe7a97d10be230bf1485db9be675228abfbf957ba050c714b679a) + "bc1py54xje6lxdd8ej9hqxdxnp5dyjwu2eda2rxa2yuaptv3lrw3t2tscly6y7", + "bc1pydkry09hpqqv4hxrrlrgpddky4u39xrpqd0xvsf9smjpd65s49qqnq5zel", + + //cap2, Delegate to ChainUp FP(31287a9728f7b11863b9c56fc4cca103f0473dcgitdc6746ed7f79050d3adff644b) + "bc1p6dltgypr57fc648txjj7zwk6k605ca9x2ul0pycld22x86jcvxmsg7547j", + "bc1pw8za3k5upa565n0kv55e89a8l0hkzpnfenj767j0cwfu7rn83yhqvuehcd", + + //cap2, Delegate to Lombard FP(609b4b8e27e214fd830e69a83a8270a03f7af356f64dde433a7e4b81b2399806) + "bc1pa56692v3hxguvu8vgu5d7dh9twlj7wm87qvzvxdru3rnluv8nmdqk58ewz" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/maskex.js b/projects/helper/bitcoin-book/maskex.js new file mode 100644 index 0000000000..22f1111072 --- /dev/null +++ b/projects/helper/bitcoin-book/maskex.js @@ -0,0 +1,4 @@ +module.exports = [ + // this wallet was collected from https://blog.maskex.com/news/announcements/embracing-transparency-maskex-reveals-wallet-addresses + "39DUz1NCkLu25GczWiAjjgZBu4mUjKbdNA" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/mento.js b/projects/helper/bitcoin-book/mento.js new file mode 100644 index 0000000000..2a3f595798 --- /dev/null +++ b/projects/helper/bitcoin-book/mento.js @@ -0,0 +1,4 @@ +module.exports = [ + '38EPdP4SPshc5CiUCzKcLP9v7Vqo5u1HBL', + '3KWX93e2zPPQ2eWCsUwPAB6VhAKKPLACou' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/merlin.js b/projects/helper/bitcoin-book/merlin.js new file mode 100644 index 0000000000..ce4d8c1851 --- /dev/null +++ b/projects/helper/bitcoin-book/merlin.js @@ -0,0 +1,28 @@ +module.exports = [ + "bc1qtu66zfqxj6pam6e0zunwnggh87f5pjr7vdr5cd", + "15zVuow5e9Zwj4nTrxSH3Rvupk32wiKEsr", + "bc1q4gfsheqz7ll2wdgfwjh2l5hhr45ytc4ekgxaex", + "bc1qua5y9yhknpysslxypd4dahagj9jamf90x4v90x", + "bc1qm64dsdz853ntzwleqsrdt5p53w75zfrtnmyzcx", + "1EEU18ZvWrbMxdXEuqdii6goDKbAbaXiA1", + "bc1qptgujmlkez7e6744yctzjgztu0st372mxs6702", + "16LDby5cWxzQqTFJrA1DDmbwABumCQHteG", + "bc1qq3c6kehun66sdek3q0wmu540n3vg0hgrekkjce", + "124SzTv3bBXZVPz2Li9ADs9oz4zCfT3VmM", + "bc1qyqt9zs42qmyf373k7yvy0t3askxd927v304xlv", + "bc1qgxdqf7837dxe8xkhvctgc499kwh5xw7ap3uwhs", // add on 25/02/2024 + "bc1pruhkl5exjt0z824cafauf750f5g08azuvgcjctv0enz5csayaj7ss3j5wc", // add on 25/02/2024 + "bc1q97vmervc8x9hzr4z4yvzn3x4rk74se6e8x8sgy", // add on 25/02/2024 + "bc1q2lzqzjcq472x8v0kgdcn4m5y8cq95ysnxm6vemu0qsuqgzyge06sqmqdal", // add on 25/02/2024 + "bc1qcmj5lkumeycyn35lxc3yr32k3fzue87yrjrna6", //nft_vault_address; + "bc1qq76dy32nnk5sha36etg6pdj94vl5zrskavux2f", // add on 12/05/2024 + "36n825H7orW1u8yWmvR4zs2CWfmkY2rkpK", // add on 12/05/2024 + "bc1p35l88j3ashhktg75tjctt6pacrgpyr93ldt7yw484dm4expq073qk4n0a0", // add on 12/05/2024 + "bc1pahkqca39mfcfay7nueczyhn9v8wq96x7mp4pjxpsdpsnurxzuwuqnhsdg3", // this wallet was provide by merlin team chain on the 14/08/2024 + "1A7oMBdQir24ESgk8LDccM4MUKJx6d2mCw", // this wallet was provide by merlin team chain on the 14/08/2024 + "bc1q0hgd38zjp2v2rahqverkmdaak4vc8fynyatqet", + "3BN9ECDCAjgxaQUmJCBCM7JtJZaCeB6rL6", + "17z6W1Eq1A7hWcWQiDxUcFTZBVCMsYrLye", + "1McbLy27nLVzJ4ubMnFm3jxnQ3nbq2mpr2", + "17vH7EX655n5L4iPAfVXPn3rVzZbrgKYBC" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/mexc-cex.js b/projects/helper/bitcoin-book/mexc-cex.js new file mode 100644 index 0000000000..0200d05ca5 --- /dev/null +++ b/projects/helper/bitcoin-book/mexc-cex.js @@ -0,0 +1,3 @@ +module.exports = [ + "13uZyaPbt4rTwYQ8xWFySVUzWH3pk2P5c7" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/mt-gox-entities.js b/projects/helper/bitcoin-book/mt-gox-entities.js new file mode 100644 index 0000000000..862186f080 --- /dev/null +++ b/projects/helper/bitcoin-book/mt-gox-entities.js @@ -0,0 +1,7 @@ +module.exports = [ + // https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ + "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", + 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', + 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', + 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/mt-gox.js b/projects/helper/bitcoin-book/mt-gox.js new file mode 100644 index 0000000000..a0581b1999 --- /dev/null +++ b/projects/helper/bitcoin-book/mt-gox.js @@ -0,0 +1,81 @@ +module.exports = [ + "17Tf4bVQaCzwWrDWGRPC97RLCHnU4LY8Qr", + "1BzK87zuqidZn489Wb2oLSktrjKrX7TLKe", + "1Drshi4RAuvxk4T6Bkq959ZvLbvy7b1wvD", + "1EiiKCCnFgHjEvPZdu29qqgdBm8zTvpU3U", + "14p4w3TRCd6NMRSnzTmgdvQhNnbrAmzXmy", + "12KkeeRkiNS13GMbg7zos9KRn9ggvZtZgx", + "12T4oSNd4t9ty9fodgNd47TWhK35pAxDYN", + "15kNZcrhxeFZgVVLK2Yjzd69tRidbFdJEZ", + "1LS5EFRRMDgMQusW6zokQUHjzNUfy6HHCQ", + "1FrV9hv1AW34BGJvobJatyzUWYDWB9epRW", + "1HdKXsNQtzDcfB6PGM7DWTgX9vhBWsz1ak", + "1Fu4YgM3Y9CxvioGPqkSzkydAC8MVaPN1D", + "1G23Uzwj55k2A9TRwaTknqGav66oDTkWCu", + "1GkZQcDy8V6pmHFZqUBUBCnN9dc2hoWasD", + "1Hm6XDmhKCHz68wDEYTapN9MEanke8iwUk", + "15SeCwVCFx5cWyrcdD1Zp1D1zxjH2SELPg", + "15U4VsmWG1cdXAtizvQsW4r7iMxzp64Tgu", + "16jZZkMYqjUWUtQ9DfDvHdH5ko5BcnH9XQ", + "16w6sZBDP58yyeyZAcvnxcEGJpwR9amM6g", + "19Cr4zXpKw43xLJhFZW9iv4DDNtQk2TDeB", + "1GyDutntMuYyA2vQGW5HFcKLfx4cbDdbJq", + "17etv2L3nhk6SCcWSNW4eoZkBy84izAm17", + "18ok25NTkdrUzdByFJCNVsqVYkujZ8aP45", + "199Yxz2TJGtND3QKsHTptTJivqSaUZBvku", + "1AZu7TQmKBAes2duNDctYwjAB9nhHczUnA", + "17KcBp8g76Ue8pywgjta4q8Ds6wK4bEKp7", + "1LLc8aA9C9LLULGbYCYSFKXgxKP2DXdCqP", + "1CZsoJfkknbnW5fKrt1oR7N1ALE5WmDGP1", + "1DedUxzgwErg4ipNi988wPgLk5thwciKcc", + "1H4K3dGfNbAN4AUfyUrpkGpjrd83sntDpV", + "13sXfpp2V16nnxYvW9FHHoBdMa3k98uJw8", + "13Wv5hGhubAWgSPWtXYh6s1s7HX2N1psYg", + "14mP6caC5dFhHdVAPCjPKM8Nm36MBDR5pM", + "155FsTtEFq4eGCcBxDseuwLKPbmtWbyHJR", + "156HpsWfgkWYLT63uhTAGUSUF3ZMnB9WWj", + "15QcKCa84ZCHxbsqXDoKhi5XbmQB8jPEAd", + "1EK8vW7UYaYHKiW4TZmYJKtwcZLM14VjvP", + "1Hb8DmmvvtTYv5RBLuGtDxznkZwVpd5Vjy", + "1HuPVqz2xvf1rdNFUqd62vRTyxP3jeX9Ch", + "13xGCc4TPSYY9GYxBGVNox82KxyjkFnxMX", + "13ahgw8sM95EDbugT3tdb8TYoMU46Uw7PX", + "1439q4Na8v88kPBqoyg8F4ueL9SYr8ANWj", + "13dXFMyG22EsUsvaWhCqUo7SXuX7rBPog6", + "14USZ558Rr28AZwdJQyciSQkN4JT1cEoj2", + "1FhRuUkk8Bfx8FJDemtxhKAR4F8GCNKrXG", + "1Mm9brripN4RPTzkGnRrbt5uDWdqbfk2iX", + "1LueUjEuBgc7cQhsWT8zAfTjcWmrNBZXaR", + "1LXi3x7hyt17cxncscGE887WCrC6XDNZ4P", + "19KiFrafXEyJCUDYFEv3B6tBUwyfFo7kNU", + "18YDgRhxsomuBZ1g9d8Y1JuRmxDhF8Bvff", + "18hcZVFPqDNAovJmb9vA6hEJrDz6uWXNGh", + "1BDZBTb4KE5oq6wAgA6EvAe3uCFRrAbPao", + "195HvmjXgoF3M5vFaBC8swZPhwrE7VhxRD", + "18KDS3q6a4YV9Nn8jcyMvNoVPfcrfemeag", + "19c8sUa54yQuRTVDfJa3iDkkCaFkzBJLPB", + "1B6kJM75iu5ty1HAHMMz6tT1HhjoGNTCa9", + "18M1Z337NqLtK9V69bssnQUYsvb7hmfSFS", + "19eihBKk6e5YD2QXAe4SVUsxRLLnTDKsfv", + "1C5aU4Xnpd3txbxehk46UZgiuNB8QdpHCH", + "1BXyJc6BVuTFnHQCcjiWX2xmCPNVfaSZeb", + "1Ar6meJQCkNoC9wnPcyRNNpzX5fBDaGcKd", + "1CRjKZJu8LvTutnSKq4zTJ4yiqrzMAArYW", + "1HweN9p41BY2RBunsPqyVuheEq7gVoxA9u", + "1HX4s3JeFU3x1eQgPNQVAdx6FoCtbb1hr8", + "1HzEPuenagLEWj68igDXBBXrzc293RuR5V", + "1JtgU6Uo1RAt5eiMf34EehyatUezBQP36C", + "1JVmoJT3471FjsX5H4hAeR1RyrDgpkHbpm", + "1JVU43LNKXqa9W5fCh8tppxDDEWgfeNg46", + "1JztCg7eKSkb1vi7NzGJynXpLZmoaFtYud", + "1KFDUSZuapMv7YaDmL6cyrHTQhma1MtFYs", + "1MkyfwJf7uhWTmVGGQXfcT5ip31DoHMxsz", + "1LzwbLgdKd4eFLkpRdeajkH1YJkVCip2zj", + "1MPJJzRaT8vLhowNB4dVyWRxxu79dq7WkB", + "1MvpYtqgBH7CXbTutrSVCTNHPzm9vakuRy", + "1N5X4kcZ56uRh24XrZoztS9Vb8G7j1Joop", + "1Pq7hooZbEAz5y3QMnqFY8C5xqTdrjUwcA", + "1PRXQEoL8vzEzoJJ9hbtAP6NaV2daccAUn", + "1PxGTuJzDx1ceFHx4Z5CHaWuhiPBNovmZD", + "1NA3Tj4b1jtx9eGELe31Jw4DrzTqKP3ayH" //https://www.cryptoground.com/mtgox-cold-wallet-monitor/ +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/multibit.js b/projects/helper/bitcoin-book/multibit.js new file mode 100644 index 0000000000..d9c9bf3c7a --- /dev/null +++ b/projects/helper/bitcoin-book/multibit.js @@ -0,0 +1,5 @@ +module.exports = [ + 'bc1p6r6hx759e3ulvggvd9x3df0rqh27jz59nvfjd2fzmh3wqyt6walq82u38z', // hot wallet + 'bc1pyyms2ssr0hagy5j50r5n689e6ye0626v3c98j5fw0jk6tz3vrgts7nt56g', // cold wallet + 'bc1qmcrpqanjnrw58y0fvq08fqchgxv5aylctew7vxlkalfns3rpedxsx4hxpu', // cold wallet +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/nbx.js b/projects/helper/bitcoin-book/nbx.js new file mode 100644 index 0000000000..b8d0715362 --- /dev/null +++ b/projects/helper/bitcoin-book/nbx.js @@ -0,0 +1,4 @@ +module.exports = [ + 'bc1qd79ypayqr03lmvcqc40udn6yuq4mve34ychy6a', + 'bc1qgxrcuzn62qjk3e3echysa9srg87la26x0qn2sa', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/nonkyc.js b/projects/helper/bitcoin-book/nonkyc.js new file mode 100644 index 0000000000..efdc101acd --- /dev/null +++ b/projects/helper/bitcoin-book/nonkyc.js @@ -0,0 +1,3 @@ +module.exports = [ + // "bc1qy8xx8fcsmdlc447ls4wzw2tn3y6c6cy64wckhz" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/obelisk.js b/projects/helper/bitcoin-book/obelisk.js new file mode 100644 index 0000000000..9931c8410b --- /dev/null +++ b/projects/helper/bitcoin-book/obelisk.js @@ -0,0 +1,7 @@ +module.exports = [ + 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', + '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP', + 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj', + 'bc1pr6pga0d44xm3t8z36qnya6sfznsm8fwkn507x6gqt86xtnvm4h4sj2zqus', + 'bc1qy4pkldj4dqxtqypz6awwj7y8vahkht8uqhdlw3' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/okcoin.js b/projects/helper/bitcoin-book/okcoin.js new file mode 100644 index 0000000000..41c3c4daa9 --- /dev/null +++ b/projects/helper/bitcoin-book/okcoin.js @@ -0,0 +1,4 @@ +module.exports = [ + // we only added wallets with more than 0.1 BTC + "bc1q2s3rjwvam9dt2ftt4sqxqjf3twav0gdx0k0q2etxflx38c3x8tnssdmnjq", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/okex.js b/projects/helper/bitcoin-book/okex.js new file mode 100644 index 0000000000..359fcec6d0 --- /dev/null +++ b/projects/helper/bitcoin-book/okex.js @@ -0,0 +1,186 @@ +module.exports = [ + '1LnoZawVFFQihU8d8ntxLMpYheZUfyeVAK', + '1JQULE6yHr9UaitLr4wahTwJN7DaMX7W1Z', + '1DcT5Wij5tfb3oVViF8mA8p4WrG98ahZPT', + '1CY7fykRLWXeSbKB885Kr4KjQxmDdvW923', + 'bc1quhruqrghgcca950rvhtrg7cpd7u8k6svpzgzmrjy8xyukacl5lkq0r8l2d', + '16rF2zwSJ9goQ9fZfYoti5LsUqqegb5RnA', + '1FY6RL8Ju9b6CGsHTK68yYEcnzUasufyCe', + '1MbNM3jwxMjRzeA9xyHbMyePN68MY4Jxb', + '1Lj2mCPJYbbC2X6oYwV6sXnE8CZ4heK5UD', + '178E8tYZ5WJ6PpADdpmmZd67Se7uPhJCLX', + '1BsdDaJtgFZrLfzEXvh6cD4VhtHHSHhMea', + '14kHu26yWkVD8qAnBfcFXHXxgquNoSpKum', + '1AumBaQDRaCC3cKKQVRHeyvoSPWNdDzsKP', + '1DnHx95d2t5URq2SYvVk6kxGryvTEbTnTs', + '13rCGm4Z3PDeYwo5a7GTT4jFYnRFBZbKr1', + '15Exz1BAVan4Eweagy1rcPJnfyc6KJ4GvL', + '18QUDxjDZAqAJorr4jkSEWHUDGLBF9uRCc', + '1M6E6vPaYsuCb34mDNS2aepu2aJyL6xBG4', + '1CE8chGD6Nu8qjcDF2uR1wMKyoWb8Kyxwz', + '1FTgXfXZRxMQcKSNeuFvWYVPsNgurTJ7BZ', + '13jTtHxBPFwZkaCdm6BwJMMJkqvTpBZccw', + '1FfgXrQUjX5nQ4zsiLBWjvFwW61jQHCqn', + '1DVTB9YKi4KNjyEbAHPp17T8R1Pp17nSmA', + '162z6mSSHzfTqb2Sn3NUk5r1Y2oGoCMCoM', + '3KbDzhb8B5pUU7Wk1y26J8D4cxYLmxJsca', + '3A8tCFwWyHQey1npTAWYTtrjLPKLXpSpLd', + '33a278YeJBRvQuemSo6yeugafqdS4x98TM', + 'bc1qc3g2dx3fn9s27v92n555r2tzhkxhad2wc0wm0ahlgpmhsr325mpssz80s6', + '3ABQAsnVgK8gDCBtWeEuoRvG3zdgABrDHQ', + '3AWGaggM87Nnhit5DwYYfXyvzW1NYutCw2', + '3QLVSDvh1r9u28PDWUDyg3nR7HqxrUZ4jA', + '3QFtYbR22en2AizTb7JVFA9bL2rf1fbNJr', + 'bc1qrp6msfnqxrl2gp4phmq6mcz995xc6m8n6fn8nygjfg8p63ncy4gsp3xn0e', + '31qq3eDdNyvyoDGrNYAAN5GU2BagDNANFf', + '3BdEq8vnX1o1J4Zpwj6wkPh5FxrgxLAibr', + '3AVMfb3vJi9CbQEGyoHmpgptgbJioyKykQ', + '3MYUxfT4mx8imVz7R8bVs71NisrYnmjUbT', + '3FS1EFCqZM7KEhsVoiNu7NC8658Kq4oCiY', + '3BiWZUFxpjJN6W93Fz3aCcCPBTrpYWwyoS', + '3NiufwUuJZnUHmgSopESaeLBJkALzJMcgk', + '3JcWcMPtxGaCuhKeucTMe1V865t7UhrNnT', + 'bc1qh0w73elagqvhfkkulrah0s2epdp922d3e6r8w43uz0e8ujafcjeqcz8lwa', + '3MWakirPr7MnizUAtWuDJmt919PZciSBvi', + '3LEV2xDk8D7uy4PVEGFZUm9fcT6XvCvHen', + '3FR7ZCHv26jaWWzv7EBPAXGgBpFuVFUnH3', + '38X48VjATu2AHowPzHefNqVvKyheGzVv8k', + '3AgGgHDcqd9sxYiagskZH3EPswwqza1TXd', + '3CGKuMZrkQQd4zj8FsTmDhineKACFpQBZX', + '32hhwGNtGTZ4J1LLz7p6o55Kxm7mzgREJ4', + '3E9GBso3ipQb2fbT3PNbeqgj8RkgJcR4X5', + '34MdsKf8zE6NeAy98TS1yxUTEoBkDT2ZwZ', + '3J7F1pczapCk1sRef6Hmvh9NfU6QiV3w55', + 'bc1qdk55vq5vrzt44pn93t9e3rwecw2dy4pcwc5gwugdjm3sh9xuqu3qzcwt4h', + '3PDMVx1YRhySaPEtCV2AT1aEq9DwgPU4uq', + '33j5fuJc14aff3Z6vHZBxaHEKMdNmKbRxQ', + 'bc1qvg6drx4rdcv85pteka94eskh740wrtgulg3tp7gcmm43vgund4sss4vzyq', + '3QUyiuBQF46KAMM7wdnDnu8GKVQYieRQ1N', + '35D2tNKFmqiVrvXan6tdxgatZoCBimASmZ', + '35Wvz1krBwzgQ7REXS7iJp3Qz7k3rmFNNF', + '3LMYZ3jPoKW2jscuT8fj8Nh4d66W3uX8us', + 'bc1q37nz0uheu4997ufs84efw7jw248mk9v83sgpmvsr6nawhaadx5lq2hclpt', + '3Mkfqxh6BuYCAiKxuvVWKn64N2xvReB3wM', + '3ANAufFoSaVJefhAZ7h9qViqdfJKoCWvbC', + 'bc1qnw79hhts8r84gykqkctyhu3j4gckll9gqxktzqgx5a54m347zf7qxhcyn8', + '3MYrRpUhNWxB8Ydk9gvMou5yZNtXNynxcT', + '3LFcssbNQRmRCCEUSbpDA5yzhsFH5waDoe', + '3NEwT3x6nrab6Wxddwb7jbWY8KYqJkewGA', + '35uFYLvWLQuEo6GxSGHT8JigaoUyqmNJjE', + '3DWvnsbAJJTLufQ4AhQY7LsVQrKoLjEHXQ', + '3PdNS2nqeE6G7cTcVmGjAVjz6HaPcX2FGj', + 'bc1qwkkedj4nzep7dw05s335x6n23520eq955mpcwypftn5q4n9japmqejkxlp', + '3Qae3YK3eKSoM57jpVYjvWkS7E2KnPFHSU', + '34HVDP9RFA9MpopGQ4TutLLVMFhhJFM9AX', + '39ZEaLMDxWi5EWx9cQ2W3ixDP8rWHhz8GY', + '39XwkmkcMAakYG9E564F6RZcp1RSMhUw8X', + '3QpVtFcEdVPTWqZbo8cSZwRgbHMbSEDoeP', + '3PHu7Z1dtRYbeum2SNWFCA4Fmq8r3UeXdQ', + '39AabFsw5ew4QcAC7zpeNkuk58FoZnJkvy', + '3NXxvFdsXK8DPRuGKbhNsvtP5FoL1s6hzF', + '3Jg623UZuqvvFLYbBsqqYiBCAyWUQUDG8k', + '3DgW9QH2GoVVoqwJd3paooAScy2vusEJDu', + 'bc1q8nne4amt4wjdaa0yxuzyw949xjd7fh2w9whh4uvh6haf6c5n2kvswnxk0e', + '38jFY6wBwBpFHtM4L88jF5o155SRVvr2wT', + '3CtTopUBx6QZomCjQDvbW65RtgsWn8g9LS', + '3KPPCAsWf6dxamkMBTeH2svaTVS7xgeL9q', + '3HoEwvrqYRnrizFN7gTg5ouSbV3Tek9pab', + '33yFzhVfaY9phULdN8kBfz2UfyUVZhFHNH', + '3Akts59LQNb7GU3gtHQcxh2r9zDfyUE2FJ', + '3EdYLLYiYpoLt9sEQ9KQQ3LbF56YRoiFPw', + '3GGLdxjaqvaguzTX9z4UTYaCoeu6sUyvNi', + '3M8Xbr9vobCoxMCWwxsS9doTP6HNQvx3op', + '3LcquVjVeDpFn1oJBs6mu2H5cc3EVCcJ2i', + '34Nr2xntQYxtnBARQmzswbuB1hNhnKvkoV', + '373oyKosqPkcYEsF7ipbw13WwDmvoNGgpG', + '34dhaAMB9sCBidT1LpjpbmZjkecsDpGhxH', + '3NRgSpzcsGA5mkjKinjTgBzfBYc9CBGXwW', + '3FMAKm9fEXfNXYtb6qBGaJvG3DRKtvPy5E', + '365S7mJV4MVqBfutYw65KuURCiohnMhzWh', + '3JJ4LULa6VtcVVxZC9tsNN9JM693mcrCeE', + '3CB7RwASFyWfYNCSWrri8crPhfK6yynMQ9', + '3HzYEwURshSeJZJn1ak5ioHKQV5rfZPXY8', + 'bc1qvusjx72vh3qkvw36jdqvl6sdye8ne8hfdaveejprj6xc24mpd8wsrf6w07', + '36U5xAL6FzFetzebPNT1ZQnANEk1TurVJr', + '3LkDsn4LZgYnMqZF2wAXCVs6kc72xpNLLz', + '3Gmt31zvMb52fJRRvLV3Pr3XTeDvVjGHAr', + '3DdCY3f5Ky92nSen5M2M2bzbBLUhMWafG6', + 'bc1qck2mvm6wp8xqxlk98eyl89kgwtmgw02cgqwsjstkg4uerqpqclxq6se9wu', + '3BexyYLsJQuN96qDRsnrU9yACnUSxxjWXx', + 'bc1qt5t0qhww0w7uaczxn9du7yu2l2hgpnen06r42u98du3cs6tqvezqatj38e', + '36PCQLrcXhNG3BZPeaND3zCW7cHgzDVYp3', + '3KGGtqwaQahxaN4GovThCyNdg6THK17Lrv', + '3FLnTqeKpK8CXiEA39b77pCT85sVWJXzN5', + '3AL5dD3jvpDHu8Qn7yZxGdpztWxieKxF4R', + '3G7e21FgygBmWDRMykauLANpuBK8iKqXpJ', + '3Kg2JcNnBczmHSX3udTfrKdqDy1gkrVZak', + '3QJBNEMY6TezfEBXGoc5PUKoLSCcWUd1Y5', + '3QQ8Cotsxbs9qrAyqLKaPjofzvcy5qipCY', + '34SG5K1QrntsigARCZJxNv8NwfSmQxPsDi', + '37Pd5nJZyXwjoGSwKW3ivWfeaW8VSjCey4', + '39J18vgfymGnJ2EYp6fb13rHNKBASbuMtf', + '3JwZq9s3yBhi8FikgYu2RvhjyBAhnSiLgy', + '3H4T7yRpphtyzpDUEiwBTtBa3fBMvHaKUZ', + 'bc1qrysu5ykl5pdlk7d9j0z5rwak5h9rus6cx2udc0s9tqhf5842nqgsdtgtly', + '3JqwqaLxqnDqXuJuKKp41UFSiFR1CuqznP', + '3JqzTCvFxye7nrVWGTBH2CNqZ7bbFppBww', + '3KWKbaAsf5qmbyBHXnVH6YqBgP4ZcNkUsc', + '3FbmQz3WvASHgCQUz3C2JmGdkd1gQFLdC2', + '3FMrfjg6zD3CTXSHLAiRcn3RFyBR8MMFR9', + '3KeFqqpbJawWvAudsi4q8Zx9Lewponyyht', + '32G39DN4kb9Sd6hk8RKySDf1QVFmQeAwtU', + '3BqZtfY5wZk7qHQaQJ4gBmqGLnakH8ybRy', + '3K1WNLse7M28jbowGsZmNaMV9FsM9yW3fE', + '351qZH3E9rwXg5ZDY3tgvsYhkm9CnYV25N', + '321DUXbk9gEEKG72DU2TcADDyfZXkX3fHP', + '3E5jAXsSi5x7oj6GQuM6WQPuVZaXeYd3sU', + '3HEBzhigBkmhVf7kx1KFXif42AqQWr8KH6', + '39smXTQdqD2W767ipLishHV4diSV4xNFxA', + '3GQ4DGB2tfS6YrwfVg9MF7KBRCLWkugLWR', + '3AEKc9AokfB1nBvsdS8LVFJysZSQBJRrny', + '3G3Sis7s9Jjex2Pcaerh17HvSJ19qHNuMg', + '33YfoFAdobotJkMPUqSh2ms9frvRRfRzpu', + '3G38Zn3mvixfamrKJJtsubiEL5gCQAGnSo', + '3KTFyMGHcjWjWE1UqZRM3T4WnHuQt95iRo', + '3JQmpJYkZrVczaNDCyQoLe6JXV3vGFY8ce', + '36EMwG1FHCrp2MLm474CnE9rTQDWFF1uTF', + '392Bq5jWV8NWUTdV59VCqoYviY5KP9q9Ee', + '3G1no1sZwQuNYd5H3m6seWw9oy4E4Yu1pP', + '3K376tvxysV4XDtTTEUF47Xc8LHdjof6kR', + '39ciFiDp9yj1vLSxHh6c13DiVFhcBab7NT', + '3DUGtYyorAm9vhpo3KbMURMiR2CByP6BoM', + '3DeCWk98Wp6bG9apmqCCqTfRc8uVdQ1vyw', + 'bc1qpkgxexfg8ah0j0ffk3ge3d4para29r8ugx02ch7daja3s8u4247qw2d2jq', + '3BnCzXEqQi7VDMfCaGY9zbSySuy5uQUaRp', + '3GkiKw8DBm3nSqjL1mZLJdp4yq6WEkkyoR', + '3LTvYTkSk2jq4a6mPVMadJ9vzv1V6RMDGq', + '34Fg3q75hcnjyCoL5FLPKaDM1bewFCPKsv', + '357DauGAnsbGpMgAApUqTFHCgyE2kXA9SD', + '3K1sq7TwuVEbvyADV2oNz6DYX2EhWSrVxC', + '3LWHs1HvAF362RHUc6MKL4jUPWcTw382pj', + '35oBhEfzDyCMz4KY6j49iu8xjtbHQ9GL7H', + '3CZTmeG25AXcjYurJ59mcFR3BvS4onF61M', + '3C766rkZjRvmvhGmyGeH2x33ciUrZHarvE', + '3DXZB5fAv4ujHv3dfBPnU6qaDR4HDUEuwY', + '3LnMEFH8kYMeZ8d524cj4RgXMVmniHaBSF', + 'bc1q2gp7s58gf75sg5g8v6ah8z90ghk8dqksa62u27gmz850cnaclshsfjvlr0', + '3Ca537VX1HufiVRfKVogWcD85RV3iuFs53', + '3BxyyKih6788xBQKk8aMg1cD3qP1x7Gqgr', + '3LceSbWiDHYvy59BW2swjiEQZkqvaijcsz', + '3MjPfBpz8oDcEJZphpBuiwRnvCAASFsgT1', + '3DdvsQoGp4wtvCAbyNBEZjCoWoWQL6TssG', + '32ZB86r6jT4DkAtnYYSHP99xtcai8LePLP', + '36yNiwCxiEtubUpzBLGPeSBCbubCy9i3QW', + '3GQUyZH3EPoaHFzjWr5peAKSQFNGxxmVw1', + '37wL3HQgir55T4o2Lv4Ygrsgat5W7iPnnd', + '38qt6S3zQKizRnafitwEdz4dTj1fx72dgY', + '3EqD1B8pMgdRE9iPEgUXAzpcyxihW4tbgA', + '3P7a4wgoTDKn8F2g2VB62pHiV22XzJGGbd', + '3FyaksZvXsZxEShwdpNMK7awgDE4kBuKmN', + '36CVsC2nLzvFejTuBXvCFnt3p5QsKaGzwh', + '3BjsuL5pVVWBFSMtoB9cg2d2hsJzJFpo3B', + '34w5Da4HJ54AWTZVo8JrujhV1v8iRZho3e', + '3DuUe32HgxGg8RQ5sFk9drcKRVmwNCAHhV', + '3MoQyLh75Niz1s573waSP8pc95sqQcdJXd', + '3Bvj92ASRnTnqj9kdABSgXJgrBDy6XEgzq', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/phemex.js b/projects/helper/bitcoin-book/phemex.js new file mode 100644 index 0000000000..662e7ca671 --- /dev/null +++ b/projects/helper/bitcoin-book/phemex.js @@ -0,0 +1,3 @@ +module.exports = [ + "3PiGxVdpMjWSsH8X8BypdwcsmPW5cmE4Ta" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/pionex-cex.js b/projects/helper/bitcoin-book/pionex-cex.js new file mode 100644 index 0000000000..ef591d3c19 --- /dev/null +++ b/projects/helper/bitcoin-book/pionex-cex.js @@ -0,0 +1,19 @@ +module.exports = [ + "1D2Pds2XyiDe7CknDumKkdSECuepGsBCSR", + "bc1qs0jdyydyd4kv7fwqre4suhz33mcuy3838xdsla", + "1JkmFSbqijbrv6JdyVx2hNwyE8nzEy3Cs5", + "bc1qctq0v0vecjxp4de66znkh0dcczkvuqjwwt0za4", + "1KH7cEFwFvKfnx7KjMaQUescVSigz3FMaJ", + "bc1qeplx7cy5xx37m9mtrh9qefeuswansr0c9mvewa", + "1BgvqcFm2cYRg8HCrd4qWnC7iA6tQqoeme", + "bc1qw5lxcrk7l2xsy2wx5mapdz58g29xde4x56le3s", + "1A4Ag6y473avEbjVm5N4HAqiVCE6NxLRCS", + "bc1qvdf8f85dn69csyka5tzjezsl66hdhmmfgwgfzz", + "1PDgKsiQo8hkA5pxYBwS1ooXv9jFNJCFh5", + "bc1q7wufvquhtmmd7eepjdu76lumj6efmfl2p6sgch", + "1CNEXYtt6WYZuMwJF7AjNYr39nxbrUTRoh", + "bc1q0jkkjr2qr4wl3v399algvsjuk8g7vlm3yaqufu", + "17UcdCaVWpmgpuZsKfKdWRUUViAzoQFY3H", + "bc1qguymjgurnywqac3rrplr2nmkl26cf5jyyq3vkv", + "1D9YPYQevtEsk26exBjCY2pKfhDsXTxJEE" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/probit.js b/projects/helper/bitcoin-book/probit.js new file mode 100644 index 0000000000..a68a94a01a --- /dev/null +++ b/projects/helper/bitcoin-book/probit.js @@ -0,0 +1,5 @@ +module.exports = [ + "19EgVpboqNjortWyhJSDAGRvHDtduqiSfr", + "19AtrEvJv7UY75tvWkXMxLUAYibxpZhFfN", + "17PpCEuQUT7xxP1ocfhvFdwQyrB5dG1dQP" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/pstake-btc.js b/projects/helper/bitcoin-book/pstake-btc.js new file mode 100644 index 0000000000..86a053a920 --- /dev/null +++ b/projects/helper/bitcoin-book/pstake-btc.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay", "bc1px92pntcj0wd5076nnymp787a7qczsaauuefgntxngdwvkd584xgsaagem2", "bc1pxhkczd3jq9nq50p2xll99edhxlx5dj6ztgw5pgtzszjtlvg7tl4s8ttf04" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/robinhood.js b/projects/helper/bitcoin-book/robinhood.js new file mode 100644 index 0000000000..784b2493ee --- /dev/null +++ b/projects/helper/bitcoin-book/robinhood.js @@ -0,0 +1,5 @@ +module.exports = [ + "bc1qprdf80adfz7aekh5nejjfrp3jksc8r929svpxk", + "bc1qmxcagqze2n4hr5rwflyfu35q90y22raxdgcp4p", + "bc1ql49ydapnjafl5t2cp9zqpjwe6pdgmxy98859v2" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/rosen-bridge.js b/projects/helper/bitcoin-book/rosen-bridge.js new file mode 100644 index 0000000000..064b7f1c73 --- /dev/null +++ b/projects/helper/bitcoin-book/rosen-bridge.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1qs0852en99dfctv0egj2qxnmc79mhjgn9ap975t" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/roup.js b/projects/helper/bitcoin-book/roup.js new file mode 100644 index 0000000000..7ebc03299d --- /dev/null +++ b/projects/helper/bitcoin-book/roup.js @@ -0,0 +1,6 @@ +module.exports = [ + 'bc1pv5lu5aklz64sye9f4zmnjkfg8j6s2tllu3fem4cs9t0hcrnz5e7qy0qw6e', + 'bc1p2tncs8egnj8e6qt46np3qla70mfx4telu92v4c9hp3pg8khqp37s9lvmfx', + 'bc1phnxqw4gfq349wm2xcqgqk77544ssqwa6ycuhjh7hdxks4mtjg33qrfenw5', + 'bc1pfsu3ts4equ7rdy63dgt7shkqlu2n5kw8p0z7p7c8lsrh2yqg40fsvz4ev3' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/silkroad-fbifunds-entities.js b/projects/helper/bitcoin-book/silkroad-fbifunds-entities.js new file mode 100644 index 0000000000..862186f080 --- /dev/null +++ b/projects/helper/bitcoin-book/silkroad-fbifunds-entities.js @@ -0,0 +1,7 @@ +module.exports = [ + // https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ + "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", + 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', + 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', + 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/silkroad.js b/projects/helper/bitcoin-book/silkroad.js new file mode 100644 index 0000000000..862186f080 --- /dev/null +++ b/projects/helper/bitcoin-book/silkroad.js @@ -0,0 +1,7 @@ +module.exports = [ + // https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ + "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", + 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', + 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', + 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/swissborg.js b/projects/helper/bitcoin-book/swissborg.js new file mode 100644 index 0000000000..d9b9a863f4 --- /dev/null +++ b/projects/helper/bitcoin-book/swissborg.js @@ -0,0 +1,8 @@ +module.exports = [ + '18DowXoMUQT5EU8zPTDTrq4hrwmi8ddCcc', + 'bc1qfu6su3qz4tn0et634mv7p090a0cgameq6rdvuc', + 'bc1qutkfwnuq4v0zdkenqt5vyuxlrmsezldzue5znc', + '1Mgs8zLJ7JyngcNRUscayyPHnnYJpJS5x2', + 'bc1qc8ee9860cdnkyej0ag5hf49pcx7uvz89lkwpr9', + '1JgXCkk3gjmgfgjT2vvnjpvqfvNNTFCRpM', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/toobit.js b/projects/helper/bitcoin-book/toobit.js new file mode 100644 index 0000000000..7156f1b2d4 --- /dev/null +++ b/projects/helper/bitcoin-book/toobit.js @@ -0,0 +1,3 @@ +module.exports = [ + "3926KKKCqcLaWpAau73TMo19sNv23s1wji" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/tron-btc.js b/projects/helper/bitcoin-book/tron-btc.js new file mode 100644 index 0000000000..debb9f6483 --- /dev/null +++ b/projects/helper/bitcoin-book/tron-btc.js @@ -0,0 +1,5 @@ +module.exports = [ + // On the 23/10/2024 , defillma receive a PoR from Tron/HTX team with the respective BTC collateral backing BTC on tron chain + "1NBX1UZE3EFPTnYNkDfVhRADvVc8v6pRYu", + "14NEbSYdjumn9h4spMjbp3PdUpeXuM5PBZ" +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/wbtc.js b/projects/helper/bitcoin-book/wbtc.js new file mode 100644 index 0000000000..3fe67c4ea7 --- /dev/null +++ b/projects/helper/bitcoin-book/wbtc.js @@ -0,0 +1,341 @@ + module.exports = [ + // WALLETS FROM HERE https://wbtc.network/dashboard/audit + "31oMgrBjhbAr1ZZjFUFYfDT1ZYvx3Qp9qL", + "31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", + "31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", + "31sADuWnUApAxzXJZTaEziCn9DhZVUajwK", + "31sW8NHLr9MELRdoGPWrEk6wBd1pj2uzkB", + "31x6dwHmXYHqd7YiwvJNPX8ryvDj8Cdht1", + "32Cav9GPxma3wRprn2FtPQ7gxmCZ8ZEmzv", + "32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", + "32Ver3t9feJgByfNLF8pggtNFPMf22iC3Q", + "32fN3YjNhtAzUjBHfTVFtiPBFPgy1MkBAC", + "32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", + "32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", + "32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", + "32m8wzKabRRF7o6JRXN1srLSA5FzND769o", + '32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8', + '32okkzumvdoocdjN18SzbnTTNd2omQvvt3', + '337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ', + '33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ', + '33PbQFD2eAouKnKVTBvZTFWE2pRzLgJdro', + '33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb', + '33epzdB4nk3FWHtUpHMQrzTWxiehSti11v', + '33gNdUGQTBT7cUbNx4892keGA2L64ixrfJ', + '33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8', + '33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8', + '343uVxqsriiveWxekC6s3mNaERzsbfke3h', + '34CyVpeNgNNEoBdEoSSH6aTjrUZDavaUtr', + '34MPipmU3suumfX7WxTUTxmLX2uVK1Np8R', + '34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q', + '34Qg9U75RNPqAmZzF2amJ1XNGQyVek7HkQ', + '34whRPeeSYTPcihybfXmkG2uoShUdT3d2d', + '3573rMHLB3VABY7VaXMWhRoCBVspLGC4xV', + '35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e', + '35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB', + '35LMppVy98ofPKeUXUk79FUSkVC8yiXHUF', + '35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59', + '35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR', + '35bXvntqjj5LnEpRVqU9bLcAPtT9crggYj', + '35cv1mcZBJkvkjY2KQSdmbo7Mq7E2yEVZD', + '35dn2Sfsi9qmqZke8SfSVcaggED9uJYQhn', + '35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6', + '36RYMHxKrvNvrFcovZVXEQWC11LLbPE56V', + '36U3VfLRN9kbQQXRGwP5SGUYebSB3MqVnp', + '36ZsF5YgJDW25eZKS6gnZMqW4gr6wv9xp1', + '36h9DtMdqYWTxSg1yys2exZPFQoQXv8QRL', + '36jGhq48YgvjJWtEpqrc57QzXcBJQyCsS7', + '36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE', + '36m2gCFRpkikK6AXUQGKLabKmd8PMjwx1Z', + '371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd', + '37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz', + '37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi', + '37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh', + '37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx', + '37kFT7mcJqgkqKbd66VbgkHSQgnys2V7hp', + '38EovPeRhGniW3cpYLJwptCqJkx9Y1Pg7G', + '38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv', + '38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD', + '38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm', + '38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF', + '39P2pJ9EmN3qmPAm1TTZPzp6T5LSsJq3eQ', + '39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ', + '39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm', + '39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE', + '39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c', + '39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2', + '39ydxDT3H6KygeXQn8f1tYXk6BtCTrsutw', + '3A25qkpmhCrYGEZh39wc71u89dSXGCYSvd', + '3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit', + '3A37hJV9JPWR4UMCXC3QvKSeVGiRwgGtiU', + '3AKea5UYSyMc2oRRdQYhkn57nXWMm5woDz', + '3APCmmVbkpKSmLkTbGUvdPUyfqA4CZ25a4', + '3ARRJS9VNVkMdiESpxq2AGfpZUQRUvdGgd', + '3AdKaaTBFPQgpFen9YERPmrfV7QVvkYQfp', + '3AfJyKGXVBUcaWdyJeWxsasq1dHPw8pRZz', + '3Agd6vor95XcHvf1MPKE69KEpNbZTKD6JF', + '3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm', + '3BCWh8prqQDsZDi6Pmvut9HJrhii1Vk7Ak', + '3BCm2gVB29QDFLWt768jjTwKoe1N1QVwSU', + '3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T', + '3BPbdokvatbZEFJHuVUstG9zeSDLr5RdvL', + '3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA', + '3CDy1xZavmpd27jV6TZm5teH8U6hrdXRES', + '3CPEGQzA227hHR2jUf66MdgBJ5wPnDdaW9', + '3CQBneh4TJtHGUP4QS3mfJc75NoiGgKwV3', + '3CdzzKFGY7ZahrMCM1tBgoxrgSPUWX4RVY', + '3Cr3vRcZD5q4XbXCVTo8sFCN9Xb7z5isth', + '3CrWGaRncSudU3EZPEhvWqeU2PG1xutr5x', + '3CuoRMhRXvsxdYsNL4kmKDJyAhaDB7SmBn', + '3CxK8MVHuqXW85z4MF7A4FYk8k6jKPFgPW', + '3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb', + '3DJNy9xMcMsNdmdipTgqME3TJCRkv7uS2g', + '3DhbEcm1SuJjTRxZBXxHyceYGm7GdRB2pM', + '3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4', + '3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd', + '3EedqW1fD4QRFmrPgkZZZvzHRzj9f4xVSX', + '3EmKqHZhXic3TymhuY8NLS7Bdk91erm4V7', + '3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2', + '3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1', + '3EuEvwodW88xEuwecsLb76x16tLxcUZAxx', + '3FDtvkk7hpZq5GuEJxt3Ps95vjtdDEfJ4T', + '3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT', + '3FHRnMSaGMAaLcoHbA5EVcEuYVxTEZdTyp', + '3FKkCxSZe1c4xZiVyJVBTbvzs9Lj1snqVC', + '3FVsTChmR7WYgfnU3CAmrrD3kqmaRMaJCC', + '3GE2pWumzKXnNMA9PFggsBwyk7NYSJvGGg', + '3GTk9xdRHnPQ61Pm7Jnv2Z8hsXv5FMVyeY', + '3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm', + '3HGSCuXjnfEncUCPQ4GzNrv3BHcmLZFdeT', + '3HHLh4HSK8wj1w3YW9i4Chdnuybgadhpz1', + '3HM8YGKhwwnZKmrUEoGroEgaG3dv8xkVZz', + '3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH', + '3HaHcbNmhJKgJ3dtbm2tg8XH87BJkRx7QE', + '3HauLvRoUBueiiLwebk19w6rnUTYJkdwNW', + '3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy', + '3HpHptRrwK5x9i7uULvk116QhsAnRJfJb8', + '3HziaqLNy8PpyQFLdwr2yxCjwEjRUjN6Eg', + '3J37HnDBzWN1sm65mbD9U5zvKrp2bzhuYJ', + '3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU', + '3JMDjCYxxi5MF3aXRx8Dg13Rign3masTXj', + '3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t', + '3Jj1juATP11jHfBvRiu3BbzdJCNeRskqzJ', + '3JqwUY7pUwEWu2hz6mwzZKSQnvKyRRXCQM', + '3JvmhjuxvLVM8NQzAwwMvzWAK6zDLQ5Aor', + '3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5', + '3K43ux5cCAxfKgymq5eHnHS1toC9nrERbT', + '3KAGrSyTsKLckBgN7AiAfojbScfjGAHwFz', + '3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s', + '3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth', + '3KWe9k7TG2j7xNw8BP9YHXBeHy1knC1xGS', + '3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7', + '3KeG7RzDwGaTywRfQgPCQaeyMgi7C89eQc', + '3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse', + '3Kx4doXvL4UhDrKJqn8FoS5wVU3VeS9ebM', + '3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT', + '3LbLR4uiq7RFrWgDKHfdgktAC88qtwY2Li', + '3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq', + '3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1', + '3MLH54DXCtmydRocRZz9pEkfTTGWribBa3', + '3MM2BiaXBACfKUtVsyNr2RDXyNEhunez6v', + "3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", + "3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", + "3MkzCjZjodyaBXz7W8i9NTjduEdykdkd89", + "3MnCLWSq31hetgbVA1Xn1VxVVb31SPeSKa", + '3Muz5dT5EguQgTiXgQ1eqJYNkjjQuSMgsb', + "3MwfxJqsy943oqYhbdKiaBrFSK9xbyiAi9", + "3MzRi499Cbcr4795iRnznfC97EFji23h7n", + "3NW5tDLFceDb1a75QkGampkuuceZ3YPMUX", + "3NfBFZRgKfHVJy7rSTutZyGpa5M2GpRdwu", + "3NmVi1xVYZj5YXU8wcQyoUfcVRCLcYhqqQ", + "3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", + "3P4EDeK5fxCLEQzM7iQ7n95DWgG1cXSaqG", + "3PRCCQMdWwjEKy89iVdL8LouknsgygwWpL", + "3PRHbh8ajUXv5wPD11CxFRs1hWBo8vR3zW", + "3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", + "3PkGNCt85M3aNQkBqiT5Psgmz8FjNujEKK", + "3PnoF45bZhJcPKGLf4nQzyQVAEFsxBxQQa", + "3PxV5m54ZwMDheUyFecvRVQHJK7WG1t49V", + "3Py2iN5SEwSCtT5QHkDU1qhbvmdmMZ8cpK", + "3PyK2LYBfYMUXsa8sMhTSHQZ8StQy3Xoz8", + "3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", + "3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", + "3QbVP6bTSXN2tXG66MTKtHtiJ1coKXnrjP", + "3QdyHj1i4y5CywEFWJ5PwoqGzDxGyJGPeb", + "3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", + "3QmVyCw6YnEvt1jXLeF5863uHPLRaKhWs5", + 'bc1q02kjkf8gp628thqdfrm54tay5pjw05w297d6p6ez5andhp9gf0nqjaa2e4', + 'bc1q02py7892mlqafaz9wevclp8ve4dl4z6hy4sqp973sz2u4fvpxnmqnzfc2f', + 'bc1q09z8m23n7w7gtqsxpgwun0zvra9jwzf4z9c48cezq36q3zvmsuyqdmyjkn', + 'bc1q0vac8d7jkyds2ux4jqwu6mu943z8keyxq4twaw8p8md8j8rtj94s9wrrl8', + 'bc1q20yv979atkvtmecs5kj88a0pmf85ht500pmp7p2ztd54tz0u60psj7c702', + 'bc1q26ds9juuyjtsek5czqasrvmptf46xan2hfyx88jqzpz2pzly3p6qrwd6e6', + 'bc1q2az30y4lst2x9wlu77kzzdym8n9qr77n0kqmevs4ahf7dmzw624sck5vm5', + 'bc1q2ssdu5v40zmntqc76kaxw0xf67eathhpg59xczh9vpp2qlf3mdrsgr49s8', + 'bc1q2vlwakkk247pnppptdv3kgxj23yptykyd3ge9vvlk2w8h98v7pysmmknxv', + 'bc1q2wyzh5ex2cr7wcth0zsm7ueycg2rkfw28fy2g6axky6r9su9zcls8qngt2', + 'bc1q32phcv5dhwkw59xljxsz2nw8g4he4ssduw7c6d3d6005skfy9gysa6crgk', + 'bc1q35fxxu53qsmv77cjt6ucdj5wu4r8rae8eakq5j5v8nzgjtcmnpvqp6g3sf', + 'bc1q3aqsr7dsajmslelacclkgmmyhd7t6hkeevpw50f5areathvfmwnq4nwt3y', + 'bc1q3cpmjfcfkh8t47q99y5wgwxzvhsw8lywzgvnvnlrlwe6h8xcqw7qjwf646', + 'bc1q3cpz06gvfatn0rgamwk7lws7c7qyt4napdr6h7fsj54zg2fy9wtsahl7xt', + 'bc1q3eff85qd4rhuu8gvn933fvtzg0ys3y5amchq8wzhhylhqvfh8kxsu4kde7', + 'bc1q3l6qerg2gyzxpuk0mmhswkgedrqcqe3eesyhatwauyv980syulfspttjcs', + 'bc1q3qw5de93m5ukxra5md872kjyl29arplm8c4vrh9jggsxp88kk2zs74u39g', + 'bc1q3uzg46kmqexn04rkhsd74t34225tqv88xp3jglr2hpxxu5ujrwyq9amgrx', + 'bc1q424nhx6tpljt65aren3q5hmsx4dwt22g9574lpjnlvtc309gtkhqdtwcss', + 'bc1q47vlc3v9vfqh2sr8f47ukaws408wcr95r27t26y9qxgc72yzg9hs58yzek', + 'bc1q4agva2hg94cdr7xdeg4e7wekq0vkrqggn4kqruns85e69xtx750s7dc2hy', + 'bc1q4ma898qglhvqsjs725emwtmayr0pwj9nmgguqac44styjpjc04ws8hwp7k', + 'bc1q4nalse7wwqe6sx3slmkyywetlzn3tdud77jesadx02v885qjs74spqtg5w', + 'bc1q4xmshjnx7up2940zld0dls42jnec86drca3ph7cjhtsdlfgq3ycsntpvpw', + 'bc1q5anhs0xpsayee84r5yqazljkfn9k92d6dkjfpyq509sfmsdkhfts2vh8l8', + 'bc1q5d93mqzlntc95687tq2un302rnfa6vnlnche7pdxzuypyl2cewnsqrzxc2', + 'bc1q5nzdfhdjv6dh5r2pgdmtxhvkan8stl2h7zrhth908slszrzu2snqm3ds3q', + 'bc1q5qv0gtcfdumqrf9fjhd82uud7whpsam7j9e2dq3k9jy3mj2rm3aq8yj3u9', + 'bc1q5rxwzkcl9hux2ltuppg5jl4c4ld52l3hk7kq8g6qqnjluk6kq5xqp5dpzd', + 'bc1q68r3tjqwch4q5nyqf03a3n3ugcef75klsmqfa4g72k63npwn59hqj2d6hh', + 'bc1q6aw25ef99245cxc4l9m5nvn5fel6tmrze3nfxtstv08yf5jkdvfs5rrajc', + 'bc1q6xdt8tmlp5p6exvsmuf62yswm4vnk0rmm950sdhlqgyxluahv3qqquz3uh', + 'bc1q6z0cm8gzhxz87e5xdlvkpnldj9zspustx7hedll73zg4n0hqemhsrm4d8l', + 'bc1q7awsmqawsstwlxtt48lt6y2hv2qjsju85jgz07yr4hhdcu5df0sqwxc63z', + 'bc1q7h0eyvjp58p5wz563p04lhjt2nef9q089mcdchr9jzz74lq5wzusqckmj2', + 'bc1q7trechgv0g6kgwdcu3wsxkqn9lrc6edzdgvdvpt9a9rg04l7gtvs26hps3', + 'bc1q866pgqwgxvuqvqmkmcfh8n52dtgz3fv3nh5cq3mufqv0ssz8q93qc2eadh', + 'bc1q86aapgzcr7078499tlhp4aatylujug9d2rxwccaekmjgv8j6f93qljjhx6', + 'bc1q89mxkg0dhr3m6vs2gzr3wqccwpzrmnpsldnjc22ztldhqueawtzsq82ydf', + 'bc1q8nr29r27mlkvj0duseshuw5vueywt4640tyrt9jusrk0c9kz2klqg4n66l', + 'bc1q8qlz3znvuq0mk62j0dld5hj3a5uf2y06tcuvtz2x3gffs6gxejnsx2hfk7', + 'bc1q8sw5c5sx3s0r5tujaq6hahnjq88yvrdhepss7qdfaz5evjux6nls63mnuw', + 'bc1q8xamcp8xc3rdh4vqtexgrqfmwlkw0mkruz3gkwaw027erjsrnd0see34cc', + 'bc1q8znctxhsh6knhp07z7ufw8zusucef9vxq7rjrhgf0wecxl7aqcrqz06gmu', + 'bc1q93hcme2prs7upr9zkdakl85jje3leg8g2qf70kstacjuyzy95xkq7h35ft', + 'bc1q99gvfs8e2fsd8zw74wdg4fmfg46n2uf5pjlpt87h93qar044rspsxwck6k', + 'bc1q9eammdvuqyhswd3wqp84d56ah0hyuus62smarhsdw3l3rycjgrhqsskvuq', + 'bc1q9j8l760q75cep90p9gq6dsj3p9d55ewpwkhcmw8dnzcd7tmfg03sc0vmqh', + 'bc1q9xlm3uydvuu3nn8dan0zqyr7e6p3pjh7gxnw7jyv0tujl44dgt6sedtus3', + 'bc1qagrn5sn73azr85navkf0ukh336qvktfunejkzauu9adsuvfvpklq6qut3m', + 'bc1qasluf865jx838k9nad2r2rnp04w3txqtyu7kapuxrv0m7rv90sxqhvjxuv', + 'bc1qc342v9mt8j354pjyaqkweu9nrztcj6cc8udgyezk7dxhjddjcn8q7w9fuc', + 'bc1qc46r9xy82z23s6q9lglhzf60fdxxq5y26x34kdx7dx8549mdtu4slym95w', + 'bc1qcd7jv45swrxgwlj55gfnlxf3tvsm4ek0yer4xac5a909jtxzrgvqyv5v0p', + 'bc1qd7dd9qc0pehqx5a2arlpmlgh30xpfufx9hpf2kfrnpqz2x7jl0xqpmcru6', + 'bc1qd8wk5eesxtynkrjx42temma0spfy0955tr5e5lp267aqhalvpjwq79l4yh', + 'bc1qdj65qknp4cnvxagp0pqnjl3g7d3s8gzxqzrrlh6gutju0ytdfwmsfeetdt', + 'bc1qdt0gu9n7ykyvyhe4v7cmftugsn5qw59rm4tdxn4f8vxs6s694n8qp9u2az', + 'bc1qe46f05uenszej6hvzmxjw8fxyskc6utv4cueeaa77jjea87vjh7ql8wgd5', + 'bc1qe4we3wxhj4f0wy40ftfxfvawmt4hgkgvtmpnn3lv5wme8yzfrltsckhg9g', + 'bc1qer4qvha5nxz09qn7gt7xntvrz2crnaxrd7ju4nmcjm7r9uerc9xqa9gdxd', + 'bc1qesmtfxs4n4ws86242uqpztseyh7l5tgswd0zce5nggaky44t9c4sfwczj2', + 'bc1qetecvjtaya283z7zk9lftqtv03ajx27ekz6uxjpscpap7crkvgmst355jn', + 'bc1qeuz6l0qusf9pd923v8w086j8umn765a7hqvu4su0dfq90ckym47qhvaux3', + 'bc1qezmmhc5k7ccnc6q7l8dhkg9phcnehysq2y3ahdzzcweph5ang9xs0egasc', + 'bc1qf5p8wp6neu0raugt6t7zhm6vjhy3taf8q7rqwuhgdmdnhvpz2c7s8xtrtx', + 'bc1qfcxzh8ag5pv37qywg8wylherg64k7skz0qm0ghc36x7awrd8xszsfxc4k3', + 'bc1qfenuya7nskcjlyxpg0gttrjap9e5gtncxga0vvl8rekyeup55n0slzlhr8', + 'bc1qfeuww8le80ae7qat3kpzspsh7pa8na3qx9fuc4qpdt3w5q3dkavsc02wk4', + 'bc1qfn70w8peuvvywupd8u667g832necv3w6sqellzvd7aaj8l52nhhsfzs6a4', + 'bc1qfpwewuyg8erj2cejamms0682v7ncgdgufdq8efa0maef3uzunkgsvdwyzm', + 'bc1qfugah0e9fw9ze34dpqf22yxqxnxh49wrcq9d3kuqc9dydfhn4pjsjqfpky', + 'bc1qg0amsvtlglecc6x46rzjprjh7wscjzlgqu6n52zw9nz0cck2r5sqwew946', + 'bc1qg54vzuplejd6ymxlma6q7rfyc9zqqes8wvz4xs09mhpclak9z73sf3x3km', + 'bc1qgs30czhkxhxn5qsunlzac0xeznyaxg267p5t8gjupzg7u97vz4zqyuf60l', + 'bc1qgsgj3dh8dztq05v9dzethjcpjqtptm5tsrruprz4w7awzpfrku8qjjegyc', + 'bc1qgxww03juwr8vfp28tzpmyyku3j6hxrgpl0v6natkk2ucwu4weweskcqvnl', + 'bc1qh4r87gzpcx3lz7faz349yvp8yr6zyr2706m2xzsuwcwlptkqsj6svkaqtf', + 'bc1qhagykgzhhh7yt5knsypklpqsgdelrvw5vz73erujapcgh3x5wxrq8c0y9x', + 'bc1qhgfkccy09hr7hlky0jeyz89afan8qh66wa26t4se4mlqda6298hqrtk5zr', + 'bc1qhkw43w4cvzec3836hqrdmxksm20l35yk7gnvysqprd6gareztfsq4uplfs', + 'bc1qhm46vtwep0awkdphurmc2ku3lfp8l7z9f6wn9va42lc3z24zd2fsvnvzk3', + 'bc1qhpnmnswf8ls2q97vg4qzlr2a6c2xpr46zp59e7q9uh5j59ask2ysld0euq', + 'bc1qj2dz58v8etgq3aud24yrgffk73d9cue80kfswl58d5w4vvhdfsyskxtll5', + 'bc1qj38tl824hkgl7qluy32lklp6qfd9d9zqa9qlyeh28khfh9grxwastu3xnw', + 'bc1qj8vt7h7ufrgqlhhcu22vl3jrvx3kluml57kha352k9fex23jphvsuwme6r', + 'bc1qjgua88vymvkctq9t4mcd4q4mlqnr3r07lylp90f7epc9p6qcv6asteyjec', + 'bc1qjpgs63vqgfkalm8janwmelw4mr4wg50axnmx5ueh4ru2xnl3lg7q80yl32', + 'bc1qk8plwr04uu6mvpcf3wtfmg579ztqn59q7yfx39drl9r97q4wcx2q43rvw3', + 'bc1qk9fhnvv7a0nxzxxj503v7mfy3uwdugymj09ugkrda5895cfxa5vsnzp8l5', + 'bc1qkd53jhtmhwv74x2c8hnnfzspatcjdzk0h3f2czqzrav0yxpd5y4szkslrs', + 'bc1qkn3s4hzjthfmt68sk30m69knjauwphsha2paqzexjjmlfc6h7f3sggfn52', + 'bc1qksptar8mpay2mfwzwep3aqxevnc8jj8d4rd82v3v0hm5p3y93w2q5eufa8', + 'bc1ql26wgacxjhuefzcph2wpsyftqzd07kzkczv60d85hj7280qkrz2qlgrhf7', + 'bc1ql33nnw3ngcf343jtmzpe8ps8809nqe0530rv6neu7cefkz6dtcfqn3wzav', + 'bc1qlg2gcz8hzfdt49jgs0438c7ahg4967nfkflzj3m0r5dz3xz7njrqpxxj2j', + 'bc1qlnz5vejmvv6sdy9k3c7a07nlf6c053g0ren0m8kmmsrx677nyllsg6qr2m', + 'bc1qltg30ayn5wexka07ta2x5dnfjf20rqnemf4sfnsase082yfqetfq0s20hv', + 'bc1qmfjm5hlgjfw3tc6cz77nzjcc5xg5mjhrlm6kqewczapae2yhucrs5c0qvf', + 'bc1qmfwcwfntr2adas7yz5l3wn6pnm8rj55l8fk5vgny34wld6d0vfcsg48tta', + 'bc1qmfwq5cjm55m0kcfemjyv6rj8nfunslfjtuhyqawksw892dhvu6wscem2t5', + 'bc1qmmdfeczme4q99ccpmgfx3zxwwwff9nnjhdux47hucwttrjdpqj9s2x8rds', + 'bc1qmur9p99tzxtrq0232tl6nssyejrmwet3m265xg0cgl7uh2qxsy7q0m8fvu', + 'bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa', + 'bc1qn8w83eglpp7xdtgyjaysgrve5cjjr2yfhsq2x5xyn6cmvup0uwlsq2t5xl', + 'bc1qnpnpcn4gwssvkjpe27zzfex2t997l7garmc2s8fenmk0fpydek2s6zp9yz', + 'bc1qp24kgu3r5n3q6k03230yj6dzr4styppjlvtr3ptdsd7sxql8pcgqwall05', + 'bc1qp27x9j8damzuxc0x7cqkcaf39q4825aafmx3g6mlvh2wd5tzr8kscsjplw', + 'bc1qp6cmqa7hgdean0z8jl7uf20rzf7wgvstmjlxekft3l2vn22zwl2qhunr3h', + 'bc1qparrejjdyc8hcd7hgljlx53wy7ncrjkaz670w3ef0ade369y22eqkujzy0', + 'bc1qpdthtpfcmju642wq4eqxl4uz5hfgtztvtv7u6wrdepnkdsugueusujpg76', + 'bc1qpp5wu443kdfur2vhzwms8d46gq8c2vgu692sgyn79z56gkq4mkvs07gjkd', + 'bc1qpvvt2md0t7435mc8dmlgd5euyc0636vlw8ew25e8pf83uc68km5qpvqpfx', + 'bc1qpwtgr4rld3wr39r762ngvuk8qgvgkrrxra4jdnmn06z4nfgh4vtsluyd3t', + 'bc1qq3p9mqvegpadextyqzxy46ukf5yxc7ej50ksq3w63f895q0t8rzsfe5jym', + 'bc1qqces3upduq6e0c2w0k6mr9n4tkgvzkggteuatqc4eyxawwkuxzpsfgdxzh', + 'bc1qqjmfwnxrjx0khaxf8qa6ccnz7s94k9wa8lelpdy2fn6jf9ffks8s5r4frd', + 'bc1qqlm6edz9azp0d6y4mjc8j8an4q8du2jajgwj65mmz6nkk53yannqvtnvnn', + 'bc1qqlus6fyt05kewddukpge8u0lszp4ffn49mqnr3pvrh2whptf2fhsy6ynmn', + 'bc1qqvf7qq7wvx6pkp5aqvzdxs0rgqkjgqe7ev63hnppxq05t6v3w5ysskzjs5', + 'bc1qr20qujcyr87y3uk2fgkq93u0jtzl6wa4el90we4txgcwgx6avxzsuj0wcx', + 'bc1qr6cvgewvlts5f9wa8u3cpnlmth0mzn0x96ap34hknpaayuyknrlssqfq3n', + 'bc1qrm7nze8cqyazdlhmw8ffeusxucqtvyw3pvtple0047tdkupdnmustkla3w', + 'bc1qrsayv4jq9uf6rpmwsxan3yqxuqtyelwt7k8298ejl8h9tkrunthspnlm6y', + 'bc1qs0q2svqpeaka6f8jakx74j4rydxdmxq4wz7xfy45m6t8xfxzy0zsckrym5', + 'bc1qs48aaups6tzwcs372yqhakcjakfgf6w6aguj0w7gex75vrnjegmsp5hx8n', + 'bc1qsgthnvghgs9wl87kzhkx9xda4xyu35cxfteupjnvxv3zuvgtdyzs9a23te', + 'bc1qsln2s8xu7sv84wj5sv2pjnfpev8lkcqpzmzukmygcll26vf0kwfs6awzkj', + 'bc1qsp7twu469a8p3enevzwdnjhrcmtmc7ljydqxxp4p69u4ggj9wazqa9gsgw', + 'bc1qsrms3khzhupjxph0u2sy6sz8c9q4g6nqm3dy53nrlagw3lc5zmsstg8pft', + 'bc1qsuzvly8z6kr080at2twdlfs8j87gu08kmwlfstafm2lajdvfclyqtvq00a', + 'bc1qsva32zdzx7cd9996qdlxkpl0dnyk4s44myx53zpetf4u7rfg89fswjzza5', + 'bc1qsw4hj3dvqcvtntvsflx8474f52nt6zer5k9pyem6n6g27p8nc4xsrj5fxc', + 'bc1qszmwz85wktn6k7tg953pugtedmssguaavl8qukv77s5u0g5mx3tsmw6pg4', + 'bc1qt3mw55ccejx97tyjdl9dhe60wvextxddg8udxz9n8q8efwhr37wseag63j', + 'bc1qt4ck5563ra7r3xjqlfqm7au407q2dmc0p6wvgyzy239nyyn4vsesfwwsa2', + 'bc1qteyfers4wvfhp6apw4s720tzvp9xafkvvfh7k0sxmu8vrxvt2m5snw45v8', + 'bc1qu4g30hr7lz3qd9jn68x4f2ycl3s533jdtv96g5n96d40kac5l5tshhkvq5', + 'bc1qu5k2h4y9cynds4j3t5d94xg78zpzhx3elk6w93e28xmxrnn37wuql9xf4t', + 'bc1quljnxvuryumd7c44u7f8dwflas5aghecg8ln029v2s7ffezun86qn0wyng', + 'bc1quryt5u9j5rec96c4h6xxatn74nqcen244q3dtgwtpjkma36vvrmq9mjecg', + 'bc1quxy0mlwssdmzsxgk2ct42p09ef7mc9qwmpdjuzy9f3h3ye2k6jzsvmmrsh', + 'bc1quywrhxx6t7mkqshcll3q99qrqlal73l668wldgrcxpa4yvuj2x3qrhsg9m', + 'bc1quzwyq3wewr74vvgwa6nqfj6n6rsc2tsh046glq0n76x9alcpgmzsf24s6x', + 'bc1qv0u3a7jdaygq680cu52puk4xrrr4ckpjqqgg88x66cmfnrfj5c4sre60e9', + 'bc1qv837fuujjlu50z3l6y48vxkv4vd09vve58t92welmxy9lnu5l2usp6hd0j', + 'bc1qva8lqtdcemj9swc6trk4je45xzckqhs3fthst2hy0k3plywfeq5s639wn0', + 'bc1qvfmnrg59p8a3csj032uyzl3mdtv5y46g3mx33krz5kweyvq78f5swvdmna', + 'bc1qvqaqr0jyxf3nphux7gla78dqa9psfpyy0v8med9t63f0x6n2k40s7knecs', + 'bc1qvtckv82yw4efeu9ez8y37rne5ghzxeqjl3cqnsyxf4gm3zhuhc8swt5u3h', + 'bc1qwdgyle9p2gcvyn22sg2tg6jaqkxewjz5xfj229p989dcteu42adqnau2lw', + 'bc1qwfeq7rehmzm5434vaa485s98788cmyyrac2w65nulvucsg7cueesly7x05', + 'bc1qwfydpavg240d4j87nrg0ayqhfzwrt9revzw7a9dpyxujnlpu2xus07f6ud', + 'bc1qwvrrxxqhc6l9zd8rwj39sl8n39v69tju9sfc59dqxl3fjx8jnfqswzs93f', + 'bc1qwwkwppejx79uszdgfrpaaqc24wepvjy729xhx2zyd3qyf3ftfqrs672m9d', + 'bc1qx8xlxd6qnmqprgjs6yr4nd870tt4d8yuupwq4qhl3hh24ulpmk4qem46px', + 'bc1qxfkxl66ee59xpxr30tcexvh9zgtvf7gwtyauj29n6txj7c7a9e9quhcaaz', + 'bc1qxlj7ls9zptgj779w0gzfvt8chpl29xdcv5qjqdw7g462uf0c90wsvkw74y', + 'bc1qxnxp0qdzx07jw3tskcp79xzs7p6p2wpwx4sn7myrx8vgj42f4prsrlcknw', + 'bc1qxqnj2gdznm37yhdw679nx6rqs44hkd2lddj2gn4uyaa5htmjvmzsyjcu7d', + 'bc1qxtf7mx5scgetaaz30w6ngndq8xctegjacvphz2tgky5r9et0q5uqwyks8t', + 'bc1qxu9s6qy6hld9uvd75em9t550q7ppezsmkheldsyny0pzj9yd7e6sqg3qv6', + 'bc1qy30syv0sqafmkt2m4h6lf9tjeddurh9cypa9p8wras2hfjf4y4uqzdz5sk', + 'bc1qy6tfy7k9cjp40m2lcq2s8wrsn88jdn3ffj5ph7uvwxuamfntaylqk38dwp', + 'bc1qyc4v5dtapyta9mcu5n5t9va72rzd9g75z83qxxm90ne4vzhgleeqf9lcfl', + 'bc1qyd5989kz0jgayxelnz7wlnnk5gyn36v7cecjrkgvph4260aew2rsqzx3ua', + 'bc1qyujyd6q7dtnh76wchgavwgxpklkwm73vqllududlx2uunx28zdhsxnvd47', + 'bc1qyvpmf6uv8xgxrvcwc5w630d4vg2s9ztpd64fe0e9ylxtuy34e4lqnmv3sq', + 'bc1qzck7505r8ahwq9g4xuwr60lpflxv5h75y0jntgasd0t9g7psvmqsr902f8', + 'bc1qzgw25sgrn45909quqlydd9729ksj32mfcvwzl44ekf2kkgctz09qvr779j', + 'bc1qzha6dcp9mq8ne7s3cxgp052qzux3jg25fp7cxpshrz0a0005h3gs30vqpf', + 'bc1qzk7gnzhyqcl9x7f52lckdhlznv94k87gpm3fsafvn487euaymmasz95cwa', + 'bc1qztewvcfe424fxat7s2uautmy5ctnsnurul474e2emexfnlj6upsqem0g8d', +]; \ No newline at end of file diff --git a/projects/helper/bitcoin-book/woo-cex.js b/projects/helper/bitcoin-book/woo-cex.js new file mode 100644 index 0000000000..d633c3db58 --- /dev/null +++ b/projects/helper/bitcoin-book/woo-cex.js @@ -0,0 +1,4 @@ +module.exports = [ + 'bc1qh78w4qq9v2dqntjtxne97kp9u2485jdqrfsghh', + 'bc1qm4hycszv0v0qel3swxqyp57nkpnnrda4rc55lm' +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/xlink.js b/projects/helper/bitcoin-book/xlink.js new file mode 100644 index 0000000000..605481c046 --- /dev/null +++ b/projects/helper/bitcoin-book/xlink.js @@ -0,0 +1,17 @@ +module.exports = [ + "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", + "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", + "31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", + "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", + "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", + "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", + "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", + "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", + "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", + "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", + "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", + "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", + "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", + "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", + "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/xlinkLST.js b/projects/helper/bitcoin-book/xlinkLST.js new file mode 100644 index 0000000000..efad41974e --- /dev/null +++ b/projects/helper/bitcoin-book/xlinkLST.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1p78mvfa550t7acg6wm9cl9543zf68ulhqkxex5pvhv8wnw4qpl3gqmpjy2s" +]; \ No newline at end of file diff --git a/projects/helper/bitcoin-book/xrgb.js b/projects/helper/bitcoin-book/xrgb.js new file mode 100644 index 0000000000..6746264168 --- /dev/null +++ b/projects/helper/bitcoin-book/xrgb.js @@ -0,0 +1,3 @@ +module.exports = [ + "bc1ptm05s4f6f8j78zhx62lzx0dep07f2597nlgeltmm4sjn5stdu6gq4sxg2w" +] \ No newline at end of file diff --git a/projects/hibt/index.js b/projects/hibt/index.js index d8c8e2d9d7..657dae4941 100644 --- a/projects/hibt/index.js +++ b/projects/hibt/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -7,9 +8,7 @@ const config = { ], }, bitcoin: { - owners: [ - 'bc1qpxntlx09kqvpwl7vmjw9f28yvytdqkdx8xh63w' - ] + owners: bitcoinAddressBook.hibt }, tron: { owners: [ diff --git a/projects/hope-money/index.js b/projects/hope-money/index.js index 19aae3e2e0..4e7fbd7f0a 100644 --- a/projects/hope-money/index.js +++ b/projects/hope-money/index.js @@ -1,18 +1,11 @@ const { sumTokensExport } = require('../helper/sumTokens') const ADDRESSES = require('../helper/coreAssets.json') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: 'Tokens held in coinbase custody. Reserve info taken from: https://hope.money/gomboc.html', doublecounted: true, - bitcoin: { - tvl: sumTokensExport({ owners: [ - '15PYHP5ZW29B3o19jFNKz6RyRdHCtzJj5H', - '16BLcAyJR8unm8RpQT9PGTwh5uPpZEf2ut', - '3JoCB8ifwhL4YKo9rCYMgVGbqxBqnpQpdS', - '179fgM9yyTHj4ZCTfAcGhUFiQMXuPx5xrF', - '1LaC3Xt8RZWYH1pjcvXxrWxLvXe7iR3ybe' - ]}) - }, + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.hopeMoney }) }, ethereum: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/hotbit/index.js b/projects/hotbit/index.js index 1d37046092..a8d828a135 100644 --- a/projects/hotbit/index.js +++ b/projects/hotbit/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bsc: { @@ -22,7 +23,7 @@ const config = { ] }, bitcoin: { - owners: ['1MiFZMJkFMhMrubjjo6f5oEhh7XgSwXWgp'] + owners: bitcoinAddressBook.hotbit }, ripple: { owners: ['rJKBidE4Av6ZaFTBcAucZXCpU7QvNXyfpT'] diff --git a/projects/huobi/index.js b/projects/huobi/index.js index 25b5c5e65a..5f92f4e4d5 100644 --- a/projects/huobi/index.js +++ b/projects/huobi/index.js @@ -2,23 +2,12 @@ const { cexExports } = require("../helper/cex"); const { mergeExports, sliceIntoChunks, sleep } = require("../helper/utils"); const { post, get } = require("../helper/http"); const sdk = require("@defillama/sdk"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + const config = { bitcoin: { - owners: [ - "12qTdZHx6f77aQ74CPCZGSY47VaRwYjVD8", - "143gLvWYUojXaWZRrxquRKpVNTkhmr415B", - // '1KVpuCfhftkzJ67ZUegaMuaYey7qni7pPj', this wallet is backing USDD acording here https://prnt.sc/i3cFaak7H9Y8. For that reason, it should not included as HTX. - //These 3 addresses has 48,555 #Bitcoin. This is only less than 3% of the total high value assets we have, including btc, usd, stablecoins, T-bills.. According to Justin Sun https://twitter.com/justinsuntron/status/1590311559242612743 - "14XKsv8tT6tt8P8mfDQZgNF8wtN5erNu5D", - "1LXzGrDQqKqVBqxfGDUyhC6rTRBN5s8Sbj", - "1HckjUpRGcrrRAtFaaCAUaGjsPx9oYmLaZ", // add on 08/08/2023 (we defillama) - "1L15W6b9vkxV81xW5HDtmMBycrdiettHEL", // add on 08/08/2023 (we defillama) - "14o5ywJJmLPJe8egNo7a5fSdtEgarkus33", // add on 08/08/2023 (we defillama) - "1BuiWj9wPbQwNY97xU53LRPhzqNQccSquM", // add on 08/08/2023 (we defillama) - "1AQLXAB6aXSVbRMjbhSBudLf1kcsbWSEjg", // add on 23/02/2024 (we defillama) - "1ENWYLQZJRAZGtwBmoWrhmTtDUtJ5LseVj", - ], + owners: bitcoinAddressBook.huobi, }, ethereum: { owners: [ diff --git a/projects/imbtc.js b/projects/imbtc.js index 65dbf6ae6d..57fffe932e 100644 --- a/projects/imbtc.js +++ b/projects/imbtc.js @@ -1,10 +1,11 @@ const { sumTokens } = require('./helper/chain/bitcoin') +const { imbtc } = require('./helper/bitcoin-book/index.js') module.exports = { ethereum: { tvl: () => ({}) }, bitcoin: { tvl: () => sumTokens({ - owners: ['3JMjHDTJjKPnrvS7DycPAgYcA6HrHRk8UG', '3GH4EhMi1MG8rxSiAWqfoiUCMLaWPTCxuy'], + owners: imbtc, }) }, methodology: `TVL for imBTC consists of the BTC deposits in custody that were used to mint imBTC`, diff --git a/projects/klever-exchange/index.js b/projects/klever-exchange/index.js index 75626130cf..2c6c205e08 100644 --- a/projects/klever-exchange/index.js +++ b/projects/klever-exchange/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -18,11 +19,7 @@ const config = { ] }, bitcoin: { - owners: [ - 'bc1qze8pn5vywzk8enqdr9ve28lyas23kurzd37027', - 'bc1qgy5zyuvsw5wnt5lrx3m62tt2pmdl69avd5vw6n', - 'bc1qk4l4u3lh7rrufsw0z6vmkln5kesf0a9q0srnkr' - ] + owners: bitcoinAddressBook.kleverExchange }, } diff --git a/projects/korbit/index.js b/projects/korbit/index.js index ce8fb929e0..03fb6da66a 100644 --- a/projects/korbit/index.js +++ b/projects/korbit/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -14,29 +15,7 @@ const config = { ], }, bitcoin: { - owners: [ - '1JtAupan5MSPXxSsWFiwA79bY9LD2Ga1je', - '3E8BTrBB7jxAemyUqSnN4YFLMC22cShZJZ', - '3GoBetHTvfnaRNQbR4yy5YNUjX4d8mTQKK', - 'bc1q09j44e0xxxusj3zsan20x7tuvtumxfv9smlq27t0nwp57gxf7htqq6m9lj', - 'bc1q0uffd8egas4w87dxq998ttfl6j3jtw6k7cafce9v4mvr5qc9tvfq9czqk9', - 'bc1q33m8td986p3vcnap9zqpx3d8v8zujtkvqacsya5xfvf945vmvxzqth4h4t', - 'bc1q3yn06lfl8ayjukya52ksff0uaveurfc8lm3ftdgu8ywvwanx8lqswj7w9u', - 'bc1q4sv2fxlp6w08wkq8ywmughxkm7n75d2fmrgnmvwun6rhepyknjxqm99v4x', - 'bc1q7fww9657ts2au45wh0ed39rjze6ja93z0498z4j89pqjky266wzs0sz8ka', - 'bc1q9pnwfyd4jtkulyk4w057wsdjhykaw6fftw06k2cn2m3y7jlsfe2qvxvm8e', - 'bc1qa8may4g0yzezjyesqcq0mwggy5wwzl0yhs0a8tk9ucej5qg6ujfqscv2jq', - 'bc1qgkx4ee8ac3as5y4ddhw6uedyk9adsywdzgc0fzxv304lcrh4qs9sn96agt', - 'bc1qku6z53kuyaj9r898kj6esqnwz7wke82mwgw43vhu33ld7sx3200s2u9p9x', - 'bc1ql0p3klhr2d8z07ja3t5d5dnxrenhp4gcjeszxpfflr08zaqqx5zqpkeqnl', - 'bc1qnerwvz93pcj653r5yd4hnd2d7np2drhdhyruj7qdvl3psc5wnf0q6x9me4', - 'bc1qs9ut74nue7vjknz2eqxegmtuzqhjzx9y8tzjymvlg05v8a5ffr5qz402cx', - 'bc1qsk6h7d2l7e7r2a8krlxjn6wdnhhszyrtzcugdsfa5zz4syajzl5spd52h5', - 'bc1qsmqvkwrsy5xw2hm885l5fv7s2hxzauz5fn9jayfmd86305wehrts2lztgs', - 'bc1qtlen0nuvln3aqcn2r3nljshdmzakq7z5z4rexpk23mj8u8lmc8ysc29jct', - 'bc1qzdt5z4f46jak59jku5jmvv3f2ru20htqs7jhy0whazgd5v4626eq4vkxqz', - 'bc1qzu4lnzfpskwsvnyvzud9a7ru4d2ft7whqvl5d3kskxxhgeupnjjquzvt97', - ] + owners: bitcoinAddressBook.korbit }, ripple: { owners: [ diff --git a/projects/kraken-btc/index.js b/projects/kraken-btc/index.js index 2a28405498..fee50c310c 100644 --- a/projects/kraken-btc/index.js +++ b/projects/kraken-btc/index.js @@ -1,6 +1,7 @@ const { sumTokensExport } = require('../helper/sumTokens') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') // https://www.kraken.com/kbtc module.exports = { - bitcoin: { tvl: sumTokensExport({ owners: ['bc1qqwf6hexnnswmj6yuhz5xyj20frtp8exv7mclck'] }) } + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.krakenBTC }) } } \ No newline at end of file diff --git a/projects/kraken/index.js b/projects/kraken/index.js index 0379ee4e27..f690c4eb30 100644 --- a/projects/kraken/index.js +++ b/projects/kraken/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -21,22 +22,7 @@ const config = { ], }, bitcoin: { - owners: [ - 'bc1qnhmemsqfhycvp6g50v732h7wfwdt68el4ux5ttu8xwsrzngmxv0qr55aga', - 'bc1qa5aux0l2c3l99tpmd9c85770kqpksg3g6dxaw03jj6lphnwy4lqq68xfgc', - 'bc1q3gqqnn9hr0uachfk6rv3qhf3pp9z8a4z63ksc5qu0c2vvtykqd9qj3fyum', - 'bc1qplr053c80nzlqapuatfslyhmns6sfn32qzz3xkdn36jjryw8vsys8y7wlc', - 'bc1qhxv3pg2hsnw3m9jukuc6erjwwd03rzwhd2k6zh5uf6s2lwpuv3rq9zefru', - 'bc1q08n37tm63z3f0myqe6zjx7ymtng8c9qedpwpplq95qkmx0cpke7qyz4y8v', - 'bc1q02cq8du8r7ktuy5l0ltc4cv82xnaw4upaaw8y4rq6uycdp0k5nmquljtzk', - 'bc1qcf9qe8ytx5qlcq0ft4vm2xm3fyfvurrkende46hpmwwnzpctfu3szxpve2', - 'bc1qrj5vg73fxs6h6pmdjld387j5szkswc2y39rfutw8gl93h647wpksukyln9', - 'bc1q9hqaqzyf6zsd330pkvtq5uxcxprzr368zdsxx5srtep7kepx523q2gd0ef', - 'bc1q36l8mssxdlncj7njkqvayv3jumked9jdtjxete66cxnzluf4j0msjm4w80', - 'bc1qs8cyln26t2f5rwu2frnqvtltfxt0qqql0elmhrpsexlzveap82eqtyvsgu', - 'bc1qcds58swh4g6zsdmws9ltcdpqz4l44utu5wv9vfpmemps3whgdacqkakrk0', - 'bc1q75tsfq2c5cqp2ss32qksmnzd9yea2mjsjktdmrz900dcmg43ck4s66sgjx', - ], + owners: bitcoinAddressBook.kraken, }, starknet: { owners: [ diff --git a/projects/kucoin/index.js b/projects/kucoin/index.js index 0b02a707e0..4f0ecfb981 100644 --- a/projects/kucoin/index.js +++ b/projects/kucoin/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -42,120 +43,7 @@ const config = { ] }, bitcoin: { - owners: [ - 'bc1q04p5psjsp7j80sq6u4djgqk3c7pk6n93q43ply', - '38fJPq4dYGPoJizEUGCL9yWkqg73cJmC2n', - 'bc1q0243pvcnutwtm3m6t005402yk8utq4kfqqghhu', - 'bc1q080rkmk3kj86pxvf5nkxecdrw6nrx3zzy9xl7q', - 'bc1q07yhcr2qmwkc32z4gfaemtjtx90am6e6rpl9sg', - 'bc1q224fr84g5xqvp2lkwmzvyec9frwk5w5f5v5w38', - 'bc1q204dfzksn4l0rhhajm9fyd5h92dac8tnuur8jp', - '37nA3mMvQwPGVh6BKdLXKBiPjLFVbRLZEp', - 'bc1q0h72mfwgtsnfkcmpsnt3kmrrp4z5x3v469mz0k', - 'bc1q0l84mekaaszjfst7lswaheu7gcymv2h2k8z6fl', - 'bc1q2hpdg7pwghz9um27hqsmv2sg3f8f9fwtjvdenx', - 'bc1q3yy6h7x9wtffu8f7hpkhlyssw3s28xzj0nydye', - 'bc1q3kwpxug0q0w55qjrfrcykxu2yn02xhzn49fnxw', - 'bc1q2wxfd36s204jkpfmez2u0nh7540cctur2v27ht', - 'bc1q3g7sltlncshtqcu9wyhqavzxlfa4tj97whapup', - 'bc1q4jszmgxml90ernkn3l908sn4hr94zk6wynp788', - 'bc1q3sevrnv8khxe6fnl87ad8e4fjefu7rmp39pxl6', - 'bc1q4xt86cp0xf6zsrfsgspnfm8579ksurxppae66a', - 'bc1q4f8uwyargzd8eajj2vrdjz4l0hvhjdlpmchstm', - 'bc1q3fzjrvlvsl6j58x38gzk0c8dgvfudsqcsdqyry', - 'bc1q5h4ucvz7qqnhypekhd8jusc8z8msytxflzfs8s', - 'bc1q5ty9r24qftnx7c0vw0y76d5kneekse7hl878yv', - 'bc1q6z680y2fkmmu49ykm0dm0temp25p034p034fme', - 'bc1q5qsadcuj0at2xk4lfca5zull8mkgwfm06qduq4', - 'bc1q80elat9h0nfhuzvuvn4yl2nh0eqxwfzas5afnv', - 'bc1q6dr8nqmgm5qvuukuf5ux3m0fdthnhx033uv3vr', - 'bc1q6tj4wm295pndmx4dywkg27rj6vqfxl5gn8j7zr', - 'bc1q5w44vqvfpnwzpclwhdmx98uenwdtdfd85qtw34', - 'bc1q82qe6w4afzt2l94wn4d9e0uchj8t2x2dtdf2pu', - 'bc1q5cza73vpzhrsruy4e7gudvq6xv6vfs9hjs5pl3', - 'bc1qa482xwlzz479nyep2ve0z6t9t29dg0zem9wqt2', - 'bc1q8yja3gw33ngd8aunmfr4hj820adc9nlsv0syvz', - 'bc1q9uddlcfqdyh6dlu3pptchazr0va0cshnqss2yk', - 'bc1qa8jaa3pss396sx52hkft5ta2dey69fkrt8mfsc', - 'bc1q9020xphp6ukc4j72hy52gk2nxujwt4kr8dq6eu', - 'bc1q8jjlupqcvxv25usqu8hvlnd8ym0stcpq4jfy9x', - 'bc1q98mvmv9nl4p744tdf2zh3uzv30yea2njy0le9d', - 'bc1q9hrcsckdwrezlw7gspefeyk9nyqmwpy3ea8wwx', - 'bc1qa3h4re6gf6qmmesjqfzn0vu2rmc6e00s4gjjle', - 'bc1q9wvygkq7h9xgcp59mc6ghzczrqlgrj9k3ey9tz', - 'bc1qfyr7tvv0a2dcq6xp4dgr5nemfmnak2e2scn6hg', - 'bc1qdhqxc3h6dnc6x0k8emtcnuyt8aspy83w0g9xht', - 'bc1qfcuvuaam666pv777ad59wwue5l7j36hr95f8gv', - 'bc1qf3wwg8dayutammv2e6lahudyc7j2ef579hyx3m', - 'bc1qamlau4w545vsjsmnhzmztlv3sy4tu6v9cnxtcg', - 'bc1qea6uvmc2kqndhewtlnc9duh5aa30ptvp3mhk9h', - 'bc1qgrxsrmrhsapvh9addyx6sh8j4rw0sn9xtur9uq', - 'bc1qcyjkktrvwatdqyvpm04vs3k2x5r4ystnw7msrk', - 'bc1qggwgcwnjvlma9hr569jhgx2yuncaaq0ace5ywp', - 'bc1qartr66auwm2tlcjp7cqgs8cx4p6q7lydrtwf4p', - 'bc1qkrewa0m37wjmkcgs0w2gh9zhjqclkq74ckt4x4', - 'bc1qk947xflcafthv8k6gx7m2cvwzqzy68kl5npkyw', - 'bc1qh573eaggrqexqx7xzm4e57k6sm9r7zpuxwqxzn', - 'bc1qj5gnrfdmcftzxgrwcdts4plw4kaydjs5kq560l', - 'bc1qlldl5qma9glxwt3j06eef05590uyy2td3ye90c', - 'bc1qhafun32xkhxpec8dq3kpxyq5x9ur437mj4dusy', - 'bc1qh6tqdv9k2pew6vyvrmg76ae55n5rwa2djmyyyk', - 'bc1qjxv6j2sv6za57khvvd5yu9jxkv3g3qvxh6sach', - 'bc1qjefrh2gf28g6x56eeausc30gxewamj7qwtzfpg', - 'bc1qhs4u46ygdskuljadnxn6thqsrjw3nf9r8nfclm', - 'bc1qnl68wnf3d6jz532dl65hj9urw9j2432fjg03nr', - 'bc1qnetky45z2vguazzczuy7x2446vsjn4ku76d5k8', - 'bc1qlw4dv8nt5uc35dkmftlt3nt0rl0cte4he998qt', - 'bc1qnvdx4dt8kn68csvcqvdtnlzw8hadapk9e9k857', - 'bc1qnqhcfntmlh2nnu5rp25szqgxw7v3783xrgcd44', - 'bc1qp22u6u75j2nvvhychyfd9uxr6s2jkf5p985rct', - 'bc1qnxn6352sn9mm6dxgmfrn43fgtu0l2kcx2y3ddh', - 'bc1qm882j3900we3eewa5fdw4hlwlnef35phmsn7x8', - 'bc1qpafgjjmqlv32m6m6qpte2ldlz0wcuj3ajyt8gd', - 'bc1qmtvfu97nlrl8qtujvj5jg47dc0p3w8sun6esaf', - 'bc1qr9hf2v2gf6haq7tsvckel7u6ja46fnqfkt6u5p', - 'bc1qpuhnd3gqhqlezgcuuhc2ywfw2w03uyz0seg802', - 'bc1qr77hw0dek5f8uvmeazd3egym2m3npjf2nvrza5', - 'bc1qpdfchk5j5tvkwf0z4kpftysv88h5szz4ms8try', - 'bc1qprpm6caxcuewnme4at7h2skhv2rury274a0vln', - 'bc1qq9u67zacfe3vz40e36nltn3agt9hf75g7av2xx', - 'bc1qrf9llyljmwy8egcjjsw0z0a8n5sgjlhcemezcl', - 'bc1qqx0udc7ndr77yg4v7rwuugnwk8n8xqaydmakfu', - 'bc1qqg92jrprgh0vdq3pd8wctnzqyuwn5kp20hhfh6', - 'bc1qpnmkhx9ndgnk639wh5gyuex4nsx7s8t8d33pzt', - 'bc1qtcxldruuuhvk8zjmw3a3dpwfvu2d0m9qyctv82', - 'bc1qtlgfyl9yjyluwzyyayp2fs0r4kcjtv2axsmzl8', - 'bc1qs84j4s45nztsx9759vkha0wvvx28dlqk7p2n5y', - 'bc1qteec4z0tcvv40r6py855gg77rwnhe9ege42x0t', - 'bc1qrt7rkpswpgmcag7txzf6ps9mvepwgndshqdx6d', - 'bc1quqy97s6lj3mty7hdp4at7uvmlzssh57jezx85v', - 'bc1qseaaa4hnexjugx26p605getpdnkwy3up64uws9', - 'bc1qudtghe07cfslxyv36zk5ums65c32xcw0nz6zhg', - 'bc1qsfdf47l3ftsqv2muvfftnulcp4qwzypuxm9k30', - 'bc1qul97gsvkpfju6fa53cezzxx5wmv4t8rl6gdt62', - 'bc1qv3v2u78m6vec2jqe7w0esm6rccmysccdvkpr3t', - 'bc1qwjftm2nl65gmevmutfqe8q7k0aaahlxt3a9wam', - 'bc1qvh0zexe6422t85x3kzgvms9fd984606uhf44ug', - 'bc1qvj8a4kjq888c2l22pdgjx3cgaq94vm3hjzyq6l', - 'bc1qwgzyz8xpwdrx54rsm5p74ksc6wkxr8y4ncejwh', - 'bc1qvvqafwsqr2rquyvym4l6rtt7ayukpmw2sfxn7f', - 'bc1qvkzdg9x58zyupept40zcjhmztn3l2flqss2f4x', - 'bc1quyayxjg0r68wsj6c2zcu3f7nnj9um5pwdgr36m', - 'bc1qw83c8j8pf2azegtyeszqqdaafgqj4hl3xcdy95', - 'bc1qwxg6gra5g9tlvztr9qphzpruch30ka40e4tl48', - 'bc1qz0q4hyn5k8plleax2g52jsr0k07vgtqcr634g3', - 'bc1qz0nfyvylrvn9h2rqm7lcegzv79du2p5jezgept', - 'bc1qxfgeqygy229hrjrwmklzgwme70h8mmrjcyueag', - 'bc1qyz4zr7cv2922cjua9xrezsda82gl8z653w6ru4', - 'bc1qxnsr0al2lw7hqg90j05x9s0gxm5g4skmcslrut', - 'bc1qymcn42gst8jvcu4y9c6tf6ngfs38j66hd5zvhs', - 'bc1qzghz50r66hlp4wufyy55m5a3jjl5grkmetygsg', - 'bc1qyatvzh0ndg464ph7txwjw6kgkczw8kw03lcgg7', - 'bc1qy8054ua06akklh6avf06crt4u2hu4skasr5ead', - 'bc1qy7uquly0ha78lmn47hedd7e0swkmwpyft9j7e2', - 'bc1qzy4lg8yg6dsn0dppx3a4kq8tqe2hhrh6af3778', - 'bc1qzkqzmlj47z0ww253xu2egewcw4wagz6qfa6fr8' - ] + owners: bitcoinAddressBook.kucoin }, arbitrum: { owners: [ diff --git a/projects/latoken/index.js b/projects/latoken/index.js index fe04fb0fe9..2042ea7eb8 100644 --- a/projects/latoken/index.js +++ b/projects/latoken/index.js @@ -1,12 +1,9 @@ const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bitcoin: { - owners: [ - "bc1q48amr6l7dvacdppgucvnswwuyleaqh4dus8z8h", - "bc1q2cgh9nxn7cqmqhk4hc5fu6mju8nzy9a20qqqh8", //cold - "bc1qw5fc9ml9vm4xq5c6xkcdu3vtwyw4gdn8lw0uwq" - ] + owners: bitcoinAddressBook.latoken }, ethereum: { owners: [ diff --git a/projects/lombard/index.js b/projects/lombard/index.js index a301f706dd..8789b8cfd0 100644 --- a/projects/lombard/index.js +++ b/projects/lombard/index.js @@ -1,44 +1,13 @@ -const { getConfig } = require('../helper/cache') const { sumTokens } = require('../helper/chain/bitcoin') -const { get } = require('../helper/http') -const sdk = require('@defillama/sdk') - -const API_URL = 'https://mainnet.prod.lombard.finance/api/v1/addresses' -const BATCH_SIZE = 1000 - -async function getAllAddresses() { - let allAddresses = [] - let offset = 0 - let hasMore = true - let batchNumber = 1 - - while (hasMore) { - const response = await get(`${API_URL}?limit=${BATCH_SIZE}&offset=${offset}`) - const data = response.addresses - - const newAddresses = data.map(a => a.btc_address) - allAddresses = allAddresses.concat(newAddresses) - - sdk.log(`Batch ${batchNumber} completed: ${newAddresses.length} addresses`) - - hasMore = response.has_more - offset += BATCH_SIZE - batchNumber++ - } - - return allAddresses -} +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') async function tvl() { - const addresses = await getConfig('lombard', undefined, { fetcher: getAllAddresses}) - return sumTokens({ owners: addresses }) + return sumTokens({ owners: await bitcoinAddressBook.lombard() }) } module.exports = { doublecounted:true, timetravel: false, isHeavyProtocol: true, - bitcoin: { - tvl - } + bitcoin: { tvl } } \ No newline at end of file diff --git a/projects/lorenzo-enzoBTC/index.js b/projects/lorenzo-enzoBTC/index.js index af81c984e9..1f26d167d7 100644 --- a/projects/lorenzo-enzoBTC/index.js +++ b/projects/lorenzo-enzoBTC/index.js @@ -1,16 +1,7 @@ -const { sumTokens } = require('../helper/chain/bitcoin') - -const staticAddresses = [ - 'bc1qndzgrwj3y2lhcklme4t72jxq3df2h05vjdgzpp', - '19wFRSr3GYHmVQtnmbkx7Wkjw3jZdyYB9a' -] -async function tvl() { - return sumTokens({ owners: staticAddresses }) -} +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const { sumTokensExport } = require("../helper/sumTokens"); module.exports = { methodology: "enzoBTC, Lorenzo Wrapped Bitcoin", - bitcoin: { - tvl: tvl - } + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.lorenzo2 }) } }; \ No newline at end of file diff --git a/projects/lorenzo/index.js b/projects/lorenzo/index.js index b8a69bd003..cf0fbcf01e 100644 --- a/projects/lorenzo/index.js +++ b/projects/lorenzo/index.js @@ -1,43 +1,8 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/sumTokens"); - -const LorenzoOwners = [ - "bc1qaf6laj9m7jteztyz4lulrtcjtpusfcfnd7r7xn", - "bc1qf6cj2z2e2mzuvfrl80vgt53k7jc2vf36ckahgy", - "bc1q5hc68n6krnzgzswf7rknha2aqxzrzup4vlhce8", - "bc1qpxpmr3zdjulqnwa3jdvm83tpaek6dv3kc75ms7", - "bc1qaml9d9mqgfhsfuaa2ymutdl4psj8c2undx9n72", - "bc1qutgngqyrflxrfmk9k28ucvq0s2v8a43nwfwv02", - "bc1qrx3fpr5j6sprxett45c2kl9p4pajyxep0mapfd", - "bc1q00t2ntm46c2nfvcer6ukj6npaxjurujthse4qq", - "bc1q3pzhncle68gct6me08kn5kf9awkevt6ettwrmg", - "bc1qw6cvwx8ajprmp2lzkhrsps2qx4k9r2pj4xj98x", - - //btc script-address after lorenzo stake to babylon - //cap 1, Delegate to Lorenzo FP(db9160428e401753dc1a9952ffd4fa3386c7609cf8411d2b6d79c42323ca9923) - "bc1pjy5mq7vlqkq6nldxghauq0sqgh3hjdrp2adl7tcalkavt9ly5g8q3zkymk", - "bc1pck8hnfa76k9gqtddyjvt0syzlxj5atfr5g0dk0ktmdr9u9h2gnesge0f5v", - - //cap2, Delegate to Lorenzo FP(db9160428e401753dc1a9952ffd4fa3386c7609cf8411d2b6d79c42323ca9923) - "bc1pf2x7w0wwutvj5qznrxygpv5wcj3nvzq9dqhpmkyfk84nkg778q0qa605e8", - "bc1pstunan5nv657dqx32tdup3y8uxq6eja6z3d4kukspjpq23gxf4zqdce4hn", - - //cap2, Delegate to BSquaredNetwork FP(2f8ec74d558fe7a97d10be230bf1485db9be675228abfbf957ba050c714b679a) - "bc1py54xje6lxdd8ej9hqxdxnp5dyjwu2eda2rxa2yuaptv3lrw3t2tscly6y7", - "bc1pydkry09hpqqv4hxrrlrgpddky4u39xrpqd0xvsf9smjpd65s49qqnq5zel", - - //cap2, Delegate to ChainUp FP(31287a9728f7b11863b9c56fc4cca103f0473dcgitdc6746ed7f79050d3adff644b) - "bc1p6dltgypr57fc648txjj7zwk6k605ca9x2ul0pycld22x86jcvxmsg7547j", - "bc1pw8za3k5upa565n0kv55e89a8l0hkzpnfenj767j0cwfu7rn83yhqvuehcd", - - //cap2, Delegate to Lombard FP(609b4b8e27e214fd830e69a83a8270a03f7af356f64dde433a7e4b81b2399806) - "bc1pa56692v3hxguvu8vgu5d7dh9twlj7wm87qvzvxdru3rnluv8nmdqk58ewz" -]; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Lorenzo, As the Bitcoin Liquidity Finance Layer", doublecounted:true, - bitcoin: { - tvl: sumTokensExport({ owners : LorenzoOwners }), - } + bitcoin: { tvl: sumTokensExport({ owners : bitcoinAddressBook.lorenzo }) } }; \ No newline at end of file diff --git a/projects/maskex/index.js b/projects/maskex/index.js index c8de7c1a07..fe02cb33e7 100644 --- a/projects/maskex/index.js +++ b/projects/maskex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -69,9 +70,7 @@ const config = { ] }, bitcoin: { - owners: [ - '39DUz1NCkLu25GczWiAjjgZBu4mUjKbdNA', // this wallet was collected from https://blog.maskex.com/news/announcements/embracing-transparency-maskex-reveals-wallet-addresses - ] + owners: bitcoinAddressBook.maskex } } diff --git a/projects/mento/index.js b/projects/mento/index.js index addb839a4b..b9435c49b4 100644 --- a/projects/mento/index.js +++ b/projects/mento/index.js @@ -1,6 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, } = require('../helper/unwrapLPs') const { sumTokensExport, } = require('../helper/sumTokens') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: 'TVL counts all assets deposited as collateral to mint Mento stablecoins.', @@ -19,6 +20,6 @@ module.exports = { }) }, bitcoin: { - tvl: sumTokensExport({ owners: ['38EPdP4SPshc5CiUCzKcLP9v7Vqo5u1HBL', '3KWX93e2zPPQ2eWCsUwPAB6VhAKKPLACou'], }) + tvl: sumTokensExport({ owners: bitcoinAddressBook.mento }) } } diff --git a/projects/merlin-l2/index.js b/projects/merlin-l2/index.js index d864c9a279..8d2762206a 100644 --- a/projects/merlin-l2/index.js +++ b/projects/merlin-l2/index.js @@ -2,45 +2,17 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { sumTokensExport: sumBRC20TokensExport } = require("../helper/chain/brc20"); const { sumTokensExport } = require('../helper/sumTokens'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') // https://medium.com/@merlinchaincrypto/merlins-seal-the-biggest-fair-launch-of-layer2-5614001b2582 // https://bridge.merlinchain.io/api/v1/token_mapping?after=0&size=100 -const owners = [ - "bc1qtu66zfqxj6pam6e0zunwnggh87f5pjr7vdr5cd", - "15zVuow5e9Zwj4nTrxSH3Rvupk32wiKEsr", - "bc1q4gfsheqz7ll2wdgfwjh2l5hhr45ytc4ekgxaex", - "bc1qua5y9yhknpysslxypd4dahagj9jamf90x4v90x", - "bc1qm64dsdz853ntzwleqsrdt5p53w75zfrtnmyzcx", - "1EEU18ZvWrbMxdXEuqdii6goDKbAbaXiA1", - "bc1qptgujmlkez7e6744yctzjgztu0st372mxs6702", - "16LDby5cWxzQqTFJrA1DDmbwABumCQHteG", - "bc1qq3c6kehun66sdek3q0wmu540n3vg0hgrekkjce", - "124SzTv3bBXZVPz2Li9ADs9oz4zCfT3VmM", - "bc1qyqt9zs42qmyf373k7yvy0t3askxd927v304xlv", - "bc1qgxdqf7837dxe8xkhvctgc499kwh5xw7ap3uwhs", // add on 25/02/2024 - "bc1pruhkl5exjt0z824cafauf750f5g08azuvgcjctv0enz5csayaj7ss3j5wc", // add on 25/02/2024 - "bc1q97vmervc8x9hzr4z4yvzn3x4rk74se6e8x8sgy", // add on 25/02/2024 - "bc1q2lzqzjcq472x8v0kgdcn4m5y8cq95ysnxm6vemu0qsuqgzyge06sqmqdal", // add on 25/02/2024 - "bc1qcmj5lkumeycyn35lxc3yr32k3fzue87yrjrna6", //nft_vault_address; - "bc1qq76dy32nnk5sha36etg6pdj94vl5zrskavux2f", // add on 12/05/2024 - "36n825H7orW1u8yWmvR4zs2CWfmkY2rkpK", // add on 12/05/2024 - "bc1p35l88j3ashhktg75tjctt6pacrgpyr93ldt7yw484dm4expq073qk4n0a0", // add on 12/05/2024 - "bc1pahkqca39mfcfay7nueczyhn9v8wq96x7mp4pjxpsdpsnurxzuwuqnhsdg3", // this wallet was provide by merlin team chain on the 14/08/2024 - "1A7oMBdQir24ESgk8LDccM4MUKJx6d2mCw", // this wallet was provide by merlin team chain on the 14/08/2024 - "bc1q0hgd38zjp2v2rahqverkmdaak4vc8fynyatqet", - "3BN9ECDCAjgxaQUmJCBCM7JtJZaCeB6rL6", - "17z6W1Eq1A7hWcWQiDxUcFTZBVCMsYrLye", - "1McbLy27nLVzJ4ubMnFm3jxnQ3nbq2mpr2", - "17vH7EX655n5L4iPAfVXPn3rVzZbrgKYBC" -] - module.exports = { methodology: "Staking tokens via BitStable counts as TVL", bitcoin: { tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), - sumBRC20TokensExport({ owners }), + sumTokensExport({ owners: bitcoinAddressBook.merlin }), + sumBRC20TokensExport({ owners: bitcoinAddressBook.merlin }), ]), }, ethereum: { diff --git a/projects/mexc-cex/index.js b/projects/mexc-cex/index.js index 71d693ac0d..88110da6ad 100644 --- a/projects/mexc-cex/index.js +++ b/projects/mexc-cex/index.js @@ -1,10 +1,9 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bitcoin: { - owners: [ - "13uZyaPbt4rTwYQ8xWFySVUzWH3pk2P5c7" - ], + owners: bitcoinAddressBook.mexcCex, }, ethereum:{ owners: [ diff --git a/projects/mt-gox/index.js b/projects/mt-gox/index.js index 9034364802..359462a574 100644 --- a/projects/mt-gox/index.js +++ b/projects/mt-gox/index.js @@ -1,89 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - owners: [ - "17Tf4bVQaCzwWrDWGRPC97RLCHnU4LY8Qr", - "1BzK87zuqidZn489Wb2oLSktrjKrX7TLKe", - "1Drshi4RAuvxk4T6Bkq959ZvLbvy7b1wvD", - "1EiiKCCnFgHjEvPZdu29qqgdBm8zTvpU3U", - "14p4w3TRCd6NMRSnzTmgdvQhNnbrAmzXmy", - "12KkeeRkiNS13GMbg7zos9KRn9ggvZtZgx", - "12T4oSNd4t9ty9fodgNd47TWhK35pAxDYN", - "15kNZcrhxeFZgVVLK2Yjzd69tRidbFdJEZ", - "1LS5EFRRMDgMQusW6zokQUHjzNUfy6HHCQ", - "1FrV9hv1AW34BGJvobJatyzUWYDWB9epRW", - "1HdKXsNQtzDcfB6PGM7DWTgX9vhBWsz1ak", - "1Fu4YgM3Y9CxvioGPqkSzkydAC8MVaPN1D", - "1G23Uzwj55k2A9TRwaTknqGav66oDTkWCu", - "1GkZQcDy8V6pmHFZqUBUBCnN9dc2hoWasD", - "1Hm6XDmhKCHz68wDEYTapN9MEanke8iwUk", - "15SeCwVCFx5cWyrcdD1Zp1D1zxjH2SELPg", - "15U4VsmWG1cdXAtizvQsW4r7iMxzp64Tgu", - "16jZZkMYqjUWUtQ9DfDvHdH5ko5BcnH9XQ", - "16w6sZBDP58yyeyZAcvnxcEGJpwR9amM6g", - "19Cr4zXpKw43xLJhFZW9iv4DDNtQk2TDeB", - "1GyDutntMuYyA2vQGW5HFcKLfx4cbDdbJq", - "17etv2L3nhk6SCcWSNW4eoZkBy84izAm17", - "18ok25NTkdrUzdByFJCNVsqVYkujZ8aP45", - "199Yxz2TJGtND3QKsHTptTJivqSaUZBvku", - "1AZu7TQmKBAes2duNDctYwjAB9nhHczUnA", - "17KcBp8g76Ue8pywgjta4q8Ds6wK4bEKp7", - "1LLc8aA9C9LLULGbYCYSFKXgxKP2DXdCqP", - "1CZsoJfkknbnW5fKrt1oR7N1ALE5WmDGP1", - "1DedUxzgwErg4ipNi988wPgLk5thwciKcc", - "1H4K3dGfNbAN4AUfyUrpkGpjrd83sntDpV", - "13sXfpp2V16nnxYvW9FHHoBdMa3k98uJw8", - "13Wv5hGhubAWgSPWtXYh6s1s7HX2N1psYg", - "14mP6caC5dFhHdVAPCjPKM8Nm36MBDR5pM", - "155FsTtEFq4eGCcBxDseuwLKPbmtWbyHJR", - "156HpsWfgkWYLT63uhTAGUSUF3ZMnB9WWj", - "15QcKCa84ZCHxbsqXDoKhi5XbmQB8jPEAd", - "1EK8vW7UYaYHKiW4TZmYJKtwcZLM14VjvP", - "1Hb8DmmvvtTYv5RBLuGtDxznkZwVpd5Vjy", - "1HuPVqz2xvf1rdNFUqd62vRTyxP3jeX9Ch", - "13xGCc4TPSYY9GYxBGVNox82KxyjkFnxMX", - "13ahgw8sM95EDbugT3tdb8TYoMU46Uw7PX", - "1439q4Na8v88kPBqoyg8F4ueL9SYr8ANWj", - "13dXFMyG22EsUsvaWhCqUo7SXuX7rBPog6", - "14USZ558Rr28AZwdJQyciSQkN4JT1cEoj2", - "1FhRuUkk8Bfx8FJDemtxhKAR4F8GCNKrXG", - "1Mm9brripN4RPTzkGnRrbt5uDWdqbfk2iX", - "1LueUjEuBgc7cQhsWT8zAfTjcWmrNBZXaR", - "1LXi3x7hyt17cxncscGE887WCrC6XDNZ4P", - "19KiFrafXEyJCUDYFEv3B6tBUwyfFo7kNU", - "18YDgRhxsomuBZ1g9d8Y1JuRmxDhF8Bvff", - "18hcZVFPqDNAovJmb9vA6hEJrDz6uWXNGh", - "1BDZBTb4KE5oq6wAgA6EvAe3uCFRrAbPao", - "195HvmjXgoF3M5vFaBC8swZPhwrE7VhxRD", - "18KDS3q6a4YV9Nn8jcyMvNoVPfcrfemeag", - "19c8sUa54yQuRTVDfJa3iDkkCaFkzBJLPB", - "1B6kJM75iu5ty1HAHMMz6tT1HhjoGNTCa9", - "18M1Z337NqLtK9V69bssnQUYsvb7hmfSFS", - "19eihBKk6e5YD2QXAe4SVUsxRLLnTDKsfv", - "1C5aU4Xnpd3txbxehk46UZgiuNB8QdpHCH", - "1BXyJc6BVuTFnHQCcjiWX2xmCPNVfaSZeb", - "1Ar6meJQCkNoC9wnPcyRNNpzX5fBDaGcKd", - "1CRjKZJu8LvTutnSKq4zTJ4yiqrzMAArYW", - "1HweN9p41BY2RBunsPqyVuheEq7gVoxA9u", - "1HX4s3JeFU3x1eQgPNQVAdx6FoCtbb1hr8", - "1HzEPuenagLEWj68igDXBBXrzc293RuR5V", - "1JtgU6Uo1RAt5eiMf34EehyatUezBQP36C", - "1JVmoJT3471FjsX5H4hAeR1RyrDgpkHbpm", - "1JVU43LNKXqa9W5fCh8tppxDDEWgfeNg46", - "1JztCg7eKSkb1vi7NzGJynXpLZmoaFtYud", - "1KFDUSZuapMv7YaDmL6cyrHTQhma1MtFYs", - "1MkyfwJf7uhWTmVGGQXfcT5ip31DoHMxsz", - "1LzwbLgdKd4eFLkpRdeajkH1YJkVCip2zj", - "1MPJJzRaT8vLhowNB4dVyWRxxu79dq7WkB", - "1MvpYtqgBH7CXbTutrSVCTNHPzm9vakuRy", - "1N5X4kcZ56uRh24XrZoztS9Vb8G7j1Joop", - "1Pq7hooZbEAz5y3QMnqFY8C5xqTdrjUwcA", - "1PRXQEoL8vzEzoJJ9hbtAP6NaV2daccAUn", - "1PxGTuJzDx1ceFHx4Z5CHaWuhiPBNovmZD", - "1NA3Tj4b1jtx9eGELe31Jw4DrzTqKP3ayH" //https://www.cryptoground.com/mtgox-cold-wallet-monitor/ - ], - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.mtGox } } module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/multibit/index.js b/projects/multibit/index.js index 1ccc38fcc2..b3529a4d97 100644 --- a/projects/multibit/index.js +++ b/projects/multibit/index.js @@ -2,6 +2,7 @@ const abi = require("./abi.json"); const { getConfig } = require('../helper/cache') const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/chain/brc20') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const BRIDGE_TOKENS = "https://api.multibit.exchange/support/token"; @@ -16,11 +17,7 @@ module.exports = { methodology: `Tokens bridged via MultiBit are counted as TVL`, bitcoin: { tvl: sumTokensExport({ - owners: [ - 'bc1p6r6hx759e3ulvggvd9x3df0rqh27jz59nvfjd2fzmh3wqyt6walq82u38z', // hot wallet - 'bc1pyyms2ssr0hagy5j50r5n689e6ye0626v3c98j5fw0jk6tz3vrgts7nt56g', // cold wallet - 'bc1qmcrpqanjnrw58y0fvq08fqchgxv5aylctew7vxlkalfns3rpedxsx4hxpu', // cold wallet - ], + owners: bitcoinAddressBook.multibit, blacklistedTokens: ['MUBI', 'BSSB', 'savm'] // more SAVM is bridged than circulating supply according to coingecko & etherscan }), diff --git a/projects/nbx/index.js b/projects/nbx/index.js index eb0c922834..055766e16a 100644 --- a/projects/nbx/index.js +++ b/projects/nbx/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -15,10 +16,7 @@ const config = { ] }, bitcoin: { - owners: [ - 'bc1qd79ypayqr03lmvcqc40udn6yuq4mve34ychy6a', - 'bc1qgxrcuzn62qjk3e3echysa9srg87la26x0qn2sa', - ] + owners: bitcoinAddressBook.nbx } } diff --git a/projects/nonkyc/index.js b/projects/nonkyc/index.js index 3715eed480..160c768d6a 100644 --- a/projects/nonkyc/index.js +++ b/projects/nonkyc/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { /* @@ -30,9 +31,7 @@ const config = { }, /* bitcoin: { - owners: [ - 'bc1qy8xx8fcsmdlc447ls4wzw2tn3y6c6cy64wckhz', - ] + owners: bitcoinAddressBook.nonkyc }, // remove it for now /* bitcoincash: { diff --git a/projects/obelisk/index.js b/projects/obelisk/index.js index 8d6d2f2a7c..6fdb6eace7 100644 --- a/projects/obelisk/index.js +++ b/projects/obelisk/index.js @@ -1,13 +1,6 @@ const { sumTokens } = require('../helper/chain/bitcoin') const sdk = require('@defillama/sdk') - -const staticAddresses = [ - 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', - '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP', - 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj', - 'bc1pr6pga0d44xm3t8z36qnya6sfznsm8fwkn507x6gqt86xtnvm4h4sj2zqus', - 'bc1qy4pkldj4dqxtqypz6awwj7y8vahkht8uqhdlw3' -] +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const abi = { getCustodyAddrInfo: "function getCustodyAddrInfo() view returns (tuple(string mark, string btcAddr)[])" @@ -15,22 +8,13 @@ const abi = { async function tvl() { const api = new sdk.ChainApi({ chain: 'ethereum' }) - - const addrInfos = await api.call({ - abi: abi.getCustodyAddrInfo, - target: '0x9F836f8A27F1579258388BFab16ab16E278B1a2C' - }) - + const addrInfos = await api.call({abi: abi.getCustodyAddrInfo, target: '0x9F836f8A27F1579258388BFab16ab16E278B1a2C' }) const btcAddresses = addrInfos.map(info => info.btcAddr) - - btcAddresses.forEach(addr => staticAddresses.push(addr)) - - return sumTokens({ owners: staticAddresses }) + btcAddresses.forEach(addr => bitcoinAddressBook.obelisk.push(addr)) + return sumTokens({ owners: bitcoinAddressBook.obelisk }) } module.exports = { timetravel: false, - bitcoin: { - tvl, - } + bitcoin: { tvl } } \ No newline at end of file diff --git a/projects/okcoin/index.js b/projects/okcoin/index.js index c3ec17a84c..bc7d9f051b 100644 --- a/projects/okcoin/index.js +++ b/projects/okcoin/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -13,10 +14,7 @@ const config = { ], }, bitcoin: { - owners: [ - // we only added wallets with more than 0.1 BTC - "bc1q2s3rjwvam9dt2ftt4sqxqjf3twav0gdx0k0q2etxflx38c3x8tnssdmnjq", - ] + owners: bitcoinAddressBook.okcoin }, tron: { owners: [ diff --git a/projects/okex/index.js b/projects/okex/index.js index ca5cac2b2f..497d554ac6 100644 --- a/projects/okex/index.js +++ b/projects/okex/index.js @@ -1,195 +1,9 @@ const ADDRESSES = require('../helper/coreAssets.json') const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { - bitcoin: { - owners: [ - '1LnoZawVFFQihU8d8ntxLMpYheZUfyeVAK', - '1JQULE6yHr9UaitLr4wahTwJN7DaMX7W1Z', - '1DcT5Wij5tfb3oVViF8mA8p4WrG98ahZPT', - '1CY7fykRLWXeSbKB885Kr4KjQxmDdvW923', - 'bc1quhruqrghgcca950rvhtrg7cpd7u8k6svpzgzmrjy8xyukacl5lkq0r8l2d', - '16rF2zwSJ9goQ9fZfYoti5LsUqqegb5RnA', - '1FY6RL8Ju9b6CGsHTK68yYEcnzUasufyCe', - '1MbNM3jwxMjRzeA9xyHbMyePN68MY4Jxb', - '1Lj2mCPJYbbC2X6oYwV6sXnE8CZ4heK5UD', - '178E8tYZ5WJ6PpADdpmmZd67Se7uPhJCLX', - '1BsdDaJtgFZrLfzEXvh6cD4VhtHHSHhMea', - '14kHu26yWkVD8qAnBfcFXHXxgquNoSpKum', - '1AumBaQDRaCC3cKKQVRHeyvoSPWNdDzsKP', - '1DnHx95d2t5URq2SYvVk6kxGryvTEbTnTs', - '13rCGm4Z3PDeYwo5a7GTT4jFYnRFBZbKr1', - '15Exz1BAVan4Eweagy1rcPJnfyc6KJ4GvL', - '18QUDxjDZAqAJorr4jkSEWHUDGLBF9uRCc', - '1M6E6vPaYsuCb34mDNS2aepu2aJyL6xBG4', - '1CE8chGD6Nu8qjcDF2uR1wMKyoWb8Kyxwz', - '1FTgXfXZRxMQcKSNeuFvWYVPsNgurTJ7BZ', - '13jTtHxBPFwZkaCdm6BwJMMJkqvTpBZccw', - '1FfgXrQUjX5nQ4zsiLBWjvFwW61jQHCqn', - '1DVTB9YKi4KNjyEbAHPp17T8R1Pp17nSmA', - '162z6mSSHzfTqb2Sn3NUk5r1Y2oGoCMCoM', - '3KbDzhb8B5pUU7Wk1y26J8D4cxYLmxJsca', - '3A8tCFwWyHQey1npTAWYTtrjLPKLXpSpLd', - '33a278YeJBRvQuemSo6yeugafqdS4x98TM', - 'bc1qc3g2dx3fn9s27v92n555r2tzhkxhad2wc0wm0ahlgpmhsr325mpssz80s6', - '3ABQAsnVgK8gDCBtWeEuoRvG3zdgABrDHQ', - '3AWGaggM87Nnhit5DwYYfXyvzW1NYutCw2', - '3QLVSDvh1r9u28PDWUDyg3nR7HqxrUZ4jA', - '3QFtYbR22en2AizTb7JVFA9bL2rf1fbNJr', - 'bc1qrp6msfnqxrl2gp4phmq6mcz995xc6m8n6fn8nygjfg8p63ncy4gsp3xn0e', - '31qq3eDdNyvyoDGrNYAAN5GU2BagDNANFf', - '3BdEq8vnX1o1J4Zpwj6wkPh5FxrgxLAibr', - '3AVMfb3vJi9CbQEGyoHmpgptgbJioyKykQ', - '3MYUxfT4mx8imVz7R8bVs71NisrYnmjUbT', - '3FS1EFCqZM7KEhsVoiNu7NC8658Kq4oCiY', - '3BiWZUFxpjJN6W93Fz3aCcCPBTrpYWwyoS', - '3NiufwUuJZnUHmgSopESaeLBJkALzJMcgk', - '3JcWcMPtxGaCuhKeucTMe1V865t7UhrNnT', - 'bc1qh0w73elagqvhfkkulrah0s2epdp922d3e6r8w43uz0e8ujafcjeqcz8lwa', - '3MWakirPr7MnizUAtWuDJmt919PZciSBvi', - '3LEV2xDk8D7uy4PVEGFZUm9fcT6XvCvHen', - '3FR7ZCHv26jaWWzv7EBPAXGgBpFuVFUnH3', - '38X48VjATu2AHowPzHefNqVvKyheGzVv8k', - '3AgGgHDcqd9sxYiagskZH3EPswwqza1TXd', - '3CGKuMZrkQQd4zj8FsTmDhineKACFpQBZX', - '32hhwGNtGTZ4J1LLz7p6o55Kxm7mzgREJ4', - '3E9GBso3ipQb2fbT3PNbeqgj8RkgJcR4X5', - '34MdsKf8zE6NeAy98TS1yxUTEoBkDT2ZwZ', - '3J7F1pczapCk1sRef6Hmvh9NfU6QiV3w55', - 'bc1qdk55vq5vrzt44pn93t9e3rwecw2dy4pcwc5gwugdjm3sh9xuqu3qzcwt4h', - '3PDMVx1YRhySaPEtCV2AT1aEq9DwgPU4uq', - '33j5fuJc14aff3Z6vHZBxaHEKMdNmKbRxQ', - 'bc1qvg6drx4rdcv85pteka94eskh740wrtgulg3tp7gcmm43vgund4sss4vzyq', - '3QUyiuBQF46KAMM7wdnDnu8GKVQYieRQ1N', - '35D2tNKFmqiVrvXan6tdxgatZoCBimASmZ', - '35Wvz1krBwzgQ7REXS7iJp3Qz7k3rmFNNF', - '3LMYZ3jPoKW2jscuT8fj8Nh4d66W3uX8us', - 'bc1q37nz0uheu4997ufs84efw7jw248mk9v83sgpmvsr6nawhaadx5lq2hclpt', - '3Mkfqxh6BuYCAiKxuvVWKn64N2xvReB3wM', - '3ANAufFoSaVJefhAZ7h9qViqdfJKoCWvbC', - 'bc1qnw79hhts8r84gykqkctyhu3j4gckll9gqxktzqgx5a54m347zf7qxhcyn8', - '3MYrRpUhNWxB8Ydk9gvMou5yZNtXNynxcT', - '3LFcssbNQRmRCCEUSbpDA5yzhsFH5waDoe', - '3NEwT3x6nrab6Wxddwb7jbWY8KYqJkewGA', - '35uFYLvWLQuEo6GxSGHT8JigaoUyqmNJjE', - '3DWvnsbAJJTLufQ4AhQY7LsVQrKoLjEHXQ', - '3PdNS2nqeE6G7cTcVmGjAVjz6HaPcX2FGj', - 'bc1qwkkedj4nzep7dw05s335x6n23520eq955mpcwypftn5q4n9japmqejkxlp', - '3Qae3YK3eKSoM57jpVYjvWkS7E2KnPFHSU', - '34HVDP9RFA9MpopGQ4TutLLVMFhhJFM9AX', - '39ZEaLMDxWi5EWx9cQ2W3ixDP8rWHhz8GY', - '39XwkmkcMAakYG9E564F6RZcp1RSMhUw8X', - '3QpVtFcEdVPTWqZbo8cSZwRgbHMbSEDoeP', - '3PHu7Z1dtRYbeum2SNWFCA4Fmq8r3UeXdQ', - '39AabFsw5ew4QcAC7zpeNkuk58FoZnJkvy', - '3NXxvFdsXK8DPRuGKbhNsvtP5FoL1s6hzF', - '3Jg623UZuqvvFLYbBsqqYiBCAyWUQUDG8k', - '3DgW9QH2GoVVoqwJd3paooAScy2vusEJDu', - 'bc1q8nne4amt4wjdaa0yxuzyw949xjd7fh2w9whh4uvh6haf6c5n2kvswnxk0e', - '38jFY6wBwBpFHtM4L88jF5o155SRVvr2wT', - '3CtTopUBx6QZomCjQDvbW65RtgsWn8g9LS', - '3KPPCAsWf6dxamkMBTeH2svaTVS7xgeL9q', - '3HoEwvrqYRnrizFN7gTg5ouSbV3Tek9pab', - '33yFzhVfaY9phULdN8kBfz2UfyUVZhFHNH', - '3Akts59LQNb7GU3gtHQcxh2r9zDfyUE2FJ', - '3EdYLLYiYpoLt9sEQ9KQQ3LbF56YRoiFPw', - '3GGLdxjaqvaguzTX9z4UTYaCoeu6sUyvNi', - '3M8Xbr9vobCoxMCWwxsS9doTP6HNQvx3op', - '3LcquVjVeDpFn1oJBs6mu2H5cc3EVCcJ2i', - '34Nr2xntQYxtnBARQmzswbuB1hNhnKvkoV', - '373oyKosqPkcYEsF7ipbw13WwDmvoNGgpG', - '34dhaAMB9sCBidT1LpjpbmZjkecsDpGhxH', - '3NRgSpzcsGA5mkjKinjTgBzfBYc9CBGXwW', - '3FMAKm9fEXfNXYtb6qBGaJvG3DRKtvPy5E', - '365S7mJV4MVqBfutYw65KuURCiohnMhzWh', - '3JJ4LULa6VtcVVxZC9tsNN9JM693mcrCeE', - '3CB7RwASFyWfYNCSWrri8crPhfK6yynMQ9', - '3HzYEwURshSeJZJn1ak5ioHKQV5rfZPXY8', - 'bc1qvusjx72vh3qkvw36jdqvl6sdye8ne8hfdaveejprj6xc24mpd8wsrf6w07', - '36U5xAL6FzFetzebPNT1ZQnANEk1TurVJr', - '3LkDsn4LZgYnMqZF2wAXCVs6kc72xpNLLz', - '3Gmt31zvMb52fJRRvLV3Pr3XTeDvVjGHAr', - '3DdCY3f5Ky92nSen5M2M2bzbBLUhMWafG6', - 'bc1qck2mvm6wp8xqxlk98eyl89kgwtmgw02cgqwsjstkg4uerqpqclxq6se9wu', - '3BexyYLsJQuN96qDRsnrU9yACnUSxxjWXx', - 'bc1qt5t0qhww0w7uaczxn9du7yu2l2hgpnen06r42u98du3cs6tqvezqatj38e', - '36PCQLrcXhNG3BZPeaND3zCW7cHgzDVYp3', - '3KGGtqwaQahxaN4GovThCyNdg6THK17Lrv', - '3FLnTqeKpK8CXiEA39b77pCT85sVWJXzN5', - '3AL5dD3jvpDHu8Qn7yZxGdpztWxieKxF4R', - '3G7e21FgygBmWDRMykauLANpuBK8iKqXpJ', - '3Kg2JcNnBczmHSX3udTfrKdqDy1gkrVZak', - '3QJBNEMY6TezfEBXGoc5PUKoLSCcWUd1Y5', - '3QQ8Cotsxbs9qrAyqLKaPjofzvcy5qipCY', - '34SG5K1QrntsigARCZJxNv8NwfSmQxPsDi', - '37Pd5nJZyXwjoGSwKW3ivWfeaW8VSjCey4', - '39J18vgfymGnJ2EYp6fb13rHNKBASbuMtf', - '3JwZq9s3yBhi8FikgYu2RvhjyBAhnSiLgy', - '3H4T7yRpphtyzpDUEiwBTtBa3fBMvHaKUZ', - 'bc1qrysu5ykl5pdlk7d9j0z5rwak5h9rus6cx2udc0s9tqhf5842nqgsdtgtly', - '3JqwqaLxqnDqXuJuKKp41UFSiFR1CuqznP', - '3JqzTCvFxye7nrVWGTBH2CNqZ7bbFppBww', - '3KWKbaAsf5qmbyBHXnVH6YqBgP4ZcNkUsc', - '3FbmQz3WvASHgCQUz3C2JmGdkd1gQFLdC2', - '3FMrfjg6zD3CTXSHLAiRcn3RFyBR8MMFR9', - '3KeFqqpbJawWvAudsi4q8Zx9Lewponyyht', - '32G39DN4kb9Sd6hk8RKySDf1QVFmQeAwtU', - '3BqZtfY5wZk7qHQaQJ4gBmqGLnakH8ybRy', - '3K1WNLse7M28jbowGsZmNaMV9FsM9yW3fE', - '351qZH3E9rwXg5ZDY3tgvsYhkm9CnYV25N', - '321DUXbk9gEEKG72DU2TcADDyfZXkX3fHP', - '3E5jAXsSi5x7oj6GQuM6WQPuVZaXeYd3sU', - '3HEBzhigBkmhVf7kx1KFXif42AqQWr8KH6', - '39smXTQdqD2W767ipLishHV4diSV4xNFxA', - '3GQ4DGB2tfS6YrwfVg9MF7KBRCLWkugLWR', - '3AEKc9AokfB1nBvsdS8LVFJysZSQBJRrny', - '3G3Sis7s9Jjex2Pcaerh17HvSJ19qHNuMg', - '33YfoFAdobotJkMPUqSh2ms9frvRRfRzpu', - '3G38Zn3mvixfamrKJJtsubiEL5gCQAGnSo', - '3KTFyMGHcjWjWE1UqZRM3T4WnHuQt95iRo', - '3JQmpJYkZrVczaNDCyQoLe6JXV3vGFY8ce', - '36EMwG1FHCrp2MLm474CnE9rTQDWFF1uTF', - '392Bq5jWV8NWUTdV59VCqoYviY5KP9q9Ee', - '3G1no1sZwQuNYd5H3m6seWw9oy4E4Yu1pP', - '3K376tvxysV4XDtTTEUF47Xc8LHdjof6kR', - '39ciFiDp9yj1vLSxHh6c13DiVFhcBab7NT', - '3DUGtYyorAm9vhpo3KbMURMiR2CByP6BoM', - '3DeCWk98Wp6bG9apmqCCqTfRc8uVdQ1vyw', - 'bc1qpkgxexfg8ah0j0ffk3ge3d4para29r8ugx02ch7daja3s8u4247qw2d2jq', - '3BnCzXEqQi7VDMfCaGY9zbSySuy5uQUaRp', - '3GkiKw8DBm3nSqjL1mZLJdp4yq6WEkkyoR', - '3LTvYTkSk2jq4a6mPVMadJ9vzv1V6RMDGq', - '34Fg3q75hcnjyCoL5FLPKaDM1bewFCPKsv', - '357DauGAnsbGpMgAApUqTFHCgyE2kXA9SD', - '3K1sq7TwuVEbvyADV2oNz6DYX2EhWSrVxC', - '3LWHs1HvAF362RHUc6MKL4jUPWcTw382pj', - '35oBhEfzDyCMz4KY6j49iu8xjtbHQ9GL7H', - '3CZTmeG25AXcjYurJ59mcFR3BvS4onF61M', - '3C766rkZjRvmvhGmyGeH2x33ciUrZHarvE', - '3DXZB5fAv4ujHv3dfBPnU6qaDR4HDUEuwY', - '3LnMEFH8kYMeZ8d524cj4RgXMVmniHaBSF', - 'bc1q2gp7s58gf75sg5g8v6ah8z90ghk8dqksa62u27gmz850cnaclshsfjvlr0', - '3Ca537VX1HufiVRfKVogWcD85RV3iuFs53', - '3BxyyKih6788xBQKk8aMg1cD3qP1x7Gqgr', - '3LceSbWiDHYvy59BW2swjiEQZkqvaijcsz', - '3MjPfBpz8oDcEJZphpBuiwRnvCAASFsgT1', - '3DdvsQoGp4wtvCAbyNBEZjCoWoWQL6TssG', - '32ZB86r6jT4DkAtnYYSHP99xtcai8LePLP', - '36yNiwCxiEtubUpzBLGPeSBCbubCy9i3QW', - '3GQUyZH3EPoaHFzjWr5peAKSQFNGxxmVw1', - '37wL3HQgir55T4o2Lv4Ygrsgat5W7iPnnd', - '38qt6S3zQKizRnafitwEdz4dTj1fx72dgY', - '3EqD1B8pMgdRE9iPEgUXAzpcyxihW4tbgA', - '3P7a4wgoTDKn8F2g2VB62pHiV22XzJGGbd', - '3FyaksZvXsZxEShwdpNMK7awgDE4kBuKmN', - '36CVsC2nLzvFejTuBXvCFnt3p5QsKaGzwh', - '3BjsuL5pVVWBFSMtoB9cg2d2hsJzJFpo3B', - '34w5Da4HJ54AWTZVo8JrujhV1v8iRZho3e', - '3DuUe32HgxGg8RQ5sFk9drcKRVmwNCAHhV', - '3MoQyLh75Niz1s573waSP8pc95sqQcdJXd', - '3Bvj92ASRnTnqj9kdABSgXJgrBDy6XEgzq', - ],//BTC DONE - }, + bitcoin: { owners: bitcoinAddressBook.okex }, ethereum: { owners: [ '0x03ae1a796dfe0400439211133d065bda774b9d3e', diff --git a/projects/phemex/index.js b/projects/phemex/index.js index 8aaad51c99..3bb13492a3 100644 --- a/projects/phemex/index.js +++ b/projects/phemex/index.js @@ -1,10 +1,9 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { bitcoin: { - owners: [ - '3PiGxVdpMjWSsH8X8BypdwcsmPW5cmE4Ta', - ] + owners: bitcoinAddressBook.phemex }, ethereum: { owners: [ diff --git a/projects/pionex-cex/index.js b/projects/pionex-cex/index.js index 2c75620788..7abac83d70 100644 --- a/projects/pionex-cex/index.js +++ b/projects/pionex-cex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -15,25 +16,7 @@ const config = { ], }, bitcoin: { - owners: [ - "1D2Pds2XyiDe7CknDumKkdSECuepGsBCSR", - "bc1qs0jdyydyd4kv7fwqre4suhz33mcuy3838xdsla", - "1JkmFSbqijbrv6JdyVx2hNwyE8nzEy3Cs5", - "bc1qctq0v0vecjxp4de66znkh0dcczkvuqjwwt0za4", - "1KH7cEFwFvKfnx7KjMaQUescVSigz3FMaJ", - "bc1qeplx7cy5xx37m9mtrh9qefeuswansr0c9mvewa", - "1BgvqcFm2cYRg8HCrd4qWnC7iA6tQqoeme", - "bc1qw5lxcrk7l2xsy2wx5mapdz58g29xde4x56le3s", - "1A4Ag6y473avEbjVm5N4HAqiVCE6NxLRCS", - "bc1qvdf8f85dn69csyka5tzjezsl66hdhmmfgwgfzz", - "1PDgKsiQo8hkA5pxYBwS1ooXv9jFNJCFh5", - "bc1q7wufvquhtmmd7eepjdu76lumj6efmfl2p6sgch", - "1CNEXYtt6WYZuMwJF7AjNYr39nxbrUTRoh", - "bc1q0jkkjr2qr4wl3v399algvsjuk8g7vlm3yaqufu", - "17UcdCaVWpmgpuZsKfKdWRUUViAzoQFY3H", - "bc1qguymjgurnywqac3rrplr2nmkl26cf5jyyq3vkv", - "1D9YPYQevtEsk26exBjCY2pKfhDsXTxJEE" - ], + owners: bitcoinAddressBook.pionexCex, }, tron: { owners: [ diff --git a/projects/probit/index.js b/projects/probit/index.js index 7777210d33..70ae054863 100644 --- a/projects/probit/index.js +++ b/projects/probit/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -16,11 +17,7 @@ const config = { ], }, bitcoin: { - owners: [ - "19EgVpboqNjortWyhJSDAGRvHDtduqiSfr", - "19AtrEvJv7UY75tvWkXMxLUAYibxpZhFfN", - "17PpCEuQUT7xxP1ocfhvFdwQyrB5dG1dQP" - ], + owners: bitcoinAddressBook.probit, }, fantom: { owners: [ diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 64adca0a4e..5d93995322 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -1,12 +1,9 @@ const { sumTokensExport } = require("../helper/sumTokens"); const sdk = require("@defillama/sdk"); - -const owner = ["bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay", "bc1px92pntcj0wd5076nnymp787a7qczsaauuefgntxngdwvkd584xgsaagem2", "bc1pxhkczd3jq9nq50p2xll99edhxlx5dj6ztgw5pgtzszjtlvg7tl4s8ttf04"]; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { - methodology: `Total amount of BTC in ${owner.join(", ")}. Restaked on babylon`, + methodology: `Total amount of BTC in ${ bitcoinAddressBook.pstakeBTC.join(", ")}. Restaked on babylon`, doublecounted:true, - bitcoin: { - tvl: sdk.util.sumChainTvls([sumTokensExport({ owner })]), - }, + bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: bitcoinAddressBook.pstakeBTC })]) }, }; diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index 000fbaaf7b..7291dc9905 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -1,7 +1,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/sumTokens'); -const utils = require('../helper/utils'); -const { getConfig } = require('../helper/cache') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: 'TVL for pumpBTC is calculated based on the total value of WBTC, FBTC, BTCB held in the contract that were utilized in the minting process of pumpBTC.', @@ -19,11 +18,7 @@ Object.keys(config).forEach(chain => { if (chain === 'bitcoin') { module.exports[chain] = { - tvl: - async (api) => { - const addresses = await getConfig('pumpbtc', undefined, { fetcher: getStakingAddresses }) - return sumTokens({ api, owners: addresses }) - } + tvl: async (api) => { return sumTokens({ api, owners: await bitcoinAddressBook.pumpBTC() }) } } } else { module.exports[chain] = { @@ -32,12 +27,4 @@ Object.keys(config).forEach(chain => { } }) -async function getStakingAddresses() { - let res = await utils.fetchURL('https://dashboard.pumpbtc.xyz/api/dashboard/btc/addresses') - - const btcAddresses = res.data.data || [] - //console.log('>>', btcAddresses.length) - return btcAddresses -} - module.exports.isHeavyProtocol = true diff --git a/projects/robinhood/index.js b/projects/robinhood/index.js index 4f5d002ceb..15a5911755 100644 --- a/projects/robinhood/index.js +++ b/projects/robinhood/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -8,11 +9,7 @@ const config = { ], }, bitcoin: { - owners: [ - "bc1qprdf80adfz7aekh5nejjfrp3jksc8r929svpxk", - "bc1qmxcagqze2n4hr5rwflyfu35q90y22raxdgcp4p", - "bc1ql49ydapnjafl5t2cp9zqpjwe6pdgmxy98859v2" - ], + owners: bitcoinAddressBook.robinhood, }, polygon: { owners: [ diff --git a/projects/rosen-bridge/index.js b/projects/rosen-bridge/index.js index 35fbc3262e..b2805905b4 100644 --- a/projects/rosen-bridge/index.js +++ b/projects/rosen-bridge/index.js @@ -1,5 +1,6 @@ const { sumTokensExport } = require("../helper/sumTokens"); const ADDRESSES = require('../helper/coreAssets.json'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { timetravel: false, @@ -40,6 +41,6 @@ module.exports = { }), }, bitcoin: { - tvl: sumTokensExport({ owners: ['bc1qs0852en99dfctv0egj2qxnmc79mhjgn9ap975t']}) + tvl: sumTokensExport({ owners: bitcoinAddressBook.rosenBridge }) } }; diff --git a/projects/roup/index.js b/projects/roup/index.js index 0d424ca959..edb7374867 100644 --- a/projects/roup/index.js +++ b/projects/roup/index.js @@ -1,16 +1,12 @@ const { sumTokensExport } = require("../helper/sumTokens"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { timetravel: false, methodology: `Tokens bridged via ROUP are counted as TVL`, bitcoin: { tvl: sumTokensExport({ - owners: [ - 'bc1pv5lu5aklz64sye9f4zmnjkfg8j6s2tllu3fem4cs9t0hcrnz5e7qy0qw6e', - 'bc1p2tncs8egnj8e6qt46np3qla70mfx4telu92v4c9hp3pg8khqp37s9lvmfx', - 'bc1phnxqw4gfq349wm2xcqgqk77544ssqwa6ycuhjh7hdxks4mtjg33qrfenw5', - 'bc1pfsu3ts4equ7rdy63dgt7shkqlu2n5kw8p0z7p7c8lsrh2yqg40fsvz4ev3' - ], + owners: bitcoinAddressBook.roup, includeBRC20: true, blacklistedTokens: ['roup'], }), diff --git a/projects/silkroad-fbifunds/index.js b/projects/silkroad-fbifunds/index.js index 3adb8f9224..8107e70c84 100644 --- a/projects/silkroad-fbifunds/index.js +++ b/projects/silkroad-fbifunds/index.js @@ -1,14 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -const config = { - bitcoin: { - owners: [ - "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", //https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ - 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', - 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', - 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' - ], - }, -} - +const config = { bitcoin: { owners: bitcoinAddressBook.silkroad } } module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 16a1efdceb..ff13d82b7e 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -1,20 +1,12 @@ -const { getConfig } = require('../helper/cache'); const { sumTokens } = require('../helper/chain/bitcoin'); - -const bitcoinOwnersUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/refs/heads/main/bitcoin.json'; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') async function tvl() { - let bitcoinOwners = (await getConfig('solv-protocol/solv-btc-lst', bitcoinOwnersUrl)); - - const owners = Object.values(bitcoinOwners).flat(); - - return sumTokens({ owners }) + return sumTokens({ owners: await bitcoinAddressBook.solvBTC() }) } module.exports = { methodology: 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.', doublecounted:true, - bitcoin: { - tvl - } + bitcoin: { tvl } } \ No newline at end of file diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index c990800bf0..b3a1e43bb3 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -22,14 +23,7 @@ const config = { ], }, bitcoin: { - owners: [ - '18DowXoMUQT5EU8zPTDTrq4hrwmi8ddCcc', - 'bc1qfu6su3qz4tn0et634mv7p090a0cgameq6rdvuc', - 'bc1qutkfwnuq4v0zdkenqt5vyuxlrmsezldzue5znc', - '1Mgs8zLJ7JyngcNRUscayyPHnnYJpJS5x2', - 'bc1qc8ee9860cdnkyej0ag5hf49pcx7uvz89lkwpr9', - '1JgXCkk3gjmgfgjT2vvnjpvqfvNNTFCRpM', - ] + owners: bitcoinAddressBook.swissborg }, ripple: { owners: [ diff --git a/projects/tbtc/index.js b/projects/tbtc/index.js index 37312c2ab0..a749ac298f 100644 --- a/projects/tbtc/index.js +++ b/projects/tbtc/index.js @@ -1,17 +1,13 @@ const { sumTokens } = require('../helper/chain/bitcoin') -const { getConfig } = require('../helper/cache') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') -async function tvl(api) { - const { wallets } = await getConfig('tbtc/wallets', 'https://api.threshold.network/tbtc/wallets/pof') - const owners = wallets.filter(i => +i.walletBitcoinBalance > 0).map(wallet => wallet.walletBitcoinAddress) - return sumTokens({ owners, }) +async function tvl() { + return sumTokens({ owners: await bitcoinAddressBook.tBTC() }) } module.exports = { timetravel: false, methodology: "BTC on btc chain", ethereum: { tvl: () => ({}) }, - bitcoin: { - tvl, - }, + bitcoin: { tvl }, }; diff --git a/projects/toobit/index.js b/projects/toobit/index.js index 99344e2d86..ec14f44970 100644 --- a/projects/toobit/index.js +++ b/projects/toobit/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const config = { ethereum: { @@ -7,9 +8,7 @@ const config = { ], }, bitcoin: { - owners: [ - '3926KKKCqcLaWpAau73TMo19sNv23s1wji' - ] + owners: bitcoinAddressBook.toobit }, bsc: { owners: [ diff --git a/projects/treasury/india-covid-relief-fund.js b/projects/treasury/india-covid-relief-fund.js index f75c213016..8a8c422174 100644 --- a/projects/treasury/india-covid-relief-fund.js +++ b/projects/treasury/india-covid-relief-fund.js @@ -1,12 +1,11 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { nullAddress,treasuryExports } = require("../helper/treasury"); +const { nullAddress, treasuryExports } = require("../helper/treasury") +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const Treasury = "0x68A99f89E475a078645f4BAC491360aFe255Dff1"; const Treasury_bsc = "0x5C9E5571B17D91e6ACcD4F0c29bBe199Af1f7B09"; -const Treasury_btc = "bc1q220k2449fau0pxu9hfn28q3w4k99ep9hwsa5fa"; const Treasury_trx = "TSZMcrQzMLdKrgiMPoe2uQMHLeEpkf2j8E" - module.exports = treasuryExports({ ethereum: { tokens: [ @@ -40,7 +39,7 @@ module.exports = treasuryExports({ tokens: [ nullAddress, ], - owners: [Treasury_btc] + owners: bitcoinAddressBook.indiaCovid } //https://cryptorelief.in/transparency }) \ No newline at end of file diff --git a/projects/tron-btc/index.js b/projects/tron-btc/index.js index b12cff7560..b1f938681e 100644 --- a/projects/tron-btc/index.js +++ b/projects/tron-btc/index.js @@ -1,19 +1,13 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); -const { sumTokensExport: sumBRC20TokensExport } = require("../helper/chain/brc20"); const { sumTokensExport } = require('../helper/sumTokens'); - -// On the 23/10/2024 , defillma receive a PoR from Tron/HTX team with the respective BTC collateral backing BTC on tron chain -const owners = [ - "1NBX1UZE3EFPTnYNkDfVhRADvVc8v6pRYu", - "14NEbSYdjumn9h4spMjbp3PdUpeXuM5PBZ" -] +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Collateral for BTC on tron chain", bitcoin: { tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners }), + sumTokensExport({ owners: bitcoinAddressBook.tronBTC }), ]), }, ethereum: { diff --git a/projects/wbtc.js b/projects/wbtc.js index fabf04576a..e823eea80f 100644 --- a/projects/wbtc.js +++ b/projects/wbtc.js @@ -1,349 +1,9 @@ -const sdk = require("@defillama/sdk"); const { sumTokens } = require("./helper/sumTokens"); const ADDRESSES = require('./helper/coreAssets.json') +const bitcoinAddressBook = require('./helper/bitcoin-book/index.js') // WALLETS FROM HERE https://wbtc.network/dashboard/audit -const owners = [ -"31oMgrBjhbAr1ZZjFUFYfDT1ZYvx3Qp9qL", -"31qyn946XELbPKMaSWhk2SfFN8ikqLJ1GY", -"31rYKY9PysQgRoc6eB9fwJ3e89F5dcvRM4", -"31sADuWnUApAxzXJZTaEziCn9DhZVUajwK", -"31sW8NHLr9MELRdoGPWrEk6wBd1pj2uzkB", -"31x6dwHmXYHqd7YiwvJNPX8ryvDj8Cdht1", -"32Cav9GPxma3wRprn2FtPQ7gxmCZ8ZEmzv", -"32Ks4Rtb1A5NtzexGq6zEeqHta6hoqvCZW", -"32Ver3t9feJgByfNLF8pggtNFPMf22iC3Q", -"32fN3YjNhtAzUjBHfTVFtiPBFPgy1MkBAC", -"32hJnfPp6ZDnmkJ3tosoo6PvEemFr1z1Bd", -"32hPQh4EMBS14BMutrW2WJ4V76yxuXHJdF", -"32iT1QaoQD61rZgCNLccNqAdbnx4HwgvZE", -"32m8wzKabRRF7o6JRXN1srLSA5FzND769o", -'32oLNY3suWAZvYTBeAaFFSk32rJtS8w9i8', -'32okkzumvdoocdjN18SzbnTTNd2omQvvt3', -'337ot6fHGs4NCZwg2cKwShhrYX46g8ACtQ', -'33K5r4QntjmmD4mzSHq3WQJQtf4Dw8jvcZ', -'33PbQFD2eAouKnKVTBvZTFWE2pRzLgJdro', -'33ZA8VjwL2oucQceCP9WLEVunLkLvhaaPb', -'33epzdB4nk3FWHtUpHMQrzTWxiehSti11v', -'33gNdUGQTBT7cUbNx4892keGA2L64ixrfJ', -'33jqiX8NtPd8empn7ibEc2tn25GUx8iUE8', -'33xpP9NhBBmQt3XS1mD2g4pi1FZNuUFVR8', -'343uVxqsriiveWxekC6s3mNaERzsbfke3h', -'34CyVpeNgNNEoBdEoSSH6aTjrUZDavaUtr', -'34MPipmU3suumfX7WxTUTxmLX2uVK1Np8R', -'34MSicAL7qVGkevFPLwyc9KohGzoUSnu3Q', -'34Qg9U75RNPqAmZzF2amJ1XNGQyVek7HkQ', -'34whRPeeSYTPcihybfXmkG2uoShUdT3d2d', -'3573rMHLB3VABY7VaXMWhRoCBVspLGC4xV', -'35AY8sKs3yt3FbZpsmAtgvSXBZtvqqwc8e', -'35HfRwMwqB7sNTwijoG4fGHBmfWMm48aaB', -'35LMppVy98ofPKeUXUk79FUSkVC8yiXHUF', -'35QASqiGmQmHoccRc8pk9EtPVDFZDrFA59', -'35ULMyVnFoYaPaMxwHTRmaGdABpAThM4QR', -'35bXvntqjj5LnEpRVqU9bLcAPtT9crggYj', -'35cv1mcZBJkvkjY2KQSdmbo7Mq7E2yEVZD', -'35dn2Sfsi9qmqZke8SfSVcaggED9uJYQhn', -'35sfxCN1Gz37dq9KkpTfW56W59CK46JMY6', -'36RYMHxKrvNvrFcovZVXEQWC11LLbPE56V', -'36U3VfLRN9kbQQXRGwP5SGUYebSB3MqVnp', -'36ZsF5YgJDW25eZKS6gnZMqW4gr6wv9xp1', -'36h9DtMdqYWTxSg1yys2exZPFQoQXv8QRL', -'36jGhq48YgvjJWtEpqrc57QzXcBJQyCsS7', -'36jYq75ewM9AMTfnKRTwkPBBWwJtGg4CsE', -'36m2gCFRpkikK6AXUQGKLabKmd8PMjwx1Z', -'371SbkDHpTvRuYTwayWsBNsXK93Tj4sDAd', -'37Tgw6PStVEAyfAJT8yEvLAcxkoRYK3hDz', -'37Tob2tV9LRVzJng6Z4YCLyPsmq8n2xMQi', -'37aZoS67WApGWTDsn2rYDsxebhTdZSR1sh', -'37hV1tJYctQLPin7vCSjpDL34PpiiUTyTx', -'37kFT7mcJqgkqKbd66VbgkHSQgnys2V7hp', -'38EovPeRhGniW3cpYLJwptCqJkx9Y1Pg7G', -'38J1ce6tPUgy958VBkGGa2AmFU3LQLJ2Gv', -'38R6URq21qncKbYiiRXPi2MVx8xYRgDtWD', -'38b9cazfu4SxqoahgdiHEMSo1aNDdKquRm', -'38bzm6nhQMFJe71jJw1U7CbgNrVNpkonZF', -'39P2pJ9EmN3qmPAm1TTZPzp6T5LSsJq3eQ', -'39RMkGSQUQjifV2TpgRNYW73JK38xwA3NJ', -'39WQqCosC8ZD4S9XBPHRnnRUeVRvNctnnm', -'39e7mxbeNmRRnjfy1qkphv1TiMcztZ8VuE', -'39mayj82aZdb6UWs9qQAZZrC3VzfxUQP7c', -'39pEDUwFFj28sN5muXrmT5mAbDJSf6qEL2', -'39ydxDT3H6KygeXQn8f1tYXk6BtCTrsutw', -'3A25qkpmhCrYGEZh39wc71u89dSXGCYSvd', -'3A2wJ7LBiR4NhPbJSLNVfzZk6vDeYYPrit', -'3A37hJV9JPWR4UMCXC3QvKSeVGiRwgGtiU', -'3AKea5UYSyMc2oRRdQYhkn57nXWMm5woDz', -'3APCmmVbkpKSmLkTbGUvdPUyfqA4CZ25a4', -'3ARRJS9VNVkMdiESpxq2AGfpZUQRUvdGgd', -'3AdKaaTBFPQgpFen9YERPmrfV7QVvkYQfp', -'3AfJyKGXVBUcaWdyJeWxsasq1dHPw8pRZz', -'3Agd6vor95XcHvf1MPKE69KEpNbZTKD6JF', -'3B9UDWZNPdtL81JLnnPEJoiurcmaGx8DZm', -'3BCWh8prqQDsZDi6Pmvut9HJrhii1Vk7Ak', -'3BCm2gVB29QDFLWt768jjTwKoe1N1QVwSU', -'3BJJ68V6H1CoEx4MWdhqVk2kFpPUNVbs3T', -'3BPbdokvatbZEFJHuVUstG9zeSDLr5RdvL', -'3BTqdvZt5MYYWLAGXt8psAMSAa8Gh2AVPA', -'3CDy1xZavmpd27jV6TZm5teH8U6hrdXRES', -'3CPEGQzA227hHR2jUf66MdgBJ5wPnDdaW9', -'3CQBneh4TJtHGUP4QS3mfJc75NoiGgKwV3', -'3CdzzKFGY7ZahrMCM1tBgoxrgSPUWX4RVY', -'3Cr3vRcZD5q4XbXCVTo8sFCN9Xb7z5isth', -'3CrWGaRncSudU3EZPEhvWqeU2PG1xutr5x', -'3CuoRMhRXvsxdYsNL4kmKDJyAhaDB7SmBn', -'3CxK8MVHuqXW85z4MF7A4FYk8k6jKPFgPW', -'3DDUy5Ze4TaqKFpktAhHcmmffz9KKGtTrb', -'3DJNy9xMcMsNdmdipTgqME3TJCRkv7uS2g', -'3DhbEcm1SuJjTRxZBXxHyceYGm7GdRB2pM', -'3DiJgisVit4pqj4ByKxi5p1qdjGDxpGfR4', -'3ERNo3RAgP8o5jqELPKUEV47ADm4JtvKBd', -'3EedqW1fD4QRFmrPgkZZZvzHRzj9f4xVSX', -'3EmKqHZhXic3TymhuY8NLS7Bdk91erm4V7', -'3Epe1CixppBP9QSQ7DkvsWNKsgifTaxMY2', -'3ErNFK17MbH3GAGfakMwTrKo8uHmBuuVX1', -'3EuEvwodW88xEuwecsLb76x16tLxcUZAxx', -'3FDtvkk7hpZq5GuEJxt3Ps95vjtdDEfJ4T', -'3FFgKaYkEf1M73QtzuY9DGqC7VeM2sAQhT', -'3FHRnMSaGMAaLcoHbA5EVcEuYVxTEZdTyp', -'3FKkCxSZe1c4xZiVyJVBTbvzs9Lj1snqVC', -'3FVsTChmR7WYgfnU3CAmrrD3kqmaRMaJCC', -'3GE2pWumzKXnNMA9PFggsBwyk7NYSJvGGg', -'3GTk9xdRHnPQ61Pm7Jnv2Z8hsXv5FMVyeY', -'3HFrW63zQ58PypYhSYgHB2gij5VirsyRAm', -'3HGSCuXjnfEncUCPQ4GzNrv3BHcmLZFdeT', -'3HHLh4HSK8wj1w3YW9i4Chdnuybgadhpz1', -'3HM8YGKhwwnZKmrUEoGroEgaG3dv8xkVZz', -'3HVCDPPbAqiRwRjXhvu7PSDkLGgEajexuH', -'3HaHcbNmhJKgJ3dtbm2tg8XH87BJkRx7QE', -'3HauLvRoUBueiiLwebk19w6rnUTYJkdwNW', -'3Hdj2n5DEKPGsRd5md85exAXdwnRbomWTy', -'3HpHptRrwK5x9i7uULvk116QhsAnRJfJb8', -'3HziaqLNy8PpyQFLdwr2yxCjwEjRUjN6Eg', -'3J37HnDBzWN1sm65mbD9U5zvKrp2bzhuYJ', -'3JDewabYE785vTmaQe3MuHvUvEZJQTx8HU', -'3JMDjCYxxi5MF3aXRx8Dg13Rign3masTXj', -'3JcNkH5QWYuSfiQYADq4yV2hAYnQ8KC74t', -'3Jj1juATP11jHfBvRiu3BbzdJCNeRskqzJ', -'3JqwUY7pUwEWu2hz6mwzZKSQnvKyRRXCQM', -'3JvmhjuxvLVM8NQzAwwMvzWAK6zDLQ5Aor', -'3K2mpXMDFe7cT1baogitkRGeXqCYeDw6J5', -'3K43ux5cCAxfKgymq5eHnHS1toC9nrERbT', -'3KAGrSyTsKLckBgN7AiAfojbScfjGAHwFz', -'3KT7jvZyvhok3fkZt8Y9w8tcqpyQW5Jg8s', -'3KTeq879YjzhqkAXzZmdapJAVC6qz5qEth', -'3KWe9k7TG2j7xNw8BP9YHXBeHy1knC1xGS', -'3KXKTXR9YxHuhm863nqnSrKznkYtcx7wC7', -'3KeG7RzDwGaTywRfQgPCQaeyMgi7C89eQc', -'3KwPoNu1FxihhyRKjv1VG6C3FPy8vgjyse', -'3Kx4doXvL4UhDrKJqn8FoS5wVU3VeS9ebM', -'3LScoRmRA3kknxF5dLxz6wfw3z4LXRiVyT', -'3LbLR4uiq7RFrWgDKHfdgktAC88qtwY2Li', -'3LrxWneLHwvbNrMKXorkc17wxHqCCpNGkq', -'3MJ4rpTvuiTxYhTppNx7NokNUDZg26ofi1', -'3MLH54DXCtmydRocRZz9pEkfTTGWribBa3', -'3MM2BiaXBACfKUtVsyNr2RDXyNEhunez6v', -"3MPcUSHeWCSxCUsJtTS2L2zZfWLvorNFef", -"3MUJjyx13waUriNPkVnemdoJAiJT6nBmef", -"3MkzCjZjodyaBXz7W8i9NTjduEdykdkd89", -"3MnCLWSq31hetgbVA1Xn1VxVVb31SPeSKa", -'3Muz5dT5EguQgTiXgQ1eqJYNkjjQuSMgsb', -"3MwfxJqsy943oqYhbdKiaBrFSK9xbyiAi9", -"3MzRi499Cbcr4795iRnznfC97EFji23h7n", -"3NW5tDLFceDb1a75QkGampkuuceZ3YPMUX", -"3NfBFZRgKfHVJy7rSTutZyGpa5M2GpRdwu", -"3NmVi1xVYZj5YXU8wcQyoUfcVRCLcYhqqQ", -"3NsC2NXzKum7sVWQLQ3YYB3o9JbTz5FoaV", -"3P4EDeK5fxCLEQzM7iQ7n95DWgG1cXSaqG", -"3PRCCQMdWwjEKy89iVdL8LouknsgygwWpL", -"3PRHbh8ajUXv5wPD11CxFRs1hWBo8vR3zW", -"3PfcB36gDa47YkrbRtzZSwmrKSMsBSrhr6", -"3PkGNCt85M3aNQkBqiT5Psgmz8FjNujEKK", -"3PnoF45bZhJcPKGLf4nQzyQVAEFsxBxQQa", -"3PxV5m54ZwMDheUyFecvRVQHJK7WG1t49V", -"3Py2iN5SEwSCtT5QHkDU1qhbvmdmMZ8cpK", -"3PyK2LYBfYMUXsa8sMhTSHQZ8StQy3Xoz8", -"3QSd3JjJ35VAf5Shv3EPVpGCi5eVMQr6dk", -"3QWaxXXXbobqpWprekwzANeFuNrYXmaNXU", -"3QbVP6bTSXN2tXG66MTKtHtiJ1coKXnrjP", -"3QdyHj1i4y5CywEFWJ5PwoqGzDxGyJGPeb", -"3QjqS6A7uyoCx1vcXQoqtLatubFmsHe1ps", -"3QmVyCw6YnEvt1jXLeF5863uHPLRaKhWs5", -'bc1q02kjkf8gp628thqdfrm54tay5pjw05w297d6p6ez5andhp9gf0nqjaa2e4', -'bc1q02py7892mlqafaz9wevclp8ve4dl4z6hy4sqp973sz2u4fvpxnmqnzfc2f', -'bc1q09z8m23n7w7gtqsxpgwun0zvra9jwzf4z9c48cezq36q3zvmsuyqdmyjkn', -'bc1q0vac8d7jkyds2ux4jqwu6mu943z8keyxq4twaw8p8md8j8rtj94s9wrrl8', -'bc1q20yv979atkvtmecs5kj88a0pmf85ht500pmp7p2ztd54tz0u60psj7c702', -'bc1q26ds9juuyjtsek5czqasrvmptf46xan2hfyx88jqzpz2pzly3p6qrwd6e6', -'bc1q2az30y4lst2x9wlu77kzzdym8n9qr77n0kqmevs4ahf7dmzw624sck5vm5', -'bc1q2ssdu5v40zmntqc76kaxw0xf67eathhpg59xczh9vpp2qlf3mdrsgr49s8', -'bc1q2vlwakkk247pnppptdv3kgxj23yptykyd3ge9vvlk2w8h98v7pysmmknxv', -'bc1q2wyzh5ex2cr7wcth0zsm7ueycg2rkfw28fy2g6axky6r9su9zcls8qngt2', -'bc1q32phcv5dhwkw59xljxsz2nw8g4he4ssduw7c6d3d6005skfy9gysa6crgk', -'bc1q35fxxu53qsmv77cjt6ucdj5wu4r8rae8eakq5j5v8nzgjtcmnpvqp6g3sf', -'bc1q3aqsr7dsajmslelacclkgmmyhd7t6hkeevpw50f5areathvfmwnq4nwt3y', -'bc1q3cpmjfcfkh8t47q99y5wgwxzvhsw8lywzgvnvnlrlwe6h8xcqw7qjwf646', -'bc1q3cpz06gvfatn0rgamwk7lws7c7qyt4napdr6h7fsj54zg2fy9wtsahl7xt', -'bc1q3eff85qd4rhuu8gvn933fvtzg0ys3y5amchq8wzhhylhqvfh8kxsu4kde7', -'bc1q3l6qerg2gyzxpuk0mmhswkgedrqcqe3eesyhatwauyv980syulfspttjcs', -'bc1q3qw5de93m5ukxra5md872kjyl29arplm8c4vrh9jggsxp88kk2zs74u39g', -'bc1q3uzg46kmqexn04rkhsd74t34225tqv88xp3jglr2hpxxu5ujrwyq9amgrx', -'bc1q424nhx6tpljt65aren3q5hmsx4dwt22g9574lpjnlvtc309gtkhqdtwcss', -'bc1q47vlc3v9vfqh2sr8f47ukaws408wcr95r27t26y9qxgc72yzg9hs58yzek', -'bc1q4agva2hg94cdr7xdeg4e7wekq0vkrqggn4kqruns85e69xtx750s7dc2hy', -'bc1q4ma898qglhvqsjs725emwtmayr0pwj9nmgguqac44styjpjc04ws8hwp7k', -'bc1q4nalse7wwqe6sx3slmkyywetlzn3tdud77jesadx02v885qjs74spqtg5w', -'bc1q4xmshjnx7up2940zld0dls42jnec86drca3ph7cjhtsdlfgq3ycsntpvpw', -'bc1q5anhs0xpsayee84r5yqazljkfn9k92d6dkjfpyq509sfmsdkhfts2vh8l8', -'bc1q5d93mqzlntc95687tq2un302rnfa6vnlnche7pdxzuypyl2cewnsqrzxc2', -'bc1q5nzdfhdjv6dh5r2pgdmtxhvkan8stl2h7zrhth908slszrzu2snqm3ds3q', -'bc1q5qv0gtcfdumqrf9fjhd82uud7whpsam7j9e2dq3k9jy3mj2rm3aq8yj3u9', -'bc1q5rxwzkcl9hux2ltuppg5jl4c4ld52l3hk7kq8g6qqnjluk6kq5xqp5dpzd', -'bc1q68r3tjqwch4q5nyqf03a3n3ugcef75klsmqfa4g72k63npwn59hqj2d6hh', -'bc1q6aw25ef99245cxc4l9m5nvn5fel6tmrze3nfxtstv08yf5jkdvfs5rrajc', -'bc1q6xdt8tmlp5p6exvsmuf62yswm4vnk0rmm950sdhlqgyxluahv3qqquz3uh', -'bc1q6z0cm8gzhxz87e5xdlvkpnldj9zspustx7hedll73zg4n0hqemhsrm4d8l', -'bc1q7awsmqawsstwlxtt48lt6y2hv2qjsju85jgz07yr4hhdcu5df0sqwxc63z', -'bc1q7h0eyvjp58p5wz563p04lhjt2nef9q089mcdchr9jzz74lq5wzusqckmj2', -'bc1q7trechgv0g6kgwdcu3wsxkqn9lrc6edzdgvdvpt9a9rg04l7gtvs26hps3', -'bc1q866pgqwgxvuqvqmkmcfh8n52dtgz3fv3nh5cq3mufqv0ssz8q93qc2eadh', -'bc1q86aapgzcr7078499tlhp4aatylujug9d2rxwccaekmjgv8j6f93qljjhx6', -'bc1q89mxkg0dhr3m6vs2gzr3wqccwpzrmnpsldnjc22ztldhqueawtzsq82ydf', -'bc1q8nr29r27mlkvj0duseshuw5vueywt4640tyrt9jusrk0c9kz2klqg4n66l', -'bc1q8qlz3znvuq0mk62j0dld5hj3a5uf2y06tcuvtz2x3gffs6gxejnsx2hfk7', -'bc1q8sw5c5sx3s0r5tujaq6hahnjq88yvrdhepss7qdfaz5evjux6nls63mnuw', -'bc1q8xamcp8xc3rdh4vqtexgrqfmwlkw0mkruz3gkwaw027erjsrnd0see34cc', -'bc1q8znctxhsh6knhp07z7ufw8zusucef9vxq7rjrhgf0wecxl7aqcrqz06gmu', -'bc1q93hcme2prs7upr9zkdakl85jje3leg8g2qf70kstacjuyzy95xkq7h35ft', -'bc1q99gvfs8e2fsd8zw74wdg4fmfg46n2uf5pjlpt87h93qar044rspsxwck6k', -'bc1q9eammdvuqyhswd3wqp84d56ah0hyuus62smarhsdw3l3rycjgrhqsskvuq', -'bc1q9j8l760q75cep90p9gq6dsj3p9d55ewpwkhcmw8dnzcd7tmfg03sc0vmqh', -'bc1q9xlm3uydvuu3nn8dan0zqyr7e6p3pjh7gxnw7jyv0tujl44dgt6sedtus3', -'bc1qagrn5sn73azr85navkf0ukh336qvktfunejkzauu9adsuvfvpklq6qut3m', -'bc1qasluf865jx838k9nad2r2rnp04w3txqtyu7kapuxrv0m7rv90sxqhvjxuv', -'bc1qc342v9mt8j354pjyaqkweu9nrztcj6cc8udgyezk7dxhjddjcn8q7w9fuc', -'bc1qc46r9xy82z23s6q9lglhzf60fdxxq5y26x34kdx7dx8549mdtu4slym95w', -'bc1qcd7jv45swrxgwlj55gfnlxf3tvsm4ek0yer4xac5a909jtxzrgvqyv5v0p', -'bc1qd7dd9qc0pehqx5a2arlpmlgh30xpfufx9hpf2kfrnpqz2x7jl0xqpmcru6', -'bc1qd8wk5eesxtynkrjx42temma0spfy0955tr5e5lp267aqhalvpjwq79l4yh', -'bc1qdj65qknp4cnvxagp0pqnjl3g7d3s8gzxqzrrlh6gutju0ytdfwmsfeetdt', -'bc1qdt0gu9n7ykyvyhe4v7cmftugsn5qw59rm4tdxn4f8vxs6s694n8qp9u2az', -'bc1qe46f05uenszej6hvzmxjw8fxyskc6utv4cueeaa77jjea87vjh7ql8wgd5', -'bc1qe4we3wxhj4f0wy40ftfxfvawmt4hgkgvtmpnn3lv5wme8yzfrltsckhg9g', -'bc1qer4qvha5nxz09qn7gt7xntvrz2crnaxrd7ju4nmcjm7r9uerc9xqa9gdxd', -'bc1qesmtfxs4n4ws86242uqpztseyh7l5tgswd0zce5nggaky44t9c4sfwczj2', -'bc1qetecvjtaya283z7zk9lftqtv03ajx27ekz6uxjpscpap7crkvgmst355jn', -'bc1qeuz6l0qusf9pd923v8w086j8umn765a7hqvu4su0dfq90ckym47qhvaux3', -'bc1qezmmhc5k7ccnc6q7l8dhkg9phcnehysq2y3ahdzzcweph5ang9xs0egasc', -'bc1qf5p8wp6neu0raugt6t7zhm6vjhy3taf8q7rqwuhgdmdnhvpz2c7s8xtrtx', -'bc1qfcxzh8ag5pv37qywg8wylherg64k7skz0qm0ghc36x7awrd8xszsfxc4k3', -'bc1qfenuya7nskcjlyxpg0gttrjap9e5gtncxga0vvl8rekyeup55n0slzlhr8', -'bc1qfeuww8le80ae7qat3kpzspsh7pa8na3qx9fuc4qpdt3w5q3dkavsc02wk4', -'bc1qfn70w8peuvvywupd8u667g832necv3w6sqellzvd7aaj8l52nhhsfzs6a4', -'bc1qfpwewuyg8erj2cejamms0682v7ncgdgufdq8efa0maef3uzunkgsvdwyzm', -'bc1qfugah0e9fw9ze34dpqf22yxqxnxh49wrcq9d3kuqc9dydfhn4pjsjqfpky', -'bc1qg0amsvtlglecc6x46rzjprjh7wscjzlgqu6n52zw9nz0cck2r5sqwew946', -'bc1qg54vzuplejd6ymxlma6q7rfyc9zqqes8wvz4xs09mhpclak9z73sf3x3km', -'bc1qgs30czhkxhxn5qsunlzac0xeznyaxg267p5t8gjupzg7u97vz4zqyuf60l', -'bc1qgsgj3dh8dztq05v9dzethjcpjqtptm5tsrruprz4w7awzpfrku8qjjegyc', -'bc1qgxww03juwr8vfp28tzpmyyku3j6hxrgpl0v6natkk2ucwu4weweskcqvnl', -'bc1qh4r87gzpcx3lz7faz349yvp8yr6zyr2706m2xzsuwcwlptkqsj6svkaqtf', -'bc1qhagykgzhhh7yt5knsypklpqsgdelrvw5vz73erujapcgh3x5wxrq8c0y9x', -'bc1qhgfkccy09hr7hlky0jeyz89afan8qh66wa26t4se4mlqda6298hqrtk5zr', -'bc1qhkw43w4cvzec3836hqrdmxksm20l35yk7gnvysqprd6gareztfsq4uplfs', -'bc1qhm46vtwep0awkdphurmc2ku3lfp8l7z9f6wn9va42lc3z24zd2fsvnvzk3', -'bc1qhpnmnswf8ls2q97vg4qzlr2a6c2xpr46zp59e7q9uh5j59ask2ysld0euq', -'bc1qj2dz58v8etgq3aud24yrgffk73d9cue80kfswl58d5w4vvhdfsyskxtll5', -'bc1qj38tl824hkgl7qluy32lklp6qfd9d9zqa9qlyeh28khfh9grxwastu3xnw', -'bc1qj8vt7h7ufrgqlhhcu22vl3jrvx3kluml57kha352k9fex23jphvsuwme6r', -'bc1qjgua88vymvkctq9t4mcd4q4mlqnr3r07lylp90f7epc9p6qcv6asteyjec', -'bc1qjpgs63vqgfkalm8janwmelw4mr4wg50axnmx5ueh4ru2xnl3lg7q80yl32', -'bc1qk8plwr04uu6mvpcf3wtfmg579ztqn59q7yfx39drl9r97q4wcx2q43rvw3', -'bc1qk9fhnvv7a0nxzxxj503v7mfy3uwdugymj09ugkrda5895cfxa5vsnzp8l5', -'bc1qkd53jhtmhwv74x2c8hnnfzspatcjdzk0h3f2czqzrav0yxpd5y4szkslrs', -'bc1qkn3s4hzjthfmt68sk30m69knjauwphsha2paqzexjjmlfc6h7f3sggfn52', -'bc1qksptar8mpay2mfwzwep3aqxevnc8jj8d4rd82v3v0hm5p3y93w2q5eufa8', -'bc1ql26wgacxjhuefzcph2wpsyftqzd07kzkczv60d85hj7280qkrz2qlgrhf7', -'bc1ql33nnw3ngcf343jtmzpe8ps8809nqe0530rv6neu7cefkz6dtcfqn3wzav', -'bc1qlg2gcz8hzfdt49jgs0438c7ahg4967nfkflzj3m0r5dz3xz7njrqpxxj2j', -'bc1qlnz5vejmvv6sdy9k3c7a07nlf6c053g0ren0m8kmmsrx677nyllsg6qr2m', -'bc1qltg30ayn5wexka07ta2x5dnfjf20rqnemf4sfnsase082yfqetfq0s20hv', -'bc1qmfjm5hlgjfw3tc6cz77nzjcc5xg5mjhrlm6kqewczapae2yhucrs5c0qvf', -'bc1qmfwcwfntr2adas7yz5l3wn6pnm8rj55l8fk5vgny34wld6d0vfcsg48tta', -'bc1qmfwq5cjm55m0kcfemjyv6rj8nfunslfjtuhyqawksw892dhvu6wscem2t5', -'bc1qmmdfeczme4q99ccpmgfx3zxwwwff9nnjhdux47hucwttrjdpqj9s2x8rds', -'bc1qmur9p99tzxtrq0232tl6nssyejrmwet3m265xg0cgl7uh2qxsy7q0m8fvu', -'bc1qn3r3kqf90txgcsdxzu2s0p5avp79axlf98lzrwlmpnmxc3ak0vwsuxrepa', -'bc1qn8w83eglpp7xdtgyjaysgrve5cjjr2yfhsq2x5xyn6cmvup0uwlsq2t5xl', -'bc1qnpnpcn4gwssvkjpe27zzfex2t997l7garmc2s8fenmk0fpydek2s6zp9yz', -'bc1qp24kgu3r5n3q6k03230yj6dzr4styppjlvtr3ptdsd7sxql8pcgqwall05', -'bc1qp27x9j8damzuxc0x7cqkcaf39q4825aafmx3g6mlvh2wd5tzr8kscsjplw', -'bc1qp6cmqa7hgdean0z8jl7uf20rzf7wgvstmjlxekft3l2vn22zwl2qhunr3h', -'bc1qparrejjdyc8hcd7hgljlx53wy7ncrjkaz670w3ef0ade369y22eqkujzy0', -'bc1qpdthtpfcmju642wq4eqxl4uz5hfgtztvtv7u6wrdepnkdsugueusujpg76', -'bc1qpp5wu443kdfur2vhzwms8d46gq8c2vgu692sgyn79z56gkq4mkvs07gjkd', -'bc1qpvvt2md0t7435mc8dmlgd5euyc0636vlw8ew25e8pf83uc68km5qpvqpfx', -'bc1qpwtgr4rld3wr39r762ngvuk8qgvgkrrxra4jdnmn06z4nfgh4vtsluyd3t', -'bc1qq3p9mqvegpadextyqzxy46ukf5yxc7ej50ksq3w63f895q0t8rzsfe5jym', -'bc1qqces3upduq6e0c2w0k6mr9n4tkgvzkggteuatqc4eyxawwkuxzpsfgdxzh', -'bc1qqjmfwnxrjx0khaxf8qa6ccnz7s94k9wa8lelpdy2fn6jf9ffks8s5r4frd', -'bc1qqlm6edz9azp0d6y4mjc8j8an4q8du2jajgwj65mmz6nkk53yannqvtnvnn', -'bc1qqlus6fyt05kewddukpge8u0lszp4ffn49mqnr3pvrh2whptf2fhsy6ynmn', -'bc1qqvf7qq7wvx6pkp5aqvzdxs0rgqkjgqe7ev63hnppxq05t6v3w5ysskzjs5', -'bc1qr20qujcyr87y3uk2fgkq93u0jtzl6wa4el90we4txgcwgx6avxzsuj0wcx', -'bc1qr6cvgewvlts5f9wa8u3cpnlmth0mzn0x96ap34hknpaayuyknrlssqfq3n', -'bc1qrm7nze8cqyazdlhmw8ffeusxucqtvyw3pvtple0047tdkupdnmustkla3w', -'bc1qrsayv4jq9uf6rpmwsxan3yqxuqtyelwt7k8298ejl8h9tkrunthspnlm6y', -'bc1qs0q2svqpeaka6f8jakx74j4rydxdmxq4wz7xfy45m6t8xfxzy0zsckrym5', -'bc1qs48aaups6tzwcs372yqhakcjakfgf6w6aguj0w7gex75vrnjegmsp5hx8n', -'bc1qsgthnvghgs9wl87kzhkx9xda4xyu35cxfteupjnvxv3zuvgtdyzs9a23te', -'bc1qsln2s8xu7sv84wj5sv2pjnfpev8lkcqpzmzukmygcll26vf0kwfs6awzkj', -'bc1qsp7twu469a8p3enevzwdnjhrcmtmc7ljydqxxp4p69u4ggj9wazqa9gsgw', -'bc1qsrms3khzhupjxph0u2sy6sz8c9q4g6nqm3dy53nrlagw3lc5zmsstg8pft', -'bc1qsuzvly8z6kr080at2twdlfs8j87gu08kmwlfstafm2lajdvfclyqtvq00a', -'bc1qsva32zdzx7cd9996qdlxkpl0dnyk4s44myx53zpetf4u7rfg89fswjzza5', -'bc1qsw4hj3dvqcvtntvsflx8474f52nt6zer5k9pyem6n6g27p8nc4xsrj5fxc', -'bc1qszmwz85wktn6k7tg953pugtedmssguaavl8qukv77s5u0g5mx3tsmw6pg4', -'bc1qt3mw55ccejx97tyjdl9dhe60wvextxddg8udxz9n8q8efwhr37wseag63j', -'bc1qt4ck5563ra7r3xjqlfqm7au407q2dmc0p6wvgyzy239nyyn4vsesfwwsa2', -'bc1qteyfers4wvfhp6apw4s720tzvp9xafkvvfh7k0sxmu8vrxvt2m5snw45v8', -'bc1qu4g30hr7lz3qd9jn68x4f2ycl3s533jdtv96g5n96d40kac5l5tshhkvq5', -'bc1qu5k2h4y9cynds4j3t5d94xg78zpzhx3elk6w93e28xmxrnn37wuql9xf4t', -'bc1quljnxvuryumd7c44u7f8dwflas5aghecg8ln029v2s7ffezun86qn0wyng', -'bc1quryt5u9j5rec96c4h6xxatn74nqcen244q3dtgwtpjkma36vvrmq9mjecg', -'bc1quxy0mlwssdmzsxgk2ct42p09ef7mc9qwmpdjuzy9f3h3ye2k6jzsvmmrsh', -'bc1quywrhxx6t7mkqshcll3q99qrqlal73l668wldgrcxpa4yvuj2x3qrhsg9m', -'bc1quzwyq3wewr74vvgwa6nqfj6n6rsc2tsh046glq0n76x9alcpgmzsf24s6x', -'bc1qv0u3a7jdaygq680cu52puk4xrrr4ckpjqqgg88x66cmfnrfj5c4sre60e9', -'bc1qv837fuujjlu50z3l6y48vxkv4vd09vve58t92welmxy9lnu5l2usp6hd0j', -'bc1qva8lqtdcemj9swc6trk4je45xzckqhs3fthst2hy0k3plywfeq5s639wn0', -'bc1qvfmnrg59p8a3csj032uyzl3mdtv5y46g3mx33krz5kweyvq78f5swvdmna', -'bc1qvqaqr0jyxf3nphux7gla78dqa9psfpyy0v8med9t63f0x6n2k40s7knecs', -'bc1qvtckv82yw4efeu9ez8y37rne5ghzxeqjl3cqnsyxf4gm3zhuhc8swt5u3h', -'bc1qwdgyle9p2gcvyn22sg2tg6jaqkxewjz5xfj229p989dcteu42adqnau2lw', -'bc1qwfeq7rehmzm5434vaa485s98788cmyyrac2w65nulvucsg7cueesly7x05', -'bc1qwfydpavg240d4j87nrg0ayqhfzwrt9revzw7a9dpyxujnlpu2xus07f6ud', -'bc1qwvrrxxqhc6l9zd8rwj39sl8n39v69tju9sfc59dqxl3fjx8jnfqswzs93f', -'bc1qwwkwppejx79uszdgfrpaaqc24wepvjy729xhx2zyd3qyf3ftfqrs672m9d', -'bc1qx8xlxd6qnmqprgjs6yr4nd870tt4d8yuupwq4qhl3hh24ulpmk4qem46px', -'bc1qxfkxl66ee59xpxr30tcexvh9zgtvf7gwtyauj29n6txj7c7a9e9quhcaaz', -'bc1qxlj7ls9zptgj779w0gzfvt8chpl29xdcv5qjqdw7g462uf0c90wsvkw74y', -'bc1qxnxp0qdzx07jw3tskcp79xzs7p6p2wpwx4sn7myrx8vgj42f4prsrlcknw', -'bc1qxqnj2gdznm37yhdw679nx6rqs44hkd2lddj2gn4uyaa5htmjvmzsyjcu7d', -'bc1qxtf7mx5scgetaaz30w6ngndq8xctegjacvphz2tgky5r9et0q5uqwyks8t', -'bc1qxu9s6qy6hld9uvd75em9t550q7ppezsmkheldsyny0pzj9yd7e6sqg3qv6', -'bc1qy30syv0sqafmkt2m4h6lf9tjeddurh9cypa9p8wras2hfjf4y4uqzdz5sk', -'bc1qy6tfy7k9cjp40m2lcq2s8wrsn88jdn3ffj5ph7uvwxuamfntaylqk38dwp', -'bc1qyc4v5dtapyta9mcu5n5t9va72rzd9g75z83qxxm90ne4vzhgleeqf9lcfl', -'bc1qyd5989kz0jgayxelnz7wlnnk5gyn36v7cecjrkgvph4260aew2rsqzx3ua', -'bc1qyujyd6q7dtnh76wchgavwgxpklkwm73vqllududlx2uunx28zdhsxnvd47', -'bc1qyvpmf6uv8xgxrvcwc5w630d4vg2s9ztpd64fe0e9ylxtuy34e4lqnmv3sq', -'bc1qzck7505r8ahwq9g4xuwr60lpflxv5h75y0jntgasd0t9g7psvmqsr902f8', -'bc1qzgw25sgrn45909quqlydd9729ksj32mfcvwzl44ekf2kkgctz09qvr779j', -'bc1qzha6dcp9mq8ne7s3cxgp052qzux3jg25fp7cxpshrz0a0005h3gs30vqpf', -'bc1qzk7gnzhyqcl9x7f52lckdhlznv94k87gpm3fsafvn487euaymmasz95cwa', -'bc1qztewvcfe424fxat7s2uautmy5ctnsnurul474e2emexfnlj6upsqem0g8d', - -]; +const owners = bitcoinAddressBook.wbtc async function tvl(api){ if(api.timestamp > Date.now()/1e3 - 3600){ @@ -355,8 +15,6 @@ async function tvl(api){ } module.exports = { - bitcoin: { - tvl, - }, + bitcoin: { tvl }, methodology: `TVL for WBTC consists of the BTC deposits in custody that were used to mint WBTC`, }; diff --git a/projects/woo-cex/index.js b/projects/woo-cex/index.js index d905a62a60..48edcacf0e 100644 --- a/projects/woo-cex/index.js +++ b/projects/woo-cex/index.js @@ -1,4 +1,5 @@ const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const owners = [ '0x0d83f81bc9f1e8252f87a4109bbf0d90171c81df', @@ -8,12 +9,7 @@ const owners = [ ] const config = { - bitcoin: { - owners: [ - 'bc1qh78w4qq9v2dqntjtxne97kp9u2485jdqrfsghh', - 'bc1qm4hycszv0v0qel3swxqyp57nkpnnrda4rc55lm' - ], - }, + bitcoin: { owners: bitcoinAddressBook.wooCEX }, ethereum: { owners }, fantom: { owners }, avax: { owners }, diff --git a/projects/xlink-btc-lst/index.js b/projects/xlink-btc-lst/index.js index 2e08d588ed..2092d3811a 100644 --- a/projects/xlink-btc-lst/index.js +++ b/projects/xlink-btc-lst/index.js @@ -1,13 +1,9 @@ const sdk = require("@defillama/sdk"); const { sumTokensExport } = require("../helper/sumTokens"); - -const owners = [ - "bc1p78mvfa550t7acg6wm9cl9543zf68ulhqkxex5pvhv8wnw4qpl3gqmpjy2s" -]; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Staking tokens via Babylon counts as TVL", doublecounted:true, - bitcoin: { - tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), - }} \ No newline at end of file + bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: bitcoinAddressBook.xlinkLST })]) } +} \ No newline at end of file diff --git a/projects/xlink/index.js b/projects/xlink/index.js index 3be86a15cc..e309a6e272 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -1,30 +1,11 @@ const ADDRESSES = require("../helper/coreAssets.json"); const sdk = require("@defillama/sdk"); const { sumTokensExport } = require("../helper/sumTokens"); - -const owners = [ - "bc1pylrcm2ym9spaszyrwzhhzc2qf8c3xq65jgmd8udqtd5q73a2fulsztxqyy", - "bc1qh604n2zey83dnlwt4p0m8j4rvetyersm0p6fts", - "31wQsi1uV8h7mL3QvBXQ3gzkH9zXNTp5cF", - "bc1q9hs56nskqsxmgend4w0823lmef33sux6p8rzlp", - "32jbimS6dwSEebMb5RyjGxcmRoZEC5rFrS", - "bc1qlhkfxlzzzcc25z95v7c0v7svlp5exegxn0tf58", - "3MJ8mbu4sNseNeCprG85emwgG9G9SCort7", - "bc1qeph95q50cq6y66elk3zzp48s9eg66g47cptpft", - "bc1qfcwjrdjk3agmg50n4c7t4ew2kjqqxc09qgvu7d", - "1882c4wfo2CzNo4Y4LCqxKGQvz7BsE7nqJ", - "1KGnLjKyqiGSdTNH9s6okFk2t5J7R6CdWt", - "bc1qt2kjf5guf4dvv4mvnswyk8ksaeuh5xyhc5gz64", - "19GTEWTnVgenpDWSdQEAT9LJqMFQ7Yogsu", - "bc1qxmwuugmcnn5k3hz22cxephy2vkevvt2knsd6u4", - "1617Cf4qmjqVyiN5weQRo8sZvQvyDjshKP", -]; +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Staking tokens via AlexLab counts as TVL", - bitcoin: { - tvl: sdk.util.sumChainTvls([sumTokensExport({ owners })]), - }, + bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: bitcoinAddressBook.xlink })]) }, ethereum: { tvl: sumTokensExport({ owners: [ diff --git a/projects/xrgb/index.js b/projects/xrgb/index.js index d1070836a2..91c3e3046d 100644 --- a/projects/xrgb/index.js +++ b/projects/xrgb/index.js @@ -1,9 +1,7 @@ const { sumTokensExport } = require("../helper/chain/brc20"); -const owner = 'bc1ptm05s4f6f8j78zhx62lzx0dep07f2597nlgeltmm4sjn5stdu6gq4sxg2w' +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "XRGB as bridge,Unlock ERC404 on all chains", - bitcoin: { - tvl: sumTokensExport({ owner, blacklistedTokens: ['XRGB'] }), - } + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.xrgb, blacklistedTokens: ['XRGB'] }) } }; \ No newline at end of file From 8b2d95a353ebd8e50e76dcb88333b5d2d2657aef Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:10:03 +0100 Subject: [PATCH 0942/1768] update script --- package.json | 2 +- utils/scripts/checkBTCDupsv2.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 utils/scripts/checkBTCDupsv2.js diff --git a/package.json b/package.json index 9889a037ec..0ad5df5262 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "entities": "cd utils;npm i; cd ..; node utils/testInteractive entities", "useTokenLabels": "node utils/scripts/useTokenLabels.js", "biggest-files": "find ./projects -name '*.js' -not -path './projects/helper/*' -not -path './projects/curve/*' -not -path './projects/sigmao/*' -exec du -sh {} \\; | sort -rh | head -n 100", - "check-bitcoin-duplicates": "node utils/scripts/checkBTCDups.js", + "check-bitcoin-duplicates": "node utils/scripts/checkBTCDupsv2.js", "postinstall": "echo 'run \"npm update @defillama/sdk\" if you want lastest sdk changes' " }, "author": "", diff --git a/utils/scripts/checkBTCDupsv2.js b/utils/scripts/checkBTCDupsv2.js new file mode 100644 index 0000000000..2dcec07b6a --- /dev/null +++ b/utils/scripts/checkBTCDupsv2.js @@ -0,0 +1,30 @@ +const addressBook = require('../../projects/helper/bitcoin-book/index'); + +console.log('project count: ', Object.keys(addressBook).length); +const addressProjectMap = {} + +async function run() { + + await Promise.all(Object.keys(addressBook).map(async project => { + let addresses = addressBook[project]; + if (!Array.isArray(addresses)) addresses = await addresses() + for (let address of addresses) { + if (addressProjectMap[address]) { + addressProjectMap[address].push(project); + } else { + addressProjectMap[address] = [project]; + } + } + })) + + const duplicates = {} + for (const [address, projects] of Object.entries(addressProjectMap)) { + if (projects.length > 1) { + duplicates[address] = projects.join(', '); + } + } + + console.table(Object.entries(duplicates)); +} + +run().catch(console.error).then(() => process.exit(0)); \ No newline at end of file From cc644f280dc53842a420ef8f02c8a46e5ee9e869 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 6 Nov 2024 12:17:02 +0000 Subject: [PATCH 0943/1768] add assetchain swap (#12186) --- projects/assetchain-swap/index.js | 3 +++ projects/helper/chains.json | 1 + 2 files changed, 4 insertions(+) create mode 100644 projects/assetchain-swap/index.js diff --git a/projects/assetchain-swap/index.js b/projects/assetchain-swap/index.js new file mode 100644 index 0000000000..ec189ab1a5 --- /dev/null +++ b/projects/assetchain-swap/index.js @@ -0,0 +1,3 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ assetchain: { factory: '0xa9d53862D01190e78dDAf924a8F497b4F8bb5163', fromBlock: 17598, } }) \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index df9c3b56d5..b18ca15745 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -11,6 +11,7 @@ "aptos", "arbitrum", "arbitrum_nova", + "assetchain", "ancient8", "archway", "area", From b68f166f30a6e5754a6255c6a861accbac1933dc Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:50:41 +0100 Subject: [PATCH 0944/1768] track marginal --- projects/marginal/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/marginal/index.js diff --git a/projects/marginal/index.js b/projects/marginal/index.js new file mode 100644 index 0000000000..8516807bad --- /dev/null +++ b/projects/marginal/index.js @@ -0,0 +1,17 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +const config = { + base: { factory: '0x407fA8029852A8386a907287018CEAFd7242C621', fromBlock: 17016522 }, + ethereum: { factory: '0x95D95C41436C15b50217Bf1C0f810536AD181C13', fromBlock: 20297876 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event PoolCreated (address indexed token0, address indexed token1, uint24 maintenance, address indexed oracle, address pool)', fromBlock, }) + const ownerTokens = logs.map(log => [[log.token0, log.token1], log.pool]) + return api.sumTokens({ ownerTokens }) + } + } +}) \ No newline at end of file From a44b28f6739fee846a9572c073b3cab84326de40 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 7 Nov 2024 11:33:33 +0000 Subject: [PATCH 0945/1768] add doge to binance cex (#12196) --- projects/binance/config.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/projects/binance/config.js b/projects/binance/config.js index a53e1c9594..f58740a565 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -175,7 +175,6 @@ const assetList = [ ['DOGE', 'BEP20', '0xd3a22590f8243f8e83ac230d1842c9af0404c4a1'], ['DOGE', 'BEP20', '0xe2fc31f816a9b94326492132018c3aecc4a93ae1'], ['DOGE', 'BEP20', '0xf977814e90da44bfa03b6295a0616a897441acec'], - /* ['DOGE', 'DOGE', 'D73RQLGWW9TBT2AKspEP24wLiXFrXvnTqX'], ['DOGE', 'DOGE', 'D7BrtudMAdwz2U7vSGumVDuxZsZNibJuzw'], ['DOGE', 'DOGE', 'D7D2f2WuEkwhTWqBkisZ5sM3JagaBcNWBs'], @@ -213,7 +212,6 @@ const assetList = [ ['DOGE', 'DOGE', 'DTSop4ycWkpmDqpncVZ3jwKp3z7B4kW4T3'], ['DOGE', 'DOGE', 'DTbG3RJRejnM99g8MSnhSbJxJVW8X7YXy9'], ['DOGE', 'DOGE', 'DU8gPC5mh4KxWJARQRxoESFark2jAguBr5'], - */ ['DOT', 'BEP2', 'bnb1fnd0k5l4p3ck2j9x9dp36chk059w977pszdgdz'], ['DOT', 'BEP2', 'bnb1u2agwjat20494fmc6jnuau0ls937cfjn4pjwtn'], ['DOT', 'BEP20', '0x0e4158c85ff724526233c1aeb4ff6f0c46827fbe'], @@ -715,9 +713,7 @@ module.exports = { near: { owners: getOwners('NEAR') }, - /* doge: { owners: getOwners('DOGE') }, - */ } \ No newline at end of file From ead9bb2392e81974466ff328c73bf51ff7135bec Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:37:16 +0100 Subject: [PATCH 0946/1768] workaround for evmos gas limit #12197 --- projects/helper/env.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/helper/env.js b/projects/helper/env.js index 81f9102f84..c95eb7eaba 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -4,6 +4,7 @@ const BOOL_KEYS = [ ] const DEFAULTS = { + EVMOS_MULTICALL_CHUNK_SIZE: "3", // evmos reduced gas limit, this is a workaround to make multicall work STARKNET_RPC: 'https://starknet-mainnet.public.blastapi.io', COVALENT_KEY: 'ckey_72cd3b74b4a048c9bc671f7c5a6', SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', From 44e579cea638e5cbb63e013e55934b0e413ff749 Mon Sep 17 00:00:00 2001 From: "magiodev.eth" <31893902+magiodev@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:43:38 +0100 Subject: [PATCH 0947/1768] =?UTF-8?q?add=20quasar=20ethereum=20tvl=20from?= =?UTF-8?q?=20mellow=20using=20chainId=201=20to=20filter=20out=20api?= =?UTF-8?q?=E2=80=A6=20(#12198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/quasar/index.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/projects/quasar/index.js b/projects/quasar/index.js index 2de7391a09..9846b1be33 100644 --- a/projects/quasar/index.js +++ b/projects/quasar/index.js @@ -1,7 +1,7 @@ const { queryContract } = require('../helper/chain/cosmos') const { getConfig } = require('../helper/cache') -async function tvl(api) { +async function tvlOsmosis(api) { const data = await getConfig('quasar-vaults', 'https://api.quasar.fi/vaults') const vaults = data.filter(i => i.chainId === 'osmosis-1').map(i => i.address) for (const vault of vaults) { @@ -11,10 +11,22 @@ async function tvl(api) { return api.getBalances() } +async function tvlEthereum(api) { + const data = await getConfig('quasar-vaults', 'https://api.quasar.fi/vaults') + const vaults = data.filter(i => i.chainId === 1).map(i => i.address) + const tvlRes = await api.multiCall({ abi: 'function underlyingTvl() view returns (address[] tokens, uint256[] bals)', calls: vaults }) + tvlRes.forEach(({ tokens, bals }) => { + api.add(tokens, bals) + }) +} + module.exports = { timetravel: false, methodology: 'Total TVL on vaults', osmosis: { - tvl, + tvl: tvlOsmosis, }, -} \ No newline at end of file + ethereum: { + tvl: tvlEthereum + } +} From f798135965aa88dbe8c45dada4c17cc4d34b7c95 Mon Sep 17 00:00:00 2001 From: miler012 <124125686+miler012@users.noreply.github.com> Date: Thu, 7 Nov 2024 21:04:04 +0800 Subject: [PATCH 0948/1768] satori add new chain and LSD assets (#12195) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/satori/index.js | 45 +++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/projects/satori/index.js b/projects/satori/index.js index 53f0952302..190b1e3c74 100644 --- a/projects/satori/index.js +++ b/projects/satori/index.js @@ -2,21 +2,21 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { sumTokensExport } = require("../helper/unwrapLPs"); const { sumTokensExport: sumTokensExportOfTon } = require("../helper/chain/ton"); -const USDT_TOKEN_CONTRACT = ADDRESSES.astarzk.USDT; -const EZETH_BASE = ADDRESSES.blast.ezETH; -const EZETH_LINEA = ADDRESSES.blast.ezETH; -const ZK = ADDRESSES.era.ZK; -const WALLET_ADDR = [ - "0x62e724cB4d6C6C7317e2FADe4A03001Fe7856940", - "0xA59a2365D555b24491B19A5093D3c99b119c2aBb", -]; +const ethereum_LBTC = "0x8236a87084f8B84306f72007F36F2618A5634494"; +const ethereum_PumpBTC = "0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e"; +const base_PumpBTC = "0x23dA5F2d509cb43A59d43C108a43eDf34510eff1"; +const stBTC = "0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3"; + module.exports = { methodology: "Counts Satori smartcontract balance as TVL..", polygon_zkevm: { tvl: sumTokensExport({ - owners: WALLET_ADDR, - tokens: [USDT_TOKEN_CONTRACT], + owners: [ + "0x62e724cB4d6C6C7317e2FADe4A03001Fe7856940", + "0xA59a2365D555b24491B19A5093D3c99b119c2aBb", + ], + tokens: [ADDRESSES.astarzk.USDT], }), }, era: { @@ -25,7 +25,7 @@ module.exports = { "0x0842b33529516abe86CA8EA771aC4c84FDd0eeE0", "0x48756b37Fd643bB40F669804730024F02900C476", ], - tokens: [ADDRESSES.era.USDC, ZK], + tokens: [ADDRESSES.era.USDC, ADDRESSES.era.ZK], }), }, linea: { @@ -34,7 +34,7 @@ module.exports = { "0xfb371E70eEB32f4054F40514924e77213ca18425", "0xF96116e124eB3F62Ddc6a9cfbdc58d7F8A37c50A", ], - tokens: [ADDRESSES.linea.USDC, EZETH_LINEA], + tokens: [ADDRESSES.linea.USDC, ADDRESSES.blast.ezETH], }), }, scroll: { @@ -52,7 +52,7 @@ module.exports = { "0x668a9711b8d04362876dc5b6177ed362084d5aed", "0x5f075a6a11B2e25DF664Ce7419c274943017B595", ], - tokens: [ADDRESSES.base.USDC, EZETH_BASE], + tokens: [ADDRESSES.base.USDC, ADDRESSES.blast.ezETH,base_PumpBTC], }), }, xlayer: { @@ -80,6 +80,23 @@ module.exports = { ], tokens: [ADDRESSES.ton.USDT], }), + }, + bsc:{ + tvl: sumTokensExport({ + owners: [ + "0x3b6F3f7F0e3e8cCa7bC11dFA4a8567A6479Ece54", + "0xD2F244164cd09e5cBb6360c4a17aAF976a34562a" + ], + tokens: [ADDRESSES.bsc.USDC,stBTC], + }), + }, + ethereum:{ + tvl: sumTokensExport({ + owners: [ + "0x0857f8a6e41e1c71f4065daebfe7ddb825cbffde", + "0xA394080628F175472Fee9eB316BD104fAB63FE40" + ], + tokens: [ADDRESSES.ethereum.USDC,ethereum_LBTC,stBTC,ethereum_PumpBTC], + }), } - }; From 058e95d01371d1168a37b9fd3141931b97d72404 Mon Sep 17 00:00:00 2001 From: void <162591301+void-restack@users.noreply.github.com> Date: Thu, 7 Nov 2024 18:36:32 +0530 Subject: [PATCH 0949/1768] Update: Add truAPT pool support for Joule Finance Adapter (#12193) --- projects/joule/index.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/projects/joule/index.js b/projects/joule/index.js index 222310b285..bdbcff59f9 100644 --- a/projects/joule/index.js +++ b/projects/joule/index.js @@ -2,13 +2,21 @@ const { getResource } = require("../helper/chain/aptos") const CONTRACT_ADDRESS = "0x2fe576faa841347a9b1b32c869685deb75a15e3f62dfe37cbd6d52cc403a16f6" +function replaceAtWith0x(str) { + if (str.startsWith('@')) { + return '0x' + str.slice(1); + } else { + return str; + } +} + async function getPoolsData() { const res = await getResource("0x7f83b020b8ab60dbdc4208029fa6aa0804bf5a71eeaca63382d24622b9e6f647", `${CONTRACT_ADDRESS}::pool::PoolConfigsMap`) const poolConfigsMap = res.pool_configs_map.data; - + return poolConfigsMap.map(item => ({ - coin: item.key, + coin: replaceAtWith0x(item.key), total_lend: item.value.total_lend, total_borrow: item.value.total_borrow })); @@ -21,15 +29,15 @@ module.exports = { aptos: { tvl: async (api) => { const marketsData = await getPoolsData() - marketsData.forEach(({coin, total_lend}) => { + marketsData.forEach(({ coin, total_lend }) => { api.add(coin, total_lend) }) }, borrowed: async (api) => { const marketsData = await getPoolsData() - marketsData.forEach(({coin, total_borrow}) => { + marketsData.forEach(({ coin, total_borrow }) => { api.add(coin, total_borrow) - }) + }) }, } }; From 7e060e9fc41c933b707546140676b1b79ef2610b Mon Sep 17 00:00:00 2001 From: Tommy Kang Date: Thu, 7 Nov 2024 22:08:32 +0900 Subject: [PATCH 0950/1768] Fragmetric treasury updates (#12191) --- projects/fragmetric/index.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/projects/fragmetric/index.js b/projects/fragmetric/index.js index 3f0a6532d2..78804daa9e 100644 --- a/projects/fragmetric/index.js +++ b/projects/fragmetric/index.js @@ -3,15 +3,15 @@ const { sumTokens2 } = require("../helper/solana"); async function tvl() { return sumTokens2({ tokenAccounts: [ - "EVUJsmfM3cqh48eTrwmLe552F3pzmhRMJGVpmweg2fBt", - "7HPaAWDuzsSEm4JZnRudJF11pNanPNfP5mqHUCkXh5kD", - "BaoCDUcKbYSaxA5scygSeMNZV1GPsNeKqLwg92f9pi5v", - "96h95Nkfy5SPu8ddb3V4b44CTNaZoWsKCCUXY8MKzn6Y", - "DYyfr8fTAchSMZPm6nUu6MHARYVuCuvzwBQrroSW6mQm", - "HakiuyCy3STaWaPtPUFyyHwEjzrRDGaLfqwV8kV6j1pn", + "4b3xtGBwmP9FQyQ85HDmyEtQrLdoVzz6NBwBjaRBzJuS", + "BXUyJdESgoyssvATKa3omD7zHtdeztpWnG13mDUQ6fcM", + "B2vjfDaLsaJ32ESoFsVf7NPS2hd5f4QisiPLiXBrS1BK", + "HSKvv9UFCn4c6Jq3j8iiJfFgXFjRE6dr6QhWX2KD8gGU", + "3KdpoeWuwaXLuukf56p8e1FtDKjY8pCmtZdmZejUctwP", + "9grKYUmguSLVC9RHW1xKcLpiAphJrmcDkTVTCg9ebpFz", ], solOwners: [ - "3TK9fNePM4qdKC4dwvDe8Bamv14prDqdVfuANxPeiryb", + "3H22A3T3CMyoGzAURZ4szV5Hmt64Dooo5g9Ns8h1kYy7", ] }) } From fe75ba80124161534a0f3229026058b5c0c0a7b9 Mon Sep 17 00:00:00 2001 From: yongjun925 Date: Thu, 7 Nov 2024 21:23:59 +0800 Subject: [PATCH 0951/1768] Add unagiswap project (#12190) --- projects/unagiswap/index.js | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 projects/unagiswap/index.js diff --git a/projects/unagiswap/index.js b/projects/unagiswap/index.js new file mode 100644 index 0000000000..3573de6dbe --- /dev/null +++ b/projects/unagiswap/index.js @@ -0,0 +1,38 @@ +const { getLogs } = require('../helper/cache/getLogs') +const ADDRESSES = require('../helper/coreAssets.json') + +const config = { + taiko: { dvmFactory: '0x6694eebf40924e04c952EA8F1626d19E7a656Bb7', fromBlock: 452910, dspFactory: '0xd0de7cA3298fff085E2cb82F8a861a0254256BA0', gspFactory: '0x2235bB894b7600F1a370fc595Ee5477999A30441', dppFactory: '0x297A4885a7da4AaeF340FABEd119e7a6E3f2BCe8' }, + } + +Object.keys(config).forEach(chain => { + const { dvmFactory, fromBlock, dspFactory, gspFactory, dppFactory, blacklistedTokens, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const ownerTokens = [] + const funcs = []; + const builder = (factorys, event) => { + if (Array.isArray(factorys)) { + factorys.forEach(factory => funcs.push(addLogs(factory, event))); + } else { + funcs.push(addLogs(factorys, event)); + } + } + builder(dvmFactory, 'event NewDVM (address baseToken, address quoteToken, address creator, address pool)'); + builder(dspFactory, 'event NewDSP(address baseToken, address quoteToken, address creator, address pool)'); + builder(gspFactory, 'event NewGSP(address baseToken, address quoteToken, address creator, address pool)'); + builder(dppFactory, 'event NewDPP (address baseToken, address quoteToken, address creator, address pool)'); + + await Promise.all(funcs) + + return api.sumTokens({ ownerTokens, blacklistedTokens, permitFailure: true, }) + + async function addLogs(target, eventAbi) { + if (!target) return; + const convert = i => [[i.baseToken, i.quoteToken], i.pool] + let logs = await getLogs({ api, target, eventAbi, onlyArgs: true, fromBlock, }); + ownerTokens.push(...logs.map(convert)) + } + } + } +}) \ No newline at end of file From f4351ed649bf689fbc1c61d1badc48b5e763eeb2 Mon Sep 17 00:00:00 2001 From: Lawson Graham <45542987+LawsonGraham@users.noreply.github.com> Date: Thu, 7 Nov 2024 05:24:22 -0800 Subject: [PATCH 0952/1768] echelon support FA TVL tracking (#12192) --- projects/echelon/index.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/projects/echelon/index.js b/projects/echelon/index.js index ff5ede0918..9d8b9c12aa 100644 --- a/projects/echelon/index.js +++ b/projects/echelon/index.js @@ -1,10 +1,11 @@ const sdk = require("@defillama/sdk"); const { getResource, } = require("../helper/chain/aptos"); const { transformBalances } = require("../helper/portedTokens"); +const { get } = require("../helper/http"); const mainLendingContract = "0xc6bc659f1649553c1a3fa05d9727433dc03843baac29473c817d06d39e7621ba"; const isolatedLendingContract = "0x024c90c44edf46aa02c3e370725b918a59c52b5aa551388feb258bd5a1e82271"; - +const coinAssetType = '300'; // main pool async function getMarketAddresses() { @@ -13,11 +14,16 @@ async function getMarketAddresses() { } async function getMarket(marketAddress) { - const [market, coinInfo] = await Promise.all([ - getResource(marketAddress, `${mainLendingContract}::lending::Market`), - getResource(marketAddress, `${mainLendingContract}::lending::CoinInfo`) - ]) - return { cash: market.total_cash, liability: market.total_liability, fee: market.total_reserve, coin: coinInfo.type_name }; + const market = await getResource(marketAddress, `${mainLendingContract}::lending::Market`) + var coinInfo = null; + if (market.asset_type === coinAssetType) { + coinInfo = (await getResource(marketAddress, `${mainLendingContract}::lending::CoinInfo`)).type_name + } else { + coinInfo = (await getResource(marketAddress, `${mainLendingContract}::lending::FungibleAssetInfo`)).metadata.inner; + } + + + return { cash: market.total_cash, liability: market.total_liability, fee: market.total_reserve, coin: coinInfo }; } // isolated pairs @@ -80,4 +86,4 @@ module.exports = { return transformBalances("aptos", balances); } }, -}; \ No newline at end of file +}; From 129165a0646675f2e5492338f71af2e398ccd9a4 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Thu, 7 Nov 2024 06:26:53 -0700 Subject: [PATCH 0953/1768] Fix: avalon finance cedefi tvl (#12188) --- projects/avalon-finance-cedefi/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/avalon-finance-cedefi/index.js b/projects/avalon-finance-cedefi/index.js index 203e16270f..84ddc6a991 100644 --- a/projects/avalon-finance-cedefi/index.js +++ b/projects/avalon-finance-cedefi/index.js @@ -22,9 +22,9 @@ const getMetrics = async (api, borrowed) => { // const balanceOfCollateral = marketData.collateral; const balanceOfDebt = marketData.debt; if (!borrowed) { - const supply= await api.call({ abi: 'erc20:totalSupply', target: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9'}) - api.add('0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', supply) - + // pool balance of lfbtc + const balance = await api.call({ abi: 'erc20:balanceOf', target: config[api.chain].lfbtcAddress, params: poolAddress}) + api.add(config[api.chain].lfbtcAddress, balance) } if (borrowed) @@ -47,4 +47,4 @@ module.exports = { }, } -delete module.exports.bitcoin \ No newline at end of file +delete module.exports.bitcoin From b1fdb5634bb50483502f55050a2caa9d684af3a5 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Thu, 7 Nov 2024 07:18:07 -0700 Subject: [PATCH 0954/1768] Chore: remove BTC on bitcoin chain (#12200) --- projects/avalon-finance-cedefi/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/avalon-finance-cedefi/index.js b/projects/avalon-finance-cedefi/index.js index 84ddc6a991..2f7e5b7111 100644 --- a/projects/avalon-finance-cedefi/index.js +++ b/projects/avalon-finance-cedefi/index.js @@ -40,11 +40,11 @@ module.exports = { tvl: (api) => getMetrics(api, false), borrowed: (api) => getMetrics(api, true), }, - bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners: btcOwnersOfCedefi }), - ]), - }, + // bitcoin: { + // tvl: sdk.util.sumChainTvls([ + // sumTokensExport({ owners: btcOwnersOfCedefi }), + // ]), + // }, } delete module.exports.bitcoin From 6267349cae749ba8b5cae150b8621404302d8c4c Mon Sep 17 00:00:00 2001 From: leeamijo <154820412+leeamijo@users.noreply.github.com> Date: Thu, 7 Nov 2024 21:33:59 +0700 Subject: [PATCH 0955/1768] feat: update coins (#12187) --- projects/helper/tokenMapping.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index be9aca5dcc..c10668255a 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -149,6 +149,17 @@ const fixBalancesTokens = { '0xc7d67a9cbb121b3b0b9c053dd9f469523243379a': { coingeckoId: 'tether', decimals: 6 }, '0x803dce4d3f4ae2e17af6c51343040dee320c149d': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, }, + btr: { + '0xC39E757dCb2b17B79A411eA1C2810735dc9032F8': { coingeckoId: 'solv-protocol-solvbtc', decimals: 18 }, + }, + iotex: { + '0x236f8c0a61da474db21b693fb2ea7aab0c803894': { coingeckoId: 'iotex', decimals: 18 }, + }, + mantle: { + '0x93919784C523f39CACaa98Ee0a9d96c3F32b593e': { coingeckoId: 'universal-btc', decimals: 18 }, + '0xC75D7767F2EdFbc6a5b18Fc1fA5d51ffB57c2B37': { coingeckoId: 'pumpbtc', decimals: 18 }, + '0xCAbAE6f6Ea1ecaB08Ad02fE02ce9A44F09aebfA2': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 38e34e92501ad7afc71b0bef690d286e3e2d259e Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 7 Nov 2024 16:58:04 +0100 Subject: [PATCH 0956/1768] Feat: HeadStarter (#12199) Co-authored-by: baditu Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/headstarter/index.js | 70 +++++++++++++++++++++++++++++++++ projects/helper/tokenMapping.js | 2 + projects/hliquity/index.js | 13 ++---- 3 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 projects/headstarter/index.js diff --git a/projects/headstarter/index.js b/projects/headstarter/index.js new file mode 100644 index 0000000000..4b58cc3448 --- /dev/null +++ b/projects/headstarter/index.js @@ -0,0 +1,70 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const STAKING_CONTRACT = "0x000000000000000000000000000000000070eac5"; +const HST = "0x00000000000000000000000000000000000ec585"; + +const ENTITIES = [ + { + token: "0x000000000000000000000000000000000048fda4", + contracts: [ + "0x00000000000000000000000000000000004e3387", + "0x00000000000000000000000000000000004e3395", + "0x00000000000000000000000000000000004d6daa", + "0x0000000000000000000000000000000000575c04", + ], + }, + { + token: "0x000000000000000000000000000000000030fb8b", + contracts: [ + "0x00000000000000000000000000000000005737f0", + "0x00000000000000000000000000000000005737e1", + "0x0000000000000000000000000000000000571a8d", + "0x0000000000000000000000000000000000571a8a", + "0x000000000000000000000000000000000056d9ea", + "0x0000000000000000000000000000000000575c04", + ], + }, + { + token: "0x00000000000000000000000000000000005c9f70", + contracts: [ + "0x00000000000000000000000000000000005cb45b", + "0x00000000000000000000000000000000005cb45f", + "0x0000000000000000000000000000000000575c04", + ], + }, +]; + +const HST_ENTITIES = [ + { + token: HST, + contracts: [ + STAKING_CONTRACT, + "0x00000000000000000000000000000000000f5ad1", + "0x00000000000000000000000000000000000fc16c", + "0x0000000000000000000000000000000000101201", + "0x0000000000000000000000000000000000575c04", + ], + }, +]; + +const getTokensAndOwners = (entities) => { + return entities.map(({ token, contracts}) => contracts.map(i => [token, i])).flat(); +}; + +const tvl = async (api) => { + const tokensAndOwners = getTokensAndOwners(ENTITIES); + return sumTokens2({api, tokensAndOwners }); +}; + +const staking = async (api) => { + const tokensAndOwners = getTokensAndOwners(HST_ENTITIES); + return sumTokens2({api, tokensAndOwners }); +}; + +module.exports = { + methodology: "We count the HST tokens locked in the HeadStarter contracts.", + hedera: { + tvl, + staking, + }, +}; diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c10668255a..513d619bdf 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -139,7 +139,9 @@ const fixBalancesTokens = { '0x00000000000000000000000000000000000b2ad5': { coingeckoId: 'saucerswap', decimals: 6 }, '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, '0x0000000000000000000000000000000000163b5a': { coingeckoId: 'hedera-hashgraph', decimals: 8 }, + '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, '0x000000000000000000000000000000000038b3db': { coingeckoId: 'dovu-2', decimals: 8 }, + '0x00000000000000000000000000000000005c9f70': { coingeckoId: 'hedera-liquity', decimals: 8 }, '0x00000000000000000000000000000000000ec585': { coingeckoId: 'headstarter', decimals: 8 }, '0x0000000000000000000000000000000000492a28': { coingeckoId: 'hashpack', decimals: 6 }, '0x000000000000000000000000000000000030fb8b': { coingeckoId: 'steam', decimals: 2 }, diff --git a/projects/hliquity/index.js b/projects/hliquity/index.js index 737f36cdf7..dc53a952b2 100644 --- a/projects/hliquity/index.js +++ b/projects/hliquity/index.js @@ -1,13 +1,6 @@ -const { nullAddress, sumTokens2 } = require("../helper/unwrapLPs"); - -const ACTIVE_POOL_CONTRACT = '0x00000000000000000000000000000000005c9f0b'; -async function tvl(api) { - await sumTokens2({ api, owner: ACTIVE_POOL_CONTRACT, token: nullAddress }) -} +const { getLiquityTvl } = require("../helper/liquity"); module.exports = { methodology: 'the amount of locked hbar in the HLiquity protocol', - hedera: { - tvl, - } -}; + hedera: { tvl: getLiquityTvl('0x00000000000000000000000000000000005c9f66')} +}; \ No newline at end of file From a443f09d67700d6d2d10f38d7f5d6ff9da5a3160 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 7 Nov 2024 18:01:36 +0100 Subject: [PATCH 0957/1768] Feat: Mantle-treasury (#12194) --- projects/treasury/bitdao.js | 163 ++++++++++++++---------------------- 1 file changed, 63 insertions(+), 100 deletions(-) diff --git a/projects/treasury/bitdao.js b/projects/treasury/bitdao.js index 99027682dd..121bb28e29 100644 --- a/projects/treasury/bitdao.js +++ b/projects/treasury/bitdao.js @@ -1,112 +1,75 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { nullAddress,treasuryExports } = require("../helper/treasury"); -const sdk = require("@defillama/sdk"); +const sdk = require('@defillama/sdk'); +const { nullAddress } = require("../helper/treasury"); +const { getConfig } = require('../helper/cache') -//eth wallets -const mTreasuryL1 = "0x78605Df79524164911C144801f41e9811B7DB73D"; -const mTreasuryL1SC = "0xCa264A4Adf80d3c390233de135468A914f99B6a5" -const mTreasuryL1O1 = "0xf0e91a74cb053d79b39837E1cfba947D0c98dd93" -const mTreasuryL1E1 = "0x1a743BD810dde05fa897Ec41FE4D42068F7fD6b2" -const mTreasuryL1RB1 = "0x164Cf077D3004bC1f26E7A46Ad8fA54df4449E3F" -const mTreasuryL1LPE1 = "0xA5b79541548ef2D48921F63ca72e4954e50a4a74" +const API_URL = 'https://api.mantle.xyz/api/v2/treasury/tokens'; +const MNT = '0x3c3a81e81dc49a522a592e7622a7e711c06bf354'; +const USDe = '0x4c9edd5852cd905f086c759e8383e09bff1e68b3'; +const COOK = '0x9f0c013016e8656bc256f948cd4b79ab25c7b94d' +const ethenaFarm = '0x8707f238936c12c309bfc2b9959c35828acfc512'; +const SPECIFIC_TOKENS = ['eth', 'ethena-farming-usde', 'eigen-layer-eth', 'mnt']; -//mantle wallets +const abi = "function stakes(address, address) view returns (uint256 stakedAmount, uint152 coolingDownAmount, uint104 cooldownStartTimestamp)"; -const mTreasuryL2 = "0x94FEC56BBEcEaCC71c9e61623ACE9F8e1B1cf473" -const mTreasuryL2RB2 = "0x87C62C3F9BDFc09200bCF1cbb36F233A65CeF3e6" -const mTreasuryL2LPM1 = "0x992b65556d330219e7e75C43273535847fEee262" -const mTreasuryL2FF1 = "0xcD9Dab9Fa5B55EE4569EdC402d3206123B1285F4" +const isSpecificToken = token => SPECIFIC_TOKENS.includes(token); -const BIT = "0x1A4b46696b2bB4794Eb3D4c26f1c55F9170fa4C5"; -const MNT = "0x3c3a81e81dc49a522a592e7622a7e711c06bf354" +const getEthenaFarmingBalance = async (api, wallet) => { + const { stakedAmount, coolingDownAmount } = await api.call({ target: ethenaFarm, params: [wallet, USDe], abi }); + return Number(stakedAmount) + Number(coolingDownAmount); +}; -const MNTMantle = ADDRESSES.metis.Metis -const wrappedmantleonmantle = ADDRESSES.mantle.WMNT +const getTvlData = async (api, key) => { + const data = await getConfig('mantle-treasury', API_URL) + const rawDatas = data.filter(({ chain }) => key === chain); + const datas = rawDatas.map(({ id, walletAddress, amount }) => ({ id, walletAddress, amount })); -const ecspWallets = [ -'0x87c185bEFFfb36a42b741d10601A007e997a63bA', -'0x8AA6a67e96850e070B0c8E94E3a35C5f9f01809C', -'0x50f6e426fdefb3f994d3fe9fa4e1ee715f85de7f', -'0x7427b4Fd78974Ba1C3B5d69e2F1B8ACF654fEB44', -'0x7fe2bAffD481a8776A9eaD15a8eD17Fe37107903', -'0x15Bb5D31048381c84a157526cEF9513531b8BE1e', -'0xdD1c2483056fF46153249bd903401ae7bF6360D1', -'0x565F603D583F9199487923775114ae8c0D17D044', -'0x650aD9e7EfCD34B7d050c22a6A8dFFAFe3B4A22E', -'0x607105cE5bf13e70B49E949a3DdFaD694d19374F', -'0x131C7f3461A6696317ddfEdfed3BCdc10A2062B2', -'0xa1F7D91Bf121f4940d96c5C52Bc577011B95B51b', -'0x911169AA285f5D18fC3567d150616d4B0869d3a5', -'0x3f946F00A00eB2A66A4BD1AeAF137E05dB6CAEc6', -'0x9fe09b3ed1A407162876fEB1995048A620552fD0', -'0xd4338fC8Dc9d2FDcb99604d3cFc80019EBE01058', -'0x71Fb53Afc7E36C3f11BC1bdBBAB7B6FC3E552eb6', -'0x92A9e359d72F934a5d7c1251201f9855A381B23c', -'0xb118d4B94B0D4ce38F0D15d88f1dC09580a60b7A', -'0xaA42736947d1fdcc5d93F459A6D1dC0d7b9a92a4', -'0xF366eC9FA2DCE0ee7A6bdae4Aaa5c076E8391AFC', -'0x5DA939F5e2bC3C7159ac16f98BbFb23759000cd5', -'0x60F6ce1965D99EEffDF63B5303664f25fCb0347F', -'0xC784F3aEA5ce3daBA6907ee5d6Ce321a204Eb3A8', -'0xDCA65E2DFEe70991374eD47EfB4aD6B4FCD0c612', -'0x4ea7b4D10a01c93509BaA0CBb128c89344A1F578', -'0x4dF3d780Af7cbD51d9c76f236477edF417c7B554', -'0xA38e519b12D9CE133396a3E4EB92aac0934AB351', -'0x6d9755211D627fe0EA02D94C23C6110af16a8882', -'0x43c0f24E84e6d45b021d18C982beAbFA969577c8', -'0xB82C91bB7e8696a4A057192ED61aFcD1F9121722', -'0x15FFBf5730FA9eF271B2E9b4a1a6c90F2288155B', -'0xCef70f66e50CF016BB932De6425AA6f7286A3886', -'0x50165383783124232B9e4367D59815947012Ac27', -'0x97D50c7d14E68bEBC0f81B4FdCed89a1122330A6' -] + const wallets = Object.values( + datas.reduce((acc, { id, walletAddress, amount }) => { + acc[walletAddress] = acc[walletAddress] || { owner: walletAddress, tokens: [] }; + acc[walletAddress].tokens.push({ address: id, amount }); + return acc; + }, {}) + ); -const tokenTreasuries = treasuryExports({ + const uniqueOwners = new Set(); + const uniqueTokens = new Set(); + + for (const { owner, tokens } of wallets) { + const eigenLayerToken = tokens.find(token => token.address === 'eigen-layer-eth'); + if (tokens.some(token => token.address === 'eth')) api.add(nullAddress, (await sdk.api.eth.getBalance({ target: owner })).output); + if (tokens.some(token => token.address === 'mnt')) api.add(MNT, (await sdk.api.eth.getBalance({ target: owner })).output, { skipChain: true }); + if (tokens.some(token => token.address === 'ethena-farming-usde')) api.add(USDe, await getEthenaFarmingBalance(api, owner)); + if (eigenLayerToken) api.add(nullAddress, eigenLayerToken.amount * 10 ** 18); + + const nonSpecificTokens = tokens.filter(token => !isSpecificToken(token.address)); + if (nonSpecificTokens.length > 0) { + uniqueOwners.add(owner); + nonSpecificTokens.forEach(token => uniqueTokens.add(token.address)); + } + } + + return { owners: Array.from(uniqueOwners), tokens: Array.from(uniqueTokens) }; +}; + +module.exports = { ethereum: { - tokens: [ - nullAddress, - ADDRESSES.ethereum.USDC,//USDC - ADDRESSES.ethereum.DAI,//DAI - ADDRESSES.ethereum.WETH,//WETH - ADDRESSES.ethereum.USDT,//USDT - '0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9',//FTT - '0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272',//xSUSHI - "0x52A8845DF664D76C69d2EEa607CD793565aF42B8", - ADDRESSES.ethereum.sUSDe, //sUSDe - ], - owners: [mTreasuryL1, mTreasuryL1SC,mTreasuryL1O1,mTreasuryL1E1, mTreasuryL1RB1, mTreasuryL1LPE1, ...ecspWallets ], - ownTokens: [BIT, MNT], - resolveLP: true, - resolveUniV3: true + tvl: sdk.util.sumChainTvls([async ({ api }) => { + const { owners, tokens } = await getTvlData(api, 'eth') + return api.sumTokens({ owners, tokens, blacklistedTokens: [MNT] }); + }]), + ownTokens: async ({ api }) => { + const { owners } = await getTvlData(api, 'eth') + return api.sumTokens({ ownerTokens: owners.map(owner => [[MNT], owner]) }); + } }, mantle: { - tokens: [ - nullAddress, - "0x5bE26527e817998A7206475496fDE1E68957c5A6", //ondo usd - "0xcda86a272531e8640cd7f1a92c01839911b90bb0", //mantle staked eth - ADDRESSES.mantle.WETH, //eth - ADDRESSES.mantle.USDC, //usdc - ADDRESSES.mantle.USDT, //tether - "0xf52b354ffdb323e0667e87a0136040e3e4d9df33", //lp meth - ], - owners: [mTreasuryL2, mTreasuryL2RB2, mTreasuryL2LPM1, mTreasuryL2FF1, ...ecspWallets], - ownTokens: [MNTMantle, wrappedmantleonmantle], - resolveLP: true, + tvl: async (api) => { + const { owners, tokens } = await getTvlData(api, 'mnt') + return api.sumTokens({ owners, tokens, blacklistedTokens: [COOK] }); + }, + ownTokens: async ({ api }) => { + const { owners } = await getTvlData(api, 'mnt') + return api.sumTokens({ ownerTokens: owners.map(owner => [[COOK], owner]) }); + } }, -}) - -async function otherTvl(_timestamp, _block, _chainBlocks, {api}){ - const shares = await api.call({ abi: 'function shares(address user) public view returns (uint256)', target: "0x298afb19a105d59e74658c4c334ff360bade6dd2", params:["0xca264a4adf80d3c390233de135468a914f99b6a5"]}) - const balances = { - "ethereum:0xd5f7838f5c461feff7fe49ea5ebaf7728bb0adfa": shares - } - return balances } - -module.exports={ - ethereum:{ - tvl: sdk.util.sumChainTvls([tokenTreasuries.ethereum.tvl, otherTvl]), - ownTokens: tokenTreasuries.ethereum.ownTokens - }, - mantle: tokenTreasuries.mantle -} \ No newline at end of file From 539a387b7006ff33b6de6ddf02eacb132c0f8b81 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 7 Nov 2024 23:17:46 +0000 Subject: [PATCH 0958/1768] add veTHE tracking for quoll --- projects/quoll/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/projects/quoll/index.js b/projects/quoll/index.js index 98a1ea6543..2e8555f44a 100644 --- a/projects/quoll/index.js +++ b/projects/quoll/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { staking } = require("../helper/staking"); +const { stakings } = require("../helper/staking"); const abi = require('./abi.json'); const voterProxy = '0xe96c48C5FddC0DC1Df5Cf21d68A3D8b3aba68046'; const masterWombat = '0x489833311676B566f888119c29bd997Dc6C95830'; @@ -39,6 +39,7 @@ async function voterProxyBalances(api) { } async function tvl(api) { + api.add("0xf4c8e32eadec4bfe97e0f595add0f4450a863a11", await api.call({ abi: 'function balanceOfNFT(uint256) returns (uint256)', target: "0xfbbf371c9b0b994eebfcc977cef603f7f31c070d", params: [16274], })) api.add(wom, await api.call({ abi: 'erc20:balanceOf', target: veWom, params: [voterProxy], })) await voterProxyBalances(api) } @@ -48,8 +49,8 @@ module.exports = { "TVL of Quoll Finance consists of Wombat LP tokens staked in MasterWombat, WOM tokens locked in veWOM, and Quoll tokens locked in QUO Vote Lock contract.", bsc: { tvl, - staking: staking( - quoLocker, + staking: stakings( + [quoLocker, "0xc634c0A24BFF88c015Ff32145CE0F8d578B02F60"], quo, chain ), From d16e1dc206fb89e986c09cebf975b1f827404dc3 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 8 Nov 2024 00:02:54 +0000 Subject: [PATCH 0959/1768] fix --- projects/helper/bitcoin-book/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index a8c9e3a461..b3b8ff4b8f 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -1,6 +1,6 @@ const ainn = require('./ainn-layer2.js') const allo = require('./allo.js') -const avalance = require('./avalanche-btc.js') +const avalanche = require('./avalanche-btc.js') const fetchers = require('./fetchers.js') const bevm = require('./bevm.js') const binance = require('./binance.js') @@ -88,7 +88,7 @@ module.exports = { ...fetchers, ainn, allo, - avalance, + avalanche, bevm, binance, binance2, From 93d6603bb1edae2e0a8c2111a2c6409ab282b42b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 8 Nov 2024 05:05:53 +0100 Subject: [PATCH 0960/1768] lint fix --- projects/helper/tokenMapping.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 513d619bdf..8563414479 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -139,7 +139,6 @@ const fixBalancesTokens = { '0x00000000000000000000000000000000000b2ad5': { coingeckoId: 'saucerswap', decimals: 6 }, '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, '0x0000000000000000000000000000000000163b5a': { coingeckoId: 'hedera-hashgraph', decimals: 8 }, - '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, '0x000000000000000000000000000000000038b3db': { coingeckoId: 'dovu-2', decimals: 8 }, '0x00000000000000000000000000000000005c9f70': { coingeckoId: 'hedera-liquity', decimals: 8 }, '0x00000000000000000000000000000000000ec585': { coingeckoId: 'headstarter', decimals: 8 }, From ac3e26d23d844d57a228f442d7dd87dbc9c9f9a2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 8 Nov 2024 05:08:59 +0100 Subject: [PATCH 0961/1768] supr #12209 --- projects/supr-staking/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/supr-staking/index.js b/projects/supr-staking/index.js index 9bf5f10ed0..84463e778a 100644 --- a/projects/supr-staking/index.js +++ b/projects/supr-staking/index.js @@ -1,9 +1,11 @@ const SUPR = '0x3390108E913824B8eaD638444cc52B9aBdF63798' const ROLLUX_SUPR_STAKING = '0x400aDCba906EA6E87FEC276f0E0C0857F71A85F2' +const ROLLUX_SUPR_GROUP_STAKING = '0xa9A37e4D70Fc6af8A0CC16995B9363f10dCE132E' async function staking(api) { const bal = await api.call({ abi: 'erc20:totalSupply', target: ROLLUX_SUPR_STAKING }) api.add(SUPR, bal) + return api.sumTokens({ owner: ROLLUX_SUPR_GROUP_STAKING, tokens: [SUPR] }) } module.exports = { From 52d8f28dda8d691c189a2a9997198502b920a4ea Mon Sep 17 00:00:00 2001 From: Lawson Graham <45542987+LawsonGraham@users.noreply.github.com> Date: Thu, 7 Nov 2024 20:15:26 -0800 Subject: [PATCH 0962/1768] thalaswap v2 tVL (#12208) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/thalaswap-v2/index.js | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 projects/thalaswap-v2/index.js diff --git a/projects/thalaswap-v2/index.js b/projects/thalaswap-v2/index.js new file mode 100644 index 0000000000..da46d1a5bb --- /dev/null +++ b/projects/thalaswap-v2/index.js @@ -0,0 +1,35 @@ +const { getResource, function_view } = require("../helper/chain/aptos"); + +const thalaswapAddress = "0x007730cd28ee1cdc9e999336cbc430f99e7c44397c0aa77516f6f23a78559bb5"; +const thalaswapControllerResource = `${thalaswapAddress}::pool::ThalaSwap`; +let resourcesCache; + +async function _getResource(address, key) { + if (!resourcesCache) resourcesCache = getResource(address, key) + return resourcesCache +} +async function getBalance(poolAddress, assetMetadata) { + return function_view({ functionStr: "0x1::primary_fungible_store::balance", type_arguments: ["0x1::fungible_asset::Metadata"], args: [poolAddress, assetMetadata] }); +} + +module.exports = { + timetravel: false, + methodology: + "Aggregates TVL in all pools in Thalaswap, Thala Labs' AMM.", + aptos: { + tvl: async (api) => { + const controller = await _getResource(thalaswapAddress, thalaswapControllerResource) + + const poolObjects = controller.pools.inline_vec.map(pool => (pool.inner)) + + for (const poolAddress of poolObjects) { + const pool = await getResource(poolAddress, `${thalaswapAddress}::pool::Pool`) + const assets = pool.assets_metadata.map(asset => asset.inner) + for (const asset of assets) { + const balance = await getBalance(poolAddress, asset) + api.add(asset, balance) + } + } + }, + }, +}; \ No newline at end of file From 4227fd717e9ab289e53b9963dbbae4fa751277d5 Mon Sep 17 00:00:00 2001 From: Joshua Sum <58564538+JoshuaSum@users.noreply.github.com> Date: Thu, 7 Nov 2024 23:32:01 -0500 Subject: [PATCH 0963/1768] Add Bitget Staked SOL (BGSOL) (#12207) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bgsol/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/bgsol/index.js diff --git a/projects/bgsol/index.js b/projects/bgsol/index.js new file mode 100644 index 0000000000..12a938e64e --- /dev/null +++ b/projects/bgsol/index.js @@ -0,0 +1,12 @@ +const { sumTokens2 } = require("../helper/solana"); + +async function tvl() { + return sumTokens2({ tokenAccounts: ['Ejg5vqsthntG8wJDijzgEWvdvhoAh8pzu4Q4r4MqsdkR'] }) +} + +module.exports = { + timetravel: false, + doublecounted: true, + methodology: "Bitget Staked SOL (BGSOL) is a tokenized representation on your staked sSOL", + solana: { tvl }, +}; \ No newline at end of file From 3a509fc1b7b9470da75d744a59bd42cd9604746f Mon Sep 17 00:00:00 2001 From: nikitariabukhin <108471336+nikitariabukhin@users.noreply.github.com> Date: Thu, 7 Nov 2024 23:32:14 -0500 Subject: [PATCH 0964/1768] Create index.js (#12206) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/bitcoin-book/index.js | 5 ++++- projects/p2pb2b/index.js | 30 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 projects/p2pb2b/index.js diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index b3b8ff4b8f..f5f7285f2c 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -84,6 +84,8 @@ const toobit = require('./toobit.js') const indiaCovid = require('./india-covid.js') const wooCEX = require('./woo-cex.js') +const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] + module.exports = { ...fetchers, ainn, @@ -169,5 +171,6 @@ module.exports = { swissborg, toobit, indiaCovid, - wooCEX + wooCEX, + p2pb2b, } \ No newline at end of file diff --git a/projects/p2pb2b/index.js b/projects/p2pb2b/index.js new file mode 100644 index 0000000000..87281e64a0 --- /dev/null +++ b/projects/p2pb2b/index.js @@ -0,0 +1,30 @@ +const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + +const config = { + bitcoin: { + owners: bitcoinAddressBook.p2pb2b, + }, + ethereum: { + owners: [ + '0xcfed1443a1ed773119ed1a41a39b3b66f0ffde0f', + '0x302f4d246fc1E283AF3239311B8B84bD5a1c7736', + '0x03feA254cfA7434004E8d495725bCbB7cCc40454', + '0x7a2556e23ce7bc1ADFBDCa650130390A10C05f63' + ], + }, + bsc: { + owners: [ + '0x83455d6c365dcbac10855c623da884b552aaefdd', + '0x03feA254cfA7434004E8d495725bCbB7cCc40454' + ] + }, + polygon: { + owners: [ + '0x302f4d246fc1E283AF3239311B8B84bD5a1c7736' + ] + } +} + +module.exports = cexExports(config) +module.exports.methodology = 'We are only tracking part of their cold wallets for P2PB2B, more information here https://coinmarketcap.com/exchanges/p2b/' From 1b37f5f146c9cd3e34a1daf4517f68da7cefe99c Mon Sep 17 00:00:00 2001 From: Metodi <38468321+metodi96@users.noreply.github.com> Date: Fri, 8 Nov 2024 08:32:49 +0400 Subject: [PATCH 0965/1768] Add support for new lending pools on Nolus (#12203) --- projects/nolus/index.js | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/projects/nolus/index.js b/projects/nolus/index.js index 3bc9d8ee92..653dab1afb 100644 --- a/projects/nolus/index.js +++ b/projects/nolus/index.js @@ -12,6 +12,26 @@ const osmosisAxlOracleAddr = 'nolus1vjlaegqa7ssm2ygf2nnew6smsj8ref9cmurerc7pzwxq const osmosisAxlLeaserAddr = 'nolus1wn625s4jcmvk0szpl85rj5azkfc6suyvf75q6vrddscjdphtve8s5gg42f' const osmosisAxlLppAddr = 'nolus1qg5ega6dykkxc307y25pecuufrjkxkaggkkxh7nad0vhyhtuhw3sqaa3c5' +// Osmosis stATOM Protocol Contracts (OSMOSIS-OSMOSIS-ST_ATOM) pirin-1 +const osmosisStAtomOracleAddr = 'nolus1mtcv0vhpt94s82mcemj5sc3v94pq3k2g62yfa5p82npfnd3xqx8q2w8c5f' +const osmosisStAtomLeaserAddr = 'nolus1xv0erzdcphnpkf8tr76uynldqx6sspw7782zg9wthz8xpemh7rnsv4nske' +const osmosisStAtomLppAddr = 'nolus1jufcaqm6657xmfltdezzz85quz92rmtd88jk5x0hq9zqseem32ysjdm990' + +// Osmosis allBTC Protocol Contracts (OSMOSIS-OSMOSIS-ALL_BTC) pirin-1 +const osmosisBtcOracleAddr = 'nolus1y0nlrnw25mh2vxhaupamwca4wdvuxs26tq4tnxgjk8pw0gxevwfq5ry07c' +const osmosisBtcLeaserAddr = 'nolus1dzwc9hu9aqlmm7ua4lfs2lyafmy544dd8vefsmjw57qzcanhsvgsf4u3ld' +const osmosisBtcLppAddr = 'nolus1w2yz345pqheuk85f0rj687q6ny79vlj9sd6kxwwex696act6qgkqfz7jy3' + +// Osmosis allSOL Protocol Contracts (OSMOSIS-OSMOSIS-ALL_SOL) pirin-1 +const osmosisSolOracleAddr = 'nolus153kmhl85vavd03r9c7ardw4fgydge6kvvhrx5v2uvec4eyrlwthsejc6ce' +const osmosisSolLeaserAddr = 'nolus1lj3az53avjf8s9pzwvfe86d765kd7cmnhjt76vtqxjvn08xu0c6saumtza' +const osmosisSolLppAddr = 'nolus1qufnnuwj0dcerhkhuxefda6h5m24e64v2hfp9pac5lglwclxz9dsva77wm' + +// Osmosis AKT Protocol Contracts (OSMOSIS-OSMOSIS-AKT) pirin-1 +const osmosisAktOracleAddr = 'nolus12sx0kr60rptp846z2wvuwyxn47spg55dcnzwrhl4f7nfdduzsrxq7rfetn' +const osmosisAktLeaserAddr = 'nolus1shyx34xzu5snjfukng323u5schaqcj4sgepdfcv7lqfnvntmq55sj94hqt' +const osmosisAktLppAddr = 'nolus1lxr7f5xe02jq6cce4puk6540mtu9sg36at2dms5sk69wdtzdrg9qq0t67z' + // Astroport Protocol Contracts (NEUTRON-ASTROPORT-USDC_AXELAR) pirin-1 const astroportOracleAddr = 'nolus1jew4l5nq7m3xhkqzy8j7cc99083m5j8d9w004ayyv8xl3yv4h0dql2dd4e' const astroportLppAddr = 'nolus1qqcr7exupnymvg6m63eqwu8pd4n5x6r5t3pyyxdy7r97rcgajmhqy3gn94' @@ -51,11 +71,20 @@ async function getLppTvl(lppAddresses) { const lpps = await queryManyContracts({ contracts: lppAddresses, chain: 'nolus', data: { 'lpp_balance': [] } }) let totalLpp = 0 + let divisor = _6Zeros; // Default 6 decimals + + // Adjust divisor based on specific addresses for allBTC and allSOL + if (lppAddresses.includes(osmosisBtcLppAddr)) { + divisor = 100000000; // 8 decimals for BTC + } else if (lppAddresses.includes(osmosisSolLppAddr)) { + divisor = 1000000000; // 9 decimals for SOL + } + lpps.forEach(v => { totalLpp += Number(v.balance.amount) }) - return totalLpp / _6Zeros + return totalLpp / divisor; } function sumAssests(balances, leases, currencies) { @@ -103,7 +132,11 @@ module.exports = { tvl: async () => { return { 'axlusdc': await getLppTvl([osmosisAxlLppAddr, astroportLppAddr]), - 'usd-coin': await getLppTvl([osmosisNobleLppAddr, astroportNobleLppAddr]) + 'usd-coin': await getLppTvl([osmosisNobleLppAddr, astroportNobleLppAddr]), + 'stride-staked-atom': await getLppTvl([osmosisStAtomLppAddr]), + 'osmosis-allbtc': await getLppTvl([osmosisBtcLppAddr]), + 'osmosis-allsol': await getLppTvl([osmosisSolLppAddr]), + 'akash-network': await getLppTvl([osmosisAktLppAddr]) } } }, @@ -120,6 +153,10 @@ module.exports = { return await tvl([ { leaser: osmosisNobleLeaserAddr, oracle: osmosisNobleOracleAddr }, { leaser: osmosisAxlLeaserAddr, oracle: osmosisAxlOracleAddr }, + { leaser: osmosisStAtomLeaserAddr, oracle: osmosisStAtomOracleAddr }, + { leaser: osmosisBtcLeaserAddr, oracle: osmosisBtcOracleAddr }, + { leaser: osmosisSolLeaserAddr, oracle: osmosisSolOracleAddr }, + { leaser: osmosisAktLeaserAddr, oracle: osmosisAktOracleAddr } ]) } } From 85f5f76d3f1bcbb23c4ff4d1e7cc69700d245bea Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Thu, 7 Nov 2024 21:33:11 -0700 Subject: [PATCH 0966/1768] Fix avalon usda typo (#12202) --- projects/avalon-finance-usda/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/avalon-finance-usda/index.js b/projects/avalon-finance-usda/index.js index 5de4e4c950..a4e3c61b6a 100644 --- a/projects/avalon-finance-usda/index.js +++ b/projects/avalon-finance-usda/index.js @@ -22,7 +22,7 @@ const config = { } module.exports = { - methodology: `FBTC and LFFBTC as collateral`, + methodology: `FBTC and LFBTC as collateral`, } Object.keys(config).forEach(chain => { @@ -30,4 +30,4 @@ Object.keys(config).forEach(chain => { module.exports[chain] = { tvl: sumTokensExport({ owner: poolAddress, tokens: [lfbtcAddress, fbtcAddress], }), } -}) \ No newline at end of file +}) From 99575c3acf11f4fda3d8415b5bac1611ebedeec4 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 7 Nov 2024 20:34:05 -0800 Subject: [PATCH 0967/1768] update/add-chains (#12164) Co-authored-by: deepak --- projects/steer/index.js | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/projects/steer/index.js b/projects/steer/index.js index feebf6ae12..8b1e583f7d 100644 --- a/projects/steer/index.js +++ b/projects/steer/index.js @@ -28,12 +28,12 @@ const supportedChains = [ chainId: 56, identifier: 'bsc' }, - { - name: 'Evmos', - subgraphEndpoint: 'https://subgraph.satsuma-prod.com/769a117cc018/steer/steer-protocol-evmos/api', - chainId: 9001, - identifier: 'evmos' - }, + // { + // name: 'Evmos', + // subgraphEndpoint: 'https://subgraph.satsuma-prod.com/769a117cc018/steer/steer-protocol-evmos/api', + // chainId: 9001, + // identifier: 'evmos' + // }, { name: 'Avalanche', subgraphEndpoint: 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GZotTj3rQJ8ZqVyodtK8TcnKcUxMgeF7mCJHGPYbu8dA', @@ -160,6 +160,24 @@ const supportedChains = [ chainId: 14, identifier: 'flare' }, + { + name: 'ApeChain', + subgraphEndpoint: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-apechain/1.1.1/gn', + chainId: 33139, + identifier: 'apechain' + }, + // { + // name: 'Bittorrent', + // subgraphEndpoint: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-btt/1.1.1/gn', + // chainId: 199, + // identifier: 'bittorrent' + // }, + { + name: 'Filecoin', + subgraphEndpoint: 'https://fil.subgraph.laconic.com/v1/steer-protocol/iRoheeEh2g6CdZ9OnunLwNCFHG8a7TAdtIYNNxboRSKVxgZfjq', + chainId: 314, + identifier: 'filecoin' + }, ] // Fetch active vaults and associated data @todo limited to 1000 per chain From 42200761f58b3be7885360a74fb91654257161ff Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 8 Nov 2024 05:37:49 +0100 Subject: [PATCH 0968/1768] steer: enable evmos --- projects/steer/index.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/steer/index.js b/projects/steer/index.js index 8b1e583f7d..32ad3085db 100644 --- a/projects/steer/index.js +++ b/projects/steer/index.js @@ -28,12 +28,12 @@ const supportedChains = [ chainId: 56, identifier: 'bsc' }, - // { - // name: 'Evmos', - // subgraphEndpoint: 'https://subgraph.satsuma-prod.com/769a117cc018/steer/steer-protocol-evmos/api', - // chainId: 9001, - // identifier: 'evmos' - // }, + { + name: 'Evmos', + subgraphEndpoint: 'https://subgraph.satsuma-prod.com/769a117cc018/steer/steer-protocol-evmos/api', + chainId: 9001, + identifier: 'evmos' + }, { name: 'Avalanche', subgraphEndpoint: 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GZotTj3rQJ8ZqVyodtK8TcnKcUxMgeF7mCJHGPYbu8dA', From bd5b5b7d9959954583eadebce4517d35b83099ed Mon Sep 17 00:00:00 2001 From: rouzwelt Date: Fri, 8 Nov 2024 05:22:50 +0000 Subject: [PATCH 0969/1768] update raindex eth v4 contract (#12210) --- projects/raindex/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/raindex/index.js b/projects/raindex/index.js index dde9156dbd..f67d3f26e1 100644 --- a/projects/raindex/index.js +++ b/projects/raindex/index.js @@ -33,7 +33,9 @@ const orderbooks = { v3: [ { address: "0xf1224a483ad7f1e9aa46a8ce41229f32d7549a74", start: 1707183011 }, ], - v4: [] + v4: [ + { address: "0x0eA6d458488d1cf51695e1D6e4744e6FB715d37C", start: 1729850783 }, + ] }, flare: { v3: [ From 06e947aa44f769078c08aafa316a8f0d5e3b88ff Mon Sep 17 00:00:00 2001 From: Vojtch Date: Fri, 8 Nov 2024 06:27:41 +0100 Subject: [PATCH 0970/1768] update: pwn (#12204) --- projects/pwn/index.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/projects/pwn/index.js b/projects/pwn/index.js index b4f34810cd..5ce7b821b5 100644 --- a/projects/pwn/index.js +++ b/projects/pwn/index.js @@ -14,6 +14,7 @@ const PWN_BUNDLER_BSC = "0x4A75a527E97d853109aA6998a2B9E45a87A31e9f"; const PWN_V1_SIMPLE_LOAN = "0x50160ff9c19fbE2B5643449e1A321cAc15af2b2C"; const PWN_V1_1_SIMPLE_LOAN_A = "0x57c88D78f6D08b5c88b4A3b7BbB0C1AA34c3280A"; // Mainnet, Polygon, Arbitrum, BSC const PWN_V1_1_SIMPLE_LOAN_B = "0x4188C513fd94B0458715287570c832d9560bc08a"; // Cronos, Base, Optimism +const PWN_V1_2_SIMPLE_LOAN = "0x9A93AE395F09C6F350E3306aec592763c517072e"; module.exports = { misrepresentedTokens: true, @@ -26,6 +27,7 @@ module.exports = { PWN_BUNDLER_MAINNET, PWN_V1_SIMPLE_LOAN, PWN_V1_1_SIMPLE_LOAN_A, + PWN_V1_2_SIMPLE_LOAN, ], resolveNFTs: true, resolveArtBlocks: true, @@ -40,6 +42,7 @@ module.exports = { PWN_BUNDLER_POLYGON, PWN_V1_SIMPLE_LOAN, PWN_V1_1_SIMPLE_LOAN_A, + PWN_V1_2_SIMPLE_LOAN, ], fetchCoValentTokens: true, }), @@ -51,22 +54,32 @@ module.exports = { }, base: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_BASE, PWN_V1_1_SIMPLE_LOAN_B], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_BASE, PWN_V1_1_SIMPLE_LOAN_B, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, arbitrum: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_ARBITRUM, PWN_V1_1_SIMPLE_LOAN_A], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_ARBITRUM, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, optimism: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_OPTIMISM, PWN_V1_1_SIMPLE_LOAN_B], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_OPTIMISM, PWN_V1_1_SIMPLE_LOAN_B, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, bsc: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_BSC, PWN_V1_1_SIMPLE_LOAN_A], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_BSC, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + }), + }, + linea: { + tvl: sumTokensExport({ + owners: [PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + }), + }, + xdai: { + tvl: sumTokensExport({ + owners: [PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, mantle: { tvl: () => ({}) }, From acc32bfbaaa0646c15a6a6c14b883b7370d1524d Mon Sep 17 00:00:00 2001 From: Koen Vermeulen <84975944+kptvermeulen@users.noreply.github.com> Date: Fri, 8 Nov 2024 06:37:02 +0100 Subject: [PATCH 0971/1768] project/reform (#12201) Co-authored-by: Koen Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/reform/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/reform/index.js diff --git a/projects/reform/index.js b/projects/reform/index.js new file mode 100644 index 0000000000..8a59d884b9 --- /dev/null +++ b/projects/reform/index.js @@ -0,0 +1,9 @@ +const { staking } = require('../helper/staking') + +module.exports = { + ethereum: { + tvl: () => ({}), + staking: staking('0x74ef3b69e8c475df8450eddda5dabd9b6dd17972', '0xea3eed8616877F5d3c4aEbf5A799F2e8D6DE9A5E'), + pool2: staking('0x74ef3b69e8c475df8450eddda5dabd9b6dd17972', '0xf4e14a7766a3316d6cefbaec614c714f2d4965d8') + } +} From fb6927ebc31219c0685bf2d12de424ca8079efab Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 8 Nov 2024 14:35:48 +0800 Subject: [PATCH 0972/1768] feat: udpate pumpbtc adapter logic (#12147) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/bitcoin-book/fetchers.js | 6 ++-- projects/pumpbtc/index.js | 46 ++++++++++++++++-------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index c6e7d795d2..5fd55c3f2d 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -74,11 +74,11 @@ module.exports = { return Object.values(await getConfig('solv-protocol/solv-btc-lst', API_URL)).flat(); }, pumpBTC: async () => { - const API_URL = 'https://dashboard.pumpbtc.xyz/api/dashboard/btc/addresses' - return getConfig('pumpbtc', undefined, { + const API_URL = 'https://dashboard.pumpbtc.xyz/api/dashboard/asset/tokenowners' + return getConfig('pumpbtc/v2', undefined, { fetcher: async () => { const { data } = await axios.get(API_URL) - return data.data || [] + return data.data.bitcoin.owners } }) }, diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index 7291dc9905..00073c974d 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -1,30 +1,46 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/sumTokens'); -const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const utils = require('../helper/utils'); +const { getConfig } = require('../helper/cache'); +const bitcoinBook = require('../helper/bitcoin-book'); module.exports = { methodology: 'TVL for pumpBTC is calculated based on the total value of WBTC, FBTC, BTCB held in the contract that were utilized in the minting process of pumpBTC.', } -const config = { - ethereum: { owners: ['0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', '0x3d9bCcA8Bc7D438a4c5171435f41a0AF5d5E6083', '0xAC364d14020f1da0044699691a91f06ca6131Fe3', '0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364', ADDRESSES.ethereum.WBTC], }, - bsc: { owners: ['0x2Ee808F769AB697C477E0aF8357315069b66bCBb', '0x80922aD2771c5Ea9C14bA5FF4a903EC6B0f7e7C9', '0x2b4B9047C9fEA54705218388bFC7Aa7bADA4BB5E', '0x8A0727B87fa1027c419c3aa2caf56C799d5Bd8c5'], tokens: [ADDRESSES.bsc.BTCB, '0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, - mantle: { owners: ['0xd6Ab15B2458B6EC3E94cE210174d860FdBdd6b96'], tokens: ['0xC96dE26018A54D51c097160568752c4E3BD6C364'], }, - bitcoin: {}, - base: { owners: ['0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', '0x4913D495cBA3e1380218d2258126F22Ea5dE5f8B', '0xC7DA129335F8815d62fBd3ca7183A3b2791CdB5e', '0xca873913BBf124441857d32Bb23f723b68433465', '0xF1D06Be8dF2F7Ed4Cdc9ac05915EA2b618FFA3Fb'], tokens: ['0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf'], }, + +async function getStakingAddresses() { + let res = await utils.fetchURL('https://dashboard.pumpbtc.xyz/api/dashboard/asset/tokenowners') + + const btcAddresses = res.data.data || {} + //console.log('>>', btcAddresses.length) + return btcAddresses +} + +async function bitcoinTvl(api) { + const owners = await bitcoinBook.pumpBTC() + return sumTokens({ api, owners }) +} + +async function otherTvl(api) { + const addresses = await getConfig('pumpbtc/v2', undefined, { fetcher: getStakingAddresses }) + + if (!addresses[api.chain]) { + return; + } + + const { owners, tokens } = addresses[api.chain] + return api.sumTokens({ owners, tokens }) } -Object.keys(config).forEach(chain => { - const { owners, tokens, } = config[chain] +module.exports.isHeavyProtocol = true; - if (chain === 'bitcoin') { +['bitcoin', 'ethereum', 'bsc', 'mantle', 'base'].forEach(chain => { + if (chain == 'bitcoin') { module.exports[chain] = { - tvl: async (api) => { return sumTokens({ api, owners: await bitcoinAddressBook.pumpBTC() }) } + tvl: bitcoinTvl, } } else { module.exports[chain] = { - tvl: async (api) => api.sumTokens({ owners, tokens }) + tvl: otherTvl } } }) - -module.exports.isHeavyProtocol = true From d356afd0e4a07f69cd12dd43fa26727a64470403 Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Fri, 8 Nov 2024 19:43:45 +0800 Subject: [PATCH 0973/1768] Update Desyn strategy Pools (#12136) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-basisTrading/index.js | 12 +++++ projects/desyn-farm/helper.js | 59 +++++++++++++++++++++++++ projects/desyn-farm/index.js | 46 ++++--------------- projects/desyn-farm1/index.js | 48 -------------------- projects/desyn-yieldAggregator/index.js | 12 +++++ projects/desyn/index.js | 39 ---------------- 6 files changed, 92 insertions(+), 124 deletions(-) create mode 100644 projects/desyn-basisTrading/index.js create mode 100644 projects/desyn-farm/helper.js delete mode 100644 projects/desyn-farm1/index.js create mode 100644 projects/desyn-yieldAggregator/index.js delete mode 100644 projects/desyn/index.js diff --git a/projects/desyn-basisTrading/index.js b/projects/desyn-basisTrading/index.js new file mode 100644 index 0000000000..ec2b290495 --- /dev/null +++ b/projects/desyn-basisTrading/index.js @@ -0,0 +1,12 @@ +const { getTvlFunction, chains } = require("../desyn-farm/helper"); + +module.exports = { + doublecounted: true, + methodology: 'Combines on-chain airdrops with stable returns from basis trading on Binance.', +} + +chains.forEach(chain => { + module.exports[chain] = { + tvl: getTvlFunction('StrategyType3', true) + } +}) \ No newline at end of file diff --git a/projects/desyn-farm/helper.js b/projects/desyn-farm/helper.js new file mode 100644 index 0000000000..e4c51906f2 --- /dev/null +++ b/projects/desyn-farm/helper.js @@ -0,0 +1,59 @@ +const { getConfig } = require('../helper/cache') + +const chains = ["ethereum", "arbitrum", "btr", "mode", "zklink", "core", "ailayer", "linea", "merlin", "scroll"]; + +const abi = { + getBalance: "function getBalance(address) view returns (uint256)" +} + +async function getInfoListPool(strategy_type, chain) { + const data = await getConfig('desyn/' + strategy_type, `https://api.desyn.io/etf/defillama/get_pool_list?strategy_type=${strategy_type}`) + return data.data.config[chain]?.safePools +} + +// This is aSTETH, +// before the design of the semi-closed soETH, +// the contract in order to limit the closure of the time, +// the user can still deposit, +// so he was given a maximum value of the balance, +// which will become negative after adding any number, blocking the user to put in +const leverageStaking = '0x1982b2F5814301d4e9a8b0201555376e62F82428' + + +function getTvlFunction(strategy_type, isDoubleCounted) { + return async (api) => { + const pools = await getInfoListPool(strategy_type, api.chain) + if (!pools?.length) return; + const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools }) + const calls = [] + const tokensAndOwners = [] + const allTokens = [] + let i = 0 + + for (const pool of pools) { + for (const token of tokens[i]) { + if (!isDoubleCounted) { + tokensAndOwners.push([token, pool]) + } else { + calls.push({ target: pool, params: token }) + allTokens.push(token) + } + } + i++ + } + + if (!isDoubleCounted) return api.sumTokens({ tokensAndOwners }) + + const allBals = await api.multiCall({ abi: abi.getBalance, calls }) + api.add(allTokens, allBals) + + if (strategy_type === 'StrategyType2') + api.removeTokenBalance(leverageStaking) + } +} + + +module.exports = { + getTvlFunction, + chains +} \ No newline at end of file diff --git a/projects/desyn-farm/index.js b/projects/desyn-farm/index.js index b87569fa86..07add1a91d 100644 --- a/projects/desyn-farm/index.js +++ b/projects/desyn-farm/index.js @@ -1,44 +1,16 @@ -const { getLogs } = require('../helper/cache/getLogs') +const { getTvlFunction, chains } = require("./helper"); module.exports = { - doublecounted: true, - methodology: 'On-chain restaking', + hallmarks: [ + [1719734400, "Launched on Merlin Chain"], + [1718092800, "DeSyn KelpDAO Restaking Fund Launched"], + [1713340800, "Restaking Fund Series Launched"] + ], + methodology: 'Focused on airdrops from DeSyn and new chains.', } -const config = { - merlin: { factory: '0x790b4ee7998A93702f29e56f8b615eF35BE5af43', fromBlock: 11260440}, -} - -const abi = { - getBalance: "function getBalance(address) view returns (uint256)" -} - -Object.keys(config).forEach(chain => { - const {factory, fromBlock, } = config[chain] +chains.forEach(chain => { module.exports[chain] = { - tvl: async (api) => { - const logs = await getLogs({ - api, - target: factory, - eventAbi: 'event LOG_NEW_POOL (address indexed caller, address indexed pool)', - onlyArgs: true, - fromBlock, - }) - - const pools = logs.map(i=>i.pool) - const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools}) - const calls = [] - const allTokens = [] - let i = 0 - for (const pool of pools) { - for (const token of tokens[i]) { - calls.push({ target: pool, params: token }) - allTokens.push(token) - } - i++ - } - const allBals = await api.multiCall({ abi: abi.getBalance, calls }) - api.add(allTokens, allBals) - } + tvl: getTvlFunction('StrategyType1', false) } }) \ No newline at end of file diff --git a/projects/desyn-farm1/index.js b/projects/desyn-farm1/index.js deleted file mode 100644 index ace2e44e89..0000000000 --- a/projects/desyn-farm1/index.js +++ /dev/null @@ -1,48 +0,0 @@ -const { getLogs } = require('../helper/cache/getLogs') - -module.exports = { - methodology: 'On-chain restaking', - doublecounted: true -} - -const config = { - btr: { factory: '0x09eFC8C8F08B810F1F76B0c926D6dCeb37409665', fromBlock: 2393247 }, - mode: { factory: '0x09Dfee598d5217da799bEAd56206beC0fDB0D17B', fromBlock: 9912410 }, - zklink: { factory: '0xCCA610644f19d7d8f96b90a896B160f54cBE3204', fromBlock: 4734230 }, - core: { factory: '0x5C3027D8Cb28A712413553206A094213337E88c5', fromBlock: 17552799 } - -} - -const abi = { - getBalance: "function getBalance(address) view returns (uint256)" -} - -Object.keys(config).forEach(chain => { - const { factory, fromBlock, } = config[chain] - module.exports[chain] = { - tvl: async (api) => { - const logs = await getLogs({ - api, - target: factory, - eventAbi: 'event LOG_NEW_POOL (address indexed caller, address indexed pool)', - onlyArgs: true, - fromBlock, - }) - - const pools = logs.map(i => i.pool) - const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools }) - const calls = [] - const allTokens = [] - let i = 0 - for (const pool of pools) { - for (const token of tokens[i]) { - calls.push({ target: pool, params: token }) - allTokens.push(token) - } - i++ - } - const allBals = await api.multiCall({ abi: abi.getBalance, calls }) - api.add(allTokens, allBals) - } - } -}) \ No newline at end of file diff --git a/projects/desyn-yieldAggregator/index.js b/projects/desyn-yieldAggregator/index.js new file mode 100644 index 0000000000..835f12569b --- /dev/null +++ b/projects/desyn-yieldAggregator/index.js @@ -0,0 +1,12 @@ +const { getTvlFunction, chains } = require("../desyn-farm/helper"); + +module.exports = { + doublecounted: true, + methodology: 'Engages with DeFi protocols like Lending, DEX, and Restaking, offering both airdrops and structured yield options.', +} + +chains.forEach(chain => { + module.exports[chain] = { + tvl: getTvlFunction('StrategyType2', true) + } +}) \ No newline at end of file diff --git a/projects/desyn/index.js b/projects/desyn/index.js deleted file mode 100644 index a2fbc83e3e..0000000000 --- a/projects/desyn/index.js +++ /dev/null @@ -1,39 +0,0 @@ -const sdk = require('@defillama/sdk') -const { getLogs } = require('../helper/cache/getLogs') - -module.exports = { - doublecounted: true, - hallmarks: [ - [1719734400, "Launched on Merlin Chain"], - ], - methodology: 'Liquid restaking strategy', -} - -const config = { - ethereum: { factory: '0x01a38B39BEddCD6bFEedBA14057E053cBF529cD2', fromBlock: 17335174}, - arbitrum: { factory: '0xdE6b117384452b21F5a643E56952593B88110e78', fromBlock: 175985457}, - //merlin chain is tracked under a new listing for farm - // merlin: { factory: '0x790b4ee7998A93702f29e56f8b615eF35BE5af43', fromBlock: 11260440}, - //bitlayer chain is tracked under a new listing for farm - // btr: { factory: '0x09eFC8C8F08B810F1F76B0c926D6dCeb37409665', fromBlock: 2393247}, -} - -Object.keys(config).forEach(chain => { - const {factory, fromBlock, } = config[chain] - - module.exports[chain] = { - tvl: async (api) => { - const logs = await getLogs({ - api, - target: factory, - eventAbi: 'event LOG_NEW_POOL (address indexed caller, address indexed pool)', - onlyArgs: true, - fromBlock, - }) - - const pools = logs.map(i=>i.pool) - const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools}) - return api.sumTokens({ ownerTokens: tokens.map((tokens, i) => [tokens, pools[i]])}) - } - } -}) \ No newline at end of file From 0791ac874f322371d176be21862ec94896ea74f2 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 8 Nov 2024 15:24:27 +0100 Subject: [PATCH 0974/1768] [WIP] -Fix: Maker (#12211) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/maker-rwa/index.js | 224 ++++++++++-------------------------- projects/maker/index.js | 224 ++++++++++-------------------------- 2 files changed, 118 insertions(+), 330 deletions(-) diff --git a/projects/maker-rwa/index.js b/projects/maker-rwa/index.js index d25b128706..e1f80c3b05 100644 --- a/projects/maker-rwa/index.js +++ b/projects/maker-rwa/index.js @@ -1,185 +1,79 @@ const ADDRESSES = require('../helper/coreAssets.json') -// const utils = require('web3-utils'); -const sdk = require('@defillama/sdk'); -const MakerSCDConstants = require("../maker/abis/makerdao.js"); -const MakerMCDConstants = require("../maker/abis/maker-mcd.js"); -const { sumTokens2 } = require('../helper/unwrapLPs') -const { getLogs } = require('../helper/cache/getLogs') +const { getLogs2 } = require('../helper/cache/getLogs') -async function getJoins(block, api) { - // let rely = utils.sha3("rely(address)").substr(0, 10); - // let relyTopic = utils.padRight(rely, 64); - let relyTopic = '0x65fae35e00000000000000000000000000000000000000000000000000000000' +const MCD_VAT = '0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b' +const VAT_topic = '0x65fae35e00000000000000000000000000000000000000000000000000000000' +const START_VAT_BLOCK = 8928152 - let joins = []; - let failed = []; - const failedSet = new Set(failedJoins) +const MCD_DOG = '0x135954d155898d42c90d2a57824c690e0c7bef1b' +const DOG_topic = '0x4ff2caaa972a7c6629ea01fae9c93d73cc307d13ea4c369f9bbbb7f9b7e9461d' +const START_DOG_BLOCK = 12317310 - // get list of auths - const auths = ( - await getLogs({ - api, - target: MakerMCDConstants.VAT, - fromBlock: MakerMCDConstants.STARTBLOCK, - topics: [relyTopic], - }) - ).map(i => `0x${i.topics[1].substr(26)}`).filter(i => !failedSet.has(i)) - - const ilks = await api.multiCall({ - abi: MakerMCDConstants.ilk, - calls: auths, - permitFailure: true, - }); +const abi = { + ilk: 'function ilk() view returns (bytes32)', + ilks: 'function ilks (bytes32) view returns (uint256 art, uint256 rate, uint256 spot, uint256 line,uint256 dust)', + gem: "address:gem", + dog: "address:dog", +} - ilks.forEach((_, i) => { - const token = auths[i].toLowerCase() - if (_) joins.push(token) - else failed.push(token) +const getJoins = async (api) => { + const logs = (await getLogs2({ api, target: MCD_VAT, fromBlock: START_VAT_BLOCK, topics: [VAT_topic] })).map(log => { + return '0x' + log.topics[1].slice(-40); }) - if (failed.length) sdk.log('failed', failed) - - return joins; + const ilks = await api.multiCall({ abi: abi.ilk, calls: logs, permitFailure: true }) + + return logs.map((auth, i) => { + const ilk = ilks[i]; + if (!ilk) return null + return auth.toLowerCase(); + }).filter(Boolean); } -async function tvl(api) { - const block = api.block - let toa = [] - - const blacklistedJoins = [ - '0x7b3799b30f268ba55f926d7f714a3001af89d359', - '0x41ca7a7aa2be78cf7cb80c0f4a9bdfbc96e81815', - ] - if (block > MakerMCDConstants.STARTBLOCK) { - let joins = await getJoins(block, api); - const dogSet = new Set(dogs) - joins = joins.filter(i => !blacklistedJoins.includes(i) && !dogSet.has(i)) - - const { output: gems } = await sdk.api.abi.multiCall({ - abi: MakerMCDConstants.gem, - block, calls: joins.map(i => ({ target: i })), - permitFailure: true, - }) - const dogCalls = dogs.map(i => ({ target: i })) - - gems.forEach(({ success, output, input: { target } }) => { - target = target.toLowerCase() - if (!success) { - dogCalls.push({ target }) - return; - } - - toa.push([output, target]) - }) - - const { output: dogRes } = await sdk.api.abi.multiCall({ - abi: MakerMCDConstants.dog, - calls: dogCalls, block, - permitFailure: true, - }) - - const failedCalls = dogRes.filter(i => !i.success) - if (failedCalls.length) { - failedCalls.forEach(i => sdk.log('Failed both gem and dog calls', i.input.target)) - throw new Error('Failed both gem and dog calls') - } - } +const getDogs = async (api) => { + const logs = (await getLogs2({ api, target: MCD_DOG, fromBlock: START_DOG_BLOCK, topics: [DOG_topic], })).map(log => { + return '0x' + log.data.slice(-40); + }) - toa = toa.filter(i => i[0].toLowerCase() !== ADDRESSES.ethereum.SAI.toLowerCase()) - const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: toa.map(t => t[0]) }) + const dogs = await api.multiCall({ abi: abi.dog, calls: logs, permitFailure: true }) + + return logs.map((auth, i) => { + const dog = dogs[i]; + if (!dog) return null + return auth.toLowerCase(); + }).filter(Boolean); +} - const owners = [] - toa.map((_, i) => { - if (!symbols[i].startsWith('RWA')) return; - owners.push(toa[i][1]) - }) - const ilks = await api.multiCall({ abi: 'function ilk() view returns (bytes32)', calls: owners }) - const res = await api.multiCall({ abi: 'function ilks (bytes32) view returns (uint256 art, uint256 rate, uint256 spot, uint256 line,uint256 dust)', calls:ilks, target:'0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B' }) +const tvl = async (api) => { + const [joins/*, dogs*/] = await Promise.all([ + getJoins(api), + // getDogs(api) + ]) + + const tokens = await api.multiCall({ abi: abi.gem, calls: joins, permitFailure: true }) + + let toas = joins.map((join, i) => { + const token = tokens[i]; + if (!token) return null + return [token, join] + }).filter(Boolean) + + toas = toas.filter(i => i[0].toLowerCase() !== ADDRESSES.ethereum.SAI.toLowerCase()) + const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: toas.map(t => t[0]) }) + const owners = toas.map((toa, i) => { + if (!symbols[i].startsWith('RWA')) return null + return toa[1] + }).filter(Boolean) + + const ilks = await api.multiCall({ abi: abi.ilk, calls: owners }) + const res = await api.multiCall({ abi: abi.ilks, calls: ilks, target:'0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B' }) res.forEach(i => api.add(ADDRESSES.ethereum.DAI, i.art)) - - return api.getBalances() } module.exports = { - methodology: `Counts all the tokens being used as collateral of CDPs. - - On the technical level, we get all the collateral tokens by fetching events, get the amounts locked by calling balanceOf() directly, unwrap any uniswap LP tokens and then get the price of each token from coingecko`, + methodology: `Counts all the tokens being used as collateral of CDPs. On the technical level, we get all the collateral tokens by fetching events, get the amounts locked by calling balanceOf() directly, unwrap any uniswap LP tokens and then get the price of each token from coingecko`, start: 1513566671, // 12/18/2017 @ 12:00am (UTC) ethereum: { tvl }, }; - -const dogs = [ - '0x832dd5f17b30078a5e46fdb8130a68cbc4a74dc0', - '0x9dacc11dcd0aa13386d295eaeebbd38130897e6f', - '0xc67963a226eddd77b91ad8c421630a1b0adff270', - '0x71eb894330e8a4b96b8d6056962e7f116f50e06f', - '0xc2b12567523e3f3cbd9931492b91fe65b240bc47', - '0x0227b54adbfaeec5f1ed1dfa11f54dcff9076e2c', - '0x3d22e6f643e2f4c563fd9db22b229cbb0cd570fb', - '0xdc90d461e148552387f3ab3ebee0bdc58aa16375', - '0x006aa3eb5e666d8e006aa647d4afab212555ddea', - '0xf5c8176e1eb0915359e46ded16e52c071bb435c0', - '0x2bb690931407dca7ece84753ea931ffd304f0f38', - '0x81c5cdf4817dbf75c7f08b8a1cdab05c9b3f70f7', - '0x6aac067bb903e633a422de7be9355e62b3ce0378', - '0x3713f83ee6d138ce191294c131148176015bc29a', - '0x834719bea8da68c46484e001143bdde29370a6a3', - '0x8723b74f598de2ea49747de5896f9034cc09349e', - '0x9f6981ba5c77211a34b76c6385c0f6fa10414035', - '0x93ae03815baf1f19d7f18d9116e4b637cc32a131', - '0x2ac4c9b49051275acb4c43ec973082388d015d48', - '0x4fc53a57262b87abda61d6d0db2be7e9be68f6b8', - '0xb15afab996904170f87a64fe42db0b64a6f75d24', - '0x6aa0520354d1b84e1c6abfe64a708939529b619e', - '0xb0ece6f5542a4577e2f1be491a937ccbbec8479e', - '0x854b252ba15eafa4d1609d3b98e00cc10084ec55', - '0xe4b82be84391b9e7c56a1fc821f47569b364dd4a', - '0x046b1a5718da6a226d912cfd306ba19980772908', - '0x5590f23358fe17361d7e4e4f91219145d8ccfcb3', - '0x0f6f88f8a4b918584e3539182793a0c276097f44', - '0xfc9d6dd08bee324a5a8b557d2854b9c36c2aec5d', - '0xbcb396cd139d1116bd89562b49b9d1d6c25378b0', - '0xa47d68b9db0a0361284fa04ba40623fcbd1a263e', - '0x66609b4799fd7ce12ba799ad01094abd13d5014d', - '0x9b3310708af333f6f379fa42a5d09cbaa10ab309', - '0x5322a3551bc6a1b39d5d142e5e38dc5b4bc5b3d2', - '0x29342f530ed6120bdb219d602dafd584676293d1', - '0x5048c5cd3102026472f8914557a1fd35c8dc6c9e', - '0x49a33a28c4c7d9576ab28898f4c9ac7e52ea457a', - '0xa93b98e57dde14a3e301f20933d59dc19bf8212e', - '0xe30663c6f83a06edee6273d72274ae24f1084a22', - '0x39f29773dcb94a32529d0612c6706c49622161d1', - '0xf93cc3a50f450ed245e003bfecc8a6ec1732b0b2', - '0xb55da3d3100c4ebf9de755b6ddc24bf209f6cc06', - '0x1926862f899410bfc19fefb8a3c69c7aed22463a', - '0x3ea60191b7d5990a3544b6ef79983fd67e85494a', - '0x27ca5e525ea473ed52ea9423cd08ccc081d96a98', - '0xd9e758bd239e5d568f44d0a748633f6a8d52cbbb', -] - -const failedJoins = [ - '0xbaa65281c2fa2baacb2cb550ba051525a480d3f4', - '0x65c79fcb50ca1594b025960e539ed7a9a6d434a3', - '0x19c0976f590d67707e62397c87829d896dc0f1f1', - '0x197e90f9fad81970ba7976f33cbd77088e5d7cf7', - '0x78f2c2af65126834c51822f56be0d7469d7a523e', - '0xab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d5', - '0xbe8e3e3618f7474f8cb1d074a26affef007e98fb', - '0x4d95a049d5b0b7d32058cd3f2163015747522e99', - '0xa41b6ef151e06da0e34b009b86e828308986736d', - '0xa5679c04fc3d9d8b0aab1f0ab83555b301ca70ea', - '0xc7bdd1f2b16447dcf3de045c4a039a60ec2f0ba3', - '0x88f88bb9e66241b73b84f3a6e197fbba487b1e30', - '0xbb856d1742fd182a90239d7ae85706c2fe4e5922', - '0x29cfbd381043d00a98fd9904a431015fef07af2f', - '0x135954d155898d42c90d2a57824c690e0c7bef1b', - '0x1eb4cf3a948e7d72a198fe073ccb8c7a948cd853', - '0x2cc583c0aacdac9e23cb601fda8f1a0c56cdcb71', - '0x09e05ff6142f2f9de8b6b65855a1d56b6cfe4c58', - '0xa4c22f0e25c6630b2017979acf1f865e94695c4b', - '0x0e2e8f1d1326a4b9633d96222ce399c708b19c28', - '0x60744434d6339a6b27d73d9eda62b6f66a0a04fa', - '0x12f36cdea3a28c35ac8c6cc71d9265c17c74a27f', -] diff --git a/projects/maker/index.js b/projects/maker/index.js index 3775e50cd2..d50414d7c7 100644 --- a/projects/maker/index.js +++ b/projects/maker/index.js @@ -1,103 +1,73 @@ const ADDRESSES = require('../helper/coreAssets.json') -// const utils = require('web3-utils'); -const sdk = require('@defillama/sdk'); -const MakerSCDConstants = require("./abis/makerdao.js"); -const MakerMCDConstants = require("./abis/maker-mcd.js"); +const { getLogs2 } = require('../helper/cache/getLogs') const { sumTokens2 } = require('../helper/unwrapLPs') -const { getLogs } = require('../helper/cache/getLogs') -async function getJoins(block, api) { - // let rely = utils.sha3("rely(address)").substr(0, 10); - // let relyTopic = utils.padRight(rely, 64); - let relyTopic = '0x65fae35e00000000000000000000000000000000000000000000000000000000' +const MCD_VAT = '0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b' +const VAT_topic = '0x65fae35e00000000000000000000000000000000000000000000000000000000' +const START_VAT_BLOCK = 8928152 - let joins = []; - let failed = []; - const failedSet = new Set(failedJoins) +const MCD_DOG = '0x135954d155898d42c90d2a57824c690e0c7bef1b' +const DOG_topic = '0x4ff2caaa972a7c6629ea01fae9c93d73cc307d13ea4c369f9bbbb7f9b7e9461d' +const START_DOG_BLOCK = 12317310 - // get list of auths - const auths = ( - await getLogs({ - api, - target: MakerMCDConstants.VAT, - fromBlock: MakerMCDConstants.STARTBLOCK, - topics: [relyTopic], - }) - ).map(i => `0x${i.topics[1].substr(26)}`).filter(i => !failedSet.has(i)) - - const ilks = await api.multiCall({ - abi: MakerMCDConstants.ilk, - calls: auths, - permitFailure: true, - }); +const abi = { + ilk: "function ilk() view returns (bytes32)", + gem: "address:gem", + Pie: "uint256:Pie", + dog: "address:dog", +} - ilks.forEach((_, i) => { - const token = auths[i].toLowerCase() - if (_) joins.push(token) - else failed.push(token) +const getJoins = async (api) => { + const logs = (await getLogs2({ api, target: MCD_VAT, fromBlock: START_VAT_BLOCK, topics: [VAT_topic] })).map(log => { + return '0x' + log.topics[1].slice(-40); }) - if (failed.length) sdk.log('failed', failed) - - return joins; + const ilks = await api.multiCall({ abi: abi.ilk, calls: logs, permitFailure: true }) + + return logs.map((auth, i) => { + const ilk = ilks[i]; + if (!ilk) return null + return auth.toLowerCase(); + }).filter(Boolean); } -async function tvl(api) { - const block = api.block - let toa = [ - [MakerSCDConstants.WETH_ADDRESS, MakerSCDConstants.TUB_ADDRESS,], - ] - - const blacklistedJoins = [ - '0x7b3799b30f268ba55f926d7f714a3001af89d359', - '0x41ca7a7aa2be78cf7cb80c0f4a9bdfbc96e81815', - ] - if (block > MakerMCDConstants.STARTBLOCK) { - let joins = await getJoins(block, api); - const dogSet = new Set(dogs) - joins = joins.filter(i => !blacklistedJoins.includes(i) && !dogSet.has(i)) - - const { output: gems } = await sdk.api.abi.multiCall({ - abi: MakerMCDConstants.gem, - block, calls: joins.map(i => ({ target: i })), - permitFailure: true, - }) - const dogCalls = dogs.map(i => ({ target: i })) - - gems.forEach(({ success, output, input: { target } }) => { - target = target.toLowerCase() - if (!success) { - dogCalls.push({ target }) - return; - } +const getDogs = async (api) => { + const logs = (await getLogs2({ api, target: MCD_DOG, fromBlock: START_DOG_BLOCK, topics: [DOG_topic], skipCache: true, skipCacheRead: true })).map(log => { + return '0x' + log.data.slice(-40); + }) - toa.push([output, target]) - }) + const dogs = await api.multiCall({ abi: abi.dog, calls: logs, permitFailure: true }) + + return logs.map((auth, i) => { + const dog = dogs[i]; + if (!dog) return null + return auth.toLowerCase(); + }).filter(Boolean); +} - const { output: dogRes } = await sdk.api.abi.multiCall({ - abi: MakerMCDConstants.dog, - calls: dogCalls, block, - permitFailure: true, - }) +const tvl = async (api) => { + const [joins/*, dogs*/] = await Promise.all([ + getJoins(api), + // getDogs(api) + ]) - const failedCalls = dogRes.filter(i => !i.success) - if (failedCalls.length) { - failedCalls.forEach(i => sdk.log('Failed both gem and dog calls', i.input.target)) - throw new Error('Failed both gem and dog calls') - } - } + const tokens = await api.multiCall({ abi: abi.gem, calls: joins, permitFailure: true }) - toa = toa.filter(i => i[0].toLowerCase() !== ADDRESSES.ethereum.SAI.toLowerCase()) - const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: toa.map(t => t[0]) }) - const gUNIToa = toa.filter((_, i) => symbols[i] === 'G-UNI') - toa = toa.filter((_, i) => symbols[i] !== 'G-UNI' && !symbols[i].startsWith('RWA')) + let toas = joins.map((join, i) => { + const token = tokens[i]; + if (!token) return null + return [token, join] + }).filter(Boolean) - const balances = await sumTokens2({ api, tokensAndOwners: toa, resolveLP: true, }) - await unwrapGunis({ api, toa: gUNIToa, balances, }) - return balances + toas = toas.filter(i => i[0].toLowerCase() !== ADDRESSES.ethereum.SAI.toLowerCase()) + const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: toas.map(([token]) => token) }) + const gUNIToa = toas.filter((_, i) => symbols[i] === 'G-UNI') + toas = toas.filter((_, i) => symbols[i] !== 'G-UNI' && !symbols[i].startsWith('RWA')) + await unwrapGunis({ api, toa: gUNIToa, }) + return sumTokens2({ api, tokensAndOwners: toas, resolveLP: true}) } -async function unwrapGunis({ api, toa, balances = {} }) { +async function unwrapGunis({ api, toa, }) { const lps = toa.map(i => i[0]) const balanceOfCalls = toa.map(t => ({ params: t[1], target: t[0] })) const [ @@ -114,93 +84,17 @@ async function unwrapGunis({ api, toa, balances = {} }) { const ratio = bal / supplies[i] const token0Bal = uBalances[i][0] * ratio const token1Bal = uBalances[i][1] * ratio - sdk.util.sumSingleBalance(balances, token0s[i], token0Bal) - sdk.util.sumSingleBalance(balances, token1s[i], token1Bal) + api.add(token0s[i], token0Bal) + api.add(token1s[i], token1Bal) }) - sdk.util.removeTokenBalance(balances, ADDRESSES.ethereum.DAI) // remove dai balances - return balances + api.removeTokenBalance(ADDRESSES.ethereum.DAI) // remove dai balances } + module.exports = { - methodology: `Counts all the tokens being used as collateral of CDPs. - - On the technical level, we get all the collateral tokens by fetching events, get the amounts locked by calling balanceOf() directly, unwrap any uniswap LP tokens and then get the price of each token from coingecko`, + methodology: `Counts all the tokens being used as collateral of CDPs. On the technical level, we get all the collateral tokens by fetching events, get the amounts locked by calling balanceOf() directly, unwrap any uniswap LP tokens and then get the price of each token from coingecko`, start: 1513566671, // 12/18/2017 @ 12:00am (UTC) ethereum: { tvl }, -}; - -const dogs = [ - '0x832dd5f17b30078a5e46fdb8130a68cbc4a74dc0', - '0x9dacc11dcd0aa13386d295eaeebbd38130897e6f', - '0xc67963a226eddd77b91ad8c421630a1b0adff270', - '0x71eb894330e8a4b96b8d6056962e7f116f50e06f', - '0xc2b12567523e3f3cbd9931492b91fe65b240bc47', - '0x0227b54adbfaeec5f1ed1dfa11f54dcff9076e2c', - '0x3d22e6f643e2f4c563fd9db22b229cbb0cd570fb', - '0xdc90d461e148552387f3ab3ebee0bdc58aa16375', - '0x006aa3eb5e666d8e006aa647d4afab212555ddea', - '0xf5c8176e1eb0915359e46ded16e52c071bb435c0', - '0x2bb690931407dca7ece84753ea931ffd304f0f38', - '0x81c5cdf4817dbf75c7f08b8a1cdab05c9b3f70f7', - '0x6aac067bb903e633a422de7be9355e62b3ce0378', - '0x3713f83ee6d138ce191294c131148176015bc29a', - '0x834719bea8da68c46484e001143bdde29370a6a3', - '0x8723b74f598de2ea49747de5896f9034cc09349e', - '0x9f6981ba5c77211a34b76c6385c0f6fa10414035', - '0x93ae03815baf1f19d7f18d9116e4b637cc32a131', - '0x2ac4c9b49051275acb4c43ec973082388d015d48', - '0x4fc53a57262b87abda61d6d0db2be7e9be68f6b8', - '0xb15afab996904170f87a64fe42db0b64a6f75d24', - '0x6aa0520354d1b84e1c6abfe64a708939529b619e', - '0xb0ece6f5542a4577e2f1be491a937ccbbec8479e', - '0x854b252ba15eafa4d1609d3b98e00cc10084ec55', - '0xe4b82be84391b9e7c56a1fc821f47569b364dd4a', - '0x046b1a5718da6a226d912cfd306ba19980772908', - '0x5590f23358fe17361d7e4e4f91219145d8ccfcb3', - '0x0f6f88f8a4b918584e3539182793a0c276097f44', - '0xfc9d6dd08bee324a5a8b557d2854b9c36c2aec5d', - '0xbcb396cd139d1116bd89562b49b9d1d6c25378b0', - '0xa47d68b9db0a0361284fa04ba40623fcbd1a263e', - '0x66609b4799fd7ce12ba799ad01094abd13d5014d', - '0x9b3310708af333f6f379fa42a5d09cbaa10ab309', - '0x5322a3551bc6a1b39d5d142e5e38dc5b4bc5b3d2', - '0x29342f530ed6120bdb219d602dafd584676293d1', - '0x5048c5cd3102026472f8914557a1fd35c8dc6c9e', - '0x49a33a28c4c7d9576ab28898f4c9ac7e52ea457a', - '0xa93b98e57dde14a3e301f20933d59dc19bf8212e', - '0xe30663c6f83a06edee6273d72274ae24f1084a22', - '0x39f29773dcb94a32529d0612c6706c49622161d1', - '0xf93cc3a50f450ed245e003bfecc8a6ec1732b0b2', - '0xb55da3d3100c4ebf9de755b6ddc24bf209f6cc06', - '0x1926862f899410bfc19fefb8a3c69c7aed22463a', - '0x3ea60191b7d5990a3544b6ef79983fd67e85494a', - '0x27ca5e525ea473ed52ea9423cd08ccc081d96a98', - '0xd9e758bd239e5d568f44d0a748633f6a8d52cbbb', -] - -const failedJoins = [ - '0xbaa65281c2fa2baacb2cb550ba051525a480d3f4', - '0x65c79fcb50ca1594b025960e539ed7a9a6d434a3', - '0x19c0976f590d67707e62397c87829d896dc0f1f1', - '0x197e90f9fad81970ba7976f33cbd77088e5d7cf7', - '0x78f2c2af65126834c51822f56be0d7469d7a523e', - '0xab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d5', - '0xbe8e3e3618f7474f8cb1d074a26affef007e98fb', - '0x4d95a049d5b0b7d32058cd3f2163015747522e99', - '0xa41b6ef151e06da0e34b009b86e828308986736d', - '0xa5679c04fc3d9d8b0aab1f0ab83555b301ca70ea', - '0xc7bdd1f2b16447dcf3de045c4a039a60ec2f0ba3', - '0x88f88bb9e66241b73b84f3a6e197fbba487b1e30', - '0xbb856d1742fd182a90239d7ae85706c2fe4e5922', - '0x29cfbd381043d00a98fd9904a431015fef07af2f', - '0x135954d155898d42c90d2a57824c690e0c7bef1b', - '0x1eb4cf3a948e7d72a198fe073ccb8c7a948cd853', - '0x2cc583c0aacdac9e23cb601fda8f1a0c56cdcb71', - '0x09e05ff6142f2f9de8b6b65855a1d56b6cfe4c58', - '0xa4c22f0e25c6630b2017979acf1f865e94695c4b', - '0x0e2e8f1d1326a4b9633d96222ce399c708b19c28', - '0x60744434d6339a6b27d73d9eda62b6f66a0a04fa', - '0x12f36cdea3a28c35ac8c6cc71d9265c17c74a27f', -] +}; \ No newline at end of file From 9f6d22772a1fa35d75b4aef11f082dab38c64589 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 8 Nov 2024 15:50:54 +0000 Subject: [PATCH 0975/1768] add wallets --- projects/treasury/op-foundation.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/treasury/op-foundation.js b/projects/treasury/op-foundation.js index 8b0283756d..908dea7ea3 100644 --- a/projects/treasury/op-foundation.js +++ b/projects/treasury/op-foundation.js @@ -2,6 +2,10 @@ const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x2501c477d0a35545a387aa4a3eee4292a9a8b3f0"; +const treasury2 = "0xfedfaf1a10335448b7fa0268f56d2b44dbd357de"; +const treasury3 = "0x2a82ae142b2e62cb7d10b55e323acb1cab663a26"; +const treasury4 = "0x19793c7824be70ec58bb673ca42d2779d12581be"; + const OP = ADDRESSES.optimism.OP module.exports = treasuryExports({ @@ -10,7 +14,7 @@ module.exports = treasuryExports({ nullAddress, ADDRESSES.optimism.USDC ], - owners: [treasury], + owners: [treasury,treasury2,treasury3,treasury4], ownTokens: [OP], }, ethereum: { From f009c9a606eb01871e06bf8aa9dbe34e2066fb41 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 8 Nov 2024 16:01:49 +0000 Subject: [PATCH 0976/1768] add wallet --- projects/treasury/safe.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/treasury/safe.js b/projects/treasury/safe.js index 47ddb3f1ac..61b6a539bf 100644 --- a/projects/treasury/safe.js +++ b/projects/treasury/safe.js @@ -5,6 +5,7 @@ const treasury = "0x3EDf6868d7c42863E44072DaEcC16eCA2804Dea1" // const SAFE = ADDRESSES.ethereum.SAFE const safe_foundation_treasury = "0x1d4f25bc16b68c50b78e1040bc430a8097fd6f45" const safe_dao_2 = "0x0b00b3227a5f3df3484f03990a87e02ebad2f888" +const safe_gnosisdao_joint_treasury = "0xd28b432f06cb64692379758B88B5fCDFC4F56922" module.exports = treasuryExports({ @@ -19,7 +20,7 @@ module.exports = treasuryExports({ tokens: [ nullAddress, ], - owners: [safe_foundation_treasury, safe_dao_2], + owners: [safe_foundation_treasury, safe_dao_2,safe_gnosisdao_joint_treasury], ownTokens: [SAFE], }, From b19b41f8e7d131908562b2e57ea2a38ebe5201dd Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 8 Nov 2024 20:03:00 +0100 Subject: [PATCH 0977/1768] Fix: Velvet v3 (#12213) --- projects/velvet-capital-v3/index.js | 46 ++++++++++++----------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js index e5d4f0f52c..532cba5dc3 100644 --- a/projects/velvet-capital-v3/index.js +++ b/projects/velvet-capital-v3/index.js @@ -1,38 +1,30 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') -async function tvl(api) { - const indexes = await api.fetchList({ lengthAbi: 'uint256:portfolioId', itemAbi: 'function getPortfolioList(uint256) view returns (address)', target: config[api.chain] }) - const [tokens, vaults] = await Promise.all([ - api.multiCall({ abi: 'address[]:getTokens', calls: indexes }), - api.multiCall({ abi: 'address:vault', calls: indexes }), - ]) - - const blacklistsByChain = { - base: [ - ADDRESSES.bsc.USDT - ], - bsc: [ - ADDRESSES.optimism.WETH_1 - ] - } +const config = { + base: { address: '0xf93659fb357899e092813bc3a2959ceDb3282a7f', blacklistedTokens: [ADDRESSES.bsc.USDT, "0x96af5739ca66ca55ab71ac9f308720d5044995ee"] }, + bsc: { address: '0xA1fe1C37Bf899C7F7521082C002dFA4fEbAaA8dd', blacklistedTokens: [ADDRESSES.optimism.WETH_1] } +} - const blacklistedTokens = blacklistsByChain[api.chain] || [] +const abi = { + getTokens: 'address[]:getTokens', + vault: 'address:vault' +} +async function tvl(api, address, blacklistedTokens) { + const indexes = await api.fetchList({ lengthAbi: 'uint256:portfolioId', itemAbi: 'function getPortfolioList(uint256) view returns (address)', target: address }) + const [tokens, vaults] = await Promise.all([ + api.multiCall({ abi: abi.getTokens, calls: indexes }), + api.multiCall({ abi: abi.vault, calls: indexes }), + ]) - const ownerTokens = tokens.map((tokens, i) => [tokens, vaults[i]]); + const ownerTokens = vaults.map((vault, i) => ([tokens[i], vault])) return sumTokens2({ api, ownerTokens, resolveLP: true, blacklistedTokens}); } -module.exports = { - methodology: 'calculates overall value deposited across different protocol portfolios', -} - -const config = { - base : '0xf93659fb357899e092813bc3a2959ceDb3282a7f', - bsc: '0xA1fe1C37Bf899C7F7521082C002dFA4fEbAaA8dd' -} +module.exports = { methodology: 'calculates overall value deposited across different protocol portfolios' } Object.keys(config).forEach(chain => { - module.exports[chain] = { tvl } -}) \ No newline at end of file + const { address, blacklistedTokens } = config[chain] + module.exports[chain] = { tvl: (api) => tvl(api, address, blacklistedTokens) } +}) From 92dc1ca0f4e8578b415075b74559e993912b67fe Mon Sep 17 00:00:00 2001 From: JSB Date: Fri, 8 Nov 2024 15:40:25 -0600 Subject: [PATCH 0978/1768] =?UTF-8?q?=F0=9F=A5=95=20added=20Carrot=20tvl?= =?UTF-8?q?=20adapter=20(#12205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/carrot/index.js | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 projects/carrot/index.js diff --git a/projects/carrot/index.js b/projects/carrot/index.js new file mode 100644 index 0000000000..181ce8bb9c --- /dev/null +++ b/projects/carrot/index.js @@ -0,0 +1,50 @@ +const { PublicKey } = require('@solana/web3.js'); +const { Program } = require("@project-serum/anchor"); +const { getConnection, getProvider, getTokenSupplies } = require('../helper/solana') + +async function tvl(api) { + + const connection = getConnection() + const programId = 'CarrotwivhMpDnm27EHmRLeQ683Z1PufuqEmBZvD282s' + const testVaultExclusion = '2AV35oWyAuSN5wmuy26VD5JirjVpXkfkv5ZMCQ2LtpuV' // our test vault should not be included in TVL + + // Use this method to track TVL via the token... + // const CRT_MINT = 'CRTx1JouZhzSU6XytsE42UQraoGqiHgxabocVfARTy2s'; + // await getTokenSupplies(CRT_MINT, {api}) + + // Use this method to track TVL via onchain state of each Vault by adding the balance at each strategy. + const programAccounts = await connection.getProgramAccounts(new PublicKey(programId), { + filters: [{ + memcmp: { + offset: 8, + bytes: 'CarrotLYPhQzYL4fEsTUvEzw5QDaMGSZUENHSkh7qzQa' // carrot keeper + }, + },] + }); + + const provider = getProvider(); + const idl = await Program.fetchIdl(programId, provider) + const program = new Program(idl, programId, provider) + + programAccounts.forEach(({ account, pubkey }, i) => { + if(pubkey.toBase58() !== testVaultExclusion) { + const { assets, strategies } = program.coder.accounts.decode( + "Vault", + account.data + ); + const assetMap = {} + assets.forEach(({assetId, mint }) => assetMap[assetId] = mint.toString()) + + strategies.forEach(i => { + api.add(assetMap[i.assetId], i.balance.toString()) + }) + } + }) +} + +module.exports = { + doublecounted: true, + timetravel: false, + methodology: 'TVL calculated by calling the onchain state of the CRT Vault accounts, and tallying the balance of each strategy.', + solana: { tvl }, +} From 4634af7df0a346a60db57a7e5791e7bd6c742ace Mon Sep 17 00:00:00 2001 From: Shyy Yuushin Date: Sat, 9 Nov 2024 14:21:05 +0800 Subject: [PATCH 0979/1768] update the contracts of Magma to v3 --- projects/magma/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/magma/index.js b/projects/magma/index.js index 944f4132a0..29431c6927 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -5,8 +5,8 @@ const sdk = require('@defillama/sdk') module.exports = { iotex: { tvl: sdk.util.sumChainTvls([ - getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), - getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435') + getLiquityTvl('0x4315BcE6076953571caf1903d15D682727FBD935'), + getLiquityTvl('0xFF5F4bA96586EDae7E7D838D8770dFB3376Ec245', { nonNativeCollateralToken: true, collateralToken: "0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894" }) ]), // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl }, From e57d8cefff92346c8d766cdb481f8239f06ace3c Mon Sep 17 00:00:00 2001 From: Octopus <156575930+gguuttss@users.noreply.github.com> Date: Sat, 9 Nov 2024 12:59:29 +0100 Subject: [PATCH 0980/1768] Add STAB Protocol adapter (#12218) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/stab-protocol/index.js | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 projects/stab-protocol/index.js diff --git a/projects/stab-protocol/index.js b/projects/stab-protocol/index.js new file mode 100644 index 0000000000..20e6b505c0 --- /dev/null +++ b/projects/stab-protocol/index.js @@ -0,0 +1,37 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const { queryAddresses, sumTokens } = require('../helper/chain/radixdlt'); + +const STAB_COMPONENT = "component_rdx1cq70cjajtvllgk9z9wm9l8v6w8hsgtlw530cdgpraxprn4yevg89kf"; +const STAB_XRD_POOL_XRD_VAULT = "internal_vault_rdx1trk04c3sxffatj5h78w3266c8q07cvjlgq0zx44sask8wsam4q8rup"; +const ORACLE_COMPONENT = "component_rdx1cq7zsdqfh0mcwnutrevkz6wtml0vnav5fcmtf7rksmhk48urkyjg9c"; + +async function tvl(api) { + //get the token amounts of collaterals used in the STAB Protocol + const stabComponentTokens = await sumTokens({ owners: [STAB_COMPONENT], api }) + const xrdAmount = stabComponentTokens['radixdlt:resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd'] + const lsuLpAmount = stabComponentTokens['radixdlt:resource_rdx1thksg5ng70g9mmy9ne7wz0sc7auzrrwy7fmgcxzel2gvp8pj0xxfmf'] + + //calculate value of LSULP against XRD to get accurate price data + const [{ details: { state } }] = await queryAddresses({ addresses: [ORACLE_COMPONENT] } ) + const xrdPrice = state.fields[0].elements[0].fields[1].value + const lsuLpPrice = state.fields[0].elements[1].fields[1].value + const lsuLpMultiplier = lsuLpPrice / xrdPrice + + //add XRD and LSULP values to tvl + api.add('resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd', xrdAmount + lsuLpAmount * lsuLpMultiplier) + + //get the amount of XRD in the protocol native STAB/XRD pool (with 50/50 weights) + const stabXrdPoolXrdVault = await queryAddresses({ addresses: [STAB_XRD_POOL_XRD_VAULT] }); + const xrdAmountPool = stabXrdPoolXrdVault[0].details.balance.amount; + + //add only XRD value of pool to tvl (STAB value is excluded as backing of STAB tokens are already included in tvl) + api.add('resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd', xrdAmountPool) +} + +module.exports = { + methodology: 'Calculates TVL using the amount of collateral locked to borrow STAB using CDPs, and amount of STAB and XRD locked in the protocol-native STAB/XRD pool.', + radixdlt: { tvl }, + misrepresentedTokens: true, + timetravel: false, +}; From ee7641cb5797f03ffef4001860c42e665c409150 Mon Sep 17 00:00:00 2001 From: Tony Date: Sat, 9 Nov 2024 20:00:49 +0800 Subject: [PATCH 0981/1768] Fix pumpbtc adapter(addresses of other chains not read properly) (#12217) --- projects/pumpbtc/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index 00073c974d..eae9d22a17 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -21,7 +21,7 @@ async function bitcoinTvl(api) { } async function otherTvl(api) { - const addresses = await getConfig('pumpbtc/v2', undefined, { fetcher: getStakingAddresses }) + const addresses = await getConfig('pumpbtc/v2-other', undefined, { fetcher: getStakingAddresses }) if (!addresses[api.chain]) { return; From 25e0795277d93c6bfed13c3a844660bebcd5a3c6 Mon Sep 17 00:00:00 2001 From: Si Yushin Date: Sat, 9 Nov 2024 20:02:05 +0800 Subject: [PATCH 0982/1768] Magma v3 (#12216) Co-authored-by: magmastone <152827065+magmastone@users.noreply.github.com> --- projects/magma/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/magma/index.js b/projects/magma/index.js index 944f4132a0..29431c6927 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -5,8 +5,8 @@ const sdk = require('@defillama/sdk') module.exports = { iotex: { tvl: sdk.util.sumChainTvls([ - getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), - getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435') + getLiquityTvl('0x4315BcE6076953571caf1903d15D682727FBD935'), + getLiquityTvl('0xFF5F4bA96586EDae7E7D838D8770dFB3376Ec245', { nonNativeCollateralToken: true, collateralToken: "0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894" }) ]), // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl }, From 88107559f704d97112b181235475442ef7493123 Mon Sep 17 00:00:00 2001 From: David Lee Date: Sat, 9 Nov 2024 07:03:18 -0500 Subject: [PATCH 0983/1768] Add additional reserve managers and tokens (#12215) --- projects/level-money/index.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/projects/level-money/index.js b/projects/level-money/index.js index 9eb0149786..d334733491 100644 --- a/projects/level-money/index.js +++ b/projects/level-money/index.js @@ -1,8 +1,16 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); +const AUSDC = '0x98C23E9d8f34FEFb1B7BD6a91B7FF122F4e16F5c'; +const AUSDT = '0x23878914EFE38d27C4D67Ab83ed1b93A74D4086a'; + +const LEVEL_WRAPPED_AUSDC = '0x78c6B27Be6DB520d332b1b44323F94bC831F5e33'; +const LEVEL_WRAPPED_AUSDT = '0xb723377679b807370Ae8615ae3E76F6D1E75a5F2'; + const LEVEL_STAKING_CONTRACT = '0x7FDA203f6F77545548E984133be62693bCD61497'; -const LEVEL_RESERVE_MANAGERS = ['0x70D544F75c2228D68EE04BC63e6e4Bae8F31fCEF']; +const LEVEL_RESERVE_MANAGERS = ['0x70D544F75c2228D68EE04BC63e6e4Bae8F31fCEF', '0x7B2c2C905184CEf1FABe920D4CbEA525acAa6f14']; +const LEVEL_WRAPPED_TOKENS = [LEVEL_WRAPPED_AUSDC, LEVEL_WRAPPED_AUSDT]; + const TOKEN_CONTRACTS = [ ADDRESSES.ethereum.USDT, // USDT @@ -11,17 +19,23 @@ const TOKEN_CONTRACTS = [ ADDRESSES.ethereum.SDAI, // sDAI ADDRESSES.ethereum.sUSDe, // sUSD ADDRESSES.ethereum.USDe, // USDe - "0x57f5e098cad7a3d1eed53991d4d66c45c9af7812", // wUSDM - "0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5", // USD0 + ADDRESSES.ethereum.FRAX, // FRAX + "0x0022228a2cc5E7eF0274A7Baa600d44da5aB5776", // stUSD + "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32", // sFRAX + "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32", // sFRAX + "0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812", // wUSDM + "0x73A15FeD60Bf67631dC6cd7Bc5B6e8da8190aCF5", // USD0 "0x35D8949372D46B7a3D5A56006AE77B215fc69bC0", // USD0++ - "0x15700b564ca08d9439c58ca5053166e8317aa138", // deUSD - "0x5c5b196abe0d54485975d1ec29617d42d9198326", // stdeUSD + "0x15700B564Ca08D9439C58cA5053166E8317aa138", // deUSD + "0x5C5b196aBE0d54485975D1Ec29617D42D9198326", // stdeUSD + AUSDC, + AUSDT, ]; module.exports = { ethereum: { tvl: sumTokensExport({ - owners: [LEVEL_STAKING_CONTRACT].concat(LEVEL_RESERVE_MANAGERS), + owners: [LEVEL_STAKING_CONTRACT, ...LEVEL_RESERVE_MANAGERS, ...LEVEL_WRAPPED_TOKENS], tokens: TOKEN_CONTRACTS, }), } From 95df8c63608efef94b7cc47c8666eb485c8efeb8 Mon Sep 17 00:00:00 2001 From: TheGreatAxios Date: Sat, 9 Nov 2024 04:23:05 -0800 Subject: [PATCH 0984/1768] Add SKALE IMA Bridge (Native) to SKALE TVL (#12214) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/skale/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/skale/index.js diff --git a/projects/skale/index.js b/projects/skale/index.js new file mode 100644 index 0000000000..f8ddabb789 --- /dev/null +++ b/projects/skale/index.js @@ -0,0 +1,10 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const depositBoxETH = '0x49F583d263e4Ef938b9E09772D3394c71605Df94'; +const depositBoxERC20 = '0x8fB1A35bB6fB9c47Fb5065BE5062cB8dC1687669'; + +module.exports = { + start: 1626697290, // Mon July 19 06:38:20 PM UTC 2021 + ethereum: { + tvl: sumTokensExport({ owners: [depositBoxETH, depositBoxERC20], fetchCoValentTokens: true, permitFailure: true }), + } +} \ No newline at end of file From ae6cda53aac5d0b7eb4e64b70983228ecf69e55d Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 9 Nov 2024 14:50:19 +0000 Subject: [PATCH 0985/1768] add ezETH and uniBTC vaults --- projects/helper/tokenMapping.js | 8 ++++- projects/mitosis/index.js | 57 +++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 8563414479..32b38de117 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -160,7 +160,13 @@ const fixBalancesTokens = { '0x93919784C523f39CACaa98Ee0a9d96c3F32b593e': { coingeckoId: 'universal-btc', decimals: 18 }, '0xC75D7767F2EdFbc6a5b18Fc1fA5d51ffB57c2B37': { coingeckoId: 'pumpbtc', decimals: 18 }, '0xCAbAE6f6Ea1ecaB08Ad02fE02ce9A44F09aebfA2': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, - } + }, + bsc: { + '0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a': { coingeckoId: 'universal-btc', decimals: 8 }, + }, + arbitrum: { + '0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a': { coingeckoId: 'universal-btc', decimals: 8 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/mitosis/index.js b/projects/mitosis/index.js index 8cc14608b2..885708245c 100644 --- a/projects/mitosis/index.js +++ b/projects/mitosis/index.js @@ -20,6 +20,48 @@ const UNIETH_ADDRESS = { }, }; +const uniBTC_ADDRESS = { + ethereum: { + asset: "0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568", + vault: "0xA1eBd23c4364e7491633237A0d9359D82c629182", + }, + arbitrum: { + asset: "0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a", + vault: "0x73981B0496fC08e9136BAF74b79d32A4d4F2a007", + }, + optimism: { + asset: "0x93919784C523f39CACaa98Ee0a9d96c3F32b593e", + vault: "0x5616Fe2762687Cd8a9158c27F62aff84E36821Be", + }, + bsc: { + asset: "0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a", + vault: "0xaDd58517c5D45c8ed361986f193785F8Ed1ABFc2", + }, +}; + +const ezETH_ADDRESS = { + ethereum: { + asset: "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", + vault: "0x0109e9f292516dAB3E15EfC61811C5e5a7FA5358", + }, + arbitrum: { + asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + vault: "0xbEd575b0FeDa4F84b71144634693DaCc07749471", + }, + blast: { + asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + vault: "0x8506fD66FCeD711c11F9E837EcAEC0F87C3F60A0", + }, + linea: { + asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + vault: "0x96d6cE4e83dB947fF6bD1Ab0B377F23cd5D9ec2D", + }, + mode: { + asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + vault: "0xbEd575b0FeDa4F84b71144634693DaCc07749471" + } +}; + const WEETH_ADDRESS = { ethereum: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", arbitrum: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe", @@ -88,6 +130,8 @@ module.exports = { { type: 'cap', data: { asset: WEETH_ADDRESS.ethereum, cap: CAP_ADDRESS.ethereum }}, { type: 'vault', data: { asset: VAULT_weETHs.ethereum, vault: vaults.ethereum }}, { type: 'vault', data: UNIETH_ADDRESS.ethereum }, + { type: 'vault', data: uniBTC_ADDRESS.ethereum }, + { type: 'vault', data: ezETH_ADDRESS.ethereum }, ], ), }, @@ -104,6 +148,8 @@ module.exports = { [ { type: 'cap', data: { asset: WEETH_ADDRESS.arbitrum, cap: CAP_ADDRESS.arbitrum }}, { type: 'vault', data: UNIETH_ADDRESS.arbitrum }, + { type: 'vault', data: uniBTC_ADDRESS.arbitrum }, + { type: 'vault', data: ezETH_ADDRESS.arbitrum }, ] ), }, @@ -111,6 +157,7 @@ module.exports = { tvl: chainTVL( [ { type: 'cap', data: { asset: WEETH_ADDRESS.optimism, cap: CAP_ADDRESS.optimism }}, + { type: 'vault', data: uniBTC_ADDRESS.optimism }, ], ), }, @@ -118,6 +165,7 @@ module.exports = { tvl: chainTVL( [ { type: 'cap', data: { asset: WEETH_ADDRESS.mode, cap: CAP_ADDRESS.mode }}, + { type: 'vault', data: ezETH_ADDRESS.mode }, ], ), }, @@ -132,6 +180,7 @@ module.exports = { tvl: chainTVL( [ { type: 'cap', data: { asset: WEETH_ADDRESS.blast, cap: CAP_ADDRESS.blast }}, + { type: 'vault', data: ezETH_ADDRESS.blast }, ], ), }, @@ -140,7 +189,15 @@ module.exports = { [ { type: 'cap', data: { asset: WEETH_ADDRESS.linea, cap: CAP_ADDRESS.linea }}, { type: 'vault', data: UNIETH_ADDRESS.linea }, + { type: 'vault', data: ezETH_ADDRESS.linea }, ], ), }, + bsc: { + tvl: chainTVL( + [ + { type: 'vault', data: uniBTC_ADDRESS.bsc }, + ] + ) + } }; From 18bdd69a84552535f98b4c3be10f521332ca04c6 Mon Sep 17 00:00:00 2001 From: Henrique Date: Sat, 9 Nov 2024 18:13:30 +0000 Subject: [PATCH 0986/1768] feat: add new base vault (w/morpho) on bakerfi (#12220) --- projects/bakerfi/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/bakerfi/index.js b/projects/bakerfi/index.js index 4452fe8612..ee598baa7f 100644 --- a/projects/bakerfi/index.js +++ b/projects/bakerfi/index.js @@ -3,7 +3,7 @@ const config = { vaults: ["0x4c6d58749126FEBb1D28E8B8FdE97DC3107996d3"] }, base: { - vaults: ["0x37327c99bBc522e677a97d01021dB20227faF60A"] + vaults: ["0x37327c99bBc522e677a97d01021dB20227faF60A", "0x892022FE1431fdE03836725BBD0f0380e21E2095"] }, ethereum: { vaults: ["0x01280b3683fE20Dc9cCF4D9526418F252871E4F7"] From a6d9045479b25c6b32df2fa579ac4df9baba8b20 Mon Sep 17 00:00:00 2001 From: Sam <165231790+samswealth@users.noreply.github.com> Date: Sat, 9 Nov 2024 21:13:46 +0300 Subject: [PATCH 0987/1768] add commonwealth tvl (#12219) Co-authored-by: samswealth Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/commonwealth/index.js | 26 ++++++++++++++++++++++++++ projects/treasury/commonwealth.js | 13 +++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 projects/commonwealth/index.js create mode 100644 projects/treasury/commonwealth.js diff --git a/projects/commonwealth/index.js b/projects/commonwealth/index.js new file mode 100644 index 0000000000..df1f9ba063 --- /dev/null +++ b/projects/commonwealth/index.js @@ -0,0 +1,26 @@ +const { staking } = require('../helper/staking'); + +const TREASURY = [ + '0xdE70B8BC5215BdF03f839BB8cD0F639D4E3E2881', + '0xA205fD6A798A9Ba8b107A00b8A6a5Af742d6aCb5', + '0x990eCdf73704f9114Ee28710D171132b5Cfdc6f0', + '0xa653879692D4D0e6b6E0847ceDd58eAD2F1CC136' +] + + +const CONTRACTS = [ + '0xf4aa59f5192856f41ae19caab4929ccd3a265e70', // staked + '0x7519461fbd96abb539c770d57f38c2e91f8262aa', + '0xd7e31990883250e53314b15ee555345f04d011e8', + '0x87412c03979cc19c60071f5f98313a7cbe9f6d65', // rewards + +]; + +const WLTH = '0x99b2B1A2aDB02B38222ADcD057783D7e5D1FCC7D'; + +module.exports = { + base: { + tvl: () => ({}), + staking: staking(CONTRACTS, WLTH) + } +}; diff --git a/projects/treasury/commonwealth.js b/projects/treasury/commonwealth.js new file mode 100644 index 0000000000..3a99df4e7e --- /dev/null +++ b/projects/treasury/commonwealth.js @@ -0,0 +1,13 @@ +const { treasuryExports } = require("../helper/treasury"); + +const owners = [ + '0xdE70B8BC5215BdF03f839BB8cD0F639D4E3E2881', + '0xA205fD6A798A9Ba8b107A00b8A6a5Af742d6aCb5', + '0x990eCdf73704f9114Ee28710D171132b5Cfdc6f0', + '0xa653879692D4D0e6b6E0847ceDd58eAD2F1CC136' +] + +const WLTH = '0x99b2B1A2aDB02B38222ADcD057783D7e5D1FCC7D'; +module.exports = treasuryExports({ + base: { owners, ownTokens: [WLTH], }, +}) From 2b1b7eb38d654079245f0787a90200c582d8731b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 10 Nov 2024 10:57:38 +0100 Subject: [PATCH 0988/1768] track royco --- projects/royco/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/royco/index.js diff --git a/projects/royco/index.js b/projects/royco/index.js new file mode 100644 index 0000000000..ed66d98db6 --- /dev/null +++ b/projects/royco/index.js @@ -0,0 +1,19 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +const config = { + ethereum: { factory: '0xb316D165D01aC68d31B297F847533D671c965662', fromBlock: 21040754 }, + arbitrum: { factory: '0xb316D165D01aC68d31B297F847533D671c965662', fromBlock: 267610608 }, + base: { factory: '0xb316D165D01aC68d31B297F847533D671c965662', fromBlock: 21548421 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event WrappedVaultCreated (address indexed underlyingVaultAddress, address indexed incentivizedVaultAddress, address owner, address inputToken, uint256 frontendFee, string name, string vaultSymbol)', fromBlock, }) + const tokensAndOwners = logs.map(log => [log.underlyingVaultAddress, log.incentivizedVaultAddress]) + return api.sumTokens({ tokensAndOwners }) + + } + } +}) \ No newline at end of file From a679a7c523387075c8f9dfb1cea3378495013fea Mon Sep 17 00:00:00 2001 From: fico23 Date: Sun, 10 Nov 2024 12:27:52 +0100 Subject: [PATCH 0989/1768] AeraFinance - added new arbitrum Aera Vault Factory (#12224) --- projects/aera/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/aera/index.js b/projects/aera/index.js index 4e6dadc4f7..270e3e3b4a 100644 --- a/projects/aera/index.js +++ b/projects/aera/index.js @@ -96,6 +96,10 @@ const config = { { address: "0xaF2762E1F75DeCdb8d240576e7A2CEc1A365cD46", fromBlock: 203397910 + }, + { + address: '0x49b428ea1cd536e7d103e9729ea14400785e30ec', + fromBlock: 245595750 } ] }, From 0d666e59b1491549c7943dee72b31842f66c6ec2 Mon Sep 17 00:00:00 2001 From: Josh Levine <24902242+jparklev@users.noreply.github.com> Date: Sun, 10 Nov 2024 18:28:25 +0700 Subject: [PATCH 0990/1768] Add newly supported Rumpel assets (Primarly YTs) (#12223) --- projects/rumpel/index.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/projects/rumpel/index.js b/projects/rumpel/index.js index 2bd21af778..ba2bf3fff3 100644 --- a/projects/rumpel/index.js +++ b/projects/rumpel/index.js @@ -22,6 +22,7 @@ const TOKENS = { USDE: ADDRESSES.ethereum.USDe, WSTETH: ADDRESSES.ethereum.WSTETH, WBTC: ADDRESSES.ethereum.WBTC, + AMPHRETH:"0x5fD13359Ba15A84B76f7F87568309040176167cd", WEETH: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", WEETHS: "0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88", MSTETH: "0x49446A0874197839D15395B908328a74ccc96Bc0", @@ -34,6 +35,16 @@ const TOKENS = { KWEETH: "0x2DABcea55a12d73191AeCe59F508b191Fb68AdaC", DC_WSTETH_COLLATERAL: "0xC329400492c6ff2438472D4651Ad17389fCb843a", DC_SUSDE_COLLATERAL: "0x19d0D8e6294B7a04a2733FE433444704B791939A", + DC_LBTC_COLLATERAL: "0x9C0823D3A1172F9DdF672d438dec79c39a64f448", + YT_EBTC: "0xeB993B610b68F2631f70CA1cf4Fe651dB81f368e", + YT_WEETHK: "0x7B64b99A1fd80b6c012E354a14ADb352b5916CE1", + YT_AGETH: "0x3568f1d2e8058F6D99Daa17051Cb4a2930C83978", + YT_WEETHS: "0x719B51Dd92B7809A80A2E8c91D89367BF58f1D7A", + YT_SUSDE: "0xbE05538f48D76504953c5d1068898C6642937427", + YT_USDE: "0x5D8B3cd632c58D5CE75C2141C1C8b3b0C209b3ed", + YT_RE7LRT: "0x89E7f4E5210A77Ac0f20511389Df71eC98ce9971", + YT_RSTETH: "0x11CCff2F748a0100dBd457FF7170A54e12064Aba", + YT_AMPHRETH: "0x5dB8a2391a72F1114BbaE30eFc9CD89f4a29F988", }; const MORPHO_SUSDE_MARKET_ID = @@ -70,7 +81,7 @@ async function tvl(api) { } async function handleZircuitAssets() { - const assets = [TOKENS.WEETH, TOKENS.WEETHS, TOKENS.USDE, TOKENS.MSTETH] + const assets = [TOKENS.WEETH, TOKENS.WEETHS, TOKENS.USDE, TOKENS.MSTETH, TOKENS.AMPHRETH] const calls = [] for (const asset of assets) for (const owner of owners) @@ -91,6 +102,15 @@ async function tvl(api) { TOKENS.RSTETH, TOKENS.RE7LRT, TOKENS.RE7RWBTC, + TOKENS.YT_EBTC, + TOKENS.YT_WEETHK, + TOKENS.YT_AGETH, + TOKENS.YT_WEETHS, + TOKENS.YT_SUSDE, + TOKENS.YT_USDE, + TOKENS.YT_RE7LRT, + TOKENS.YT_RSTETH, + TOKENS.YT_AMPHRETH, ] return api.sumTokens({ owners, tokens }) } From 6b02ca0bd28470a08708906e1e03a4f83273f14a Mon Sep 17 00:00:00 2001 From: Amir Date: Sun, 10 Nov 2024 13:28:41 +0200 Subject: [PATCH 0991/1768] Add SolanaHub Staked SOL (hubSOL) (#12221) --- projects/solanahub-sol/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/solanahub-sol/index.js diff --git a/projects/solanahub-sol/index.js b/projects/solanahub-sol/index.js new file mode 100644 index 0000000000..c874fd186b --- /dev/null +++ b/projects/solanahub-sol/index.js @@ -0,0 +1,12 @@ +const { getSolBalanceFromStakePool } = require('../helper/solana') + +async function tvl(api) { + await getSolBalanceFromStakePool('ECRqn7gaNASuvTyC5xfCUjehWZCSowMXstZiM5DNweyB', api) +} + +module.exports ={ + timetravel: false, + doublecounted: true, + methodology: "SolanaHub Staked SOL (hubSOL) is a tokenized representation on your staked SOL + stake rewards", + solana: { tvl }, +}; \ No newline at end of file From d6093901e7a5c5b34b09baa0f09261dbf00819d9 Mon Sep 17 00:00:00 2001 From: FluxusFi Date: Mon, 11 Nov 2024 07:05:19 +0100 Subject: [PATCH 0992/1768] Add FluxusFi on Base (#12222) --- projects/fluxusbase/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/fluxusbase/index.js diff --git a/projects/fluxusbase/index.js b/projects/fluxusbase/index.js new file mode 100644 index 0000000000..510b0046d5 --- /dev/null +++ b/projects/fluxusbase/index.js @@ -0,0 +1,11 @@ +const { uniTvlExport } = require('../helper/calculateUniTvl.js') + +module.exports = { + misrepresentedTokens: true, + base: { + tvl: uniTvlExport("0x27c2d144b106B26Be3d0dEB6c14c5CFA2e9a507C", undefined, undefined, { + allPairsLength: 'uint256:allPairsLength', + allPairs: 'function allPairs(uint256) view returns (address)', + }, { useDefaultCoreAssets: true, hasStablePairs: true, }), + }, +} \ No newline at end of file From 095531b8320add5786a74797012a348745b510f9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 07:14:26 +0100 Subject: [PATCH 0993/1768] update bedrock #12229 --- projects/bedrock/index.js | 16 ++++++++- projects/helper/bitcoin-book/fetchers.js | 44 ++++++++++++------------ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/projects/bedrock/index.js b/projects/bedrock/index.js index d1327d026f..b673ced9d2 100644 --- a/projects/bedrock/index.js +++ b/projects/bedrock/index.js @@ -1,5 +1,6 @@ const { sumTokens } = require('../helper/chain/bitcoin') const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const { getConfig } = require('../helper/cache.js') async function tvl() { return sumTokens({ owners: await bitcoinAddressBook.bedrock() }) @@ -7,8 +8,21 @@ async function tvl() { module.exports = { timetravel: false, - doublecounted:true, + doublecounted: true, bitcoin: { tvl } } + +async function tvlEvm(api) { + const API_URL = 'https://raw.githubusercontent.com/Bedrock-Technology/uniBTC/refs/heads/main/data/tvl/reserve_address.json' + const { evm, } = await getConfig('bedrock.btc_address', API_URL) + const chain = api.chain == 'btr' ? 'bitlayer' : api.chain + const { vault, tokens } = evm[chain] ?? {} + if (!vault) return; + return api.sumTokens({ api, owner: vault, tokens }) +} + +['btr', 'ethereum', 'bsc', 'arbitrum', 'mantle', 'merlin', 'optimism', 'bob', 'bsquared', 'zeta', 'mode'].forEach(chain => { + module.exports[chain] = { tvl: tvlEvm } +}) \ No newline at end of file diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index 5fd55c3f2d..95e96f7b59 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -8,7 +8,7 @@ const abi = { getQualifiedUserInfo: 'function getQualifiedUserInfo(address _user module.exports = { bedrock: async () => { - const API_URL = 'https://bedrock-datacenter.rockx.com/uniBTC/reserve/address' + const API_URL = 'https://raw.githubusercontent.com/Bedrock-Technology/uniBTC/refs/heads/main/data/tvl/reserve_address.json' const { btc } = await getConfig('bedrock.btc_address', API_URL) return btc }, @@ -52,19 +52,19 @@ module.exports = { let offset = 0; let batchNumber = 1; let hasMore = true; - + while (hasMore) { const { addresses: data, has_more } = await get(`${API_URL}?limit=${BATCH_SIZE}&offset=${offset}`); const newAddresses = data.map(a => a.btc_address); - + allAddresses.push(...newAddresses); sdk.log(`Batch ${batchNumber} completed: ${newAddresses.length} addresses`); - + hasMore = has_more; offset += BATCH_SIZE; batchNumber++; } - + return allAddresses; } }) @@ -101,25 +101,25 @@ module.exports = { let hasMore = true; while (hasMore) { - const { data: response } = await axios.post(API2_URL, { - "json": true, - "code": "brdgmng.xsat", - "scope": custody_id, - "table": "addrmappings", - "lower_bound": lower_bound, - "upper_bound": null, - "index_position": 1, - "key_type": "", - "limit": "100", - "reverse": false, - "show_payer": true - }); + const { data: response } = await axios.post(API2_URL, { + "json": true, + "code": "brdgmng.xsat", + "scope": custody_id, + "table": "addrmappings", + "lower_bound": lower_bound, + "upper_bound": null, + "index_position": 1, + "key_type": "", + "limit": "100", + "reverse": false, + "show_payer": true + }); - const addrs = response.rows.map(row => row.data.btc_address); - owners.push(...addrs); + const addrs = response.rows.map(row => row.data.btc_address); + owners.push(...addrs); - hasMore = response.more; - lower_bound = response.next_key; + hasMore = response.more; + lower_bound = response.next_key; } } return owners From eca800c0bde4bdc799f5f6856289f92f295ea6a2 Mon Sep 17 00:00:00 2001 From: turgut-demir <165087519+turgut-demir@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:19:37 +0300 Subject: [PATCH 0994/1768] create oceanpoint/index.js (#12225) Co-authored-by: turgut-demir Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/oceanpoint/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/oceanpoint/index.js diff --git a/projects/oceanpoint/index.js b/projects/oceanpoint/index.js new file mode 100644 index 0000000000..faa9d512b5 --- /dev/null +++ b/projects/oceanpoint/index.js @@ -0,0 +1,20 @@ +const { staking } = require('../helper/staking'); + +const CONTRACTS = [ + "0x13299657e662894b933Bb3Ee73F7f8dA94b55451", + "0x1802f66868d0649687a7a6bc9b8a4292e148daec", + "0x6f1e92fb8a685aaa0710bad194d7b1aa839f7f8a", + "0x57ba886442d248C2E7a3a5826F2b183A22eCc73e" +]; + +const ERC20_TOKENS = [ + "0x509A38b7a1cC0dcd83Aa9d06214663D9eC7c7F4a" +]; + +module.exports = { + ethereum: { + tvl: () => ({}), + pool2: staking(CONTRACTS, '0x0E85fB1be698E777F2185350b4A52E5eE8DF51A6'), + staking: staking(CONTRACTS, ERC20_TOKENS), + } +}; From 88c37e53e72a52329bdfc3b6853e9725015f7a7f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 07:31:37 +0100 Subject: [PATCH 0995/1768] update solv lst #12228 --- projects/solv-btc-lst/index.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index ff13d82b7e..133e5ec5e9 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -5,8 +5,22 @@ async function tvl() { return sumTokens({ owners: await bitcoinAddressBook.solvBTC() }) } + +const solvbtclstListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc-lst.json'; + +async function evmTVL(api) { + let solvbtclst = await getConfig('solv-protocol/solv-btc-lst', solvbtclstListUrl) + let { depositAddress: owners, tokens } = solvbtclst[api.chain]?.otherDeposit ?? {} + api.sumTokens({ owners, tokens }) +} + module.exports = { methodology: 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.', - doublecounted:true, + doublecounted: true, bitcoin: { tvl } -} \ No newline at end of file +} + +const chains = ['ethereum'] +chains.forEach(chain => { + module.exports[chain] = { tvl: evmTVL } +}) \ No newline at end of file From 0bb20c8eed0254da83030aa1eb53a666d3d7395a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 07:40:20 +0100 Subject: [PATCH 0996/1768] bugfix --- projects/solv-btc-lst/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 133e5ec5e9..038e6edcd7 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -1,5 +1,6 @@ const { sumTokens } = require('../helper/chain/bitcoin'); -const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js'); +const { getConfig } = require('../helper/cache.js'); async function tvl() { return sumTokens({ owners: await bitcoinAddressBook.solvBTC() }) From b5f19e9f28c75e8cd739a23f6e9b865df0dba591 Mon Sep 17 00:00:00 2001 From: LpcAries <101619245+LpcAries@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:05:12 +0800 Subject: [PATCH 0997/1768] add utonic adapter (#12231) --- projects/utonic/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/utonic/index.js diff --git a/projects/utonic/index.js b/projects/utonic/index.js new file mode 100644 index 0000000000..6a9cccd91f --- /dev/null +++ b/projects/utonic/index.js @@ -0,0 +1,11 @@ +const { call } = require("../helper/chain/ton"); + +module.exports = { + timetravel: false, + ton: { + tvl: async () => { + const result = await call({ target: "EQAfF5j3JMIpZlLmACv7Ub7RH7WmiVMuV4ivcgNYHvNnqHTz", abi: "get_minter_data"}) + return { "coingecko:the-open-network": result[0]/1e9 }; + } + } +} \ No newline at end of file From c211904135df1a693b68987321859e47fbfc84eb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:21:29 +0100 Subject: [PATCH 0998/1768] update worldes #12184 --- projects/worldes/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/worldes/index.js b/projects/worldes/index.js index 0a55a0699c..f3a4353fc9 100644 --- a/projects/worldes/index.js +++ b/projects/worldes/index.js @@ -1,14 +1,18 @@ const { getLogs2 } = require('../helper/cache/getLogs') const config = { - arbitrum: { dvmFactory: '0x3bA0388E64900e274f2C6fCfaE34Eed65c01282A', fromBlock: 228710000, dspFactory: '0xf3AadDd00C2E263d760BE52BB7142276B74E8b47', WorldesRWATokenFactory: '0x4Ef31B45919aE1874840B9563D46FCD57E2Ae0b7', WorldesDvmProxy: '0x7e93ED796aFD3D9a6e9a24c668153fBb981bE60E', WorldesDspProxy: '0xE6933Fb2dc110a43fdeC6bB83d6ae99aC557c452', WorldesMineProxy: '0x2eFda50249176e3ee1A26964Ad6496DC5aA2aCE7' }, + arbitrum: { dvmFactory: '0x3bA0388E64900e274f2C6fCfaE34Eed65c01282A', fromBlock: 228710000, dspFactory: '0xf3AadDd00C2E263d760BE52BB7142276B74E8b47', WorldesRWATokenFactory: '0x4Ef31B45919aE1874840B9563D46FCD57E2Ae0b7', WorldesDvmProxy: '0x7e93ED796aFD3D9a6e9a24c668153fBb981bE60E', WorldesDspProxy: '0xE6933Fb2dc110a43fdeC6bB83d6ae99aC557c452', WorldesMineProxy: '0x2eFda50249176e3ee1A26964Ad6496DC5aA2aCE7', WES: '0xcEab5Af10D5376016c8C352ea77F8Bc6a88bDa11' }, } Object.keys(config).forEach(chain => { - const { dvmFactory, fromBlock, dspFactory, blacklistedTokens, } = config[chain] + const { dvmFactory, fromBlock, dspFactory, blacklistedTokens, WES, } = config[chain] module.exports[chain] = { tvl: async (api) => { const ownerTokens = [] + if (WES) { + const supply = await api.call({ abi: 'uint256:totalSupply', target: WES }) + api.add(WES, supply) + } await builder(dvmFactory, 'event NewDVM(address baseToken, address quoteToken, address creator, address pool)'); await builder(dspFactory, 'event NewDSP(address baseToken, address quoteToken, address creator, address pool)'); From 15a6be50aee9b00685524bd0ca213ad631a7b989 Mon Sep 17 00:00:00 2001 From: Ivan Herger <36133712+iherger@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:05:55 +0100 Subject: [PATCH 0999/1768] feat: add Arbitrum deployment for Enzyme (#12232) --- projects/enzyme/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/enzyme/index.js b/projects/enzyme/index.js index 03709f93b7..8bd0e86783 100644 --- a/projects/enzyme/index.js +++ b/projects/enzyme/index.js @@ -5,6 +5,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const config = { polygon: { endpoint: sdk.graph.modifyEndpoint('GCAHDyqvZBLMwqdb9U7AqWAN4t4TSwR3aXMHDoUUFuRV') }, ethereum: { endpoint: sdk.graph.modifyEndpoint('9DLBBLep5UyU16kUQRvxBCMqko4q9XzuE4XsMMpARhKK') }, + arbitrum: { endpoint: sdk.graph.modifyEndpoint('8UJ5Bkf2eazZhXsAshhzQ2Keibcb8NFHBvXis9pb2C2Y') }, } const query = `query get_accounts($lastId: String!) { vaults( From 36d5d850e81b94faf8aee7a34d5f4895a7f2c34b Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:22:07 +0000 Subject: [PATCH 1000/1768] add ourbit adapter (#12233) --- projects/ourbit/index.js | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 projects/ourbit/index.js diff --git a/projects/ourbit/index.js b/projects/ourbit/index.js new file mode 100644 index 0000000000..7253f71ac5 --- /dev/null +++ b/projects/ourbit/index.js @@ -0,0 +1,50 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xf81b45b1663b7ea8716c74796d99bbe4ea26f488", + "0x18D080B89570e4B996EB17fA1F0206F0CE35d604", + ], + }, + tron: { + owners: [ + "TApNqy5BNx11TiNa7oibbBUV63BY5a2sNE", + "TJP6zoGwWwUmANvMdrtqYq9iWA8qMAAY4q" + ], + }, + bsc: { + owners: [ + "0xdbf7122c0b7af893580df087eabac0b3be3e9483", + "0x6c6EC4beeAa53171a0ce0691D5c9A5FaAF509a8A" + ], + }, + optimism: { + owners: [ + "0x944d6b4c2bf808f9324ca0675f1d7e0e92a35436", + ], + }, + avax: { + owners: [ + "0x8fc27c899fb2c1044608516450e385378195639d", + ], + }, + arbitrum: { + owners: [ + "0x040432c11ee833bdcaac2495329b65bee7cca6d9", + ], + }, + solana: { + owners: [ + "7UhjbynicBP8rqcobwsAJDfRMjwgHSgdxcYNJmLwxfms", + "3pjwKq9yuzpVYfD4h5jMZLLfV8oSd8YiwpoAaB5oZS3H" + ], + }, + bitcoin: { + owners: [ + "bc1q2cvpg2c74puqke4py0ufr0aauj4m5vdeaqpjxv", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file From b94b3d409711c183de1b8fdf8007a1fce53304e7 Mon Sep 17 00:00:00 2001 From: Shyy Yuushin Date: Mon, 11 Nov 2024 18:34:28 +0800 Subject: [PATCH 1001/1768] update the contracts of Magma to v3 --- projects/magma/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/magma/index.js b/projects/magma/index.js index 29431c6927..e733fb9ee7 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -5,6 +5,8 @@ const sdk = require('@defillama/sdk') module.exports = { iotex: { tvl: sdk.util.sumChainTvls([ + getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), + getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435'), getLiquityTvl('0x4315BcE6076953571caf1903d15D682727FBD935'), getLiquityTvl('0xFF5F4bA96586EDae7E7D838D8770dFB3376Ec245', { nonNativeCollateralToken: true, collateralToken: "0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894" }) ]), From cb7345683b60387f05ac7d020d43135078545eb1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:47:47 +0100 Subject: [PATCH 1002/1768] track reservoir #11478 --- projects/reservoir-protocol/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/reservoir-protocol/index.js diff --git a/projects/reservoir-protocol/index.js b/projects/reservoir-protocol/index.js new file mode 100644 index 0000000000..f5b4d9cfc1 --- /dev/null +++ b/projects/reservoir-protocol/index.js @@ -0,0 +1,22 @@ +const config = { + ethereum: [ + // https://docs.reservoir.xyz/products/proof-of-reserves + '0x0c7e4342534e6e8783311dCF17828a2aa0951CC7', + '0x9BB2c38F57883E5285b7c296c66B9eEA4769eF80', + '0x99A95a9E38e927486fC878f41Ff8b118Eb632b10', + // '0x31Eae643b679A84b37E3d0B4Bd4f5dA90fB04a61', - exluded RUSD because it is project's own token + ] +} + +Object.keys(config).forEach(chain => { + const funds = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const tokens = await api.multiCall({ abi: 'address:underlying', calls: funds }) + const bals = await api.multiCall({ abi: 'uint256:totalValue', calls: funds }) + const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: tokens }) + bals.forEach((v, i) => bals[i] = v * 10 ** (decimals[i] - 18)) + api.add(tokens, bals) + } + } +}) \ No newline at end of file From b83baa61f037cb646ca1bc85d1f23ee1e85df562 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:29:22 +0100 Subject: [PATCH 1003/1768] fix magma: #12234 --- projects/magma/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/magma/index.js b/projects/magma/index.js index 29431c6927..739350a3e5 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -5,7 +5,8 @@ const sdk = require('@defillama/sdk') module.exports = { iotex: { tvl: sdk.util.sumChainTvls([ - getLiquityTvl('0x4315BcE6076953571caf1903d15D682727FBD935'), + getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), + getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435'), getLiquityTvl('0xFF5F4bA96586EDae7E7D838D8770dFB3376Ec245', { nonNativeCollateralToken: true, collateralToken: "0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894" }) ]), // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl From b5a6a5ad7e2ce8fa0e06dd555be639f6cd3f5ef8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:32:29 +0100 Subject: [PATCH 1004/1768] fix uniswap v3 #12235 --- projects/helper/unwrapLPs.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index 18edbcb2e1..e8eb59a1cd 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -465,7 +465,9 @@ async function sumBalancerLps(balances, tokensAndOwners, block, chain, transform } const nullAddress = ADDRESSES.null -const gasTokens = [nullAddress, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'] +const gasTokens = [nullAddress, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '0x000000000000000000000000000000000000800a', // zksync era gas token +] /* tokensAndOwners [ [token, owner] - eg ["0xaaa", "0xbbb"] From b500fbc6526a15a9bd65a700a6a67707dcd74fb0 Mon Sep 17 00:00:00 2001 From: Andrea Date: Mon, 11 Nov 2024 12:35:40 +0100 Subject: [PATCH 1005/1768] Update VaultCraft staking TVL: include stVCX (#12236) --- projects/popcorn/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index ea9224672b..876ecf8c7a 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -2,7 +2,7 @@ const sdk = require('@defillama/sdk'); const { getConfig } = require('../helper/cache') const { addFraxVaultToTVL } = require("./fraxVault"); -const { staking } = require("../helper/staking"); +const { stakings } = require("../helper/staking"); const { sumTokens2 } = require('../helper/unwrapLPs'); const getVaultsAbi = 'address[]:getRegisteredAddresses'; @@ -36,11 +36,13 @@ async function tvl(api) { const veVCX = "0x0aB4bC35Ef33089B9082Ca7BB8657D7c4E819a1A"; const WETH_VCX_BAL_LP_TOKEN = "0x577A7f7EE659Aa14Dc16FD384B3F8078E23F1920"; +const stVCX = "0xE5d383FC43F6c370DdD3975cf9e363Ad42367697"; +const VCX = "0xce246eea10988c495b4a90a905ee9237a0f91543"; module.exports = { ethereum: { start: 12237585, - staking: staking(veVCX, WETH_VCX_BAL_LP_TOKEN), + staking: stakings([stVCX, veVCX], [VCX, WETH_VCX_BAL_LP_TOKEN]), tvl, }, bsc: { tvl, }, From bd461cf3d30398d1d02730cc74a756e7a3b239be Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Mon, 11 Nov 2024 20:01:20 +0800 Subject: [PATCH 1006/1768] Return api.sumTokens (#12237) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solv-btc-lst/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 038e6edcd7..61b800334f 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -12,7 +12,7 @@ const solvbtclstListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/sl async function evmTVL(api) { let solvbtclst = await getConfig('solv-protocol/solv-btc-lst', solvbtclstListUrl) let { depositAddress: owners, tokens } = solvbtclst[api.chain]?.otherDeposit ?? {} - api.sumTokens({ owners, tokens }) + return api.sumTokens({ owners, tokens }) } module.exports = { From b19ade2ff69450e2a5f0902c04ca9cd1e8c6f213 Mon Sep 17 00:00:00 2001 From: "Guillermo M. Narvaja" Date: Mon, 11 Nov 2024 15:38:56 -0300 Subject: [PATCH 1007/1768] Ensuro: adds native USDC in AAVE to the list of assets --- projects/ensuro/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/ensuro/index.js b/projects/ensuro/index.js index 8f814ae81d..b892a405af 100644 --- a/projects/ensuro/index.js +++ b/projects/ensuro/index.js @@ -4,7 +4,8 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const addressBook = { polygon: { usdc: ADDRESSES.polygon.USDC, - aave_v3_usdc: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aPolUSDC + aave_v3_usdc: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aPolUSDC - AAVE USDC (Bridged) + aave_v3_native_usdc: "0xA4D94019934D8333Ef880ABFFbF2FDd611C762BD", // aPolUSDCn - AAVE USDC (Native) compound_v3_usdc: "0xF25212E676D1F7F89Cd72fFEe66158f541246445", // Compound USDC mountain_usdm: ADDRESSES.ethereum.USDM, // Mountain USDM reserves: [ @@ -54,7 +55,7 @@ const addressBook = { async function tvl(api) { const addresses = addressBook[api.chain]; - const ownerTokens = addresses.reserves.map(i => [[addresses.usdc, addresses.aave_v3_usdc, addresses.compound_v3_usdc, addresses.mountain_usdm], i.address]) + const ownerTokens = addresses.reserves.map(i => [[addresses.usdc, addresses.aave_v3_usdc, addresses.aave_v3_native_usdc, addresses.compound_v3_usdc, addresses.mountain_usdm], i.address]) return sumTokens2({ api, ownerTokens, }); } From e6af79dd2845698bec52608bc81901cb59b1218c Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 11 Nov 2024 19:47:21 +0100 Subject: [PATCH 1008/1768] Fix: Fuji-v2 (#12238) --- projects/fujidao-v2/index.js | 52 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/projects/fujidao-v2/index.js b/projects/fujidao-v2/index.js index 1e1f2c241a..dd832d0c0d 100644 --- a/projects/fujidao-v2/index.js +++ b/projects/fujidao-v2/index.js @@ -81,24 +81,25 @@ Object.keys(config).forEach(chain => { const assets = bassets.concat(yassets) const debtAssets = blogs.map(log => log.debtAsset) - - const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) - const debtBals = await api.multiCall({ abi: 'uint256:totalDebt', calls: bvaults, permitFailure: true, }) - bals.forEach((bal, i) => { - api.add(assets[i], bal) - }) + const [bals, debtBals] = await Promise.all([ + api.multiCall({ abi: 'uint256:totalAssets', calls: vaults, permitFailure: true }), + api.multiCall({ abi: 'uint256:totalDebt', calls: bvaults, permitFailure: true, }) + ]) - debtAssets.forEach((bal, i) => { - if (!debtBals[i]) { - return; - // if (+bal === 0) return; - // throw new Error(`No debt balance for ${bvaults[i]}`) - } - api.add(debtAssets[i], debtBals[i] * -1) + vaults.map((_, i) => { + const asset = assets[i] + const bal = bals[i] + if (!bal) return + api.add(asset, bal) }) - return api.getBalances() + bvaults.map((_, i) => { + const debtAsset = debtAssets[i] + const debtBal = debtBals[i] + if (!debtBal) return + api.add(debtAsset, debtBal * -1) + }) }, borrowed: async (api) => { let logs = []; @@ -119,17 +120,18 @@ Object.keys(config).forEach(chain => { } const vaults = logs.map(log => log.vault) const debtAssets = logs.map(log => log.debtAsset) - const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) - const debtBals = (await api.multiCall({ abi: 'uint256:totalDebt', calls: vaults, permitFailure: true, })) - bals.forEach((bal, i) => { - if (!debtBals[i]) { - return; - // if (+bal === 0) return; - // throw new Error(`No debt balance for ${vaults[i]}`) - } - api.add(debtAssets[i], debtBals[i]) - }) - return api.getBalances() + + const [bals, debtBals] = await Promise.all([ + api.multiCall({ abi: 'uint256:totalAssets', calls: vaults, permitFailure: true }), + api.multiCall({ abi: 'uint256:totalDebt', calls: vaults, permitFailure: true }) + ]) + + vaults.forEach((_, i) => { + const debtBal = debtBals[i] + const debtAsset = debtAssets[i] + if (!debtBal) return + api.add(debtAsset, debtBal) + }) } } }) \ No newline at end of file From 2c0c01d22741aaa005e55c807dff35533a595754 Mon Sep 17 00:00:00 2001 From: David Zhang <125990317+zhangdav@users.noreply.github.com> Date: Tue, 12 Nov 2024 01:47:50 +0700 Subject: [PATCH 1009/1768] Add support for Arbitrum chain in PumpBTC (#12239) --- projects/pumpbtc/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index eae9d22a17..47aef26159 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -11,7 +11,7 @@ async function getStakingAddresses() { let res = await utils.fetchURL('https://dashboard.pumpbtc.xyz/api/dashboard/asset/tokenowners') const btcAddresses = res.data.data || {} - //console.log('>>', btcAddresses.length) + //console.log('>>', btcAddresses.length) return btcAddresses } @@ -33,7 +33,7 @@ async function otherTvl(api) { module.exports.isHeavyProtocol = true; -['bitcoin', 'ethereum', 'bsc', 'mantle', 'base'].forEach(chain => { +['bitcoin', 'ethereum', 'bsc', 'mantle', 'base', 'arbitrum'].forEach(chain => { if (chain == 'bitcoin') { module.exports[chain] = { tvl: bitcoinTvl, From c69bcc3c5b8fd6497a6738eaed1f8c935ab726f8 Mon Sep 17 00:00:00 2001 From: m66260 <117136064+m66260@users.noreply.github.com> Date: Mon, 11 Nov 2024 13:48:40 -0500 Subject: [PATCH 1010/1768] Update an address in the D8X adapter (#12240) --- projects/d8x/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/d8x/index.js b/projects/d8x/index.js index 474940d709..87622b002f 100644 --- a/projects/d8x/index.js +++ b/projects/d8x/index.js @@ -2,7 +2,7 @@ const abi = require("./abi-poolInfo.json"); const { sumTokens2 } = require("../helper/unwrapLPs"); const config = { - polygon_zkevm: { factory: "0xaB7794EcD2c8e9Decc6B577864b40eBf9204720f" }, + polygon_zkevm: { factory: "0x900DfC161C34656a9D9c43307F92255C2aa06162" }, xlayer: { factory: "0xb24dB543749277E8625a59C061aE7574C8235475" }, arbitrum: { factory: "0x8f8BccE4c180B699F81499005281fA89440D1e95" }, }; From ae80346691099f9e03567d8b89bdfac652fedaa6 Mon Sep 17 00:00:00 2001 From: "Guillermo M. Narvaja" Date: Mon, 11 Nov 2024 15:50:35 -0300 Subject: [PATCH 1011/1768] Ensuro: adds native USDC in AAVE to the list of assets (#12243) --- projects/ensuro/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/ensuro/index.js b/projects/ensuro/index.js index 8f814ae81d..b892a405af 100644 --- a/projects/ensuro/index.js +++ b/projects/ensuro/index.js @@ -4,7 +4,8 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const addressBook = { polygon: { usdc: ADDRESSES.polygon.USDC, - aave_v3_usdc: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aPolUSDC + aave_v3_usdc: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aPolUSDC - AAVE USDC (Bridged) + aave_v3_native_usdc: "0xA4D94019934D8333Ef880ABFFbF2FDd611C762BD", // aPolUSDCn - AAVE USDC (Native) compound_v3_usdc: "0xF25212E676D1F7F89Cd72fFEe66158f541246445", // Compound USDC mountain_usdm: ADDRESSES.ethereum.USDM, // Mountain USDM reserves: [ @@ -54,7 +55,7 @@ const addressBook = { async function tvl(api) { const addresses = addressBook[api.chain]; - const ownerTokens = addresses.reserves.map(i => [[addresses.usdc, addresses.aave_v3_usdc, addresses.compound_v3_usdc, addresses.mountain_usdm], i.address]) + const ownerTokens = addresses.reserves.map(i => [[addresses.usdc, addresses.aave_v3_usdc, addresses.aave_v3_native_usdc, addresses.compound_v3_usdc, addresses.mountain_usdm], i.address]) return sumTokens2({ api, ownerTokens, }); } From 6e640f5682b5750e93272b7112b076f46e573bd7 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 11 Nov 2024 20:34:29 +0000 Subject: [PATCH 1012/1768] add staking --- projects/gammaswap/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/gammaswap/index.js b/projects/gammaswap/index.js index 189b291cc6..2b3d893e3e 100644 --- a/projects/gammaswap/index.js +++ b/projects/gammaswap/index.js @@ -1,5 +1,6 @@ const { getLogs } = require('../helper/cache/getLogs') const { sumTokens2 } = require('../helper/unwrapLPs') +const { staking } = require('../helper/staking') const config = { arbitrum: { @@ -28,4 +29,6 @@ Object.keys(config).forEach(chain => { return sumTokens2({ ownerTokens, api, resolveLP: true, }) } } -}) \ No newline at end of file +}) + +module.exports.arbitrum.staking = staking("0x9b4D784E1cCaf038AEa4BFa837262704caF78B66", "0xb08d8becab1bf76a9ce3d2d5fa946f65ec1d3e83") \ No newline at end of file From 5eb30abede20ffcc0cab7e10145ed9aa5a9108c4 Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:41:58 +0800 Subject: [PATCH 1013/1768] Fix getConfig cache (#12245) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solv-btc-lst/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index 61b800334f..f7408ba341 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -10,7 +10,7 @@ async function tvl() { const solvbtclstListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc-lst.json'; async function evmTVL(api) { - let solvbtclst = await getConfig('solv-protocol/solv-btc-lst', solvbtclstListUrl) + let solvbtclst = await getConfig('solv-protocol/solv-btc-lst-evm', solvbtclstListUrl) let { depositAddress: owners, tokens } = solvbtclst[api.chain]?.otherDeposit ?? {} return api.sumTokens({ owners, tokens }) } From 7fcdead485a272d7c54c3347b3696bcb0021458e Mon Sep 17 00:00:00 2001 From: zluqo Date: Tue, 12 Nov 2024 09:02:53 +0400 Subject: [PATCH 1014/1768] adding bitflux (#12244) --- projects/bitflux/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/bitflux/index.js diff --git a/projects/bitflux/index.js b/projects/bitflux/index.js new file mode 100644 index 0000000000..a3f45f7644 --- /dev/null +++ b/projects/bitflux/index.js @@ -0,0 +1,19 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const swapFlashLoan = '0x4bcb9Ea3dACb8FfE623317E0B102393A3976053C'; + +const ADDRESSES = { + 'WBTC': "0x5832f53d147b3d6Cd4578B9CBD62425C7ea9d0Bd", + "solvBTCb": "0x5b1fb849f1f76217246b8aaac053b5c7b15b7dc3", + "solvBTCcore": "0x9410e8052bc661041e5cb27fdf7d9e9e842af2aa" +} + +module.exports = { + core: { + tvl: sumTokensExport( + { + owner: swapFlashLoan, + tokens: [ADDRESSES.WBTC, ADDRESSES.solvBTCb, ADDRESSES.solvBTCcore] + }), + } +} \ No newline at end of file From b24b1e1c82336b24b0cacb48739a63c8208f43e9 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 12 Nov 2024 10:41:10 +0000 Subject: [PATCH 1015/1768] remove hallmarks (#12247) --- projects/desyn-farm/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/projects/desyn-farm/index.js b/projects/desyn-farm/index.js index 07add1a91d..37d3e2839d 100644 --- a/projects/desyn-farm/index.js +++ b/projects/desyn-farm/index.js @@ -1,11 +1,6 @@ const { getTvlFunction, chains } = require("./helper"); module.exports = { - hallmarks: [ - [1719734400, "Launched on Merlin Chain"], - [1718092800, "DeSyn KelpDAO Restaking Fund Launched"], - [1713340800, "Restaking Fund Series Launched"] - ], methodology: 'Focused on airdrops from DeSyn and new chains.', } From 07d7561839997712ac1aa364f4e1b0b5e71ae924 Mon Sep 17 00:00:00 2001 From: Masashi Ono <98894508+Masashi-Ono0611@users.noreply.github.com> Date: Tue, 12 Nov 2024 21:15:56 +0900 Subject: [PATCH 1016/1768] Create index.js by Bagel Finance (#12249) --- projects/BagelFinance/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/BagelFinance/index.js diff --git a/projects/BagelFinance/index.js b/projects/BagelFinance/index.js new file mode 100644 index 0000000000..95a32763b6 --- /dev/null +++ b/projects/BagelFinance/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require("../helper/coreAssets.json"); + +const BagelLpPool = "UQAqcydSR5paeZTvCSN5XwAuaHB1T5aE33rofhvpz0B59gKr" + +module.exports = { + methodology: 'Counts LP smartcontract balance as TVL.', + ton: { + tvl: sumTokensExport({ owners: [BagelLpPool], tokens: [ADDRESSES.null]}), + } +} From b72d5ce0c65d8dbb694cd1c416efd34f70bdb2be Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 12 Nov 2024 14:22:36 +0100 Subject: [PATCH 1017/1768] minor fix --- projects/deltatrade.js | 3 +-- projects/helper/solana.js | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/projects/deltatrade.js b/projects/deltatrade.js index 37af707c01..815fecee33 100644 --- a/projects/deltatrade.js +++ b/projects/deltatrade.js @@ -4,8 +4,7 @@ const { getConfig } = require('./helper/cache') const { get } = require('./helper/http') const { PublicKey } = require('@solana/web3.js'); -const { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, } = require("@solana/spl-token"); -const { sumTokens2 } = require('./helper/solana') +const { sumTokens2, ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, } = require('./helper/solana') const state = new PublicKey('FRcbUFpGHQppvXAyJrNYLKME1BQfowh4xKZB2vt9j6yn'); const programId = new PublicKey('CNLGhYQgNwjyDfHZTEjHfk1MPkqwP96qZahWN82UfcLM'); diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 58a3d11e24..91d9c11175 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -9,7 +9,15 @@ const { sleep, sliceIntoChunks, log, } = require('./utils') const { decodeAccount } = require('./utils/solana/layout') const sdk = require('@defillama/sdk'); -const { TOKEN_PROGRAM_ID, ASSOCIATED_PROGRAM_ID, } = require('@project-serum/anchor/dist/cjs/utils/token'); + +/** Address of the SPL Token program */ +const TOKEN_PROGRAM_ID = new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA') + +/** Address of the SPL Token 2022 program */ +const TOKEN_2022_PROGRAM_ID = new PublicKey('TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb') + +/** Address of the SPL Associated Token Account program */ +const ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL') const blacklistedTokens_default = [ 'CowKesoLUaHSbAMaUxJUj7eodHHsaLsS65cy8NFyRDGP', @@ -282,7 +290,7 @@ async function sumTokens2({ return tokensAndOwners.map(([mint, owner]) => { return PublicKey.findProgramAddressSync( [owner.toBuffer(), programBuffer, mint.toBuffer(),], - ASSOCIATED_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID )[0] }) } @@ -381,4 +389,7 @@ module.exports = { getStakedSol, getSolBalanceFromStakePool, getTokenSupplies, + TOKEN_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID, + TOKEN_2022_PROGRAM_ID, }; From cb3b623e0ba5be92dba59810ed2f667f7a85051f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:46:32 +0100 Subject: [PATCH 1018/1768] Eclipse (#12251) --- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/portedTokens.js | 2 +- projects/helper/solana.js | 41 ++++++++++++++++++++++----------- projects/helper/tokenMapping.js | 11 ++++++++- projects/invariant/index.js | 22 ++++++++++++++---- projects/lifinity-v2/index.js | 17 ++++++++++---- projects/orca/index.js | 13 ++++++----- projects/solar-studios/index.js | 20 ++++++++++++++++ projects/solend/index.js | 7 +++++- 10 files changed, 102 insertions(+), 33 deletions(-) create mode 100644 projects/solar-studios/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index b18ca15745..a83cb91ada 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -95,6 +95,7 @@ "dydx", "dymension", "echelon", + "eclipse", "edg", "elastos", "elrond", diff --git a/projects/helper/env.js b/projects/helper/env.js index c95eb7eaba..5abcb317a4 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -8,6 +8,7 @@ const DEFAULTS = { STARKNET_RPC: 'https://starknet-mainnet.public.blastapi.io', COVALENT_KEY: 'ckey_72cd3b74b4a048c9bc671f7c5a6', SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', + ECLIPSE_RPC: 'https://eclipse.lgns.net', APTOS_RPC: 'https://aptos-mainnet.pontem.network', SUI_RPC: 'https://fullnode.mainnet.sui.io/', SUI_GRAPH_RPC: 'https://sui-mainnet.mystenlabs.com/graphql', diff --git a/projects/helper/portedTokens.js b/projects/helper/portedTokens.js index 01eb946f4a..f24b23c6f3 100644 --- a/projects/helper/portedTokens.js +++ b/projects/helper/portedTokens.js @@ -113,7 +113,7 @@ async function getChainTransform(chain) { if (chain === 'aura' && addr.startsWith('aura')) return chainStr if (chain === 'massa' && addr.startsWith('AS1')) return chainStr if (chain === 'algorand' && /^\d+$/.test(addr)) return chainStr - if (addr.startsWith('0x') || ['solana', 'kava', 'renec'].includes(chain)) return chainStr + if (addr.startsWith('0x') || ['solana', 'kava', 'renec', 'eclipse'].includes(chain)) return chainStr return addr }; } diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 91d9c11175..29f7b404e0 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -39,9 +39,12 @@ const endpoint = (isClient) => { } const renecEndpoint = () => getEnv('RENEC_RPC') +const eclipseEndpoint = () => getEnv('ECLIPSE_RPC') + const endpointMap = { solana: endpoint, renec: renecEndpoint, + eclipse: eclipseEndpoint, } function getConnection(chain = 'solana') { @@ -175,7 +178,12 @@ function sumTokensExport({ tokenAccounts, owner, owners, tokens, solOwners, blac return (api) => sumTokens2({ api, chain: api.chain, tokenAccounts, owner, owners, tokens, solOwners, blacklistedTokens, allowError, tokensAndOwners, ...rest }) } +function getEndpoint(chain) { + return endpointMap[chain]() +} + async function sumTokens2({ + api, balances = {}, tokensAndOwners = [], tokens = [], @@ -186,7 +194,10 @@ async function sumTokens2({ blacklistedTokens = [], allowError = false, computeTokenAccount = false, + chain = 'solana', }) { + if (api) chain = api.chain + const endpoint = getEndpoint(chain) blacklistedTokens.push(...blacklistedTokens_default) if (!tokensAndOwners.length) { if (owner) tokensAndOwners = tokens.map(t => [t, owner]) @@ -198,8 +209,9 @@ async function sumTokens2({ const data = await getOwnerAllAccounts(_owners) for (const item of data) { if (blacklistedTokens.includes(item.mint) || +item.amount < 1e6) continue; - sdk.util.sumSingleBalance(balances, 'solana:' + item.mint, item.amount) + sdk.util.sumSingleBalance(balances, chain + ':' + item.mint, item.amount) } + await transformBalancesOrig(chain, balances) } tokensAndOwners = tokensAndOwners.filter(([token]) => !blacklistedTokens.includes(token)) @@ -212,20 +224,20 @@ async function sumTokens2({ tokensAndOwners = getUnique(tokensAndOwners) log('total balance queries: ', tokensAndOwners.length) await runInChunks(tokensAndOwners, async (chunk) => { - const tokenBalances = await getTokenBalances(chunk) - transformBalances({ tokenBalances, balances, }) + const tokenBalances = await getTokenBalances(chunk, chain) + transformBalances({ tokenBalances, balances, chain, }) }, { sleepTime: 400 }) } if (tokenAccounts.length) { tokenAccounts = getUniqueAddresses(tokenAccounts, 'solana') - const tokenBalances = await getTokenAccountBalances(tokenAccounts, { allowError }) - await transformBalances({ tokenBalances, balances, }) + const tokenBalances = await getTokenAccountBalances(tokenAccounts, { allowError, chain }) + await transformBalances({ tokenBalances, balances, chain, }) } if (solOwners.length) { - const solBalance = await getSolBalances(solOwners) + const solBalance = await getSolBalances(solOwners, { chain }) sdk.util.sumSingleBalance(balances, 'solana:' + ADDRESSES.solana.SOL, solBalance) } @@ -242,10 +254,10 @@ async function sumTokens2({ } async function getOwnerAllAccounts(owners) { - console.log('fetching sol token balances for', owners.length, 'owners') + sdk.log('fetching sol token balances for', owners.length, 'owners', chain,) return runInChunks(owners, async (chunk) => { const body = chunk.map(i => formOwnerBalanceQuery(i)) - const tokenBalances = await http.post(endpoint(), body) + const tokenBalances = await http.post(endpoint, body) return tokenBalances.map(i => i.result.value).flat().map(i => ({ account: i.pubkey, mint: i.account.data.parsed.info.mint, @@ -270,8 +282,8 @@ async function sumTokens2({ } } - async function getSolBalances(accounts) { - const connection = getConnection() + async function getSolBalances(accounts, { chain} = {}) { + const connection = getConnection(chain) const balances = await runInChunks(accounts, async (chunk) => { chunk = chunk.map(i => typeof i === 'string' ? new PublicKey(i) : i) @@ -295,9 +307,10 @@ async function sumTokens2({ }) } - async function getTokenBalances(tokensAndAccounts) { + async function getTokenBalances(tokensAndAccounts, chain) { + const endpoint = getEndpoint(chain) const body = tokensAndAccounts.map(([token, account], i) => formTokenBalanceQuery(token, account, i)) - const tokenBalances = await http.post(endpoint(), body); + const tokenBalances = await http.post(endpoint, body); const balances = {} tokenBalances.forEach(({ result: { value } = {} } = {}) => { if (!value) return; @@ -322,8 +335,8 @@ async function sumTokens2({ } } -async function transformBalances({ tokenBalances, balances = {}, }) { - await transformBalancesOrig('solana', tokenBalances) +async function transformBalances({ tokenBalances, balances = {}, chain = 'solana' }) { + await transformBalancesOrig(chain, tokenBalances) for (const [token, balance] of Object.entries(tokenBalances)) sdk.util.sumSingleBalance(balances, token, balance) return balances diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 32b38de117..2ee5d86cc6 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -19,7 +19,9 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify'] -const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa',] +const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', + 'eclipse', +] const transformTokens = { // Sample Code @@ -167,6 +169,13 @@ const fixBalancesTokens = { arbitrum: { '0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a': { coingeckoId: 'universal-btc', decimals: 8 }, }, + eclipse: { + 'So11111111111111111111111111111111111111112': { coingeckoId: 'ethereum', decimals: 9 }, + '9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP': { coingeckoId: 'ethereum', decimals: 9 }, + 'BeRUj3h7BqkbdfFU7FBNYbodgf8GCHodzKvF9aVjNNfL': { coingeckoId: 'solana', decimals: 9 }, + 'AKEWE7Bgh87GPp171b4cJPSSZfmZwQ3KaqYqXoKLNAEE': { coingeckoId: 'usd-coin', decimals: 6 }, + '841P4tebEgNux2jaWSjCoi9LhrVr9eHGjLc758Va3RPH': { coingeckoId: 'dogwifcoin', decimals: 6 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/invariant/index.js b/projects/invariant/index.js index 0098e4a90e..82fb0475e9 100644 --- a/projects/invariant/index.js +++ b/projects/invariant/index.js @@ -1,13 +1,25 @@ const { sumTokens2 } = require('../helper/solana') +const { getConfig } = require('../helper/cache') -async function tvl() { - return sumTokens2({ owner: 'J4uBbeoWpZE8fH58PM1Fp9n9K6f1aThyeVCyRdJbaXqt' }) +const config = { + solana: 'J4uBbeoWpZE8fH58PM1Fp9n9K6f1aThyeVCyRdJbaXqt', + eclipse: 'D4P9HJYPczLFHvxBgpLKooy7eWczci8pr4x9Zu7iYCVN', } module.exports = { timetravel: false, - solana: { - tvl - }, methodology: "TVL is a sum of the locked capital in each liquidity pool", }; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + if (chain === 'eclipse') { + const { tokensData } = await getConfig('invariant/eclipse', 'https://stats.invariant.app/svm/full_snap/eclipse-mainnet') + const tokens = tokensData.map(t => t.address) + return sumTokens2({ owner: config[chain], tokens, api }) + } + return sumTokens2({ owner: config[chain], api }) + } + } +}) diff --git a/projects/lifinity-v2/index.js b/projects/lifinity-v2/index.js index db5e782803..846353ac45 100644 --- a/projects/lifinity-v2/index.js +++ b/projects/lifinity-v2/index.js @@ -1,21 +1,28 @@ const { getProvider, sumTokens2, } = require('../helper/solana') const { Program } = require("@project-serum/anchor"); -async function getTokenAccounts(programId, idl) { - const provider = getProvider() +async function getTokenAccounts(programId, idl, chain) { + const provider = getProvider(chain) + console.log(programId, chain) const program = new Program(idl, programId, provider) const data = await program.account.amm.all() return data.map(({ account: { tokenAAccount, tokenBAccount }}) => ([tokenAAccount, tokenBAccount,])).flat() } -async function tvl() { - const tokenAccounts = await getTokenAccounts('2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c', v2Idl) - return sumTokens2({ tokenAccounts, }) +const config = { + solana: '2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c', + eclipse: '4UsSbJQZJTfZDFrgvcPBRCSg5BbcQE6dobnriCafzj12', +} + +async function tvl(api) { + const tokenAccounts = await getTokenAccounts(config[api.chain], v2Idl, api.chain) + return sumTokens2({ tokenAccounts, api, }) } module.exports = { timetravel: false, solana: { tvl, }, + eclipse: { tvl, }, } const v2Idl = { diff --git a/projects/orca/index.js b/projects/orca/index.js index a3c21e323d..2f25675e57 100644 --- a/projects/orca/index.js +++ b/projects/orca/index.js @@ -2,13 +2,13 @@ const { getProvider, sumTokens2, exportDexTVL, } = require('../helper/solana') const { Program, } = require("@project-serum/anchor"); const sdk = require('@defillama/sdk') -async function tvl() { - const provider = getProvider() +async function tvl(api) { + const provider = getProvider(api.chain) const programId = 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc' const program = new Program(whirpoolIDL, programId, provider) const whirlpools = await program.account.whirlpool.all() - const tokenAccounts = whirlpools.map(({ account}) => [account.tokenVaultA, account.tokenVaultB]).flat() - return sumTokens2({ tokenAccounts, }) + const tokenAccounts = whirlpools.map(({ account }) => [account.tokenVaultA, account.tokenVaultB]).flat() + return sumTokens2({ tokenAccounts, api, }) } /* async function orcaPoolTvlViaConfig() { @@ -22,14 +22,15 @@ async function tvl() { return sumTokens2({ tokenAccounts, blacklistedTokens, }) } */ -const orcaV1Tvl = exportDexTVL('DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1') -const orcaV2Tvl = exportDexTVL('9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP') +const orcaV1Tvl = exportDexTVL('DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1') +const orcaV2Tvl = exportDexTVL('9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP') module.exports = { timetravel: false, solana: { tvl: sdk.util.sumChainTvls([orcaV1Tvl, orcaV2Tvl, tvl]) }, + eclipse: { tvl }, hallmarks: [ [1628565707, "Token+LM launch"], [1667865600, "FTX collapse"] diff --git a/projects/solar-studios/index.js b/projects/solar-studios/index.js new file mode 100644 index 0000000000..c519ab923f --- /dev/null +++ b/projects/solar-studios/index.js @@ -0,0 +1,20 @@ +const { getProvider, sumTokens2 } = require("../helper/solana"); +const { Program, } = require("@project-serum/anchor"); + + +async function tvl(api) { + + const provider = getProvider(api.chain) + const programId = 'sooGfQwJ6enHfLTPfasFZtFR7DgobkJD77maDNEqGkD' + const idl = await Program.fetchIdl(programId, provider) + const program = new Program(idl, programId, provider) + const data = await program.account.poolState.all() + console.log(data.length) + const tokenAccounts = data.map(({ account: { token0Vault, token1Vault }}) => ([token0Vault, token1Vault,])).flat() + return sumTokens2({ tokenAccounts, api, }) +} + +module.exports = { + timetravel: false, + eclipse: { tvl, }, +} diff --git a/projects/solend/index.js b/projects/solend/index.js index d8c495f05e..9670d6dda5 100644 --- a/projects/solend/index.js +++ b/projects/solend/index.js @@ -21,7 +21,11 @@ async function borrowed(api) { async function tvl() { const markets = (await getConfig('solend', solendConfigEndpoint)) - return sumTokens2({ owners: markets.map(i => i.authorityAddress)}); + return sumTokens2({ owners: markets.map(i => i.authorityAddress) }); +} + +async function eclipseTvl(api) { + return sumTokens2({ api, owners: ['5Gk1kTdDqqacmA2UF3UbNhM7eEhVFvF3p8nd9p3HbXxk'] }); } module.exports = { @@ -30,6 +34,7 @@ module.exports = { tvl, borrowed, }, + eclipse: { tvl: eclipseTvl }, methodology: "TVL consists of deposits made to the protocol and like other lending protocols, borrowed tokens are not counted. Coingecko is used to price tokens.", hallmarks: [ From 1ca82c9df2d81ef35b037d28769020a7e145b5f6 Mon Sep 17 00:00:00 2001 From: 0xYFLOW <139814596+0xYFLOW@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:55:47 +0400 Subject: [PATCH 1019/1768] Update index.js (#12250) --- projects/yieldflow/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/projects/yieldflow/index.js b/projects/yieldflow/index.js index 65872ca4fc..4f6f7dc694 100644 --- a/projects/yieldflow/index.js +++ b/projects/yieldflow/index.js @@ -78,6 +78,14 @@ const managers = [ '0x1F73AbC7e254980AB26974C9A13c8493143F97Bc', '0x599Dd6b1205E51fbcb2879105051C0EBbfa76b03', '0xcC125F83BFe2A30F1BEfdf6E06043dB5a7a02A61', + + '0xd7F287266D0E057D0e64C126687154CB1db9610A', + '0x56E81D09b31572982019fDa2e284cFAe48BD5aAc', + '0xAf0ddFa27EcccF9f0358cAC2d18E4800b53063f4', + + '0x3Bd5B4422685F9321F0e5a8333067A4A049fC664', + '0x1AC1d8911BBb2Fed8fD736e3649FC363001C8e07', + '0x5ABf77610fabaD2DeF07A43eF6f66C1D2438dE7e', ] async function tvl(api) { From cdcae7451127972460958f7904f7a1ab4cfda532 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 07:28:54 +0100 Subject: [PATCH 1020/1768] track opendelta #12248 --- projects/opendelta/index.js | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 projects/opendelta/index.js diff --git a/projects/opendelta/index.js b/projects/opendelta/index.js new file mode 100644 index 0000000000..fa045dd629 --- /dev/null +++ b/projects/opendelta/index.js @@ -0,0 +1,39 @@ +const { PublicKey, } = require("@solana/web3.js") +const { getConnection, } = require("../helper/solana") + +const OPB_MINT_ADDRESS = "opbrKSFxFXRHNg75xjpEAbJ5R6e6GYZ6QKEqdvcBq7c" + +async function tvl(api) { + const connection = getConnection() + const { value: { data: { parsed: { info: { supply, decimals, extensions }}}}} = await connection.getParsedAccountInfo(new PublicKey(OPB_MINT_ADDRESS)) + const { state } = extensions.find(e => e.extension === 'interestBearingConfig') + api.addUSDValue(computeSupply(supply, state, decimals)) + + function computeSupply(supply, extensionData, decimals) { + // Compute the supply based on the interest-bearing extension + const { currentRate, initializationTimestamp, preUpdateAverageRate, lastUpdateTimestamp, } = extensionData + + // Example computation (adjust as needed) + const currentTimestamp = Math.floor(Date.now() / 1000) + const timeElapsed = lastUpdateTimestamp - initializationTimestamp + const timeElapsedSinceLastUpdate = currentTimestamp - lastUpdateTimestamp + const interestRate = currentRate / 1e4 + const interestRatePre = preUpdateAverageRate / 1e4 + const ONE_YEAR = 365 * 24 * 60 * 60 + const interestAccruedCurrent = interestRate * timeElapsedSinceLastUpdate / ONE_YEAR + const interestAccruedPre = interestRatePre * timeElapsed / ONE_YEAR + + const computedSupply = supply * (1 + interestAccruedCurrent + interestAccruedPre) + return computedSupply / Math.pow(10, decimals) + } + +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + methodology: "TVL is calculated by multiplying OPB token supply by the current USD value of 1.0 OPB. Initially worth $1.0, 1.0 OPB now reflects its increased value from accrued interest, derived via amountToUiAmount using the Interest Bearing extension.", + solana: { + tvl, + }, +} From 50140df9ec6a097ec9c7f378719a87fdc1548847 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 07:29:19 +0100 Subject: [PATCH 1021/1768] remove comment --- projects/opendelta/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/opendelta/index.js b/projects/opendelta/index.js index fa045dd629..e842ad9913 100644 --- a/projects/opendelta/index.js +++ b/projects/opendelta/index.js @@ -13,7 +13,6 @@ async function tvl(api) { // Compute the supply based on the interest-bearing extension const { currentRate, initializationTimestamp, preUpdateAverageRate, lastUpdateTimestamp, } = extensionData - // Example computation (adjust as needed) const currentTimestamp = Math.floor(Date.now() / 1000) const timeElapsed = lastUpdateTimestamp - initializationTimestamp const timeElapsedSinceLastUpdate = currentTimestamp - lastUpdateTimestamp From b1d8cd1be900450cd391e542d663ca6a8df4ef7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=8B=A4=EC=9D=80?= <132417166+leeeunda@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:32:11 +0900 Subject: [PATCH 1022/1768] Add memeta adapter (#12262) --- projects/memeta/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/memeta/index.js diff --git a/projects/memeta/index.js b/projects/memeta/index.js new file mode 100644 index 0000000000..ce86a66503 --- /dev/null +++ b/projects/memeta/index.js @@ -0,0 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json'); + +async function tvl(api) { + const MEMETA_CONTRACT_ADDRESS = "0xD76A1A03C4873042c50ba77cE455C793C70d1b2d"; + + return api.sumTokens({ + owner: MEMETA_CONTRACT_ADDRESS, + tokens: [ + ADDRESSES.manta.WETH, + ADDRESSES.manta.USDC, + ADDRESSES.manta.USDT, + ADDRESSES.manta.WBTC, + ], + }); +} + +module.exports = { + manta: { tvl }, +}; \ No newline at end of file From 4b7f45535fd0c1da308749b7916ac793d9b640e3 Mon Sep 17 00:00:00 2001 From: jan-magpie <155635960+jan-magpie@users.noreply.github.com> Date: Wed, 13 Nov 2024 12:19:16 +0530 Subject: [PATCH 1023/1768] Modified code to counter race error (#12263) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/eigenpie/index.js | 44 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/projects/eigenpie/index.js b/projects/eigenpie/index.js index 849fd8c5a2..c487fad2e2 100644 --- a/projects/eigenpie/index.js +++ b/projects/eigenpie/index.js @@ -1,20 +1,40 @@ const config = require("./config"); +const sdk = require('@defillama/sdk') + +async function getZircuitSupplies(api) { + const { msteth, egeth } = config[api.chain]; + const mlrttokens = [msteth, egeth]; + const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens, }); + return { + zircuitMstethSupply: tokenSupplies[0], + zircuitEgethSupply: tokenSupplies[1], + }; +} async function tvl(api) { - const { eigenConfig, } = config[api.chain]; + const { eigenConfig } = config[api.chain]; + + const zircuitApi = new sdk.ChainApi({ chain: 'zircuit', timestamp: api.timestamp }); + await zircuitApi.getBlock() + const zircuitSupplies = await getZircuitSupplies(zircuitApi); + api.add('0xae7ab96520de3a18e5e111b5eaab095312d7fe84', zircuitSupplies.zircuitMstethSupply * -1); // Adjust for msteth + api.add('0xeFEfeFEfeFeFEFEFEfefeFeFefEfEfEfeFEFEFEf', zircuitSupplies.zircuitEgethSupply * -1); // Adjust for egeth - let tokens = await api.call({ abi: 'address[]:getSupportedAssetList', target: eigenConfig, }); - const mlrttokens = await api.multiCall({ abi: 'function mLRTReceiptByAsset(address) view returns (address)', calls: tokens, target: eigenConfig }) - const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens }) - api.add(tokens, tokenSupplies) + // Fetch token list and their supplies + let tokens = await api.call({ abi: 'address[]:getSupportedAssetList', target: eigenConfig }); + const mlrttokens = await api.multiCall({ abi: 'function mLRTReceiptByAsset(address) view returns (address)', calls: tokens, target: eigenConfig }); + const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens }); + api.add(tokens, tokenSupplies); } async function tvl_zircuit(api) { const { msteth, egeth, wsteth, weth } = config[api.chain]; - const mlrttokens = [msteth, egeth] - const tokens = [wsteth, weth] - const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens }) - api.add(tokens, tokenSupplies) + const mlrttokens = [msteth, egeth]; + const tokens = [wsteth, weth]; + + // Now add zircuit-specific supplies + const tokenSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: mlrttokens }); + api.add(tokens, tokenSupplies); } module.exports = { @@ -23,7 +43,7 @@ module.exports = { }, zircuit: { tvl: tvl_zircuit, - } -} + }, +}; -module.exports.doublecounted = true \ No newline at end of file +module.exports.doublecounted = true; From 0b36e45c39f21258fda0425f69c6c293bf611146 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:02:21 +0100 Subject: [PATCH 1024/1768] track manifest trade #12260 --- projects/manifest-trade/index.js | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 projects/manifest-trade/index.js diff --git a/projects/manifest-trade/index.js b/projects/manifest-trade/index.js new file mode 100644 index 0000000000..9208b0fc67 --- /dev/null +++ b/projects/manifest-trade/index.js @@ -0,0 +1,83 @@ +const { PublicKey } = require("@solana/web3.js"); +const { getConnection, sumTokens2, } = require("../helper/solana"); + +const PROGRAM_ADDRESS = 'MNFSTqtC93rEfYHB6hF82sKdZpUDFWkViLByLd1k1Ms'; +const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS); +function getVaultAddress(market, mint) { + const [vaultAddress, _unusedBump] = PublicKey.findProgramAddressSync( + [Buffer.from('vault'), market.toBuffer(), mint.toBuffer()], + PROGRAM_ID, + ); + return vaultAddress; +} +function getGlobalVaultAddress(mint) { + const [globalVaultAddress, _unusedBump] = PublicKey.findProgramAddressSync( + [Buffer.from('global-vault'), mint.toBuffer()], + PROGRAM_ID, + ); + return globalVaultAddress; +} + +async function listMarketPublicKeys( + connection, +) { + const accounts = await connection.getProgramAccounts(PROGRAM_ID, { + filters: [ + { + memcmp: { + offset: 0, + bytes: '8K9hj5OfcUM=', + encoding: 'base64', + }, + }, + ], + }); + + return accounts.map((a) => a.pubkey); +} + +async function tvl() { + const connection = getConnection(); + const marketPks = await listMarketPublicKeys(connection); + + const vaultAccounts = []; + let globalAccounts = []; + for (const pk of marketPks) { + const [buffer, _slot] = await connection + .getAccountInfoAndContext(pk) + .then( + ( + getAccountInfoAndContext, + ) => { + return [ + getAccountInfoAndContext.value?.data, + getAccountInfoAndContext.context.slot, + ]; + }, + ); + + let offset = 16; + const baseMint = new PublicKey(buffer.subarray(offset, offset + 32)); + const quoteMint = new PublicKey(buffer.subarray(offset + 32, offset + 32 + 32)); + + const baseVaultPk = getVaultAddress(pk, baseMint); + const quoteVaultPk = getVaultAddress(pk, quoteMint); + vaultAccounts.push(baseVaultPk); + vaultAccounts.push(quoteVaultPk); + + const baseGlobalPk = getGlobalVaultAddress(baseMint); + const quoteGlobalPk = getGlobalVaultAddress(quoteMint); + globalAccounts.push(baseGlobalPk); + globalAccounts.push(quoteGlobalPk); + } + + const tokenAccounts = vaultAccounts.concat(globalAccounts); + return sumTokens2({ tokenAccounts, allowError: true }) +} + +module.exports = { + timetravel: false, + solana: { + tvl, + }, +}; \ No newline at end of file From 5a8ec866ba340d1a52f30ec4c3ca2a8b965c785f Mon Sep 17 00:00:00 2001 From: Liam Dyer Date: Wed, 13 Nov 2024 02:03:15 -0500 Subject: [PATCH 1025/1768] fix: drop hex conversion on liqwid asset name (#12259) Co-authored-by: rcheiko --- projects/liqwid/index.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/projects/liqwid/index.js b/projects/liqwid/index.js index 020298cf5e..ba25beed08 100644 --- a/projects/liqwid/index.js +++ b/projects/liqwid/index.js @@ -61,11 +61,13 @@ const query = `query($input: MarketsInput) { const tokenMapping = { Ada: 'lovelace', DJED: '8db269c3ec630e06ae29f74bc39edd1f87c819f1056206e879a1cd61446a65644d6963726f555344', + USDM: 'c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d', DAI: 'dai', - USDM: 'c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d' + USDC: 'usd-coin', + USDT: 'tether', } -const getToken = (market) => tokenMapping[market.id] ?? market.asset.currencySymbol + toHex(market.asset.name) +const getToken = (market) => tokenMapping[market.id] ?? market.asset.currencySymbol + market.asset.name const getOptimBondTVL = async () => { const getLoans = async (pageIndex = 0, collectedLoans = []) => { @@ -166,11 +168,3 @@ async function borrowed(api) { add(api, market, market.borrow * 10 ** market.asset.decimals) }) } - -function toHex(str) { - let hex = '' - for (let i = 0; i < str.length; i++) { - hex += str.charCodeAt(i).toString(16); - } - return hex -} From 06e465fa5954e845c9a3c8a71a2468d4fbfb9b7f Mon Sep 17 00:00:00 2001 From: Mahyar Daneshpajooh <34237597+MahyarDaneshpajooh@users.noreply.github.com> Date: Wed, 13 Nov 2024 02:18:57 -0500 Subject: [PATCH 1026/1768] feat: teleswap adapter (#12258) --- projects/teleswap/index.js | 96 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 projects/teleswap/index.js diff --git a/projects/teleswap/index.js b/projects/teleswap/index.js new file mode 100644 index 0000000000..68adfee55e --- /dev/null +++ b/projects/teleswap/index.js @@ -0,0 +1,96 @@ +const sdk = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens } = require('../helper/chain/bitcoin.js'); +// const { sumTokensExport: sumBRC20TokensExport } = require('../helper/chain/brc20.js'); + +const POLYGON_LOCKERS_MANAGER_PROXY = '0xf5D6D369A7F4147F720AEAdd4C4f903aE8046166'; +const BNB_LOCKERS_MANAGER_PROXY = '0x84F74e97ebab432CeE185d601290cE0A483987A5'; +const BSQUARED_LOCKERS_MANAGER_PROXY = '0x20752a82fe75996a582Ae2be1b7C3D4866C5b733'; +const BOB_LOCKERS_MANAGER_PROXY = '0xd720996f0D8fFD9154c8271D2991f54E5d93D2A9'; +const TST = "0x0828096494ad6252F0F853abFC5b6ec9dfe9fDAd"; +const TST_DELEGATION = "0x93AD6C8B3a273E0B4aeeBd6CF03422C885217D3B"; + +const POLYGON_LOCKER = '3CAQAw7m95axbY761Xq8d9DADhjNaX9b8o'; +const BNB_LOCKER = '3KLdeu9maZAfccm3TeRWEmUMuw2e8SLo4v'; +const BSQUARED_LOCKER = '3E2hwnq5BsmP1ea6JUhjdKZjh2wy4NuQ8T'; +const BOB_LOCKER = '31uHNFfbejkbUD2B26o2CARfU1ALJ6x6Ag'; +// const BRC20_LOCKER='3LNsey3ceG9ZHkQ7bcfAjwnew7KVujHt29'; + +async function bitcoin_tvl() { + // TODO: add BRC-20 locker + // TODO: get Bitcoin address of Lockers dynamically + // Get BTC balance of Lockers + return await sumTokens({ + owners: [POLYGON_LOCKER, BNB_LOCKER, BSQUARED_LOCKER, BOB_LOCKER] + }); +} + +async function polygon_tvl(api) { + // Get Lockers collateral + const collateralBalance = await sdk.api.eth.getBalance({ + target: POLYGON_LOCKERS_MANAGER_PROXY, + chain: 'polygon' + }); + api.add("0x0000000000000000000000000000000000000000", collateralBalance.output) +} + +async function bnb_tvl(api) { + // Get Lockers collateral + const collateralBalance = await sdk.api.eth.getBalance({ + target: BNB_LOCKERS_MANAGER_PROXY, + chain: 'bsc' + }); + api.add("0x0000000000000000000000000000000000000000", collateralBalance.output) +} + +async function bsquared_tvl(api) { + // Get Lockers collateral + const collateralBalance = await api.call({ + abi: 'erc20:balanceOf', + target: ADDRESSES.bsquared.WBTC, + params: [BSQUARED_LOCKERS_MANAGER_PROXY], + }); + api.add(ADDRESSES.bsquared.WBTC, collateralBalance) +} + +async function bob_tvl(api) { + // Get Lockers collateral + const collateralBalance = await api.call({ + abi: 'erc20:balanceOf', + target: ADDRESSES.bob.WBTC, + params: [BOB_LOCKERS_MANAGER_PROXY], + }); + api.add(ADDRESSES.bob.WBTC, collateralBalance) +} + +async function ethereum_tvl(api) { + // Get delegated TST + const delegatedBalace = await api.call({ + abi: 'erc20:balanceOf', + target: TST, + params: [TST_DELEGATION], + }); + api.add(TST, delegatedBalace) +} + +module.exports = { + methodology: 'TVL is the sum of all BTC locked by users, collateral locked by Lockers, and TST delegated to Lockers.', + bitcoin: { + tvl: bitcoin_tvl, + }, + polygon: { + tvl: polygon_tvl, + }, + bsc: { + tvl: bnb_tvl, + }, + bsquared: { + tvl: bsquared_tvl, + }, + bob: { + tvl: bob_tvl, + }, + ethereum: { + tvl: ethereum_tvl, + } +}; \ No newline at end of file From f29f871145b3e2f4ca931e175ce2b25378f6697d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:19:55 +0100 Subject: [PATCH 1027/1768] Teleswap (#12264) Co-authored-by: MahyarDaneshpajooh --- projects/helper/bitcoin-book/index.js | 8 ++ projects/teleswap/index.js | 108 ++++++-------------------- 2 files changed, 31 insertions(+), 85 deletions(-) diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index f5f7285f2c..f3ac166bc3 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -85,9 +85,17 @@ const indiaCovid = require('./india-covid.js') const wooCEX = require('./woo-cex.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] +const teleswap = [ + '3CAQAw7m95axbY761Xq8d9DADhjNaX9b8o', // POLYGON_LOCKER + '3KLdeu9maZAfccm3TeRWEmUMuw2e8SLo4v', // BNB_LOCKER + '3E2hwnq5BsmP1ea6JUhjdKZjh2wy4NuQ8T', // BSQUARED_LOCKER + '31uHNFfbejkbUD2B26o2CARfU1ALJ6x6Ag', // BOB_LOCKER + '3LNsey3ceG9ZHkQ7bcfAjwnew7KVujHt29', // BRC20_LOCKER +] module.exports = { ...fetchers, + teleswap, ainn, allo, avalanche, diff --git a/projects/teleswap/index.js b/projects/teleswap/index.js index 68adfee55e..f4d272436a 100644 --- a/projects/teleswap/index.js +++ b/projects/teleswap/index.js @@ -1,96 +1,34 @@ const sdk = require('@defillama/sdk'); const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens } = require('../helper/chain/bitcoin.js'); -// const { sumTokensExport: sumBRC20TokensExport } = require('../helper/chain/brc20.js'); +const { sumTokensExport } = require('../helper/sumTokens.js'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const { sumTokensExport: sumBRC20TokensExport } = require('../helper/chain/brc20.js'); -const POLYGON_LOCKERS_MANAGER_PROXY = '0xf5D6D369A7F4147F720AEAdd4C4f903aE8046166'; -const BNB_LOCKERS_MANAGER_PROXY = '0x84F74e97ebab432CeE185d601290cE0A483987A5'; -const BSQUARED_LOCKERS_MANAGER_PROXY = '0x20752a82fe75996a582Ae2be1b7C3D4866C5b733'; -const BOB_LOCKERS_MANAGER_PROXY = '0xd720996f0D8fFD9154c8271D2991f54E5d93D2A9'; const TST = "0x0828096494ad6252F0F853abFC5b6ec9dfe9fDAd"; const TST_DELEGATION = "0x93AD6C8B3a273E0B4aeeBd6CF03422C885217D3B"; -const POLYGON_LOCKER = '3CAQAw7m95axbY761Xq8d9DADhjNaX9b8o'; -const BNB_LOCKER = '3KLdeu9maZAfccm3TeRWEmUMuw2e8SLo4v'; -const BSQUARED_LOCKER = '3E2hwnq5BsmP1ea6JUhjdKZjh2wy4NuQ8T'; -const BOB_LOCKER = '31uHNFfbejkbUD2B26o2CARfU1ALJ6x6Ag'; -// const BRC20_LOCKER='3LNsey3ceG9ZHkQ7bcfAjwnew7KVujHt29'; -async function bitcoin_tvl() { - // TODO: add BRC-20 locker - // TODO: get Bitcoin address of Lockers dynamically - // Get BTC balance of Lockers - return await sumTokens({ - owners: [POLYGON_LOCKER, BNB_LOCKER, BSQUARED_LOCKER, BOB_LOCKER] - }); -} - -async function polygon_tvl(api) { - // Get Lockers collateral - const collateralBalance = await sdk.api.eth.getBalance({ - target: POLYGON_LOCKERS_MANAGER_PROXY, - chain: 'polygon' - }); - api.add("0x0000000000000000000000000000000000000000", collateralBalance.output) -} - -async function bnb_tvl(api) { - // Get Lockers collateral - const collateralBalance = await sdk.api.eth.getBalance({ - target: BNB_LOCKERS_MANAGER_PROXY, - chain: 'bsc' - }); - api.add("0x0000000000000000000000000000000000000000", collateralBalance.output) -} - -async function bsquared_tvl(api) { - // Get Lockers collateral - const collateralBalance = await api.call({ - abi: 'erc20:balanceOf', - target: ADDRESSES.bsquared.WBTC, - params: [BSQUARED_LOCKERS_MANAGER_PROXY], - }); - api.add(ADDRESSES.bsquared.WBTC, collateralBalance) -} - -async function bob_tvl(api) { - // Get Lockers collateral - const collateralBalance = await api.call({ - abi: 'erc20:balanceOf', - target: ADDRESSES.bob.WBTC, - params: [BOB_LOCKERS_MANAGER_PROXY], - }); - api.add(ADDRESSES.bob.WBTC, collateralBalance) +module.exports = { + methodology: 'TVL is the sum of all BTC locked by users, collateral locked by Lockers, and TST delegated to Lockers.', + bitcoin: { + tvl: sdk.util.sumChainTvls([ + sumTokensExport({ owners: bitcoinAddressBook.teleswap }), + sumBRC20TokensExport({ owners: bitcoinAddressBook.teleswap }), + ]) + }, + ethereum: { staking: sumTokensExport({ owners: [TST_DELEGATION], tokens: [TST] }) }, } -async function ethereum_tvl(api) { - // Get delegated TST - const delegatedBalace = await api.call({ - abi: 'erc20:balanceOf', - target: TST, - params: [TST_DELEGATION], - }); - api.add(TST, delegatedBalace) +const config = { + polygon: { owners: ['0xf5D6D369A7F4147F720AEAdd4C4f903aE8046166'], tokens: [ADDRESSES.null] }, + bsc: { owners: ['0x84F74e97ebab432CeE185d601290cE0A483987A5'], tokens: [ADDRESSES.null] }, + bsquared: { owners: ['0x20752a82fe75996a582Ae2be1b7C3D4866C5b733'], tokens: [ADDRESSES.bsquared.WBTC] }, + bob: { owners: ['0xd720996f0D8fFD9154c8271D2991f54E5d93D2A9'], tokens: [ADDRESSES.bob.WBTC] }, } -module.exports = { - methodology: 'TVL is the sum of all BTC locked by users, collateral locked by Lockers, and TST delegated to Lockers.', - bitcoin: { - tvl: bitcoin_tvl, - }, - polygon: { - tvl: polygon_tvl, - }, - bsc: { - tvl: bnb_tvl, - }, - bsquared: { - tvl: bsquared_tvl, - }, - bob: { - tvl: bob_tvl, - }, - ethereum: { - tvl: ethereum_tvl, - } -}; \ No newline at end of file +Object.keys(config).forEach(chain => { + const { owners, tokens, } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owners, tokens }) + } +}) \ No newline at end of file From aef50d23d820ab8ea6909b913bbfcf648e058b06 Mon Sep 17 00:00:00 2001 From: SimsalaCrypto <94809733+SimsalaCrypto@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:20:50 +0100 Subject: [PATCH 1028/1768] - add preon amo tvl (#12257) --- projects/preon/index.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/projects/preon/index.js b/projects/preon/index.js index 98fa079306..44425b980c 100644 --- a/projects/preon/index.js +++ b/projects/preon/index.js @@ -1,3 +1,4 @@ +//preon const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs"); @@ -16,6 +17,11 @@ const config = { [["0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE"], "0xdc4552609a3f673f0b72958f678d4a48d0e94ebd"], // aPolDAI ], }, + base: { + ownerTokens: [ + [[ADDRESSES.base.WETH], "0xEfaA597277Ce531e52018d42224aB579Bbe31a04"], // aeroAMO + ], + }, }; const extraConfig = { @@ -48,12 +54,25 @@ async function customTvl(api) { } } +async function baseTvl(api) { + const aeroAMO = '0xEfaA597277Ce531e52018d42224aB579Bbe31a04' + const [amountWeth, _amountOETH] = await api.call({ + abi: 'function getPositionPrincipal() view returns (uint256, uint256)', + target: aeroAMO + }) + api.add(ADDRESSES.base.USDC, amountWeth) + return api.getBalances() +} + async function tvl(api) { + if (api.chain === 'base') { + return baseTvl(api) + } await Promise.all([tokenTvl, customTvl].map((fn) => fn(api))); } module.exports = { - methodology: "Adds up the total value locked as collateral on the Preon Finance", + methodology: "Adds up the total value locked as collateral, as well as the AMO positions on Preon Finance", }; Object.keys(config).forEach((chain) => { From 4777e469276147406bffd386f3bfdd8a11788d1c Mon Sep 17 00:00:00 2001 From: Aymen <146243083+aymentrosh@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:21:08 +0100 Subject: [PATCH 1029/1768] added karak, bsc, and mantle factories to karak tvl (#12256) --- projects/karak/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/karak/index.js b/projects/karak/index.js index ba5290c9c3..4225da63db 100644 --- a/projects/karak/index.js +++ b/projects/karak/index.js @@ -4,9 +4,9 @@ const { sumTokens2 } = require("../helper/unwrapLPs") const config = { ethereum: { v1: { factory: '0x54e44dbb92dba848ace27f44c0cb4268981ef1cc' } }, arbitrum: { v1: { factory: '0x399f22ae52a18382a67542b3de9bed52b7b9a4ad' }, v2: { factory: '0xc4B3D494c166eBbFF9C716Da4cec39B579795A0d', block: 261874079 }}, - karak: { v1: { factory:'0xB308474350D75447cA8731B7Ce87c9ee9DA03B1C' } }, - mantle: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'} }, - bsc: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'} }, + karak: { v1: { factory:'0xB308474350D75447cA8731B7Ce87c9ee9DA03B1C' }, v2: { factory: '0x1368AE21e85c9FA25f1aB579b6D3C6e20Ad6db04', block: 13814008 }}, + mantle: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'}, v2: { factory: '0x993E140Ba530E8Ffe1135ecef07ce7484f26CAA3', block: 71616200 }}, + bsc: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'}, v2: { factory: '0x93036971877E084DD303463628494c150572856D', block: 43813383 }}, blast: { v1: { factory: '0x58b5dc145ca2BE84fe087614CFe36055be609BB3'} }, fraxtal: { v1: { factory: '0xdF922c74CC0dc394022ea002Af5aFaa32348670e'}, v2: { factory: '0x04962047B6a9E8c99C8Da874D34c4285a87d541E', block: 11669871 } }, } From 8b5000b9d808cd5a9fa8536d0d3a26b93530b8d4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:29:27 +0100 Subject: [PATCH 1030/1768] reservoir: track PSM --- projects/reservoir-protocol/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/reservoir-protocol/index.js b/projects/reservoir-protocol/index.js index f5b4d9cfc1..c6691b1af9 100644 --- a/projects/reservoir-protocol/index.js +++ b/projects/reservoir-protocol/index.js @@ -1,3 +1,5 @@ +const ADDRESSES = require('../helper/coreAssets.json') + const config = { ethereum: [ // https://docs.reservoir.xyz/products/proof-of-reserves @@ -17,6 +19,9 @@ Object.keys(config).forEach(chain => { const decimals = await api.multiCall({ abi: 'uint8:decimals', calls: tokens }) bals.forEach((v, i) => bals[i] = v * 10 ** (decimals[i] - 18)) api.add(tokens, bals) + return api.sumTokens({ + owner: '0x4809010926aec940b550D34a46A52739f996D75D', token: ADDRESSES.ethereum.USDC + }) } } }) \ No newline at end of file From a5fa3676ce50ca6b57870f0e668d6e7181a68420 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:32:18 +0100 Subject: [PATCH 1031/1768] Feat: Mantle-restaking (#12252) --- projects/mantle-restaking/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/mantle-restaking/index.js diff --git a/projects/mantle-restaking/index.js b/projects/mantle-restaking/index.js new file mode 100644 index 0000000000..8ad5875e80 --- /dev/null +++ b/projects/mantle-restaking/index.js @@ -0,0 +1,24 @@ +const targets = [ + '0x6DfbE3A1a0e835C125EEBb7712Fffc36c4D93b25', // eigenPos1 + '0x021180A06Aa65A7B5fF891b5C146FbDaFC06e2DA', // eigenPos2 + '0x52EA8E95378d01B0aaD3B034Ca0656b0F0cc21A2', // karakPos + '0x919531146f9a25dfc161d5ab23b117feae2c1d36', // symbioticPos +] + +const mETH = '0xd5F7838F5C461fefF7FE49ea5ebaF7728bB0ADfa' +const boringVault = '0x33272D40b247c4cd9C646582C9bbAD44e85D4fE4' +const delayedWithdraw = '0x12be34be067ebd201f6eaf78a861d90b2a66b113' + +const abi = "function getUnderlyings() view returns (address[] assets, uint256[] amounts)" + +const tvl = async (api) => { + const allocateds = await api.multiCall({ calls: targets, abi }) + allocateds.forEach(({ assets: [asset], amounts: [amount] }) => api.add(asset, amount)); + return api.sumTokens({ tokens: [mETH], owners: [boringVault, delayedWithdraw] }) +} + +module.exports = { + doublecounted: true, + methodology: 'TVL corresponds to the sum of mETH deposited across various restaking protocols + the funds pending withdrawal or deposit', + ethereum: { tvl } +} From 5fad57cf391bb22038352d6a68ea77a6b09e288f Mon Sep 17 00:00:00 2001 From: Paul <133055914+PaulZhemanov@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:15:25 +0300 Subject: [PATCH 1032/1768] spark onbording (#12265) --- projects/spark/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/spark/index.js diff --git a/projects/spark/index.js b/projects/spark/index.js new file mode 100644 index 0000000000..b39e279077 --- /dev/null +++ b/projects/spark/index.js @@ -0,0 +1,11 @@ +const { sumTokens } = require("../helper/chain/fuel") + +async function tvl(api) { + const contractId = '0xfe2c524ad8e088f33d232a45dbea43e792861640b71aa1814b30506bf8430ee5' + return sumTokens({ api, owner: contractId, }) +} + +module.exports = { + fuel: { tvl }, + timetravel: false, +} \ No newline at end of file From 2587909704a3fab6064555620a7ec96ff7dff4a0 Mon Sep 17 00:00:00 2001 From: minato <100826289+0x-minato@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:45:48 +0530 Subject: [PATCH 1033/1768] Added ETH Sensei XL (#12268) Co-authored-by: ariyan-hashstack --- projects/strkfarm/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/strkfarm/index.js b/projects/strkfarm/index.js index 4468fef29b..40145a0d99 100644 --- a/projects/strkfarm/index.js +++ b/projects/strkfarm/index.js @@ -28,6 +28,10 @@ const STRATEGIES = { address: "0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250", token: ADDRESSES.starknet.ETH, // ETH Sensei zToken: '0x1b5bd713e72fdc5d63ffd83762f81297f6175a5e0a4771cdadbc1dd5fe72cb1' + }, { + address: "0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9", + token: ADDRESSES.starknet.ETH, // ETH Sensei XL + zToken: '0x057146f6409deb4c9fa12866915dd952aa07c1eb2752e451d7f3b042086bdeb8' }] } From c45d611e6cabb2a90799bdab32956a812121873a Mon Sep 17 00:00:00 2001 From: 0xchimz <5950717+0xchimz@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:16:04 +0700 Subject: [PATCH 1034/1768] Redeploy factory contract (#12267) Co-authored-by: 0xchimz --- projects/rabbitswap-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/rabbitswap-v3/index.js b/projects/rabbitswap-v3/index.js index 96c15aa065..05d3a89e4d 100644 --- a/projects/rabbitswap-v3/index.js +++ b/projects/rabbitswap-v3/index.js @@ -1,5 +1,5 @@ const { uniV3Export } = require('../helper/uniswapV3') module.exports = uniV3Export({ - tomochain: { factory: '0xe615c973e92bDcB584Bf9085c4612E342164e12A', fromBlock: 86210948, isAlgebra: false }, + tomochain: { factory: '0x3A6Ef894d48700cF1834FA8D0AF601fA295a87B2', fromBlock: 86778024, isAlgebra: false }, }) From 0af8df34ce8f6289b38497d53f4ae0ea671894a2 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:45:47 +0000 Subject: [PATCH 1035/1768] add tokens reya (#12270) --- projects/reya-perp/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/reya-perp/index.js b/projects/reya-perp/index.js index 88906971ed..1b13c74456 100644 --- a/projects/reya-perp/index.js +++ b/projects/reya-perp/index.js @@ -2,5 +2,5 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') module.exports = { - reya: { tvl: sumTokensExport({ owner: '0xA763B6a5E09378434406C003daE6487FbbDc1a80', tokens: [ADDRESSES.reya.RUSD]})} + reya: { tvl: sumTokensExport({ owner: '0xA763B6a5E09378434406C003daE6487FbbDc1a80', tokens: [ADDRESSES.reya.RUSD, "0x4D3fEB76ab1C7eF40388Cd7a2066edacE1a2237D", "0x809B99df4DDd6fA90F2CF305E2cDC310C6AD3C2c", "0x2339D41f410EA761F346a14c184385d15f7266c4", "0xAAB18B45467eCe5e47F85CA6d3dc4DF2a350fd42", "0x6B48C2e6A32077ec17e8Ba0d98fFc676dfab1A30"]})} } \ No newline at end of file From b71478c7fc0bddcc295e118d05926c7b4b0c962f Mon Sep 17 00:00:00 2001 From: rav <85165079+rav-ipor@users.noreply.github.com> Date: Wed, 13 Nov 2024 12:13:34 +0100 Subject: [PATCH 1036/1768] Add Base to IPOR Protocol and IPOR Fusion (#12269) Co-authored-by: adam Co-authored-by: kris-ipor <98769272+kris-ipor@users.noreply.github.com> --- projects/helper/coreAssets.json | 3 ++- projects/ipor-fusion/index.js | 1 + projects/ipor/index.js | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index a87d0f2064..53cbb8cbe7 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1493,7 +1493,8 @@ "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "DAI": "0x50c5725949a6f0c72e6c4a641f24049a917db0cb", "USDT": "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2", - "rETH": "0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c" + "rETH": "0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c", + "wstETH": "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452" }, "sei": { "SEI": "usei", diff --git a/projects/ipor-fusion/index.js b/projects/ipor-fusion/index.js index 2f43974e98..edef674d2c 100644 --- a/projects/ipor-fusion/index.js +++ b/projects/ipor-fusion/index.js @@ -12,4 +12,5 @@ module.exports = { methodology: `Counts the tokens deposited into IPOR Fusion Vaults.`, ethereum: { tvl }, arbitrum: { tvl }, + base: { tvl }, }; diff --git a/projects/ipor/index.js b/projects/ipor/index.js index dbdfb7cc8a..e52807e472 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -39,6 +39,31 @@ async function tvlArbitrum(api) { return api.getBalances(); } +async function tvlBase(api) { + const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); + + const assets = [ + ADDRESSES.base.USDC, // USDC + ] + + const res = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: addresses.base.IporProtocolRouter }) + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) + + res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { + const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool + const decimal = 18 - decimals[i] + api.add(assets[i], balance / (10 ** decimal)) + }); + + for (const pool of addresses.base.pools) { + if (assets.includes(pool.asset)) { + continue; + } + await api.sumTokens({owner: pool.AmmTreasury, tokens: [pool.asset]}); + } + return api.getBalances(); +} + async function calculateTvlForV2(api) { const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL) @@ -94,6 +119,9 @@ module.exports = { arbitrum: { tvl: tvlArbitrum }, + base: { + tvl: tvlBase + }, hallmarks:[ [1674648000, "Liquidity Mining Start"] ], From 3e30708bca6c91c8f54b7b723066fa361f9db6f7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 12:13:59 +0100 Subject: [PATCH 1037/1768] minor fix --- projects/ipor/index.js | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/projects/ipor/index.js b/projects/ipor/index.js index e52807e472..205d49c2d5 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -54,14 +54,8 @@ async function tvlBase(api) { const decimal = 18 - decimals[i] api.add(assets[i], balance / (10 ** decimal)) }); - - for (const pool of addresses.base.pools) { - if (assets.includes(pool.asset)) { - continue; - } - await api.sumTokens({owner: pool.AmmTreasury, tokens: [pool.asset]}); - } - return api.getBalances(); + const tokensAndOwners = addresses.base.pools.map(pool => [pool.asset, pool.AmmTreasury]); + return api.sumTokens({ tokensAndOwners, blacklistedTokens: assets }); } async function calculateTvlForV2(api) { @@ -81,15 +75,8 @@ async function calculateTvlForV2(api) { const decimal = 18 - decimals[i] api.add(assets[i], balance / (10 ** decimal)) }); - - for (const pool of addresses.ethereum.pools) { - if (assets.includes(pool.asset)) { - continue; - } - await api.sumTokens({owner: pool.AmmTreasury, tokens: [pool.asset]}); - } - - return api.getBalances(); + const tokensAndOwners = addresses.ethereum.pools.map(pool => [pool.asset, pool.AmmTreasury]); + return api.sumTokens({ tokensAndOwners, blacklistedTokens: assets }); } async function calculateTvlForV1(api) { From 8ca45ca4ba45c21747c4160eaa4b463a28a7e28d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 12:46:21 +0100 Subject: [PATCH 1038/1768] zircuit #12241 --- projects/zircuit/index.js | 84 ++++++++++----------------------------- 1 file changed, 20 insertions(+), 64 deletions(-) diff --git a/projects/zircuit/index.js b/projects/zircuit/index.js index 7aa750582c..8f06809941 100644 --- a/projects/zircuit/index.js +++ b/projects/zircuit/index.js @@ -1,67 +1,23 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensExport } = require("../helper/unwrapLPs"); +const { getLogs2 } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); -const ZIRCUIT_STAKING_CONTRACT_ETHEREUM = '0xf047ab4c75cebf0eb9ed34ae2c186f3611aeafa6'; -const ZIRCUIT_STAKING_CONTRACT_ZIRCUIT = '0x7d8311839eB44Dd5194abd2dd3998722455A24E0'; +const config = { + ethereum: { + factory: '0xf047ab4c75cebf0eb9ed34ae2c186f3611aeafa6', fromBlock: 19237243, missing: [ + '0xa1290d69c65a6fe4df752f95823fae25cb99e5a7', + '0xbf5495Efe5DB9ce00f80364C8B423567e58d2110', + ] + }, + zircuit: { factory: '0x7d8311839eB44Dd5194abd2dd3998722455A24E0', fromBlock: 2427557, }, +} -const TOKEN_CONTRACTS_ETHEREUM = [ - '0xa1290d69c65a6fe4df752f95823fae25cb99e5a7', // rsETH - '0xbf5495Efe5DB9ce00f80364C8B423567e58d2110', // ezETH - '0x8c1BEd5b9a0928467c9B1341Da1D7BD5e10b6549', // lsETH - ADDRESSES.ethereum.WETH, // ETH - '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0', // rswETH - '0x49446A0874197839D15395B908328a74ccc96Bc0', // mstETH - '0xE46a5E19B19711332e33F33c2DB3eA143e86Bc10', // mwBETH - '0x32bd822d615A3658A68b6fDD30c2fcb2C996D678', // mswETH - ADDRESSES.ethereum.WSTETH, // wstETH - '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', // weETH - '0xf951E335afb289353dc249e82926178EaC7DEd78', // swETH - ADDRESSES.ethereum.USDe, // USDe - ADDRESSES.ethereum.STONE, // cSTONE - '0xd5F7838F5C461fefF7FE49ea5ebaF7728bB0ADfa', // mETH - '0xD9A442856C234a39a81a089C06451EBAa4306a72', // pufETH - '0x18f313Fc6Afc9b5FD6f0908c1b3D476E3feA1DD9', // egETH - '0x5fD13359Ba15A84B76f7F87568309040176167cd', // amphrETH - '0x7a4EffD87C2f3C55CA251080b1343b605f327E3a', // rstETH - '0xBEEF69Ac7870777598A04B2bd4771c71212E6aBc', // steakLRT - '0x84631c0d0081FDe56DeB72F6DE77abBbF6A9f93a', // Re7LRT - '0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811', // pzETH - '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC - '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', // weETHs - '0xC96dE26018A54D51c097160568752c4E3BD6C364', // FBTC - '0x8236a87084f8b84306f72007f36f2618a5634494', // LBTC - ADDRESSES.ethereum.FDUSD // FDUSD -]; - -const TOKEN_CONTRACTS_ZIRCUIT = [ - ADDRESSES.optimism.WETH_1, // wETH - '0x91a0F6EBdCa0B4945FbF63ED4a95189d2b57163D', // mETH - '0xD8b29106d4ceBad087C30B10c0E41BAa3A9ea703', // rswETH - '0x850CDF416668210ED0c36bfFF5d21921C7adA3b8', // swETH - '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', // pumpBTC - '0x9cb41CD74D01ae4b4f640EC40f7A60cA1bCF83E7', // pzETH - ADDRESSES.scroll.STONE, // STONE - ADDRESSES.arbitrum.USDe, // USDe - '0xF97c7A9bECe498FD6e31e344643589aACC96206A', // LsETH - '0x4186BFC76E2E237523CBC30FD220FE055156b41F', // rsETH - '0xf0e673Bc224A8Ca3ff67a61605814666b1234833', // wstETH - ADDRESSES.optimism.ezETH, // ezETH - '0x3535DF6e1d776631D0cBA53FE9efD34bCbDcEeD4', // weETH - '0x4b03831043082E3e5191218ad5331E99AaaC4A81', // weETHs - '0x5661cE45EE081CbE1f81BF23E46f4E01E11795D4' // FBTC -]; - -module.exports = { - ethereum: { - tvl: sumTokensExport({ - owner: ZIRCUIT_STAKING_CONTRACT_ETHEREUM, - tokens: TOKEN_CONTRACTS_ETHEREUM, - }), - }, - zircuit: { - tvl: sumTokensExport({ - owner: ZIRCUIT_STAKING_CONTRACT_ZIRCUIT, - tokens: TOKEN_CONTRACTS_ZIRCUIT, - }), +Object.keys(config).forEach(chain => { + const { factory, fromBlock, missing = [] } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event TokenStakabilityChanged(address token, bool enabled)', fromBlock, }) + const tokens = logs.map(i => i.token).concat(missing) + return sumTokens2({ api, owner: factory, tokens, permitFailure: true, }) } -}; \ No newline at end of file + } +}) \ No newline at end of file From e75ba91042ba83d2d992037c5bc0db61b0bda392 Mon Sep 17 00:00:00 2001 From: imfeng Date: Wed, 13 Nov 2024 19:37:47 +0700 Subject: [PATCH 1039/1768] =?UTF-8?q?Updated=20TVL=20For=20Satoshi=20Proto?= =?UTF-8?q?col=20on=20B=C2=B2=20Network=20chain=20(#12271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/satoshi-protocol/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/satoshi-protocol/index.js b/projects/satoshi-protocol/index.js index 9bc4338352..1206ea125c 100644 --- a/projects/satoshi-protocol/index.js +++ b/projects/satoshi-protocol/index.js @@ -73,4 +73,10 @@ module.exports = { fromBlock: 4614620, } }), + bsquared: createExports({ + troveList: [ + '0xa79241206c3008bE4EB4B62A48A4F98303060D4f', // BSquare WBTC Collateral + '0xc6F361db5eC432E95D0A08A9Fbe0d7412971cE6c', // BSquare uBTC Collateral + ], + }), } From a5fc825877b4b2ccbe984daec0d8750c1cdf9158 Mon Sep 17 00:00:00 2001 From: ftm1337 <84405345+ftm1337@users.noreply.github.com> Date: Wed, 13 Nov 2024 07:38:04 -0500 Subject: [PATCH 1040/1768] Add E.L.M.A. on Fantom (#12254) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/elma/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 projects/elma/index.js diff --git a/projects/elma/index.js b/projects/elma/index.js new file mode 100644 index 0000000000..4f1ce27e1d --- /dev/null +++ b/projects/elma/index.js @@ -0,0 +1,24 @@ +module.exports = { + methodology: "Principal Tokens (PT) are always 1:1 mintable & redeemable with Underlying Tokens (UT). TVL is Total Market Cap of all PT, where 1 PT = 1 UT.", +} + +const config = { + fantom: { markets: [ + '0x0a558d43bccbc7586547fc74e3a0e70467215b3c', + '0x35402cDc3BCFFb904116bDC720Afc75c2921De08', + '0xB6633c351a3aF289ed6bbF4A78c682FA16656B1E', + '0xFaa22e721924fa57d042F6E2c793997aA9287B27', + ]} +} + +Object.keys(config).forEach(chain => { + const {markets,} = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const tokens = await api.multiCall({ abi: 'address:BASE', calls: markets}) + const wTokens = await api.multiCall({ abi: 'address:WRAP', calls: markets}) + const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: wTokens}) + api.add(tokens, supplies) + } + } +}) \ No newline at end of file From 085385eeef3dbb28659707976ec1e95d1b715eca Mon Sep 17 00:00:00 2001 From: Orex <122088118+adrena-orex@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:57:58 +0400 Subject: [PATCH 1041/1768] Add Adrena Adapter (#12266) --- projects/adrena/index.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 projects/adrena/index.js diff --git a/projects/adrena/index.js b/projects/adrena/index.js new file mode 100644 index 0000000000..510b18bf1d --- /dev/null +++ b/projects/adrena/index.js @@ -0,0 +1,35 @@ +const { sumTokens2, getConnection } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js") +const { decodeAccount } = require('../helper/utils/solana/layout') +const ADDRESSES = require('../helper/coreAssets.json') + +async function staking() { + return sumTokens2({ tokenAccounts: ['9nD5AenzdbhRqWo7JufdNBbC4VjZ5QH7jzLuvPZy2rhb']}) +} + +async function tvl(api) { + const connection = getConnection("solana"); + + await sumTokens2({ + owner: '4o3qAErcapJ6gRLh1m1x4saoLLieWDu7Rx3wpwLc7Zk9', + balances: api.getBalances(), + blacklistedTokens: [ + 'AuQaustGiaqxRvj2gtCdrd22PBzTn8kM3kEPEkZCtuDw', // ADX + '4yCLi5yWGzpTWMQ1iWHG5CrGYAdBkhyEdsuSugjDUqwj', // ALP + ], + }); + + const rewards = await connection.getAccountInfo(new PublicKey('5GAFPnocJ4GUDJJxtExBDsH5wXzJd3RYzG8goGGCneJi')); + + // Remove rewards from AUM + api.add(ADDRESSES.solana.USDC, +decodeAccount('tokenAccount', rewards).amount.toString() * -1) +} + +module.exports = { + timetravel: false, + methodology: "TVL counts tokens deposited in the Liquidity Pool.", + solana: { + tvl, + staking, + }, +}; From af36d3d44d86f65e9fa82a225762d74383ce0472 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 13 Nov 2024 19:21:05 +0000 Subject: [PATCH 1042/1768] fix --- projects/marinade.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/marinade.js b/projects/marinade.js index 82d33f65dc..3e14878caf 100644 --- a/projects/marinade.js +++ b/projects/marinade.js @@ -1,5 +1,6 @@ const { getProvider, sumTokens2, } = require("./helper/solana") const { Program, } = require("@project-serum/anchor"); +const ADDRESSES = require('./helper/coreAssets.json') async function tvl() { const provider = getProvider() @@ -15,7 +16,7 @@ async function tvl() { },] = await program.account.state.all() const balances = { - solana: (+totalActiveBalance + +availableReserveBalance + +emergencyCoolingDown) / 1e9 + [ADDRESSES.solana.SOL]: +totalActiveBalance + +availableReserveBalance + +emergencyCoolingDown } return sumTokens2({ balances, solOwners: ['UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q'] }) // Liq Pool Sol Leg Pda From 2c8f55f60625315cedeb43e07add0e264119194a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:33:21 +0100 Subject: [PATCH 1043/1768] fix solana sumTokens bug --- projects/helper/solana.js | 21 +++++++++++++++------ projects/marinade.js | 12 ++++++------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 29f7b404e0..872c05708d 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -184,7 +184,7 @@ function getEndpoint(chain) { async function sumTokens2({ api, - balances = {}, + balances, tokensAndOwners = [], tokens = [], owners = [], @@ -196,7 +196,13 @@ async function sumTokens2({ computeTokenAccount = false, chain = 'solana', }) { + if (api) chain = api.chain + if (!balances) { + if (api) balances = api.getBalances() + else balances = {} + } + const endpoint = getEndpoint(chain) blacklistedTokens.push(...blacklistedTokens_default) if (!tokensAndOwners.length) { @@ -206,12 +212,15 @@ async function sumTokens2({ if (!tokensAndOwners.length) { const _owners = getUniqueAddresses([...owners, owner].filter(i => i), 'solana') - const data = await getOwnerAllAccounts(_owners) - for (const item of data) { - if (blacklistedTokens.includes(item.mint) || +item.amount < 1e6) continue; - sdk.util.sumSingleBalance(balances, chain + ':' + item.mint, item.amount) + if (_owners.length) { + const data = await getOwnerAllAccounts(_owners) + const tokenBalances = {} + for (const item of data) { + if (blacklistedTokens.includes(item.mint) || +item.amount < 1e6) continue; + sdk.util.sumSingleBalance(tokenBalances,item.mint, item.amount) + } + await transformBalances({ tokenBalances, balances, chain, }) } - await transformBalancesOrig(chain, balances) } tokensAndOwners = tokensAndOwners.filter(([token]) => !blacklistedTokens.includes(token)) diff --git a/projects/marinade.js b/projects/marinade.js index 3e14878caf..21e776536f 100644 --- a/projects/marinade.js +++ b/projects/marinade.js @@ -2,7 +2,7 @@ const { getProvider, sumTokens2, } = require("./helper/solana") const { Program, } = require("@project-serum/anchor"); const ADDRESSES = require('./helper/coreAssets.json') -async function tvl() { +async function tvl(api) { const provider = getProvider() const programId = 'MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD' const idl = await Program.fetchIdl(programId, provider) @@ -14,12 +14,12 @@ async function tvl() { emergencyCoolingDown, }, },] = await program.account.state.all() + + api.add(ADDRESSES.solana.SOL, totalActiveBalance) + api.add(ADDRESSES.solana.SOL, availableReserveBalance) + api.add(ADDRESSES.solana.SOL, emergencyCoolingDown) - const balances = { - [ADDRESSES.solana.SOL]: +totalActiveBalance + +availableReserveBalance + +emergencyCoolingDown - } - - return sumTokens2({ balances, solOwners: ['UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q'] }) // Liq Pool Sol Leg Pda + return sumTokens2({ api, solOwners: ['UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q'] }) // Liq Pool Sol Leg Pda } module.exports = { From 24aa534026ac83e0e117543f4e1667c911e1d1f5 Mon Sep 17 00:00:00 2001 From: Flo Date: Wed, 13 Nov 2024 23:05:50 +0100 Subject: [PATCH 1044/1768] update index.js of OpenDelta TVL adapter (#12273) --- projects/opendelta/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/opendelta/index.js b/projects/opendelta/index.js index e842ad9913..e721a8efa4 100644 --- a/projects/opendelta/index.js +++ b/projects/opendelta/index.js @@ -18,11 +18,11 @@ async function tvl(api) { const timeElapsedSinceLastUpdate = currentTimestamp - lastUpdateTimestamp const interestRate = currentRate / 1e4 const interestRatePre = preUpdateAverageRate / 1e4 - const ONE_YEAR = 365 * 24 * 60 * 60 - const interestAccruedCurrent = interestRate * timeElapsedSinceLastUpdate / ONE_YEAR - const interestAccruedPre = interestRatePre * timeElapsed / ONE_YEAR + const ONE_YEAR = 365.24 * 24 * 60 * 60 + const interestAccruedCurrent = Math.exp(interestRate * timeElapsedSinceLastUpdate / ONE_YEAR) + const interestAccruedPre = Math.exp(interestRatePre * timeElapsed / ONE_YEAR) - const computedSupply = supply * (1 + interestAccruedCurrent + interestAccruedPre) + const computedSupply = supply * (interestAccruedCurrent * interestAccruedPre) return computedSupply / Math.pow(10, decimals) } @@ -31,7 +31,7 @@ async function tvl(api) { module.exports = { timetravel: false, misrepresentedTokens: true, - methodology: "TVL is calculated by multiplying OPB token supply by the current USD value of 1.0 OPB. Initially worth $1.0, 1.0 OPB now reflects its increased value from accrued interest, derived via amountToUiAmount using the Interest Bearing extension.", + methodology: "TVL is calculated by multiplying the OPB token supply by the current USD value of 1.0 OPB. Initially worth $1.0, 1.0 OPB now reflects its increased value from accrued interest, derived using amountToUiAmount approach of Solana Token2022 Interest Bearing extension.", solana: { tvl, }, From f3d032e04b6c39c8aac2005ac037088ce8a39156 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 14 Nov 2024 03:40:10 +0000 Subject: [PATCH 1045/1768] exclude pozo --- projects/sailing-portfolios/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/sailing-portfolios/index.js b/projects/sailing-portfolios/index.js index 40fab41fd1..c07de05ebb 100644 --- a/projects/sailing-portfolios/index.js +++ b/projects/sailing-portfolios/index.js @@ -10,7 +10,7 @@ async function tvl(api) { }) const tokens = await api.multiCall({ abi: 'address[]:getPortfolioAssets', calls: portfolios}) const ownerTokens = portfolios.map((portfolio, i) => [tokens[i], portfolio]) - return api.sumTokens({ ownerTokens, blacklistedTokens: ['0x47a663C082926d0d913cAcB89240c3f4bc409a88'] }) + return api.sumTokens({ ownerTokens, blacklistedTokens: ['0x47a663C082926d0d913cAcB89240c3f4bc409a88','0x2d519b9308aeb0c57921030dd5de4e88c44cec7c'] }) } module.exports = { From d714c1916e6dd06832dab0f8ca21cbc020d9d8af Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 14 Nov 2024 05:45:19 +0100 Subject: [PATCH 1046/1768] mark as dead --- projects/amun/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/amun/index.js b/projects/amun/index.js index ed95afa5c1..8268809ca3 100644 --- a/projects/amun/index.js +++ b/projects/amun/index.js @@ -5,6 +5,7 @@ async function tvl(api) { } module.exports = { + deadFrom: '2023-03-22', timetravel: false, ethereum: { tvl: () => ({}), }, polygon: { tvl: () => ({}), }, From 09af79589bc8765a9e00561ea69fe07e21b2246a Mon Sep 17 00:00:00 2001 From: Rahul Sethuram Date: Thu, 14 Nov 2024 09:14:43 +0400 Subject: [PATCH 1047/1768] feat: add lisk (#12284) --- projects/ionic/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/ionic/index.js b/projects/ionic/index.js index a68ce8b0ab..a7c095deb8 100644 --- a/projects/ionic/index.js +++ b/projects/ionic/index.js @@ -14,4 +14,6 @@ module.exports = mergeExports([{ fraxtal: compoundExports2({ comptroller: '0xB5141403e811fFFE02f4d49Ea8d4a7B0b9590658' }) }, { optimism: compoundExports2({ comptroller: '0xaFB4A254D125B0395610fdc8f1D022936c7b166B' }) + }, { + lisk: compoundExports2({ comptroller: '0xF448A36feFb223B8E46e36FF12091baBa97bdF60' }) }]) \ No newline at end of file From 89de0b87324f0dff9aa93a4f78c7aae981168fe7 Mon Sep 17 00:00:00 2001 From: Aleksei Lushnikov Date: Thu, 14 Nov 2024 06:19:25 +0000 Subject: [PATCH 1048/1768] symbiosis adds cronos zkevm chain (#12274) --- projects/helper/coreAssets.json | 3 ++- projects/symbiosis-finance/config.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 53cbb8cbe7..ae35fee3e4 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1938,7 +1938,8 @@ }, "cronos_zkevm": { "wzkCRO": "0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d", - "ETH": "0x898b3560affd6d955b1574d87ee09e46669c60ea" + "ETH": "0x898b3560affd6d955b1574d87ee09e46669c60ea", + "USDC": "0xaa5b845f8c9c047779bedf64829601d8b264076c" }, "neox": { "WGAS": "0x008cd7f573998cb841a5d82a857ed1f0ce03a653", diff --git a/projects/symbiosis-finance/config.js b/projects/symbiosis-finance/config.js index 3594630913..68ec85e76d 100644 --- a/projects/symbiosis-finance/config.js +++ b/projects/symbiosis-finance/config.js @@ -43,6 +43,9 @@ const TOKENS = { }, bsquared: { WBTC: ADDRESSES.bsquared.WBTC, + }, + cronos_zkevm: { + USDC: ADDRESSES.cronos_zkevm.USDC, } } @@ -440,5 +443,14 @@ module.exports = { '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 ] }, + { + name: 'cronos_zkevm', + tokens: [ + TOKENS.cronos_zkevm.USDC, + ], + holders: [ + '0x2E818E50b913457015E1277B43E469b63AC5D3d7', // portal v2 + ] + }, ] } \ No newline at end of file From 0657808b80e142850742975a8fdec92c392dd08f Mon Sep 17 00:00:00 2001 From: 0xchimz <5950717+0xchimz@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:28:31 +0700 Subject: [PATCH 1049/1768] Update Rabbit Factory Contract (#12287) Co-authored-by: 0xchimz --- projects/rabbitswap-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/rabbitswap-v3/index.js b/projects/rabbitswap-v3/index.js index 05d3a89e4d..33614fd56b 100644 --- a/projects/rabbitswap-v3/index.js +++ b/projects/rabbitswap-v3/index.js @@ -1,5 +1,5 @@ const { uniV3Export } = require('../helper/uniswapV3') module.exports = uniV3Export({ - tomochain: { factory: '0x3A6Ef894d48700cF1834FA8D0AF601fA295a87B2', fromBlock: 86778024, isAlgebra: false }, + tomochain: { factory: '0x1F09b50e8cbAed8A157fEe28716d13AfE36A77E7', fromBlock: 86787787, isAlgebra: false }, }) From 98cba76da120c98159fc73b298a02b8d593869aa Mon Sep 17 00:00:00 2001 From: "Luren L." Date: Thu, 14 Nov 2024 02:28:42 -0500 Subject: [PATCH 1050/1768] Update navi new listings (#12286) --- projects/navi/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/navi/index.js b/projects/navi/index.js index 28a92dffd4..d4f0bd2ca3 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -11,6 +11,8 @@ const decimalShift = { ['0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH']: -1, // native ETH ['0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY']: -3, // USDY ['0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a::fdusd::FDUSD']: -3, // FDUSD + ['0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS']: -3, // NS + ['0x5f496ed5d9d045c5b788dc1bb85f54100f2ede11e46f6a232c29daada4c5bdb6::coin::COIN']: -1, //stBTC } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" From 0f08dc02540e5cae29d9b8454301a092a51077bb Mon Sep 17 00:00:00 2001 From: LpcAries <101619245+LpcAries@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:28:56 +0800 Subject: [PATCH 1051/1768] [izumi] add iotex config (#12285) --- projects/izumi-iziswap/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/izumi-iziswap/index.js b/projects/izumi-iziswap/index.js index 4e30464f95..bb866ab412 100644 --- a/projects/izumi-iziswap/index.js +++ b/projects/izumi-iziswap/index.js @@ -36,6 +36,7 @@ const poolHelpers = { 'taiko': ['0x33531bDBFE34fa6Fd5963D0423f7699775AacaaF'], 'core': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], 'gravity': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], + 'iotex': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], } // iziswap liquidityManager contracts const blacklistedTokens = [ From 85838801ebc4955335e3bbc544aa5fe485f73100 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 14 Nov 2024 09:25:42 +0100 Subject: [PATCH 1052/1768] update sdk version --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1eed9d6e6..9bd007ac9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.96", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.96.tgz", - "integrity": "sha512-xaQUecL8V2fWT1Z6LEg/3iV3DCsW32VItRZ5oRqeDzvyeYnFS22GntkJiyxBRMFdCKHRpr1zNAn+IKOKGfpHUg==", + "version": "5.0.98", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.98.tgz", + "integrity": "sha512-HeXnoPDKDqH2qmag5j+EnRxPr5N/Pog+R6XEOE1L2+x53UwjjVEmCnVzdTYOMqL2fIfiM2Ba+ByShxJ88gKxlg==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", From 3f73757731e1dfaafc6a1b8d69d2121598d347e6 Mon Sep 17 00:00:00 2001 From: Josh <165199008+basedjosh@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:18:41 +0300 Subject: [PATCH 1053/1768] add based AI adapter (#12290) Co-authored-by: basedjosh --- projects/basedai/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/basedai/index.js diff --git a/projects/basedai/index.js b/projects/basedai/index.js new file mode 100644 index 0000000000..fbdcdbf57a --- /dev/null +++ b/projects/basedai/index.js @@ -0,0 +1,12 @@ +const { staking } = require('../helper/staking'); + +module.exports = { + ethereum: { + tvl: () => ({}), + staking: staking( + "0xa6b816010ab51e088c4f19c71aba87e54b422e14", + "0xA9E8aCf069C58aEc8825542845Fd754e41a9489A" + ) + }, + methodology: "Currently, the TVL is considered as the amount of Pepecoin tokens held in the farming contract at '0xa6b816010ab51e088c4f19c71aba87e54b422e14'." +}; From b326a3a228c357cd328e4b1e1b606c9c0d2a706e Mon Sep 17 00:00:00 2001 From: Siddhi Date: Thu, 14 Nov 2024 17:22:18 +0700 Subject: [PATCH 1054/1768] Fix predict.fun TVL calculation (#12291) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/predict-fun/index.js | 63 ++++++----------------------------- 1 file changed, 10 insertions(+), 53 deletions(-) diff --git a/projects/predict-fun/index.js b/projects/predict-fun/index.js index 4568154ef3..a4d1d1f4d8 100644 --- a/projects/predict-fun/index.js +++ b/projects/predict-fun/index.js @@ -1,55 +1,12 @@ -const { graphQuery } = require('../helper/http') const ADDRESSES = require('../helper/coreAssets.json') - -const config = { - blast: 'https://graphql.predict.fun/graphql' -} - - -const query = (after) => `query { - categories (pagination: { - first: 100 - ${after ? `after: "${after}"` : ''} - }) { - totalCount - pageInfo { - hasNextPage - startCursor - endCursor - } - edges { - node { - id - slug - title - statistics { - liquidityValueUsd - volume24hUsd - volumeTotalUsd - } - } - } - } +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + blast: { + tvl: sumTokensExport({ owners: [ + '0xE1A2E68C401378050fdba9704FA8BCb1f72b98f4', + '0x8F9C9f888A4268Ab0E2DDa03A291769479bAc285' + ], tokens: [ADDRESSES.blast.USDB]}) + }, + methodology: `TVL is the total quantity of USDB held in the conditional tokens contract as well as USDB collateral submitted to every predict.fun market ever opened - once the markets resolve, participants are able to withdraw their share given the redemption rate and their input stake.` } -` - -Object.keys(config).forEach(chain => { - const endpoint = config[chain] - module.exports[chain] = { - tvl: async (api) => { - const categories = [] - let after = null - do { - const data = await graphQuery(endpoint, query(after)) - categories.push(...data.categories.edges) - if (data.categories.pageInfo.hasNextPage) { - after = data.pageInfo.endCursor - } - } while (after) - const usd = categories.reduce((tvl, category) => tvl + category.node.statistics.liquidityValueUsd, 0) - api.add(ADDRESSES.blast.USDB, usd * 1e18) - } - } -}) - -module.exports.timetravel = false \ No newline at end of file From b35027af3ac360d3a43de7e1ff1e7e17c11b3999 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:11:24 +0100 Subject: [PATCH 1055/1768] Bob (#12294) Co-authored-by: Brendon Votteler --- projects/bob-gateway/index.js | 6 +++++- projects/helper/coreAssets.json | 8 +++++++- projects/helper/tokenMapping.js | 6 +++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/projects/bob-gateway/index.js b/projects/bob-gateway/index.js index 7eb9c18761..954e389fcd 100644 --- a/projects/bob-gateway/index.js +++ b/projects/bob-gateway/index.js @@ -30,10 +30,14 @@ module.exports = { return sumTokens2({ api, - chain: "bob", tokens: [ ADDRESSES.bob.WBTC, ADDRESSES.bob.TBTC, + ADDRESSES.bob.SolvBTC, + ADDRESSES.bob.SolvBTC_BBN, + ADDRESSES.bob.FBTC, + ADDRESSES.bob.uniBTC, + ADDRESSES.bob.pumpBTC, ], owners: gateways, }); diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index ae35fee3e4..f8ae15caef 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1844,7 +1844,13 @@ "STETH": "0x85008aE6198BC91aC0735CB5497CF125ddAAc528", "STONE": "0x96147a9ae9a42d7da551fd2322ca15b71032f342", "RETH": "0xb5686c4f60904ec2bda6277d6fe1f7caa8d1b41a", - "TBTC": "0xbba2ef945d523c4e2608c9e1214c2cc64d4fc2e2" + "TBTC": "0xbba2ef945d523c4e2608c9e1214c2cc64d4fc2e2", + "SolvBTC": "0x541fd749419ca806a8bc7da8ac23d346f2df8b77", + "SolvBTC_BBN": "0xCC0966D8418d412c599A6421b760a847eB169A8c", + "FBTC": "0xc96de26018a54d51c097160568752c4e3bd6c364", + "satUSD": "0x78Fea795cBFcC5fFD6Fb5B845a4f53d25C283bDB", + "uniBTC": "0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894", + "pumpBTC": "0x1fcca65fb6ae3b2758b9b2b394cb227eae404e1e" }, "btr": { "ETH": "0xef63d4e178b3180beec9b0e143e0f37f4c93f4c2", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 2ee5d86cc6..38455e084b 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -79,9 +79,9 @@ const fixBalancesTokens = { '0xac485391eb2d7d88253a7f1ef18c37f4242d1a24': { coingeckoId: 'lisk', decimals: 18 }, }, bob: { - "0x541fd749419ca806a8bc7da8ac23d346f2df8b77": { coingeckoId: "solv-btc", decimals: 18 }, - "0xcc0966d8418d412c599a6421b760a847eb169a8c": { coingeckoId: "solv-btc", decimals: 18 }, - "0x236f8c0a61da474db21b693fb2ea7aab0c803894": { coingeckoId: "universal-btc", decimals: 8 }, + [ADDRESSES.bob.SolvBTC]: { coingeckoId: "solv-btc", decimals: 18 }, + [ADDRESSES.bob.SolvBTC_BBN]: { coingeckoId: "solv-protocol-solvbtc-bbn", decimals: 18 }, + [ADDRESSES.bob.uniBTC]: { coingeckoId: "universal-btc", decimals: 8 } }, flow: { '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e': { coingeckoId: 'flow', decimals: 18 }, From b5b6355bbe7cece19b7388ad3d32a673174a5f42 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 14 Nov 2024 16:02:34 +0100 Subject: [PATCH 1056/1768] fix: Kyber elastic (#12295) --- projects/kyber/index.js | 65 +++++++++++++---------------------------- 1 file changed, 21 insertions(+), 44 deletions(-) diff --git a/projects/kyber/index.js b/projects/kyber/index.js index 069bb63b20..57595dea3d 100644 --- a/projects/kyber/index.js +++ b/projects/kyber/index.js @@ -2,40 +2,18 @@ const sdk = require("@defillama/sdk") const { cachedGraphQuery } = require("../helper/cache"); const { sumTokens2 } = require('../helper/unwrapLPs') -const chains = { - ethereum: { - graphId: "mainnet", - }, - arbitrum: { - graphId: "arbitrum-one", - }, - polygon: { - graphId: "matic", - }, - avax: { - graphId: "avalanche", - }, - bsc: { - graphId: "bsc", - }, - fantom: { - graphId: "fantom", - }, - cronos: { - graphId: "cronos", - }, - optimism: { - graphId: "optimism", - }, - linea: { - graphId: 'linea' - }, - base: { - graphId: 'base' - }, - scroll: { - graphId: 'scroll' - } +const CONFIG = { + ethereum: { graphId: "mainnet" }, + arbitrum: { graphId: "arbitrum-one", blacklistedTokens: ['0x0df5dfd95966753f01cb80e76dc20ea958238c46'] }, // rWETH + polygon: { graphId: "matic" }, + avax: { graphId: "avalanche" }, + bsc: { graphId: "bsc" }, + fantom: { graphId: "fantom" }, + cronos: { graphId: "cronos" }, + optimism: { graphId: "optimism" }, + linea: { graphId: 'linea' }, + base: { graphId: 'base' }, + scroll: { graphId: 'scroll' } }; async function fetchPools(chain) { @@ -76,12 +54,11 @@ async function fetchPools(chain) { return toa; } -function elastic(chain) { +function elastic(graphId, blacklistedTokens = []) { return async (api) => { - if (!("graphId" in chains[chain])) return {}; - - const pools = await fetchPools(chains[chain].graphId); - return sumTokens2({ api, tokensAndOwners: pools }) + if (!graphId) return + const pools = await fetchPools(graphId); + return sumTokens2({ api, tokensAndOwners: pools, blacklistedTokens }) } } @@ -92,10 +69,10 @@ module.exports = { [1700611200,'Protocol exploit'], ], }; -Object.keys(chains).forEach(chain => { - module.exports[chain] = { - tvl: elastic(chain) - }; -}); + +Object.keys(CONFIG).forEach((chain) => { + const { graphId, blacklistedTokens } = CONFIG[chain] + module.exports[chain] = { tvl: elastic(graphId, blacklistedTokens)} +}) module.exports.base.tvl = () => ({}) // setting base to 0 for now as I could not find the graph endpoint \ No newline at end of file From e7089785f50f560e327db73240149908dfee4823 Mon Sep 17 00:00:00 2001 From: Vladislav Sailor <1732750+vladislavpetushkov@users.noreply.github.com> Date: Thu, 14 Nov 2024 19:59:56 +0400 Subject: [PATCH 1057/1768] add protocol to new network unit0 (#12276) Co-authored-by: Vladislav Petushkov Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 3 +++ projects/swop/index.js | 17 ++++++++--------- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index a83cb91ada..5a2d1b4da0 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -329,6 +329,7 @@ "ultra", "ultron", "umee", + "unit0", "vechain", "velas", "venom", diff --git a/projects/helper/env.js b/projects/helper/env.js index 5abcb317a4..2c906eb4eb 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -27,6 +27,7 @@ const DEFAULTS = { WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", APECHAIN_RPC: "https://rpc.apechain.com", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", + UNIT0_RPC: "https://rpc.unit0.dev", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 38455e084b..05e2da1ee9 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -175,6 +175,9 @@ const fixBalancesTokens = { 'BeRUj3h7BqkbdfFU7FBNYbodgf8GCHodzKvF9aVjNNfL': { coingeckoId: 'solana', decimals: 9 }, 'AKEWE7Bgh87GPp171b4cJPSSZfmZwQ3KaqYqXoKLNAEE': { coingeckoId: 'usd-coin', decimals: 6 }, '841P4tebEgNux2jaWSjCoi9LhrVr9eHGjLc758Va3RPH': { coingeckoId: 'dogwifcoin', decimals: 6 }, + }, + unit0: { + '0xcf43f7703d9b4e8835f977ef364b4014fa7e856e': { coingeckoId: 'unit0', decimals: 18 }, } } diff --git a/projects/swop/index.js b/projects/swop/index.js index a70e7ddf32..f73ae827be 100644 --- a/projects/swop/index.js +++ b/projects/swop/index.js @@ -1,32 +1,31 @@ const { sumTokens, call } = require('../helper/chain/waves'); const { getConfig } = require("../helper/cache"); -// const { get } = require("../helper/http"); -// const { toUSDTBalances } = require("../helper/balances"); - +const { getUniTVL } = require('../helper/unknownTokens') const swopfiBackendEndpoint = "https://backend.swop.fi"; const getSwopFiTVL = async (api) => { - // const poolsStats = await get(`${swopfiBackendEndpoint}/pools`); - // return toUSDTBalances(poolsStats.overall.liquidity); const { pools } = await getConfig('swop', `${swopfiBackendEndpoint}/pools`) - // const owners = pools.map(i => i.id) for (const pool of pools) { await sumTokens({ owners: [pool.id], api, includeWaves: true, blacklistedTokens: ['Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'] }) } } - module.exports = { timetravel: false, // Waves blockchain, methodology: "Counts the tokens locked on AMM pools", + misrepresentedTokens: true, + hallmarks: [ + [1730299107, "Unit0 Protocol Lunch"] + ], waves: { tvl: getSwopFiTVL, staking: async () => { - // const stakingStats = await get(`${swopfiBackendEndpoint}/staking`); - // return toUSDTBalances(stakingStats.swop.totalSwopUsdt); const res = await call({ target: '3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS', key: 'total_GSwop_amount' }) return { swop: res / 1e8 } } + }, + unit0: { + tvl: getUniTVL({ factory: '0x944Eb5ac122Ea8c764Fa80e80A7fCA2C9A13Ab0a', useDefaultCoreAssets: true}) } }; From f1eeb1757818957233a70d713893c3e12a59de92 Mon Sep 17 00:00:00 2001 From: 0dd431c8 <83228790+0dd431c8@users.noreply.github.com> Date: Fri, 15 Nov 2024 02:13:42 +0800 Subject: [PATCH 1058/1768] add elexium (#12288) Co-authored-by: 0dd431c8 <0dd431c8@users.noreply.github.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/ayin/index.js | 50 +++---------------- projects/elexium/index.js | 65 +++++++++++++++++++++++++ projects/helper/chain/alephium.js | 79 +++++++++++++++++++++---------- projects/helper/tokenMapping.js | 10 ++-- 4 files changed, 132 insertions(+), 72 deletions(-) create mode 100644 projects/elexium/index.js diff --git a/projects/ayin/index.js b/projects/ayin/index.js index 375005468d..e4ef7ac6ec 100644 --- a/projects/ayin/index.js +++ b/projects/ayin/index.js @@ -14,30 +14,11 @@ const Addresses = { ayinUsdcPool: '2961aauvprhETv6TXGQRc3zZY4FbLnqKon2a4wK6ABH9q', ayinApadPool: '247rZysrruj8pj2GnFyK2bqB2nU4JsUj7k2idksAp4XMy', usdtUsdcPool: '27C75V9K5o9CkkGTMDQZ3x2eP82xnacraEqTYXA35Xuw5', - usdt: 'zSRgc7goAYUgYsEBYdAzogyyeKv3ne3uvWb3VDtxnaEK', - weth: 'vP6XSUyjmgWCB2B9tD5Rqun56WJqDdExWnfwZVEqzhQb', - ayin: 'vT49PY8ksoUL6NcXiZ1t2wAmC7tTPRfFfER8n3UCLvXy', - wbtc: 'xUTp3RXGJ1fJpCGqsAY6GgyfRQ3WQ1MdcYR1SiwndAbR', - usdc: '22Nb9JajRpAh9A2fWNgoKt867PA6zNyi541rtoraDfKXV', - apad: '27HxXZJBTPjhHXwoF1Ue8sLMcSxYdxefoN2U6d8TKmZsm', - cheng: '27DP28mGQzSrHGZgnRvYQH1VAWYZVVLUjGALazLrtrRJF', - ansd: '2AhEaQiUYtAF6g1vtRQHsPR7xTkMY1PRr3k7QkXuisynF', - alphaga: '26Mirs33zojnVMRkqVDJtMZvVZcbAFVyxGojGw7UtWp2K' } +const alephId = '0000000000000000000000000000000000000000000000000000000000000000' const XAyinAddress = 'zst5zMzizEeFYFis6DNSknY5GCYTpM85D3yXeRLe2ug3' -const TokenIds = { - usdt: alephium.contractIdFromAddress(Addresses.usdt), - weth: alephium.contractIdFromAddress(Addresses.weth), - ayin: alephium.contractIdFromAddress(Addresses.ayin), - wbtc: alephium.contractIdFromAddress(Addresses.wbtc), - usdc: alephium.contractIdFromAddress(Addresses.usdc), - apad: alephium.contractIdFromAddress(Addresses.apad), - cheng: alephium.contractIdFromAddress(Addresses.cheng), - ansd: alephium.contractIdFromAddress(Addresses.ansd) -} - async function ayinTvlForXAyin() { const results = await alephium.contractMultiCall([ { group: 0, address: XAyinAddress, methodIndex: 3 }, @@ -49,35 +30,18 @@ async function ayinTvlForXAyin() { return (Number(totalSupply) / 1e18) * (Number(currentPrice) / 1e18) } -async function tvl() { +async function tvl(api) { const alphTvls = await Promise.all([ Addresses.alphAyinPool, Addresses.alphUsdtPool, Addresses.alphUsdcPool, Addresses.alphWethPool, Addresses.alphApadPool, Addresses.alphChengPool, Addresses.alphAnsdPool, Addresses.alphAlphagaPool ].map(poolAddress => alephium.getAlphBalance(poolAddress))) const alphTvl = alphTvls.reduce((tvl, res) => tvl + Number(res.balance), 0) - const tokensTvls = await Promise.all([ - Addresses.alphAyinPool, Addresses.alphUsdtPool, Addresses.alphWethPool, Addresses.ayinUsdtPool, - Addresses.ayinUsdcPool,Addresses.alphWbtcPool, Addresses.usdtUsdcPool,Addresses.alphApadPool, Addresses.alphChengPool, Addresses.ayinApadPool, Addresses.alphAnsdPool, Addresses.alphAlphagaPool - ].map(poolAddress => alephium.getTokensBalance(poolAddress))) - const tokensTvl = tokensTvls.reduce((res, tokenTvls) => { + api.add(alephId, alphTvl) + const tokensTvls = await Promise.all(Object.values(Addresses).map(poolAddress => alephium.getTokensBalance(poolAddress))) + tokensTvls.forEach((tokenTvls) => { tokenTvls.forEach(tokenTvl => { - if (res[tokenTvl.tokenId] !== undefined) { - res[tokenTvl.tokenId] = Number(res[tokenTvl.tokenId]) + Number(tokenTvl.balance) - } + api.add(tokenTvl.tokenId, tokenTvl.balance) }); - return res - }, { [TokenIds.ayin]: 0, [TokenIds.usdt]: 0, [TokenIds.weth]: 0, [TokenIds.wbtc]: 0, [TokenIds.usdc]: 0, [TokenIds.apad]: 0, [TokenIds.cheng]: 0, [TokenIds.ansd]: 0, [TokenIds.ansd]: 0, [TokenIds.alphaga]: 0 }) - return { - alephium: alphTvl / 1e18, - ayin: tokensTvl[TokenIds.ayin] / 1e18, - weth: tokensTvl[TokenIds.weth] / 1e18, - tether: tokensTvl[TokenIds.usdt] / 1e6, - usdc: tokensTvl[TokenIds.usdc] / 1e6, - bitcoin: tokensTvl[TokenIds.wbtc] / 1e8, - alphpad: tokensTvl[TokenIds.apad] / 1e18, - gigacheng: tokensTvl[TokenIds.cheng] / 1e6, - alephiumdomains: tokensTvl[TokenIds.ansd] / 1e18, - alphaga: tokensTvl[TokenIds.alphaga] / 1e18 - } + }) } async function staking() { diff --git a/projects/elexium/index.js b/projects/elexium/index.js new file mode 100644 index 0000000000..25363aa8de --- /dev/null +++ b/projects/elexium/index.js @@ -0,0 +1,65 @@ +const alephium = require("../helper/chain/alephium"); + +const elexiumTokenId = "cad22f7c98f13fe249c25199c61190a9fb4341f8af9b1c17fcff4cd4b2c3d200"; +const alephId = '0000000000000000000000000000000000000000000000000000000000000000' +const veAddress = "23XEjbtTNN2FtcJryavvfMf6VwgVK22uiw5T6N85kjFzX"; +const pairFactoryAddress = "22oTtDJEMjNc9QAdmcZarnEzgkAooJp9gZy7RYBisniR5"; + +async function getAllPools() { + const results = await alephium.contractMultiCall([ + { group: 0, address: pairFactoryAddress, methodIndex: 0 }, + ]); + + const pairsCount = Number(results[0].returns[0].value); + + const poolIds = []; + + for (let i = 0; i < pairsCount; i++) { + const results = await alephium.contractMultiCall([ + { + group: 0, + address: pairFactoryAddress, + methodIndex: 2, + args: [{ value: i, type: "U256" }], + }, + ]); + + const poolId = results[0].returns[0].value; + + poolIds.push(poolId); + } + + return poolIds; +} + +async function addPoolTokens(poolId, api) { + const poolAddress = alephium.addressFromContractId(poolId); + + const tokenBalance = (await alephium.getTokensBalance(poolAddress)).filter( + (t) => t.tokenId !== poolId, + ); + + tokenBalance.forEach(i => api.add(i.tokenId, i.balance)); + + const alphBalance = (await alephium.getAlphBalance(poolAddress)).balance; + api.add(alephId, alphBalance); +} + +async function poolsTvl(api) { + const allPools = await getAllPools() + + for (const pool of allPools) + await addPoolTokens(pool, api); +} + +async function veTVL(api) { + const tokenBalance = (await alephium.getTokensBalance(veAddress)).find((t) => t.tokenId === elexiumTokenId,) ?? { balance: 0 }; + api.add(elexiumTokenId, tokenBalance.balance); +} + +module.exports = { + timetravel: false, + methodology: + "Total value of tokens provided as liquidity on alephium and total amount of locked $EX in voting escrow", + alephium: { tvl: poolsTvl, staking: veTVL }, +}; diff --git a/projects/helper/chain/alephium.js b/projects/helper/chain/alephium.js index 982a05db0e..d1ff69bdb9 100644 --- a/projects/helper/chain/alephium.js +++ b/projects/helper/chain/alephium.js @@ -1,49 +1,80 @@ -const axios = require("axios") -const basex = require('base-x') +const axios = require("axios"); +const basex = require("base-x"); -const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' -const bs58 = basex(ALPHABET) +const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +const bs58 = basex(ALPHABET); -const EXPLORER_API_HOST = 'https://backend-v115.mainnet.alephium.org' -const NODE_API_HOST = 'https://node.mainnet.alephium.org' +const EXPLORER_API_HOST = "https://backend.mainnet.alephium.org"; +const NODE_API_HOST = "https://node.mainnet.alephium.org"; async function getAlphBalance(address) { - return (await axios.get(`${EXPLORER_API_HOST}/addresses/${address}/balance`)).data + return (await axios.get(`${EXPLORER_API_HOST}/addresses/${address}/balance`)) + .data; } async function getTokensBalance(address) { - return (await axios.get(`${EXPLORER_API_HOST}/addresses/${address}/tokens-balance`)).data + return ( + await axios.get(`${EXPLORER_API_HOST}/addresses/${address}/tokens-balance`) + ).data; } async function contractMultiCall(payload) { - const result = (await axios.post(`${NODE_API_HOST}/contracts/multicall-contract`, {calls: payload})).data - return result.results.map((r) => tryGetCallResult(r)) + const result = ( + await axios.post(`${NODE_API_HOST}/contracts/multicall-contract`, { + calls: payload, + }) + ).data; + return result.results.map((r) => tryGetCallResult(r)); } function tryGetCallResult(result) { - if (result.type === 'CallContractFailed') { - throw new Error(`Failed to call contract, error: ${result.error}`) + if (result.type === "CallContractFailed") { + throw new Error(`Failed to call contract, error: ${result.error}`); } - return result + return result; +} + +async function getTokenInfo(tokenId) { + const [metadata] = ( + await axios.post(`${EXPLORER_API_HOST}/tokens/fungible-metadata`, [tokenId]) + ).data; + + return metadata; } function contractIdFromAddress(address) { - const decoded = bs58.decode(address) + const decoded = bs58.decode(address); - if (decoded.length == 0) throw new Error('Address string is empty') - const addressType = decoded[0] - const addressBody = decoded.slice(1) + if (decoded.length == 0) throw new Error("Address string is empty"); + const addressType = decoded[0]; + const addressBody = decoded.slice(1); if (addressType == 0x03) { - return Buffer.from(addressBody).toString('hex') + return Buffer.from(addressBody).toString("hex"); } else { - throw new Error(`Invalid contract address type: ${addressType}`) + throw new Error(`Invalid contract address type: ${addressType}`); } } -module.exports = { - getAlphBalance, - getTokensBalance, - contractIdFromAddress, - contractMultiCall +function hexToBinUnsafe(hex) { + const bytes = []; + for (let i = 0; i < hex.length; i += 2) { + bytes.push(parseInt(hex.slice(i, i + 2), 16)); + } + return new Uint8Array(bytes); } + +function addressFromContractId(contractId) { + const hash = hexToBinUnsafe(contractId); + const bytes = new Uint8Array([0x03, ...hash]); + return bs58.encode(bytes); +} + +module.exports = { + getAlphBalance, + getTokensBalance, + getTokenInfo, + contractIdFromAddress, + addressFromContractId, + contractMultiCall, +}; diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 05e2da1ee9..9eab7a5c30 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -43,8 +43,8 @@ const fixBalancesTokens = { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, stellar: { - "CDTKPWPLOURQA2SGTKTUQOWRCBZEORB4BWBOMJ3D3ZTQQSGE5F6JBQLV": { coingeckoId: "euro-coin", decimals: 7}, - "CAUIKL3IYGMERDRUN6YSCLWVAKIFG5Q4YJHUKM4S4NJZQIA3BAS6OJPK": { coingeckoId: "aquarius", decimals: 7}, + "CDTKPWPLOURQA2SGTKTUQOWRCBZEORB4BWBOMJ3D3ZTQQSGE5F6JBQLV": { coingeckoId: "euro-coin", decimals: 7 }, + "CAUIKL3IYGMERDRUN6YSCLWVAKIFG5Q4YJHUKM4S4NJZQIA3BAS6OJPK": { coingeckoId: "aquarius", decimals: 7 }, }, shape: { @@ -62,7 +62,7 @@ const fixBalancesTokens = { base: { [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, '0x0a27e060c0406f8ab7b64e3bee036a37e5a62853': { coingeckoId: 'zai-stablecoin', decimals: 18 }, - '0xc26c9099bd3789107888c35bb41178079b282561': { coingeckoId: 'solv-protocol-solvbtc-bbn', decimals: 18}, + '0xc26c9099bd3789107888c35bb41178079b282561': { coingeckoId: 'solv-protocol-solvbtc-bbn', decimals: 18 }, }, op_bnb: { [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, @@ -136,7 +136,7 @@ const fixBalancesTokens = { hedera: { '0x00000000000000000000000000000000001647e8': { coingeckoId: 'xsauce', decimals: 6 }, '0x000000000000000000000000000000000006f89a': { coingeckoId: 'usd-coin', decimals: 6 }, - '0x000000000000000000000000000000000022d6de': { coingeckoId: 'karate-combat', decimals: 8}, + '0x000000000000000000000000000000000022d6de': { coingeckoId: 'karate-combat', decimals: 8 }, '0x00000000000000000000000000000000000cba44': { coingeckoId: 'hbarx', decimals: 8 }, '0x00000000000000000000000000000000000b2ad5': { coingeckoId: 'saucerswap', decimals: 6 }, '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, @@ -178,7 +178,7 @@ const fixBalancesTokens = { }, unit0: { '0xcf43f7703d9b4e8835f977ef364b4014fa7e856e': { coingeckoId: 'unit0', decimals: 18 }, - } + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 5b6d38981dba23365783643ce19800c45331cf87 Mon Sep 17 00:00:00 2001 From: ratex-tony Date: Fri, 15 Nov 2024 02:18:44 +0800 Subject: [PATCH 1059/1768] feat: add usde vaults (#12298) --- projects/rate-x/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/rate-x/index.js b/projects/rate-x/index.js index f4c264872e..a67599fa8b 100644 --- a/projects/rate-x/index.js +++ b/projects/rate-x/index.js @@ -12,7 +12,10 @@ async function tvl(api) { '6opMSfkHgWsvG5KmZo8y2DuShaDHwXfB6VUuTx6W4Age', '4Ejjk5w7HAWvmXYT57s5uwn8rs7i61nbpcTRQ9ABB11M', '4xq7VjrJCU2Smk5JcJToik5hiEJ8RCvECReePP8Jg6q8', - 'B2YeVM6Kf3SKYLuH2nfucCmZwy8KJcQpd9e9JEuwv9mt' + 'B2YeVM6Kf3SKYLuH2nfucCmZwy8KJcQpd9e9JEuwv9mt', + '8DeQth4AWPXauRfgAEUy9WpHuyKKyYuNNsH76C5v1Hv7', + 'FS7TTuJejy7zjkdJXD9BjeLFZ44ipxxr2qmMMUKMZv6y', + '6K8yrdpm2dVaLSLpqoRJKv7SNuP54xmbv5KULcJzKTHc' ], balances: api.getBalances() }) From 6c4a5f5affdd0727ae7761b95beba2596e3a4724 Mon Sep 17 00:00:00 2001 From: dmytro-horbatenko <148330112+dmytro-horbatenko@users.noreply.github.com> Date: Thu, 14 Nov 2024 20:26:25 +0200 Subject: [PATCH 1060/1768] Midas RWA: add mBTC token and Base TVL (#12297) --- projects/midas/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/midas/index.js b/projects/midas/index.js index 797ffa5699..2377b64c49 100644 --- a/projects/midas/index.js +++ b/projects/midas/index.js @@ -2,6 +2,11 @@ const config = { ethereum: { mTBILL: '0xDD629E5241CbC5919847783e6C96B2De4754e438', mBASIS: '0x2a8c22E3b10036f3AEF5875d04f8441d4188b656', + mBTC: '0x007115416AB6c266329a03B09a8aa39aC2eF7d9d' + }, + base: { + mTBILL: '0xDD629E5241CbC5919847783e6C96B2De4754e438', + mBASIS: '0x1C2757c1FeF1038428b5bEF062495ce94BBe92b2', } } From 12e9a08fb2b8e1d05251b077b8018e20133a29d0 Mon Sep 17 00:00:00 2001 From: pixelcooker <155977639+pixelcooker@users.noreply.github.com> Date: Fri, 15 Nov 2024 02:27:36 +0800 Subject: [PATCH 1061/1768] Add goose (#12283) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/goose-farm/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/goose-farm/index.js diff --git a/projects/goose-farm/index.js b/projects/goose-farm/index.js new file mode 100644 index 0000000000..e529e28b34 --- /dev/null +++ b/projects/goose-farm/index.js @@ -0,0 +1,13 @@ +module.exports = { + bsc: { + tvl: async (api) => { + const vault = '0x0874f961178879cdbde3500544c49f864f232899' + const lpToken= await api.call({ abi: 'address:lpToken', target: vault}) + const token= await api.call({ abi: 'address:token', target: vault}) + const supply= await api.call({ abi: 'uint256:totalSupply', target: lpToken}) + const price= await api.call({ abi: 'uint256:price', target: lpToken}) + + api.addTokens(token, supply * price/1e18); + } + } +}; \ No newline at end of file From d81b6cd0f8fc32ccf20cb5914e46a0fad3812290 Mon Sep 17 00:00:00 2001 From: Joshua Sum <58564538+JoshuaSum@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:06:17 -0500 Subject: [PATCH 1062/1768] Update: Add Solayer USD (sUSD) (#12278) --- projects/solayer-ssol/index.js | 22 ++++++++++++++++++++++ projects/solayer-susd/index.js | 19 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 projects/solayer-ssol/index.js create mode 100644 projects/solayer-susd/index.js diff --git a/projects/solayer-ssol/index.js b/projects/solayer-ssol/index.js new file mode 100644 index 0000000000..4d3ecdb86d --- /dev/null +++ b/projects/solayer-ssol/index.js @@ -0,0 +1,22 @@ +const { sumTokens2, getConnection, } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js"); +const ADDRESSES = require('../helper/coreAssets.json') + +async function tvl(api) { + const connection = getConnection(); + + // add native SOL staking for sSOL + const stakeAccount = await connection.getAccountInfo(new PublicKey('po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2')) + api.add(ADDRESSES.solana.SOL, Number(stakeAccount.data.readBigUint64LE(258))) + + return sumTokens2({ + balances: api.getBalances() + }) +} + +module.exports = { + timetravel: false, + doublecounted: true, + methodology: "TVL is calculated by restaked native SOL in the Solayer staking pool", + solana: { tvl }, +}; \ No newline at end of file diff --git a/projects/solayer-susd/index.js b/projects/solayer-susd/index.js new file mode 100644 index 0000000000..685aaf1439 --- /dev/null +++ b/projects/solayer-susd/index.js @@ -0,0 +1,19 @@ +const { sumTokens2 } = require("../helper/solana"); +const ADDRESSES = require('../helper/coreAssets.json') + +async function tvl() { + // Sum up assets in sUSD pool + return sumTokens2({ + tokensAndOwners: [ + ['4MmJVdwYN8LwvbGeCowYjSx7KoEi6BJWg8XXnW4fDDp6', 'FhVcYNEe58SMtxpZGnTu2kpYJrTu2vwCZDGpPLqbd2yG'], + [ADDRESSES.solana.USDC, 'FhVcYNEe58SMtxpZGnTu2kpYJrTu2vwCZDGpPLqbd2yG'], + ] + }) +} + +module.exports = { + timetravel: false, + doublecounted: true, + methodology: "sUSD TVL is calculated by summing all assets backing the stablecoin", + solana: { tvl }, +}; \ No newline at end of file From fafb7ec1194b04c2b495dba57b91875cd8385e08 Mon Sep 17 00:00:00 2001 From: codenutt <23013728+codenutt@users.noreply.github.com> Date: Thu, 14 Nov 2024 20:35:10 -0600 Subject: [PATCH 1063/1768] add base support for tokemak (#12301) --- projects/tokemak/index.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/projects/tokemak/index.js b/projects/tokemak/index.js index 23b780f9d3..3d516c5547 100644 --- a/projects/tokemak/index.js +++ b/projects/tokemak/index.js @@ -14,9 +14,13 @@ const cvx_abi = { stkcvxFRAXBP_lockedStakesOf: "function lockedStakesOf(address account) view returns (tuple(bytes32 kek_id, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier)[])", } -const v2Gen3EthMainnet = { - systemRegistry: { - address: "0x2218F90A98b0C070676f249EF44834686dAa4285", +const AUTOPILOT_SYSTEM_REGISTRIES_BY_CHAIN = { + 1: '0x2218F90A98b0C070676f249EF44834686dAa4285', + 8453: '0x18Dc926095A7A007C01Ef836683Fdef4c4371b4e' +} + +const autopilotContracts = { + systemRegistry: { abi: { autoPoolRegistry: "function autoPoolRegistry() view returns (address)" } @@ -167,18 +171,22 @@ async function tvl(api) { const amountRes = await api.multiCall({ abi: abi.userInfo, calls }) tokens.forEach((val, i) => api.add(val, amountRes[i].amount)) + await populateAutopilotDetails(1, api); - // ================================================ - // Autopilot - // ================================================ + return sumTokens2({ api, tokensAndOwners: toa, }) +} +async function populateAutopilotDetails(chainId, api) { // Get the instance of the Autopool Registry from the System Registry - const autopoolRegistry = await api.call({ abi: v2Gen3EthMainnet.systemRegistry.abi.autoPoolRegistry, target: v2Gen3EthMainnet.systemRegistry.address, }); + const autopoolRegistry = await api.call({ abi: autopilotContracts.systemRegistry.abi.autoPoolRegistry, target: AUTOPILOT_SYSTEM_REGISTRIES_BY_CHAIN[chainId], }); // Use the Autopool Registry to get all the Autopools in the system - const autopools = await api.call({ abi: v2Gen3EthMainnet.autoPoolRegistry.abi.listVaults, target: autopoolRegistry, }); + const autopools = await api.call({ abi: autopilotContracts.autoPoolRegistry.abi.listVaults, target: autopoolRegistry, }); await api.erc4626Sum2({ calls: autopools}) +} - return sumTokens2({ api, tokensAndOwners: toa, }) +async function baseTvl(api) { + await populateAutopilotDetails(8453, api); + return sumTokens2({ api }) } function lpBalances(holdings, toa, tokens, calls) { @@ -226,5 +234,8 @@ module.exports = { tvl, pool2, staking + }, + base: { + tvl: baseTvl } } From 598753a1b8b422b50281cd1b4daf92cf097f3aa1 Mon Sep 17 00:00:00 2001 From: 0xbe1 <0xbetrue@gmail.com> Date: Fri, 15 Nov 2024 10:36:32 +0800 Subject: [PATCH 1064/1768] [thalaswap-v2] fix tvl (#12300) --- projects/thalaswap-v2/index.js | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/projects/thalaswap-v2/index.js b/projects/thalaswap-v2/index.js index da46d1a5bb..1a8ab37abb 100644 --- a/projects/thalaswap-v2/index.js +++ b/projects/thalaswap-v2/index.js @@ -1,15 +1,9 @@ -const { getResource, function_view } = require("../helper/chain/aptos"); +const { function_view } = require("../helper/chain/aptos"); -const thalaswapAddress = "0x007730cd28ee1cdc9e999336cbc430f99e7c44397c0aa77516f6f23a78559bb5"; -const thalaswapControllerResource = `${thalaswapAddress}::pool::ThalaSwap`; -let resourcesCache; +const thalaswapLensAddress = "ff1ac437457a839f7d07212d789b85dd77b3df00f59613fcba02388464bfcacb"; -async function _getResource(address, key) { - if (!resourcesCache) resourcesCache = getResource(address, key) - return resourcesCache -} -async function getBalance(poolAddress, assetMetadata) { - return function_view({ functionStr: "0x1::primary_fungible_store::balance", type_arguments: ["0x1::fungible_asset::Metadata"], args: [poolAddress, assetMetadata] }); +async function getPools(lensAddress) { + return function_view({ functionStr: `${lensAddress}::lens::get_all_pools_info`}) } module.exports = { @@ -18,16 +12,13 @@ module.exports = { "Aggregates TVL in all pools in Thalaswap, Thala Labs' AMM.", aptos: { tvl: async (api) => { - const controller = await _getResource(thalaswapAddress, thalaswapControllerResource) + const poolInfos = await getPools(thalaswapLensAddress) - const poolObjects = controller.pools.inline_vec.map(pool => (pool.inner)) - - for (const poolAddress of poolObjects) { - const pool = await getResource(poolAddress, `${thalaswapAddress}::pool::Pool`) - const assets = pool.assets_metadata.map(asset => asset.inner) - for (const asset of assets) { - const balance = await getBalance(poolAddress, asset) - api.add(asset, balance) + for (const poolInfo of poolInfos) { + const assets = poolInfo.assets_metadata.map(asset => asset.inner) + const balances = poolInfo.balances + for (let i = 0; i < assets.length; i++) { + api.add(assets[i], balances[i]) } } }, From 5f4c769e588170faa5d26ac91829942c4878d734 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 15 Nov 2024 03:37:27 +0100 Subject: [PATCH 1065/1768] minor fix --- projects/thalaswap-v2/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/projects/thalaswap-v2/index.js b/projects/thalaswap-v2/index.js index 1a8ab37abb..bb57d69b96 100644 --- a/projects/thalaswap-v2/index.js +++ b/projects/thalaswap-v2/index.js @@ -17,9 +17,7 @@ module.exports = { for (const poolInfo of poolInfos) { const assets = poolInfo.assets_metadata.map(asset => asset.inner) const balances = poolInfo.balances - for (let i = 0; i < assets.length; i++) { - api.add(assets[i], balances[i]) - } + api.add(assets, balances) } }, }, From af96d6449988818c9ad6647ba14853298b7bcb53 Mon Sep 17 00:00:00 2001 From: B-aublys <57601610+B-aublys@users.noreply.github.com> Date: Fri, 15 Nov 2024 03:51:22 +0100 Subject: [PATCH 1066/1768] Adding Sensi (#12296) Co-authored-by: Baubliukas Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/sensi/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/sensi/index.js diff --git a/projects/sensi/index.js b/projects/sensi/index.js new file mode 100644 index 0000000000..5e578dac84 --- /dev/null +++ b/projects/sensi/index.js @@ -0,0 +1,23 @@ +const { staking } = require('../helper/staking') +const SENSI_TOKEN_CONTRACT = '0x63e77cf206801782239d4f126cfa22b517fb4edb' +const SENSI_LOCKING_CONTRACT = '0xc13Aff57B67145012Ef3a4604bDB3f3dA17E114f' +const SENSI_SY_CONTRACT = '0x21B656d3818A1dD07B800c1FE728fB81921af3A3' + +const SY_ABI = { + "getSYPortfolio": "function getSYPortfolio() view returns ((uint256 totalPayToken, uint256 totalBuyInToken, uint256 rewardsInPool, uint256 rewardsLastRun, uint256 lockingLastRun, uint256 SENSICirculatingSupply, uint256 SYNFTCirculatingSupply, uint256 lastMintedSYNFTID, uint256 totalVaults, uint256 totalActiveVaults) SY_Portfolio)" +} + +async function tvl(api) { + const balance_of_SY = await api.call({ abi: SY_ABI.getSYPortfolio, target: SENSI_SY_CONTRACT }) + + const balance_of_SY_TVL = balance_of_SY.totalPayToken + api.add("0x0000000000000000000000000000000000000000", balance_of_SY_TVL) +} + +module.exports = { + methodology: 'Counts how many tokens are in Sensi Locks and in SmartYield', + bsc: { + tvl, + staking: staking(SENSI_LOCKING_CONTRACT, SENSI_TOKEN_CONTRACT), + } +} \ No newline at end of file From 78143c174140f7de3d84fc804d11d42bd835839e Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 15 Nov 2024 10:10:05 +0000 Subject: [PATCH 1067/1768] add modeswap v3 adapter (#12307) --- projects/swapmode-v3/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/swapmode-v3/index.js diff --git a/projects/swapmode-v3/index.js b/projects/swapmode-v3/index.js new file mode 100644 index 0000000000..0d83ba8218 --- /dev/null +++ b/projects/swapmode-v3/index.js @@ -0,0 +1,6 @@ +const { uniV3Export } = require('../helper/uniswapV3') +const factory = '0x6E36FC34eA123044F278d3a9F3819027B21c9c32' + +module.exports = uniV3Export({ + mode: { factory, fromBlock: 5005167 }, +}) \ No newline at end of file From 43fadb4cb6e208d268336af4c7b064421c3e5d04 Mon Sep 17 00:00:00 2001 From: Utkarsh <83659045+0xShuk@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:43:56 +0530 Subject: [PATCH 1068/1768] feat: update api for spl-governance TVL (#12160) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/spl-governance/index.js | 42 +++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/projects/spl-governance/index.js b/projects/spl-governance/index.js index f68ef0c49f..1abdbfd465 100644 --- a/projects/spl-governance/index.js +++ b/projects/spl-governance/index.js @@ -1,22 +1,36 @@ -const { getCache } = require('../helper/http') -const url = 'https://api.realms.today/stats/tvl' +const { PublicKey } = require('@solana/web3.js') +const { get } = require('../helper/http') +const { getConnection } = require('../helper/solana') +const { sliceIntoChunks } = require('../helper/utils') -async function tvl() { - const { tvl } = await getCache(url) - return tvlObject(tvl) -} +const url = 'https://realms-tvl.vercel.app/tvl/latest' -async function staking() { - const { ownTokens } = await getCache(url) - return tvlObject(ownTokens) -} +const isSolOrStable = (token) => ['sol', 'usd', 'btc', 'eth'].some(i => token.token_symbol.toLowerCase().includes(i)) + +async function tvl(api, isStaking = false) { + // const connnection = getConnection() + let { totalValueUsd: { tokens } } = await get(url) + const filterFn = isStaking ? i => !isSolOrStable(i) : isSolOrStable + tokens = tokens.filter(filterFn) + tokens.forEach(i => api.addUSDValue(i.value)) + /* const decimalsMap = {} + const _tokens = tokens.map(i => i.token) + const chunks = sliceIntoChunks(_tokens, 99) + + for (const chunk of chunks) { + const { value } = await connnection.getMultipleParsedAccounts(chunk.map(i => new PublicKey(i))) + value.forEach((val, i) => { + decimalsMap[chunk[i]] = val.data.parsed.info.decimals + }) + } -function tvlObject(obj) { - return Object.fromEntries(Object.entries(obj).filter(([_, i]) => +i > 1).map(([a, b]) => ['solana:'+a, b])) + for (const token of tokens) + api.add(token.token, +token.balance * 10 ** decimalsMap[token.token]) */ } module.exports = { - methodology: 'SOL token and stables held in the contracts are counted under tvl, gov tokens are counted under staking', + misrepresentedTokens: true, + methodology: 'SOL token and stables held in the contracts are counted under tvl, gov tokens are counted under staking', timetravel: false, - solana: { tvl, staking, } + solana: { tvl: api => tvl(api), staking: api => tvl(api, true), } } From b7e17d48f1dc63b0db7a3c9e60555002b53ff455 Mon Sep 17 00:00:00 2001 From: lilchizh <55549631+lilchizh@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:15:46 +0700 Subject: [PATCH 1069/1768] add TONCO DEX (#12308) --- projects/tonco/index.js | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 projects/tonco/index.js diff --git a/projects/tonco/index.js b/projects/tonco/index.js new file mode 100644 index 0000000000..6d54f1109d --- /dev/null +++ b/projects/tonco/index.js @@ -0,0 +1,48 @@ +const { cachedGraphQuery } = require('../helper/cache'); +const { post } = require('../helper/http') +const { transformDexBalances } = require('../helper/portedTokens') +const sdk = require('@defillama/sdk') +const { ethers } = require("ethers") + +const API_URL = 'https://indexer.tonco.io'; + +const poolsQuery = ` + { + pools { + address + jetton0 { + bounceableAddress + decimals + } + jetton1 { + bounceableAddress + decimals + } + totalValueLockedJetton0 + totalValueLockedJetton1 + } + } +` + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + ton: { + tvl: async () => { + + const result = await cachedGraphQuery('tonco-swap', API_URL, poolsQuery) + + sdk.log(result) + + return transformDexBalances({ + chain: 'ton', + data: result.pools.map(pool => ({ + token0: pool.jetton0.bounceableAddress, + token1: pool.jetton1.bounceableAddress, + token0Bal: Number(ethers.parseUnits(String(pool.totalValueLockedJetton0.toFixed(pool.jetton0.decimals)), parseInt(pool.jetton0.decimals))), + token1Bal: Number(ethers.parseUnits(String(pool.totalValueLockedJetton1.toFixed(pool.jetton1.decimals)), parseInt(pool.jetton1.decimals))), + })) + }) + } + } +} From 1a58f51da33d13fa70a76f555f96b6f75809ef4c Mon Sep 17 00:00:00 2001 From: WindowAzure Date: Fri, 15 Nov 2024 18:19:24 +0800 Subject: [PATCH 1070/1768] add tron wallet address (#12306) Co-authored-by: Azure --- projects/hibt/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/hibt/index.js b/projects/hibt/index.js index 657dae4941..5c7a3a96e8 100644 --- a/projects/hibt/index.js +++ b/projects/hibt/index.js @@ -13,7 +13,9 @@ const config = { tron: { owners: [ 'TWVCro8i15sJjmwRKfV53gPnCsgz2ThQSc', - 'TGoPfFBjoZ6wFFia1NAFio21Pi9Sc8KFw5' + 'TGoPfFBjoZ6wFFia1NAFio21Pi9Sc8KFw5', + 'TXzjxSsfS2YDc8wktEjbUAHnETWdAgN3aF', + 'TWkAzr1bfTbm84awjbBgyThPqZPs6GbskW' ] }, } From c5229a545819214ef0398ec4c9321dd334b84c9b Mon Sep 17 00:00:00 2001 From: Uday Khokhariya <101034951+githubotoro@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:20:28 +0700 Subject: [PATCH 1071/1768] Update Royco Contract Addresses (#12305) --- projects/royco/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/royco/index.js b/projects/royco/index.js index ed66d98db6..ebe975e45b 100644 --- a/projects/royco/index.js +++ b/projects/royco/index.js @@ -1,9 +1,9 @@ const { getLogs2 } = require('../helper/cache/getLogs') const config = { - ethereum: { factory: '0xb316D165D01aC68d31B297F847533D671c965662', fromBlock: 21040754 }, - arbitrum: { factory: '0xb316D165D01aC68d31B297F847533D671c965662', fromBlock: 267610608 }, - base: { factory: '0xb316D165D01aC68d31B297F847533D671c965662', fromBlock: 21548421 }, + ethereum: { factory: '0xbfac50c6b2c91ab756c1e5efab699438992cc1b2', fromBlock: 21183492 }, + arbitrum: { factory: '0xbfac50c6b2c91ab756c1e5efab699438992cc1b2', fromBlock: 274261481 }, + base: { factory: '0xbfac50c6b2c91ab756c1e5efab699438992cc1b2', fromBlock: 22384258 }, } Object.keys(config).forEach(chain => { @@ -16,4 +16,4 @@ Object.keys(config).forEach(chain => { } } -}) \ No newline at end of file +}) From bd88264cdd5fa1f51041a2023fc83cd6858a759e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 15 Nov 2024 12:42:11 +0100 Subject: [PATCH 1072/1768] mark broken adapters --- projects/anedak/index.js | 3 ++- projects/babena/index.js | 5 +++-- projects/kdlaunch/index.js | 31 +--------------------------- projects/parallel-lending/index.js | 8 ++++++- projects/parallel-staking/index.js | 8 ++++++- projects/parallel-stream/index.js | 8 ++++++- projects/parallel.js | 8 ++++++- projects/parallelamm/index.js | 8 ++++++- projects/shadeprotocol-lend/index.js | 31 +++++++++++++++------------- projects/vaporwave.js | 5 +++-- 10 files changed, 61 insertions(+), 54 deletions(-) diff --git a/projects/anedak/index.js b/projects/anedak/index.js index 493ebe635b..950d501781 100644 --- a/projects/anedak/index.js +++ b/projects/anedak/index.js @@ -116,10 +116,11 @@ async function fetch() { } module.exports = { + // deadFrom: '2024-08-30', timetravel: false, misrepresentedTokens: true, methodology: "TVL accounts for the liquidity on all Anedak AMM pools, with all values calculated in terms of KDA price.", kadena: { - tvl: fetch, + tvl: () => ({}), }, }; diff --git a/projects/babena/index.js b/projects/babena/index.js index 838dc98444..ab91127e72 100644 --- a/projects/babena/index.js +++ b/projects/babena/index.js @@ -104,9 +104,10 @@ async function stakingfetch() { module.exports = { timetravel: false, misrepresentedTokens: true, + // deadFrom: '2024-08-30', kadena: { - tvl: fetch, - staking: stakingfetch + tvl: () => ({}), + staking: () => ({}) } } \ No newline at end of file diff --git a/projects/kdlaunch/index.js b/projects/kdlaunch/index.js index d1c4dd3068..2da059a049 100644 --- a/projects/kdlaunch/index.js +++ b/projects/kdlaunch/index.js @@ -1,40 +1,12 @@ const { fetchLocal, mkMeta } = require("../helper/pact"); const network = (chainId) => `https://api.chainweb.com/chainweb/0.0/mainnet01/chain/${chainId}/pact`; -const GAS_PRICE = 0.00000001; const creationTime = () => Math.round(new Date().getTime() / 1000) - 10; const getReserve = (tokenData) => { return parseFloat(tokenData.decimal ? tokenData.decimal : tokenData); } -const getTokenToKadena = async (token) => { - const chainId = '3'; - let data = await fetchLocal({ - pactCode: ` - (use free.exchange) - (let* - ( - (p (get-pair ${token} coin)) - (reserveA (reserve-for p ${token})) - (reserveB (reserve-for p coin)) - )[reserveA reserveB]) - `, - meta: mkMeta("account", chainId, GAS_PRICE, 3000, creationTime(), 600), - }, network(chainId)); - - if (data.result.status === "success") { - const tokenReserve = getReserve(data.result.data[0]); - const kadenaReserve = getReserve(data.result.data[1]); - return kadenaReserve / tokenReserve; - } - - throw new Error(`Kadena fetch failed`); -} - -const fetchKdlPrice = async () => { - return await getTokenToKadena("kdlaunch.token"); -} const getTotalStakedKdl = async () => { const chainId = '1'; @@ -54,10 +26,9 @@ const getTotalStakedKdl = async () => { } async function fetchStakingTvl() { - const kdlPrice = await fetchKdlPrice(); const stakedKdl = await getTotalStakedKdl(); return { - kadena: stakedKdl * kdlPrice + kdlaunch: stakedKdl } } diff --git a/projects/parallel-lending/index.js b/projects/parallel-lending/index.js index ca94319312..2c365e77b3 100644 --- a/projects/parallel-lending/index.js +++ b/projects/parallel-lending/index.js @@ -1,7 +1,13 @@ const { getExports } = require('../helper/heroku-api') module.exports = { + // deadFrom: '2024-08-17', timetravel: false, misrepresentedTokens: true, ...getExports("parallel-lending", ['heiko', 'parallel'], ['borrowed']), -} \ No newline at end of file +} + +const chains = ['heiko', 'parallel'] +chains.forEach(chain => { + Object.keys(module.exports[chain]).forEach(key => module.exports[chain][key] = () => ({})) +}) \ No newline at end of file diff --git a/projects/parallel-staking/index.js b/projects/parallel-staking/index.js index c49199a2b0..8a64eb93ca 100644 --- a/projects/parallel-staking/index.js +++ b/projects/parallel-staking/index.js @@ -1,6 +1,12 @@ const { getExports } = require('../helper/heroku-api') module.exports = { + // deadFrom: '2024-08-17', timetravel: false, ...getExports("parallel-staking", ['heiko', 'parallel']), -} \ No newline at end of file +} + +const chains = ['heiko', 'parallel'] +chains.forEach(chain => { + Object.keys(module.exports[chain]).forEach(key => module.exports[chain][key] = () => ({})) +}) \ No newline at end of file diff --git a/projects/parallel-stream/index.js b/projects/parallel-stream/index.js index bb1791d842..45c848afe2 100644 --- a/projects/parallel-stream/index.js +++ b/projects/parallel-stream/index.js @@ -1,7 +1,13 @@ const { getExports } = require('../helper/heroku-api') module.exports = { + // deadFrom: '2024-08-17', timetravel: false, misrepresentedTokens: true, ...getExports("parallel-stream", ['heiko', 'parallel']), -} \ No newline at end of file +} + +const chains = ['heiko', 'parallel'] +chains.forEach(chain => { + Object.keys(module.exports[chain]).forEach(key => module.exports[chain][key] = () => ({})) +}) \ No newline at end of file diff --git a/projects/parallel.js b/projects/parallel.js index b9eb689f5c..d216a1336d 100644 --- a/projects/parallel.js +++ b/projects/parallel.js @@ -1,6 +1,12 @@ const { getExports } = require('./helper/heroku-api') module.exports = { + // deadFrom: '2024-08-17', timetravel: false, ...getExports("parallel-crowdloan", ['heiko', 'parallel']), -} \ No newline at end of file +} + +const chains = ['heiko', 'parallel'] +chains.forEach(chain => { + Object.keys(module.exports[chain]).forEach(key => module.exports[chain][key] = () => ({})) +}) \ No newline at end of file diff --git a/projects/parallelamm/index.js b/projects/parallelamm/index.js index 24412eac1a..9fd270af21 100644 --- a/projects/parallelamm/index.js +++ b/projects/parallelamm/index.js @@ -1,7 +1,13 @@ const { getExports } = require('../helper/heroku-api') module.exports = { + // deadFrom: '2024-08-17', timetravel: false, misrepresentedTokens: true, ...getExports("parallelamm", ['heiko', 'parallel']), -} \ No newline at end of file +} + +const chains = ['heiko', 'parallel'] +chains.forEach(chain => { + Object.keys(module.exports[chain]).forEach(key => module.exports[chain][key] = () => ({})) +}) diff --git a/projects/shadeprotocol-lend/index.js b/projects/shadeprotocol-lend/index.js index 16ee7d06a8..a1ab55b5cd 100644 --- a/projects/shadeprotocol-lend/index.js +++ b/projects/shadeprotocol-lend/index.js @@ -1,24 +1,27 @@ -const { get } = require("../helper/http") +const { post } = require("../helper/http") -// Total Collateral Deposited in Vaults -async function tvl(api) { - const data = await get('https://ruvzuawwz7.execute-api.us-east-1.amazonaws.com/prod-analytics-v1/lend') - - let totalValue = 0; +async function getData(api) { + const isoTimestamp = new Date((api.timestamp - 5 * 60 * 60) * 1000).toISOString() + const { data: { lendStatsHistories } } = await post('https://prodv1.securesecrets.org/graphql', { "operationName": "getLendHistory", "variables": { "intervalIso": isoTimestamp }, "query": "query getLendHistory($intervalIso: String!) {\n lendStatsHistories(\n query: {where: {time: {gte: $intervalIso}}, orderBy: {time: \"desc\"}}\n ) {\n averageLtv\n collateralUsd\n debtAmount\n debtUsd\n time\n __typename\n }\n}" }) + console.log(lendStatsHistories.length) + return lendStatsHistories[0] +} - for (let i = 0; i < data.collaterals.length; i++) { - // Add the value of each collateral to the total value - totalValue += data.collaterals[i].value; - } +async function tvl(api) { + const data = await getData(api) + api.addUSDValue(data.collateralUsd - data.debtUsd) +} - return { - tether: totalValue - } +async function borrowed(api) { + const data = await getData(api) + api.addUSDValue(data.debtUsd) } + module.exports = { misrepresentedTokens: true, secret: { - tvl + tvl, + borrowed, } } diff --git a/projects/vaporwave.js b/projects/vaporwave.js index 4f801f6009..9909985a09 100644 --- a/projects/vaporwave.js +++ b/projects/vaporwave.js @@ -32,12 +32,13 @@ const chains = { module.exports = { timetravel: false, misrepresentedTokens: true, + // deadFrom: '2024-08-01', methodology: 'TVL data is pulled from the Vaporwave Finance API "https://api.vaporwave.farm/tvl".', doublecounted: true, ...Object.fromEntries(Object.entries(chains).map(chain => [chain[0], { - tvl: fetchChain(chain[1], false), - staking: fetchChain(chain[1], true), + tvl: () => ({}), + staking: () => ({}), }])) } From 68b0b225495ea8ce188d857cc7f25d01c9875583 Mon Sep 17 00:00:00 2001 From: Ora <165104067+oraprotocolfi@users.noreply.github.com> Date: Fri, 15 Nov 2024 16:23:47 +0300 Subject: [PATCH 1073/1768] track Ora Protocol tvl (#12310) Co-authored-by: oraprotocolfi Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/oraprotocol/index.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 projects/oraprotocol/index.js diff --git a/projects/oraprotocol/index.js b/projects/oraprotocol/index.js new file mode 100644 index 0000000000..72f3df35ff --- /dev/null +++ b/projects/oraprotocol/index.js @@ -0,0 +1,29 @@ +const contracts = [ + "0xc0b2FdA4EDb0f7995651B05B179596b112aBE0Ff", + "0x0a7Df7BC7a01A4b6C9889d5994196C1600D4244a", + "0x5982241e50Cb4C42cb51D06e74A97EAaCa3a8CE2", + "0xDF03600C34cacE7496A0A8Ef102B4bCe718958a2", + "0x3e0598fee8a73d09c06b3de3e205ba7ff8edb004" +]; + + +module.exports = { + ethereum: { + tvl, staking, + } +}; + +async function tvl(api) { + const tokens = await api.multiCall({ abi: 'address:stakingTokenAddress', calls: contracts }) + return api.sumTokens({ tokensAndOwners2: [tokens, contracts] }) +} + +async function staking(api) { + + const contracts = [ + "0x07b022bd57e22c8c5abc577535cf25e483dae3df", + "0x4f5e12233ed7ca1699894174fcbd77c7ed60b03d", + ]; + const tokens = await api.multiCall({ abi: 'address:stakingTokenAddress', calls: contracts }) + return api.sumTokens({ tokensAndOwners2: [tokens, contracts] }) +} \ No newline at end of file From 2553ae5cc684814bf7f47f24e2feabe068906d5f Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:24:11 +0100 Subject: [PATCH 1074/1768] SwissBorg: Add new wallets (#12309) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/swissborg/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index b3a1e43bb3..d559134f95 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -47,6 +47,7 @@ const config = { '9qoUcyhKSWMbk6tqGUYQUpeosPcdUnJszG4eQKwfe4gL', 'Fe7SEekiKygziaEGKxsDsgLVzrCfNvVBvAYsaJBwFA8s', 'AR2ecEWY2vfsXmd4fUxc196LhbX5p8TnhvJg8t3fgYUN', + '7Sng9GTnkjjb8WTF2kYX8JWqGHHwJGk5Ke9639zREUAR', ], }, polkadot: { @@ -109,7 +110,12 @@ const config = { owners: [ '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', ] - } + }, + // injective: { + // owners: [ + // 'inj1wvhk7xhzf9kus9a4tpa6v8vhuqvm265rz7zd6n', + // ] + // } } module.exports = cexExports(config) From 288ded4d4b89890effd665743eebde593b217d63 Mon Sep 17 00:00:00 2001 From: David Lee Date: Fri, 15 Nov 2024 08:58:40 -0500 Subject: [PATCH 1075/1768] [Level] Add curve LP tokens in LevelUSD points farm to calculation (#12312) --- projects/level-money/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/level-money/index.js b/projects/level-money/index.js index d334733491..d487654609 100644 --- a/projects/level-money/index.js +++ b/projects/level-money/index.js @@ -11,6 +11,9 @@ const LEVEL_STAKING_CONTRACT = '0x7FDA203f6F77545548E984133be62693bCD61497'; const LEVEL_RESERVE_MANAGERS = ['0x70D544F75c2228D68EE04BC63e6e4Bae8F31fCEF', '0x7B2c2C905184CEf1FABe920D4CbEA525acAa6f14']; const LEVEL_WRAPPED_TOKENS = [LEVEL_WRAPPED_AUSDC, LEVEL_WRAPPED_AUSDT]; +const LEVEL_USD_POINTS_FARM = '0x80B73eF4534FE245300017A5197451973559c00f'; + +const LEVEL_USD_USDC_CURVE_LP_TOKEN = '0x1220868672d5b10f3e1cb9ab519e4d0b08545ea4'; const TOKEN_CONTRACTS = [ ADDRESSES.ethereum.USDT, // USDT @@ -38,5 +41,6 @@ module.exports = { owners: [LEVEL_STAKING_CONTRACT, ...LEVEL_RESERVE_MANAGERS, ...LEVEL_WRAPPED_TOKENS], tokens: TOKEN_CONTRACTS, }), + pool2: sumTokensExport({ owner: LEVEL_USD_POINTS_FARM, tokens: [LEVEL_USD_USDC_CURVE_LP_TOKEN] }) } }; From af46ef743e15e1c8d1cbda92f8b5b132ee59fe06 Mon Sep 17 00:00:00 2001 From: David Zhang <125990317+zhangdav@users.noreply.github.com> Date: Fri, 15 Nov 2024 21:09:14 +0700 Subject: [PATCH 1076/1768] Add Bob chain and replace FBTC with LFBTC on Ethereum, Arbitrum, BSC, Mantle, and Bob (#12282) --- projects/pumpbtc/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index 47aef26159..673c987723 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -33,7 +33,7 @@ async function otherTvl(api) { module.exports.isHeavyProtocol = true; -['bitcoin', 'ethereum', 'bsc', 'mantle', 'base', 'arbitrum'].forEach(chain => { +['bitcoin', 'ethereum', 'bsc', 'mantle', 'base', 'arbitrum', 'bob'].forEach(chain => { if (chain == 'bitcoin') { module.exports[chain] = { tvl: bitcoinTvl, @@ -43,4 +43,4 @@ module.exports.isHeavyProtocol = true; tvl: otherTvl } } -}) +}) \ No newline at end of file From 25dcdfd5323fc52baa7926ac35046f59ffcf4dbd Mon Sep 17 00:00:00 2001 From: suidollar Date: Fri, 15 Nov 2024 16:12:26 +0200 Subject: [PATCH 1077/1768] Creating DefiLlama adapter for suidollar (#12275) --- projects/suidollar/index.js | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 projects/suidollar/index.js diff --git a/projects/suidollar/index.js b/projects/suidollar/index.js new file mode 100644 index 0000000000..5802b948d0 --- /dev/null +++ b/projects/suidollar/index.js @@ -0,0 +1,57 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sui = require("../helper/chain/sui"); + +const EVENT_TYPES = { + DEPOSIT: "0xe8087c2b86351ce15e8d72e83a39c5772c0b1d054015ae9671305e686cef5034::suidollar::Deposit", + WITHDRAW: "0xe8087c2b86351ce15e8d72e83a39c5772c0b1d054015ae9671305e686cef5034::suidollar::Withdraw" +}; + +async function getAllEvents(eventType) { + let hasMore = true; + let cursor = null; + let allEvents = []; + + while (hasMore) { + const events = await sui.queryEvents({ + eventType, + transform: i => i, + cursor, + limit: 50 + }); + + if (Array.isArray(events) && events.length > 0) { + allEvents = allEvents.concat(events); + } + + if (events.hasNextPage && events.nextCursor) { + cursor = events.nextCursor; + } else { + hasMore = false; + } + } + + return allEvents.map(event => eventType === EVENT_TYPES.DEPOSIT ? event.deposit_amount : event.amount) + .filter(amount => amount !== undefined); +} + +async function tvl(api) { + const deposits = await getAllEvents(EVENT_TYPES.DEPOSIT); + const withdraws = await getAllEvents(EVENT_TYPES.WITHDRAW); + + let totalBalance = 0n; + + deposits.forEach(amount => amount && (totalBalance += BigInt(amount))); + withdraws.forEach(amount => amount && (totalBalance -= BigInt(amount))); + + api.add(ADDRESSES.sui.USDC_CIRCLE, totalBalance); + + return api.getBalances(); +} + +module.exports = { + timetravel: false, + sui: { + tvl + }, + methodology: "Calculates TVL by tracking deposit and withdrawal events" +} \ No newline at end of file From 46579072746eb78728edaa836d9bae13652585da Mon Sep 17 00:00:00 2001 From: vvalecha519 <65174294+vvalecha519@users.noreply.github.com> Date: Fri, 15 Nov 2024 10:05:19 -0500 Subject: [PATCH 1078/1768] do not double count (#12246) --- projects/etherfi-liquid/index.js | 38 ++++++++++++++++++++------- projects/etherfi-lrt/index.js | 44 +++++++++++++++++++++++++++----- 2 files changed, 67 insertions(+), 15 deletions(-) diff --git a/projects/etherfi-liquid/index.js b/projects/etherfi-liquid/index.js index 2ffb2b3b8d..bc6001deb4 100644 --- a/projects/etherfi-liquid/index.js +++ b/projects/etherfi-liquid/index.js @@ -1,12 +1,18 @@ const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') +const liquidVaults = [ + "0xf0bb20865277aBd641a307eCe5Ee04E79073416C", + "0x08c6F91e2B681FaF5e17227F2a44C307b3C1364C" +] + +const liquidAccountants = [ + "0x0d05D94a5F1E76C18fbeB7A13d17C8a314088198", + "0xc315D6e14DDCDC7407784e2Caf815d131Bc1D3E7" +] + async function tvl(api) { const optimismApi = new sdk.ChainApi({ chain: 'optimism', timestamp: api.timestamp }) - const balETH = await api.call({ - abi: "uint256:totalSupply", - target: '0xf0bb20865277aBd641a307eCe5Ee04E79073416C', - }); await optimismApi.getBlock() const wethBal = await optimismApi.call({ target: '0xAB7590CeE3Ef1A863E9A5877fBB82D9bE11504da', @@ -18,17 +24,31 @@ async function tvl(api) { abi: 'function categoryLastUpdated(string _category) view returns (uint256)', params: ['liquid-weth'] }); - if (api.timestamp - updatedTimestamp > 12 * 60 * 60 || updatedTimestamp > api.timestamp) { + + //eth vault + const balETH = await api.call({ + abi: "uint256:totalSupply", + target: liquidVaults[0], + }); + const ethQuote = await api.call({ + target: liquidAccountants[0], + abi: 'function getRate() view returns (uint256)' + }); + if (api.timestamp - updatedTimestamp > 12 * 60 * 60) { throw new Error('Data is outdated') } - console.log(updatedTimestamp, api.timestamp) - api.add(ADDRESSES.ethereum.EETH, BigInt(balETH) - BigInt(wethBal)); + api.add(ADDRESSES.ethereum.EETH, BigInt(balETH) * BigInt(ethQuote) / BigInt(1e18) - BigInt(wethBal)); api.add(ADDRESSES.ethereum.WETH, wethBal) + //usdc vault const balUSD = await api.call({ abi: "uint256:totalSupply", - target: '0x08c6f91e2b681faf5e17227f2a44c307b3c1364c', + target: liquidVaults[1], + }); + const usdQuote = await api.call({ + target: liquidAccountants[1], + abi: 'function getRate() view returns (uint256)' }); - api.add(ADDRESSES.ethereum.USDC, balUSD); + api.add(ADDRESSES.ethereum.USDC, balUSD * usdQuote / 1e6); } module.exports = { diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index 68fa8567b2..a5543b4dcb 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -1,4 +1,6 @@ -const { sumTokensExport } = require('../helper/unwrapLPs'); +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk') + const vaults = [ '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', '0x7223442cad8e9cA474fC40109ab981608F8c4273', @@ -7,13 +9,43 @@ const vaults = [ '0xeDa663610638E6557c27e2f4e973D3393e844E70', ] +const vaultAccountant = [ + '0xbe16605B22a7faCEf247363312121670DFe5afBE', + '0x126af21dc55C300B7D0bBfC4F3898F558aE8156b', + '0x1b293DC39F94157fA0D1D36d7e0090C8B8B8c13F', + '0xBae19b38Bf727Be64AF0B578c34985c3D612e2Ba', + '0x1D4F0F05e50312d3E7B65659Ef7d06aa74651e0C', +] + +async function vaultsTvl(api) { + for (let i = 0; i < vaults.length; i++) { + const bv = vaults[i] + const ba = vaultAccountant[i] + const bvSupply = await api.call({ + target: bv, + abi: 'uint256:totalSupply', + }); + let [base, quote] = await Promise.all([ + api.call({ + target: ba, + abi: "function base() external view returns (address)", + }), + api.call({ + target: ba, + abi: "function getRate() external view returns (uint256 rate)", + }), + ]); + if(base.toLowerCase() === String(ADDRESSES.ethereum.WETH).toLowerCase()) { + base = ADDRESSES.ethereum.EETH + } + const denominator = Math.pow(10, (String(quote).length-1)) + api.add(base, bvSupply * quote / denominator ) + } +} + module.exports = { doublecounted: true, ethereum: { - tvl: sumTokensExport({ owners: vaults, fetchCoValentTokens: true, tokenConfig: { - onlyWhitelisted: false, - }, resolveUniV3: true, blacklistedTokens: [ - '0x657e8c867d8b37dcc18fa4caead9c45eb088c642', // eBTC - ] }), + tvl: vaultsTvl, }, } \ No newline at end of file From cb929b33d2e88f3fcd33e73f64a9a66e3e553325 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:21:49 +0100 Subject: [PATCH 1079/1768] Shido dex (#12314) Co-authored-by: Bernard Namangala <58230307+Bernard-Namangala@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 4 ++++ projects/shido-dex/index.js | 4 ++++ 3 files changed, 9 insertions(+) create mode 100644 projects/shido-dex/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 5a2d1b4da0..ede3c645a8 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -291,6 +291,7 @@ "shape", "shibarium", "shiden", + "shido", "shimmer_evm", "sifchain", "smartbch", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 9eab7a5c30..981d7ab3af 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -179,6 +179,10 @@ const fixBalancesTokens = { unit0: { '0xcf43f7703d9b4e8835f977ef364b4014fa7e856e': { coingeckoId: 'unit0', decimals: 18 }, }, + shido: { + '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: 'shido', decimals: 18 }, + '0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd': { coingeckoId: 'usd-coin', decimals: 6 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/shido-dex/index.js b/projects/shido-dex/index.js new file mode 100644 index 0000000000..5300e5c457 --- /dev/null +++ b/projects/shido-dex/index.js @@ -0,0 +1,4 @@ +const { uniV3GraphExport } = require('../helper/uniswapV3') +module.exports = { + shido: { tvl: uniV3GraphExport({ graphURL: 'https://ljd1t705przomdjt11587.cleavr.xyz/subgraphs/name/shido/mainnet', name: 'shido-dex' }) } +} \ No newline at end of file From d9c4ea8177a408eb8757dd7d83c73eab67c751ae Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 15 Nov 2024 23:10:36 +0000 Subject: [PATCH 1080/1768] add solana token that isn't priced --- projects/helper/tokenMapping.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 981d7ab3af..1605e6b1db 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -182,6 +182,9 @@ const fixBalancesTokens = { shido: { '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: 'shido', decimals: 18 }, '0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd': { coingeckoId: 'usd-coin', decimals: 6 }, + }, + solana: { + 'AZsHEMXd36Bj1EMNXhowJajpUXzrKcK57wW4ZGXVa7yR': { coingeckoId: 'guacamole', decimals: 5 } } } From 4f95f0489b50c917c7ca1a8de24a0bbbaad8fa85 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 15 Nov 2024 23:28:56 +0000 Subject: [PATCH 1081/1768] add mantle --- projects/equilibria/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/equilibria/index.js b/projects/equilibria/index.js index b848170a21..14c6cc39e7 100644 --- a/projects/equilibria/index.js +++ b/projects/equilibria/index.js @@ -26,6 +26,12 @@ const contracts = { staker: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", eqbRewardsAddress: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", pendleAddress: "0xBC7B1Ff1c6989f006a1185318eD4E7b5796e66E1", + }, + mantle: { + boosterAddress: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", + staker: "0x479603DE0a8B6D2f4D4eaA1058Eea0d7Ac9E218d", + eqbRewardsAddress: "0x71e0ce200a10f0bBFB9F924fE466ACf0B7401EbF", + pendleAddress: "0xd27B18915e7acc8FD6Ac75DB6766a80f8D2f5729", } }; @@ -90,7 +96,7 @@ async function tvl(chain, block) { return balances; } -const chains = ["ethereum", "arbitrum", 'bsc', 'optimism']; +const chains = ["ethereum", "arbitrum", 'bsc', 'optimism', 'mantle']; module.exports = { doublecounted: true, From 34371af47f26bd779ed0f483cc0b9f291a0f5160 Mon Sep 17 00:00:00 2001 From: Ahsan Javaid <104683677+ahsan-javaiid@users.noreply.github.com> Date: Sat, 16 Nov 2024 10:19:42 +0500 Subject: [PATCH 1082/1768] Add `Powpeg` protocol Tvl (Fast mode option TVL) (#12317) --- projects/powpeg/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 projects/powpeg/index.js diff --git a/projects/powpeg/index.js b/projects/powpeg/index.js new file mode 100644 index 0000000000..e15c669a63 --- /dev/null +++ b/projects/powpeg/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') + +module.exports = { + rsk: { + // Powpeg (flyover) fast mod protocol + tvl: sumTokensExport({ owner: '0xAa9caf1e3967600578727f975F283446a3dA6612', tokens: [nullAddress] }) + } +} \ No newline at end of file From 8e48cc92a02aa4a6f3d1f0a2077bdb6ef39898dd Mon Sep 17 00:00:00 2001 From: chainupk <121842069+chainupk@users.noreply.github.com> Date: Sat, 16 Nov 2024 12:19:51 +0700 Subject: [PATCH 1083/1768] updated obelisk address book (#12318) Co-authored-by: zhenhao goh Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/bitcoin-book/obelisk.js | 6 ++++-- projects/obelisk/index.js | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/helper/bitcoin-book/obelisk.js b/projects/helper/bitcoin-book/obelisk.js index 9931c8410b..498c99a2f5 100644 --- a/projects/helper/bitcoin-book/obelisk.js +++ b/projects/helper/bitcoin-book/obelisk.js @@ -1,7 +1,9 @@ module.exports = [ 'bc1p0tr3dgulgpx43dkktjxy8z2azz6yvx4j7s0lelj67tlwct0wnqtqeakfer', '14ejzLtUSMsjZE8Pp2LUhX3Pf7BbXPeZyP', - 'bc1q0hapsvdtqfeyw9fjacey9350k8zu552p0khyhj', 'bc1pr6pga0d44xm3t8z36qnya6sfznsm8fwkn507x6gqt86xtnvm4h4sj2zqus', - 'bc1qy4pkldj4dqxtqypz6awwj7y8vahkht8uqhdlw3' + 'bc1qy4pkldj4dqxtqypz6awwj7y8vahkht8uqhdlw3', + 'bc1qyd4g2r0n0p9u775z7062rz8j88xxy27kmmh5aj', + '155FvRapVDRbFYxaxGxJ9eCQjgr7X2yC6g', + 'bc1qjnhtrjgr4y0new266twr6x6703lshszuey8zwm' ] \ No newline at end of file diff --git a/projects/obelisk/index.js b/projects/obelisk/index.js index 6fdb6eace7..c1788b0cbb 100644 --- a/projects/obelisk/index.js +++ b/projects/obelisk/index.js @@ -1,5 +1,6 @@ const { sumTokens } = require('../helper/chain/bitcoin') const sdk = require('@defillama/sdk') + const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const abi = { From eb49e321ffdc74ab358100264e2b60f144d7d680 Mon Sep 17 00:00:00 2001 From: bifkn <25141495+DJHellscream@users.noreply.github.com> Date: Fri, 15 Nov 2024 21:20:01 -0800 Subject: [PATCH 1084/1768] Update factory addresses to new versions (#12319) --- projects/apexdefi/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/apexdefi/index.js b/projects/apexdefi/index.js index f55ec47840..1437fcac87 100644 --- a/projects/apexdefi/index.js +++ b/projects/apexdefi/index.js @@ -2,8 +2,8 @@ const { staking } = require('../helper/staking') const ADDRESSES = require('../helper/coreAssets.json'); const config = { - avax: { factory: "0x3D193de151F8e4e3cE1C4CB2977F806663106A87", wrapperFactory: '0x39aB4aabAd7656f94E32ebD90547C3c4a183f4B4' }, - base: { factory: "0x4ccf7aa5736c5e8b6da5234d1014b5019f50cb56", wrapperFactory: '0xc9fbf1e865eeababe92d47ddb11d580f37ce4e00' }, + avax: { factory: "0x754A0c42C35562eE7a41eb824d14bc1259820f01", wrapperFactory: '0x39aB4aabAd7656f94E32ebD90547C3c4a183f4B4' }, + base: { factory: "0x10d11Eb1d5aB87E65518458F990311480b321061", wrapperFactory: '0xc9fbf1e865eeababe92d47ddb11d580f37ce4e00' }, ethereum: { factory: "0x820c889D5749847217599B43ab86FcC91781019f", }, } From 1dc2433a86afedd2fd95aa67ee39b2c7951d7be6 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Sat, 16 Nov 2024 01:33:31 -0700 Subject: [PATCH 1085/1768] Avalon Labs: add new TVL data, new sub-protocol: USDaLend (#12302) --- projects/avalon-finance-usdalend/index.js | 14 ++++++++++++++ projects/avalon-finance/index.js | 20 +++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 projects/avalon-finance-usdalend/index.js diff --git a/projects/avalon-finance-usdalend/index.js b/projects/avalon-finance-usdalend/index.js new file mode 100644 index 0000000000..1807c42393 --- /dev/null +++ b/projects/avalon-finance-usdalend/index.js @@ -0,0 +1,14 @@ + +const { aaveExports } = require('../helper/aave') +const methodologies = require('../helper/methodologies') +const { mergeExports } = require('../helper/utils') + +//@note Main & Innovative Markets +const mainMarket = { + iotex: aaveExports('', '', undefined, ['0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'], { v3: true }),} + +module.exports = mergeExports( + mainMarket, +) + +module.exports.methodology = methodologies.lendingMarket diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index f7a293d4fc..949e1b2397 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -11,6 +11,7 @@ const mainMarket = { iotex: aaveExports('', '', undefined, ['0xBa77520d38953BF6a8395D118CfF714Ed672533f'], { v3: true }), bsquared: aaveExports('', '', undefined, ['0x4Ea93E846b8C6E7b3D5a5BEDF4fe6B8AED58FCEe'], { v3: true }), taiko: aaveExports('', '', undefined, ['0xF6Aa54a5b60c324602C9359E8221423793e5205d'], { v3: true }), + mode: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), } const innovativeMarket = { @@ -36,6 +37,7 @@ const unibtcMarkets = { merlin: aaveExports('', '0x0024818043D04B1Cc9685233D47eF7eea6Df0A5E', undefined, ['0x623700Fee1dF64088f258e2c4DAB4D6aEac4dDA6'], { v3: true }), btr: aaveExports('', '', undefined, ['0x898D0EF6E20B7597728AEB41169c22608Fe4b234'], { v3: true }), bsc: aaveExports('', '', undefined, ['0xF828A73cB00072843241C6294ed778F26854fe5C'], { v3: true }), + mode: aaveExports('', '', undefined, ['0x8F016F5dac399F20B34E35CBaF1dFf12eeE2dE74'], { v3: true }), } const stbtcMarkets = { @@ -50,7 +52,23 @@ const otherProtocolTokenMarkets = { bsc: aaveExports('', '', undefined, ['0xA34F1a928024E3609C8968fEA90C747e8D1fA20f'], { v3: true }), } +const obtcMarkets = { + core: aaveExports('', '', undefined, ['0x5c78EbB34cC5b52146D107365A66E37a677Fcf50'], { v3: true }), +} + +const ubtcMarkets = { + core: aaveExports('', '', undefined, ['0x2752237ccC6aB5e4B9e9BFca57D7a6956aF4FE3d'], { v3: true }), +} + +const xaumMarkets = { + bsc: aaveExports('', '', undefined, ['0x2c4aEB7C9f0D196a51136B3c7bec49cB2DBD1966'], { v3: true }), +} + +const lbtcMarkets = { + bsc: aaveExports('', '', undefined, ['0x5b9b3C211B81627Cc6b46824CB26829F31A587dc'], { v3: true }), +} + module.exports = mergeExports( - mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets + mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets ) module.exports.methodology = methodologies.lendingMarket From 2c07de08d18d5879b2e62f295d3455c0ff0a15b8 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 16 Nov 2024 17:24:14 +0000 Subject: [PATCH 1086/1768] remove duplicate entry --- projects/helper/tokenMapping.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 1605e6b1db..981d7ab3af 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -182,9 +182,6 @@ const fixBalancesTokens = { shido: { '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: 'shido', decimals: 18 }, '0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd': { coingeckoId: 'usd-coin', decimals: 6 }, - }, - solana: { - 'AZsHEMXd36Bj1EMNXhowJajpUXzrKcK57wW4ZGXVa7yR': { coingeckoId: 'guacamole', decimals: 5 } } } From 396ae074f3dd5cf3109cbbec1419be3992dadaf3 Mon Sep 17 00:00:00 2001 From: callylab520 <124106736+callylab520@users.noreply.github.com> Date: Sun, 17 Nov 2024 19:29:33 +0000 Subject: [PATCH 1087/1768] [ADD]: reddex dex (#12320) Co-authored-by: sceptre520 Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 5 ++++- projects/reddex/index.js | 7 +++++++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 projects/reddex/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index ede3c645a8..0ef1a0a40b 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -269,6 +269,7 @@ "radixdlt", "rari", "real", + "rbn", "reef", "regen", "rei", diff --git a/projects/helper/env.js b/projects/helper/env.js index 2c906eb4eb..8c24dd6cb2 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -28,6 +28,7 @@ const DEFAULTS = { APECHAIN_RPC: "https://rpc.apechain.com", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", UNIT0_RPC: "https://rpc.unit0.dev", + RBN_RPC: "https://governors.mainnet.redbelly.network", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 981d7ab3af..afeae9679c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -179,10 +179,13 @@ const fixBalancesTokens = { unit0: { '0xcf43f7703d9b4e8835f977ef364b4014fa7e856e': { coingeckoId: 'unit0', decimals: 18 }, }, + rbn: { + '0x6ed1f491e2d31536d6561f6bdb2adc8f092a6076': { coingeckoId: 'redbelly-network-token', decimals: 18 }, + }, shido: { '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: 'shido', decimals: 18 }, '0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd': { coingeckoId: 'usd-coin', decimals: 6 }, - } + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/reddex/index.js b/projects/reddex/index.js new file mode 100644 index 0000000000..19ad1e6c34 --- /dev/null +++ b/projects/reddex/index.js @@ -0,0 +1,7 @@ +const { uniTvlExports } = require('../helper/unknownTokens') + +module.exports = uniTvlExports({ + ethereum: '0xBC7D212939FBe696e514226F3FAfA3697B96Bf59', + bsc: '0x6D642253B6fD96d9D155279b57B8039675E49D8e', + rbn: '0x2E592dF6c56a8720E46bB00D17f8FaB391BF97c8', +}) From d70e4280be57d758a923c7142e2c23c15fd28ea5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 18 Nov 2024 07:01:16 +0100 Subject: [PATCH 1088/1768] migrate token mappings to server --- projects/helper/coreAssets.json | 88 ++++++++++++++++++- projects/helper/tokenMapping.js | 144 -------------------------------- 2 files changed, 86 insertions(+), 146 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index f8ae15caef..8201ef6787 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1044,7 +1044,9 @@ "USDC": "0x368433cac2a0b8d76e64681a9835502a1f2a8a30", "WETH": "0xaa1c53afd099e415208f47fcfa2c880f659e6904", "USDT": "0x28c9c7fb3fe3104d2116af26cc8ef7905547349c", - "WBTC": "0x2a4dc2e946b92ab4a1f7d62844eb237788f9056c" + "WBTC": "0x2a4dc2e946b92ab4a1f7d62844eb237788f9056c", + "ETH": "0xaa1c53afd099e415208f47fcfa2c880f659e6904", + "BTC": "0x2a4dc2e946b92ab4a1f7d62844eb237788f9056c" }, "vision": { "USDT": "0x1db6cdc620388a0b6046b20cd59503a0839adcff", @@ -1834,7 +1836,9 @@ "lac": { "LAC": "0x2911a1ab18546cb501628be8625c7503a2a7db54", "WETH": "0x42c8c9c0f0a98720dacdaeac0c319cb272b00d7e", - "WBTC": "0xf54b8cb8eeee3823a55dddf5540ceaddf9724626" + "WBTC": "0xf54b8cb8eeee3823a55dddf5540ceaddf9724626", + "USDT": "0x7dc8b9e3b083c26c68f0b124ca923aaec7fbee39", + "USDC": "0x51115241c7b8361eee88d8610f71d0a92cee5323" }, "bob": { "WETH": "0x4200000000000000000000000000000000000006", @@ -1964,5 +1968,85 @@ }, "bitkub": { "KKUB": "0x67ebd850304c70d983b2d1b93ea79c7cd6c3f6b5" + }, + "shape": { + "WETH": "0x4200000000000000000000000000000000000006", + "WETH_1": "0x48A9B22b80F566E88f0f1DcC90Ea15A8A3bAE8a4" + }, + "hela": { + "hUSDC": "0xf5b85320a772b436cb8105441a3db9ba29437b4a", + "hUSDT": "0xd3442073fa7ccf8a7c39d95dc125cd59497aa078", + "WHLUSD": "0x3a035615e101373fa9ba21c5bea7fe4026fc40b4" + }, + "lisk": { + "USDT": "0x05d032ac25d322df992303dca074ee7392c117b9", + "WETH": "0x4200000000000000000000000000000000000006", + "LSK": "0xac485391eb2d7d88253a7f1ef18c37f4242d1a24" + }, + "flow": { + "WFLOW": "0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e", + "ankrFLOWEVM": "0x1b97100eA1D7126C4d60027e231EA4CB25314bdb", + "USDC_e": "0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52" + }, + "matchain": { + "WBNB": "0x4200000000000000000000000000000000000006" + }, + "fuel": { + "USDC": "0x286c479da40dc953bddc3bb4c453b608bba2e0ac483b077bd475174115395e6b", + "ETH": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "USDT": "0xa0265fb5c32f6e8db3197af3c7eb05c48ae373605b8165b6f4a51c5b0ba4812e", + "sDAI": "0x9e46f919fbf978f3cad7cd34cca982d5613af63ff8aab6c379e4faa179552958", + "mBTC": "0xaf3111a248ff7a3238cdeea845bb2d43cf3835f1f6b8c9d28360728b55b9ce5b", + "METH": "0xafd219f513317b1750783c6581f55530d6cf189a5863fd18bd1b3ffcec1714b4", + "RZETH": "0x91b3559edb2619cde8ffb2aa7b3c3be97efd794ea46700db7092abeee62281b0" + }, + "wc": { + "USDC_e": "0x79A02482A880bCE3F13e09Da970dC34db4CD24d1", + "WLD": "0x2cFc85d8E48F8EAB294be644d9E25C3030863003", + "WBTC": "0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3", + "WETH": "0x4200000000000000000000000000000000000006" + }, + "apechain": { + "WAPE": "0x48b62137EdfA95a428D35C09E44256a739F6B557", + "sDAI": "0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4", + "ApeETH": "0xcF800F4948D16F23333508191B1B1591daF70438" + }, + "zircuit": { + "WETH": "0x4200000000000000000000000000000000000006" + }, + "hedera": { + "XSAUCE": "0x00000000000000000000000000000000001647e8", + "USDC": "0x000000000000000000000000000000000006f89a", + "KARATE": "0x000000000000000000000000000000000022d6de", + "HBARX": "0x00000000000000000000000000000000000cba44", + "SAUCE": "0x00000000000000000000000000000000000b2ad5", + "WHBAR": "0x0000000000000000000000000000000000163b5a", + "DOVU": "0x000000000000000000000000000000000038b3db", + "HLQT": "0x00000000000000000000000000000000005c9f70", + "HST": "0x00000000000000000000000000000000000ec585", + "PACK": "0x0000000000000000000000000000000000492a28", + "STEAM": "0x000000000000000000000000000000000030fb8b" + }, + "morph": { + "WETH": "0x5300000000000000000000000000000000000011", + "USDT": "0xc7d67a9cbb121b3b0b9c053dd9f469523243379a", + "WBTC": "0x803dce4d3f4ae2e17af6c51343040dee320c149d" + }, + "eclipse": { + "ETH": "So11111111111111111111111111111111111111112", + "ETH_1": "9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP", + "SOL": "BeRUj3h7BqkbdfFU7FBNYbodgf8GCHodzKvF9aVjNNfL", + "USDC": "AKEWE7Bgh87GPp171b4cJPSSZfmZwQ3KaqYqXoKLNAEE", + "WIF": "841P4tebEgNux2jaWSjCoi9LhrVr9eHGjLc758Va3RPH" + }, + "unit0": { + "UNIT": "0xcf43f7703d9b4e8835f977ef364b4014fa7e856e" + }, + "rbn": { + "WRBNT": "0x6ed1f491e2d31536d6561f6bdb2adc8f092a6076" + }, + "shido": { + "WSHIDO": "0x8cbaffd9b658997e7bf87e98febf6ea6917166f7", + "USDC": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index afeae9679c..c588acff7a 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -42,150 +42,6 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, - stellar: { - "CDTKPWPLOURQA2SGTKTUQOWRCBZEORB4BWBOMJ3D3ZTQQSGE5F6JBQLV": { coingeckoId: "euro-coin", decimals: 7 }, - "CAUIKL3IYGMERDRUN6YSCLWVAKIFG5Q4YJHUKM4S4NJZQIA3BAS6OJPK": { coingeckoId: "aquarius", decimals: 7 }, - - }, - shape: { - [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, - '0x48A9B22b80F566E88f0f1DcC90Ea15A8A3bAE8a4': { coingeckoId: 'ethereum', decimals: 18 }, - }, - hela: { - '0xf5b85320a772b436cb8105441a3db9ba29437b4a': { coingeckoId: "usd-coin", decimals: 6 }, - '0xd3442073fa7ccf8a7c39d95dc125cd59497aa078': { coingeckoId: "tether", decimals: 6 }, - '0x3a035615e101373fa9ba21c5bea7fe4026fc40b4': { coingeckoId: "hela-usd", decimals: 18 }, - }, - heco: { - [ADDRESSES.heco.WHT]: { coingeckoId: 'huobi-token', decimals: 18 }, - }, - base: { - [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, - '0x0a27e060c0406f8ab7b64e3bee036a37e5a62853': { coingeckoId: 'zai-stablecoin', decimals: 18 }, - '0xc26c9099bd3789107888c35bb41178079b282561': { coingeckoId: 'solv-protocol-solvbtc-bbn', decimals: 18 }, - }, - op_bnb: { - [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, - }, - lac: { - [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, - [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, - '0x7dc8b9e3b083c26c68f0b124ca923aaec7fbee39': { coingeckoId: 'tether', decimals: 6 }, - '0x51115241c7b8361eee88d8610f71d0a92cee5323': { coingeckoId: 'usd-coin', decimals: 6 }, - }, - lisk: { - [ADDRESSES.bob.USDT]: { coingeckoId: 'tether', decimals: 6 }, - [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, - '0xac485391eb2d7d88253a7f1ef18c37f4242d1a24': { coingeckoId: 'lisk', decimals: 18 }, - }, - bob: { - [ADDRESSES.bob.SolvBTC]: { coingeckoId: "solv-btc", decimals: 18 }, - [ADDRESSES.bob.SolvBTC_BBN]: { coingeckoId: "solv-protocol-solvbtc-bbn", decimals: 18 }, - [ADDRESSES.bob.uniBTC]: { coingeckoId: "universal-btc", decimals: 8 } - }, - flow: { - '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e': { coingeckoId: 'flow', decimals: 18 }, - '0x1b97100eA1D7126C4d60027e231EA4CB25314bdb': { coingeckoId: 'ankr-staked-flow', decimals: 18 }, - [ADDRESSES.milkomeda.BNB]: { coingeckoId: 'usd-coin', decimals: 6 }, - }, - core: { - '0x782e2b85fda9a8224c17b191fc5de1e085a962b2': { coingeckoId: "wrapped-bitcoin-universal", decimals: 18 }, - }, - matchain: { - [ADDRESSES.null]: { coingeckoId: 'binancecoin', decimals: 18 }, - [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'binancecoin', decimals: 18 }, - }, - rollux: { - '0x570baA32dB74279a50491E88D712C957F4C9E409': { coingeckoId: 'uno-re', decimals: 18 }, - [ADDRESSES.rollux.WETH]: { coingeckoId: 'weth', decimals: 18 }, - [ADDRESSES.rollux.WBTC]: { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, - }, - taiko: { - [ADDRESSES.taiko.LRC]: { coingeckoId: "loopring", decimals: 18 }, - }, - bitkub: { - [ADDRESSES.bitkub.KKUB]: { coingeckoId: 'bitkub-coin', decimals: 18 }, - }, - fuel: { - // https://docs.fuel.network/docs/verified-addresses/assets/ - '0x286c479da40dc953bddc3bb4c453b608bba2e0ac483b077bd475174115395e6b': { coingeckoId: 'usd-coin', decimals: 6 }, - '0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07': { coingeckoId: 'ethereum', decimals: 9 }, - '0xa0265fb5c32f6e8db3197af3c7eb05c48ae373605b8165b6f4a51c5b0ba4812e': { coingeckoId: 'tether', decimals: 6 }, - '0x9e46f919fbf978f3cad7cd34cca982d5613af63ff8aab6c379e4faa179552958': { coingeckoId: 'savings-dai', decimals: 9 }, - '0xaf3111a248ff7a3238cdeea845bb2d43cf3835f1f6b8c9d28360728b55b9ce5b': { coingeckoId: 'manta-mbtc', decimals: 9 }, - '0xafd219f513317b1750783c6581f55530d6cf189a5863fd18bd1b3ffcec1714b4': { coingeckoId: 'manta-meth', decimals: 9 }, - '0x91b3559edb2619cde8ffb2aa7b3c3be97efd794ea46700db7092abeee62281b0': { coingeckoId: 'renzo-restaked-eth', decimals: 9 }, - }, - wc: { - '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1': { coingeckoId: 'usd-coin', decimals: 6 }, - '0x2cFc85d8E48F8EAB294be644d9E25C3030863003': { coingeckoId: 'worldcoin-wld', decimals: 18 }, - [ADDRESSES.bob.WBTC]: { coingeckoId: 'bitcoin', decimals: 8 }, - [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'weth', decimals: 18 } - }, - apechain: { - '0x48b62137EdfA95a428D35C09E44256a739F6B557': { coingeckoId: 'apecoin', decimals: 18 }, - '0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4': { coingeckoId: 'savings-dai', decimals: 18 }, - '0xcF800F4948D16F23333508191B1B1591daF70438': { coingeckoId: 'staked-ether', decimals: 18 }, - }, - zircuit: { - [ADDRESSES.optimism.WETH_1]: { coingeckoId: 'ethereum', decimals: 18 }, - }, - bsquared: { - '0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3': { coingeckoId: 'lorenzo-stbtc', decimals: 18 } - }, - hedera: { - '0x00000000000000000000000000000000001647e8': { coingeckoId: 'xsauce', decimals: 6 }, - '0x000000000000000000000000000000000006f89a': { coingeckoId: 'usd-coin', decimals: 6 }, - '0x000000000000000000000000000000000022d6de': { coingeckoId: 'karate-combat', decimals: 8 }, - '0x00000000000000000000000000000000000cba44': { coingeckoId: 'hbarx', decimals: 8 }, - '0x00000000000000000000000000000000000b2ad5': { coingeckoId: 'saucerswap', decimals: 6 }, - '0x0000000000000000000000000000000000000000': { coingeckoId: 'hedera-hashgraph', decimals: 18 }, - '0x0000000000000000000000000000000000163b5a': { coingeckoId: 'hedera-hashgraph', decimals: 8 }, - '0x000000000000000000000000000000000038b3db': { coingeckoId: 'dovu-2', decimals: 8 }, - '0x00000000000000000000000000000000005c9f70': { coingeckoId: 'hedera-liquity', decimals: 8 }, - '0x00000000000000000000000000000000000ec585': { coingeckoId: 'headstarter', decimals: 8 }, - '0x0000000000000000000000000000000000492a28': { coingeckoId: 'hashpack', decimals: 6 }, - '0x000000000000000000000000000000000030fb8b': { coingeckoId: 'steam', decimals: 2 }, - }, - morph: { - '0x5300000000000000000000000000000000000011': { coingeckoId: 'ethereum', decimals: 18 }, - '0xc7d67a9cbb121b3b0b9c053dd9f469523243379a': { coingeckoId: 'tether', decimals: 6 }, - '0x803dce4d3f4ae2e17af6c51343040dee320c149d': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, - }, - btr: { - '0xC39E757dCb2b17B79A411eA1C2810735dc9032F8': { coingeckoId: 'solv-protocol-solvbtc', decimals: 18 }, - }, - iotex: { - '0x236f8c0a61da474db21b693fb2ea7aab0c803894': { coingeckoId: 'iotex', decimals: 18 }, - }, - mantle: { - '0x93919784C523f39CACaa98Ee0a9d96c3F32b593e': { coingeckoId: 'universal-btc', decimals: 18 }, - '0xC75D7767F2EdFbc6a5b18Fc1fA5d51ffB57c2B37': { coingeckoId: 'pumpbtc', decimals: 18 }, - '0xCAbAE6f6Ea1ecaB08Ad02fE02ce9A44F09aebfA2': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, - }, - bsc: { - '0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a': { coingeckoId: 'universal-btc', decimals: 8 }, - }, - arbitrum: { - '0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a': { coingeckoId: 'universal-btc', decimals: 8 }, - }, - eclipse: { - 'So11111111111111111111111111111111111111112': { coingeckoId: 'ethereum', decimals: 9 }, - '9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP': { coingeckoId: 'ethereum', decimals: 9 }, - 'BeRUj3h7BqkbdfFU7FBNYbodgf8GCHodzKvF9aVjNNfL': { coingeckoId: 'solana', decimals: 9 }, - 'AKEWE7Bgh87GPp171b4cJPSSZfmZwQ3KaqYqXoKLNAEE': { coingeckoId: 'usd-coin', decimals: 6 }, - '841P4tebEgNux2jaWSjCoi9LhrVr9eHGjLc758Va3RPH': { coingeckoId: 'dogwifcoin', decimals: 6 }, - }, - unit0: { - '0xcf43f7703d9b4e8835f977ef364b4014fa7e856e': { coingeckoId: 'unit0', decimals: 18 }, - }, - rbn: { - '0x6ed1f491e2d31536d6561f6bdb2adc8f092a6076': { coingeckoId: 'redbelly-network-token', decimals: 18 }, - }, - shido: { - '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: 'shido', decimals: 18 }, - '0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd': { coingeckoId: 'usd-coin', decimals: 6 }, - }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 826fdce367c50553add4bc5f09c48a1a3991c7b2 Mon Sep 17 00:00:00 2001 From: Andrija Sagi Date: Mon, 18 Nov 2024 07:03:52 +0100 Subject: [PATCH 1089/1768] Adding SRWAio (#12323) --- projects/SRWAio/index.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/SRWAio/index.js diff --git a/projects/SRWAio/index.js b/projects/SRWAio/index.js new file mode 100644 index 0000000000..a1ed193b07 --- /dev/null +++ b/projects/SRWAio/index.js @@ -0,0 +1,31 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const { queryAddresses, sumTokens } = require('../helper/chain/radixdlt'); + +const componentAddress = 'component_rdx1cps7jyr7vqrtm2uxj8d77a9fyjkv804nhqzvfn2u7m58tg3wdk2qky' + +const resources = [ + { + address: ADDRESSES.radixdlt.XRD, + }, + { + address: 'resource_rdx1t4upr78guuapv5ept7d7ptekk9mqhy605zgms33mcszen8l9fac8vf', + } +] + +async function tvl(api) { + return sumTokens({ api, owners: [componentAddress] }); +} + +async function borrowed(api) { + const componentData = await queryAddresses({ addresses: [componentAddress] }); + resources.forEach((resource) => { + const matchingEntry = componentData[0].details.state.fields[12]?.entries.find((entry) => entry.key.value === resource.address); + api.add(matchingEntry.key.value, Number(matchingEntry.value.value)); + }); +} + +module.exports = { + radixdlt: { tvl, borrowed }, + timetravel: false, +}; \ No newline at end of file From 3d04086801254f105659e852cdf1350d998fc67e Mon Sep 17 00:00:00 2001 From: tonfarmix <164873385+tonfarmix@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:18:00 +0300 Subject: [PATCH 1090/1768] Farmix (https://farmix.tg) project listing (#12322) Co-authored-by: Maktd Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/farmix/index.js | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 projects/farmix/index.js diff --git a/projects/farmix/index.js b/projects/farmix/index.js new file mode 100644 index 0000000000..559b765ffe --- /dev/null +++ b/projects/farmix/index.js @@ -0,0 +1,54 @@ +const { sleep } = require('../helper/utils') +const { call } = require('../helper/chain/ton'); +const plimit = require("p-limit"); +const ADDRESSES = require('../helper/coreAssets.json'); + +const _rateLimited = plimit(1) +const rateLimited = fn => (...args) => _rateLimited(() => fn(...args)) +const getPoolJettonsRateLimited = rateLimited(getPoolCurrentJettons); + + +const POOLS = [ + 'EQC-jlX83DYZgSWRW5q_XuHLWWFQPp2xGmc8BCoeWckKpeHs', + 'EQD6gQSWCayHh0FvUnTXlpfizIWiq7UeE4gYvXGYtEhIYJ8q', + 'EQCE_6TevKEpj8OTz3rZt1D5bR6fENQbSN2bbW0jzxbWGGIo', +] + +const UNDERLYING_JETTONS = [ + ADDRESSES.ton.TON, + ADDRESSES.ton.USDT, + ADDRESSES.ton.NOT, +] + + +async function getPoolCurrentJettons(api, poolAddr, underlyingJettonAddr, isBorrowed) { + const result = await call({ + target: poolAddr, + abi: 'get_expected_state', + params: [['num', 0]] + }); + await sleep(1000 * (2 * Math.random() + 3)); + const jettonCurrentAmount = isBorrowed ? result[6] : result[5]; + api.add(underlyingJettonAddr, jettonCurrentAmount); +} + +async function tvl(api) { + await Promise.all(POOLS.map(async (poolAddr, i) => { + return getPoolJettonsRateLimited(api, poolAddr, UNDERLYING_JETTONS[i]); + })) +} + +async function borrowed(api) { + await Promise.all(POOLS.map(async (poolAddr, i) => { + return getPoolJettonsRateLimited(api, poolAddr, UNDERLYING_JETTONS[i], true); + })) +} + +module.exports = { + methodology: 'TVL is counted only as current available pool liquidity. Borrowed jettons not included in the tvl', + timetravel: false, + ton: { + tvl, + borrowed, + } +} \ No newline at end of file From 204954024f93dad25e6b8aedfd39a53c4a8b7a8b Mon Sep 17 00:00:00 2001 From: hyphin Date: Mon, 18 Nov 2024 08:18:18 +0200 Subject: [PATCH 1091/1768] [ADD] SuperSwap V2 & V3 (#12321) --- projects/superswap-v2/index.js | 13 +++++++++++++ projects/superswap-v3/index.js | 8 ++++++++ 2 files changed, 21 insertions(+) create mode 100644 projects/superswap-v2/index.js create mode 100644 projects/superswap-v3/index.js diff --git a/projects/superswap-v2/index.js b/projects/superswap-v2/index.js new file mode 100644 index 0000000000..eea758e2d4 --- /dev/null +++ b/projects/superswap-v2/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require("../helper/unknownTokens") +const FACTORY = "0x22505cb4d5d10b2c848a9d75c57ea72a66066d8c" + +const dexTVL = getUniTVL({ factory: FACTORY, useDefaultCoreAssets: true, permitFailure: true }) + + +module.exports = { + misrepresentedTokens: true, + methodology: `Uses factory(${FACTORY}) address and whitelisted tokens address to find and price Liquidity Pool pairs.`, + optimism: { + tvl: dexTVL, + } +}; diff --git a/projects/superswap-v3/index.js b/projects/superswap-v3/index.js new file mode 100644 index 0000000000..b523c956f7 --- /dev/null +++ b/projects/superswap-v3/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3") + +module.exports = { + methodology: "TVL accounts for the liquidity on all AMM pools taken from the factory contract", + ...uniV3Export({ + optimism: { factory: "0xe52a36Bb76e8f40e1117db5Ff14Bd1f7b058B720", fromBlock: 124982239 }, + }) +} From 856aace883f96690ff3af4043823ac0ee72bd271 Mon Sep 17 00:00:00 2001 From: Tommy Kang Date: Mon, 18 Nov 2024 18:30:37 +0900 Subject: [PATCH 1092/1768] fragmetric: support BNSOL (#12325) --- projects/fragmetric/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/fragmetric/index.js b/projects/fragmetric/index.js index 78804daa9e..462f79a038 100644 --- a/projects/fragmetric/index.js +++ b/projects/fragmetric/index.js @@ -6,9 +6,11 @@ async function tvl() { "4b3xtGBwmP9FQyQ85HDmyEtQrLdoVzz6NBwBjaRBzJuS", "BXUyJdESgoyssvATKa3omD7zHtdeztpWnG13mDUQ6fcM", "B2vjfDaLsaJ32ESoFsVf7NPS2hd5f4QisiPLiXBrS1BK", + "7rtyMjMKPrmKfciayvxaZdKiY9D7Rx9o3JtW3QvsUnsc", "HSKvv9UFCn4c6Jq3j8iiJfFgXFjRE6dr6QhWX2KD8gGU", "3KdpoeWuwaXLuukf56p8e1FtDKjY8pCmtZdmZejUctwP", "9grKYUmguSLVC9RHW1xKcLpiAphJrmcDkTVTCg9ebpFz", + "EbMiibdEBswBKxATPtYEiaRcx7uzJvyWvexVzUJ6iyje", ], solOwners: [ "3H22A3T3CMyoGzAURZ4szV5Hmt64Dooo5g9Ns8h1kYy7", From 2f94e0fd5505ee578375bb152f8f6723c8ed7b9a Mon Sep 17 00:00:00 2001 From: Cian <96416801+NatureLab@users.noreply.github.com> Date: Mon, 18 Nov 2024 20:12:31 +0800 Subject: [PATCH 1093/1768] Add cian-yl. (#12326) --- projects/cian-yl/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/cian-yl/index.js diff --git a/projects/cian-yl/index.js b/projects/cian-yl/index.js new file mode 100644 index 0000000000..0b9afbfc12 --- /dev/null +++ b/projects/cian-yl/index.js @@ -0,0 +1,25 @@ +// cian yield layer +const config = { + ethereum: [ + "0xB13aa2d0345b0439b064f26B82D8dCf3f508775d", + "0xd87a19fF681AE98BF10d2220D1AE3Fbd374ADE4e", + "0x9fdDAD44eD6b77e6777dC1b16ee4FCcCBaF0A019", + "0x6c77bdE03952BbcB923815d90A73a7eD7EC895D1", + "0xcc7E6dE27DdF225E24E8652F62101Dab4656E20A", + "0xd4Cc9b31e9eF33E392FF2f81AD52BE8523e0993b", + "0x3D086B688D7c0362BE4f9600d626f622792c4a20", + ], + arbitrum: ["0x15cbFF12d53e7BdE3f1618844CaaEf99b2836d2A"], +}; + +module.exports = { + doublecounted: true, +}; + +Object.keys(config).forEach((chain) => { + module.exports[chain] = { + tvl: async (_, _b, _cb, { api }) => { + return api.erc4626Sum({ calls: config[chain], isOG4626: true }); + }, + }; +}); From 657668128e6c3fcc8cfdecfd8777685575db409f Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 18 Nov 2024 14:14:01 +0100 Subject: [PATCH 1094/1768] Update: BUIDL (BlackRock RWA), more chains (#12330) --- projects/securitize/index.js | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/projects/securitize/index.js b/projects/securitize/index.js index 97790fae5b..7f0cbae78c 100644 --- a/projects/securitize/index.js +++ b/projects/securitize/index.js @@ -1,15 +1,13 @@ const ADDRESSES = require('../helper/coreAssets.json') -const BUIDL = "0x7712c34205737192402172409a8f7ccef8aa2aec" +const BUIDL = { + ethereum: '0x7712c34205737192402172409a8f7ccef8aa2aec', + polygon: '0x2893ef551b6dd69f661ac00f11d93e5dc5dc0e99', + avax: '0x53fc82f14f009009b440a706e31c9021e1196a2f', + optimism: '0xa1cdab15bba75a80df4089cafba013e376957cf5', + arbitrum: '0xa6525ae43edcd03dc08e775774dcabd3bb925872', +} -module.exports = { - ethereum: { - tvl: async (api) => { - const totalSupply = await api.call({ - target: BUIDL, - abi: 'erc20:totalSupply' - }) - return api.add(ADDRESSES.ethereum.USDC, totalSupply) - } - } -} \ No newline at end of file +Object.keys(BUIDL).forEach((chain) => { + module.exports[chain] = { tvl: async (api) => { api.add(ADDRESSES.ethereum.USDC, await api.call({ target: BUIDL[chain], abi: 'erc20:totalSupply' }), { skipChain: true }) } } +}) From 415dfa654c29852412feaa361c0589c5d906d6db Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 18 Nov 2024 14:15:55 +0100 Subject: [PATCH 1095/1768] Update: Franklin (RWA), more chains (#12331) --- projects/franklinTempleton-finance/index.js | 29 +++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/projects/franklinTempleton-finance/index.js b/projects/franklinTempleton-finance/index.js index bbbaf4b883..01f33d2aab 100644 --- a/projects/franklinTempleton-finance/index.js +++ b/projects/franklinTempleton-finance/index.js @@ -1,10 +1,15 @@ const { toUSDTBalances } = require('../helper/balances'); -const BENJI_STELLAR = {ticker: "BENJI", address: 'GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5'} -const BENJI_POLYGON = '0x408a634b8a8f0de729b48574a3a7ec3fe820b00a' +const BENJI = { + stellar: {ticker: "BENJI", address: 'GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5'}, + arbitrum: '0xb9e4765bce2609bc1949592059b17ea72fee6c6a', + polygon: '0x408a634b8a8f0de729b48574a3a7ec3fe820b00a', + avax: '0xe08b4c1005603427420e64252a8b120cace4d122', + base: '0x60cfc2b186a4cf647486e42c42b11cc6d571d1e4' +} const stellarTvl = async (api) => { - const stellarApi = `https://api.stellar.expert/explorer/public/asset/${BENJI_STELLAR.ticker}-${BENJI_STELLAR.address}` + const stellarApi = `https://api.stellar.expert/explorer/public/asset/${BENJI[api.chain].ticker}-${BENJI[api.chain].address}` const response = await fetch(stellarApi) const {supply, toml_info} = await response.json() const adjustedSupply = toUSDTBalances((supply / Math.pow(10, toml_info.decimals))) @@ -12,17 +17,19 @@ const stellarTvl = async (api) => { return api.add(tokenAddress, tokenBalance, { skipChain: true }) } -const polygonTvl = async (api) => { +const evmTVL = async (api) => { const [decimals, totalSupply] = await Promise.all([ - api.call({target: BENJI_POLYGON, abi:'erc20:decimals'}), - api.call({target: BENJI_POLYGON, abi:'erc20:totalSupply'}) + api.call({target: BENJI[api.chain], abi:'erc20:decimals'}), + api.call({target: BENJI[api.chain], abi:'erc20:totalSupply'}) ]) + const adjustedSupply = toUSDTBalances((totalSupply / Math.pow(10, decimals))) const [[tokenAddress, tokenBalance]] = Object.entries(adjustedSupply); - api.add(tokenAddress, tokenBalance, {skipChain: true} ) -} + api.add(tokenAddress, tokenBalance, { skipChain: true }) -module.exports = { - stellar: {tvl: stellarTvl}, - polygon: {tvl: polygonTvl}, } + +Object.keys(BENJI).forEach((chain) => { + module.exports[chain] = { tvl: chain === 'stellar' ? stellarTvl : evmTVL }; +}); + From 02bb75006820a6d7085da0f00fc1ccf31c67fa9b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 18 Nov 2024 14:15:03 +0000 Subject: [PATCH 1096/1768] pulsechain --- projects/pulsechain/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/pulsechain/index.js diff --git a/projects/pulsechain/index.js b/projects/pulsechain/index.js new file mode 100644 index 0000000000..133c1ce524 --- /dev/null +++ b/projects/pulsechain/index.js @@ -0,0 +1,13 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owner: '0x1715a3E4A142d8b698131108995174F37aEBA10D', + fetchCoValentTokens: true, + permitFailure: true + }), + }, +}; From 0a2ac6671c3ed9bbb1eca0352d564e0c390d4348 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 18 Nov 2024 14:33:48 +0000 Subject: [PATCH 1097/1768] Update Hedgehog-Markets support (#12315) Co-authored-by: jkdipeppe --- projects/hedgehog-markets/index.js | 118 ++++++++++++++++++----------- tsconfig.json | 2 +- 2 files changed, 74 insertions(+), 46 deletions(-) diff --git a/projects/hedgehog-markets/index.js b/projects/hedgehog-markets/index.js index a5ff4b4cc7..a700868ce5 100644 --- a/projects/hedgehog-markets/index.js +++ b/projects/hedgehog-markets/index.js @@ -1,37 +1,65 @@ - const { PublicKey } = require("@solana/web3.js"); -const { getProvider, sumTokens2, getConnection, decodeAccount, } = require("../helper/solana") -const { Program, } = require("@project-serum/anchor"); +const { getProvider, sumTokens2, getConnection, decodeAccount } = require("../helper/solana"); +const { Program } = require("@project-serum/anchor"); async function tvl(api) { - const provider = getProvider() - const connection = getConnection() - const tokenAccounts = [] - const owners = [] - await getClassicMarketTokenAccounts() - await addP2PBalances() - await addParlay() - await addParimutuel() - - const balances = api.getBalances() - await sumTokens2({ owners, balances, }) - return sumTokens2({ tokenAccounts, balances, }) + const provider = getProvider(); + const connection = getConnection(); + + const tokenAccounts = []; + const owners = []; + + await getClassicMarketTokenAccounts(); + await addP2PDepositTokenAccounts(); + await addP2PLuloBalances(); + await addParlay(); + await addParimutuel(); + + const balances = api.getBalances(); + + await sumTokens2({ owners, balances }); + + return sumTokens2({ tokenAccounts, balances }); async function getClassicMarketTokenAccounts() { + const classicMarketProgramId = "D8vMVKonxkbBtAXAxBwPPWyTfon8337ARJmHvwtsF98G"; + const idl = await Program.fetchIdl(classicMarketProgramId, provider); + + const program = new Program(idl, classicMarketProgramId, provider); + const markets = await program.account.market.all(); + const collateralAccounts = markets.map(({ account }) => account.marketCollateral); + tokenAccounts.push(...collateralAccounts); + } - const classicMarketProgramId = "D8vMVKonxkbBtAXAxBwPPWyTfon8337ARJmHvwtsF98G" - const idl = await Program.fetchIdl(classicMarketProgramId, provider) - const program = new Program(idl, classicMarketProgramId, provider) - const markets = await program.account.market.all() - const collateralAccounts = markets.map(({ account }) => account.marketCollateral) - tokenAccounts.push(...collateralAccounts) + async function addP2PDepositTokenAccounts() { + const programId = new PublicKey("P2PototC41acvjMc9cvAoRjFjtaRD5Keo9PvNJfRwf3"); + + const result = await connection.getProgramAccounts(programId, { + encoding: "base64", + // We only care about the market addresses. + dataSlice: { offset: 0, length: 0 }, + filters: [ + // Market accounts have a discriminator of 3 at offset 0. + { memcmp: { offset: 0, bytes: "4" } }, + ], + }); + + for (const { pubkey } of result) { + // Market deposit account. + const [deposit] = PublicKey.findProgramAddressSync( + [Buffer.from("deposit"), pubkey.toBuffer()], + programId, + ); + + tokenAccounts.push(deposit); + } } async function addParlay() { - const programId = new PublicKey('PLYaNRbQs9GWyVQdcLrzPvvZu7NH4W2sneyHcEimLr7') - const poolOwner = "8Y46GkrbUqXnbs6kPD6SWr44NjcKPEWYzvpAn8UB5duR" - owners.push(poolOwner) + const programId = new PublicKey("PLYaNRbQs9GWyVQdcLrzPvvZu7NH4W2sneyHcEimLr7"); + const poolOwner = "8Y46GkrbUqXnbs6kPD6SWr44NjcKPEWYzvpAn8UB5duR"; + owners.push(poolOwner); const accounts = await connection.getProgramAccounts(programId, { // We only care about: @@ -45,20 +73,20 @@ async function tvl(api) { // Open markets have a state of 0 at offset 149. { memcmp: { offset: 149, bytes: "1" } }, ], - }) + }); accounts.forEach(({ account }) => { - const data = decodeAccount('hhParlay', account) + const data = decodeAccount("hhParlay", account); - api.add(data.mint.toString(), Number(data.entryCount) * Number(data.entryCost)) - }) + api.add(data.mint.toString(), Number(data.entryCount) * Number(data.entryCost)); + }); } - async function addP2PBalances() { + async function addP2PLuloBalances() { // https://github.com/Hedgehog-Markets/hedgehog-program-library/blob/master/p2p/idl.json - const programId = new PublicKey('P2PzLraW8YF87BxqZTZ5kgrfvzcrKGPnqUBNhqmcV9B') - const poolOwner = "J9EH18EWSo8s69gouHGNy5zFHkhcHRbb9zBZXwSG4cHy" - owners.push(poolOwner) + const programId = new PublicKey("P2PzLraW8YF87BxqZTZ5kgrfvzcrKGPnqUBNhqmcV9B"); + const poolOwner = "J9EH18EWSo8s69gouHGNy5zFHkhcHRbb9zBZXwSG4cHy"; + owners.push(poolOwner); const accounts = await connection.getProgramAccounts(programId, { // We only care about: @@ -68,24 +96,24 @@ async function tvl(api) { dataSlice: { offset: 69, length: 56 }, filters: [ // Market accounts have a discriminator of 3 at offset 0. - { memcmp: { offset: 0, bytes: "4", } }, + { memcmp: { offset: 0, bytes: "4" } }, // Open markets have a state of 0 at offset 129. { memcmp: { offset: 129, bytes: "1" } }, ], }); accounts.forEach(({ account: { data } }) => { - const mint = new PublicKey(data.slice(0, 32)).toString() + const mint = new PublicKey(data.slice(0, 32)).toString(); const yesAmount = Number(data.readUInt8(40)); const noAmount = Number(data.readUInt8(48)); - api.add(mint, yesAmount + noAmount) - }) + api.add(mint, yesAmount + noAmount); + }); } async function addParimutuel() { - const programId = new PublicKey('PARrVs6F5egaNuz8g6pKJyU4ze3eX5xGZCFb3GLiVvu') - const poolOwner = "3SAUPiGiATqv8TBgvzSJqpLxLGF6LbJamvimueJQT7WT" - owners.push(poolOwner) + const programId = new PublicKey("PARrVs6F5egaNuz8g6pKJyU4ze3eX5xGZCFb3GLiVvu"); + const poolOwner = "3SAUPiGiATqv8TBgvzSJqpLxLGF6LbJamvimueJQT7WT"; + owners.push(poolOwner); const accounts = await connection.getProgramAccounts(programId, { filters: [ @@ -94,20 +122,20 @@ async function tvl(api) { // Open markets have a state of 0 at offset 149. { memcmp: { offset: 149, bytes: "1" } }, ], - }) + }); accounts.forEach(({ account: { data } }) => { - const token = new PublicKey(data.slice(69,69+ 32)).toString() + const token = new PublicKey(data.slice(69, 69 + 32)).toString(); // Amounts is a u64 array with u8 length prefix at offset 131. const amountsLen = data.readUint8(131); - let amounts = [] + let amounts = []; for (let i = 0; i < amountsLen; i++) { - amounts.push(data.readBigUint64LE(132 + i * 8).toString()) + amounts.push(data.readBigUint64LE(132 + i * 8).toString()); } - api.add(token, amounts) - }) + api.add(token, amounts); + }); } } diff --git a/tsconfig.json b/tsconfig.json index 97ad9508cb..682d025ac4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,4 +18,4 @@ "strictNullChecks": false, "typeRoots": ["./typings/", "./node_modules/@types/"] } -} +} \ No newline at end of file From e18d5e985013cf6df16724d0e0e260943efd87ec Mon Sep 17 00:00:00 2001 From: vokkantthakkar <51082769+vokkantthakkar@users.noreply.github.com> Date: Mon, 18 Nov 2024 20:06:15 +0530 Subject: [PATCH 1098/1768] add ezSOL to Renzo (#12334) --- projects/renzo/index.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/projects/renzo/index.js b/projects/renzo/index.js index 0cfc832366..4ba6f3fdcd 100644 --- a/projects/renzo/index.js +++ b/projects/renzo/index.js @@ -1,4 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require("../helper/solana"); const L1_EZ_ETH_ADDRESS = "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110"; const L2_EZ_ETH_ADDRESS = ADDRESSES.blast.ezETH; const L1_LOCKBOX_ADDRESS = "0xC8140dA31E6bCa19b287cC35531c2212763C2059"; @@ -19,15 +20,29 @@ async function ethTvl(api) { api.add(L1_PZ_ETH_ADDRESS, pzEthBalance); } +async function solanaTvl() { + return sumTokens2( + { + tokenAccounts: [ + "9VBi7unB9Sz5eBNUdvQH2xzUENXvNsaiEkP9p2Cabvsy" + ] + } + ) +} + const chains = ["mode", "blast", "bsc", "linea", "arbitrum", "base", "optimism", "fraxtal","zircuit","sei" ] module.exports = { doublecounted: true, ethereum: { - tvl: ethTvl, + tvl: ethTvl + }, + solana: { + tvl: solanaTvl } } chains.forEach(chain => { module.exports[chain] = { tvl: L2Tvl } }) + From 375619d504dc33a27ca4ab19aba7c11db57172e5 Mon Sep 17 00:00:00 2001 From: Krugo D <85778179+Krugo-D@users.noreply.github.com> Date: Mon, 18 Nov 2024 21:38:57 +0700 Subject: [PATCH 1099/1768] Add TVL tracking for Ocelex Fusion pools and Ocelex V1 pools to DefiLlama (#12332) --- projects/ocelex-v1/index.js | 6 ++++++ projects/ocelex/index.js | 9 +++++++++ 2 files changed, 15 insertions(+) create mode 100644 projects/ocelex-v1/index.js create mode 100644 projects/ocelex/index.js diff --git a/projects/ocelex-v1/index.js b/projects/ocelex-v1/index.js new file mode 100644 index 0000000000..a061c1757b --- /dev/null +++ b/projects/ocelex-v1/index.js @@ -0,0 +1,6 @@ +const { uniTvlExport } = require("../helper/unknownTokens"); + +module.exports = uniTvlExport("zircuit", "0xdd018347c29a27088eb2d0bf0637d9a05b30666c", { + hasStablePools: true, + useDefaultCoreAssets: true, +}); diff --git a/projects/ocelex/index.js b/projects/ocelex/index.js new file mode 100644 index 0000000000..01e0e7e3b4 --- /dev/null +++ b/projects/ocelex/index.js @@ -0,0 +1,9 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + zircuit: { + factory: "0x03057ae6294292b299a1863420edD65e0197AFEf", + fromBlock: 3709368, + isAlgebra: true, + }, +}) \ No newline at end of file From 75f10f8f100ff803fd2602d8b29a8e2937e814cc Mon Sep 17 00:00:00 2001 From: ratex-tony Date: Mon, 18 Nov 2024 22:39:48 +0800 Subject: [PATCH 1100/1768] use alt to get the address list (#12333) --- projects/rate-x/index.js | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/projects/rate-x/index.js b/projects/rate-x/index.js index a67599fa8b..b87ba3a325 100644 --- a/projects/rate-x/index.js +++ b/projects/rate-x/index.js @@ -1,22 +1,23 @@ const { sumTokens2 } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js"); +const { getConnection } = require("../helper/solana"); async function tvl(api) { + const connection = getConnection(); + const lookupTableAddress = new PublicKey("eP8LuPmLaF1wavSbaB4gbDAZ8vENqfWCL5KaJ2BRVyV"); + + const lookupTableAccount = ( + await connection.getAddressLookupTable(lookupTableAddress) + ).value; + + const tokenAccounts = [] + for (let i = 0; i < lookupTableAccount.state.addresses.length; i++) { + const address = lookupTableAccount.state.addresses[i]; + tokenAccounts.push(address.toBase58()); + } + return sumTokens2({ - tokenAccounts: [ - 'EmLhAPj7J6LTAnomsLfZUKDtb4t2A8e6eofDSfTwMgkY', - 'DY3Rw6BZwf6epvWnVo8DSV6kYptEdCh7HbYmFRpdPxuH', - '3CppdkMFxuz7ASS27pB35EDbwgfUhwrarFYuWDBWWwHB', - 'Grk7mshVug1TafphUvuYBrzwRqadtmCcf7GGPoPKkgs6', - 'BpYbhwDZGpPvcKw3cSh5f9UqRaHfuxgz3avW9g324LUz', - '4nyfJ4JBsRJLij7VGCVUeHwKSLAAku66ptJamoodY29L', - '6opMSfkHgWsvG5KmZo8y2DuShaDHwXfB6VUuTx6W4Age', - '4Ejjk5w7HAWvmXYT57s5uwn8rs7i61nbpcTRQ9ABB11M', - '4xq7VjrJCU2Smk5JcJToik5hiEJ8RCvECReePP8Jg6q8', - 'B2YeVM6Kf3SKYLuH2nfucCmZwy8KJcQpd9e9JEuwv9mt', - '8DeQth4AWPXauRfgAEUy9WpHuyKKyYuNNsH76C5v1Hv7', - 'FS7TTuJejy7zjkdJXD9BjeLFZ44ipxxr2qmMMUKMZv6y', - '6K8yrdpm2dVaLSLpqoRJKv7SNuP54xmbv5KULcJzKTHc' - ], + tokenAccounts, balances: api.getBalances() }) } From d073742f17c120abb05e51556494824e2d2f8e07 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:43:04 +0100 Subject: [PATCH 1101/1768] Fix: wrong values RocketPool (#12327) --- projects/rocketpool/abi.json | 13 --- projects/rocketpool/index.js | 200 ++++++++++------------------------- 2 files changed, 55 insertions(+), 158 deletions(-) delete mode 100644 projects/rocketpool/abi.json diff --git a/projects/rocketpool/abi.json b/projects/rocketpool/abi.json deleted file mode 100644 index e62ad39639..0000000000 --- a/projects/rocketpool/abi.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "rocketNodeStaking.getNodeEffectiveRPLStake": "function getNodeEffectiveRPLStake(address _nodeAddress) view returns (uint256)", - "rocketNodeStaking.getTotalRPLStake": "uint256:getTotalRPLStake", - "rocketNetworkBalances.getTotalETHBalance": "uint256:getTotalETHBalance", - "rocketMinipoolQueue.getTotalLength": "uint256:getTotalLength", - "rocketMinipoolQueue.getTotalCapacity": "uint256:getTotalCapacity", - "rocketDepositPool.getBalance": "uint256:getBalance", - "rocketMinipoolManager.getMinipoolCountPerStatus": "function getMinipoolCountPerStatus(uint256 offset, uint256 limit) view returns (uint256 initialisedCount, uint256 prelaunchCount, uint256 stakingCount, uint256 withdrawableCount, uint256 dissolvedCount)", - "rocketMinipoolManager.getActiveMinipoolCount": "uint256:getActiveMinipoolCount", - "rocketMinipoolManager.getStakingMinipoolCount": "uint256:getStakingMinipoolCount", - "rocketVault.balanceOfToken": "function balanceOfToken(string _networkContractName, address _tokenAddress) view returns (uint256)", - "rocketVault.balanceOf": "function balanceOf(string _networkContractName) view returns (uint256)" -} \ No newline at end of file diff --git a/projects/rocketpool/index.js b/projects/rocketpool/index.js index b62bdf1b73..32df6b962d 100644 --- a/projects/rocketpool/index.js +++ b/projects/rocketpool/index.js @@ -1,156 +1,66 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require("@defillama/sdk") -const abi = require('./abi.json') -const rocketMinipoolManager = '0x6293B8abC1F36aFB22406Be5f96D893072A8cF3a' +const ETH = ADDRESSES.null +const RPL = '0xd33526068d116ce69f19a9ee46f0bd304f21a51f' +const rocketNodeManager = '0x2b52479F6ea009907e46fc43e91064D1b92Fdc86' const rocketVault = '0x3bDC69C4E5e13E52A65f5583c23EFB9636b469d6' -const rocketNodeStaking_contract = '0x3019227b2b8493e45Bf5d25302139c9a2713BF15' - -const weth = ADDRESSES.ethereum.WETH -const rpl = '0xd33526068d116ce69f19a9ee46f0bd304f21a51f' - -async function tvl(timestamp, ethBlock, chainBlocks) { - // Get ETH staked for rETH, which is given by users and Node Operators - // Also get RPL staked by Node Operators to spin up a node - - // Get minipool count per status - let offset = 0 - const limit = 400, statusesCount = 5 - let minipool_count_per_status = new Array(statusesCount).fill(0); - while (true) { // eslint-disable-line - const {output: activeMinipoolCount} = await sdk.api.abi.call({ - target: rocketMinipoolManager, - params: [offset, limit], - abi: abi['rocketMinipoolManager.getMinipoolCountPerStatus'], - block: ethBlock, - chain: 'ethereum' - }) - const activeMinipoolCount_arr = [...Array(statusesCount).keys()].map(i => activeMinipoolCount[i.toString()]) - minipool_count_per_status = minipool_count_per_status.map((sum, idx) => sum + parseInt(activeMinipoolCount[idx])) - if (activeMinipoolCount_arr.reduce((a, b)=> a + parseInt(b), 0) < limit) { break; } - offset += limit - } - - // Get ETH and RPL balance of multiple rocketpool contracts as well as RPL staked - const [ - {output: rocketDepositPoolBalance}, - {output: rocketTokenRETHBalance}, - {output: totalRPLStake}, - {output: rocketDAONodeTrustedActions_rplBalance}, - {output: rocketAuctionManager_rplBalance} - ] = await Promise.all([ - sdk.api.abi.call({ - target: rocketVault, - params: ['rocketDepositPool'], - abi: abi['rocketVault.balanceOf'], - block: ethBlock, - chain: 'ethereum' - }), - sdk.api.abi.call({ - target: rocketVault, - params: ['rocketTokenRETH'], - abi: abi['rocketVault.balanceOf'], - block: ethBlock, - chain: 'ethereum' - }), - sdk.api.abi.call({ - target: rocketNodeStaking_contract, - abi: abi['rocketNodeStaking.getTotalRPLStake'], - block: ethBlock, - chain: 'ethereum' - }), - sdk.api.abi.call({ - target: rocketVault, - params: ['rocketDAONodeTrustedActions', rpl], - abi: abi['rocketVault.balanceOfToken'], - block: ethBlock, - chain: 'ethereum' - }), - sdk.api.abi.call({ - target: rocketVault, - params: ['rocketAuctionManager', rpl], - abi: abi['rocketVault.balanceOfToken'], - block: ethBlock, - chain: 'ethereum' - }), +const rocketRewardsPool = '0xEE4d2A71cF479e0D3d0c3c2C923dbfEB57E73111' +const trustedNodeManager = '0xb8e783882b11Ff4f6Cef3C501EA0f4b960152cc9' + +const abi = { + getNodeCount: "function getNodeCount() view returns (uint256)", + getNodeAddresses: "function getNodeAddresses(uint256 _offset, uint256 _limit) view returns (address[])", + getNodeDetails: "function getNodeDetails(address _nodeAddress) view returns ((bool exists, uint256 registrationTime, string timezoneLocation, bool feeDistributorInitialised, address feeDistributorAddress, uint256 rewardNetwork, uint256 rplStake, uint256 effectiveRPLStake, uint256 minimumRPLStake, uint256 maximumRPLStake, uint256 ethMatched, uint256 ethMatchedLimit, uint256 minipoolCount, uint256 balanceETH, uint256 balanceRETH, uint256 balanceRPL, uint256 balanceOldRPL, uint256 depositCreditBalance, uint256 distributorBalanceUserETH, uint256 distributorBalanceNodeETH, address withdrawalAddress, address pendingWithdrawalAddress, bool smoothingPoolRegistrationState, uint256 smoothingPoolRegistrationChanged, address nodeAddress))", + getPendingETHRewards: "function getPendingETHRewards() view returns (uint256)", + balanceOf: "function balanceOf(string _networkContractName) view returns (uint256)", + balanceOfToken: "function balanceOfToken(string _networkContractName, address _tokenAddress) view returns (uint256)", + getMemberAt: "function getMemberAt(uint256 _index) view returns (address)", + getMemberCount: "function getMemberCount() view returns (uint256)", + getMemberRPLBondAmount: "function getMemberRPLBondAmount(address _nodeAddress) view returns (uint256)" +}; + +const tvl = async (api) => { + const [nodeLength, pendingETHRewards, depositPoolBalance] = await Promise.all([ + api.call({ target: rocketNodeManager, abi: abi.getNodeCount }), + api.call({ target: rocketRewardsPool, abi: abi.getPendingETHRewards }), + api.call({ target: rocketVault, abi: abi.balanceOf, params: ['rocketDepositPool'] }), ]) - // ETH staked in Rocketpool pools - const unmatched_minipools = minipool_count_per_status[0] * 16 // Unmatched minipools - const pending_minipools = minipool_count_per_status[1] * 32 // Pending minipools (matched but not staking yet) - const staking_minipools = minipool_count_per_status[2] * 32 // Staking minipools - const withdrawable_minipools = minipool_count_per_status[3] * 32 // Withdrawable minipools - // Deposit pool balance - // rocketDepositPool_balance = solidity.to_float(rp.call("rocketDepositPool.getBalance")) - // rETH collateral from withdrawn minipools - // rETH_collateral_from_withdrawn_minipools = solidity.to_float(w3.eth.getBalance(rp.get_address_by_name("rocketTokenRETH"))) + const addresses = await api.call({ target: rocketNodeManager, abi: abi.getNodeAddresses, params: [0, nodeLength] }); - const ETH_TVL = staking_minipools - + pending_minipools - + unmatched_minipools - + withdrawable_minipools - + parseFloat(rocketDepositPoolBalance) / 1e18 - + parseFloat(rocketTokenRETHBalance) / 1e18 - - // RPL staked - // rpl_tvl += "rocketNodeStaking.getTotalRPLStake")) // RPL staked by Node Operators - // rpl_tvl += solidity.to_float(rp.call("rocketVault.balanceOfToken", "rocketDAONodeTrustedActions", rpl)) // RPL bonded by the oDAO - // rpl_tvl += solidity.to_float(rp.call("rocketVault.balanceOfToken", "rocketAuctionManager", rpl)) // slashed RPL that hasn't been auctioned off yet - const RPL_tvl = parseFloat(totalRPLStake) + parseFloat(rocketDAONodeTrustedActions_rplBalance) + parseFloat(rocketAuctionManager_rplBalance) - -// pending_minipools: ${pending_minipools} -// unmatched_minipools: ${unmatched_minipools} -// withdrawable_minipools: ${withdrawable_minipools} -// rocketDepositPoolBalance: ${rocketDepositPoolBalance / 1e18} -// rocketTokenRETHBalance: ${rocketTokenRETHBalance / 1e18} -// = ETH_TVL: ${ETH_TVL}\n -// rocketNodeStaking.getTotalRPLStake: ${totalRPLStake/1e18} -// rocketDAONodeTrustedActions_rplBalance: ${rocketDAONodeTrustedActions_rplBalance/1e18} -// rocketAuctionManager_rplBalance: ${rocketAuctionManager_rplBalance/1e18} -// = RPL_tvl: ${RPL_tvl/1e18}\n`) - - const balances = { - [weth]: ETH_TVL * 1e18, - [rpl]: RPL_tvl + const batchSize = 100; + const batchedAddresses = []; + for (let i = 0; i < addresses.length; i += batchSize) { + batchedAddresses.push(addresses.slice(i, i + batchSize)); } - return balances -} -module.exports = { - methodology: "Rocketpool TVL is ethereum staked by the users and node operators - collateral provided against rETH - staked on beacon chain 32 * activeMinipoolCount + RPL staked by Node Operators to operate a node.", - ethereum: { - tvl, - }, + const nodeDetails = await Promise.all( + batchedAddresses.map(async (batch) => { + const results = await api.multiCall({ calls: batch.map((address) => ({ target: rocketNodeManager, params: [address] })), abi: abi.getNodeDetails, permitFailure: true }) + return results ? results.filter((result) => result && result.exists) : [] + }) + ) + + const { minipoolCount, ethMatched } = nodeDetails.flat().reduce( + (acc, curr) => { + if (!curr) return acc; + acc.minipoolCount += Number(curr.minipoolCount) || 0; + acc.ethMatched += Number(curr.ethMatched) || 0; + return acc; + }, + { minipoolCount: 0, ethMatched: 0 } + ); + + api.add(ETH, [pendingETHRewards, depositPoolBalance, ethMatched]) } -/* -New Rocketpool TVL computation from tvl bot -minipool_count_per_status = call mulitple times rp.call("rocketMinipoolManager.getMinipoolCountPerStatus", offset, limit) - -# staking minipools -eth_tvl += minipool_count_per_status[2] * 32 -# pending minipools (matched but not staking yet) -eth_tvl += minipool_count_per_status[1] * 32 -# unmatched minipools -eth_tvl += minipool_count_per_status[0] * 16 -# withdrawable minipools -eth_tvl += minipool_count_per_status[3] * 32 -# deposit pool balance -eth_tvl += solidity.to_float(rp.call("rocketDepositPool.getBalance")) -# rETH collateral from withdrawn minipools -eth_tvl += solidity.to_float(w3.eth.getBalance(rp.get_address_by_name("rocketTokenRETH"))) - -# staked RPL -rpl_tvl += solidity.to_float(rp.call("rocketNodeStaking.getTotalRPLStake"))) -# RPL bonded by the oDAO -rpl_tvl += solidity.to_float(rp.call("rocketVault.balanceOfToken", "rocketDAONodeTrustedActions", rpl_address)) -# slashed RPL that hasn't been auctioned off yet -rpl_tvl += solidity.to_float(rp.call("rocketVault.balanceOfToken", "rocketAuctionManager", rpl_address)) - -// rocketDAONodeTrustedActions is RPL bonded by the oDAO Member. Rocketpool team considers them users, as they are independent entities. These Bonds can be slashed if the oDAO Member miss behaves. rocketAuctionManager is slashed RPL that hasn't been sold by the protocol yet. They consider it TVL because its RPL that will be sold for ETH and kept as additional rETH collateral - +const staking = async (api) => { + const trustedNodes = await api.fetchList({ target: trustedNodeManager, lengthAbi: abi.getMemberCount, itemAbi: abi.getMemberAt }) + api.add(RPL, await api.multiCall({ calls: trustedNodes.map((node) => ({ target: trustedNodeManager, params: [node] })), abi: abi.getMemberRPLBondAmount })) + return api.sumTokens({ owner: rocketVault, tokens: [RPL] }) +} -Previous incomplete simpler TVL: - - ETH locked in the deposit contract, which would be 32 * rocketMinipoolManager.getActiveMinipoolCount - - RPL locked by Node Operators rocketNodeStaking.getTotalRPLStake -*/ +module.exports = { + methodology: 'TVL represents the total ETH from the minipools as well as the staking rewards pending distribution', + ethereum: { tvl, staking } +} \ No newline at end of file From 574ac0c138856b045e77b2317b80f7c8c6703f68 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 18 Nov 2024 14:45:37 +0000 Subject: [PATCH 1102/1768] zircuit chain --- projects/zircuit-chain/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/zircuit-chain/index.js diff --git a/projects/zircuit-chain/index.js b/projects/zircuit-chain/index.js new file mode 100644 index 0000000000..ee2044a19d --- /dev/null +++ b/projects/zircuit-chain/index.js @@ -0,0 +1,17 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: ['0x17bfAfA932d2e23Bd9B909Fd5B4D2e2a27043fb1', '0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8'], + fetchCoValentTokens: true, + permitFailure: true, + blacklistedTokens: ['0xfd418e42783382e86ae91e445406600ba144d162'] + }), + staking: (api) => sumTokens2({ + api, owner: '0x386B76D9cA5F5Fb150B6BFB35CF5379B22B26dd8', token: '0xfd418e42783382e86ae91e445406600ba144d162', + }) + }, +}; From ba724ec081eb4f3378872e4647dbc31c69cc6c02 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 18 Nov 2024 16:12:33 +0100 Subject: [PATCH 1103/1768] Ape express (#12336) Co-authored-by: boivlad Co-authored-by: Vladyslav Boichenko <44983140+boivlad@users.noreply.github.com> --- projects/ape-express/index.js | 30 ++++++++++++++++++++++++++++++ projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 3 +++ 3 files changed, 34 insertions(+) create mode 100644 projects/ape-express/index.js diff --git a/projects/ape-express/index.js b/projects/ape-express/index.js new file mode 100644 index 0000000000..ad907f925c --- /dev/null +++ b/projects/ape-express/index.js @@ -0,0 +1,30 @@ +const { getLogs } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { nullAddress } = require('../helper/tokenMapping'); + +const configs = [ + { factory: "0xCd7a0227Bc48b1c14C5a1A6a4851010f80943476", fromBlock: 63905 }, + { factory: "0xBcace40e446b06E6A530D945eFbae222f84fA836", fromBlock: 3633933 } +] + +const tvl = async (api) => { + const logs = [] + for (const { factory, fromBlock } of configs) { + logs.push(await getLogs({ + api, + target: factory, + topics: ['0x8409923236a093dc9b93970d1428b15e2c21c325f3480269492056cdd1134023'], + eventAbi: 'event TokenCreated (address indexed token, address indexed bondingCurve, address indexed creator, string name, string symbol, address router, uint256 initialVirtualAPE, uint256 finalVirtualAPE, uint8 tradeFeePercent, uint8 apxSuccessFee, uint8 creatorSuccessFee)', + onlyArgs: true, + fromBlock, + })) + } + let pools = logs.flat().map(log => log.bondingCurve) + return sumTokens2({ api, owners: pools, token: nullAddress }) +} + +module.exports = { + apechain: { + tvl, + } +} \ No newline at end of file diff --git a/projects/helper/env.js b/projects/helper/env.js index 8c24dd6cb2..fcd578c096 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -23,6 +23,7 @@ const DEFAULTS = { MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", SHAPE_RPC:'https://mainnet.shape.network', SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + APECHAIN_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", MORPH_RPC_MULTICALL: "0x33A213b1049D5AD2eeE6e61dAe040955e60383D4", WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", APECHAIN_RPC: "https://rpc.apechain.com", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c588acff7a..6d70fdeae9 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -42,6 +42,9 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + apechain: { + '0x0000000000000000000000000000000000000000': { coingeckoId: "apecoin", decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 7389e9619dae8e3fd4ca3682a2ef059466d8b3fa Mon Sep 17 00:00:00 2001 From: Trisha <87116734+trishateh@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:00:48 +0800 Subject: [PATCH 1104/1768] Add Lavarage adapter (#12311) Co-authored-by: Alexander Ho <39906305+piske-alex@users.noreply.github.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lavarage/index.js | 196 +++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 projects/lavarage/index.js diff --git a/projects/lavarage/index.js b/projects/lavarage/index.js new file mode 100644 index 0000000000..1c6db59d14 --- /dev/null +++ b/projects/lavarage/index.js @@ -0,0 +1,196 @@ +const { getProvider, sumTokens2 } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js"); +const anchor = require("@project-serum/anchor"); +const bs58 = require('bs58'); + +const solProgramId = "CRSeeBqjDnm3UPefJ9gxrtngTsnQRhEJiTA345Q83X3v"; +const usdcProgramId = "1avaAUcjccXCjSZzwUvB2gS3DzkkieV2Mw8CjdN65uu"; +const stakingProgramId = "85vAnW1P89t9tdNddRGk6fo5bDxhYAY854NfVJDqzf7h"; +const TOKEN_PROGRAM_ID = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); +const SPL_ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); + +const edgeCaseTimestamps = [ + { start: 1713880000, end: 1713885480 }, // 10:32 AM - 10:58 AM ET on April 23, 2024 + { start: 1713874500, end: 1713876060 }, // 8:15 AM - 8:41 AM ET on April 23, 2024 +]; + +const idleAccount = new PublicKey("bkhAyULeiXwju7Zmy4t3paDHtVZjNaofVQ4VgEdTWiE"); +const deployedAccount = new PublicKey("6riP1W6R3qzUPWYwLGtXEC23aTqmyAEdDtXzhntJquAh"); +const multisigAccount = new PublicKey("DkPYEECBc28iute8vWvAuAU4xiM91Sht59p7FHZbmNQv"); +const pendingUnstakeAccount = new PublicKey("HTnwdgfXrA6gZRiQsnfxLKbvdcqnxdbuC2FJsmCCVMw9"); +const usdcAddress = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"); +const iscAddress = new PublicKey("J9BcrQfX4p9D1bvLzRNCbMDv8f44a9LFdeqNE4Yk2WMD"); +const usdcPoolAccount = new PublicKey("9m3wEeK3v5yyqDGMnDiDRR3FjCwZjRVB4n92pieGtTbP"); +const iscPoolAccount = new PublicKey("CrsxVEF7YNGAk9QwwbB2vuesUWoDopfgFAhA9apoCJ2z"); + +function getPositionFilters() { + const sizeFilter = { dataSize: 178 }; + const value = BigInt(9999); + const valueBuffer = Buffer.alloc(8); + valueBuffer.writeBigUInt64LE(value, 0); + const val0Filter = { + memcmp: { + offset: 40, + bytes: bs58.encode(Buffer.from(new Uint8Array(8))), + }, + } + const val9999Filter = { + memcmp: { + offset: 40, + bytes: bs58.encode(valueBuffer), + }, + } + return [ + [sizeFilter, val0Filter], + [sizeFilter, val9999Filter], + ] +} + +async function tvl(api) { + const provider = getProvider(); + for (const programId of [solProgramId, usdcProgramId]) { + + const program = new anchor.Program(lavarageIDL, programId, provider); + const pools = await program.account.pool.all() + const poolMap = {} + pools.forEach((pool) => { + poolMap[pool.publicKey.toBase58()] = pool.account.collateralType.toBase58() + }) + for (const filter of getPositionFilters()) { + const positions = await program.account.position.all(filter) + positions.forEach(({ account }) => { + let { closeStatusRecallTimestamp, pool, collateralAmount, timestamp } = account + const token = poolMap[pool.toBase58()] + const closeTS = closeStatusRecallTimestamp.toNumber() + const ts = timestamp.toNumber() + if ((closeTS && !isWithinEdgeCaseTimeRange(ts)) || !token) return; + api.add(token, collateralAmount.toString()) + }) + } + } + return sumTokens2({ + balances: api.getBalances(), tokenAccounts: [ + getAssociatedTokenAddress(usdcAddress, usdcPoolAccount), + getAssociatedTokenAddress(iscAddress, iscPoolAccount), + ], solOwners: [ + deployedAccount, pendingUnstakeAccount, + ] + }) +} + +function getAssociatedTokenAddress(mint, owner,) { + const [associatedTokenAddress] = PublicKey.findProgramAddressSync([owner.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()], SPL_ASSOCIATED_TOKEN_PROGRAM_ID); + return associatedTokenAddress; +} + +function isWithinEdgeCaseTimeRange(closeTimestamp) { + return edgeCaseTimestamps.some( + ({ start, end }) => closeTimestamp >= start && closeTimestamp <= end + ); +} + +module.exports = { + timetravel: false, + solana: { + tvl, + }, +}; + +const lavarageIDL = { + version: "0.1.0", + name: "lavarage", + instructions: [], + accounts: [ + { + name: "pool", + type: { + kind: "struct", + fields: [ + { + name: "interestRate", + type: "u8", + }, + { + name: "collateralType", + type: "publicKey", + }, + { + name: "maxBorrow", + type: "u64", + }, + { + name: "nodeWallet", + type: "publicKey", + }, + { + name: "maxExposure", + type: "u64", + }, + { + name: "currentExposure", + type: "u64", + }, + ], + }, + }, + { + name: "position", + type: { + kind: "struct", + fields: [ + { + name: "pool", + type: "publicKey", + }, + { + name: "closeStatusRecallTimestamp", + type: "u64", + }, + { + name: "amount", + type: "u64", + }, + { + name: "userPaid", + type: "u64", + }, + { + name: "collateralAmount", + type: "u64", + }, + { + name: "timestamp", + type: "i64", + }, + { + name: "trader", + type: "publicKey", + }, + { + name: "seed", + type: "publicKey", + }, + { + name: "closeTimestamp", + type: "i64", + }, + { + name: "closingPositionSize", + type: "u64", + }, + { + name: "interestRate", + type: "u8", + }, + { + name: "lastInterestCollect", + type: "i64", + }, + ], + }, + }, + ], + types: [], + events: [], + errors: [], +}; From d390b16b50adca1c81fee028bd93d70a1ddd41a3 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 19 Nov 2024 10:30:07 +0000 Subject: [PATCH 1105/1768] core bridge --- projects/core-bridge/index.js | 70 +++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 projects/core-bridge/index.js diff --git a/projects/core-bridge/index.js b/projects/core-bridge/index.js new file mode 100644 index 0000000000..1b3d41eb85 --- /dev/null +++ b/projects/core-bridge/index.js @@ -0,0 +1,70 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const owners = ['0x52e75D318cFB31f9A2EdFa2DFee26B161255B233', '0x4D73AdB72bC3DD368966edD0f0b2148401A178E2'] +const owner = '0x29d096cD18C0dA7500295f082da73316d704031A' + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners, + fetchCoValentTokens: true, + permitFailure: true + }), + }, + bsc: { + tvl: (api) => + sumTokens2({ + api, + owners, + fetchCoValentTokens: true, + permitFailure: true + }), + }, + polygon: { + tvl: (api) => + sumTokens2({ + api, + owners, + fetchCoValentTokens: true, + permitFailure: true + }), + }, + optimism: { + tvl: (api) => + sumTokens2({ + api, + owner, + fetchCoValentTokens: true, + permitFailure: true + }), + }, + avax: { + tvl: (api) => + sumTokens2({ + api, + owner, + fetchCoValentTokens: true, + permitFailure: true + }), + }, + arbitrum: { + tvl: (api) => + sumTokens2({ + api, + owner, + fetchCoValentTokens: true, + permitFailure: true + }), + }, + base: { + tvl: (api) => + sumTokens2({ + api, + owner: '0x84FB2086Fed7b3c9b3a4Bc559f60fFaA91507879', + fetchCoValentTokens: true, + permitFailure: true + }), + }, +}; From 50e6d91ea7eb7e818a90b001c285238593e36d2a Mon Sep 17 00:00:00 2001 From: Aymen <146243083+aymentrosh@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:50:44 +0100 Subject: [PATCH 1106/1768] Add Ethereum v2 assets to Karak (#12353) --- projects/karak/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/karak/index.js b/projects/karak/index.js index 4225da63db..b3e20d8482 100644 --- a/projects/karak/index.js +++ b/projects/karak/index.js @@ -2,7 +2,7 @@ const { getLogs2 } = require('../helper/cache/getLogs') const { sumTokens2 } = require("../helper/unwrapLPs") const config = { - ethereum: { v1: { factory: '0x54e44dbb92dba848ace27f44c0cb4268981ef1cc' } }, + ethereum: { v1: { factory: '0x54e44dbb92dba848ace27f44c0cb4268981ef1cc' }, v2: { factory: '0x7A91498D5fA6705d35c9406b752d6D50f49C9510', block: 21189340 }}, arbitrum: { v1: { factory: '0x399f22ae52a18382a67542b3de9bed52b7b9a4ad' }, v2: { factory: '0xc4B3D494c166eBbFF9C716Da4cec39B579795A0d', block: 261874079 }}, karak: { v1: { factory:'0xB308474350D75447cA8731B7Ce87c9ee9DA03B1C' }, v2: { factory: '0x1368AE21e85c9FA25f1aB579b6D3C6e20Ad6db04', block: 13814008 }}, mantle: { v1: { factory: '0x4a2b015CcB8658998692Db9eD4522B8e846962eD'}, v2: { factory: '0x993E140Ba530E8Ffe1135ecef07ce7484f26CAA3', block: 71616200 }}, From 4bbe01452c331a8cd90c792932a9d331d55056b1 Mon Sep 17 00:00:00 2001 From: Josh Levine <24902242+jparklev@users.noreply.github.com> Date: Tue, 19 Nov 2024 08:50:55 -0800 Subject: [PATCH 1107/1768] Add Fluid Positions to Rumpel TVL (#12352) --- projects/rumpel/index.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/projects/rumpel/index.js b/projects/rumpel/index.js index ba2bf3fff3..f35ddd91be 100644 --- a/projects/rumpel/index.js +++ b/projects/rumpel/index.js @@ -7,6 +7,7 @@ const CONTRACTS = { ETHENA_LP_STAKING: "0x8707f238936c12c309bfc2B9959C35828AcFc512", MORPHO_BLUE: "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb", ZIRCUIT_RESTAKING_POOL: "0xF047ab4c75cebf0eB9ed34Ae2c186f3611aEAfa6", + FLUID_POSITION_RESOLVER: "0x3E3dae4F30347782089d398D462546eb5276801C", }; const DEPLOYMENT = { @@ -47,13 +48,21 @@ const TOKENS = { YT_AMPHRETH: "0x5dB8a2391a72F1114BbaE30eFc9CD89f4a29F988", }; +const FLUID_VAULTS = [ + { VAULT: "0xeAEf563015634a9d0EE6CF1357A3b205C35e028D", TOKEN: TOKENS.WEETH }, + { VAULT: "0x1c6068eC051f0Ac1688cA1FE76810FA9c8644278", TOKEN: TOKENS.WEETHS }, + { VAULT: "0x3996464c0fCCa8183e13ea5E5e74375e2c8744Dd", TOKEN: TOKENS.SUSDE }, + { VAULT: "0xBc345229C1b52e4c30530C614BB487323BA38Da5", TOKEN: TOKENS.SUSDE }, + { VAULT: "0xe210d8ded13Abe836a10E8Aa956dd424658d0034", TOKEN: TOKENS.SUSDE }, +] + const MORPHO_SUSDE_MARKET_ID = "0x39d11026eae1c6ec02aa4c0910778664089cdd97c3fd23f68f7cd05e2e95af48"; async function tvl(api) { const owners = await getOwners(api); - await Promise.all([sumBaseTokens, handleLockedUSDE, handleMorphoSuppliedSUSDE, handleZircuitAssets, handleStrategyTokenBalances].map(async (fn) => fn())); + await Promise.all([sumBaseTokens, handleLockedUSDE, handleMorphoSuppliedSUSDE, handleZircuitAssets, handleStrategyTokenBalances, handleFluidPositions].map(async (fn) => fn())); async function sumBaseTokens() { return api.sumTokens({ @@ -80,6 +89,19 @@ async function tvl(api) { api.add(TOKENS.USDE, positions.map(i => i.amount)) } + async function handleFluidPositions() { + const positions = await api.multiCall({ + target: CONTRACTS.FLUID_POSITION_RESOLVER, + abi: "function getAllVaultPositions(address) view returns ((uint256,address owner,uint256 supply,uint256)[])", + calls: FLUID_VAULTS.map(({ VAULT }) => ({ params: [VAULT] })), + }); + + for (let i = 0; i < positions.length; i++) { + const rumpelPositions = positions[i].filter(i => owners.includes(i.owner)); + api.add(FLUID_VAULTS[i].TOKEN, rumpelPositions.map(i => i.supply)) + } + } + async function handleZircuitAssets() { const assets = [TOKENS.WEETH, TOKENS.WEETHS, TOKENS.USDE, TOKENS.MSTETH, TOKENS.AMPHRETH] const calls = [] From 1843c6e712aa2200c6234048f941c3c6c415f256 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 19 Nov 2024 17:02:43 +0000 Subject: [PATCH 1108/1768] add mapping for etherlink tokens --- projects/helper/tokenMapping.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 6d70fdeae9..aec72e10f5 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -44,6 +44,11 @@ const fixBalancesTokens = { }, apechain: { '0x0000000000000000000000000000000000000000': { coingeckoId: "apecoin", decimals: 18 }, + }, + etlk: { + '0x796ea11fa2dd751ed01b53c372ffdb4aaa8f00f9': { coingeckoId: "usd-coin", decimals: 6 }, + '0x2c03058c8afc06713be23e58d2febc8337dbfe6a': { coingeckoId: "tether", decimals: 6 }, + '0xfc24f770f94edbca6d6f885e12d4317320bcb401': { coingeckoId: "weth", decimals: 18 }, } } From 8e7c4c28fa11257bf1833d50411817ba6770545b Mon Sep 17 00:00:00 2001 From: Oleh Kyslashko Date: Tue, 19 Nov 2024 19:06:37 +0200 Subject: [PATCH 1109/1768] add Delea project (#12350) --- projects/Delea/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/Delea/index.js diff --git a/projects/Delea/index.js b/projects/Delea/index.js new file mode 100644 index 0000000000..7e6d957998 --- /dev/null +++ b/projects/Delea/index.js @@ -0,0 +1,9 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require("../helper/coreAssets.json"); + +module.exports = { + methodology: 'Counts Delea smartcontract balance as TVL.', + ton: { + tvl: sumTokensExport({ owners: ["EQB6rkS8xt3Ey4XugdVqQDe1vt4KJDh813_k2ceoONTCBnyD", "EQCwIIRKpuV9fQpQxdTMhLAO30MNHa6GOYd00TsySOOYtA9n", "EQA2OzCuP8-d_lN2MYxLv5WCNfpLH1NUuugppOZBZgNYn-aa", "EQCgGUMB_u1Gkrskw2o407Ig8ymQmfkxWuPW2d4INuQoPFJO"], tokens: [ADDRESSES.null]}), + } +} From e5a2b0244222ce2c2a5d610c32f6a5a66a101517 Mon Sep 17 00:00:00 2001 From: Antoine <161333389+theausicist@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:40:56 +0530 Subject: [PATCH 1110/1768] Track Ruscet Exchange (#12338) --- projects/ruscet/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/ruscet/index.js diff --git a/projects/ruscet/index.js b/projects/ruscet/index.js new file mode 100644 index 0000000000..c555ed73f5 --- /dev/null +++ b/projects/ruscet/index.js @@ -0,0 +1,11 @@ +const { sumTokens } = require("../helper/chain/fuel") + +async function tvl(api) { + const contractId = '0x8002f2e86302ef9421558d0ae25a68cdfdbec5d27915cc2db49eded220799ecc' + return sumTokens({ api, owner: contractId }) +} + +module.exports = { + fuel: { tvl }, + timetravel: false, +} From 840219b5b0c10e5bba04b81d24f0ebf238286d99 Mon Sep 17 00:00:00 2001 From: Robojosef <104118694+robojosef@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:12:03 -0800 Subject: [PATCH 1111/1768] Correct the fungible asset mints for Superposition (#12340) --- projects/superposition/index.js | 47 ++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/projects/superposition/index.js b/projects/superposition/index.js index b6ecf4c48d..f37e0a6a68 100644 --- a/projects/superposition/index.js +++ b/projects/superposition/index.js @@ -13,21 +13,44 @@ async function _getResources() { const brokersFilter = (i) => i.type.includes(`${spRootAddress}::broker::Broker`); -function processBrokerData(brokerDataArray, isBorrowed = false) { +const coinToFungibleAssetFilter = (i) => + i.type.includes(`${spRootAddress}::map::Map`); + +function processBrokerData(brokerDataArray, coinToFungibleAssetArray, isBorrowed = false) { + const coinToFungibleAssetMap = coinToFungibleAssetArray.reduce(function(map, item) { + map[item.type] = item.data.fa_metadata; + return map; + }, {}); + const result = {}; brokerDataArray.map((item) => { const { type, data } = item; - result[type] = !isBorrowed ? parseInt(data.available) : parseInt(data.borrowed) + + const brokerType = type; + + const coinType = brokerType.match(/<([^>]+)>/)[1]; + + let tokenMint = coinType; + { + // Superposition uses custom coin types to represent fungible assets + // Find the fungible asset address so DefiLama can find + // the correct token price + const mapType = `${spRootAddress}::map::Map<${coinType}>`; + if (mapType in coinToFungibleAssetMap) { + tokenMint = coinToFungibleAssetMap[mapType]; + } + } + + result[tokenMint] = !isBorrowed ? parseInt(data.available) : parseInt(data.borrowed) }); return result; } -function simplifyKeys(balanceData, api) { +function addBalanceData(balanceData, api) { Object.entries(balanceData).forEach(([key, value]) => { - const newKey = key.match(/<([^>]+)>/)[1]; - api.add(newKey, value); + api.add(key, value); }); } @@ -38,14 +61,20 @@ module.exports = { tvl: async (api) => { const resources = await _getResources(); const brokers = resources.filter(brokersFilter); - const balanceData = processBrokerData(brokers); - simplifyKeys(balanceData, api); + const coinToFungibleAssetArray = resources.filter( + coinToFungibleAssetFilter + ); + const balanceData = processBrokerData(brokers, coinToFungibleAssetArray); + addBalanceData(balanceData, api); }, borrowed: async (api) => { const resources = await _getResources(); const brokers = resources.filter(brokersFilter); - const balanceData = processBrokerData(brokers, true); - simplifyKeys(balanceData, api); + const coinToFungibleAssetArray = resources.filter( + coinToFungibleAssetFilter + ); + const balanceData = processBrokerData(brokers, coinToFungibleAssetArray, true); + addBalanceData(balanceData, api); }, }, }; From ff8d261f8ef8a173e116adcbc5175e0b1292b7dd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 19 Nov 2024 18:14:10 +0100 Subject: [PATCH 1112/1768] fix audit issue --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9bd007ac9f..6c769bfdb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2535,9 +2535,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", From b5483eeda131e9ee379435974dd712052871eb7b Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:24:16 +0100 Subject: [PATCH 1113/1768] Fix: Estate-protocol (Outdated) (#12347) --- projects/estate-protocol/index.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/projects/estate-protocol/index.js b/projects/estate-protocol/index.js index b526c2747b..58bca11547 100644 --- a/projects/estate-protocol/index.js +++ b/projects/estate-protocol/index.js @@ -1,20 +1,20 @@ const ADDRESSES = require('../helper/coreAssets.json') const { get } = require('../helper/http') -async function arbTvl(api) { - let ep_tokens = await get('https://estateprotocol.com/api/public/property/list') +const EVM_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; - // Filter out tokens - ep_tokens = ep_tokens.filter(t => t.propertyAddress && t.token_price) +async function tvl(api) { + const tokens = (await get('https://estateprotocol.com/api/public/property/list')).filter(t => t.propertyAddress && EVM_ADDRESS_REGEX.test(t.propertyAddress) && t.token_price) + const tokenSupplies = await api.multiCall({ calls: tokens.map((token) => ({ target: token.propertyAddress })), abi: 'erc20:totalSupply' }) - // Get total supply for each token - const tokenSupplies_arb = await api.multiCall({calls: ep_tokens.map(t => t.propertyAddress), abi: 'erc20:totalSupply'}); - tokenSupplies_arb.map((supply, i) => api.add(ADDRESSES.arbitrum.USDC_CIRCLE, supply/1e18 * parseFloat(ep_tokens[i]['token_price']) * 1e6 )) + tokenSupplies.forEach((supply, i) => { + const token = tokens[i] + const price = parseFloat(token.token_price) + api.add(ADDRESSES.arbitrum.USDC_CIRCLE, supply * price * Math.pow(10, 6-18)) + }) } module.exports = { methodology: `TVL for Estate Protocol consists of the accumulation of all properties prices, each being tokenSupply * tokenPrice where tokenPrice is given by the API`, - arbitrum: { - tvl: arbTvl - }, + arbitrum: { tvl } } From b78e2c37cc85d521a215838c46236cca49877aa9 Mon Sep 17 00:00:00 2001 From: tstemko <57684389+tstemko@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:24:29 -0500 Subject: [PATCH 1114/1768] Add rootstock vaults to tvl calcs (#12354) Co-authored-by: Tatyana Stemkovski --- projects/ichifarm/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index 89cff51d35..119f8af691 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -158,6 +158,11 @@ const config = { { factory: '0x860F3881aCBbF05D48a324C5b8ca9004D31A146C', fromBlock: 599247, isAlgebra: false, }, // Pearl ] }, + rsk: { + vaultConfigs: [ + { factory: '0x8cCd02E769e6A668a447Bd15e134C31bEccd8182', fromBlock: 6753128, isAlgebra: false, }, // Uniswap + ] + }, scroll: { vaultConfigs: [ { factory: '0xb42D5956cDe4386B65C087CfCD16910aB6114F15', fromBlock: 5264782, isAlgebra: false, }, // Metavault From cf3eb78cb4b8e80cb51cd6ff87294db961e1708e Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:36:11 -0500 Subject: [PATCH 1115/1768] Added /projects/nfthive (#12328) Co-authored-by: Mike D --- projects/nfthive/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 projects/nfthive/index.js diff --git a/projects/nfthive/index.js b/projects/nfthive/index.js new file mode 100644 index 0000000000..8df589effb --- /dev/null +++ b/projects/nfthive/index.js @@ -0,0 +1,27 @@ +const { get_account_tvl } = require("../helper/chain/eos"); + +const tokens = [ + ["eosio.token", "WAX", "wax"], + ["alien.worlds", "TLM", "alien-worlds"], + ["wuffi", "WUF", "wuffi"], +]; + +// NFTHive +// https://nfthive.io +async function wax() { + const accounts = ["nfthivedrops", "nfthivepacks", "nfthivecraft"]; + return await get_account_tvl(accounts, tokens, "wax"); +} + +async function staking() { + const accounts = ["nfthivevault"]; + return await get_account_tvl(accounts, tokens, "wax"); +} + +module.exports = { + methodology: `NFTHive TVL is achieved by querying token balances from NFT market contracts.`, + wax: { + tvl: wax, + staking + }, +} \ No newline at end of file From 7a92002f7d2c3d2479af83bc850a6abbd9b6bdb7 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 19 Nov 2024 22:27:41 +0000 Subject: [PATCH 1116/1768] add hallmark --- projects/polter/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/polter/index.js b/projects/polter/index.js index 182b3aea9f..50d421564c 100644 --- a/projects/polter/index.js +++ b/projects/polter/index.js @@ -17,6 +17,9 @@ const base = { module.exports = { + hallmarks: [ + [1731715200,"Price Oracle Exploit"] + ], fantom: aaveV2Export(fantom.POLTER_LENDINGPOOL_CONTRACT), base: aaveV2Export(base.POLTER_LENDINGPOOL_CONTRACT), } From 13659bd833c9e6de789a868068060f0d8c687967 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 20 Nov 2024 12:52:35 +0000 Subject: [PATCH 1117/1768] astherus-basis-trading (#12366) --- projects/astherus-basis-trading/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/astherus-basis-trading/index.js diff --git a/projects/astherus-basis-trading/index.js b/projects/astherus-basis-trading/index.js new file mode 100644 index 0000000000..79fcfcc24c --- /dev/null +++ b/projects/astherus-basis-trading/index.js @@ -0,0 +1,10 @@ +const USDF = "0x5A110fC00474038f6c02E89C707D638602EA44B5" + +module.exports = { + bsc: { + tvl: async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: USDF }) + api.add(USDF, supply) + }, + } +} \ No newline at end of file From 7bf8725ba638573070a626a859f8a29b3dbea0da Mon Sep 17 00:00:00 2001 From: 0xaslan <161349919+0xaslan@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:01:31 -0500 Subject: [PATCH 1118/1768] Add NS and Typus to list of coins for DeepBook v3 (#12368) --- projects/deepbook-v3/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/deepbook-v3/index.js b/projects/deepbook-v3/index.js index 6f8d51f4c5..88495a261b 100644 --- a/projects/deepbook-v3/index.js +++ b/projects/deepbook-v3/index.js @@ -8,6 +8,8 @@ const coins = { bethType: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", wusdtType: ADDRESSES.sui.USDT, wusdcType: ADDRESSES.sui.USDC, + nsType: "0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS", + typusType: "0xf82dc05634970553615eef6112a1ac4fb7bf10272bf6cbe0f80ef44a6c489385::typus::TYPUS", } const endpointUrl = "https://deepbook-indexer.mainnet.mystenlabs.com" From a21787d5c5fb36b086584e67a87aee9ddce142bc Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:01:40 +0100 Subject: [PATCH 1119/1768] Add new SwissBorg wallet (#12367) --- projects/swissborg/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index d559134f95..052e2e97ac 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -19,7 +19,8 @@ const config = { '0x178Fb204c1ff2Ed7d0651C522A3a5B15480Eb76d', '0xFbA64167e4f091Ca625FA79aa6f83665856f8Bf2', '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', - '0xe2484A7Ac1b9Cb6D8E55fd00e129aB913172bea6' + '0xe2484A7Ac1b9Cb6D8E55fd00e129aB913172bea6', + '0xdbe15F6573108B6736c70779C683Ca633c18aFe2', ], }, bitcoin: { From 1160de03783f17b19b8e4e86cc515359dc314882 Mon Sep 17 00:00:00 2001 From: shapeshed Date: Wed, 20 Nov 2024 15:01:46 +0000 Subject: [PATCH 1120/1768] Add Margined Protocol Neutron Vaults (#12364) --- projects/margined-protocol/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/margined-protocol/index.js b/projects/margined-protocol/index.js index 3fa68abb0e..05dc8c3e54 100644 --- a/projects/margined-protocol/index.js +++ b/projects/margined-protocol/index.js @@ -17,6 +17,10 @@ const osmosisVaults = { const neutronVaults = { ATOMFund: "neutron1puedrclm6rn33x3zv66xg6m23qcdagayqua6jj2wqzvfznlqef8qe53wr2", NTRNStructured: "neutron13h4jzme5880knnc23xvwu9gytynnxu5cc0fek6fndmjyctzznj9sd5yhhy", + ATOMdATOM: "neutron1f99ujxefjr4jqmskc7hvg09am6pdq2j2c5049xwl0de4cavc4rfsl866y0", + wBTCUSDC: "neutron17fyzkafg4scrd6xu0sp9llrl6hazegza7yer4erlea0kvk30yxsqk2xqfd", + NTRNUSDC: "neutron1t0fl9k43g86sv60ghx9vtwed9rpgtf49rxzm05ff477j23h52c6s0urdc7", + TIAUSDC: "neutron1wv8pl7tsatzx6n9yaqfksvu5y0x7j50g6mhy636udwfn3vyqp0hsu7g8yk", } const config = { From 24726703a16866513f97fcab658d8ff051575efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BB=8Bnh=20Ti=E1=BA=BFn=20=C4=90=E1=BA=A1t?= <97428594+Miyukishirogane@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:09:10 +0700 Subject: [PATCH 1121/1768] Add adapter for tcv_platform (#12363) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/tcv_platform/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/tcv_platform/index.js diff --git a/projects/tcv_platform/index.js b/projects/tcv_platform/index.js new file mode 100644 index 0000000000..9a2da61ba6 --- /dev/null +++ b/projects/tcv_platform/index.js @@ -0,0 +1,18 @@ + + +const { sumTokens2 } = require('../helper/unwrapLPs'); + +async function tvl(api) { + const tcvFactory = "0xCa2396933E02Fb7636126a914aE5f5512ab31077"; + const index = await api.call({ target: tcvFactory, abi: 'uint256:numVaults', }); + const vaults = await api.call({ target: tcvFactory, abi: 'function vaults(uint256,uint256) returns (address[])', params: ["0", String(index)], }); + await sumTokens2({ api, resolveUniV3: true, owners: vaults }) +} + +module.exports = { + methodology: "Calculates total liquidity from all NFT ranges in the given pools.", + start: 1717239410, + arbitrum: { + tvl, + }, +}; \ No newline at end of file From 4e5bc1b11c9c682d4de51a0dff1600141700079f Mon Sep 17 00:00:00 2001 From: baklavaspace <93024988+baklavaspace@users.noreply.github.com> Date: Wed, 20 Nov 2024 23:17:45 +0800 Subject: [PATCH 1122/1768] Add Base Moonwell WETH & USDC vault (#12358) --- projects/baklava-space/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/baklava-space/index.js b/projects/baklava-space/index.js index 8c589c35f6..976b87a6e1 100644 --- a/projects/baklava-space/index.js +++ b/projects/baklava-space/index.js @@ -47,7 +47,9 @@ const config = { '0xf81Ac49CEeA834deC340aB08a544fB1E79d44c31', '0xed1031885D7DE7DB78BE921F5FeAacD3f6E9a127', '0x9bD9b6600eeE5f8318913cCb17BF836E1e9d2f4F', - '0x90011B2AB095c9a9f70a8eBEe21313FB3989029f' // CLM pool + '0x25F0Bc213ED49ABe3AD36CB8D0919A138d19b648', + '0x59639E20A17EaD110aaBAF249001Ab140917C18e', + '0x90011B2AB095c9a9f70a8eBEe21313FB3989029f' // CLM pool(Not calculated by defillama) ], bsc: [ '0x6659B42C106222a50EE555F76BaD09b68EC056f9', From ebf45e69d1d84a835364870c6fd15dc94eb0bc79 Mon Sep 17 00:00:00 2001 From: Leofis G Date: Wed, 20 Nov 2024 23:18:38 +0800 Subject: [PATCH 1123/1768] Added Aries Markets Native Usdt Count. (#12357) --- projects/aries-markets/index.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/projects/aries-markets/index.js b/projects/aries-markets/index.js index 20a2e72f70..2a5ac23514 100644 --- a/projects/aries-markets/index.js +++ b/projects/aries-markets/index.js @@ -1,5 +1,4 @@ const sdk = require("@defillama/sdk"); -const { default: BigNumber } = require("bignumber.js"); const { getResources, getTableData, } = require("../helper/chain/aptos"); const { transformBalances } = require("../helper/portedTokens"); const toHex = (str) => Buffer.from(str, 'utf-8').toString('hex'); @@ -11,7 +10,8 @@ async function _getResources() { return resourcesCache } const extractCoinAddress = (str) => str.slice(str.indexOf("<") + 1, str.lastIndexOf(">")); -const reserveContrainerFilter = (i) => i.type.includes("0x9770fa9c725cbd97eb50b2be5f7416efdfd1f1554beb0750d4dae4c64e860da3::reserve::ReserveCoinContainer") +const reserveContrainerFilter = (i) => i.type.includes("0x9770fa9c725cbd97eb50b2be5f7416efdfd1f1554beb0750d4dae4c64e860da3::reserve::ReserveCoinContainer"); +const faWrapperFilter = (i) => i.type.includes("0x9770fa9c725cbd97eb50b2be5f7416efdfd1f1554beb0750d4dae4c64e860da3::fa_to_coin_wrapper::WrapperCoinInfo"); module.exports = { timetravel: false, @@ -26,11 +26,20 @@ module.exports = { lamports: i.data.underlying_coin.value, tokenAddress: extractCoinAddress(i.type), })); + const faWrappers = data.filter(faWrapperFilter) + .map((i) => ({ + lamports: i.data.fa_amount, + faAddress: i.data.metadata.inner, + })); coinContainers.forEach(({ lamports, tokenAddress }) => { sdk.util.sumSingleBalance(balances, tokenAddress, lamports); }); + faWrappers.forEach(({ lamports, faAddress }) => { + sdk.util.sumSingleBalance(balances, faAddress, lamports); + }); + return transformBalances("aptos", balances); }, borrowed: async () => { @@ -59,10 +68,13 @@ module.exports = { }); const total_borrowed = BigInt(reserveStatus.total_borrowed.val) / BigInt(10 ** 18); + + const faInfo = data.filter(faWrapperFilter).filter((i) => i.type.includes(coin_type)); + const normalizedAddress = faInfo.length == 0 ? coin_type : faInfo[0].data.metadata.inner; return { lamports: total_borrowed.toString(), - tokenAddress: coin_type, + tokenAddress: normalizedAddress, }; }) ); From 9157c852c1d42da77b111de1af6adb1a66682566 Mon Sep 17 00:00:00 2001 From: Teddy Not Bear <106410805+TeddyNotBear@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:18:48 +0700 Subject: [PATCH 1124/1768] fix: token addresses for Bountive V2 (#12360) --- projects/bountive/index.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/projects/bountive/index.js b/projects/bountive/index.js index 134cab6388..74d80582d4 100644 --- a/projects/bountive/index.js +++ b/projects/bountive/index.js @@ -4,15 +4,13 @@ const { multiCall } = require('../helper/chain/starknet') const bountiveTokens = [ // BoSTRK: Bountive STRK - "0x05a0fff20829d60a0cdae2da18a32bd3de5c32f8d0109d2a0b59a88a7a77176e", + "0x018e009bbb035c506234e7a8eca6a7229adfd59a278ba3845285d28b03ed6d53", // BoETH: Bountive ETH - "0x00d91e36ff68918b392c9cfc2e3f575526f69e04b97eb28142856fae3611fcf7", + "0x02fcaebd41710024e25b6dc646a62acb6560125a699a3f695b6adb54a180aaee", // BoUSDC: Bountive USDC - "0x04ed6784fa5c11889851c2d13bbd80464e55605a90b5b664f9400df0fd6ef4a5", + "0x028a88bf75f1b10dc8552051a56fbdc732084af514f6065f4c67ea6d50204720", // BoUSDT: Bountive USDT - "0x0753dc6f8fee7487fe3f32728c0f1af9df1f7a3d0443ef507eb79a974697be12", - // BoDAI: Bountive DAI - "0x06e32d47c49efb0243da8d456dc413f1dcf50ceea7be28ef520492eccfff2b43", + "0x0243d9a1cffc0b5ebbf549efd1232a96b1ef392fe595e91dd72103d5a8e7d847", ] const underlyingsTokens = [ @@ -24,8 +22,6 @@ const underlyingsTokens = [ ADDRESSES.starknet.USDC, // USDT ADDRESSES.starknet.USDT, - // DAI - ADDRESSES.starknet.DAI, ] async function tvl(api) { From df00cd61522a4876a131f28f0c1acd6209318f95 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 20 Nov 2024 17:50:00 +0100 Subject: [PATCH 1125/1768] Fix: RocketPool (#12371) --- projects/rocketpool/index.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/projects/rocketpool/index.js b/projects/rocketpool/index.js index 32df6b962d..3553ad32c4 100644 --- a/projects/rocketpool/index.js +++ b/projects/rocketpool/index.js @@ -6,6 +6,7 @@ const rocketNodeManager = '0x2b52479F6ea009907e46fc43e91064D1b92Fdc86' const rocketVault = '0x3bDC69C4E5e13E52A65f5583c23EFB9636b469d6' const rocketRewardsPool = '0xEE4d2A71cF479e0D3d0c3c2C923dbfEB57E73111' const trustedNodeManager = '0xb8e783882b11Ff4f6Cef3C501EA0f4b960152cc9' +const rocketNodeStaking = '0xF18Dc176C10Ff6D8b5A17974126D43301F8EEB95' const abi = { getNodeCount: "function getNodeCount() view returns (uint256)", @@ -16,7 +17,8 @@ const abi = { balanceOfToken: "function balanceOfToken(string _networkContractName, address _tokenAddress) view returns (uint256)", getMemberAt: "function getMemberAt(uint256 _index) view returns (address)", getMemberCount: "function getMemberCount() view returns (uint256)", - getMemberRPLBondAmount: "function getMemberRPLBondAmount(address _nodeAddress) view returns (uint256)" + getMemberRPLBondAmount: "function getMemberRPLBondAmount(address _nodeAddress) view returns (uint256)", + getNodeETHProvided: "function getNodeETHProvided(address _nodeAddress) view returns (uint256)", }; const tvl = async (api) => { @@ -34,24 +36,29 @@ const tvl = async (api) => { batchedAddresses.push(addresses.slice(i, i + batchSize)); } - const nodeDetails = await Promise.all( + const results = await Promise.all( batchedAddresses.map(async (batch) => { - const results = await api.multiCall({ calls: batch.map((address) => ({ target: rocketNodeManager, params: [address] })), abi: abi.getNodeDetails, permitFailure: true }) - return results ? results.filter((result) => result && result.exists) : [] + const details = await api.multiCall({ calls: batch.map((address) => ({ target: rocketNodeManager, params: [address] })), abi: abi.getNodeDetails, permitFailure: true }) + const ethProvided = await api.multiCall({ calls: batch.map((address) => ({ target: rocketNodeStaking, params: [address] })), abi: abi.getNodeETHProvided, permitFailure: true }) + return { details: details ? details.filter((result) => result && result.exists) : [], ethProvided: ethProvided || [] }; }) ) - const { minipoolCount, ethMatched } = nodeDetails.flat().reduce( - (acc, curr) => { + const flattenedDetails = results.flatMap((result) => result.details); + const flattenedEthProvided = results.flatMap((result) => result.ethProvided); + + const { minipoolCount, ethMatched, nodeEthProvided } = flattenedDetails.reduce( + (acc, curr, index) => { if (!curr) return acc; acc.minipoolCount += Number(curr.minipoolCount) || 0; acc.ethMatched += Number(curr.ethMatched) || 0; + acc.nodeEthProvided += Number(flattenedEthProvided[index]) || 0; return acc; }, - { minipoolCount: 0, ethMatched: 0 } + { minipoolCount: 0, ethMatched: 0, nodeEthProvided: 0 } ); - api.add(ETH, [pendingETHRewards, depositPoolBalance, ethMatched]) + api.add(ETH, [pendingETHRewards, depositPoolBalance, ethMatched, nodeEthProvided]) } const staking = async (api) => { From f508718135726758d5d2945e98ca089308ed17c2 Mon Sep 17 00:00:00 2001 From: Hongchao Liu Date: Wed, 20 Nov 2024 17:50:39 +0100 Subject: [PATCH 1126/1768] Update Alephium Bridge with BSC (#12370) --- projects/alephium-bridge/index.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/projects/alephium-bridge/index.js b/projects/alephium-bridge/index.js index 884308d9e0..383fcf0f4d 100644 --- a/projects/alephium-bridge/index.js +++ b/projects/alephium-bridge/index.js @@ -2,20 +2,23 @@ const sdk = require("@defillama/sdk"); const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); -const tokenBridgeAddress = '0x579a3bde631c3d8068cbfe3dc45b0f14ec18dd43' -const bridgedAlphAddress = '0x590f820444fa3638e022776752c5eef34e2f89a6' +const ethTokenBridgeAddress = '0x579a3bde631c3d8068cbfe3dc45b0f14ec18dd43' +const ethBridgedAlphAddress = '0x590f820444fa3638e022776752c5eef34e2f89a6' +const bscTokenBridgeAddress = '0x2971F580C34d3D584e0342741c6a622f69424dD8' +const bscBridgedAlphAddress = '0x8683BA2F8b0f69b2105f26f488bADe1d3AB4dec8' async function tvl(ts, block) { - const totalBridgedAlphSupply = await sdk.api.erc20.totalSupply({ target: bridgedAlphAddress, block }) + const ethTotalBridgedAlphSupply = await sdk.api.erc20.totalSupply({ target: ethBridgedAlphAddress, block, chain: 'ethereum' }) + const bscTotalBridgedAlphSupply = await sdk.api.erc20.totalSupply({ target: bscBridgedAlphAddress, block, chain: 'bsc' }) return { - alephium: totalBridgedAlphSupply.output / 1e18, + alephium: (ethTotalBridgedAlphSupply.output / 1e18) + (bscTotalBridgedAlphSupply.output / 1e18), } } module.exports = { - methodology: "Tracks funds locked in the Alephium Bridge Token contracts on Ethereum", + methodology: "Tracks funds locked in the Alephium Bridge Token contracts on Ethereum and Binance Smart Chain", ethereum: { - tvl: sumTokensExport({ owner: tokenBridgeAddress, tokens: [ + tvl: sumTokensExport({ owner: ethTokenBridgeAddress, tokens: [ ADDRESSES.ethereum.WETH, ADDRESSES.ethereum.USDT, ADDRESSES.ethereum.USDC, @@ -23,6 +26,13 @@ module.exports = { ADDRESSES.ethereum.DAI ] }), }, + bsc: { + tvl: sumTokensExport({ owner: bscTokenBridgeAddress, tokens: [ + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.USDT + ] }), + }, alephium: { tvl } From 615dc4b7ee3d89ba1dabf4c1fe70e63a7002dade Mon Sep 17 00:00:00 2001 From: Dodi Triwibowo Date: Thu, 21 Nov 2024 01:46:17 +0700 Subject: [PATCH 1127/1768] add pluto.so (#12356) Co-authored-by: Dodi Pluto Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/pluto-so/idl.json | 117 ++++++++++++++++++++++++++++ projects/pluto-so/index.js | 75 ++++++++++++++++++ utils/formatIdl.js | 151 +++++++++++++++++++++++++++++++++++++ 3 files changed, 343 insertions(+) create mode 100644 projects/pluto-so/idl.json create mode 100644 projects/pluto-so/index.js create mode 100644 utils/formatIdl.js diff --git a/projects/pluto-so/idl.json b/projects/pluto-so/idl.json new file mode 100644 index 0000000000..cb5ca018fb --- /dev/null +++ b/projects/pluto-so/idl.json @@ -0,0 +1,117 @@ +{ + "address": "5UFYdXHgXLMsDzHyv6pQW9zv3fNkRSNqHwhR7UPnkhzy", + "metadata": {"name": "pluto", "version": "0.1.0", "spec": "0.1.0", "description": "Created with Anchor"}, + "instructions": [], + "accounts": [ + {"name": "vaultEarn", "discriminator": [255, 18, 25, 189, 255, 106, 176, 136]}, + {"name": "vaultLeverage", "discriminator": [135, 160, 136, 66, 119, 36, 19, 115]} + ], + "events": [], + "errors": [], + "types": [ + { + "name": "vaultEarn", + "serialization": "bytemuckunsafe", + "repr": {"kind": "c"}, + "type": { + "kind": "struct", + "fields": [ + {"name": "isInitialized", "type": "bool"}, + {"name": "version", "type": "u8"}, + {"name": "bump", "type": "u8"}, + {"name": "align0", "type": {"array": ["u8", 5]}}, + {"name": "protocol", "type": "pubkey"}, + {"name": "earnStats", "type": "pubkey"}, + {"name": "creator", "type": "pubkey"}, + {"name": "authority", "type": "pubkey"}, + {"name": "earnConfig", "type": "pubkey"}, + {"name": "vaultLiquidity", "type": "pubkey"}, + {"name": "priceOracle", "type": "pubkey"}, + {"name": "priceFeed", "type": {"array": ["u8", 64]}}, + {"name": "tokenProgram", "type": "pubkey"}, + {"name": "tokenMint", "type": "pubkey"}, + {"name": "tokenDecimal", "type": "u8"}, + {"name": "align1", "type": {"array": ["u8", 7]}}, + {"name": "lastUpdated", "type": "i64"}, + {"name": "unitSupply", "type": "u128"}, + {"name": "unitBorrowed", "type": "u128"}, + {"name": "unitLent", "type": "u128"}, + {"name": "unitLeverage", "type": "u128"}, + {"name": "index", "type": "u128"}, + {"name": "lastIndexUpdated", "type": "i64"}, + {"name": "apy", "type": {"defined": {"name": "rate"}}}, + {"name": "padding1", "type": {"array": ["u64", 64]}} + ] + } + }, + { + "name": "rate", + "serialization": "bytemuckunsafe", + "repr": {"kind": "c"}, + "type": { + "kind": "struct", + "fields": [ + {"name": "lastUpdated", "type": "i64"}, + {"name": "lastValue", "type": "u32"}, + {"name": "align0", "type": {"array": ["u8", 4]}}, + {"name": "lastEmaHourUpdated", "type": "i64"}, + {"name": "emaHourly", "type": "u32"}, + {"name": "align1", "type": {"array": ["u8", 4]}}, + {"name": "lastEmaDayUpdated", "type": "i64"}, + {"name": "ema3d", "type": "u32"}, + {"name": "ema7d", "type": "u32"}, + {"name": "ema14d", "type": "u32"}, + {"name": "ema30d", "type": "u32"}, + {"name": "ema90d", "type": "u32"}, + {"name": "ema180d", "type": "u32"}, + {"name": "ema365d", "type": "u32"}, + {"name": "align2", "type": {"array": ["u8", 4]}}, + {"name": "padding1", "type": {"array": ["u64", 7]}} + ] + } + }, + { + "name": "vaultLeverage", + "serialization": "bytemuckunsafe", + "repr": {"kind": "c"}, + "type": { + "kind": "struct", + "fields": [ + {"name": "isInitialized", "type": "bool"}, + {"name": "version", "type": "u8"}, + {"name": "bump", "type": "u8"}, + {"name": "align0", "type": {"array": ["u8", 5]}}, + {"name": "protocol", "type": "pubkey"}, + {"name": "leverageStats", "type": "pubkey"}, + {"name": "creator", "type": "pubkey"}, + {"name": "authority", "type": "pubkey"}, + {"name": "leverageConfig", "type": "pubkey"}, + {"name": "borrowVault", "type": "pubkey"}, + {"name": "tokenCollateralPriceOracle", "type": "pubkey"}, + {"name": "tokenCollateralPriceFeed", "type": {"array": ["u8", 64]}}, + {"name": "tokenCollateralTokenProgram", "type": "pubkey"}, + {"name": "tokenCollateralTokenMint", "type": "pubkey"}, + {"name": "tokenCollateralVaultLiquidity", "type": "pubkey"}, + {"name": "tokenCollateralTokenDecimal", "type": "u8"}, + {"name": "align1", "type": {"array": ["u8", 7]}}, + {"name": "nativeCollateralPriceOracle", "type": "pubkey"}, + {"name": "nativeCollateralPriceFeed", "type": {"array": ["u8", 64]}}, + {"name": "nativeCollateralTokenProgram", "type": "pubkey"}, + {"name": "nativeCollateralTokenMint", "type": "pubkey"}, + {"name": "nativeCollateralVaultLiquidity", "type": "pubkey"}, + {"name": "nativeCollateralTokenDecimal", "type": "u8"}, + {"name": "align2", "type": {"array": ["u8", 7]}}, + {"name": "lastUpdated", "type": "i64"}, + {"name": "borrowingUnitSupply", "type": "u128"}, + {"name": "borrowingIndex", "type": "u128"}, + {"name": "unitSupply", "type": "u128"}, + {"name": "index", "type": "u128"}, + {"name": "lastIndexUpdated", "type": "i64"}, + {"name": "borrowingApy", "type": {"defined": {"name": "rate"}}}, + {"name": "apy", "type": {"defined": {"name": "rate"}}}, + {"name": "padding1", "type": {"array": ["u64", 64]}} + ] + } + } + ] +} \ No newline at end of file diff --git a/projects/pluto-so/index.js b/projects/pluto-so/index.js new file mode 100644 index 0000000000..0c593616dd --- /dev/null +++ b/projects/pluto-so/index.js @@ -0,0 +1,75 @@ +const { getProvider } = require("../helper/solana"); +const { Program } = require("@coral-xyz/anchor"); +const PlutosoIDL = require("./idl.json"); + +let program + +function getProgram() { + if (!program) { + program = new Program(PlutosoIDL, getProvider()); + } + return program; +} + +async function tvl(api) { + await earnTvl(api) + await leverageTvl(api) +} + +async function borrowed(api) { + return leverageTvl(api, true) +} + +const HNST_VAULT = 'C5uSiUij9P6nWUQBDF8CeJQnYQMeKJWhANRDirGHHD28' + +async function staking(api) { + const pluto = getProgram() + + const earnHnst = await pluto.account.vaultEarn.fetch(HNST_VAULT) + + let unitHnst = earnHnst.unitSupply.toString() / 1e8 + let indexHnst = earnHnst.index.toString() / 1e12 + let amountHnst = unitHnst * indexHnst + + api.add(earnHnst.tokenMint.toString(), amountHnst * (10 ** earnHnst.tokenDecimal)); +} + +async function earnTvl(api) { + const pluto = getProgram() + const vaultData = await pluto.account.vaultEarn.all() + vaultData.forEach(({ publicKey, account }) => { + if (publicKey.toString() === HNST_VAULT) return; + let unit = account.unitSupply.toString() / 1e8 + let index = account.index.toString() / 1e12 + let amount = unit * index + api.add(account.tokenMint.toString(), amount * (10 ** account.tokenDecimal)); + }) +} + +async function leverageTvl(api, isBorrow = false) { + const pluto = getProgram() + const vaultData = await pluto.account.vaultLeverage.all() + vaultData.forEach(({ account }) => { + if (isBorrow) { + let unit = account.borrowingUnitSupply.toString() / 1e8 + let index = account.borrowingIndex.toString() / 1e12 + let amount = unit * index + api.add(account.tokenCollateralTokenMint.toString(), amount * (10 ** account.tokenCollateralTokenDecimal)); + } else { + let unit = account.unitSupply.toString() / 1e8 + let index = account.index.toString() / 1e12 + let amount = unit * index + api.add(account.nativeCollateralTokenMint.toString(), amount * (10 ** account.nativeCollateralTokenDecimal)); + } + }) +} + +module.exports = { + timetravel: false, + methodology: "The Total Value Locked (TVL) is calculated as the sum of leveraged position assets and the available assets deposited in Earn Vaults.", + solana: { + staking, + tvl, + // borrowed, + }, +}; diff --git a/utils/formatIdl.js b/utils/formatIdl.js new file mode 100644 index 0000000000..7f799098f3 --- /dev/null +++ b/utils/formatIdl.js @@ -0,0 +1,151 @@ +// const jsonString = require('json-stringify-pretty-compact') +const fs = require('fs') + +const stringOrChar = /("(?:[^\\"]|\\.)*")|[:,]/g; +let idl = require('../projects/test/idl.json') + +idl.instructions = [] +idl.events = [] +idl.errors = [] + +const whitelistedTypes = new Set() +const typeMap = {} +idl.types.forEach(t => typeMap[t.name] = t) +const whitelistedTypeMap = {} +const accountMap = {} +idl.accounts.forEach(a => accountMap[a.name] = a) + +idl.accounts.forEach(checkType) + +function checkType(typeObj) { + let isAccountObjInTypeMap = false + if (whitelistedTypes.has(typeObj.name)) return; + whitelistedTypes.add(typeObj.name) + if (!typeObj.type && accountMap[typeObj.name]) { // it could be account whose type is present in the typeMap + if (typeMap[typeObj.name]) { + typeObj = typeMap[typeObj.name] + isAccountObjInTypeMap = true + } + else return; + } + + if (isAccountObjInTypeMap || !accountMap[typeObj.name]) + whitelistedTypeMap[typeObj.name] = typeObj + + if (typeObj.type.kind !== 'struct') return; + typeObj.type.fields.forEach(f => { + if (typeof f.type === 'object') { + const tName = f.type.defined?.name + if (tName && typeMap[tName]) checkType(typeMap[tName]) + if (f.type.array) + f.type.array.forEach(a => { + if (a.defined && typeMap[a.defined.name]) checkType(typeMap[a.defined.name]) + }) + } + }) +} + +console.log(JSON.stringify({whitelistedTypeMap: Object.keys(whitelistedTypeMap), accountMap: Object.keys(accountMap), whitelistedTypes: Array.from(whitelistedTypes)}, null, 2)) +idl.types = Object.values(whitelistedTypeMap) + + + + +const res = stringify(idl, { maxLength: 153 }) +fs.writeFileSync(__dirname + '/../projects/test/idl.json', res) + + +// from json-stringify-pretty-compact + +function stringify(passedObj, options = {}) { + const indent = JSON.stringify( + [1], + undefined, + options.indent === undefined ? 2 : options.indent + ).slice(2, -3); + + const maxLength = + indent === "" + ? Infinity + : options.maxLength === undefined + ? 80 + : options.maxLength; + + let { replacer } = options; + + return (function _stringify(obj, currentIndent, reserved) { + if (obj && typeof obj.toJSON === "function") { + obj = obj.toJSON(); + } + + const string = JSON.stringify(obj, replacer); + + if (string === undefined) { + return string; + } + + const length = maxLength - currentIndent.length - reserved; + + if (string.length <= length) { + const prettified = string.replace( + stringOrChar, + (match, stringLiteral) => { + return stringLiteral || `${match} `; + } + ); + if (prettified.length <= length) { + return prettified; + } + } + + if (replacer != null) { + obj = JSON.parse(string); + replacer = undefined; + } + + if (typeof obj === "object" && obj !== null) { + const nextIndent = currentIndent + indent; + const items = []; + let index = 0; + let start; + let end; + + if (Array.isArray(obj)) { + start = "["; + end = "]"; + const { length } = obj; + for (; index < length; index++) { + items.push( + _stringify(obj[index], nextIndent, index === length - 1 ? 0 : 1) || + "null" + ); + } + } else { + start = "{"; + end = "}"; + const keys = Object.keys(obj); + const { length } = keys; + for (; index < length; index++) { + const key = keys[index]; + const keyPart = `${JSON.stringify(key)}: `; + const value = _stringify( + obj[key], + nextIndent, + keyPart.length + (index === length - 1 ? 0 : 1) + ); + if (value !== undefined) { + items.push(keyPart + value); + } + } + } + + if (items.length > 0) { + return [start, indent + items.join(`,\n${nextIndent}`), end].join( + `\n${currentIndent}` + ); + } + } + + return string; + })(passedObj, "", 0); +} From 0837177cc54447181dbd0cb93b97817e273f6720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90inh=20V=C4=83n=20ti=E1=BA=BFn?= Date: Thu, 21 Nov 2024 02:15:34 +0700 Subject: [PATCH 1128/1768] Add TempestFinance TVL (#12344) --- projects/tempest-finance/chains.js | 10 ++++++++++ projects/tempest-finance/index.js | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 projects/tempest-finance/chains.js create mode 100644 projects/tempest-finance/index.js diff --git a/projects/tempest-finance/chains.js b/projects/tempest-finance/chains.js new file mode 100644 index 0000000000..fefbc9aee6 --- /dev/null +++ b/projects/tempest-finance/chains.js @@ -0,0 +1,10 @@ +module.exports = { + ethereum: 1, + optimism: 10, + bsc: 56, + manta: 169, + canto: 7700, + base: 8453, + arbitrum: 42161, + scroll: 534352, +} \ No newline at end of file diff --git a/projects/tempest-finance/index.js b/projects/tempest-finance/index.js new file mode 100644 index 0000000000..915b98dbf0 --- /dev/null +++ b/projects/tempest-finance/index.js @@ -0,0 +1,20 @@ +const chains = require("./chains"); +const axios = require("axios"); + +async function tvl(api) { + const response = await axios.get(`https://protocol-service-api.tempestfinance.xyz/api/v1/vaults?chainId=${chains[api.chain]}`) + const vaults = response.data.data.vaults; + + const tokens = vaults.map(vault => vault.mainAsset); + const balances = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults.map(vault => vault.address) }); + + api.addTokens(tokens, balances) +} + +Object.keys(chains).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + return await tvl(api) + } + } +}) From 5f0f616233cbfc2d35af042deaa6f12268a6a9d2 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 21 Nov 2024 01:53:05 +0000 Subject: [PATCH 1129/1768] add blacklist --- projects/vexchange/index.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/projects/vexchange/index.js b/projects/vexchange/index.js index eeb0bf360b..47bccf2461 100644 --- a/projects/vexchange/index.js +++ b/projects/vexchange/index.js @@ -1,25 +1,33 @@ -const { get } = require('../helper/http') +const { get } = require('../helper/http'); const { toUSDTBalances } = require('../helper/balances'); +const blacklist = ['0xb008022F676a8918299E046c91Af65Fc06b52B1C','0xca907dD0044D673e878E08Af32E2Dc2AdC731369']; + async function tvl() { - const data = await get('https://api.vexchange.io/v1/pairs') - let balance = 0 - Object.values(data).forEach(pair => { + const data = await get('https://api.vexchange.io/v1/pairs'); + let balance = 0; + + Object.entries(data).forEach(([pairAddress, pair]) => { + // Skip the blacklisted pair + if (blacklist.includes(pairAddress)) return; + if (pair.token0.usdPrice && pair.token1.usdPrice) { - balance += +pair.token0Reserve * pair.token0.usdPrice - balance += +pair.token1Reserve * pair.token1.usdPrice + balance += +pair.token0Reserve * pair.token0.usdPrice; + balance += +pair.token1Reserve * pair.token1.usdPrice; } else if (pair.token0.usdPrice) { - balance += +pair.token0Reserve * pair.token0.usdPrice * 2 - }else if (pair.token1.usdPrice) { - balance += +pair.token1Reserve * pair.token1.usdPrice * 2 + balance += +pair.token0Reserve * pair.token0.usdPrice * 2; + } else if (pair.token1.usdPrice) { + balance += +pair.token1Reserve * pair.token1.usdPrice * 2; } - }) - return toUSDTBalances(balance) + }); + + return toUSDTBalances(balance); } + module.exports = { timetravel: false, misrepresentedTokens: true, vechain: { - tvl - } -}; \ No newline at end of file + tvl, + }, +}; From d83c846e24d3f1a895afac10a40ba35fbb159c28 Mon Sep 17 00:00:00 2001 From: Elara Finance Date: Thu, 21 Nov 2024 14:43:27 +0800 Subject: [PATCH 1130/1768] add Elara Finance (#12377) --- projects/elara/index.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 projects/elara/index.js diff --git a/projects/elara/index.js b/projects/elara/index.js new file mode 100644 index 0000000000..59f6e25980 --- /dev/null +++ b/projects/elara/index.js @@ -0,0 +1,6 @@ +const { methodology, compoundExports2 } = require("../helper/compound"); + +module.exports = { + zircuit: compoundExports2({ comptroller: '0x695aCEf58D1a10Cf13CBb4bbB2dfB7eDDd89B296' }), + methodology, +} \ No newline at end of file From dbacba935826f708d9750d30052d1e47d5d374fd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 21 Nov 2024 08:14:11 +0100 Subject: [PATCH 1131/1768] update doubler #12375 --- projects/doubler/index.js | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/projects/doubler/index.js b/projects/doubler/index.js index 98a8ad5628..ce04c5f7fb 100644 --- a/projects/doubler/index.js +++ b/projects/doubler/index.js @@ -1,18 +1,30 @@ const ADDRESSES = require('../helper/coreAssets.json') -const WETH_CONTRACT = ADDRESSES.arbitrum.WETH; -const DOUBLER_CONTRACT = '0x56386f04111057a5D8DF8d719827038B716333F0'; -async function tvl(api) { - const collateralBalance = await api.call({ - abi: 'erc20:balanceOf', - target: WETH_CONTRACT, - params: [DOUBLER_CONTRACT], - }); - api.add(WETH_CONTRACT, collateralBalance) -} +const ARB_DOUBLER_POOL1_CONTRACT = '0x56386f04111057a5D8DF8d719827038B716333F0'; + +const abi = "function getPool() view returns ((bool isNative, uint16 inputFee, uint16 withdrawFee, uint256 id, uint256 lastPrice, uint256 cLastRbTime, uint256 lowerOfInputMaximum, uint256 endPrice, uint256 startTime, uint256 lastDayRate, uint256 endTime, address asset, address cToken, address bToken, address creator))" -module.exports = { +const config = { arbitrum: { - tvl, + pepe: '0x15AD6EDCa40dFAFE1B3BAc5F1c6d65411726F1bF', + pool2: '0xC64a3f7da839F8851cB2A5710b693c92fA461027', + }, + manta: { + weth: '0xc8480647Eeb358df638Ca882362cE528cC666087', + manta: '0x498F4711a706F9ad33b5D68EaA20E56a87d5d926', + }, +} + +Object.keys(config).forEach(chain => { + const pools = Object.values(config[chain]) + module.exports[chain] = { + tvl: async (api) => { + const tokens = await api.multiCall({ abi, calls: pools, }) + if (chain === 'arbitrum') { + tokens.push({ asset: ADDRESSES.arbitrum.WETH }) + pools.push(ARB_DOUBLER_POOL1_CONTRACT) + } + return api.sumTokens({ tokensAndOwners2: [tokens.map(i => i.asset), pools] }) + } } -}; \ No newline at end of file +}) \ No newline at end of file From 7de0648b689f8f20f32e3684221da3fc17ea471c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 21 Nov 2024 08:16:03 +0100 Subject: [PATCH 1132/1768] update lock file --- package-lock.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c769bfdb7..5b6ddb351c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,10 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.98", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.98.tgz", - "integrity": "sha512-HeXnoPDKDqH2qmag5j+EnRxPr5N/Pog+R6XEOE1L2+x53UwjjVEmCnVzdTYOMqL2fIfiM2Ba+ByShxJ88gKxlg==", - "license": "ISC", + "version": "5.0.101", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.101.tgz", + "integrity": "sha512-mlZsTA9dxIDn/VG2qKq6q9BbIikb5UWL7WSI71JNRNDJ0RE/bHiRvpU0gjtgEb6svt5pV5jRsWONjcSPOWcljg==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From cfaa801f360ab1a0ed63ecfbd0eed742a71d1f66 Mon Sep 17 00:00:00 2001 From: ZkSwapFinance <126151208+ZkSwapFinance@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:25:37 +0700 Subject: [PATCH 1133/1768] Add zkSwap Finance Stableswap Pools (#12374) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/zkSwap-finance-stableswap/index.js | 35 +++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 projects/zkSwap-finance-stableswap/index.js diff --git a/projects/zkSwap-finance-stableswap/index.js b/projects/zkSwap-finance-stableswap/index.js new file mode 100644 index 0000000000..92ea9e093d --- /dev/null +++ b/projects/zkSwap-finance-stableswap/index.js @@ -0,0 +1,35 @@ +const { getLogs2 } = require('../helper/cache/getLogs') + +module.exports = { + methodology: + "TVL accounts for the liquidity on all StableSwap pools.", +} + +const config = { + era: [{ target: '0xc93397F26886daB0d752C86612C78dbd2C1d5a59', fromBlock: 48190039, token3: true, },], +} + +Object.keys(config).forEach(chain => { + const factories = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const configs = await Promise.all(factories.map(getTvlConfig)) + return api.sumTokens({ ownerTokens: configs.flat() }) + + async function getTvlConfig({ target, fromBlock, token3 }) { + let topic = '0xa9551fb056fc743efe2a0a34e39f9769ad10166520df7843c09a66f82e148b97' + let eventAbi = 'event NewStableSwapPair(address indexed swapContract, address indexed tokenA, address indexed tokenB)' + let getOwnTokens = logs => logs.map(i => ([[i.tokenA, i.tokenB], i.swapContract])) + + if (token3) { + topic = '0x48dc7a1b156fe3e70ed5ed0afcb307661905edf536f15bb5786e327ea1933532' + eventAbi = 'event NewStableSwapPair(address indexed swapContract, address tokenA, address tokenB, address tokenC, address LP)' + getOwnTokens = logs => logs.map(i => ([[i.tokenA, i.tokenB, i.tokenC], i.swapContract])) + } + + const logs = await getLogs2({ api, target, fromBlock, eventAbi }) + return getOwnTokens(logs) + } + } + } +}) \ No newline at end of file From 79d3f632b35d15c522e652a49d46734db4e27da3 Mon Sep 17 00:00:00 2001 From: ZkSwapFinance <126151208+ZkSwapFinance@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:25:55 +0700 Subject: [PATCH 1134/1768] Add zkSwap Finance v3 Pools (#12373) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/zkSwap-finance-v3/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/zkSwap-finance-v3/index.js diff --git a/projects/zkSwap-finance-v3/index.js b/projects/zkSwap-finance-v3/index.js new file mode 100644 index 0000000000..bdcfdbc69e --- /dev/null +++ b/projects/zkSwap-finance-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + era: { factory: '0x88ADD6a7e3C221e02f978B388a092c9FD8cd7850', fromBlock: 49205949 }, +}) From 20d6d2695abdbe1be449ad6d259b08cec76138df Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:32:02 +0100 Subject: [PATCH 1135/1768] use multicall --- projects/etherfi-lrt/index.js | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/projects/etherfi-lrt/index.js b/projects/etherfi-lrt/index.js index a5543b4dcb..78604fcdee 100644 --- a/projects/etherfi-lrt/index.js +++ b/projects/etherfi-lrt/index.js @@ -1,5 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk') const vaults = [ '0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88', @@ -18,33 +17,24 @@ const vaultAccountant = [ ] async function vaultsTvl(api) { + const supplies = await api.multiCall({ calls: vaults, abi: 'uint256:totalSupply' }) + const quotes = await api.multiCall({ calls: vaultAccountant, abi: 'uint256:getRate' }) + const bases = await api.multiCall({ calls: vaultAccountant, abi: 'address:base' }) for (let i = 0; i < vaults.length; i++) { - const bv = vaults[i] - const ba = vaultAccountant[i] - const bvSupply = await api.call({ - target: bv, - abi: 'uint256:totalSupply', - }); - let [base, quote] = await Promise.all([ - api.call({ - target: ba, - abi: "function base() external view returns (address)", - }), - api.call({ - target: ba, - abi: "function getRate() external view returns (uint256 rate)", - }), - ]); - if(base.toLowerCase() === String(ADDRESSES.ethereum.WETH).toLowerCase()) { + const bvSupply = supplies[i] + let base = bases[i] + const quote = quotes[i] + if (base.toLowerCase() === ADDRESSES.ethereum.WETH.toLowerCase()) base = ADDRESSES.ethereum.EETH - } - const denominator = Math.pow(10, (String(quote).length-1)) - api.add(base, bvSupply * quote / denominator ) + + const denominator = Math.pow(10, (String(quote).length - 1)) + api.add(base, bvSupply * quote / denominator) } } module.exports = { doublecounted: true, + misrepresentedTokens: true, ethereum: { tvl: vaultsTvl, }, From ab93c5139c9fd111fe3133cb6f8c0eba0acd6b80 Mon Sep 17 00:00:00 2001 From: chainupk <121842069+chainupk@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:52:42 +0800 Subject: [PATCH 1136/1768] Added more address for Obelisk (#12378) --- projects/helper/bitcoin-book/obelisk.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/helper/bitcoin-book/obelisk.js b/projects/helper/bitcoin-book/obelisk.js index 498c99a2f5..713f0b0422 100644 --- a/projects/helper/bitcoin-book/obelisk.js +++ b/projects/helper/bitcoin-book/obelisk.js @@ -5,5 +5,8 @@ module.exports = [ 'bc1qy4pkldj4dqxtqypz6awwj7y8vahkht8uqhdlw3', 'bc1qyd4g2r0n0p9u775z7062rz8j88xxy27kmmh5aj', '155FvRapVDRbFYxaxGxJ9eCQjgr7X2yC6g', - 'bc1qjnhtrjgr4y0new266twr6x6703lshszuey8zwm' -] \ No newline at end of file + 'bc1qjnhtrjgr4y0new266twr6x6703lshszuey8zwm', + 'bc1quxgdtm6n9zau50n6aptcyn55gm0r5xjhvl8399', + 'bc1qt887udazek8rl89ck43nar4397a8qkp9qe9qdp', + 'bc1qunzwmk6gkx3ugxd4kmult6vl8vlws0w2jfume8jhnyxmz47ucy4qkhqwu6' +] From 3a406bf80d82481af54b9da383a45d9795a2a03a Mon Sep 17 00:00:00 2001 From: naz <85476822+welaskez@users.noreply.github.com> Date: Thu, 21 Nov 2024 12:54:42 +0500 Subject: [PATCH 1137/1768] create BeetrootFinance adapter (#12351) --- projects/BeetrootFinance/index.js | 73 +++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 projects/BeetrootFinance/index.js diff --git a/projects/BeetrootFinance/index.js b/projects/BeetrootFinance/index.js new file mode 100644 index 0000000000..338248e54d --- /dev/null +++ b/projects/BeetrootFinance/index.js @@ -0,0 +1,73 @@ + +const { get } = require('../helper/http') +const ADDRESSES = require("../helper/coreAssets.json"); +const { getJettonBalances } = require('../helper/chain/ton') + +async function fetchVaultData(address) { + const url = 'https://api5.storm.tg/graphql'; + + const query = ` + query VaultQuery($address: String!) { + getVault(address: $address) { + rate + } + } + `; + + try { + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + operationName: 'VaultQuery', + variables: { address }, + query + }) + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + return data.data.getVault; + } catch (error) { + console.error('Error fetching vault data:', error); + throw error; + } +} + +async function calculateTvl() { + const USDT_TLP_PRICE = (await get('https://tradoor.io/v3/lp/history/price?period=week')).data[0].price; + + const vaultData = await fetchVaultData('0:33e9e84d7cbefff0d23b395875420e3a1ecb82e241692be89c7ea2bd27716b77'); + const USDT_SLP_PRICE = vaultData?.rate / 1e9 || 0; + + const balances = await getJettonBalances('0:c2f0c639b58e6b3cce8a145c73e7c7cc5044baa92b05c62fcf6da8a0d50b8edc'); + + const USDT_SLP_ADDRESS = '0:aea78c710ae94270dc263a870cf47b4360f53cc5ed38e3db502e9e9afb904b11'; + const USDT_TLP_ADDRESS = '0:332c916f885a26051cb3a121f00c2bda459339eb103df36fe484df0b87b39384'; + + const USDT_SLP_BALANCE = balances[USDT_SLP_ADDRESS].balance / 1e9; + const USDT_TLP_BALANCE = balances[USDT_TLP_ADDRESS].balance / 1e9; + + const tvl = ((USDT_TLP_PRICE * USDT_TLP_BALANCE) + (USDT_SLP_PRICE * USDT_SLP_BALANCE)) * 1e6; + return tvl; +} + + +async function tvl(api) { + const calculatedTvl = await calculateTvl(); + api.add(ADDRESSES.ton.USDT, calculatedTvl); +} + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + methodology: `TVL calculation methodology consists of the delta between onchain USDT deposits and withdrawals`.trim(), + ton: { + tvl + } +} From 278fec437a1c50ad7ded77d154c2f1dc115e0d92 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Thu, 21 Nov 2024 15:04:20 +0400 Subject: [PATCH 1138/1768] Switch to public REST API for ston.fi (#12382) --- projects/ston/index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/projects/ston/index.js b/projects/ston/index.js index ea4db669f8..88664defbd 100644 --- a/projects/ston/index.js +++ b/projects/ston/index.js @@ -1,4 +1,4 @@ -const { post } = require('../helper/http') +const { get } = require('../helper/http') const { transformDexBalances } = require('../helper/portedTokens') const sdk = require('@defillama/sdk') @@ -7,12 +7,11 @@ module.exports = { timetravel: false, ton: { tvl: async () => { - const { result: {pools}} = await post('https://app.ston.fi/rpc', {"jsonrpc":"2.0","id":2,"method":"pool.list","params":{}}) - sdk.log(pools.length) + const result = await get("https://api.ston.fi/v1/pools?dex_v2=true") return transformDexBalances({ chain: 'ton', - data: pools.map(i => ({ + data: result.pool_list.map(i => ({ token0: i.token0_address, token1: i.token1_address, token0Bal: i.reserve0, From d50bc282eeace299406d2ee85886219e58b76ff9 Mon Sep 17 00:00:00 2001 From: Akarsh Maurya <57176420+Havoc19@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:05:03 +0700 Subject: [PATCH 1139/1768] Address black list (#12384) --- projects/velvet-capital-v3/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js index 532cba5dc3..4e748c2082 100644 --- a/projects/velvet-capital-v3/index.js +++ b/projects/velvet-capital-v3/index.js @@ -2,7 +2,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const config = { - base: { address: '0xf93659fb357899e092813bc3a2959ceDb3282a7f', blacklistedTokens: [ADDRESSES.bsc.USDT, "0x96af5739ca66ca55ab71ac9f308720d5044995ee"] }, + base: { address: '0xf93659fb357899e092813bc3a2959ceDb3282a7f', blacklistedTokens: [ADDRESSES.bsc.USDT, "0x96af5739ca66ca55ab71ac9f308720d5044995ee","0xca4f1536cd29d42bcbc8211f1b621ba9e817433f"]}, bsc: { address: '0xA1fe1C37Bf899C7F7521082C002dFA4fEbAaA8dd', blacklistedTokens: [ADDRESSES.optimism.WETH_1] } } From 30ca251fe36609cf280bd5fd7c235e5171bb0644 Mon Sep 17 00:00:00 2001 From: pixelcooker <155977639+pixelcooker@users.noreply.github.com> Date: Thu, 21 Nov 2024 19:06:39 +0800 Subject: [PATCH 1140/1768] feat: add chain data of goose-farm (#12381) Co-authored-by: rocker --- projects/goose-farm/index.js | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/projects/goose-farm/index.js b/projects/goose-farm/index.js index e529e28b34..3da68cd42f 100644 --- a/projects/goose-farm/index.js +++ b/projects/goose-farm/index.js @@ -1,13 +1,25 @@ -module.exports = { - bsc: { - tvl: async (api) => { - const vault = '0x0874f961178879cdbde3500544c49f864f232899' - const lpToken= await api.call({ abi: 'address:lpToken', target: vault}) - const token= await api.call({ abi: 'address:token', target: vault}) - const supply= await api.call({ abi: 'uint256:totalSupply', target: lpToken}) - const price= await api.call({ abi: 'uint256:price', target: lpToken}) - - api.addTokens(token, supply * price/1e18); - } +const chainList = [ + {symbol: 'bsc', address: '0x0874f961178879cdbde3500544c49f864f232899', decimals: 18,}, + {symbol: 'ethereum', address: '0xe8a01d8dac4af19ec7a22cf87f3d141ce6e7e9fb', decimals: 6}, + {symbol: 'arbitrum', address: '0x0874F961178879cDbDe3500544C49F864F232899', decimals: 6}, + {symbol: 'op_bnb', address: '0x857aB0b4F236F7DD7E5AC5F96C0bbEbF230c2D3B', decimals: 18}, +] + +const getTvl = async (api, chain) => { + const lpToken= await api.call({ abi: 'address:lpToken', target: chain.address}) + const token= await api.call({ abi: 'address:token', target: chain.address}) + const supply= await api.call({ abi: 'uint256:totalSupply', target: lpToken}) + const price= await api.call({ abi: 'uint256:price', target: lpToken}) + api.addTokens(token, supply * price/Math.pow(10, chain.decimals)); +} + +const tvlFunctions = chainList.reduce((acc, chain) => { + acc[chain.symbol] = { + tvl: async (api) => getTvl(api, chain) } + return acc; +}, {}); + +module.exports = { + ...tvlFunctions, }; \ No newline at end of file From 67de122cef78a34b296fca4e76a223c323e7e16d Mon Sep 17 00:00:00 2001 From: D <105202131+dmitrykarpushkin@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:07:15 +0400 Subject: [PATCH 1141/1768] Escrow update (#12380) --- projects/banx/index.js | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/projects/banx/index.js b/projects/banx/index.js index 02c5ddea41..f39198dd44 100644 --- a/projects/banx/index.js +++ b/projects/banx/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { Program, } = require("@project-serum/anchor"); +const { Program } = require('@coral-xyz/anchor'); const { getConfig } = require('../helper/cache') const { bs58 } = require('@project-serum/anchor/dist/cjs/utils/bytes'); const { getProvider } = require('../helper/solana') @@ -11,28 +11,26 @@ async function getData() { return data async function getAllData() { - const programId = '4tdmkuY6EStxbS6Y8s5ueznL3VPMSugrvQuDeAHGZhSt' const provider = getProvider() const idl = await getConfig('banx-idl', 'https://api.banx.gg/idl') - const program = new Program(idl, programId, provider) + const program = new Program(idl, provider) - const bondOfferOffset = 32 + 8; const bondTradeTxnOffset = 8; + const userVaultOffset = 8; const [ - bondOffers, bondTradeTxn, + userVaults, ] = await Promise.all([ - getFilteredAccounts(program, 'bondOfferV3', bondOfferOffset, [5, 7,]), - getFilteredAccounts(program, 'bondTradeTransactionV3', bondTradeTxnOffset, [2, 6, 9]), - ]) + getFilteredAccounts(program, 'bondTradeTransactionV3', bondTradeTxnOffset, [2, 6, 9, 13]), + getFilteredAccounts(program, 'userVault', userVaultOffset, [1]), + ]); - // OffersSum is sum of sol in pools not yet lent out. The borrowedSum is the sum of SOL which has been borrowed and overcollaterized by the value of locked NFTs - const { offersSum, offersSumUsdc } = bondOffers.reduce(({ offersSum, offersSumUsdc }, offer) => { - if (offer.account.bondingCurve.bondingType.linearUsdc || offer.account.bondingCurve.bondingType.exponentialUsdc) { - return { offersSumUsdc: offersSumUsdc + (+offer.account.fundsSolOrTokenBalance) + Math.max(0, +offer.account.bidSettlement), offersSum }; + const { escrowSum, escrowSumUsdc } = userVaults.reduce(({ escrowSum, escrowSumUsdc }, userVault) => { + if (userVault.account.lendingTokenType.usdc) { + return { escrowSum, escrowSumUsdc: escrowSumUsdc + (+userVault.account.offerLiquidityAmount) } } - return { offersSum: offersSum + (+offer.account.fundsSolOrTokenBalance) + Math.max(0, +offer.account.bidSettlement), offersSumUsdc }; - }, { offersSum: 0, offersSumUsdc: 0 }); + return { escrowSum: escrowSum + (+userVault.account.offerLiquidityAmount), escrowSumUsdc } + }, { escrowSum: 0, escrowSumUsdc: 0 }) const { borrowedSum, borrowedSumUsdc } = bondTradeTxn.reduce(({ borrowedSum, borrowedSumUsdc }, bondTxn) => { if (bondTxn.account.lendingToken.usdc) { @@ -42,7 +40,7 @@ async function getData() { }, { borrowedSum: 0, borrowedSumUsdc: 0 }); - return { tvl: offersSum, tvlUsdc: offersSumUsdc, borrowed: borrowedSum, borrowedUsdc: borrowedSumUsdc } + return { tvl: escrowSum, tvlUsdc: escrowSumUsdc, borrowed: borrowedSum, borrowedUsdc: borrowedSumUsdc } } } From c01a05adf511b65e0caea9c65fcb27ee76958528 Mon Sep 17 00:00:00 2001 From: Snape <76953546+Snape888@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:25:27 +0000 Subject: [PATCH 1142/1768] mortgageFiTVL (#12383) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/mortgageFi/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/mortgageFi/index.js diff --git a/projects/mortgageFi/index.js b/projects/mortgageFi/index.js new file mode 100644 index 0000000000..72d359817d --- /dev/null +++ b/projects/mortgageFi/index.js @@ -0,0 +1,17 @@ +const config = { + arbitrum: { pools: ['0x9Be2Cf73E62DD3b5dF4334D9A36888394822A33F'] }, + base: { pools: ['0x1bE87D273d47C3832Ab7853812E9A995A4DE9EEA'] }, +} + +Object.keys(config).forEach(chain => { + const { pools, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const cTokens = await api.multiCall({ abi: 'address:contractCoin', calls: pools }) + const sTokens = await api.multiCall({ abi: 'address:stablecoin', calls: pools }) + const tokens = cTokens.concat(sTokens) + const owners = pools.concat(pools) + return api.sumTokens({ tokensAndOwners2: [tokens, owners] }) + } + } +}) \ No newline at end of file From b6c18409f35aa21388dbc32fab3a8d644c140170 Mon Sep 17 00:00:00 2001 From: eth_sign Date: Thu, 21 Nov 2024 19:59:32 +0530 Subject: [PATCH 1143/1768] feat: adding lucidly vaults tvl adapter (#12386) --- projects/lucidly/index.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/projects/lucidly/index.js b/projects/lucidly/index.js index 1f8326f6de..2934990891 100644 --- a/projects/lucidly/index.js +++ b/projects/lucidly/index.js @@ -1,15 +1,18 @@ async function tvl(api) { - const pools = [ - '0x8dBE744F6558F36d34574a0a6eCA5A8dAa827235', - ] - const tokens = await api.fetchList({ lengthAbi: 'numTokens', itemAbi: 'tokens', calls:pools, groupedByInput: true, }) - console.log(tokens) - const ownerTokens = pools.map((v, i) => [tokens[i], v]) - return api.sumTokens({ ownerTokens }) + const registryAddress = '0x3C2A24c9296eC8B1fdb8039C937DaC7CBca3976c'; + + const pools = await api.call({ + abi: 'function getPoolAddresses() view returns (address[])', + target: registryAddress, + }); + + const tokens = await api.fetchList({ lengthAbi: 'numTokens', itemAbi: 'tokens', calls: pools, groupedByInput: true, }) + const ownerTokens = pools.map((v, i) => [tokens[i], v]) + return api.sumTokens({ ownerTokens }) } module.exports = { - start: 1693971707, - ethereum: { tvl } + start: 1693971707, + ethereum: { tvl } }; From 27b1d88f5b4d49cb8baf53d788fc0dbb19a7da06 Mon Sep 17 00:00:00 2001 From: gravymcstrut <165300338+gravymcstrut@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:30:43 +0300 Subject: [PATCH 1144/1768] add acet adapter (#12385) Co-authored-by: gravymcstrut --- projects/acet/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/acet/index.js diff --git a/projects/acet/index.js b/projects/acet/index.js new file mode 100644 index 0000000000..68378f6005 --- /dev/null +++ b/projects/acet/index.js @@ -0,0 +1,19 @@ +const stakingAccounts = [ + "0x64D2C3a33F5bc09Dc045f9A20fA4cA4f42215c0b", + "0xfb62ea552eeba8b00cc5db56ba8d7c50429c0001", + "0x38506a479E8959150466cE9253c19089fd0907D7", +]; + +const token = "0x9F3BCBE48E8b754F331Dfc694A894e8E686aC31D"; + +module.exports = { + bsc: { + tvl: async () => ({}), + staking: async (api) => { + return api.sumTokens({ + tokensAndOwners: stakingAccounts.map((account) => [token, account]), + }); + }, + }, +}; + \ No newline at end of file From 4f24eb9e1078a6666a6056740a27ff5bd95b1a04 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:07:46 +0000 Subject: [PATCH 1145/1768] btc-bitlayer (#12387) --- projects/bitlayer-btc/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/bitlayer-btc/index.js diff --git a/projects/bitlayer-btc/index.js b/projects/bitlayer-btc/index.js new file mode 100644 index 0000000000..a41fda2005 --- /dev/null +++ b/projects/bitlayer-btc/index.js @@ -0,0 +1,22 @@ +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); + +const owners = [ + "132Cka5Vdw9FcFX3eb28xikKAMvhuMJGwi", + "3JszuRdFFEz1WbQKam4XjAtnZsYX62RLMX", + "33uhW878fbvVxZuZ216q2XvgdajLdG4rN4", + "32a7u8tM45GPSdjzy7PbRvuncEvHFxnYR4", + "3D3a4fPJ5HKw43Qd6QHtoJ6RvMUL7UBDT5", + "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2", + "bc1p87c2auxxj372evzhd5f5huddtrladtkn3z4p94ew32qvwcsgujestjj45r", + "bc1puqn6dw6etk6yg8zruvf2s94cmhxkfncsaumwhtfhu5qy3e6m94sq37eq66", + "bc1pvnh3zy48ml3nhzhqrtc7endhj9rrtrv5puy2775p3jwka8y99aqsz78uu2", + "bc1pxpp82hc4t4flkyqtjdnzr3q72qh9st78gfge50vzlrjtp9c6yn4s5zq5vk", + "bc1p7agkadaau66jtva9n8k5pg3lsctuyqur8a2l5y9hzwqkh5nlmd0skuhws3", +]; + +module.exports = { + bitcoin: { + tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: owners })]), + }, +}; From afbfe81468fab008181f90d46bb5586b9eef19ca Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:19:49 +0100 Subject: [PATCH 1146/1768] bitlayter bridge: code refactor --- projects/bitlayer-btc/index.js | 18 ++---------------- .../helper/bitcoin-book/bitlayer-bridge.js | 13 +++++++++++++ projects/helper/bitcoin-book/index.js | 2 ++ 3 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 projects/helper/bitcoin-book/bitlayer-bridge.js diff --git a/projects/bitlayer-btc/index.js b/projects/bitlayer-btc/index.js index a41fda2005..5a6957f6e9 100644 --- a/projects/bitlayer-btc/index.js +++ b/projects/bitlayer-btc/index.js @@ -1,22 +1,8 @@ -const sdk = require("@defillama/sdk"); const { sumTokensExport } = require("../helper/sumTokens"); - -const owners = [ - "132Cka5Vdw9FcFX3eb28xikKAMvhuMJGwi", - "3JszuRdFFEz1WbQKam4XjAtnZsYX62RLMX", - "33uhW878fbvVxZuZ216q2XvgdajLdG4rN4", - "32a7u8tM45GPSdjzy7PbRvuncEvHFxnYR4", - "3D3a4fPJ5HKw43Qd6QHtoJ6RvMUL7UBDT5", - "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2", - "bc1p87c2auxxj372evzhd5f5huddtrladtkn3z4p94ew32qvwcsgujestjj45r", - "bc1puqn6dw6etk6yg8zruvf2s94cmhxkfncsaumwhtfhu5qy3e6m94sq37eq66", - "bc1pvnh3zy48ml3nhzhqrtc7endhj9rrtrv5puy2775p3jwka8y99aqsz78uu2", - "bc1pxpp82hc4t4flkyqtjdnzr3q72qh9st78gfge50vzlrjtp9c6yn4s5zq5vk", - "bc1p7agkadaau66jtva9n8k5pg3lsctuyqur8a2l5y9hzwqkh5nlmd0skuhws3", -]; +const { bitlayerBridge } = require("../helper/bitcoin-book"); module.exports = { bitcoin: { - tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: owners })]), + tvl: sumTokensExport({ owners: bitlayerBridge }) }, }; diff --git a/projects/helper/bitcoin-book/bitlayer-bridge.js b/projects/helper/bitcoin-book/bitlayer-bridge.js new file mode 100644 index 0000000000..85e16abf14 --- /dev/null +++ b/projects/helper/bitcoin-book/bitlayer-bridge.js @@ -0,0 +1,13 @@ +module.exports = [ + "132Cka5Vdw9FcFX3eb28xikKAMvhuMJGwi", + "3JszuRdFFEz1WbQKam4XjAtnZsYX62RLMX", + "33uhW878fbvVxZuZ216q2XvgdajLdG4rN4", + "32a7u8tM45GPSdjzy7PbRvuncEvHFxnYR4", + "3D3a4fPJ5HKw43Qd6QHtoJ6RvMUL7UBDT5", + "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2", + "bc1p87c2auxxj372evzhd5f5huddtrladtkn3z4p94ew32qvwcsgujestjj45r", + "bc1puqn6dw6etk6yg8zruvf2s94cmhxkfncsaumwhtfhu5qy3e6m94sq37eq66", + "bc1pvnh3zy48ml3nhzhqrtc7endhj9rrtrv5puy2775p3jwka8y99aqsz78uu2", + "bc1pxpp82hc4t4flkyqtjdnzr3q72qh9st78gfge50vzlrjtp9c6yn4s5zq5vk", + "bc1p7agkadaau66jtva9n8k5pg3lsctuyqur8a2l5y9hzwqkh5nlmd0skuhws3", +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index f3ac166bc3..0db660450d 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -83,6 +83,7 @@ const swissborg = require('./swissborg.js') const toobit = require('./toobit.js') const indiaCovid = require('./india-covid.js') const wooCEX = require('./woo-cex.js') +const bitlayerBridge = require('./bitlayer-bridge.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -95,6 +96,7 @@ const teleswap = [ module.exports = { ...fetchers, + bitlayerBridge, teleswap, ainn, allo, From d976342fc9b8c01009dbadacfab6d497a056ae8b Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 21 Nov 2024 15:39:49 +0000 Subject: [PATCH 1147/1768] add WSHIDO token --- projects/helper/tokenMapping.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index aec72e10f5..6c7556ebd4 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -49,6 +49,9 @@ const fixBalancesTokens = { '0x796ea11fa2dd751ed01b53c372ffdb4aaa8f00f9': { coingeckoId: "usd-coin", decimals: 6 }, '0x2c03058c8afc06713be23e58d2febc8337dbfe6a': { coingeckoId: "tether", decimals: 6 }, '0xfc24f770f94edbca6d6f885e12d4317320bcb401': { coingeckoId: "weth", decimals: 18 }, + }, + shido: { + '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: "shido-2", decimals: 18 } // WSHIDO } } From f1a265f42dd38cdf9a9e11d617947d396a391d99 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:10:44 +0100 Subject: [PATCH 1148/1768] fix pluto-so --- projects/pluto-so/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pluto-so/index.js b/projects/pluto-so/index.js index 0c593616dd..0fa02757e8 100644 --- a/projects/pluto-so/index.js +++ b/projects/pluto-so/index.js @@ -39,7 +39,7 @@ async function earnTvl(api) { const vaultData = await pluto.account.vaultEarn.all() vaultData.forEach(({ publicKey, account }) => { if (publicKey.toString() === HNST_VAULT) return; - let unit = account.unitSupply.toString() / 1e8 + let unit = (account.unitSupply.toNumber() - account.unitBorrowed.toNumber()) / 1e8 let index = account.index.toString() / 1e12 let amount = unit * index api.add(account.tokenMint.toString(), amount * (10 ** account.tokenDecimal)); From 2e88ca18f29b063dedab80a1dbfacc32f71cb249 Mon Sep 17 00:00:00 2001 From: Diyahir <32445955+diyahir@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:30:58 -0600 Subject: [PATCH 1149/1768] Add fluid protocol (#12388) --- projects/fluid-protocol/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/fluid-protocol/index.js diff --git a/projects/fluid-protocol/index.js b/projects/fluid-protocol/index.js new file mode 100644 index 0000000000..d9537addb7 --- /dev/null +++ b/projects/fluid-protocol/index.js @@ -0,0 +1,12 @@ +const { sumTokens } = require("../helper/chain/fuel") + +async function tvl(api) { + const contractId = '0xb18340bfe68c0b3a4fbd3a3ae2c014be94c16569b7f360cf53efe1b7023e545e' + + return sumTokens({ api, owner: contractId }) +} + +module.exports = { + fuel: { tvl }, + timetravel: false, +} From fbae322e085a3cd9228f8f3ef24b7a4d91f34c4b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:52:03 +0100 Subject: [PATCH 1150/1768] update pumpbtc #12379 --- projects/helper/tokenMapping.js | 17 ++++++++++++++++- projects/pumpbtc/index.js | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 6c7556ebd4..dc017774ec 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -52,7 +52,22 @@ const fixBalancesTokens = { }, shido: { '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: "shido-2", decimals: 18 } // WSHIDO - } + }, + ethereum: { + '0x777B2913b1BB171A83cA3cdf79CB40523Ac76fDb': { coingeckoId: "ignition-fbtc", decimals: 8 }, + }, + arbitrum: { + '0xbbeb34F9d50e0BABe1bd03Fd4120296354510529': { coingeckoId: "ignition-fbtc", decimals: 8 }, + }, + bsc: { + '0x2B25f4F134a56054b2b6388C2750F1eA3877e02b': { coingeckoId: "ignition-fbtc", decimals: 8 }, + }, + mantle: { + '0x93C6afA1882ea5E5bF403cA8fcb5aF87409EeCd0': { coingeckoId: "ignition-fbtc", decimals: 8 }, + }, + bob: { + '0xd681C5574b7F4E387B608ed9AF5F5Fc88662b37c': { coingeckoId: "ignition-fbtc", decimals: 8 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index 673c987723..d1419a37c5 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -2,6 +2,7 @@ const { sumTokens } = require('../helper/sumTokens'); const utils = require('../helper/utils'); const { getConfig } = require('../helper/cache'); const bitcoinBook = require('../helper/bitcoin-book'); +const { sumTokens2 } = require('../helper/unwrapLPs'); module.exports = { methodology: 'TVL for pumpBTC is calculated based on the total value of WBTC, FBTC, BTCB held in the contract that were utilized in the minting process of pumpBTC.', @@ -11,7 +12,6 @@ async function getStakingAddresses() { let res = await utils.fetchURL('https://dashboard.pumpbtc.xyz/api/dashboard/asset/tokenowners') const btcAddresses = res.data.data || {} - //console.log('>>', btcAddresses.length) return btcAddresses } @@ -28,7 +28,7 @@ async function otherTvl(api) { } const { owners, tokens } = addresses[api.chain] - return api.sumTokens({ owners, tokens }) + return sumTokens2({ api, owners, tokens }) } module.exports.isHeavyProtocol = true; From c56e85dc703416db847a0c0b13f8f290160ba806 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 22 Nov 2024 10:39:46 +0100 Subject: [PATCH 1151/1768] refactor ipor #12389 --- projects/ipor/index.js | 64 ++++++------------------------------------ 1 file changed, 9 insertions(+), 55 deletions(-) diff --git a/projects/ipor/index.js b/projects/ipor/index.js index 205d49c2d5..11b43e51c9 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -1,4 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { abi } = require("./abi"); const { getConfig } = require('../helper/cache') @@ -14,68 +13,23 @@ async function tvlEthereum(api) { return await calculateTvlForV1(api); } } -async function tvlArbitrum(api) { - const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); - - const assets = [ - ADDRESSES.arbitrum.USDC_CIRCLE, // USDC - ] - - const res = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: addresses.arbitrum.IporProtocolRouter }) - const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) - - res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { - const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool - const decimal = 18 - decimals[i] - api.add(assets[i], balance / (10 ** decimal)) - }); - - for (const pool of addresses.arbitrum.pools) { - if (assets.includes(pool.asset)) { - continue; - } - await api.sumTokens({owner: pool.AmmTreasury, tokens: [pool.asset]}); - } - return api.getBalances(); -} - -async function tvlBase(api) { - const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); - - const assets = [ - ADDRESSES.base.USDC, // USDC - ] - - const res = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: addresses.base.IporProtocolRouter }) - const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) - - res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { - const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool - const decimal = 18 - decimals[i] - api.add(assets[i], balance / (10 ** decimal)) - }); - const tokensAndOwners = addresses.base.pools.map(pool => [pool.asset, pool.AmmTreasury]); - return api.sumTokens({ tokensAndOwners, blacklistedTokens: assets }); -} async function calculateTvlForV2(api) { - const addresses = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL) + const chain = api.chain + const {[chain]: { IporProtocolRouter, pools, vaults }} = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL) - const assets = [ - ADDRESSES.ethereum.USDT, // USDT - ADDRESSES.ethereum.USDC, // USDC - ADDRESSES.ethereum.DAI, // DAI - ] + let assets = vaults.map(i => i.asset) + assets = [...new Set(assets)] - const res = await api.multiCall({ abi: abi.getAmmBalance, calls: assets, target: addresses.ethereum.IporProtocolRouter }) + const res = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: IporProtocolRouter }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) - res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, vault }, i) => { + res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, }, i) => { const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool const decimal = 18 - decimals[i] api.add(assets[i], balance / (10 ** decimal)) }); - const tokensAndOwners = addresses.ethereum.pools.map(pool => [pool.asset, pool.AmmTreasury]); + const tokensAndOwners = pools.map(pool => [pool.asset, pool.AmmTreasury]); return api.sumTokens({ tokensAndOwners, blacklistedTokens: assets }); } @@ -104,10 +58,10 @@ module.exports = { tvl: tvlEthereum }, arbitrum: { - tvl: tvlArbitrum + tvl: calculateTvlForV2 }, base: { - tvl: tvlBase + tvl: calculateTvlForV2 }, hallmarks:[ [1674648000, "Liquidity Mining Start"] From 22bde959c7f07d4ad0cd93ff0eaa21c492db339d Mon Sep 17 00:00:00 2001 From: sofa-org <161308389+sofa-org@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:45:19 +0800 Subject: [PATCH 1152/1768] add more vaults (#12393) --- projects/sofa-org/index.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/projects/sofa-org/index.js b/projects/sofa-org/index.js index 9f38c147d1..ca253f321c 100644 --- a/projects/sofa-org/index.js +++ b/projects/sofa-org/index.js @@ -45,6 +45,19 @@ const config = { '0x3191a0008415dEB5c5161C4B394Ec46C8C703f8c', '0xC9Aa266e2E50EC2474cD881566845480F8daE931', ], + // scrvusd + crvtokens: [ + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367' + ], + crvUSDVaults: [ + '0xF5BF8aa4b571FF2Be9905289bfcEbC1D46408D9F', + '0x9832e7E40d5a1495cA7bdbCd6A5C0A90D28F6cFA', + '0x99595455Ba95b286F8e2614470b865e34f034Aa1', + '0xf421B050647CF6eB757dE873F212e04a5e324487', + ], }, arbitrum: { vaults: [ @@ -85,6 +98,15 @@ const config = { '0x94Fe821E8Adde08aB97530D432Ff34A724FD7830', '0x4a5B4049a4aFae31278d36768704872f73dA67D1', '0x08c57aE48a89b6876A76dC618972Ef1602da7ED8', + // automator + '0x986Fa0383C39dBdA1B3A29Ac536fe5Df354Ed160', + '0x770f7fcEce69C68B208B80bBc4e3d1Bf8f9c0672', + '0x1e5A684d263F42BaC1f2bAd6fB379277D4D6c28C', + '0xBF898C0C2E7d415dE8FCcc78d1200D029a060560', + ], + crvtokens: [ + ], + crvUSDVaults: [ ], }, bsc: { @@ -101,18 +123,23 @@ const config = { '0xD0fb7977df47d7Fe946A21679DAbCe877f7A3a05', '0xab08fF5dd91636fE556f692825Cadd7bA04A4c97', ], + crvtokens: [ + ], + crvUSDVaults: [ + ], } } Object.keys(config).forEach(chain => { - const { vaults = [], aVaults = [] } = config[chain] + const { vaults = [], aVaults = [], crvtokens = [], crvUSDVaults = [] } = config[chain] module.exports[chain] = { tvl: async (api) => { const tokens = await api.multiCall({ abi: 'address:collateral', calls: vaults }) const tokens2 = await api.multiCall({ abi: 'address:collateral', calls: aVaults }) const atokens = await api.multiCall({ abi: 'address:aToken', calls: aVaults }) - return api.sumTokens({ tokensAndOwners2: [[tokens, tokens2, atokens].flat(), [vaults, aVaults, aVaults].flat()] }) + + return api.sumTokens({ tokensAndOwners2: [[tokens, tokens2, atokens, crvtokens].flat(), [vaults, aVaults, aVaults, crvUSDVaults].flat()] }) } } }) From 1d95cb7f9d0bb30158c2a620600055837d0bf5ca Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:32:06 +0100 Subject: [PATCH 1153/1768] solayer (#12397) Co-authored-by: Joshua Sum Co-authored-by: Joshua Sum <58564538+JoshuaSum@users.noreply.github.com> --- projects/helper/solana.js | 10 ++++++++++ projects/solayer-ssol/index.js | 34 ++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 872c05708d..67fbc7ca8a 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -62,6 +62,15 @@ function getProvider(chain = 'solana') { return provider[chain] } + +function getAssociatedTokenAddress(mint, owner,) { + if (typeof mint === 'string') mint = new PublicKey(mint) + if (typeof owner === 'string') owner = new PublicKey(owner) + const [associatedTokenAddress] = PublicKey.findProgramAddressSync([owner.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()], ASSOCIATED_TOKEN_PROGRAM_ID); + return associatedTokenAddress; +} + + async function getTokenSupplies(tokens, { api } = {}) { const sleepTime = tokens.length > 2000 ? 2000 : 200 const connection = getConnection() @@ -414,4 +423,5 @@ module.exports = { TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, + getAssociatedTokenAddress, }; diff --git a/projects/solayer-ssol/index.js b/projects/solayer-ssol/index.js index 4d3ecdb86d..9ebc1a0a63 100644 --- a/projects/solayer-ssol/index.js +++ b/projects/solayer-ssol/index.js @@ -1,22 +1,44 @@ -const { sumTokens2, getConnection, } = require("../helper/solana"); +const { sumTokens2, getConnection, getAssociatedTokenAddress, } = require("../helper/solana"); const { PublicKey } = require("@solana/web3.js"); const ADDRESSES = require('../helper/coreAssets.json') async function tvl(api) { const connection = getConnection(); - // add native SOL staking for sSOL + // add native SOL staking const stakeAccount = await connection.getAccountInfo(new PublicKey('po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2')) api.add(ADDRESSES.solana.SOL, Number(stakeAccount.data.readBigUint64LE(258))) + // get LST details + const data = await connection.getProgramAccounts(new PublicKey('sSo1iU21jBrU9VaJ8PJib1MtorefUV4fzC9GURa2KNn'), { + filters: [{ dataSize: 74, },], + }) + + // Build list of token accounts by deriving ATAs for each LST-vault pair + const tokenAccounts = data.map((i) => { + const offset = 8 + const lstMint = new PublicKey(i.account.data.slice(offset + 0, offset + 32)); + const vaultPubkey = new PublicKey(i.pubkey.toString()); + + // Derive the ATA for this LST and vault + const ata = getAssociatedTokenAddress(lstMint, vaultPubkey); + + return ata.toString() + }); + + return sumTokens2({ - balances: api.getBalances() + api, + tokenAccounts, + blacklistedTokens: [ + 'sSo1wxKKr6zW2hqf5hZrp2CawLibcwi1pMBqk5bg2G4', + 'testqcAoCvfFpuFNtdmrBnBMSfFoXKkSTJ3ky6cPKjx', + ] }) } module.exports = { timetravel: false, - doublecounted: true, - methodology: "TVL is calculated by restaked native SOL in the Solayer staking pool", + methodology: "TVL is calculated by summing all re-staked assets.", solana: { tvl }, -}; \ No newline at end of file +}; From 48c282bfb12a5168105b68ce429a357bdb8ead5d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:38:47 +0100 Subject: [PATCH 1154/1768] track pv01 #12365 --- projects/pv01/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/pv01/index.js diff --git a/projects/pv01/index.js b/projects/pv01/index.js new file mode 100644 index 0000000000..8f64d3c0e8 --- /dev/null +++ b/projects/pv01/index.js @@ -0,0 +1,21 @@ +const PV01_VAULT_FACTORY_ETHEREUM = '0x7eB37F9326E2474D5178Fd5224bc35E30A5398B5'; +const abi = { + getVaults: "function getVaults(string type_) view returns (address[])" +}; + +async function tvl(api) { + // Fetch the list of vaults from the factory + const vaults = await api.call({ abi: abi.getVaults, target: PV01_VAULT_FACTORY_ETHEREUM, params: ['BondPerpetualVault'] }); + // Fetch total supply for each vault + const supplies = await api.multiCall({ abi: "erc20:totalSupply", calls: vaults, }); + api.add(vaults, supplies) +} + +module.exports = { + methodology: + "Counts the total supply of rTBL (Rolling T-bill) tokens across all PV01 perpetual bond vaults.", + start: 20377028, + ethereum: { + tvl, + }, +}; From 475ac0131ac39a47f33e20c2432202bf61061a54 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:53:17 +0100 Subject: [PATCH 1155/1768] fix aleph bridge --- projects/alephium-bridge/index.js | 42 ++++++++++++++++++------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/projects/alephium-bridge/index.js b/projects/alephium-bridge/index.js index 383fcf0f4d..4fc07c5cdc 100644 --- a/projects/alephium-bridge/index.js +++ b/projects/alephium-bridge/index.js @@ -7,31 +7,37 @@ const ethBridgedAlphAddress = '0x590f820444fa3638e022776752c5eef34e2f89a6' const bscTokenBridgeAddress = '0x2971F580C34d3D584e0342741c6a622f69424dD8' const bscBridgedAlphAddress = '0x8683BA2F8b0f69b2105f26f488bADe1d3AB4dec8' -async function tvl(ts, block) { - const ethTotalBridgedAlphSupply = await sdk.api.erc20.totalSupply({ target: ethBridgedAlphAddress, block, chain: 'ethereum' }) - const bscTotalBridgedAlphSupply = await sdk.api.erc20.totalSupply({ target: bscBridgedAlphAddress, block, chain: 'bsc' }) - return { - alephium: (ethTotalBridgedAlphSupply.output / 1e18) + (bscTotalBridgedAlphSupply.output / 1e18), - } +async function tvl(api) { + const ethApi = new sdk.ChainApi({ chain: 'ethereum', timestamp: api.timestamp }) + const bscApi = new sdk.ChainApi({ chain: 'bsc', timestamp: api.timestamp }) + await ethApi.getBlock() + await bscApi.getBlock() + const ethBal = await ethApi.call({ abi: 'erc20:totalSupply', target: ethBridgedAlphAddress }) + const bscBal = await bscApi.call({ abi: 'erc20:totalSupply', target: bscBridgedAlphAddress }) + api.addCGToken('alephium', (+ethBal + +bscBal) / 1e18) } module.exports = { methodology: "Tracks funds locked in the Alephium Bridge Token contracts on Ethereum and Binance Smart Chain", ethereum: { - tvl: sumTokensExport({ owner: ethTokenBridgeAddress, tokens: [ - ADDRESSES.ethereum.WETH, - ADDRESSES.ethereum.USDT, - ADDRESSES.ethereum.USDC, - ADDRESSES.ethereum.WBTC, - ADDRESSES.ethereum.DAI - ] }), + tvl: sumTokensExport({ + owner: ethTokenBridgeAddress, tokens: [ + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.DAI + ] + }), }, bsc: { - tvl: sumTokensExport({ owner: bscTokenBridgeAddress, tokens: [ - ADDRESSES.bsc.WBNB, - ADDRESSES.bsc.USDC, - ADDRESSES.bsc.USDT - ] }), + tvl: sumTokensExport({ + owner: bscTokenBridgeAddress, tokens: [ + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.USDT + ] + }), }, alephium: { tvl From 3167014c77dd3c8be52ff045e668ddf34a47b001 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 22 Nov 2024 11:48:23 +0000 Subject: [PATCH 1156/1768] fix ondo --- projects/ondofinance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ondofinance/index.js b/projects/ondofinance/index.js index 4618e1e782..2b4705d921 100644 --- a/projects/ondofinance/index.js +++ b/projects/ondofinance/index.js @@ -70,7 +70,7 @@ Object.keys(config).forEach((chain) => { api.addTokens(config.ethereum.USDY, aptosSupply * 1e18, { skipChain: true, }); } else if (chain === "noble") { - const res = await get(`https://noble-api.polkachu.com/cosmos/bank/v1beta1/supply/${config.noble.USDY}`); + const res = await get(`https://rest.cosmos.directory/noble/cosmos/bank/v1beta1/supply/by_denom?denom=ausdy`); api.addTokens(config.ethereum.USDY, parseInt(res.amount.amount), { skipChain: true, }); } else { supplies = await api.multiCall({ abi: "erc20:totalSupply", calls: fundAddresses, }) From ebec7905f748afa4536b693f76c4436faa93f0d1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 22 Nov 2024 22:11:02 +0100 Subject: [PATCH 1157/1768] Cytonic (#12407) Co-authored-by: GooGrand Co-authored-by: GooGrand <55867268+GooGrand@users.noreply.github.com> --- projects/cytonic/index.js | 149 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 projects/cytonic/index.js diff --git a/projects/cytonic/index.js b/projects/cytonic/index.js new file mode 100644 index 0000000000..cb9e01c15f --- /dev/null +++ b/projects/cytonic/index.js @@ -0,0 +1,149 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); +const { getProvider, sumTokens2, } = require("../helper/solana"); +const { Program } = require("@project-serum/anchor"); +const idl = { + "version": "0.1.0", + "name": "depositor", + "instructions": [], + "accounts": [ + { + "name": "VaultData", + "docs": [ + "Vault is a instance that holds general deposit data for a particular token", + "It is also responsible for freezing and migrating funds", + "When program receives funds, they are send on vault data's account's ATA" + ], + "type": { + "kind": "struct", + "fields": [ + { "name": "owner", "type": "publicKey" }, + { "name": "mint", "type": "publicKey" }, + { "name": "vaultAta", "type": "publicKey" }, + { "name": "withdrawDuration", "type": "u64" }, + { "name": "isFrozen", "type": "bool" }, + { "name": "totalDeposited", "type": "u64" }, + { "name": "bump", "type": "u8" }, + { "name": "allowedForPurchase", "type": "bool" }, + { "name": "purchaseRecepientAta", "type": "publicKey" }, + { "name": "admin", "type": "publicKey" } + ] + } + } + ], + "types": [], + "events": [], + "errors": [] +} + + +const BRIDGE_DEPOSITOR_EVM = '0xaEA5Bf79F1E3F2069a99A99928927988EC642e0B'; +const BRIDGE_DEPOSITOR_SOL = 'HYDqq5GfUj4aBuPpSCs4fkmeS7jZHRhrrQ3q72KsJdD4'; + +async function sol_tvl() { + const provider = getProvider() + const program = new Program(idl, BRIDGE_DEPOSITOR_SOL, provider) + const tokenAccounts = (await program.account.vaultData.all()).map((a) => a.account.vaultAta); + return sumTokens2({ tokenAccounts }) +} + + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // ETH + ADDRESSES.ethereum.WBTC, // WBTC + ADDRESSES.ethereum.WETH, // WETH + "0xd31a59c85ae9d8edefec411d448f90841571b89c", // WSOL + ADDRESSES.ethereum.WSTETH, // Lido WSTETH + ADDRESSES.ethereum.EETH, // EETH + '0xd9a442856c234a39a81a089c06451ebaa4306a72', // pufETH + '0xf951e335afb289353dc249e82926178eac7ded78', // swETH + ADDRESSES.ethereum.USDT, // USDT + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.DAI, // DAI + '0xbf5495Efe5DB9ce00f80364C8B423567e58d2110', // ezETH + ADDRESSES.ethereum.USDe, // Ethena USD + ], + }), + }, + bsc: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // BNB + ADDRESSES.bsc.USDC, // USDC + ADDRESSES.bsc.USDT, // USDT + '0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3', // DAI + ], + }), + }, + arbitrum: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // ETH + ADDRESSES.arbitrum.USDC_CIRCLE, // USDC + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.arbitrum.DAI, // DAI + ADDRESSES.optimism.ezETH, // ezETH + ], + }), + }, + base: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // ETH + ADDRESSES.base.USDC, // USDC + ], + }), + }, + polygon: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // POL + ADDRESSES.polygon.USDC, // USDC + ADDRESSES.polygon.USDT, // USDT + ADDRESSES.polygon.DAI, // DAI + ], + }), + }, + avax: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // AVA + ADDRESSES.avax.USDC, // USDC + ADDRESSES.avax.USDt, // USDT + ADDRESSES.avax.DAI, // DAI + ], + }), + }, + optimism: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // ETH + ADDRESSES.optimism.USDC_CIRCLE, // USDC + ADDRESSES.optimism.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI + ], + }), + }, + blast: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // ETH + ADDRESSES.blast.USDB, // USDB + ], + }), + }, + solana: { + tvl: sol_tvl + } +} \ No newline at end of file From ec2a5f118eacfe8bea5fc4f31202f870f5b7c8f9 Mon Sep 17 00:00:00 2001 From: KevinMoll-ls <35275573+KevinMoll-ls@users.noreply.github.com> Date: Fri, 22 Nov 2024 16:15:21 -0500 Subject: [PATCH 1158/1768] Reserve TVL Addresses update (#12400) --- projects/reserve/index.js | 45 +++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/projects/reserve/index.js b/projects/reserve/index.js index 3501fe68b5..7880018261 100644 --- a/projects/reserve/index.js +++ b/projects/reserve/index.js @@ -13,21 +13,34 @@ const chainConfigs = { deployerAddresses: [ "0xFd6CC4F251eaE6d02f9F7B41D1e80464D3d2F377", "0x5c46b718Cd79F2BBA6869A3BeC13401b9a4B69bB", + "0x1bd20253c49515d348dad1af70ff2c0473fea358", "0x15480f5b5ed98a94e1d36b52dd20e9a35453a38e", "0x43587CAA7dE69C3c2aD0fb73D4C9da67A8E35b0b", + "0x2204ec97d31e2c9ee62ead9e6e2d5f7712d3f1bf" ], rsr: "0x320623b8E4fF03373931769A31Fc52A4E78B5d70", vault: "0xaedcfcdd80573c2a312d15d6bb9d921a01e4fb0f", fromBlock: 16680995, erc4626Wrapped: ["0xaa91d24c2f7dbb6487f61869cd8cd8afd5c5cab2"], + subgraph_url: "https://subgraph.satsuma-prod.com/327d6f1d3de6/reserve/reserve-mainnet/api", }, base: { deployerAddresses: [ "0xf1B06c2305445E34CF0147466352249724c2EAC1", "0x9C75314AFD011F22648ca9C655b61674e27bA4AC", + "0xfd18ba9b2f9241ce40cde14079c1cda1502a8d0a", ], rsr: "0xab36452dbac151be02b16ca17d8919826072f64a", fromBlock: 5000000, + subgraph_url: "https://subgraph.satsuma-prod.com/327d6f1d3de6/reserve/reserve-base/api", + }, + arbitrum: { + deployerAddresses: [ + "0xfd7eb6b208e1fa7b14e26a1fb10ffc17cf695d68" + ], + rsr: "0xCa5Ca9083702c56b481D1eec86F1776FDbd2e594", + fromBlock: 64464546, + subgraph_url: "https://subgraph.satsuma-prod.com/327d6f1d3de6/reserve/reserve-arbitrum/api", }, }; @@ -173,6 +186,10 @@ module.exports = { tvl, staking, }, + arbitrum: { + tvl, + staking, + }, methodology: `TVL accounts for the underlying ERC20 collateral which back RTokens.`, }; @@ -205,20 +222,26 @@ async function unwrapCreamTokens(api, tokensAndOwners,) { } async function genericUnwrapCvxDeposit(api, tokensAndOwners) { - const tokens = [...new Set(tokensAndOwners.map(t => t[0]))] - const uTokens = await api.multiCall({ abi: 'address:curveToken', calls: tokens }) - const tokenMapping = {} + if (!tokensAndOwners.length) return; + const tokens = [...new Set(tokensAndOwners.map((t) => t[0]))]; + const uTokens = await api.multiCall({ abi: "address:curveToken", calls: tokens, permitFailure: true }); + const tokenMapping = {}; tokens.forEach((token, i) => { - tokenMapping[token] = uTokens[i] - }) + if (uTokens[i]) { + tokenMapping[token] = uTokens[i]; + } + }); + // Filter out tokens without curveToken + const validTokensAndOwners = tokensAndOwners.filter((t) => tokenMapping[t[0]]); const balances = await api.multiCall({ - calls: tokensAndOwners.map(t => ({ + calls: validTokensAndOwners.map((t) => ({ target: t[0], - params: t[1] + params: t[1], })), - abi: 'erc20:balanceOf', - }) + abi: "erc20:balanceOf", + }); balances.forEach((balance, i) => { - api.add(tokenMapping[tokensAndOwners[i][0]], balance) - }) + const token = validTokensAndOwners[i][0]; + api.add(tokenMapping[token], balance); + }); } \ No newline at end of file From bacbfdc5b2511df6dbfc315f404cc92b75fe3a3c Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Fri, 22 Nov 2024 16:17:31 -0500 Subject: [PATCH 1159/1768] Added LSWAX token to 3 WAX projects (#12402) Co-authored-by: Mike D --- projects/alcor/index.js | 1 + projects/neftyblocks/index.js | 1 + projects/taco/index.js | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/alcor/index.js b/projects/alcor/index.js index f23d4dc835..b8b614282e 100644 --- a/projects/alcor/index.js +++ b/projects/alcor/index.js @@ -20,6 +20,7 @@ async function wax() { ["alien.worlds", "TLM", "alien-worlds"], ["token.rfox", "USD", "redfox-labs"], ["usdt.alcor", "USDT", "usdt-alcor"], + ["token.fusion", "LSWAX", "waxfusion-staked-wax"], ]; return await get_account_tvl(accounts, tokens, "wax"); } diff --git a/projects/neftyblocks/index.js b/projects/neftyblocks/index.js index b6f1fd65f8..252d393477 100644 --- a/projects/neftyblocks/index.js +++ b/projects/neftyblocks/index.js @@ -4,6 +4,7 @@ const tokens = [ ["eosio.token", "WAX", "wax"], ["alien.worlds", "TLM", "alien-worlds"], ["token.nefty", "NEFTY", "nefty"], + ["token.fusion", "LSWAX", "waxfusion-staked-wax"], ]; // NeftyBlocks diff --git a/projects/taco/index.js b/projects/taco/index.js index 79a2ccfdbf..b03c24affd 100644 --- a/projects/taco/index.js +++ b/projects/taco/index.js @@ -10,7 +10,8 @@ async function wax() { ["alien.worlds", "TLM", "alien-worlds"], ["usdt.alcor", "USDT", "alcor-ibc-bridged-usdt-wax"], ["wombattokens", "WOMBAT", "wombat"], - ["wuffi", "WUF", "wuffi"] + ["wuffi", "WUF", "wuffi"], + ["token.fusion", "LSWAX", "waxfusion-staked-wax"], ]; return await get_account_tvl(accounts, tokens, "wax"); } From 4409ecbac7f682dd71a1fbc30e3b343fa387bf94 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Fri, 22 Nov 2024 14:21:02 -0700 Subject: [PATCH 1160/1768] Avalon Labs: new markets for DeFi lending (#12404) --- projects/avalon-finance-usdalend/index.js | 4 +++- projects/avalon-finance/index.js | 12 +++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/projects/avalon-finance-usdalend/index.js b/projects/avalon-finance-usdalend/index.js index 1807c42393..25cc7ba8ce 100644 --- a/projects/avalon-finance-usdalend/index.js +++ b/projects/avalon-finance-usdalend/index.js @@ -5,7 +5,9 @@ const { mergeExports } = require('../helper/utils') //@note Main & Innovative Markets const mainMarket = { - iotex: aaveExports('', '', undefined, ['0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'], { v3: true }),} + iotex: aaveExports('', '', undefined, ['0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'], { v3: true }), +} + module.exports = mergeExports( mainMarket, diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 949e1b2397..d6169ff147 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -12,6 +12,8 @@ const mainMarket = { bsquared: aaveExports('', '', undefined, ['0x4Ea93E846b8C6E7b3D5a5BEDF4fe6B8AED58FCEe'], { v3: true }), taiko: aaveExports('', '', undefined, ['0xF6Aa54a5b60c324602C9359E8221423793e5205d'], { v3: true }), mode: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), + klaytn: aaveExports('', '', undefined, ['0xddD3D480521bc027596e078BCd1b838d50Daa076'], { v3: true }), // Kaia V3 Main + zeta: aaveExports('', '', undefined, ['0xA34F1a928024E3609C8968fEA90C747e8D1fA20f'], { v3: true }), // Zetachain V3 Main } const innovativeMarket = { @@ -68,7 +70,15 @@ const lbtcMarkets = { bsc: aaveExports('', '', undefined, ['0x5b9b3C211B81627Cc6b46824CB26829F31A587dc'], { v3: true }), } +const listaMarkets = { + bsc: aaveExports('', '', undefined, ['0x5157f63bE7808DEB090Eee7762e917745896A09E'], { v3: true }), // BSC - ListaDAO +} + +const usdaDefiMarkets = { + iotex: aaveExports('', '', undefined, ['0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'], { v3: true }), +} + module.exports = mergeExports( - mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets + mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, usdaDefiMarkets, ) module.exports.methodology = methodologies.lendingMarket From 0d579cd94aa7d6c80b066f6db3372255e93ccbd6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 22 Nov 2024 22:26:41 +0100 Subject: [PATCH 1161/1768] fix avalon --- projects/avalon-finance/index.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index d6169ff147..18c7ed309d 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -74,11 +74,7 @@ const listaMarkets = { bsc: aaveExports('', '', undefined, ['0x5157f63bE7808DEB090Eee7762e917745896A09E'], { v3: true }), // BSC - ListaDAO } -const usdaDefiMarkets = { - iotex: aaveExports('', '', undefined, ['0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'], { v3: true }), -} - module.exports = mergeExports( - mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, usdaDefiMarkets, + mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, ) module.exports.methodology = methodologies.lendingMarket From eb5baaa0c60416bb45ee1e731ed333a2f943edff Mon Sep 17 00:00:00 2001 From: troy Date: Fri, 22 Nov 2024 15:10:24 -0700 Subject: [PATCH 1162/1768] Synthetix V3: Update TVL (#12403) --- projects/synthetix-v3/index.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/projects/synthetix-v3/index.js b/projects/synthetix-v3/index.js index 168346a3d0..6c0afca10e 100644 --- a/projects/synthetix-v3/index.js +++ b/projects/synthetix-v3/index.js @@ -1,11 +1,22 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') +const CUSTOM_ADDRESSES = { + arbitrum: { + WEETH: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe", + sUSDe: "0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2", + tBTC: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40" + } +} + module.exports = { + ethereum: { + tvl: sumTokensExport({ owner: '0xffffffaEff0B96Ea8e4f94b2253f31abdD875847', tokens: [ADDRESSES.ethereum.SNX] }) + }, base: { tvl: sumTokensExport({ owner: '0x32C222A9A159782aFD7529c87FA34b96CA72C696', tokens: [ADDRESSES.base.USDC] }) }, arbitrum: { - tvl: sumTokensExport({ owner: '0xffffffaEff0B96Ea8e4f94b2253f31abdD875847', tokens: [ADDRESSES.arbitrum.USDC_CIRCLE, ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.ARB, ADDRESSES.arbitrum.USDe] }) + tvl: sumTokensExport({ owner: '0xffffffaEff0B96Ea8e4f94b2253f31abdD875847', tokens: [ADDRESSES.arbitrum.USDC_CIRCLE, ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.ARB, ADDRESSES.arbitrum.USDe, ADDRESSES.arbitrum.WSTETH, CUSTOM_ADDRESSES.arbitrum.WEETH, CUSTOM_ADDRESSES.arbitrum.sUSDe, CUSTOM_ADDRESSES.arbitrum.tBTC] }) } } From ae2a58058afecaf2a685e6f06f2e5ce198685a34 Mon Sep 17 00:00:00 2001 From: Sean Date: Sat, 23 Nov 2024 06:14:36 +0800 Subject: [PATCH 1163/1768] add ibtc and xsat chain (#12406) Co-authored-by: Sean Co-authored-by: 0xngmi <80541789+0xngmi@users.noreply.github.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 3 ++- projects/ibtc/index.js | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 projects/ibtc/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 0ef1a0a40b..06c355b3f3 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -357,5 +357,6 @@ "zklink", "zksync", "zora", - "zyx" + "zyx", + "xsat" ] diff --git a/projects/ibtc/index.js b/projects/ibtc/index.js new file mode 100644 index 0000000000..24fcdef49a --- /dev/null +++ b/projects/ibtc/index.js @@ -0,0 +1,13 @@ +const ibtcContract = "0x8154Aaf094c2f03Ad550B6890E1d4264B5DdaD9A"; + +async function tvl(api) { + // 1iBTC=1XBTC=1BTC(exsat)=1BTC + const ibtcTotalSupply = await api.call({ target: ibtcContract, abi: "uint256:totalSupply" }) + api.addCGToken('bitcoin', ibtcTotalSupply / 1e18) +} + +module.exports = { + xsat: { + tvl + }, +} From 650bb5a2c05697afddf8d0fa44551820dbbff97b Mon Sep 17 00:00:00 2001 From: Five Stars <146636499+fivestarsfi@users.noreply.github.com> Date: Sat, 23 Nov 2024 02:18:37 +0300 Subject: [PATCH 1164/1768] create syde adapter (#12398) --- projects/syde/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/syde/index.js diff --git a/projects/syde/index.js b/projects/syde/index.js new file mode 100644 index 0000000000..8becae7d9a --- /dev/null +++ b/projects/syde/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require("../helper/coreAssets.json"); + +const sydeBtcPool = "EQA2J0WCTdYdG-XeyMpPBTeu2dWB2f0oFiV4KVRfV0gewF4E" +const sydeEthPool = "EQD-7ycFO3yeh0EeT2wgXoOQmu64rdDBXqGm4nHDInPfCxJG" +const sydeEurPool = "EQDXvkuKPZahcTDRHSybwiU0E5VpiGFP2QS2iHr082JmtTT9" + +module.exports = { + methodology: 'Counts Syde smartcontract balance as TVL.', + ton: { + tvl: sumTokensExport({ owners: [sydeBtcPool, sydeEthPool, sydeEurPool], tokens: [ADDRESSES.null]}), + } +} From 293e0ae048e52a07fb589adec812db1c8dffb93c Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:30:48 +0800 Subject: [PATCH 1165/1768] Change the GitHub URL (#12409) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/helper/bitcoin-book/fetchers.js | 2 +- projects/solv-btc-lst/index.js | 3 ++- projects/solv-protocol-funds/index.js | 5 ++--- projects/solvbtc/index.js | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index 95e96f7b59..6a2e351d29 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -70,7 +70,7 @@ module.exports = { }) }, solvBTC: async () => { - const API_URL = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/refs/heads/main/bitcoin.json' + const API_URL = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/bitcoin.json' return Object.values(await getConfig('solv-protocol/solv-btc-lst', API_URL)).flat(); }, pumpBTC: async () => { diff --git a/projects/solv-btc-lst/index.js b/projects/solv-btc-lst/index.js index f7408ba341..3db1b19351 100644 --- a/projects/solv-btc-lst/index.js +++ b/projects/solv-btc-lst/index.js @@ -7,7 +7,7 @@ async function tvl() { } -const solvbtclstListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc-lst.json'; +const solvbtclstListUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solvbtc-lst.json'; async function evmTVL(api) { let solvbtclst = await getConfig('solv-protocol/solv-btc-lst-evm', solvbtclstListUrl) @@ -18,6 +18,7 @@ async function evmTVL(api) { module.exports = { methodology: 'Staked tokens via Babylon and Core are counted towards TVL, as they represent the underlying BTC assets securing their respective networks.', doublecounted: true, + timetravel: false, bitcoin: { tvl } } diff --git a/projects/solv-protocol-funds/index.js b/projects/solv-protocol-funds/index.js index c3347fc589..eaddedb068 100644 --- a/projects/solv-protocol-funds/index.js +++ b/projects/solv-protocol-funds/index.js @@ -16,7 +16,7 @@ const graphUrlList = { const slotListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/solv-protocol-rwa-slot/main/slot.json'; -const addressUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solv-funds.json'; +const addressUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solv-funds.json'; async function tvl(api) { const address = (await getConfig('solv-protocol/funds', addressUrl)); @@ -32,7 +32,7 @@ async function tvl(api) { await ceffuBalance(api, address, graphData); } -const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; +const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solvbtc.json'; async function getSolvBTCVAddresses(api) { let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); @@ -221,7 +221,6 @@ async function lendle(api, address) { async function vaultBalance(api, graphData) { const network = api.chain; - const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); if (graphData.pools.length > 0) { const poolLists = graphData.pools; diff --git a/projects/solvbtc/index.js b/projects/solvbtc/index.js index 405202021c..e8cfcd1456 100644 --- a/projects/solvbtc/index.js +++ b/projects/solvbtc/index.js @@ -2,7 +2,7 @@ const { getConfig } = require("../helper/cache"); const { sumTokens2, } = require("../helper/unwrapLPs"); const { sumTokens } = require("../helper/chain/bitcoin"); -const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solvbtc.json'; +const solvbtcListUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solvbtc.json'; async function bitcoinTvl(api) { let solvbtc = (await getConfig('solv-protocol/solvbtc', solvbtcListUrl)); From b11568074aa6d557d8379fecc61897834d4b1bd7 Mon Sep 17 00:00:00 2001 From: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:33:05 +0800 Subject: [PATCH 1166/1768] [Bucket Protocol] add new collateral type (#12411) --- projects/bucket-protocol/index.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index e804a4a7b5..c4e070763b 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -11,7 +11,12 @@ const USDT = ADDRESSES.sui.USDT; const USDC_CIRCLE= ADDRESSES.sui.USDC_CIRCLE const SCALLOP_swUSDC = "0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC" const SCALLOP_sUSDC = "0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC" - +const SCALLOP_sUSDT = "0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT" +const SCALLOP_sSUI = "0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI" +const SCALLOP_sSB_ETH = "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH" +const SCALLOP_sSCA = "0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA" +const SPRING_SUI = "0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI" +const SCA_ADDRESS = "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA" const AF_LP_IDs = [ "0xe2569ee20149c2909f0f6527c210bc9d97047fe948d34737de5420fab2db7062", "0x885e09419b395fcf5c8ee5e2b7c77e23b590e58ef3d61260b6b4eb44bbcc8c62", @@ -93,6 +98,21 @@ async function getScallopsLPAmount(id) { return stakingLPObject.fields.coin_balance; } +function convertUnderlyingAssets(coin){ + // USDC + if(coin === SCALLOP_swUSDC) return ADDRESSES.sui.USDC + if(coin === SCALLOP_sUSDC) return ADDRESSES.sui.USDC_CIRCLE + // USDT + if(coin === SCALLOP_sUSDT) return ADDRESSES.sui.USDT + // sSUI + if(coin === SCALLOP_sSUI) return ADDRESSES.sui.SUI + // sbETH + if(coin === SCALLOP_sSB_ETH) return ADDRESSES.sui.WETH + // sSCA + if(coin === SCALLOP_sSCA) return SCA_ADDRESS + return coin +} + async function tvl(api) { const protocolFields = await sui.getDynamicFieldObjects({ parent: MAINNET_PROTOCOL_ID, @@ -144,11 +164,11 @@ async function tvl(api) { for (const bucket of bucketList) { //AF_LP doesn't have price, need to split the tokens if (bucket.type.includes("AF_LP")) continue; - let coin = bucket.type.split("<").pop()?.replace(">", "") ?? ""; + const coin_address = bucket.type.split("<").pop()?.replace(">", "") ?? ""; /// Since we're unable to fetch the price of Scallop's sCOIN, we'll regard sCOIN as underlying assets - if(coin === SCALLOP_swUSDC) coin = ADDRESSES.sui.USDC - if(coin === SCALLOP_sUSDC) coin = ADDRESSES.sui.USDC_CIRCLE + const coin = convertUnderlyingAssets(coin_address) + api.add(coin, bucket.fields.collateral_vault); } From c1b5489dc2f11fe77cf7cb6f8bf14ab32c5caa3b Mon Sep 17 00:00:00 2001 From: Rajeeb Kumar Malik Date: Sat, 23 Nov 2024 23:04:46 +0530 Subject: [PATCH 1167/1768] Update index.js for Filament TVL update. (#12412) --- projects/filament/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/filament/index.js b/projects/filament/index.js index e4970b23ae..d188e10297 100644 --- a/projects/filament/index.js +++ b/projects/filament/index.js @@ -2,9 +2,10 @@ const { sumTokensExport } = require("../helper/unwrapLPs"); const USDC_CONTRACT = '0x3894085Ef7Ff0f0aeDf52E2A2704928d1Ec074F1'; const FILAMENT_VAULT_CONTRACT = '0xbeB6A6273c073815eBe288d2dF4e5E8bc027DA11'; +const FILAMENT_DEPOSIT_CONTRACT = '0x894DE0011C0d69BCa2e19c21CD246C17A8A4252e'; module.exports = { sei: { - tvl: sumTokensExport({ owner: FILAMENT_VAULT_CONTRACT, tokens: [USDC_CONTRACT] }), + tvl: sumTokensExport({ owners: [FILAMENT_VAULT_CONTRACT, FILAMENT_DEPOSIT_CONTRACT], tokens: [USDC_CONTRACT] }), }, } From ece82a3da413c2d8fdef3501383ad1a60af3976f Mon Sep 17 00:00:00 2001 From: Akshat Chhajer Date: Sat, 23 Nov 2024 23:07:34 +0530 Subject: [PATCH 1168/1768] add rfx-exchange (#12413) --- projects/rfx-exchange/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/rfx-exchange/index.js diff --git a/projects/rfx-exchange/index.js b/projects/rfx-exchange/index.js new file mode 100644 index 0000000000..ed5b20d6e6 --- /dev/null +++ b/projects/rfx-exchange/index.js @@ -0,0 +1,7 @@ +const { gmxExportsV2 } = require("../helper/gmx"); + +module.exports = { + era: { + tvl: gmxExportsV2({ eventEmitter: '0x9f006f3a4177e645fc872b911cf544e890c82b1a', fromBlock: 46545081 }), + }, +}; From 3a81a8281649e696c7578e4c089f8b21f2a05092 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 23 Nov 2024 18:38:56 +0100 Subject: [PATCH 1169/1768] pumpbtc: mark as doublecounted #12410 --- projects/pumpbtc/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pumpbtc/index.js b/projects/pumpbtc/index.js index d1419a37c5..cab2120c9c 100644 --- a/projects/pumpbtc/index.js +++ b/projects/pumpbtc/index.js @@ -32,6 +32,7 @@ async function otherTvl(api) { } module.exports.isHeavyProtocol = true; +module.exports.doublecounted = true; ['bitcoin', 'ethereum', 'bsc', 'mantle', 'base', 'arbitrum', 'bob'].forEach(chain => { if (chain == 'bitcoin') { From 3635c975ca2f250d634412ba55e2de3f8c54504a Mon Sep 17 00:00:00 2001 From: Jon Greenwood <81202085+0xJonHoldsCrypto@users.noreply.github.com> Date: Sat, 23 Nov 2024 11:51:19 -0600 Subject: [PATCH 1170/1768] Add Base Support (#12414) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/vesper/index.js | 58 ++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/projects/vesper/index.js b/projects/vesper/index.js index dae3a61ab0..bb1fd92047 100644 --- a/projects/vesper/index.js +++ b/projects/vesper/index.js @@ -1,70 +1,52 @@ -const sdk = require("@defillama/sdk") -const abi = require('./abi.json') -const { getChainTransform } = require('../helper/portedTokens') const { getConfig } = require("../helper/cache") +const { sumTokensExport } = require("../helper/unwrapLPs") const chainConfig = { ethereum: { stakingPool: '0xbA4cFE5741b357FA371b506e5db0774aBFeCf8Fc', VSP: '0x1b40183efb4dd766f11bda7a7c3ad8982e998421', - api: ['https://api.vesper.finance/pools?stages=prod', 'https://api.vesper.finance/pools?stages=orbit'], + endpoints: ['https://api.vesper.finance/pools?stages=prod', 'https://api.vesper.finance/pools?stages=orbit'], }, avax: { - api: ['https://api-avalanche.vesper.finance/pools?stages=prod'], + endpoints: ['https://api-avalanche.vesper.finance/pools?stages=prod'], }, polygon: { - api: ['https://api-polygon.vesper.finance/pools?stages=prod'], + endpoints: ['https://api-polygon.vesper.finance/pools?stages=prod'], }, optimism: { - api: ['https://api-optimism.vesper.finance/pools'] + endpoints: ['https://api-optimism.vesper.finance/pools'] + }, + base: { + endpoints: ['https://api-base.vesper.finance/pools'] }, } function getChainExports(chain) { - const { stakingPool, VSP, api } = chainConfig[chain] || {} - - async function tvl(timestamp, _block, chainBlocks) { - const block = chainBlocks[chain] - const transformAddress = await getChainTransform(chain) - const balances = {} - let network = chain === 'ethereum' ? 'mainnet' : chain - if (network === 'avax') network = 'avalanche' + const { stakingPool, VSP, endpoints } = chainConfig[chain] || {} + async function tvl(api) { const poolSet = new Set() - for (let i = 0;i< api.length;i++) { + for (let i = 0; i < endpoints.length; i++) { const key = ['vesper', chain, i].join('/') - const data = await getConfig(key, api[i]) + const data = await getConfig(key, endpoints[i]) data.forEach(pool => poolSet.add(pool.address)) // add pools from our contracts list } - if (stakingPool) poolSet.delete(stakingPool) + if (stakingPool) poolSet.delete(stakingPool) const poolList = [...poolSet] - if (!poolList.length) return balances + if (!poolList.length) return; // Get collateral token - const calls = poolList.map(target => ({ target })) - const { output: tokens } = await sdk.api.abi.multiCall({ calls, abi: abi.token, chain, block, }) - const { output: totalValue } = await sdk.api.abi.multiCall({ calls, abi: abi.totalValue, chain, block, }) - tokens.forEach((token, index) => sdk.util.sumSingleBalance(balances, transformAddress(token.output), totalValue[index].output)) - return balances + const tokens = await api.multiCall({ abi: 'address:token', calls: poolList }) + const bals = await api.multiCall({ abi: 'uint256:totalValue', calls: poolList }) + api.add(tokens, bals) } let staking - if (stakingPool) - staking = async (timestamp, _block, chainBlocks) => { - const block = chainBlocks[chain] - const transformAddress = await getChainTransform(chain) - const balances = {} - const vspBalance = (await sdk.api.erc20.balanceOf({ - block, chain, - target: VSP, - owner: stakingPool - })).output; - sdk.util.sumSingleBalance(balances, transformAddress(VSP), vspBalance) - return balances - } + if (stakingPool && VSP) + staking = sumTokensExport({ owner: stakingPool, token: VSP }) return { [chain]: { tvl, staking } @@ -73,5 +55,5 @@ function getChainExports(chain) { module.exports = { start: 1608667205, // December 22 2020 at 8:00 PM UTC - ...['ethereum', 'avax', 'polygon','optimism'].reduce((acc, chain) => ({ ...acc, ...getChainExports(chain) }), {}) + ...['ethereum', 'avax', 'polygon', 'optimism', 'base'].reduce((acc, chain) => ({ ...acc, ...getChainExports(chain) }), {}) }; From c6fa424ea49580da3f479828f72e7af55f3f40ac Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 24 Nov 2024 20:41:53 +0100 Subject: [PATCH 1171/1768] track weft v2 #12415 --- projects/weft-finance-v2/index.js | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 projects/weft-finance-v2/index.js diff --git a/projects/weft-finance-v2/index.js b/projects/weft-finance-v2/index.js new file mode 100644 index 0000000000..7c338cbab6 --- /dev/null +++ b/projects/weft-finance-v2/index.js @@ -0,0 +1,37 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { post } = require('../helper/http') + +const { sumTokens } = require('../helper/chain/radixdlt'); + +const KEY_VALUE_STORE_URL = `https://mainnet.radixdlt.com/state/key-value-store/` + +const lendingPool = 'component_rdx1czmr02yl4da709ceftnm9dnmag7rthu0tu78wmtsn5us9j02d9d0xn' + +const lendingMarket = 'component_rdx1cpy6putj5p7937clqgcgutza7k53zpha039n9u5hkk0ahh4stdmq4w' + +const resourcePoolsKVS = 'internal_keyvaluestore_rdx1kzjr763caq96j0kv883vy8gnf3jvrrp7dfm9zr5n0akryvzsxvyujc' + +async function tvl(api) { + return sumTokens({ owners: [lendingPool, lendingMarket], api }); +} + +async function borrowed(api) { + + let keys = (await post(`${KEY_VALUE_STORE_URL}/keys`, { "key_value_store_address": resourcePoolsKVS })).items.map(i => ({ key_hex: i.key.raw_hex })) + + let data = (await post(`${KEY_VALUE_STORE_URL}/data`, { "key_value_store_address": resourcePoolsKVS, "keys": keys })).entries.map(i => ([i.key.programmatic_json.value, i.value.programmatic_json.fields])) + + data.forEach(([key, fields]) => { + + let totalLoan = fields[6].fields[1].value + + api.add(key, +totalLoan) + + }); + +} + +module.exports = { + radixdlt: { tvl, borrowed }, + timetravel: false, +}; From d796a97c3587c36522d19f6126a192577f37732e Mon Sep 17 00:00:00 2001 From: Vojtch Date: Sun, 24 Nov 2024 20:47:49 +0100 Subject: [PATCH 1172/1768] update: pwn (#12416) --- projects/pwn/index.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/projects/pwn/index.js b/projects/pwn/index.js index 5ce7b821b5..84e885ceff 100644 --- a/projects/pwn/index.js +++ b/projects/pwn/index.js @@ -15,6 +15,7 @@ const PWN_V1_SIMPLE_LOAN = "0x50160ff9c19fbE2B5643449e1A321cAc15af2b2C"; const PWN_V1_1_SIMPLE_LOAN_A = "0x57c88D78f6D08b5c88b4A3b7BbB0C1AA34c3280A"; // Mainnet, Polygon, Arbitrum, BSC const PWN_V1_1_SIMPLE_LOAN_B = "0x4188C513fd94B0458715287570c832d9560bc08a"; // Cronos, Base, Optimism const PWN_V1_2_SIMPLE_LOAN = "0x9A93AE395F09C6F350E3306aec592763c517072e"; +const PWN_V1_2_2_SIMPLE_LOAN = "0x0773d5F2f7b3264a9Eb285F085aCCcC53d5aAa4F"; module.exports = { misrepresentedTokens: true, @@ -28,6 +29,7 @@ module.exports = { PWN_V1_SIMPLE_LOAN, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN, + PWN_V1_2_2_SIMPLE_LOAN, ], resolveNFTs: true, resolveArtBlocks: true, @@ -43,6 +45,7 @@ module.exports = { PWN_V1_SIMPLE_LOAN, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN, + PWN_V1_2_2_SIMPLE_LOAN, ], fetchCoValentTokens: true, }), @@ -54,32 +57,32 @@ module.exports = { }, base: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_BASE, PWN_V1_1_SIMPLE_LOAN_B, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_BASE, PWN_V1_1_SIMPLE_LOAN_B, PWN_V1_2_SIMPLE_LOAN, PWN_V1_2_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, arbitrum: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_ARBITRUM, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_ARBITRUM, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN, PWN_V1_2_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, optimism: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_OPTIMISM, PWN_V1_1_SIMPLE_LOAN_B, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_OPTIMISM, PWN_V1_1_SIMPLE_LOAN_B, PWN_V1_2_SIMPLE_LOAN, PWN_V1_2_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, bsc: { tvl: sumTokensExport({ - owners: [PWN_BUNDLER_BSC, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + owners: [PWN_BUNDLER_BSC, PWN_V1_1_SIMPLE_LOAN_A, PWN_V1_2_SIMPLE_LOAN, PWN_V1_2_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, linea: { tvl: sumTokensExport({ - owners: [PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + owners: [PWN_V1_2_SIMPLE_LOAN, PWN_V1_2_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, xdai: { tvl: sumTokensExport({ - owners: [PWN_V1_2_SIMPLE_LOAN], fetchCoValentTokens: true, + owners: [PWN_V1_2_SIMPLE_LOAN, PWN_V1_2_2_SIMPLE_LOAN], fetchCoValentTokens: true, }), }, mantle: { tvl: () => ({}) }, From 5b99dbfeea140daddbd987a38d86d1d0d83b2687 Mon Sep 17 00:00:00 2001 From: Wayne Kuo <95527849+WayneAl@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:15:22 +0800 Subject: [PATCH 1173/1768] Add Typus Safu Funding Vaults and $TYPUS token (#12421) --- projects/typus-safu/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/projects/typus-safu/index.js b/projects/typus-safu/index.js index a6a15ac094..28f79c2daf 100644 --- a/projects/typus-safu/index.js +++ b/projects/typus-safu/index.js @@ -1,8 +1,10 @@ const sui = require("../helper/chain/sui"); const SAFU_REGISTRY = "0xdc970d638d1489385e49ddb76889748011bac4616b95a51aa63633972b841706"; +const FUNDING_VAULT_REGISTRY = "0xeb9e1c94b72cd3e1a4ca2e4d6e9dd61547c0c45c654843e0db03c50ba3c21138"; async function tvl(api) { + // Safu Vaults const fields = await sui.getDynamicFieldObjects({ parent: SAFU_REGISTRY, }); @@ -12,6 +14,17 @@ async function tvl(api) { const deposit_token = "0x" + fields.deposit_token.fields.name; api.add(deposit_token, fields.share_supply.slice(0, 4)); }); + + // Safu Funding Vults + const fields2 = await sui.getDynamicFieldObjects({ + parent: FUNDING_VAULT_REGISTRY, + }); + const safuFundingVaults = fields2.filter((item) => item.type.includes("Vault")); + + safuFundingVaults.forEach(({ fields }) => { + const deposit_token = "0x" + fields.token.fields.name; + api.add(deposit_token, fields.info[1]); + }); } module.exports = { From 5d2a3464c6938ec9fa2c67699004ecf9c2419273 Mon Sep 17 00:00:00 2001 From: Nyangbari <110552619+Nyangbari@users.noreply.github.com> Date: Mon, 25 Nov 2024 18:26:32 +0900 Subject: [PATCH 1174/1768] feat: catalist dex project added (#12420) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/catalist-dex/index.js | 4 ++++ projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 3 +++ 3 files changed, 8 insertions(+) create mode 100644 projects/catalist-dex/index.js diff --git a/projects/catalist-dex/index.js b/projects/catalist-dex/index.js new file mode 100644 index 0000000000..f04be0c5a4 --- /dev/null +++ b/projects/catalist-dex/index.js @@ -0,0 +1,4 @@ +const { uniV3Export } = require('../helper/uniswapV3') +module.exports = uniV3Export({ + 'ace': { factory: '0xbe2fb231883840b9de5a0f43eb55b71253b0ce7b', fromBlock: 10,} +}) \ No newline at end of file diff --git a/projects/helper/env.js b/projects/helper/env.js index fcd578c096..b665d9001b 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -30,6 +30,7 @@ const DEFAULTS = { RPC_PROXY_URL: "https://rpc-proxy.llama.fi", UNIT0_RPC: "https://rpc.unit0.dev", RBN_RPC: "https://governors.mainnet.redbelly.network", + ACE_RPC_MULTICALL: "0x025A2B4fCE1E0bD736D5cebe6C8a52229795376B", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index dc017774ec..6bb97ff8a5 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -50,6 +50,9 @@ const fixBalancesTokens = { '0x2c03058c8afc06713be23e58d2febc8337dbfe6a': { coingeckoId: "tether", decimals: 6 }, '0xfc24f770f94edbca6d6f885e12d4317320bcb401': { coingeckoId: "weth", decimals: 18 }, }, + ace: { + '0x71ee6485cf72b9c3bf183528a2241474f21b2efa': { coingeckoId: "usd-coin", decimals: 6 }, + }, shido: { '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: "shido-2", decimals: 18 } // WSHIDO }, From 9412aada0873efb89578bed1576c725deacb62b5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:12:49 +0100 Subject: [PATCH 1175/1768] track typus treasury #12421 --- projects/helper/chain/sui.js | 15 +++++++++++++-- projects/helper/sumTokens.js | 1 + projects/treasury/typus-finance.js | 8 ++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 projects/treasury/typus-finance.js diff --git a/projects/helper/chain/sui.js b/projects/helper/chain/sui.js index aa832b2077..7bfd9a9c8b 100644 --- a/projects/helper/chain/sui.js +++ b/projects/helper/chain/sui.js @@ -134,13 +134,23 @@ function dexExport({ } -async function sumTokens({ balances = {}, owners = [], blacklistedTokens = [], tokens = [], api }) { +async function sumTokens({ owners = [], blacklistedTokens = [], api, tokens = [], }) { owners = getUniqueAddresses(owners, true) const bals = await call('suix_getAllBalances', owners) - bals.forEach(i => api.add(i.coinType, i.totalBalance)) + const blacklistSet = new Set(blacklistedTokens) + const tokenSet = new Set(tokens) + bals.forEach(i => { + if (blacklistSet.has(i.coinType)) return; + if (tokenSet.size > 0 && !tokenSet.has(i.coinType)) return; + api.add(i.coinType, i.totalBalance) + }) return api.getBalances() } +function sumTokensExport(config) { + return (api) => sumTokens({ ...config, api }) +} + async function queryEventsByType({ eventType, transform = i => i }) { const query = `query GetEvents($after: String, $eventType: String!) { events(first: 50, after: $after, filter: { eventType: $eventType }) { @@ -174,5 +184,6 @@ module.exports = { getDynamicFieldObjects, dexExport, sumTokens, + sumTokensExport, queryEventsByType, }; diff --git a/projects/helper/sumTokens.js b/projects/helper/sumTokens.js index c376231260..64cb79179d 100644 --- a/projects/helper/sumTokens.js +++ b/projects/helper/sumTokens.js @@ -4,6 +4,7 @@ const { sumTokens2: sumTokensEVM, nullAddress, } = require('./unwrapLPs') const sdk = require('@defillama/sdk') const helpers = { + "sui": require("./chain/sui"), "eos": require("./chain/eos"), "ton": require("./chain/ton"), "ergo": require("./chain/ergo"), diff --git a/projects/treasury/typus-finance.js b/projects/treasury/typus-finance.js new file mode 100644 index 0000000000..b5527cb22f --- /dev/null +++ b/projects/treasury/typus-finance.js @@ -0,0 +1,8 @@ +const { treasuryExports } = require("../helper/treasury"); + +module.exports = treasuryExports({ + sui: { + owners: ['0xb9a09efd534d29cc9f990db26b2dab00289f32de0cdcefa68c6808de208bc9cb'], + ownTokens: ['0xf82dc05634970553615eef6112a1ac4fb7bf10272bf6cbe0f80ef44a6c489385::typus::TYPUS'], + }, +}) \ No newline at end of file From 1f8e0ef358bf0baf7c30939a9295718a1eb72cc7 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:53:32 +0100 Subject: [PATCH 1176/1768] Fix: Small fix Cian yield (#12423) --- projects/cian-yl/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/projects/cian-yl/index.js b/projects/cian-yl/index.js index 0b9afbfc12..5b216026ed 100644 --- a/projects/cian-yl/index.js +++ b/projects/cian-yl/index.js @@ -18,8 +18,6 @@ module.exports = { Object.keys(config).forEach((chain) => { module.exports[chain] = { - tvl: async (_, _b, _cb, { api }) => { - return api.erc4626Sum({ calls: config[chain], isOG4626: true }); - }, + tvl: async (api) => api.erc4626Sum({ calls: config[chain], isOG4626: true, permitFailure: true }) }; }); From a914c79c64785015064eab73d49d267b3394997a Mon Sep 17 00:00:00 2001 From: amedrontadora <134207821+amedrontadora@users.noreply.github.com> Date: Mon, 25 Nov 2024 18:54:43 +0800 Subject: [PATCH 1177/1768] Zuit: add Zuit TVL (#12422) Co-authored-by: amedrontadora --- projects/zuit/index.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 projects/zuit/index.js diff --git a/projects/zuit/index.js b/projects/zuit/index.js new file mode 100644 index 0000000000..49f28b4415 --- /dev/null +++ b/projects/zuit/index.js @@ -0,0 +1,32 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs2 } = require('../helper/cache/getLogs') + +async function tvl(api) { + const { fromBlock, baseFactorys, stableFactorys, oasisFactorys = [] } = config[api.chain] + + let logs = await Promise.all([baseFactorys, stableFactorys, oasisFactorys].flat().map(getFactoryLogs)) + logs = logs.flat() + + const ownerTokens = logs.map(({ token0, token1, pool }) => [[token0, token1], pool]) + return sumTokens2({ api, ownerTokens}) + + async function getFactoryLogs(target) { + return getLogs2({ + api, + target, + fromBlock, + eventAbi: 'event PoolCreated(address indexed token0, address indexed token1, address pool)', + }) + } +} + +const config = { + zircuit: { + fromBlock: 1374699, + baseFactorys: ['0xE4CF807E351b56720B17A59094179e7Ed9dD3727'], + stableFactorys: ['0x40d660504eB163708d8AC8109fc8F2c063ddAE4b'], + oasisFactorys: ['0xE14f6575F4721F404FFB79DA76e4790AD67B960A'] + } +} + +Object.keys(config).forEach(chain => { module.exports[chain] = { tvl } }) \ No newline at end of file From 1e589186a18aff070fbe498f0a911c09102c9da2 Mon Sep 17 00:00:00 2001 From: calebryan <169087314+calebryan@users.noreply.github.com> Date: Mon, 25 Nov 2024 13:56:29 +0300 Subject: [PATCH 1178/1768] track LinqAI tvl (#12418) Co-authored-by: calebryan --- projects/linqai/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/linqai/index.js diff --git a/projects/linqai/index.js b/projects/linqai/index.js new file mode 100644 index 0000000000..48aeb83521 --- /dev/null +++ b/projects/linqai/index.js @@ -0,0 +1,19 @@ +const stakingPools = [ + "0x786d0536B63f3638bcD17897A98B066D901C27b8", + "0xCB5Dc61Cc672761Ec049dd9349745b418580BC83", + ]; + + const rewardToken = "0xD4F4D0a10BcaE123bB6655E8Fe93a30d01eEbD04"; // LNQ + + module.exports = { + ethereum: { + tvl: async () => ({}), + staking: async (api) => { + const stakingData = stakingPools.map((poolAddress) => [rewardToken, poolAddress]); + return api.sumTokens({ + tokensAndOwners: stakingData, + }); + }, + }, + }; + \ No newline at end of file From a13095c753f5fecc3e9cae2e1e09e42c7473ee18 Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 25 Nov 2024 20:12:53 +0900 Subject: [PATCH 1179/1768] add shibarium mint-club-v2 (#12417) --- projects/mint-club-v2/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/mint-club-v2/index.js b/projects/mint-club-v2/index.js index 6a245f13c1..515fcf70c8 100644 --- a/projects/mint-club-v2/index.js +++ b/projects/mint-club-v2/index.js @@ -11,14 +11,15 @@ const V2_BOND_CONTRACTS = { degen: "0x3bc6B601196752497a68B2625DB4f2205C3b150b", zora: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27", klaytn: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27", - ham: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27" + ham: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27", + shibarium: "0xc5a076cad94176c2996B32d8466Be1cE757FAa27" } const ownTokens = { bsc: ['0x1f3Af095CDa17d63cad238358837321e95FC5915'] } -const chains = ['avax', 'ethereum', 'optimism', 'arbitrum', 'polygon', 'bsc', 'base', 'blast', 'degen', 'zora', 'klaytn', 'ham'] +const chains = ['avax', 'ethereum', 'optimism', 'arbitrum', 'polygon', 'bsc', 'base', 'blast', 'degen', 'zora', 'klaytn', 'ham', 'shibarium'] chains.forEach(chain => { const BOND_CONTRACT = V2_BOND_CONTRACTS[chain] ?? '0xc5a076cad94176c2996B32d8466Be1cE757FAa27' From dde73a99ad2314e5d3d1c43fc3fecb19c8764ac6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:49:59 +0100 Subject: [PATCH 1180/1768] bugfix --- projects/helper/sumTokens.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/helper/sumTokens.js b/projects/helper/sumTokens.js index 64cb79179d..c376231260 100644 --- a/projects/helper/sumTokens.js +++ b/projects/helper/sumTokens.js @@ -4,7 +4,6 @@ const { sumTokens2: sumTokensEVM, nullAddress, } = require('./unwrapLPs') const sdk = require('@defillama/sdk') const helpers = { - "sui": require("./chain/sui"), "eos": require("./chain/eos"), "ton": require("./chain/ton"), "ergo": require("./chain/ergo"), From 1f632fb5a650ae06ffa653955faca5480e789ac4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:50:36 +0100 Subject: [PATCH 1181/1768] btcfi (#12426) Co-authored-by: Ss5h --- projects/btcfi-cdp/index.js | 10 +++++++++- projects/helper/bitcoin-book/fetchers.js | 6 ++++++ projects/ixswap/index.js | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/projects/btcfi-cdp/index.js b/projects/btcfi-cdp/index.js index 6390a55453..887b146987 100644 --- a/projects/btcfi-cdp/index.js +++ b/projects/btcfi-cdp/index.js @@ -1,5 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require('../helper/unwrapLPs') +const { sumTokens } = require("../helper/chain/bitcoin"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const chainPools = { bfc: { @@ -8,10 +10,16 @@ const chainPools = { }, } +async function bitcoinTvl() { + return sumTokens({ owners: await bitcoinAddressBook.btcfi_cdp() }) +} + Object.keys(chainPools).forEach(chain => { const pools = chainPools[chain] const tokensAndOwners = Object.values(pools).map(({ pool, token }) => ([token, pool,])) module.exports[chain] = { tvl: sumTokensExport({ tokensAndOwners }) } -}) \ No newline at end of file +}) + +module.exports["bitcoin"] = { tvl: bitcoinTvl } \ No newline at end of file diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index 6a2e351d29..185aa59908 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -7,6 +7,12 @@ const sdk = require('@defillama/sdk') const abi = { getQualifiedUserInfo: 'function getQualifiedUserInfo(address _user) view returns ((bool locked, string depositAddress, string withdrawalAddress) info)' } module.exports = { + btcfi_cdp: async () => { + const target = "0x0000000000000000000000000000000000000100"; + const api = new sdk.ChainApi({ chain: 'bfc' }) + const round = await api.call({ abi: 'uint32:current_round', target}) + return api.call({ abi: 'function vault_addresses(uint32 pool_round) view returns (string[])', target, params: round }) + }, bedrock: async () => { const API_URL = 'https://raw.githubusercontent.com/Bedrock-Technology/uniBTC/refs/heads/main/data/tvl/reserve_address.json' const { btc } = await getConfig('bedrock.btc_address', API_URL) diff --git a/projects/ixswap/index.js b/projects/ixswap/index.js index e0bdaeac3a..a10a8ba988 100644 --- a/projects/ixswap/index.js +++ b/projects/ixswap/index.js @@ -2,6 +2,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); const { staking } = require('../helper/staking') const IXS_POLYGON = "0x1BA17C639BdaeCd8DC4AAc37df062d17ee43a1b8" +const IXS_BASE = "0xfe550bffb51eb645ea3b324d772a19ac449e92c5" const STAKING_CONTRACTS = [ "0xad644F3cC768bc6dceF97096790e2210D5191cec", // stake bank ] @@ -11,4 +12,7 @@ module.exports = { tvl: getUniTVL({ factory: '0xc2D0e0bc81494adB71Ce9Aa350cC875DaE12D81D', blacklistedTokens: [IXS_POLYGON] }), staking: staking(STAKING_CONTRACTS, IXS_POLYGON), }, + base:{ + staking: staking(['0x44F07B446e14127136f3554A16014b49BC67D9E6'], IXS_BASE), + }, } \ No newline at end of file From 78b43fbedf2d9396a1f4e3922a41994a5cdd658f Mon Sep 17 00:00:00 2001 From: nuhbye Date: Mon, 25 Nov 2024 17:27:28 +0530 Subject: [PATCH 1182/1768] Include Evaa staked balance via USDT pool in TVL (#12425) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/tonpools/index.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/projects/tonpools/index.js b/projects/tonpools/index.js index 65889d5c44..3faff2f7ad 100644 --- a/projects/tonpools/index.js +++ b/projects/tonpools/index.js @@ -1,19 +1,21 @@ -const { sumTokensExport } = require("../helper/chain/ton"); +const { call } = require('../helper/chain/ton') +const { sumTokens } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const tonpoolsContractAddress = - "EQA7y9QkiP4xtX_BhOpY4xgVlLM7LPcYUA4QhBHhFZeL4fTa"; +const tonpoolsContractAddress = "EQA7y9QkiP4xtX_BhOpY4xgVlLM7LPcYUA4QhBHhFZeL4fTa"; -const tonpoolUSDTContractAddress = - "EQDrSz9W4tjwnqy1F4z-O4Vkdp8g2YP94cmh12X5RbYpejCw"; +const tonpoolUSDTContractAddress = "EQDrSz9W4tjwnqy1F4z-O4Vkdp8g2YP94cmh12X5RbYpejCw"; + +async function tvl(api) { + const result = await call({ target: tonpoolUSDTContractAddress, abi: 'poolBalances' }) + api.add(ADDRESSES.ton.USDT, result[1]) + await sumTokens({ api, owners: [tonpoolsContractAddress], tokens: [ADDRESSES.null], }) +} module.exports = { methodology: "Ton Pools's TVL includes all deposited supported assets", ton: { - tvl: sumTokensExport({ - owners: [tonpoolsContractAddress, tonpoolUSDTContractAddress], - tokens: [ADDRESSES.null], - }), + tvl, }, }; From 654b72dce97f0f9183882fb7399664674fc674c4 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:57:45 +0100 Subject: [PATCH 1183/1768] Fix: Luchadores (treasury) (#12424) --- projects/treasury/luchadores.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/treasury/luchadores.js b/projects/treasury/luchadores.js index 4d55111cbf..a22ede10c5 100644 --- a/projects/treasury/luchadores.js +++ b/projects/treasury/luchadores.js @@ -1,4 +1,4 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const ADDRESSES = require('../helper/coreAssets.json'); const { nullAddress, treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ @@ -19,6 +19,7 @@ module.exports = treasuryExports({ ], owners: ['0xa715c8b17268f140D76494c12ec07B48218549C4'], ownTokens: ['0xF4435cC8b478d54313F04c956882BE3D9aCf9F6F'], + blacklistedTokens: ['0x3a94201a0b6c3593ad3b3e17e3dfce33da183514'], resolveLP: true, } }) From a589441d910be90e9ff5c1ea15128bded777fdc4 Mon Sep 17 00:00:00 2001 From: Antonio Viggiano Date: Mon, 25 Nov 2024 11:00:10 -0300 Subject: [PATCH 1184/1768] Update SizeCredit to protocol v1.5 (#12427) --- projects/size-credit/index.js | 52 +++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/projects/size-credit/index.js b/projects/size-credit/index.js index 24b220db46..90d31b0c95 100644 --- a/projects/size-credit/index.js +++ b/projects/size-credit/index.js @@ -1,23 +1,51 @@ -const { sumTokensExport } = require('../helper/unwrapLPs') -const ADDRESSES = require('../helper/coreAssets.json') +const SIZE_FACTORY = '0x330Dc31dB45672c1F565cf3EC91F9a01f8f3DF0b' -const AUSDC_CONTRACT = '0x4e65fe4dba92790696d040ac24aa414708f5c0ab' -const SZDEBT_CONTRACT = '0xb0a00c4b3d77c896f46dc6b204695e22de7a185d' -const SIZE_PROXY_CONTRACT = '0xC2a429681CAd7C1ce36442fbf7A4a68B11eFF940' -const tokens = [ - ADDRESSES.base.WETH, - AUSDC_CONTRACT, -] +const abis = { + SizeFactory: { + getMarkets: 'function getMarkets() view returns (address[])', + }, + Size: { + data: 'function data() view returns (uint256 nextDebtPositionId,uint256 nextCreditPositionId,address underlyingCollateralToken,address underlyingBorrowToken,address collateralToken,address borrowAToken,address debtToken,address variablePool)', + }, + Pool: { + getReserveData: 'function getReserveData(address asset) view returns (uint256 configuration,uint128 liquidityIndex,uint128 currentLiquidityRate,uint128 variableBorrowIndex,uint128 currentVariableBorrowRate,uint128 currentStableBorrowRate,uint40 lastUpdateTimestamp,uint16 id,address aTokenAddress,address stableDebtTokenAddress,address variableDebtTokenAddress,address interestRateStrategyAddress,uint128 accruedToTreasury,uint128 unbacked,uint128 isolationModeTotalDebt)' + } +} + +async function tvl(api) { + const markets = await api.call({ abi: abis.SizeFactory.getMarkets, target: SIZE_FACTORY }) + const datas = await api.multiCall({ abi: abis.Size.data, calls: markets }) + + const borrowATokens = datas.map(data => data.borrowAToken) + const variablePools = datas.map(data => data.variablePool) + const underlyingBorrowTokens = datas.map(data => data.underlyingBorrowToken) + const underlyingCollateralTokens = datas.map(data => data.underlyingCollateralToken) + + const getReserveDatas = await api.multiCall({ abi: abis.Pool.getReserveData, calls: variablePools.map((variablePool, i) => ({ target: variablePool, params: underlyingBorrowTokens[i] })) }) + + const aTokens = getReserveDatas.map(data => data.aTokenAddress) + + return api.sumTokens({ + owners: [...borrowATokens, ...markets], + tokens: [...aTokens, ...underlyingCollateralTokens] + }) +} async function borrowed(api) { - const totalDebt = await api.call({ abi: 'erc20:totalSupply', target: SZDEBT_CONTRACT, }); + const markets = await api.call({ abi: abis.SizeFactory.getMarkets, target: SIZE_FACTORY }) + const datas = await api.multiCall({ abi: abis.Size.data, calls: markets }) + + const debtTokens = datas.map(data => data.debtToken) + + const underlyingBorrowTokens = datas.map(data => data.underlyingBorrowToken) + const totalDebts = await api.multiCall({ abi: 'erc20:totalSupply', calls: debtTokens }); - return api.add(ADDRESSES.base.USDbC, totalDebt) + return api.add(underlyingBorrowTokens, totalDebts) } module.exports = { base: { - tvl: sumTokensExport({ tokens, owner: SIZE_PROXY_CONTRACT }), + tvl, borrowed } } From 3527b18b9e4f2012c253fe3d7225c75522251024 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:19:30 +0100 Subject: [PATCH 1185/1768] fix llamaPay? --- projects/llamapay/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/llamapay/index.js b/projects/llamapay/index.js index 82df62f150..55bec7661f 100644 --- a/projects/llamapay/index.js +++ b/projects/llamapay/index.js @@ -19,7 +19,7 @@ async function calculateTvl(llamapay, vestingContract, api, isVesting) { tokensAndOwners = tokensAndOwners.filter(([token]) => isWhitelistedToken(symbolMapping[token], token, isVesting)) if (isVesting) tokensAndOwners.push(...await getTokensAndOwners(vestingContract, api, true)) - return sumTokens2({ tokensAndOwners, api, resolveLP: true, }) + return sumTokens2({ tokensAndOwners, api, resolveLP: false, }) // resolveLP: false maybe breaking them down returns too high TVL for some reason } async function getTokensAndOwners(contract, api, isVestingContract) { From 2b922a759e9c65364c0a8028ddaae84c3385f3b5 Mon Sep 17 00:00:00 2001 From: Catton <166699866+Cattontech@users.noreply.github.com> Date: Mon, 25 Nov 2024 21:40:19 +0700 Subject: [PATCH 1186/1768] Add Catton Adapter (#12394) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/catton/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/catton/index.js diff --git a/projects/catton/index.js b/projects/catton/index.js new file mode 100644 index 0000000000..a63c82dc54 --- /dev/null +++ b/projects/catton/index.js @@ -0,0 +1,21 @@ +const { call, getJettonBalances, getTonBalance, sumTokens } = require("../helper/chain/ton"); +const { sleep } = require('../helper/utils') +const ADDRESSES = require('../helper/coreAssets.json') + +const TON_POOL_ADDRESS = "EQAze1aSZHY1yUGz1BFndH62k-VYpXYeDiYofCXTRZClF8Qr" +const USD_POOL_ADDRESS = "EQBy7pjr6IBzqW8vuVCZ780evtnkiIF3jZSRRDxeqScfZoU9" +const CTON_ADDRESS = "0:86cf8401d283627a87b58c367b440cad933ab8aa7b383419e8ff7d1a00c945f8" +const CTUSDT_ADDRESS = "0:9fb449ce8fb43d0f682c713c01d9d8357c7cd0d4a49dd64dd585926990174a4e" +const USDT_ADDRESS = "0:b113a994b5024a16719f69139328eb759596c38a25f59028b146fecdc3621dfe" + +async function tvl(api) { + return sumTokens({ owners: [TON_POOL_ADDRESS, USD_POOL_ADDRESS, "UQDFlyZ5zsWyowbZvZjZwIW_Vzm-1uvf8z_PUfvQtHrV14dp"], tokens: [ADDRESSES.null, USDT_ADDRESS], api, onlyWhitelistedTokens: true }) +} + +module.exports = { + methodology: 'Total amount of collateral locked in the Catton Protocol', + timetravel: false, + ton: { + tvl + } +} From 43bc8bc98fb9c586d70f98787600b3714384a10a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:47:48 +0100 Subject: [PATCH 1187/1768] add HLUSD mapping #11816 --- projects/helper/tokenMapping.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 6bb97ff8a5..fcca5c1705 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -71,6 +71,9 @@ const fixBalancesTokens = { bob: { '0xd681C5574b7F4E387B608ed9AF5F5Fc88662b37c': { coingeckoId: "ignition-fbtc", decimals: 8 }, }, + hela: { + '0x3a035615e101373fa9ba21c5bea7fe4026fc40b4': { coingeckoId: "hela-usd", decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From e433d032a6733f564e3aeef3defc8b87d4de642d Mon Sep 17 00:00:00 2001 From: Root Finance Date: Mon, 25 Nov 2024 17:07:07 +0100 Subject: [PATCH 1188/1768] Add LSULP pool to Root Finance TVL calculation in index.js (#12430) --- projects/root-finance/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/root-finance/index.js b/projects/root-finance/index.js index b731b4f68c..42cf5917a9 100644 --- a/projects/root-finance/index.js +++ b/projects/root-finance/index.js @@ -26,8 +26,13 @@ const pools = [ { pool: 'component_rdx1cqlfmwmhdmp0ln4gaera4skn3yz30p4k5ssv7lqflgh0rjeakwzs9f', resource: 'resource_rdx1t4upr78guuapv5ept7d7ptekk9mqhy605zgms33mcszen8l9fac8vf', + }, + // Adding the LSULP Pool + { + pool: 'component_rdx1czmq3me09q7p7g7hgsyaqctfw3he4hl6ypg6em2h7nyd2umk0dhhnq', + resource: 'resource_rdx1thksg5ng70g9mmy9ne7wz0sc7auzrrwy7fmgcxzel2gvp8pj0xxfmf', } -] +]; async function fetchData(addresses) { return await queryAddresses({ addresses }); From 40a13e3b8ac1a7bc77756d1f708ad8309b78b565 Mon Sep 17 00:00:00 2001 From: Will Hawkins <5409021+wmhawkins-iv@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:07:53 -0400 Subject: [PATCH 1189/1768] Add Arkham Exchange PoR (#12431) --- projects/arkham-exchange/index.js | 42 +++++++++++++++++++ .../helper/bitcoin-book/arkham-exchange.js | 3 ++ projects/helper/bitcoin-book/index.js | 4 +- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 projects/arkham-exchange/index.js create mode 100644 projects/helper/bitcoin-book/arkham-exchange.js diff --git a/projects/arkham-exchange/index.js b/projects/arkham-exchange/index.js new file mode 100644 index 0000000000..cf1a7f9231 --- /dev/null +++ b/projects/arkham-exchange/index.js @@ -0,0 +1,42 @@ +const { cexExports } = require('../helper/cex') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + +const config = { + ethereum: { + owners: [ + '0x679Fb19dEc9d66C34450a8563FfDFD29C04e615A', + '0x0323718324218dcBfF7c9f89bA5a5954F61A6c74', + '0x794C629e4403CA7CEE126Cc19d6C7b002D0238a5', + ], + }, + bitcoin: { + owners: bitcoinAddressBook.arkhamExchange + }, + solana: { + owners: [ + 'H2qEpXtSEzQTH5xNFpA8VA1W2NKNZWxUoVpascxyWAK1', + '3huamNpghPSPbgQSLX56B18Sj1hq5SE4KGxwTvhwJGnC', + ], + }, + doge: { + owners: [ + '9xFftuJonFHopj9FB6tyW1kyxqusr4jrGh', + ] + }, + avax: { + owners: [ + '0xDc2822D0685c0CcEAb07b35d6de4aC9280FB9cFF', + '0x34407900475cEF87acE1597670A9A42F31961d02', + '0xaF4E837d27cD6A5B33D67d51b88Ae42c0Bb3f1af', + ] + }, + ton: { + owners: [ + 'UQDT3cimS92wrKXrc7U6quPIM1ose_N5-R4U5byIUDHkF8pt', + 'UQDd2gNTRcIsgdUgf0DYMVcpxZuV78hegZ4D1tIj7xLKTwWn', + ] + }, +} + +module.exports = cexExports(config) +module.exports.methodology = 'Wallets can be tracked here: https://intel.arkm.com/explorer/entity/arkham-exchange' diff --git a/projects/helper/bitcoin-book/arkham-exchange.js b/projects/helper/bitcoin-book/arkham-exchange.js new file mode 100644 index 0000000000..334cc7e191 --- /dev/null +++ b/projects/helper/bitcoin-book/arkham-exchange.js @@ -0,0 +1,3 @@ +module.exports = [ + 'bc1qlnkyrrupehgw5evu43erlgkhhagv0uj3yyhacvc65n3ud6qeas0sa958ps' +] diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 0db660450d..ed023233e1 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -84,6 +84,7 @@ const toobit = require('./toobit.js') const indiaCovid = require('./india-covid.js') const wooCEX = require('./woo-cex.js') const bitlayerBridge = require('./bitlayer-bridge.js') +const arkhamExchange = require('./arkham-exchange.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -183,4 +184,5 @@ module.exports = { indiaCovid, wooCEX, p2pb2b, -} \ No newline at end of file + arkhamExchange, +} From b74ab2043cc82bbe58b6d7a910bd05f5c3a6145a Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 26 Nov 2024 10:36:30 +0000 Subject: [PATCH 1190/1768] inverse treasury --- projects/treasury/inverse.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/treasury/inverse.js b/projects/treasury/inverse.js index 366b64fe13..d1bc67789e 100644 --- a/projects/treasury/inverse.js +++ b/projects/treasury/inverse.js @@ -64,7 +64,10 @@ module.exports = treasuryExports({ "0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c",// dola-fraxusdc lp CVX ], auraPools: [ - "0xA36d3799eA28f4B75653EBF9D91DDA4519578086", // sDOLA-DOLA aura pool + // "0xA36d3799eA28f4B75653EBF9D91DDA4519578086", // sDOLA-DOLA aura pool + ], + blacklistedLPs: [ + '0xcb79637aaffdc1e8db17761fa10367b46745ecb0' ] }, optimism: { From 2685a01d530f5c602b216b59b0516bf60e085339 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 26 Nov 2024 11:22:46 +0000 Subject: [PATCH 1191/1768] asBTC (#12440) --- projects/astherus-asbtc/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/astherus-asbtc/index.js diff --git a/projects/astherus-asbtc/index.js b/projects/astherus-asbtc/index.js new file mode 100644 index 0000000000..3059a5e938 --- /dev/null +++ b/projects/astherus-asbtc/index.js @@ -0,0 +1,10 @@ +const asBTC = "0x184b72289c0992bdf96751354680985a7c4825d6" + +module.exports = { + bsc: { + tvl: async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: asBTC }) + api.add(asBTC, supply) + }, + } +} \ No newline at end of file From 3c6d40cfc6d198d2adabd57af17a5378dedaa5da Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 26 Nov 2024 13:06:36 +0000 Subject: [PATCH 1192/1768] inverse treasury (#12439) --- projects/treasury/inverse.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/treasury/inverse.js b/projects/treasury/inverse.js index 366b64fe13..d1bc67789e 100644 --- a/projects/treasury/inverse.js +++ b/projects/treasury/inverse.js @@ -64,7 +64,10 @@ module.exports = treasuryExports({ "0x0404d05F3992347d2f0dC3a97bdd147D77C85c1c",// dola-fraxusdc lp CVX ], auraPools: [ - "0xA36d3799eA28f4B75653EBF9D91DDA4519578086", // sDOLA-DOLA aura pool + // "0xA36d3799eA28f4B75653EBF9D91DDA4519578086", // sDOLA-DOLA aura pool + ], + blacklistedLPs: [ + '0xcb79637aaffdc1e8db17761fa10367b46745ecb0' ] }, optimism: { From 95fe94a23818421debd415a096f09f27b4796d9a Mon Sep 17 00:00:00 2001 From: minato <100826289+0x-minato@users.noreply.github.com> Date: Tue, 26 Nov 2024 18:36:47 +0530 Subject: [PATCH 1193/1768] Adding Endur to Defillama (#12438) Co-authored-by: ariyan-hashstack --- projects/endur/erc4626abi.js | 48 ++++++++++++++++++++++++++++++++++++ projects/endur/index.js | 33 +++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 projects/endur/erc4626abi.js create mode 100644 projects/endur/index.js diff --git a/projects/endur/erc4626abi.js b/projects/endur/erc4626abi.js new file mode 100644 index 0000000000..1edd29b850 --- /dev/null +++ b/projects/endur/erc4626abi.js @@ -0,0 +1,48 @@ +const ERC4626Abi = [ + { + "name": "asset", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "state_mutability": "view" + }, + { + "name": "balanceOf", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view", + "customInput": 'address', + }, + { + "name": "total_assets", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + } +] + +const ERC4626AbiMap = {} +ERC4626Abi.forEach(i => ERC4626AbiMap[i.name] = i) + +module.exports = { + ERC4626AbiMap +} \ No newline at end of file diff --git a/projects/endur/index.js b/projects/endur/index.js new file mode 100644 index 0000000000..f2b3879df4 --- /dev/null +++ b/projects/endur/index.js @@ -0,0 +1,33 @@ +/** + * Endur is a liquid staking solution for STRK + */ + +const {multiCall} = require("../helper/chain/starknet"); +const ADDRESSES = require('../helper/coreAssets.json'); +const { ERC4626AbiMap } = require('./erc4626abi') + +const LSTDATA = [{ //data of an LST contract; currently only xSTRK + address: "0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a", // address of xSTRK vault contract + token: ADDRESSES.starknet.STRK +}] + +// returns the tvl of the all LST tokens in terms of their native token +async function tvl(api) { + const totalAssets = await multiCall({ + calls: LSTDATA.map(c => c.address), + abi: ERC4626AbiMap.total_assets + }); + // the balance of the tokens will be xTOKEN + // considering all 1 TOKEN = 1xTOKEN + // eg for now we only have xSTRK i.e 1 STRK = 1 xSTRK + + api.addTokens(LSTDATA.map(c => c.token), totalAssets); +} + +module.exports = { + doublecounted: true, + methodology: "The TVL is the total staked STRK managed by Endur's LST", + starknet: { + tvl, + }, +}; \ No newline at end of file From e290b807a4a73621cfd718a81c23f43a9874dd9c Mon Sep 17 00:00:00 2001 From: thi-investax <118243127+thi-investax@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:07:12 +0700 Subject: [PATCH 1194/1768] Update IX swap tvl on Base (#12437) --- projects/ixswap/index.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/projects/ixswap/index.js b/projects/ixswap/index.js index a10a8ba988..eb5fafd74b 100644 --- a/projects/ixswap/index.js +++ b/projects/ixswap/index.js @@ -1,18 +1,19 @@ -const { getUniTVL } = require("../helper/unknownTokens"); -const { staking } = require('../helper/staking') +const {getUniTVL} = require("../helper/unknownTokens"); +const {staking} = require('../helper/staking') const IXS_POLYGON = "0x1BA17C639BdaeCd8DC4AAc37df062d17ee43a1b8" const IXS_BASE = "0xfe550bffb51eb645ea3b324d772a19ac449e92c5" const STAKING_CONTRACTS = [ - "0xad644F3cC768bc6dceF97096790e2210D5191cec", // stake bank + "0xad644F3cC768bc6dceF97096790e2210D5191cec", // stake bank ] module.exports = { - polygon:{ - tvl: getUniTVL({ factory: '0xc2D0e0bc81494adB71Ce9Aa350cC875DaE12D81D', blacklistedTokens: [IXS_POLYGON] }), + polygon: { + tvl: getUniTVL({factory: '0xc2D0e0bc81494adB71Ce9Aa350cC875DaE12D81D', blacklistedTokens: [IXS_POLYGON]}), staking: staking(STAKING_CONTRACTS, IXS_POLYGON), }, - base:{ + base: { + tvl: getUniTVL({factory: '0x2eE28d1Bbc2EcB1fFDB83E8055d585E9F0fb757f'}), staking: staking(['0x44F07B446e14127136f3554A16014b49BC67D9E6'], IXS_BASE), }, -} \ No newline at end of file +} From 22c9cc97aafc1e170fa59bde3aeeca7feffcffa2 Mon Sep 17 00:00:00 2001 From: Rahul Mittal <84127070+alienHunterOnMars@users.noreply.github.com> Date: Tue, 26 Nov 2024 18:38:47 +0530 Subject: [PATCH 1195/1768] adding DegenHive adapter (#12429) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/DegenHive-amm/index.js | 40 +++++++++++++++++++++++++++++ projects/DegenHive-dsui/index.js | 18 +++++++++++++ projects/DegenHive-memepad/index.js | 35 +++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 projects/DegenHive-amm/index.js create mode 100644 projects/DegenHive-dsui/index.js create mode 100644 projects/DegenHive-memepad/index.js diff --git a/projects/DegenHive-amm/index.js b/projects/DegenHive-amm/index.js new file mode 100644 index 0000000000..76939e2614 --- /dev/null +++ b/projects/DegenHive-amm/index.js @@ -0,0 +1,40 @@ +const sui = require("../helper/chain/sui"); +const { cachedGraphQuery } = require('../helper/cache'); + +const graphQL_endpoint = "https://5lox8etck8.execute-api.eu-central-1.amazonaws.com/api/v1"; +const GET_SUI_POOLS = `query GetSuiPools { + getSuiPools { + pools { + poolId + } + } +}` + +async function tvl(api) { + const sui_pools = await cachedGraphQuery('degen-hive-sui-pools', graphQL_endpoint, GET_SUI_POOLS); + const poolIds = sui_pools.getSuiPools.pools.map(pool => pool.poolId); + const suiPoolsData = await sui.getObjects(poolIds); + + for (const { type, fields } of suiPoolsData) { + if (fields.coin_x_reserve == 0 && fields.coin_y_reserve == 0) continue; + let coin_x_type = type.split('<')[1].split(',')[0].trim(); + let coin_y_type = type.split('<')[1].split(',')[1].trim(); + + api.add(coin_x_type, fields.coin_x_reserve); + api.add(coin_y_type, fields.coin_y_reserve); + + if (fields.coin_z_reserve && fields.coin_z_reserve > 0) { + let coin_z_type = type.split('<')[1].split(',')[2].trim(); + api.add(coin_z_type, fields.coin_z_reserve); + } + } +} + +// Export first +module.exports = { + timetravel: false, + sui: { + tvl, + }, + methodology: "TVL consists of the liquidity in the DegenHive's AMM pools." +}; \ No newline at end of file diff --git a/projects/DegenHive-dsui/index.js b/projects/DegenHive-dsui/index.js new file mode 100644 index 0000000000..797acfa061 --- /dev/null +++ b/projects/DegenHive-dsui/index.js @@ -0,0 +1,18 @@ +const sui = require("../helper/chain/sui"); + +async function tvl(api) { + + // Add TVL from SUI liquid staking + const dsui_vault = await sui.getObject("0x85aaf87a770b4a09822e7ca3de7f9424a4f58688cfa120f55b294a98d599d402"); + let sui_staked = Number(Number(dsui_vault.fields.dsui_supply * dsui_vault.fields.sui_claimable_per_dsui / 1e9 + dsui_vault.fields.sui_to_stake).toFixed(0)); + api.add( "0x2::sui::SUI", sui_staked) + +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, + methodology: "TVL consists of SUI staked with DegenHive's liquid staking protocol." +}; \ No newline at end of file diff --git a/projects/DegenHive-memepad/index.js b/projects/DegenHive-memepad/index.js new file mode 100644 index 0000000000..b5e52109b1 --- /dev/null +++ b/projects/DegenHive-memepad/index.js @@ -0,0 +1,35 @@ +const sui = require("../helper/chain/sui"); +const { cachedGraphQuery } = require('../helper/cache'); + +const graphQL_endpoint = "https://5lox8etck8.execute-api.eu-central-1.amazonaws.com/api/v1"; +const GET_SUI_MEME_POOLS = `query GetSuiMemePools { + getSuiMemePools { + pools { + meme_pool_addr + } + } +}` + + + +async function tvl(api) { + const sui_meme_pools = await cachedGraphQuery('degen-hive-sui-meme-pools', graphQL_endpoint, GET_SUI_MEME_POOLS); + + // Extract arrays of pool IDs + const poolIds = sui_meme_pools.getSuiMemePools.pools.map(pool => pool.meme_pool_addr); + const suiMemePoolsData = await sui.getObjects(poolIds) + + // Add TVL for MEME Pools + for (const { fields } of suiMemePoolsData) { + if ( fields.sui_available == 0) continue; + api.add( "0x2::sui::SUI", fields.sui_available) + } +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, + methodology: "TVL consists of the liquidity in meme-coin launchpad pools." +}; \ No newline at end of file From 0624556843a96752f51b8a1b108e878c27e04839 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Tue, 26 Nov 2024 13:09:09 +0000 Subject: [PATCH 1196/1768] Add Celestia to Quicksilver TVL (#12432) --- projects/quicksilver/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/quicksilver/index.js b/projects/quicksilver/index.js index 342ac38365..f6c616da25 100644 --- a/projects/quicksilver/index.js +++ b/projects/quicksilver/index.js @@ -12,6 +12,7 @@ const coinGeckoIds = { ustars: "stargaze", usaga: "saga-2", ubld: "agoric", + utia: "celestia", }; async function tvl() { From 94c01c85de2d8b60083b77f45039090a2a69e33f Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Tue, 26 Nov 2024 16:09:19 +0300 Subject: [PATCH 1197/1768] Add new chains and tokens to CrossCurve (#12433) --- projects/crosscurve/index.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index 1cd9439331..0a997399ec 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -120,6 +120,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ ADDRESSES.blast.WETH, // WETH + "0x4300000000000000000000000000000000000003", // USDB ], }), }, @@ -128,6 +129,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ ADDRESSES.mantle.WETH, // WETH + "0x09bc4e0d864854c6afb6eb9a9cdf58ac190d0df9", // USDC ], }), }, @@ -137,6 +139,7 @@ module.exports = { tokens: [ ADDRESSES.linea.WETH, // WETH "0x3aab2285ddcddad8edf438c1bab47e1a9d05a9b4", // WBTC + "0x176211869cA2b568f2A7D4EE941E073a821EE1ff", // USDC.e ], }), }, @@ -145,6 +148,31 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ ADDRESSES.taiko.WETH, // WETH + "0x07d83526730c7438048d55a4fc0b850e2aab6f0b", // USDC + ], + }), + }, + celo: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x28f209844029755fc563c1bd4fd21f42dc7ce0e4", // Tri-pool + ], + }), + }, + fraxtal: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0xcaef324bea3ff5c7a08710081294f3344ffadc54", // FRAX/USDT + ], + }), + }, + kava: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x919C1c267BC06a7039e03fcc2eF738525769109c", // USDt ], }), }, From 3d1d183f1b5ceb5221d556a710f363beb575b78e Mon Sep 17 00:00:00 2001 From: admin-wagmi Date: Tue, 26 Nov 2024 16:09:29 +0300 Subject: [PATCH 1198/1768] Added wagmi adapter (#12435) Co-authored-by: p.serebryany --- projects/wagmi/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/wagmi/index.js diff --git a/projects/wagmi/index.js b/projects/wagmi/index.js new file mode 100644 index 0000000000..0589370c38 --- /dev/null +++ b/projects/wagmi/index.js @@ -0,0 +1,18 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { fetchURL } = require('../helper/utils'); + +async function fetchTvl(api) { + const response = await fetchURL("https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getBondingCurveBalanceSum") + api.add(ADDRESSES.ton.TON, response.data.balance) +} + + +module.exports = { + methodology: ` + TVL is calculated on the backend by summing up all the balances of the bonding curves that have not gone to the DEX yet. + `.trim(), + timetravel: false, + ton: { + tvl: fetchTvl + } +} From c2a6aa6532a116d0cfa7ed6f00220141ee30a5bb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:10:06 +0100 Subject: [PATCH 1199/1768] Revert "Added wagmi adapter" (#12442) --- projects/wagmi/index.js | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 projects/wagmi/index.js diff --git a/projects/wagmi/index.js b/projects/wagmi/index.js deleted file mode 100644 index 0589370c38..0000000000 --- a/projects/wagmi/index.js +++ /dev/null @@ -1,18 +0,0 @@ -const ADDRESSES = require("../helper/coreAssets.json"); -const { fetchURL } = require('../helper/utils'); - -async function fetchTvl(api) { - const response = await fetchURL("https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getBondingCurveBalanceSum") - api.add(ADDRESSES.ton.TON, response.data.balance) -} - - -module.exports = { - methodology: ` - TVL is calculated on the backend by summing up all the balances of the bonding curves that have not gone to the DEX yet. - `.trim(), - timetravel: false, - ton: { - tvl: fetchTvl - } -} From 26455e2a59a809e55de717dce157bfd85930f936 Mon Sep 17 00:00:00 2001 From: JB Date: Tue, 26 Nov 2024 05:11:39 -0800 Subject: [PATCH 1200/1768] Update Royco addresses to final vault deployment (#12436) --- projects/royco/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/royco/index.js b/projects/royco/index.js index ebe975e45b..75aa36731e 100644 --- a/projects/royco/index.js +++ b/projects/royco/index.js @@ -1,9 +1,9 @@ const { getLogs2 } = require('../helper/cache/getLogs') const config = { - ethereum: { factory: '0xbfac50c6b2c91ab756c1e5efab699438992cc1b2', fromBlock: 21183492 }, - arbitrum: { factory: '0xbfac50c6b2c91ab756c1e5efab699438992cc1b2', fromBlock: 274261481 }, - base: { factory: '0xbfac50c6b2c91ab756c1e5efab699438992cc1b2', fromBlock: 22384258 }, + ethereum: { factory: '0x75e502644284edf34421f9c355d75db79e343bca', fromBlock: 21244948 }, + arbitrum: { factory: '0x75e502644284edf34421f9c355d75db79e343bca', fromBlock: 277208990 }, + base: { factory: '0x75e502644284edf34421f9c355d75db79e343bca', fromBlock: 22754606 }, } Object.keys(config).forEach(chain => { From 26793b7576d691fcad1cda7413f7ba9e65cc9508 Mon Sep 17 00:00:00 2001 From: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Date: Tue, 26 Nov 2024 17:11:57 +0400 Subject: [PATCH 1201/1768] Updated the ZAI addresses for mainnet and base (#12441) --- projects/mahaxyz/index.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/projects/mahaxyz/index.js b/projects/mahaxyz/index.js index 683bfdfc35..cc8cae18c1 100644 --- a/projects/mahaxyz/index.js +++ b/projects/mahaxyz/index.js @@ -6,49 +6,57 @@ const eth = { dai: ADDRESSES.ethereum.DAI, maha: "0x745407c86df8db893011912d3ab28e68b62e49b0", usdc: ADDRESSES.ethereum.USDC, + susde: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497', usdt: ADDRESSES.ethereum.USDT, weth: ADDRESSES.ethereum.WETH, - zai: "0x69000405f9dce69bd4cbf4f2865b79144a69bfe0", + zai: "0x69000dFD5025E82f48Eb28325A2B88a241182CEd", + szai: "0x69000195D5e3201Cf73C9Ae4a1559244DF38D47C", // peg stability modules psmUSDC: '0x69000052a82e218ccb61fe6e9d7e3f87b9c5916f', + psmsUSDe: '0xEEc58Cd30D88c70894B331b2fe0ECc2BF535656B', // pools - zaiUsdcCurve: "0x6ee1955afb64146b126162b4ff018db1eb8f08c3", - zaiMahaCurve: "0x0086ef314a313018c70a2cd92504c7d1038a25aa", + zaiUsdcCurve: "0x4a0c954d0f19269f4fc5c217821c6150a8870ad4", + zaiMahaCurve: "0x7d2dffa9e903b8377c96196da424c7965b06bcc3", + zaiSzaiCurve: "0x53ad9268a66cef20a4c458d759eee5aa55be1140", // pool staking contracts - zaiMahaCurveStaking: "0x237efe587f2cb44597063dc8403a4892a60a5a4f", - zaiUsdcCurveStaking: "0x154F52B347D8E48b8DbD8D8325Fe5bb45AAdCCDa", + zaiMahaCurveStaking: "0xE2EbBf803d0199A5A26108bA36FBAc366b201Be1", + zaiUsdcCurveStaking: "0xdFB06C4c562Bcc810C112FBAC99c59C2856b86D1", + zaiSzaiCurveStaking: "0xfDAeB792FF19e7bd4f7ED5d6ce2ef7925d002A19", }; const base = { usdc: ADDRESSES.base.USDC, maha: '0x554bba833518793056CF105E66aBEA330672c0dE', - usdz: '0x0A27E060C0406f8Ab7B64e3BEE036a37e5a62853', + zai: "0x69000dFD5025E82f48Eb28325A2B88a241182CEd", + szai: "0x69000195D5e3201Cf73C9Ae4a1559244DF38D47C", // pools - zaiUsdcAerodrome: "0x72d509aff75753aaad6a10d3eb98f2dbc58c480d", - zaiMahaAerodrome: "0x6B22E989E1D74621ac4c8bcb62bcC7EE7c25b45A", + zaiUsdcAerodrome: "0x93EdC603D7A2eA03518Ac55219cAD320010a58e4", + zaiMahaAerodrome: "0x96A0EC12A9F3bEabFf9Bb59c3F33EE439dAF2a85", // staking contracts - zaiUsdcStaking: "0x1097dFe9539350cb466dF9CA89A5e61195A520B0", - zaiMahaStaking: "0x7D5a39744608A809c850f63CB1A3d3f9b4cAc586", + zaiUsdcStaking: "0xD87ECeF739161be77bbe9891dBA80F14275BBE34", + zaiMahaStaking: "0xe77b404e934c1d97f179061349F459847f70Cd8C", } Object.keys(eth).forEach((k) => (eth[k] = eth[k].toLowerCase())); -const collaterals = [eth.usdc, eth.usdt, eth.dai]; -const pegStabilityModules = [eth.psmUSDC] +const collaterals = [eth.usdc, eth.usdt, eth.dai, eth.usdc, eth.susde]; +const pegStabilityModules = [eth.psmUSDC, eth.psmsUSDe] module.exports = { ethereum: { pool2: sumTokensExport({ tokensAndOwners: [ [eth.zaiMahaCurve, eth.zaiMahaCurveStaking], - [eth.zaiUsdcCurve, eth.zaiUsdcCurveStaking] - ] + [eth.zaiUsdcCurve, eth.zaiUsdcCurveStaking], + [eth.zaiSzaiCurve, eth.zaiSzaiCurveStaking] + ], + resolveLP: true, }), tvl: sumTokensExport({ owners: pegStabilityModules, tokens: collaterals }), }, From f588262868877eba7c7a20cf159952b7dc11214c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:12:13 +0100 Subject: [PATCH 1202/1768] temp fix stargaze --- projects/stargaze/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/stargaze/index.js b/projects/stargaze/index.js index 5fd6ce2460..db843560ea 100644 --- a/projects/stargaze/index.js +++ b/projects/stargaze/index.js @@ -2,6 +2,7 @@ const sdk = require("@defillama/sdk"); const { get } = require('../helper/http') async function tvl() { + throw new Error('Api response include NFT value') const balances = {}; /** From 6a4e128d550e8cd67b48042c45e7a70b5527cefd Mon Sep 17 00:00:00 2001 From: Da Sichuan <86024678+DaSichuan@users.noreply.github.com> Date: Tue, 26 Nov 2024 06:21:44 -0800 Subject: [PATCH 1203/1768] Add SpringSui (Ecosystem) (#12261) --- projects/springsui-ecosystem/index.js | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/springsui-ecosystem/index.js diff --git a/projects/springsui-ecosystem/index.js b/projects/springsui-ecosystem/index.js new file mode 100644 index 0000000000..7f8178a58f --- /dev/null +++ b/projects/springsui-ecosystem/index.js @@ -0,0 +1,30 @@ +const sui = require('../helper/chain/sui') + +const CREATE_EVENT_TYPE = '0xb0575765166030556a6eafd3b1b970eba8183ff748860680245b9edd41c716e7::events::Event<0xb0575765166030556a6eafd3b1b970eba8183ff748860680245b9edd41c716e7::liquid_staking::CreateEvent>'; +const EXCLUDE_POOL_IDS = [ + '0x15eda7330c8f99c30e430b4d82fd7ab2af3ead4ae17046fcb224aa9bad394f6b', +] + +async function tvl() { + const poolIds = (await sui.queryEvents({ + eventType: CREATE_EVENT_TYPE, + transform: (i) => i.event.liquid_staking_info_id, + })).filter((id) => !EXCLUDE_POOL_IDS.includes(id)); + + let suiAmount = 0; + for (const poolId of poolIds) { + const pool = await sui.getObject(poolId); + suiAmount += pool.fields.storage.fields.total_sui_supply / 10 ** 9 + } + return { + sui: suiAmount, + } +} + + +module.exports = { + methodology: "Calculates the amount of SUI staked in ecosystem SpringSui LSTs.", + sui: { + tvl, + } +} From 2e5dc35337a0df7ff096db29b8eefe602c8b2daa Mon Sep 17 00:00:00 2001 From: HydrometerFi Date: Wed, 27 Nov 2024 01:49:46 +0100 Subject: [PATCH 1204/1768] Add Hydrometer | Base (#12444) --- projects/hydrometer/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/hydrometer/index.js diff --git a/projects/hydrometer/index.js b/projects/hydrometer/index.js new file mode 100644 index 0000000000..759955785b --- /dev/null +++ b/projects/hydrometer/index.js @@ -0,0 +1,11 @@ +const { uniTvlExport } = require('../helper/calculateUniTvl.js') + +module.exports = { + misrepresentedTokens: true, + base: { + tvl: uniTvlExport("0xF60caCf0A3daa5B6a79ca6594BEF38F85391AE0A", undefined, undefined, { + allPairsLength: 'uint256:allPoolsLength', + allPairs: 'function allPools(uint256) view returns (address)', + }, { useDefaultCoreAssets: true, hasStablePools: true, }), + }, +} \ No newline at end of file From 80942a7cd7079140c32c392403d9dfe98a05fb76 Mon Sep 17 00:00:00 2001 From: Lucas Santos <72104971+lucasgabrielgsp@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:50:00 -0300 Subject: [PATCH 1205/1768] UnoRe - feat: add new treasury address (#12445) --- projects/treasury/unore.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/treasury/unore.js b/projects/treasury/unore.js index d12966f9d2..e4b371641d 100644 --- a/projects/treasury/unore.js +++ b/projects/treasury/unore.js @@ -2,6 +2,7 @@ const ADDRESSES = require("../helper/coreAssets.json"); const { treasuryExports, nullAddress } = require("../helper/treasury"); const multisig='0x46488d2D36D8983de980Ff3b9f046DCd0a9DC2ae'; const multisig2='0x4aede441085398BD74FeB9eeFCfe08E709e69ABF' +const multisig3= '0xacd5009f13a5b4f874d61b2a1e20241ea7a7b953'; const UNO = "0x474021845c4643113458ea4414bdb7fb74a01a77"; @@ -14,7 +15,7 @@ module.exports = treasuryExports({ ADDRESSES.ethereum.WETH,//WETH ADDRESSES.ethereum.USDT,//USDT ], - owners: [multisig,multisig2], + owners: [multisig,multisig2, multisig3], ownTokens: [UNO], }, }); From 08239f856cae06594ccfb703eec94c99e4ef9598 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 27 Nov 2024 10:52:40 +0100 Subject: [PATCH 1206/1768] Use string timestamps for start fields (#12453) --- package.json | 1 + projects/0x0dex/index.js | 2 +- projects/0x_nodes/index.js | 2 +- projects/0xacid/index.js | 2 +- projects/1155Tech/index.js | 1 - projects/3xcalibur/index.js | 2 +- projects/88mph/index.js | 2 +- projects/BankOfCronos/index.js | 9 --- projects/BankofCronos-Loans/index.js | 1 - projects/DeNet/index.js | 2 +- projects/FeeFree/index.js | 2 +- projects/LamaMiner/index.js | 2 +- projects/MantaTimeLockContract/index.js | 1 - projects/MeowMiner/index.js | 2 +- projects/MorpheusAI/index.js | 2 +- projects/aboard-exchange/index.js | 2 +- projects/acala-euphrates/index.js | 2 +- projects/acoconut/index.js | 2 +- projects/algem/index.js | 1 - projects/alien-finance/index.js | 2 +- projects/alkemi/index.js | 2 +- projects/allspark/index.js | 1 - projects/alpaca-finance-lend/index.js | 2 +- projects/alpaca-finance-v2/index.js | 2 +- projects/alpaca-finance/index.js | 2 +- projects/alpha-homora/index.js | 2 +- projects/alternity/index.js | 2 +- projects/altr-lend/index.js | 2 +- projects/amped/index.js | 2 +- projects/anyhedge/index.js | 2 +- projects/ape-fi/index.js | 1 - projects/apollox/index.js | 2 +- projects/applepie/index.js | 1 - projects/aqua-network/index.js | 2 +- projects/aqua-patina/index.js | 1 - projects/aquaprotocol/index.js | 2 +- projects/arbor-finance/index.js | 1 - projects/arcadia-finance-v2/index.js | 2 +- projects/arcadia-finance/index.js | 2 +- projects/arcanum/index.js | 1 - projects/astherus/index.js | 2 +- projects/astra-dao/index.js | 1 - projects/astriddao/index.js | 1 - projects/atlendis-v2/index.js | 2 +- projects/auctus/index.js | 2 +- projects/autotronic/index.js | 2 +- projects/awaken/index.js | 2 +- projects/axe/index.js | 2 +- projects/babylon/index.js | 2 +- projects/bagel-finance/index.js | 2 +- projects/bancor/index.js | 2 +- projects/bancor/v3.js | 2 +- projects/bao-baskets/index.js | 2 +- projects/base3d/index.js | 1 - projects/basemax-finance/index.js | 1 - projects/basin/index.js | 2 +- projects/baton/index.js | 1 - projects/bean/index.js | 2 +- projects/bepro/index.js | 1 - projects/betswirl/index.js | 2 +- projects/bit-reserve/index.js | 2 +- projects/bitlend/index.js | 1 - projects/blex/index.js | 2 +- projects/bluebit/index.js | 1 - projects/bonqdao/index.js | 1 - projects/bracketX/index.js | 2 +- projects/bril-finance/index.js | 1 - projects/brine/index.js | 2 +- projects/brokkr/index.js | 2 +- projects/burve-protocol/index.js | 2 +- projects/cache-gold/index.js | 2 +- projects/cake-monster/index.js | 1 - projects/camelot/index.js | 2 +- projects/capy-finance/index.js | 1 - projects/cauldron/index.js | 2 +- projects/chainflip/index.js | 2 +- projects/clip-finance/index.js | 2 +- projects/collectionxyz/index.js | 1 - projects/colony/index.js | 2 +- projects/connext/old.js | 2 +- projects/convergence/index.js | 2 +- projects/core-powercity-io/index.js | 2 +- projects/core/index.js | 2 +- projects/coupon-finance/index.js | 1 - projects/cream/index.js | 2 +- projects/creamswap/index.js | 2 +- projects/cryptoswap/index.js | 2 +- projects/csix/index.js | 1 - projects/cybro/index.js | 1 - projects/dam-finance/index.js | 1 - projects/ddex/index.js | 2 +- projects/deepbook-v3/index.js | 2 +- projects/deepp/index.js | 2 +- projects/defi-swap/index.js | 2 +- projects/defifranc/index.js | 2 +- projects/defiyieldprotocol/index.js | 2 +- projects/defrost/index.js | 1 - projects/degate/index.js | 2 +- projects/deltaprime/index.js | 2 - projects/derivadex/index.js | 2 +- projects/dexilla/index.js | 2 +- projects/dexter/index.js | 2 +- projects/dextf/index.js | 2 +- projects/dforce/index.js | 2 +- projects/dirac-finance/index.js | 1 - projects/dogedollar/index.js | 1 - projects/dolomite/index.js | 2 +- projects/dvol/index.js | 1 - projects/dydx/index.js | 2 +- projects/earn-powercity-io/index.js | 2 +- projects/ebtc/index.js | 2 +- projects/ecodefi/index.js | 1 - projects/ensuro/index.js | 2 +- projects/epoch-island/index.js | 2 +- projects/erasure/index.js | 2 +- projects/esper-finance/index.js | 1 - projects/ethichub/index.js | 2 +- projects/ethosx/index.js | 2 +- projects/everdex/index.js | 2 +- projects/exsat-credit-staking/index.js | 2 +- projects/ezkalibur/index.js | 2 +- projects/ferdyflip/index.js | 2 +- projects/ferro/index.js | 2 +- projects/flashstake/index.js | 2 +- projects/flex-powercity-io/index.js | 2 +- projects/flexdao/index.js | 1 - projects/florence-finance/index.js | 6 +- projects/forgesx/index.js | 2 +- projects/frankencoin/index.js | 2 +- projects/freestyle/index.js | 2 +- projects/frigg-eco/index.js | 1 - projects/future-swap/index.js | 2 +- projects/futureswap/index.js | 2 +- projects/geode/index.js | 1 - projects/glif/index.js | 2 +- projects/gnosis/index.js | 2 +- projects/goat-tech/index.js | 1 - projects/gogocoin/index.js | 2 +- projects/goku-money/index.js | 2 +- projects/goldlink/index.js | 2 +- projects/goober/index.js | 2 +- projects/grace/index.js | 1 - projects/grafun/index.js | 1 - projects/grappa-finance/index.js | 2 +- projects/gravita-protocol/index.js | 2 +- projects/gravity-bridge/index.js | 1 - projects/groprotocol/index.js | 2 +- projects/gudchain/index.js | 1 - projects/gullnetwork/index.js | 2 +- projects/hai/index.js | 2 +- projects/harmonix/index.js | 2 +- projects/hectagon/index.js | 1 - projects/hedgefarm/index.js | 1 - projects/hodlify/index.js | 2 +- projects/huma/index.js | 2 +- projects/hydt/index.js | 2 +- projects/illuminex/index.js | 2 +- projects/increment-protocol/index.js | 2 +- projects/insuredefi/index.js | 2 +- projects/invar-finance/index.js | 1 - projects/inverse-finance-firm/index.js | 2 +- projects/inverse/index.js | 2 +- projects/ion-dao/index.js | 1 - projects/ip/index.js | 1 - projects/ironbank/index.js | 2 +- projects/ithaca/index.js | 1 - projects/ithil/index.js | 1 - projects/juicebox-v1/index.js | 2 +- projects/juicebox-v2/index.js | 2 +- projects/juicebox-v3/index.js | 2 +- projects/kaiafun/index.js | 1 - projects/keeper-dao/index.js | 2 +- projects/kewl/index.js | 2 +- projects/kiloex/index.js | 2 +- projects/lavarage/index.js | 4 +- projects/lien/index.js | 2 +- projects/lightning-network/index.js | 2 +- projects/liqee/index.js | 2 +- projects/liquidity-slicing/index.js | 1 - projects/liquity/index.js | 2 +- projects/llamalend/index.js | 2 +- projects/lobster-protocol/index.js | 2 +- projects/loopfi/index.js | 2 +- projects/louverture/index.js | 2 +- projects/love/index.js | 1 - projects/lsdx/index.js | 1 - projects/lucidly/index.js | 2 +- projects/lumin-finance/index.js | 1 - projects/lusd-chickenbonds/index.js | 1 - projects/lybra-v2/index.js | 1 - projects/lybra/index.js | 2 +- projects/lyve/index.js | 2 +- projects/maker-rwa/index.js | 2 +- projects/maker/index.js | 2 +- projects/mangrove/index.js | 2 +- projects/meme-dollar/index.js | 2 +- projects/merlin/index.js | 2 +- projects/metastreet-v2/index.js | 1 - projects/metastreet/index.js | 1 - projects/metronome/index.js | 2 +- projects/milkomeda-djed/index.js | 1 - projects/milkyway/index.js | 2 +- projects/minerPepe/index.js | 1 - projects/mobius/index.js | 1 - projects/mojitoswap/index.js | 1 - projects/mole/index.js | 2 +- projects/monroeprotocol/index.js | 2 +- projects/monster/index.js | 1 - projects/moret/index.js | 2 +- projects/mountain-protocol/index.js | 1 - projects/mstable/index.js | 2 +- projects/nayms/index.js | 2 +- projects/neptune-mutual/index.js | 2 +- projects/nerve/index.js | 2 +- projects/nexus/index.js | 2 +- projects/nomad/index.js | 1 - projects/nsure/index.js | 2 +- projects/olympus/index.js | 2 +- projects/onsenswap/index.js | 2 +- projects/optionBlitz/index.js | 1 - projects/opulous/index.js | 2 +- projects/orange-finance/index.js | 1 - projects/ottopia/index.js | 1 - projects/pairex/index.js | 2 +- projects/paladinfinance-dullahan/index.js | 1 - projects/paladinfinance-warlord/index.js | 1 - projects/pangolin/index.js | 2 +- projects/papparico-finance/index.js | 1 - projects/peakdefi/index.js | 2 +- projects/peardao/index.js | 1 - projects/perfect-pool/index.js | 2 +- projects/perlinx/index.js | 2 +- projects/perp88/index.js | 2 +- projects/phission-finance/index.js | 2 +- projects/phoenix/index.js | 2 +- projects/piggy/index.js | 2 +- projects/pingu/index.js | 2 +- projects/pizzax/index.js | 1 - projects/planar-finance/index.js | 2 +- projects/plenty/index.js | 2 +- projects/polygon/index.js | 2 +- projects/polytrade/index.js | 2 +- projects/ponyswap/index.js | 2 +- projects/popcorn/index.js | 1 - projects/powerindex/index.js | 2 +- projects/prime-staked/index.js | 1 - projects/primitive/index.js | 2 +- projects/promethium/index.js | 2 +- projects/psy/index.js | 2 +- projects/puffer/index.js | 1 - projects/pumpxy/index.js | 2 +- projects/pv01/index.js | 1 - projects/qian/index.js | 2 +- projects/quadrat/index.js | 2 +- projects/range/index.js | 2 +- projects/rari/index.js | 2 +- projects/ray/index.js | 2 +- projects/rebalance/index.js | 2 +- projects/reflexer/index.js | 2 +- projects/revault/index.js | 2 +- projects/reyield-finance/index.js | 2 +- projects/risq.js | 1 - projects/rize/index.js | 2 +- projects/rosy-burnt-steak/index.js | 2 +- projects/rumi/index.js | 1 - projects/sablier/index.js | 2 +- projects/saltyio/index.js | 2 +- projects/salvor/index.js | 2 +- projects/sandclock/index.js | 1 - projects/scientixfinance/index.js | 1 - projects/scoreplay/index.js | 2 +- projects/seashell/index.js | 1 - projects/set-protocol/index.js | 2 +- projects/sfinance/index.js | 6 +- projects/shell/index.js | 1 - projects/sherlock/index.js | 2 +- projects/shibui/index.js | 2 - projects/shield/index.js | 10 +-- projects/shprd/index.js | 2 +- projects/single/index.js | 2 +- projects/singularx/index.js | 2 +- projects/sirius-finance/index.js | 2 +- projects/skale/index.js | 2 +- projects/skcs/index.js | 1 - projects/slsd/index.js | 1 - projects/smbswap/index.js | 2 +- projects/smilee-finance/index.js | 1 - projects/solid-world/index.js | 2 +- projects/sommelier/index.js | 2 +- projects/spacewhale/index.js | 2 +- projects/spiral-dao/index.js | 1 - projects/stCelo/index.js | 1 - projects/stake-ly/index.js | 2 +- projects/stakedotlink/index.js | 2 +- projects/stakestone-btc/index.js | 1 - projects/stakestone/index.js | 1 - projects/steakHut/index.js | 1 - projects/stealthpad/index.js | 1 - projects/stream/index.js | 1 - projects/suzaku/index.js | 2 +- projects/swaap-earn/index.js | 2 +- projects/swaap/index.js | 2 +- projects/swapsicle/index.js | 1 - projects/symbiotic/index.js | 2 +- projects/symmetry-trade/index.js | 1 - projects/synthetix/api.js | 2 +- projects/synthetix/apiCache.js | 2 +- projects/synthex/index.js | 1 - projects/t-protocol-v2/index.js | 2 +- projects/t-protocol/index.js | 2 +- projects/taidog/index.js | 1 - projects/tcv_platform/index.js | 2 +- projects/tetu/index.js | 2 +- projects/thala-vethl/index.js | 2 +- projects/tholgar/index.js | 1 - projects/thorn-protocol/index.js | 2 +- projects/tlx/index.js | 2 +- projects/toros/index.js | 2 +- projects/toucan-protocol/index.js | 2 +- projects/tranche/index.js | 2 +- projects/treasury/betswirl.js | 2 +- projects/treasury/perfect-pool.js | 2 +- projects/treasury/shibui.js | 2 - projects/treehouse/index.js | 2 +- projects/truefi/index.js | 2 +- projects/twtstake/index.js | 1 - projects/umamifinance/index.js | 2 +- projects/unbk/index.js | 1 - projects/unitus/index.js | 2 +- projects/universe/index.js | 2 +- projects/uniwhale/index.js | 2 +- projects/uno-farm/index.js | 2 +- projects/unore/index.js | 2 +- projects/uplift/index.js | 2 +- projects/valleyswap/index.js | 1 - projects/valueliquid/index.js | 2 +- projects/varen/index.js | 2 +- projects/vectorreserve/index.js | 1 - projects/vela-exchange/index.js | 1 - projects/vendor-finance-v2/index.js | 1 - projects/vendor-finance/index.js | 1 - projects/vesper/index.js | 2 +- projects/vest/index.js | 2 +- projects/vesta/index.js | 2 +- projects/vine/index.js | 2 +- projects/visor/index.js | 2 +- projects/w3bank/index.js | 2 +- projects/warp/index.js | 2 +- projects/waterfalldefi/index.js | 1 - projects/weave/index.js | 1 - projects/winr-protocol/index.js | 1 - projects/wowswap/index.js | 2 +- projects/xdai/index.js | 2 +- projects/xfai/index.js | 2 +- projects/y24/index.js | 1 - projects/yamato/index.js | 2 +- projects/yamfore/index.js | 2 +- projects/yaxis/index.js | 2 +- projects/yay-staking/index.js | 2 +- projects/yearn-ether/index.js | 2 +- projects/yetiFinance/index.js | 2 +- projects/yfii/index.js | 2 +- projects/yiedl-vaults/index.js | 2 +- projects/yieldfields/index.js | 2 +- projects/yieldyak-staked-avax/index.js | 2 +- projects/yldr/index.js | 2 +- projects/zeno/index.js | 2 +- projects/zeroswap/index.js | 1 - projects/zkUSD/index.js | 2 +- projects/zkdx/index.js | 1 - projects/zkswap/index.js | 2 +- utils/scripts/stringTimestamp.js | 96 +++++++++++++++++++++++ 372 files changed, 359 insertions(+), 393 deletions(-) create mode 100644 utils/scripts/stringTimestamp.js diff --git a/package.json b/package.json index 0ad5df5262..16a0dbca56 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "useTokenLabels": "node utils/scripts/useTokenLabels.js", "biggest-files": "find ./projects -name '*.js' -not -path './projects/helper/*' -not -path './projects/curve/*' -not -path './projects/sigmao/*' -exec du -sh {} \\; | sort -rh | head -n 100", "check-bitcoin-duplicates": "node utils/scripts/checkBTCDupsv2.js", + "string-timestamp": "node utils/scripts/stringTimestamp.js", "postinstall": "echo 'run \"npm update @defillama/sdk\" if you want lastest sdk changes' " }, "author": "", diff --git a/projects/0x0dex/index.js b/projects/0x0dex/index.js index 54d77d54b0..5bf23d2fa3 100644 --- a/projects/0x0dex/index.js +++ b/projects/0x0dex/index.js @@ -2,6 +2,6 @@ const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs'); const ETH_POOL_ADDRESS = "0x3d18AD735f949fEbD59BBfcB5864ee0157607616"; module.exports = { - start: 1685386800, // 19/05/2023 @ 07:00pm UTC + start: '2023-05-29', // 19/05/2023 @ 07:00pm UTC ethereum: { tvl: sumTokensExport({ owner: ETH_POOL_ADDRESS, tokens: [nullAddress]}) }, }; \ No newline at end of file diff --git a/projects/0x_nodes/index.js b/projects/0x_nodes/index.js index 22aa4c7df0..0b55c58ae2 100644 --- a/projects/0x_nodes/index.js +++ b/projects/0x_nodes/index.js @@ -50,7 +50,7 @@ module.exports = { ], methodology: ` Counts the number of wrapped native tokens in all yield strategies across all the chains the protocol is deployed on + staking counts the number of BIOS tokens staked in the kernels across all the chains (PFA: Protocol Fee Accruals by staking assets)`, - start: 1633046400, // Friday 1. October 2021 00:00:00 GMT + start: '2021-10-01', // Friday 1. October 2021 00:00:00 GMT ...tvlExports, deadFrom: 1659527340, } diff --git a/projects/0xacid/index.js b/projects/0xacid/index.js index ed924429df..aa86e413ea 100644 --- a/projects/0xacid/index.js +++ b/projects/0xacid/index.js @@ -4,7 +4,7 @@ const ACID_STAKING = "0x00a842038a674616f6a97e62f80111a536778282"; const ACID_TOKEN = "0x29C1EA5ED7af53094b1a79eF60d20641987c867e"; module.exports = { - start: 1678417200, + start: '2023-03-10', arbitrum: { tvl: () => ({}), staking: stakingUnknownPricedLP(ACID_STAKING, ACID_TOKEN, "arbitrum", "0x73474183a94956cd304c6c5a504923d8150bd9ce") diff --git a/projects/1155Tech/index.js b/projects/1155Tech/index.js index 85e5b89fba..9fdf80684d 100644 --- a/projects/1155Tech/index.js +++ b/projects/1155Tech/index.js @@ -4,7 +4,6 @@ const MARKET_1155TECH_CONTRACT = '0x33b77fAf955Ed3eDAf939ae66C4D7a2D78bc30C6'; module.exports = { methodology: 'Value of all Keys across all art markets is TVL in the protocol', - start: 7280880, canto: { tvl: sumTokensExport({ owner: MARKET_1155TECH_CONTRACT, tokens: [ADDRESSES.canto.NOTE] }) } diff --git a/projects/3xcalibur/index.js b/projects/3xcalibur/index.js index cd5a6b7592..56d14d6d2c 100644 --- a/projects/3xcalibur/index.js +++ b/projects/3xcalibur/index.js @@ -2,7 +2,7 @@ const { uniTvlExport } = require("../helper/calculateUniTvl.js"); module.exports = { misrepresentedTokens: true, - start: 1667689200, + start: '2022-11-06', arbitrum: { tvl: uniTvlExport("0xD158bd9E8b6efd3ca76830B66715Aa2b7Bad2218", "arbitrum", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: true, }), }, diff --git a/projects/88mph/index.js b/projects/88mph/index.js index a931e7e9ed..d77e5257b0 100644 --- a/projects/88mph/index.js +++ b/projects/88mph/index.js @@ -135,6 +135,6 @@ tvlExports.ethereum.staking = staking("0x1702F18c1173b791900F81EbaE59B908Da8F689 module.exports = { methodology: `Using the addresses for the fixed interest rate bonds we are able to find the underlying tokens held in each address. Once we have the underlying token we then get the balances of each of the tokens. For the CRV tokens used "CRV:STETH" for example, the address is replaced with the address of one of the tokens. In the example at hand the address is replaced with the "WETH" address so that the price can be calculated.`, - start: 1606109629, // Monday, November 23, 2020 5:33:49 AM GMT + start: '2020-11-23', // Monday, November 23, 2020 5:33:49 AM GMT ...tvlExports } diff --git a/projects/BankOfCronos/index.js b/projects/BankOfCronos/index.js index 59704192af..368edeec23 100644 --- a/projects/BankOfCronos/index.js +++ b/projects/BankOfCronos/index.js @@ -1,14 +1,5 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensExport } = require("../helper/unwrapLPs"); - -const BOC_TREASURY_ADDRESS = "0xBacF28BF21B374459C738289559EF89978D08102"; -const CUSD_ADDRESS = "0x26043Aaa4D982BeEd7750e2D424547F5D76951d4"; -const USDC_ADDRESS = ADDRESSES.cronos.USDC; - module.exports = { - start: 6949784, cronos: { - // tvl: sumTokensExport({ owner: BOC_TREASURY_ADDRESS, tokens: [CUSD_ADDRESS, USDC_ADDRESS]}), tvl: () => 0 }, methodology: diff --git a/projects/BankofCronos-Loans/index.js b/projects/BankofCronos-Loans/index.js index 46c8641f59..4aed7b4fbd 100644 --- a/projects/BankofCronos-Loans/index.js +++ b/projects/BankofCronos-Loans/index.js @@ -9,7 +9,6 @@ async function tvl(api) { } module.exports = { - start: 6949784, cronos: { tvl, }, diff --git a/projects/DeNet/index.js b/projects/DeNet/index.js index e62bff66ac..d7887384a6 100644 --- a/projects/DeNet/index.js +++ b/projects/DeNet/index.js @@ -7,7 +7,7 @@ const owners = [ ] module.exports = { - start: 1691761595, // Friday, 11-Aug-23 13:46:35 UTC + start: '2023-08-11', // Friday, 11-Aug-23 13:46:35 UTC methodology: "Total amount of DE tokens used for DeNet storage payments", polygon: { diff --git a/projects/FeeFree/index.js b/projects/FeeFree/index.js index 7e8942a477..1d46901ddc 100644 --- a/projects/FeeFree/index.js +++ b/projects/FeeFree/index.js @@ -17,7 +17,7 @@ const config = { } module.exports = { - start: 1714060800, // Apr 26 2024 + start: '2024-04-25', // Apr 26 2024 } Object.keys(config).forEach(chain => { diff --git a/projects/LamaMiner/index.js b/projects/LamaMiner/index.js index 0c13ec936a..8df22f0176 100644 --- a/projects/LamaMiner/index.js +++ b/projects/LamaMiner/index.js @@ -9,7 +9,7 @@ const LP_LQDX_LAMA = "0x3a74922803415Dfc43c0030d47707b20f4c1b05d" module.exports = { misrepresentedTokens: true, methodology: 'counts the number of LAMA tokens in the Lama Miner contract.', - start: 1711962980, + start: '2024-04-01', avax: { tvl: sumTokensExport({ owner: LAMA_MINER_CONTRACT, tokens: [LAMA_TOKEN_CONTRACT], lps: [LP_LAMA_WAVAX], useDefaultCoreAssets: true, }), staking: sumTokensExport({ owner: LAMA_STAKING_CONTRACT, tokens: [LAMA_TOKEN_CONTRACT], lps: [LP_LAMA_WAVAX, LP_LQDX_LAMA], useDefaultCoreAssets: true, }) diff --git a/projects/MantaTimeLockContract/index.js b/projects/MantaTimeLockContract/index.js index 48c2933078..fcac3efcfd 100644 --- a/projects/MantaTimeLockContract/index.js +++ b/projects/MantaTimeLockContract/index.js @@ -6,7 +6,6 @@ const TIME_LOCK_CONTRACT = '0x8Bb6CaE3f1CADA07Dd14bA951e02886ea6bBA183'; module.exports = { methodology: 'counts the number of (MANTA OR STONE) in the time lock contract.', - start: 1497066, manta: { tvl: sumTokensExport({ owner: TIME_LOCK_CONTRACT, tokens: [MANTA, STONE] }), } diff --git a/projects/MeowMiner/index.js b/projects/MeowMiner/index.js index 5ef8c54a5a..e4a47d8026 100644 --- a/projects/MeowMiner/index.js +++ b/projects/MeowMiner/index.js @@ -5,7 +5,7 @@ const LP_MEOW_WAVAX = "0xbbf8e4b9AD041edE1F5270CAf5b7B41F0e55f719" module.exports = { methodology: 'counts the number of MEOW tokens in the Meow Miner contract.', - start: 1710293916, + start: '2024-03-13', avax: { tvl: sumTokensExport({ owner: MEOW_MINER_CONTRACT, tokens: [MEOW_TOKEN_CONTRACT], lps: [LP_MEOW_WAVAX], useDefaultCoreAssets: true, }), } diff --git a/projects/MorpheusAI/index.js b/projects/MorpheusAI/index.js index 9166275130..52c17377f1 100644 --- a/projects/MorpheusAI/index.js +++ b/projects/MorpheusAI/index.js @@ -16,7 +16,7 @@ module.exports = { timetravel: true, misrepresentedTokens: false, methodology: 'Calculates TVL based on stETH deposits in the project contract.', - start: 1707378815, // Feb-08-2024 07:33:35 AM UTC in Unix timestamp + start: '2024-02-08', // Feb-08-2024 07:33:35 AM UTC in Unix timestamp ethereum: { tvl }, diff --git a/projects/aboard-exchange/index.js b/projects/aboard-exchange/index.js index 7478d5e87d..26cbc8fb9c 100644 --- a/projects/aboard-exchange/index.js +++ b/projects/aboard-exchange/index.js @@ -6,7 +6,7 @@ const { sumTokensExport } = require('../helper/unwrapLPs'); module.exports = { methodology: "TVL is equal to users' deposits minus withdrawals", - start: 1641625200, // Jan-08-2022 07:00:00 AM +UTC + start: '2022-01-08', // Jan-08-2022 07:00:00 AM +UTC } const config = { diff --git a/projects/acala-euphrates/index.js b/projects/acala-euphrates/index.js index 1d3c3ca66c..15c7bd079c 100644 --- a/projects/acala-euphrates/index.js +++ b/projects/acala-euphrates/index.js @@ -16,7 +16,7 @@ async function tvl(api) { module.exports = { misrepresentedTokens: true, - start: 1695657600, + start: '2023-09-25', methodology: 'total ldot and tdot locked in the euphrates contract', acala: { tvl, diff --git a/projects/acoconut/index.js b/projects/acoconut/index.js index ec15ad39c6..6a534fb4b6 100644 --- a/projects/acoconut/index.js +++ b/projects/acoconut/index.js @@ -32,5 +32,5 @@ module.exports = { bsc:{ tvl: bsc }, - start: 1600185600, // 09/16/2020 @ 12:00am (UTC+8) + start: '2020-09-15', // 09/16/2020 @ 12:00am (UTC+8) }; diff --git a/projects/algem/index.js b/projects/algem/index.js index d66a69e601..e31d8d61c4 100644 --- a/projects/algem/index.js +++ b/projects/algem/index.js @@ -13,7 +13,6 @@ async function tvl(timestamp, block, chainBlocks) { module.exports = { methodology: 'counts the number of ASTR tokens locked in Liquid Staking contract', - start: 1502025, astar: { tvl, } diff --git a/projects/alien-finance/index.js b/projects/alien-finance/index.js index ba6bff29a8..abd2d1339d 100644 --- a/projects/alien-finance/index.js +++ b/projects/alien-finance/index.js @@ -6,7 +6,7 @@ module.exports = { blast: { tvl, borrowed, }, - start: 1709630412, + start: '2024-03-05', }; async function tvl(api) { diff --git a/projects/alkemi/index.js b/projects/alkemi/index.js index e30d6514c4..a1dd5cc212 100644 --- a/projects/alkemi/index.js +++ b/projects/alkemi/index.js @@ -71,6 +71,6 @@ async function tvl(timestamp, block) { module.exports = { methodology: "TVL consists of Assets (ETH, WBTC, Stablecoins) deposited in Alkemi Earn, Assets (ETH, WBTC, Stablecoins) deposited in Alkemi Earn Open, and does NOT currently consider assets borrowed", - start: 1609380306, // unix timestamp (utc 0) specifying when the project began, or where live data begins + start: '2020-12-31', // unix timestamp (utc 0) specifying when the project began, or where live data begins ethereum: { tvl } // tvl adapter }; diff --git a/projects/allspark/index.js b/projects/allspark/index.js index e59b148d7b..224d8852c6 100644 --- a/projects/allspark/index.js +++ b/projects/allspark/index.js @@ -3,7 +3,6 @@ const {staking} = require("../helper/staking"); module.exports = { methodology: 'allspark counts the staking values as tvl', - start: 1690371, zklink:{ tvl: staking( ["0xD06B5A208b736656A8F9cD04ed43744C738BD8A9"], diff --git a/projects/alpaca-finance-lend/index.js b/projects/alpaca-finance-lend/index.js index 4ddec9ca94..ab96424579 100644 --- a/projects/alpaca-finance-lend/index.js +++ b/projects/alpaca-finance-lend/index.js @@ -2,7 +2,7 @@ const { tvl, borrowed } = require("./lend"); // node test.js projects/alpaca-finance-lend/index.js module.exports = { - start: 1602054167, + start: '2020-10-07', methodology: "Sum floating balance and vaultDebtValue in each vault", bsc: { tvl, borrowed, }, fantom: { tvl, borrowed, }, diff --git a/projects/alpaca-finance-v2/index.js b/projects/alpaca-finance-v2/index.js index 546dabaa96..e3dfbaef57 100644 --- a/projects/alpaca-finance-v2/index.js +++ b/projects/alpaca-finance-v2/index.js @@ -1,7 +1,7 @@ const { lendingTvl, borrowTvl } = require("./moneyMarket"); module.exports = { - start: 1602054167, + start: '2020-10-07', methodology: "Sum floating balance and borrow for each token", bsc: { tvl: lendingTvl, diff --git a/projects/alpaca-finance/index.js b/projects/alpaca-finance/index.js index 80f4b65ae4..042b95927e 100644 --- a/projects/alpaca-finance/index.js +++ b/projects/alpaca-finance/index.js @@ -5,7 +5,7 @@ const { calxALPACAtvl } = require('./xalpaca'); const aExports = require('../alpaca-finance-lend'); module.exports = { - start: 1602054167, + start: '2020-10-07', bsc: { tvl: sdk.util.sumChainTvls([calLyfTvl, calAusdTvl, aExports.bsc.tvl]), staking: calxALPACAtvl, diff --git a/projects/alpha-homora/index.js b/projects/alpha-homora/index.js index 39b58dd157..b614e73bde 100644 --- a/projects/alpha-homora/index.js +++ b/projects/alpha-homora/index.js @@ -26,7 +26,7 @@ module.exports = { optimism:{ tvl: tvlV2Onchain }, - start: 1602054167, // unix timestamp (utc 0) specifying when the project began, or where live data begins + start: '2020-10-07', // unix timestamp (utc 0) specifying when the project began, or where live data begins hallmarks: [ [1613178000, "37M exploit"], // Feb 13, 2021 [1626220800, "Upgrade to V2 on ETH"], // July 14, 2021 00:00 UTC diff --git a/projects/alternity/index.js b/projects/alternity/index.js index b5aba4a541..64a009c6c5 100644 --- a/projects/alternity/index.js +++ b/projects/alternity/index.js @@ -6,7 +6,7 @@ const STAKING_ADDRESS = "0x424891f1D6D4De5c07B6E3F74B3709D6BD9E77ea"; const ALTR_ADDRESS = "0xD1ffCacFc630CE68d3cd3369F5db829a3ed01fE2" module.exports = { - start: 1692423851, + start: '2023-08-19', ethereum: { tvl: getLiquityTvl('0x51c014510A5AdA43408b40D49eF52094014ef3A7'), staking: staking(STAKING_ADDRESS, ALTR_ADDRESS) diff --git a/projects/altr-lend/index.js b/projects/altr-lend/index.js index 6ae0ea96e5..83c24a523d 100644 --- a/projects/altr-lend/index.js +++ b/projects/altr-lend/index.js @@ -17,7 +17,7 @@ async function borrowed(api) { module.exports = { methodology: "Determined by querying from our public TheGraph the total USD value of all active loans", - start: 1707874007, + start: '2024-02-14', polygon: { tvl: () => ({}), borrowed, diff --git a/projects/amped/index.js b/projects/amped/index.js index 04f69f4f22..36ac7c82bb 100644 --- a/projects/amped/index.js +++ b/projects/amped/index.js @@ -6,7 +6,7 @@ const phoenixStakingAddress = '0x3c9586567a429BA0467Bc63FD38ea71bB6B912E0'; const phoenixAmpAddress = '0xca7F14F14d975bEFfEe190Cd3cD232a3a988Ab9C'; module.exports = { - start: 1717674114, + start: '2024-06-06', lightlink_phoenix: { staking: staking(phoenixStakingAddress, phoenixAmpAddress), tvl: gmxExports({ vault: phoenixVaultAddress, }) diff --git a/projects/anyhedge/index.js b/projects/anyhedge/index.js index 4b03fd90e8..f2673e2d0e 100644 --- a/projects/anyhedge/index.js +++ b/projects/anyhedge/index.js @@ -48,7 +48,7 @@ async function tvl({timestamp}) { module.exports = { methodology: "Scrape the blockchain and filter for spent transaction outputs that match the contract's input script template. Aggregate them to compute TVL. The TVL data lags by contract duration since contracts are secret until settled. So, TVL at the current time will always be 0 and can only be calculated in retrospect and stats back-filled when contracts are revealed. For this reason, the code cuts-off the data at 91 days ago. See here for more details: https://gitlab.com/0353F40E/anyhedge-stats/-/blob/master/readme.md", - start: 1654787405, + start: '2022-06-09', bitcoincash: { tvl }, hallmarks: [ [1681725240, "BCH Bull public release (AnyHedge v0.11 contract)"], diff --git a/projects/ape-fi/index.js b/projects/ape-fi/index.js index 3f7a647b4d..bbfdaf4734 100644 --- a/projects/ape-fi/index.js +++ b/projects/ape-fi/index.js @@ -42,7 +42,6 @@ module.exports = { tvl, staking: staking(apeAPE, APE), }, - start: 15688276, methodology: "Counts liquidity as the Collateral APE and USDC & FRAX on all AMOs through their contracts", }; diff --git a/projects/apollox/index.js b/projects/apollox/index.js index fc8582d632..02c7f0d8a1 100644 --- a/projects/apollox/index.js +++ b/projects/apollox/index.js @@ -65,7 +65,7 @@ async function bscTVL(timestamp, _block, { bsc: block }) { } module.exports = { - start: 1640100600, // 12/21/2021 @ 15:30pm (UTC) + start: '2021-12-21', // 12/21/2021 @ 15:30pm (UTC) bsc: { tvl: bscTVL, staking: stakings([stakingContract_APX, daoContract], TOKEN_APX), diff --git a/projects/applepie/index.js b/projects/applepie/index.js index 1cb02e6575..87493ee6e0 100644 --- a/projects/applepie/index.js +++ b/projects/applepie/index.js @@ -6,7 +6,6 @@ const TOKENS = ["0x574f75bc522CB42ec2365dc54485D471f2eFb4B6"] module.exports = { methodology: "First Crosschain Pool as a Service Miner. Twist to generate 10%/daily reward.", - start: 35011373, bsc: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/aqua-network/index.js b/projects/aqua-network/index.js index 86fb368bc1..dd62253554 100644 --- a/projects/aqua-network/index.js +++ b/projects/aqua-network/index.js @@ -32,7 +32,7 @@ async function tvl(api) { } module.exports = { - start: 1719792000, + start: '2024-07-01', misrepresentedTokens: true, methodology: 'counts the liquidity of the Pools on AMM, data is pulled from the Aquarius API.', diff --git a/projects/aqua-patina/index.js b/projects/aqua-patina/index.js index 14053941fa..595973de90 100644 --- a/projects/aqua-patina/index.js +++ b/projects/aqua-patina/index.js @@ -9,7 +9,6 @@ async function tvl(api) { module.exports = { doublecounted: true, methodology: 'Returns the ETH equivalent value of the total supply of apETH tokens on Ethereum. This is calculated by the multiplier used in the contract to determine the ETH value of each token when minting apETH.', - start: 20937454, ethereum: { tvl, } diff --git a/projects/aquaprotocol/index.js b/projects/aquaprotocol/index.js index 5b06ff4af5..52e266779e 100644 --- a/projects/aquaprotocol/index.js +++ b/projects/aquaprotocol/index.js @@ -5,7 +5,7 @@ const AQUA_ADDRESS = 'EQAWDyxARSl3ol2G1RMLMwepr3v6Ter5ls3jiAlheKshgg0K' module.exports = { methodology: 'Total amount of collateral locked in the Aqua Protocol (EQAWDyxARSl3ol2G1RMLMwepr3v6Ter5ls3jiAlheKshgg0K)', - start: 1726506000, + start: '2024-09-16', ton: { tvl: sumTokensExport({ owner: AQUA_ADDRESS, tokens: [ADDRESSES.null]}), } diff --git a/projects/arbor-finance/index.js b/projects/arbor-finance/index.js index f47256c6de..7eac787a02 100644 --- a/projects/arbor-finance/index.js +++ b/projects/arbor-finance/index.js @@ -18,7 +18,6 @@ async function tvl(api) { module.exports = { methodology: "Sum the collateral value of active Arbor Finance bonds.", - start: 14906553, ethereum: { tvl, }, diff --git a/projects/arcadia-finance-v2/index.js b/projects/arcadia-finance-v2/index.js index 88571f13dc..e100b98084 100644 --- a/projects/arcadia-finance-v2/index.js +++ b/projects/arcadia-finance-v2/index.js @@ -91,7 +91,7 @@ module.exports = { methodology: "TVL is calculated as the sum of all Account values and the available balance in the liquidity pools. Assets are not double counted.", base: { tvl }, - start: 1711389600, // Mon Mar 25 2024 18:00:00 GMT+0000 + start: '2024-03-25', // Mon Mar 25 2024 18:00:00 GMT+0000 hallmarks: [ [Math.floor(new Date("2024-04-03") / 1e3), "Points program announced."], ], diff --git a/projects/arcadia-finance/index.js b/projects/arcadia-finance/index.js index a9d10c7b41..9ca0a500dc 100644 --- a/projects/arcadia-finance/index.js +++ b/projects/arcadia-finance/index.js @@ -5,7 +5,7 @@ module.exports = { "TVL includes ERC-20 tokens that have been supplied as collateral as well as ERC-20 tokens that are supplied by liquidity providers.", optimism: { tvl }, ethereum: { tvl }, - start: 1686391200, // Jun 10 2023 10:00:00 GMT+0000 + start: '2023-06-10', // Jun 10 2023 10:00:00 GMT+0000 hallmarks: [ [Math.floor(new Date('2023-07-10')/1e3), 'Protocol was exploited.'], ], diff --git a/projects/arcanum/index.js b/projects/arcanum/index.js index 49885497eb..3518e10927 100644 --- a/projects/arcanum/index.js +++ b/projects/arcanum/index.js @@ -20,7 +20,6 @@ const SPI_ASSETS_CONTRACTS = [ module.exports = { methodology: 'counts the quantities of all tokens in all multipool contracts.', - start: 1000235, arbitrum: { tvl: sumTokensExport({ ownerTokens: [[ARBI_ASSETS_CONTRACTS, ARBI_CONTRACT], [SPI_ASSETS_CONTRACTS, SPI_CONTRACT]] }) } diff --git a/projects/astherus/index.js b/projects/astherus/index.js index de07fb304d..beb00949af 100644 --- a/projects/astherus/index.js +++ b/projects/astherus/index.js @@ -7,7 +7,7 @@ const config = { } module.exports = { - start: 1706716800, // 02/01/2024 @ 00:00:00pm (UTC) + start: '2024-01-31', // 02/01/2024 @ 00:00:00pm (UTC) } Object.keys(config).forEach(chain => { diff --git a/projects/astra-dao/index.js b/projects/astra-dao/index.js index 165a0b75d0..fb38e05c08 100644 --- a/projects/astra-dao/index.js +++ b/projects/astra-dao/index.js @@ -24,7 +24,6 @@ async function tvl(api) { } module.exports = { - start: 17243078, ethereum: { tvl, }, diff --git a/projects/astriddao/index.js b/projects/astriddao/index.js index 53d43d0f0b..d1933ad79d 100644 --- a/projects/astriddao/index.js +++ b/projects/astriddao/index.js @@ -199,7 +199,6 @@ async function tvl(ts, _block, chainBlocks ) { } module.exports = { - start: 915830, methodology: "Total locked collateral assets (in ERC-20 form) in ActivePool and DefaultPool, plus total staked BAI in StabilityPool", astar: { tvl, diff --git a/projects/atlendis-v2/index.js b/projects/atlendis-v2/index.js index fadb6463c4..5d1935198d 100644 --- a/projects/atlendis-v2/index.js +++ b/projects/atlendis-v2/index.js @@ -63,7 +63,7 @@ async function borrowed(api) { } module.exports = { - start: 1686642643, + start: '2023-06-13', hallmarks: [ [1702367571, "Launch of Fluna V2 Pool on Polygon"], [1713855195, "Launch of Arjan pool on Mode Network"], diff --git a/projects/auctus/index.js b/projects/auctus/index.js index abba97069d..3af3e435ad 100644 --- a/projects/auctus/index.js +++ b/projects/auctus/index.js @@ -94,6 +94,6 @@ async function tvl(api) { } module.exports = { - start: 1590014400, // 05/20/2020 @ 08:10:40pm (UTC) + start: '2020-05-21', // 05/20/2020 @ 08:10:40pm (UTC) ethereum: { tvl } } diff --git a/projects/autotronic/index.js b/projects/autotronic/index.js index 77d074a242..278eb38494 100644 --- a/projects/autotronic/index.js +++ b/projects/autotronic/index.js @@ -1,6 +1,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { - start: 1692842880, + start: '2023-08-24', base: { tvl: getUniTVL({ factory: '0x55b3409335B81E7A8B7C085Bbb4047DDc23f7257', useDefaultCoreAssets: true, }), }, diff --git a/projects/awaken/index.js b/projects/awaken/index.js index 94db172ccb..1b4b29c8ea 100644 --- a/projects/awaken/index.js +++ b/projects/awaken/index.js @@ -38,7 +38,7 @@ const v2graph = getChainTvl({ module.exports = { misrepresentedTokens: true, methodology: `Counts the tokens locked on AMM pools, pulling the data from the 'AElfIndexer_Swap' subgraph`, - start: 1706745600, + start: '2024-02-01', aelf: { tvl: v2graph("aelf"), }, diff --git a/projects/axe/index.js b/projects/axe/index.js index b1d62850bc..603a2df4f0 100644 --- a/projects/axe/index.js +++ b/projects/axe/index.js @@ -3,7 +3,7 @@ module.exports = { [1648765747, "Rug Pull"] ], deadFrom: 1648765747, - start: 1637036516, // 16 Nov 2021 + start: '2021-11-16', // 16 Nov 2021 ethereum: { tvl: () => ({}), staking: () => ({}), diff --git a/projects/babylon/index.js b/projects/babylon/index.js index ad038db97e..356632dfbc 100644 --- a/projects/babylon/index.js +++ b/projects/babylon/index.js @@ -13,7 +13,7 @@ async function tvl(api) { module.exports = { methodology: 'TVL is fetched from Babylon’s Staking API and represents the total Bitcoin locked in the Babylon staking protocol.', - start: 1724351485, + start: '2024-08-22', timetravel: false, bitcoin: { tvl, diff --git a/projects/bagel-finance/index.js b/projects/bagel-finance/index.js index 78510c9e78..7269ac6f90 100644 --- a/projects/bagel-finance/index.js +++ b/projects/bagel-finance/index.js @@ -221,6 +221,6 @@ async function tvl(timestamp, ethBlock, chainBlocks) { } module.exports = { - start: 1602054167, + start: '2020-10-07', bsc: { tvl }, }; diff --git a/projects/bancor/index.js b/projects/bancor/index.js index 835254bea2..de79d14ade 100644 --- a/projects/bancor/index.js +++ b/projects/bancor/index.js @@ -42,7 +42,7 @@ async function generateCallsByBlockchain(api) { } module.exports = { - start: 1501632000, // 08/02/2017 @ 12:00am (UTC) + start: '2017-08-02', // 08/02/2017 @ 12:00am (UTC) ethereum: { tvl: generateCallsByBlockchain, }, diff --git a/projects/bancor/v3.js b/projects/bancor/v3.js index 266cd459a2..b0ee44a90b 100644 --- a/projects/bancor/v3.js +++ b/projects/bancor/v3.js @@ -12,7 +12,7 @@ async function addV3Balance(api) { } module.exports = { - start: 1650283200, // 18/04/2022 @ 1:00pm (UTC) + start: '2022-04-18', // 18/04/2022 @ 1:00pm (UTC) methodology: `Counts the tokens in the Master Vault Contract.`, ethereum: { tvl: addV3Balance, diff --git a/projects/bao-baskets/index.js b/projects/bao-baskets/index.js index 648acd30ef..3c7df95e49 100644 --- a/projects/bao-baskets/index.js +++ b/projects/bao-baskets/index.js @@ -20,7 +20,7 @@ const basketTvl = async (api) => { } module.exports = { - start: 1640995200, // Jan 1 2022 00:00:00 GMT+0000 + start: '2022-01-01', // Jan 1 2022 00:00:00 GMT+0000 ethereum: { tvl: basketTvl, pool2: sumTokensExport({ diff --git a/projects/base3d/index.js b/projects/base3d/index.js index 938d138e4c..aa645787e4 100644 --- a/projects/base3d/index.js +++ b/projects/base3d/index.js @@ -10,5 +10,4 @@ module.exports = { tvl, }, methodology: 'Calculates TVL by checking the ETH balance of the main contract via the totalEthereumBalance function.', - start: 3331748, }; diff --git a/projects/basemax-finance/index.js b/projects/basemax-finance/index.js index 75051a460b..72d85d53fb 100644 --- a/projects/basemax-finance/index.js +++ b/projects/basemax-finance/index.js @@ -5,7 +5,6 @@ const LP = '0xd2eb1de935fe66501aece023b0437fa7b9c40a25' module.exports = { methodology: "Counts USDC deposited to trade and to mint BLP. Staking counts BSM and esBSM deposited to earn esBSM", - start: 1700488, base: { tvl: staking("0xEDFFF5d0C68cFBd44FA12659Fd9AD55F04748874", ADDRESSES.base.USDbC), pool2: sumTokensExport({ owner: "0xe2cb504d51fd16d8bdf533c58553ed3f4f755f00", tokens: [LP], useDefaultCoreAssets: true, }), diff --git a/projects/basin/index.js b/projects/basin/index.js index 491a76161d..7fb35d0280 100644 --- a/projects/basin/index.js +++ b/projects/basin/index.js @@ -23,7 +23,7 @@ async function tvl(api) { module.exports = { methodology: "Counts the value of token reserves inside all deployed Wells.", - start: 1692797303, + start: '2023-08-23', ethereum: { tvl }, arbitrum: { tvl } }; diff --git a/projects/baton/index.js b/projects/baton/index.js index 9338d62f64..0a6619c07d 100644 --- a/projects/baton/index.js +++ b/projects/baton/index.js @@ -36,7 +36,6 @@ module.exports = { misrepresentedTokens: true, methodology: "Sums the total staked in baton farms and the total amount of tokens deposited as yield farming rewards.", - start: 17411300, ethereum: { tvl } diff --git a/projects/bean/index.js b/projects/bean/index.js index b30c77d6a7..76cb7ebb4f 100644 --- a/projects/bean/index.js +++ b/projects/bean/index.js @@ -314,7 +314,7 @@ async function pool2(api) { module.exports = { methodology: "Counts the value of deposited Beans and LP tokens in the silo.", - start: 1628287657, + start: '2021-08-07', ethereum: { tvl: () => ({}), pool2, diff --git a/projects/bepro/index.js b/projects/bepro/index.js index d05e900a42..21d9fc176a 100644 --- a/projects/bepro/index.js +++ b/projects/bepro/index.js @@ -20,7 +20,6 @@ const config = { module.exports = { methodology: 'counts the number of BEPRO tokens on Moonbeam Network contracts', - start: 1000235, }; Object.keys(config).forEach(chain => { diff --git a/projects/betswirl/index.js b/projects/betswirl/index.js index 7566436dd5..45662f1e22 100644 --- a/projects/betswirl/index.js +++ b/projects/betswirl/index.js @@ -3,7 +3,7 @@ const { sumTokens2 } = require("../helper/unwrapLPs.js") module.exports = { methodology: "TVL counts BETS tokens or 8020 LP deposited on the Staking contracts.", - start: 1687715559, + start: '2023-06-25', bsc: { staking: staking('0x20Df34eBe5dCB1082297A18BA8d387B55fB975a0', '0x94025780a1aB58868D9B2dBBB775f44b32e8E6e5'), }, diff --git a/projects/bit-reserve/index.js b/projects/bit-reserve/index.js index 580a2ea6a9..26e6fe2bd0 100644 --- a/projects/bit-reserve/index.js +++ b/projects/bit-reserve/index.js @@ -7,7 +7,7 @@ async function tvl(api) { module.exports = { methodology: 'The total value of BTC in the rBTC contract on the BIT-RESERVE platform.', - start: 1715917267, + start: '2024-05-17', core: { tvl } diff --git a/projects/bitlend/index.js b/projects/bitlend/index.js index 9446245857..7ea11d2ffd 100644 --- a/projects/bitlend/index.js +++ b/projects/bitlend/index.js @@ -15,7 +15,6 @@ const bTRX = '0xE73fb086C7Aa48b83372b028f0f35B06E77C7511' module.exports = { methodology: 'Total staked tokens in Bitlend protocol.', - start: 14069919, bittorrent: { tvl: sumTokensExport({ chain: CHAIN, diff --git a/projects/blex/index.js b/projects/blex/index.js index 69934de5d5..71992f714e 100644 --- a/projects/blex/index.js +++ b/projects/blex/index.js @@ -12,7 +12,7 @@ const contracts = [ const tokens = [ADDRESSES.arbitrum.USDT]; module.exports = { - start: 1691240820, + start: '2023-08-05', arbitrum: { tvl: sumTokensExport({ tokens, owners: contracts }) }, hallmarks: [[1691240820, "Blex Protocol Deployed on Arbitrum"]], }; diff --git a/projects/bluebit/index.js b/projects/bluebit/index.js index 2c5690370a..5cbcde9165 100644 --- a/projects/bluebit/index.js +++ b/projects/bluebit/index.js @@ -29,7 +29,6 @@ const tvl = async (timestamp, block, chainBlocks) => { module.exports = { methodology: "The vaults on https://bluebit.fi are included in TVL.", - start: 62936418, aurora: { tvl: tvl, staking: staking(veToken, token), diff --git a/projects/bonqdao/index.js b/projects/bonqdao/index.js index 8f60657a81..6a94020d45 100644 --- a/projects/bonqdao/index.js +++ b/projects/bonqdao/index.js @@ -69,7 +69,6 @@ module.exports = { ], deadFrom: '2023-02-01', methodology: 'Summation of the collateral deposited in BonqDAO Troves (personal lending vaults)', - start: 36884903, polygon: { tvl, staking: stakings([BNQ_STAKING_CONTRACT], BNQ), diff --git a/projects/bracketX/index.js b/projects/bracketX/index.js index 55ef535ab8..7be4fba694 100644 --- a/projects/bracketX/index.js +++ b/projects/bracketX/index.js @@ -14,7 +14,7 @@ async function tvl(api) { module.exports = { methodology: 'Count the number of WETH tokens locked in the protocol contract.', - start: 1704412800, + start: '2024-01-05', arbitrum: { tvl, } diff --git a/projects/bril-finance/index.js b/projects/bril-finance/index.js index 73be3acf3c..52ef361924 100644 --- a/projects/bril-finance/index.js +++ b/projects/bril-finance/index.js @@ -7,7 +7,6 @@ const config = { module.exports = { doublecounted: true, methodology: 'Count tokens managed by Bril automated liquidity management stratagies', - start: 30131926, }; Object.keys(config).forEach(chain => { diff --git a/projects/brine/index.js b/projects/brine/index.js index 89402f9301..e3cd280784 100644 --- a/projects/brine/index.js +++ b/projects/brine/index.js @@ -63,7 +63,7 @@ const scrollTokens = [ ] module.exports = { - start: 1685817000, + start: '2023-06-03', ethereum: { tvl: sumTokensExport({ owners: ethereumContracts, tokens: ethereumTokens, }) }, polygon: { tvl: sumTokensExport({ owners: polygonContracts, tokens: polygonTokens}) }, optimism: { tvl: sumTokensExport({ owners: optimismContracts, tokens: optimismTokens}) }, diff --git a/projects/brokkr/index.js b/projects/brokkr/index.js index 8f7f547997..7b842b3aeb 100644 --- a/projects/brokkr/index.js +++ b/projects/brokkr/index.js @@ -66,7 +66,7 @@ async function addEquityValuationToBalances(address, api) { module.exports = { - start: 1554848955, // 04/09/2019 @ 10:29pm (UTC) + start: '2019-04-10', // 04/09/2019 @ 10:29pm (UTC) doublecounted: true, avax: { tvl, diff --git a/projects/burve-protocol/index.js b/projects/burve-protocol/index.js index 53d9ae554d..dae89f7c12 100644 --- a/projects/burve-protocol/index.js +++ b/projects/burve-protocol/index.js @@ -6,7 +6,7 @@ const config = { } module.exports = { - start: 1707300000, + start: '2024-02-07', methodology: "The TVL including total values of assets locked in the tokens which are deployed by BurveProtocol", } diff --git a/projects/cache-gold/index.js b/projects/cache-gold/index.js index ae5f2404e6..22ce274991 100644 --- a/projects/cache-gold/index.js +++ b/projects/cache-gold/index.js @@ -27,5 +27,5 @@ module.exports = { ethereum: { tvl, }, - start: 1617235200 + start: '2021-04-01' }; diff --git a/projects/cake-monster/index.js b/projects/cake-monster/index.js index 891e9024d6..63a232986f 100644 --- a/projects/cake-monster/index.js +++ b/projects/cake-monster/index.js @@ -5,7 +5,6 @@ const CM_STAKING_CONTRACT = "0xF7CDDF60CD076d4d64c613489aA00dCCf1E518F6"; module.exports = { methodology: "counts the number of $MONSTA tokens in the Cake Monster Staking contract, excluding the amount reserved for the staking rewards.", - start: 15765654, bsc: { tvl: () => ({}), staking: staking(CM_STAKING_CONTRACT, CM_TOKEN_CONTRACT), diff --git a/projects/camelot/index.js b/projects/camelot/index.js index 195068af3f..82ea9cba7e 100644 --- a/projects/camelot/index.js +++ b/projects/camelot/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { misrepresentedTokens: true, - start: 1669075200, + start: '2022-11-22', arbitrum: { tvl: getUniTVL({ factory: '0x6EcCab422D763aC031210895C81787E87B43A652', useDefaultCoreAssets: true,}), }, diff --git a/projects/capy-finance/index.js b/projects/capy-finance/index.js index 9dedd33d17..08a07e461d 100644 --- a/projects/capy-finance/index.js +++ b/projects/capy-finance/index.js @@ -10,7 +10,6 @@ async function tvl(api) { module.exports = { methodology: 'The TVL of the Capy Finance project in USD.', - start: 1000235, bsquared: { tvl, }, diff --git a/projects/cauldron/index.js b/projects/cauldron/index.js index da279509ee..ae166a15e0 100644 --- a/projects/cauldron/index.js +++ b/projects/cauldron/index.js @@ -23,7 +23,7 @@ async function tvl({ timestamp }) { module.exports = { methodology: "Scrape the blockchain and filter for spent transaction outputs that match the cauldron contract's redeem script. Check if the transaction has an output with a locking script that matches the redeem script in the input. A match on locking script means the funds are still locked in the DEX contract. Aggregate the value of funds in contract utxos.", - start: 1688198180, + start: '2023-07-01', bitcoincash: { tvl }, hallmarks: [ [1688198180, "First cauldron contract deployed (SOCK)"], diff --git a/projects/chainflip/index.js b/projects/chainflip/index.js index 975f0bb523..b015ace57f 100644 --- a/projects/chainflip/index.js +++ b/projects/chainflip/index.js @@ -59,7 +59,7 @@ async function tvl(api) { module.exports = { methodology: 'The number of FLIP tokens in the Chainflip State Chain Gateway Contract, as well as the total liquidity.', - start: 1700740800, // FLIP went live on 2023-11-23 12:00 UTC + start: '2023-11-23', // FLIP went live on 2023-11-23 12:00 UTC ethereum: { tvl: () => ({}), staking: staking(FLIP_TOKEN, STATE_CHAIN_GATEWAY_CONTRACT), diff --git a/projects/clip-finance/index.js b/projects/clip-finance/index.js index 1da2b85271..7b655bcf6b 100644 --- a/projects/clip-finance/index.js +++ b/projects/clip-finance/index.js @@ -140,7 +140,7 @@ module.exports = { methodology: "Clip Finance TVL is achieved by summing total values of assets deposited in other protocols through our vaults and vaults balances.", doublecounted: true, - start: 1697627757, // (Oct-18-2023 11:15:57 AM +UTC) deployed on the BSC network + start: '2023-10-18', // (Oct-18-2023 11:15:57 AM +UTC) deployed on the BSC network }; Object.keys(config).forEach((chain) => { diff --git a/projects/collectionxyz/index.js b/projects/collectionxyz/index.js index 17c0ddd6bd..468255ebed 100644 --- a/projects/collectionxyz/index.js +++ b/projects/collectionxyz/index.js @@ -35,7 +35,6 @@ async function getTotalValueLocked(api) { } module.exports = { - start: 16945809, ethereum: { tvl: getTotalValueLocked, }, diff --git a/projects/colony/index.js b/projects/colony/index.js index 3bc233767b..47b576910f 100644 --- a/projects/colony/index.js +++ b/projects/colony/index.js @@ -46,7 +46,7 @@ module.exports = { "TVL also includes rewards in various tokens distributed in the staking contract, " + "actual fundraised stablecoins in projects (Nests), and liquidity from Colony Dex.", avax: { - start: 1638367059, // CLY Token deployment + start: '2021-12-01', // CLY Token deployment tvl: _tvl(), staking: _staking, // vesting: clyVesting(colonyGovernanceToken, vestingContract), diff --git a/projects/connext/old.js b/projects/connext/old.js index fb8ca75713..4e6e29ae8c 100644 --- a/projects/connext/old.js +++ b/projects/connext/old.js @@ -136,7 +136,7 @@ async function xdai(timestamp, ethBlock, {xdai: block}) { } module.exports = { - start: 1552065900, // 03/08/2019 @ 5:25pm (UTC) + start: '2019-03-08', // 03/08/2019 @ 5:25pm (UTC) ethereum: { tvl: ethereum }, diff --git a/projects/convergence/index.js b/projects/convergence/index.js index a0c69348d7..ad534ffc33 100644 --- a/projects/convergence/index.js +++ b/projects/convergence/index.js @@ -3,7 +3,7 @@ const MOONBEAM_FACTORY = '0x9504d0d43189d208459e15c7f643aac1abe3735d'; const { getUniTVL } = require('../helper/unknownTokens') module.exports = { - start: 1621220505, //2021-05-17 00:00:00 +UTC + start: '2021-05-17', //2021-05-17 00:00:00 +UTC misrepresentedTokens: true, ethereum: { tvl: getUniTVL({ diff --git a/projects/core-powercity-io/index.js b/projects/core-powercity-io/index.js index a2038bde24..fe231a9b4f 100644 --- a/projects/core-powercity-io/index.js +++ b/projects/core-powercity-io/index.js @@ -5,7 +5,7 @@ const WATT_TOKEN = "0xDfdc2836FD2E63Bba9f0eE07901aD465Bff4DE71"; const WATT_PLS_LP = "0x956f097E055Fa16Aad35c339E17ACcbF42782DE6"; module.exports = { - start: 1702377175, + start: '2023-12-12', methodology: "No external tokens/coins staked/locked. Only protocol token WATT and WATT-PLS-LP staked within protocol.", pulse: { tvl: async () => ({}), diff --git a/projects/core/index.js b/projects/core/index.js index 6409055e0e..8fef789e5a 100644 --- a/projects/core/index.js +++ b/projects/core/index.js @@ -82,7 +82,7 @@ async function staking(_, block){ module.exports = { ethereum: { - start: 1601142406, // 2020-09-26 17:46:46 (UTC), + start: '2020-09-26', // 2020-09-26 17:46:46 (UTC), tvl, treasury, staking, diff --git a/projects/coupon-finance/index.js b/projects/coupon-finance/index.js index 203f494340..52c1909fc1 100644 --- a/projects/coupon-finance/index.js +++ b/projects/coupon-finance/index.js @@ -69,7 +69,6 @@ module.exports = { misrepresentedTokens: true, doublecounted: true, methodology: "TVL consists of deposit and collateral in the Coupon Finance contract", - start: 150536505, arbitrum: { tvl, }, diff --git a/projects/cream/index.js b/projects/cream/index.js index 04b706225e..b9a135c95b 100644 --- a/projects/cream/index.js +++ b/projects/cream/index.js @@ -4,7 +4,7 @@ const { compoundExports } = require("../helper/compound"); module.exports = { hallmarks: [[1635292800, "Flashloan exploit"]], timetravel: false, // bsc and fantom api's for staked coins can't be queried at historical points - start: 1599552000, // 09/08/2020 @ 8:00am (UTC) + start: '2020-09-08', // 09/08/2020 @ 8:00am (UTC) ethereum: compoundExports("0xbdC857eae1D15ad171E11af6FC3e99413Ed57Ec4"), bsc: compoundExports( "0x589DE0F0Ccf905477646599bb3E5C622C84cC0BA", diff --git a/projects/creamswap/index.js b/projects/creamswap/index.js index fb8efca0c7..b0d6eb9ab5 100644 --- a/projects/creamswap/index.js +++ b/projects/creamswap/index.js @@ -16,6 +16,6 @@ async function tvl(api) { } module.exports = { - start: 1599552000, // 09/08/2020 @ 8:00am (UTC) + start: '2020-09-08', // 09/08/2020 @ 8:00am (UTC) ethereum: { tvl } } diff --git a/projects/cryptoswap/index.js b/projects/cryptoswap/index.js index 637e0be72b..b4f8c6a73a 100644 --- a/projects/cryptoswap/index.js +++ b/projects/cryptoswap/index.js @@ -6,5 +6,5 @@ module.exports = { bsc: { tvl: getUniTVL({ factory: '0x4136A450861f5CFE7E860Ce93e678Ad12158695C', useDefaultCoreAssets: true }), }, - start: 1651494114, // Mon May 02 2022 12:21:54 + start: '2022-05-02', // Mon May 02 2022 12:21:54 }; diff --git a/projects/csix/index.js b/projects/csix/index.js index 66a0fb885a..0b66fcdd4b 100644 --- a/projects/csix/index.js +++ b/projects/csix/index.js @@ -22,6 +22,5 @@ module.exports = { tvl: () => ({}), staking, }, - start: 25647232, methodology: "Counts as TVL the CSIX deposited through Staking Contract", }; diff --git a/projects/cybro/index.js b/projects/cybro/index.js index 7611d32485..2472f233b5 100644 --- a/projects/cybro/index.js +++ b/projects/cybro/index.js @@ -27,6 +27,5 @@ async function tvl(api) { module.exports = { doublecounted: true, methodology: "We calculate TVL based on the Total Supply of our proxy contracts through which users interact with vault's contracts", - start: 1000235, blast: { tvl }, }; diff --git a/projects/dam-finance/index.js b/projects/dam-finance/index.js index e0be38c63a..d8fc05afbe 100644 --- a/projects/dam-finance/index.js +++ b/projects/dam-finance/index.js @@ -4,7 +4,6 @@ const ethCollateralJoins = ["0xB1fbcD7415F9177F5EBD3d9700eD5F15B476a5Fe"] module.exports = { methodology: 'Currently counting the USDC that DAM Finance has locked up, but will add more collateral types and multiple chains in the future', - start: 16375673, // LMCV Deployment Block ethereum: { tvl: sumTokensExport({ tokens: [ADDRESSES.ethereum.USDC], diff --git a/projects/ddex/index.js b/projects/ddex/index.js index 7af4ef5151..0b0b97e917 100644 --- a/projects/ddex/index.js +++ b/projects/ddex/index.js @@ -26,7 +26,7 @@ async function tvl(timestamp, block) { } module.exports = { - start: 1566470505, // 2019-08-22T18:41:45+08:00 + start: '2019-08-22', // 2019-08-22T18:41:45+08:00 ethereum: { tvl } } diff --git a/projects/deepbook-v3/index.js b/projects/deepbook-v3/index.js index 88495a261b..b1f880cc37 100644 --- a/projects/deepbook-v3/index.js +++ b/projects/deepbook-v3/index.js @@ -25,7 +25,7 @@ const tvl = async (api) => { module.exports = { methodology: "All deposits into all BalanceManagers minutes all withdrawals from all BalanceManagers", - start: 1728858752, + start: '2024-10-14', sui: { tvl, } diff --git a/projects/deepp/index.js b/projects/deepp/index.js index 2499155bdc..886c97fc53 100644 --- a/projects/deepp/index.js +++ b/projects/deepp/index.js @@ -3,7 +3,7 @@ const ADDRESSES = require("../helper/coreAssets.json"); module.exports = { methodology: 'Lists the number of owned USDC tokens in the Deepp LP and BetLock contracts.', - start: 1696118400, + start: '2023-10-01', arbitrum: { tvl: sumTokensExport({ owners: Object.values({ diff --git a/projects/defi-swap/index.js b/projects/defi-swap/index.js index e2b4294eb8..5cd7ba3646 100644 --- a/projects/defi-swap/index.js +++ b/projects/defi-swap/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, - start: 1599523200, // Tuesday, 8 September 2020 00:00:00 + start: '2020-09-08', // Tuesday, 8 September 2020 00:00:00 ethereum: { tvl: getUniTVL({ factory: '0x9DEB29c9a4c7A88a3C0257393b7f3335338D9A9D', useDefaultCoreAssets: true }), }, diff --git a/projects/defifranc/index.js b/projects/defifranc/index.js index c56eb397c3..c89825a674 100644 --- a/projects/defifranc/index.js +++ b/projects/defifranc/index.js @@ -34,7 +34,7 @@ module.exports = { tvl, staking: staking(MON_STAKING_POOL, MON_TOKEN), }, - start: 1664074800, + start: '2022-09-25', methodology: "Total deposits of ETH and wBTC for borrowed DCHF.", }; \ No newline at end of file diff --git a/projects/defiyieldprotocol/index.js b/projects/defiyieldprotocol/index.js index fdffde9b53..ce1adc4572 100644 --- a/projects/defiyieldprotocol/index.js +++ b/projects/defiyieldprotocol/index.js @@ -83,7 +83,7 @@ const lps = { } module.exports = { - start: 1619654324, // Apr-28-2021 23:58:44 PM +UTC + start: '2021-04-29', // Apr-28-2021 23:58:44 PM +UTC ethereum: { tvl: sumTokensExport({ tokens: [ diff --git a/projects/defrost/index.js b/projects/defrost/index.js index 9759ed21a6..c8b24f6e19 100644 --- a/projects/defrost/index.js +++ b/projects/defrost/index.js @@ -60,7 +60,6 @@ async function staking(api) { module.exports = { doublecounted: true, - start: 6965653, avax: { tvl, staking diff --git a/projects/degate/index.js b/projects/degate/index.js index 04e1654b68..9ad22c28c6 100644 --- a/projects/degate/index.js +++ b/projects/degate/index.js @@ -17,6 +17,6 @@ async function tvl(api) { } module.exports = { - start: 1699746983, // Nov-11-2023 11:56:23 PM +UTC + start: '2023-11-12', // Nov-11-2023 11:56:23 PM +UTC ethereum: { tvl } } diff --git a/projects/deltaprime/index.js b/projects/deltaprime/index.js index 626b2577ad..0d50cd626b 100644 --- a/projects/deltaprime/index.js +++ b/projects/deltaprime/index.js @@ -178,8 +178,6 @@ async function addTraderJoeLPs({ api, accounts }) { module.exports = { methodology: 'Counts TVL of DeltaPrime\'s lending pools and individual PrimeAccount contracts\'', - start: - 24753316, avax: { tvl: tvlAvalanche, }, diff --git a/projects/derivadex/index.js b/projects/derivadex/index.js index f41ed3fcde..e9a0b3f6db 100644 --- a/projects/derivadex/index.js +++ b/projects/derivadex/index.js @@ -58,6 +58,6 @@ async function tvl(timestamp, block) { ==================================================*/ module.exports = { - start: 1607126400, // 12/5/2020 00:00:00 utc + start: '2020-12-05', // 12/5/2020 00:00:00 utc ethereum: { tvl } }; diff --git a/projects/dexilla/index.js b/projects/dexilla/index.js index 40d509ca58..4261f539b1 100644 --- a/projects/dexilla/index.js +++ b/projects/dexilla/index.js @@ -51,7 +51,7 @@ const config = { module.exports = { methodology: 'TVL counts the ERC20 tokens on the exchange contracts.', - start: 1685610580, // June 1, 2023 @ 9:09:40 (UTC +0) + start: '2023-06-01', // June 1, 2023 @ 9:09:40 (UTC +0) } Object.keys(config).forEach(chain => { diff --git a/projects/dexter/index.js b/projects/dexter/index.js index 35108c2f45..8d1be049b6 100644 --- a/projects/dexter/index.js +++ b/projects/dexter/index.js @@ -29,7 +29,7 @@ module.exports = { timetravel: false, // misrepresentedTokens: true, methodology: `Counts the liquidity on all AMM pools`, - start: 1679788800, // "2023-03-26" UTC + start: '2023-03-26', // "2023-03-26" UTC persistence: { tvl } diff --git a/projects/dextf/index.js b/projects/dextf/index.js index aeeee07852..b168b0d1bd 100644 --- a/projects/dextf/index.js +++ b/projects/dextf/index.js @@ -3,7 +3,7 @@ const tvlV2 = require('./v2'); const sdk = require('@defillama/sdk'); module.exports = { - start: 1595853825, // 27/07/2020 @ 12:43:45am (UTC) + start: '2020-07-27', // 27/07/2020 @ 12:43:45am (UTC) ethereum: { tvl: sdk.util.sumChainTvls([TVLV1, tvlV2]) }, avax: { tvl: tvlV2 }, era: { tvl: tvlV2 } diff --git a/projects/dforce/index.js b/projects/dforce/index.js index 312cc30dc0..801909c400 100644 --- a/projects/dforce/index.js +++ b/projects/dforce/index.js @@ -196,7 +196,7 @@ async function staking(timestamp, ethBlock, chainBlocks) { module.exports = { ...generalizedChainExports(chainTvl, ['ethereum', "bsc", "arbitrum", "optimism", "polygon", "avax", "kava", "conflux"]), - start: 1564165044, // Jul-27-2019 02:17:24 AM +UTC + start: '2019-07-26', // Jul-27-2019 02:17:24 AM +UTC hallmarks: [ [Math.floor(new Date('2023-12-19')/1e3), 'Unitus spin-off'], ], diff --git a/projects/dirac-finance/index.js b/projects/dirac-finance/index.js index b1131cc4e1..3b32f4df3d 100644 --- a/projects/dirac-finance/index.js +++ b/projects/dirac-finance/index.js @@ -35,7 +35,6 @@ module.exports = { timetravel: true, misrepresentedTokens: false, methodology: 'counts the number of MINT tokens in the Club Bonding contract.', - start: 11251616, polygon_zkevm: { tvl, } diff --git a/projects/dogedollar/index.js b/projects/dogedollar/index.js index 2cebc693c7..8b44cd12b1 100644 --- a/projects/dogedollar/index.js +++ b/projects/dogedollar/index.js @@ -4,7 +4,6 @@ const DJED_ADDR = '0xA99ef299CdA10AC4Ec974370778fbd27Cfb5CF61' module.exports = { methodology: 'finds the DOGE balance of the DJED instance backing the stablecoin, aswell as the fallback stablecoin balance', - start: 14576300, dogechain: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/dolomite/index.js b/projects/dolomite/index.js index 773ad3ad5e..a41e80e3d8 100644 --- a/projects/dolomite/index.js +++ b/projects/dolomite/index.js @@ -34,7 +34,7 @@ async function borrowed(api) { } module.exports = { - start: 1664856000, // 10/4/2022 @ 00:00am (UTC) + start: '2022-10-04', // 10/4/2022 @ 00:00am (UTC) }; const config = { diff --git a/projects/dvol/index.js b/projects/dvol/index.js index b0186cea59..14416a4a74 100644 --- a/projects/dvol/index.js +++ b/projects/dvol/index.js @@ -58,7 +58,6 @@ async function borrowed(api) { } module.exports = { - start: 33674950, timetravel: false, bsc: { tvl, borrowed, diff --git a/projects/dydx/index.js b/projects/dydx/index.js index eb26b94f88..166bf6e6b0 100644 --- a/projects/dydx/index.js +++ b/projects/dydx/index.js @@ -40,7 +40,7 @@ const ADDRESSES = require('../helper/coreAssets.json') } module.exports = { - start: 1538179200, // 09/29/2018 @ 12:00am (UTC) + start: '2018-09-29', // 09/29/2018 @ 12:00am (UTC) ethereum: { tvl }, hallmarks:[ [1611630974, "Series B $10M"], diff --git a/projects/earn-powercity-io/index.js b/projects/earn-powercity-io/index.js index 39d159f06e..38729ca6d9 100644 --- a/projects/earn-powercity-io/index.js +++ b/projects/earn-powercity-io/index.js @@ -18,7 +18,7 @@ const LP_EARN_PLSX_ADDRESS = "0xed77CbbB80e5a5C3A1FE664419d6F690766b5913"; const lps = [LP_PXDC_PLSX_ADDRESS, LP_EARN_PLSX_ADDRESS] module.exports = { - start: 1708418955, + start: '2024-02-20', methodology: "Total Value Locked includes all Troves, Stability Pool, Staking Pool and LP Farming Pools", pulse: { tvl: getLiquityTvl(TROVE_MANAGER_ADDRESS, { collateralToken: PLSX_ADDRESS }), diff --git a/projects/ebtc/index.js b/projects/ebtc/index.js index 37a7cf00df..9495901a6a 100644 --- a/projects/ebtc/index.js +++ b/projects/ebtc/index.js @@ -13,7 +13,7 @@ async function tvl(api) { timetravel: true, misrepresentedTokens: false, methodology: 'Adds the total amount of collateral in the active pool and the collateral surplus pool of the eBTC protocol.', - start: 1710492719, + start: '2024-03-15', ethereum: { tvl, } diff --git a/projects/ecodefi/index.js b/projects/ecodefi/index.js index b996f17a89..35c73ee57e 100644 --- a/projects/ecodefi/index.js +++ b/projects/ecodefi/index.js @@ -8,7 +8,6 @@ module.exports = { ...compoundExports2({ comptroller: '0xfd1f241ba25b8966a14865cb22a4ea3d24c92451'}), staking: staking('0x55839fe60742c7789DaBcA85Fd693f1cAbaeDd69', '0x0985205D53D575CB07Dd4Fba216034dc614eab55'), }, - start: 15307794, // Feb-16-2022 01:49:31 PM +UTC } module.exports.bsc.borrowed = () => ({}) // bad debt \ No newline at end of file diff --git a/projects/ensuro/index.js b/projects/ensuro/index.js index b892a405af..5039e7d9f9 100644 --- a/projects/ensuro/index.js +++ b/projects/ensuro/index.js @@ -65,7 +65,7 @@ module.exports = { polygon: { tvl }, - start: 1643673600, + start: '2022-02-01', hallmarks: [ [1669852800, "Ensuro V2 Launch"] ] diff --git a/projects/epoch-island/index.js b/projects/epoch-island/index.js index d0a381f149..c4608e2ff3 100644 --- a/projects/epoch-island/index.js +++ b/projects/epoch-island/index.js @@ -11,7 +11,7 @@ const config = { } module.exports = { - start: 1700179200, + start: '2023-11-17', hallmarks: [ [1700179200, "vEPOCH Launch"], [1704240000, "ITO Launch"] diff --git a/projects/erasure/index.js b/projects/erasure/index.js index d2d19e7871..f249af17c5 100644 --- a/projects/erasure/index.js +++ b/projects/erasure/index.js @@ -121,6 +121,6 @@ const ADDRESSES = require('../helper/coreAssets.json') ==================================================*/ module.exports = { - start: 1566518400, // 08/23/2019 @ 12:00am (UTC) + start: '2019-08-23', // 08/23/2019 @ 12:00am (UTC) ethereum: { tvl } }; diff --git a/projects/esper-finance/index.js b/projects/esper-finance/index.js index eecb132f39..d9cb3a3505 100644 --- a/projects/esper-finance/index.js +++ b/projects/esper-finance/index.js @@ -2,7 +2,6 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { misrepresentedTokens: true, - start: 4781359, mantle: { tvl: getUniTVL({ factory: '0x69C4515C926ac3db7A547044145495240961a7B5', useDefaultCoreAssets: true, }), }, diff --git a/projects/ethichub/index.js b/projects/ethichub/index.js index 6791c5d367..793e0ca935 100644 --- a/projects/ethichub/index.js +++ b/projects/ethichub/index.js @@ -15,7 +15,7 @@ const STAKED_ETHIX_CELO = '0xCb16E29d0B667BaD7266E5d0Cd59b711b6273C6B'; module.exports = { methodology: 'Count of the tokens in pools, reserves...', - start: 1608640693, + start: '2020-12-22', ethereum: { tvl: () => ({}), pool2: pool2(STAKED_UETHIX_MAINNET, ETHIX_WETH_UNIV2), diff --git a/projects/ethosx/index.js b/projects/ethosx/index.js index adbad62cd4..d9817ab60d 100644 --- a/projects/ethosx/index.js +++ b/projects/ethosx/index.js @@ -27,7 +27,7 @@ const USDC_BSC_ADDRESS = ADDRESSES.bsc.USDC; module.exports = { methodology: "TVL counts the USDC held in the controller contracts.", - start: 1715693000, + start: '2024-05-14', arbitrum: { tvl: sumTokensExport({ owners: [ diff --git a/projects/everdex/index.js b/projects/everdex/index.js index cf025fc2d0..07bbb757ff 100644 --- a/projects/everdex/index.js +++ b/projects/everdex/index.js @@ -26,7 +26,7 @@ const uniTVL = getUniTVL({ factory: '0x19f21b0AB98EC10d734E314356Ad562ae349177d' module.exports = { misrepresentedTokens: true, - start: 1674864000, + start: '2023-01-28', bfc: { tvl: sdk.util.sumChainTvls([tvl, uniTVL]) }, diff --git a/projects/exsat-credit-staking/index.js b/projects/exsat-credit-staking/index.js index 1c7cd332c7..ab4402f2f6 100644 --- a/projects/exsat-credit-staking/index.js +++ b/projects/exsat-credit-staking/index.js @@ -7,6 +7,6 @@ async function tvl() { module.exports = { methodology: 'TVL is based on Bitcoin addresses in the exSat credit staking contract, summing their associated Bitcoin balances.', - start: 1729684800, + start: '2024-10-23', bitcoin: { tvl }, }; diff --git a/projects/ezkalibur/index.js b/projects/ezkalibur/index.js index 59d927171a..90704dea8b 100644 --- a/projects/ezkalibur/index.js +++ b/projects/ezkalibur/index.js @@ -7,7 +7,7 @@ const SWORD_WETH_LP = '0xc8b6b3a4d2d8428ef3a940eac1e32a7ddadcb0f1' module.exports = { misrepresentedTokens: true, - start: 1686309181, + start: '2023-06-09', era: { tvl: getUniTVL({ factory: '0x15C664A62086c06D43E75BB3fddED93008B8cE63', useDefaultCoreAssets: true, }), staking: stakingPricedLP(xSWORD,SWORD_TOKEN,'era',SWORD_WETH_LP,'weth') diff --git a/projects/ferdyflip/index.js b/projects/ferdyflip/index.js index e6242ae519..4cd1250d46 100644 --- a/projects/ferdyflip/index.js +++ b/projects/ferdyflip/index.js @@ -16,7 +16,7 @@ const config = { Object.keys(config).forEach((chain) => { module.exports[chain] = { - start: 1675962000, //Fri Feb 10 2023 + start: '2023-02-09', //Fri Feb 10 2023 tvl: sumTokensExport(config[chain]), }; }); diff --git a/projects/ferro/index.js b/projects/ferro/index.js index 311df16a53..2b99bf4c3d 100644 --- a/projects/ferro/index.js +++ b/projects/ferro/index.js @@ -41,7 +41,7 @@ async function tvl(api) { module.exports = { methodology: 'sum of ferro stablecoin pool contracts balance', - start: 1651218360, + start: '2022-04-29', cronos: { tvl, } diff --git a/projects/flashstake/index.js b/projects/flashstake/index.js index f8b07fc387..a66ebba28a 100644 --- a/projects/flashstake/index.js +++ b/projects/flashstake/index.js @@ -18,7 +18,7 @@ async function getData() { module.exports = { doublecounted: true, - start: 1659312000, + start: '2022-08-01', hallmarks: [ [1659312000, "Protocol Launch"], [1666641600, "Optimism Launch"], diff --git a/projects/flex-powercity-io/index.js b/projects/flex-powercity-io/index.js index 6e6c7f8899..abca4499e3 100644 --- a/projects/flex-powercity-io/index.js +++ b/projects/flex-powercity-io/index.js @@ -18,7 +18,7 @@ const LP_FLEX_HEX_ADDRESS = "0x476d63aB94B4E86614Df0C3D5A27E9e22631D062"; const lps = [LP_HEXDC_HEX_ADDRESS, LP_FLEX_HEX_ADDRESS] module.exports = { - start: 1714534195, + start: '2024-05-01', methodology: "Total Value Locked includes all Troves, Stability Pool, Staking Pool and LP Farming Pools", pulse: { tvl: getLiquityTvl(TROVE_MANAGER_ADDRESS, { collateralToken: HEX_ADDRESS }), diff --git a/projects/flexdao/index.js b/projects/flexdao/index.js index 9e5f479df6..5ffabacb97 100644 --- a/projects/flexdao/index.js +++ b/projects/flexdao/index.js @@ -11,7 +11,6 @@ const decimals = 18 module.exports = { methodology: 'Counting all FLEX tokens staked in the DAO', - start: 2153800, [chain]: { tvl: ()=>({}), staking: staking(veFLEX, FLEX, chain, coingeckoId, decimals) diff --git a/projects/florence-finance/index.js b/projects/florence-finance/index.js index 59432e80bf..c191bf482b 100644 --- a/projects/florence-finance/index.js +++ b/projects/florence-finance/index.js @@ -41,7 +41,7 @@ async function getBorrowedOnBase(api) { module.exports = { methodology: "The Florin token (FLR) is minted whenever a new loan is funded and burned when a loan matures and is repaid. Since the Florin token is 1:1 redeemable for EUR the borrowed amount is denominated in the protocols treasuries EUR stablecoin of the respective chain. Consequently the total supply of Florin equals the amount borrowed through the protocol. To avoid double counting, the amount of FLR held in the bridge contract is subtracted from the total supply. ", - ethereum: { start: 16077400, borrowed: getBorrowedOnEthereum, tvl: () => ({}) }, - arbitrum: { start: 126183369, borrowed: getBorrowedOnArbitrum, tvl: () => ({}) }, - base: { start: 18941407, borrowed: getBorrowedOnBase, tvl: () => ({}) }, + ethereum: { borrowed: getBorrowedOnEthereum, tvl: () => ({}) }, + arbitrum: { borrowed: getBorrowedOnArbitrum, tvl: () => ({}) }, + base: { borrowed: getBorrowedOnBase, tvl: () => ({}) }, }; \ No newline at end of file diff --git a/projects/forgesx/index.js b/projects/forgesx/index.js index 952f6a7c8d..137edbb990 100644 --- a/projects/forgesx/index.js +++ b/projects/forgesx/index.js @@ -5,7 +5,7 @@ const USDC_TOKEN = ADDRESSES.arbitrum.USDC module.exports = { methodology: 'counts the number of USDC tokens deposited as collateral in the Forge.sol contract.', - start: 1680643295, + start: '2023-04-04', arbitrum: { tvl: sumTokensExport({ owner: FORGE_SOL, tokens: [USDC_TOKEN]}), } diff --git a/projects/frankencoin/index.js b/projects/frankencoin/index.js index 15e6c3633c..d5722c1fc8 100644 --- a/projects/frankencoin/index.js +++ b/projects/frankencoin/index.js @@ -15,5 +15,5 @@ module.exports = { ethereum: { tvl, }, - start: 1698487043, + start: '2023-10-28', }; diff --git a/projects/freestyle/index.js b/projects/freestyle/index.js index fce0e46372..7ac9f3fbfc 100644 --- a/projects/freestyle/index.js +++ b/projects/freestyle/index.js @@ -4,7 +4,7 @@ const { request, } = require("graphql-request"); const freestyleConfig = { base: { token: ADDRESSES.base.USDC, - start: 1700006400, + start: '2023-11-15', graphUrl: "https://api-v2.morphex.trade/subgraph/3KhmYXgsM3CM1bbUCX8ejhcxQCtWwpUGhP7p9aDKZ94Z", accountSource: '0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD' }, diff --git a/projects/frigg-eco/index.js b/projects/frigg-eco/index.js index 956fd66e04..56ff97f3df 100644 --- a/projects/frigg-eco/index.js +++ b/projects/frigg-eco/index.js @@ -36,7 +36,6 @@ async function tvl(_, block) { module.exports = { misrepresentedTokens: true, methodology: 'Gets the value of all tokens managed through frigg.eco universe', - start: 15575809, ethereum: { tvl }, diff --git a/projects/future-swap/index.js b/projects/future-swap/index.js index 389f72125f..ba2738761a 100644 --- a/projects/future-swap/index.js +++ b/projects/future-swap/index.js @@ -24,7 +24,7 @@ async function farmStakings(api) { module.exports = { findora: { - start: 1677029212, // 2023-02-22 01:26:52 UTC + start: '2023-02-22', // 2023-02-22 01:26:52 UTC methodology: `Sum of liqudities backed USDF; and tokens values staked in the FutureSwap Farm.`, tvl: sumTokensExport({ owner: FutureSwapContracts.USDF, diff --git a/projects/futureswap/index.js b/projects/futureswap/index.js index d4cf03ead5..f1c1727848 100644 --- a/projects/futureswap/index.js +++ b/projects/futureswap/index.js @@ -47,7 +47,7 @@ async function avax(timestamp, _, { avax: block }) { } module.exports = { - start: 1609459200, // unix timestamp (utc 0) specifying when the project began, or where live data begins + start: '2021-01-01', // unix timestamp (utc 0) specifying when the project began, or where live data begins ethereum: { tvl }, arbitrum: { tvl: arbitrum }, avax: { tvl: avax }, diff --git a/projects/geode/index.js b/projects/geode/index.js index 714ef1db55..397660fc19 100644 --- a/projects/geode/index.js +++ b/projects/geode/index.js @@ -84,7 +84,6 @@ async function avax(timestamp, ethBlock, chainBlocks) { } module.exports = { - start: 16328353, methodology: "All Staking Derivatives are included to the TVL with relative underlying price. Also counted the Avax within the Dynamic Withdrawal Pools.", doublecounted: true, diff --git a/projects/glif/index.js b/projects/glif/index.js index 92a87f4ea4..2bf96f94b9 100644 --- a/projects/glif/index.js +++ b/projects/glif/index.js @@ -20,7 +20,7 @@ module.exports = { }, }, timetravel: true, - start: 1677628800, // 2023-03-01 + start: '2023-03-01', // 2023-03-01 hallmarks: [ // timestamp, event [1680206490, "Early deposits open"], // 2023-03-30 diff --git a/projects/gnosis/index.js b/projects/gnosis/index.js index d4faac58b0..3067b2421b 100644 --- a/projects/gnosis/index.js +++ b/projects/gnosis/index.js @@ -4,7 +4,7 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') module.exports = { - start: 1579811423, // Thu, 23 Jan 2020 20:30:23 GMT + start: '2020-01-23', // Thu, 23 Jan 2020 20:30:23 GMT ethereum: { tvl: sdk.util.sumChainTvls([ '0xc59b0e4de5f1248c1140964e0ff287b192407e0c', '0x6f400810b62df8e13fded51be75ff5393eaa841f', diff --git a/projects/goat-tech/index.js b/projects/goat-tech/index.js index 0b27dcca11..c9486bebe8 100644 --- a/projects/goat-tech/index.js +++ b/projects/goat-tech/index.js @@ -11,7 +11,6 @@ const configs = { module.exports = { methodology: "Total staking", - start: 210487219, arbitrum: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/gogocoin/index.js b/projects/gogocoin/index.js index 107bd1de9e..db9d4cb22f 100644 --- a/projects/gogocoin/index.js +++ b/projects/gogocoin/index.js @@ -49,7 +49,7 @@ async function pool2X(...args) { } module.exports = { - start: 1638388550, + start: '2021-12-01', polygon: { staking: stakingX, pool2: pool2X, diff --git a/projects/goku-money/index.js b/projects/goku-money/index.js index b79f9955f8..c19bd78b98 100644 --- a/projects/goku-money/index.js +++ b/projects/goku-money/index.js @@ -48,7 +48,7 @@ function getCollateralOwnersAndToken() { module.exports = { - start: 1698768000, // 01 Nov 2023 + start: '2023-10-31', // 01 Nov 2023 methodology: "Total locked collateral assets (in ERC-20 form) in ActivePool and DefaultPool, plus total staked GAI in StabilityPool", manta: { tvl: sumTokensExport({ diff --git a/projects/goldlink/index.js b/projects/goldlink/index.js index bfcf494ed2..84a749b7bf 100755 --- a/projects/goldlink/index.js +++ b/projects/goldlink/index.js @@ -2,7 +2,7 @@ const { sumERC4626VaultsExport } = require('../helper/erc4626') module.exports = { methodology: 'Delta neutral farming in GMX Vault', - start: 1716638498, + start: '2024-05-25', doublecounted: true, arbitrum: { tvl: sumERC4626VaultsExport({ vaults: ['0xd8dd54df1a7d2ea022b983756d8a481eea2a382a',], isOG4626: true, }), diff --git a/projects/goober/index.js b/projects/goober/index.js index 1305312929..50942a954e 100644 --- a/projects/goober/index.js +++ b/projects/goober/index.js @@ -1,7 +1,7 @@ const abis = require("./abis"); module.exports = { - start: 1668410449, + start: '2022-11-14', methodology: "Counts GOO balance of the vault then sums it with the total multiplier reserve based on the vaults pricing of a multiplier in GOO", } diff --git a/projects/grace/index.js b/projects/grace/index.js index 49c598bd59..5e1b6cdf1f 100644 --- a/projects/grace/index.js +++ b/projects/grace/index.js @@ -20,7 +20,6 @@ async function borrowed(api) { module.exports = { methodology: 'Fetches the list of pools and collaterals from the Core and sums up their balances', - start: 14684731, base: { tvl, borrowed }, diff --git a/projects/grafun/index.js b/projects/grafun/index.js index fb73c3eea5..92cbfbc585 100644 --- a/projects/grafun/index.js +++ b/projects/grafun/index.js @@ -1,7 +1,6 @@ const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') module.exports = { methodology: "TVL is calculated by aggregating the market value of BNB tokens held within the Token Sale Factory smart contract.", - start: 42593135, bsc: { tvl: sumTokensExport({ owner: '0x8341b19a2A602eAE0f22633b6da12E1B016E6451', token: nullAddress }) } diff --git a/projects/grappa-finance/index.js b/projects/grappa-finance/index.js index 756cf41fd3..622c471c1f 100644 --- a/projects/grappa-finance/index.js +++ b/projects/grappa-finance/index.js @@ -2,7 +2,7 @@ const ethereumTvl = require('./grappa-ethereum'); module.exports = { ethereum: { - start: 1675468800, + start: '2023-02-04', tvl: ethereumTvl, }, hallmarks: [ diff --git a/projects/gravita-protocol/index.js b/projects/gravita-protocol/index.js index 05686b9570..d142e717cf 100644 --- a/projects/gravita-protocol/index.js +++ b/projects/gravita-protocol/index.js @@ -30,7 +30,7 @@ async function tvl(api) { module.exports = { methodology: "Adds up the total value locked as collateral on the Gravita platform", - start: 1684256400, // Tuesday, May 15, 2023 17:00 GMT + start: '2023-05-16', // Tuesday, May 15, 2023 17:00 GMT }; Object.keys(ADMIN_ADDRESSES).forEach((chain) => { diff --git a/projects/gravity-bridge/index.js b/projects/gravity-bridge/index.js index 4e62bc8123..f983b4b967 100644 --- a/projects/gravity-bridge/index.js +++ b/projects/gravity-bridge/index.js @@ -58,7 +58,6 @@ const GRAVITY_BRIDGE_CONTRACT = "0xa4108aa1ec4967f8b52220a4f7e94a8201f2d906"; module.exports = { methodology: 'Counts the tokens locked in the Gravity Bridge contract on Ethereum chain.', - start: 13798211, ethereum: { tvl: sumTokensExport({ owner: GRAVITY_BRIDGE_CONTRACT, tokens: erc20Contracts, }), }, diff --git a/projects/groprotocol/index.js b/projects/groprotocol/index.js index 28613b9bb5..28baac7d24 100644 --- a/projects/groprotocol/index.js +++ b/projects/groprotocol/index.js @@ -115,7 +115,7 @@ module.exports = { avax: { tvl: avaxTvl, }, - start: 1622204347, // 28-05-2021 12:19:07 (UTC) + start: '2021-05-28', // 28-05-2021 12:19:07 (UTC) methodology: "Assets held within the GRO Protocol - either within the PWRD or Vault (GVT) products, or staked in the Gro Protocol pools. Avax TVL is the sum of tokens locked in Gro Labs.", }; diff --git a/projects/gudchain/index.js b/projects/gudchain/index.js index 05acdf3551..54195b8651 100644 --- a/projects/gudchain/index.js +++ b/projects/gudchain/index.js @@ -7,7 +7,6 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owner: launchBridge, - start: 20203960, tokens: [ ADDRESSES.null, ADDRESSES.ethereum.STETH, diff --git a/projects/gullnetwork/index.js b/projects/gullnetwork/index.js index b48859486b..5bb2792497 100644 --- a/projects/gullnetwork/index.js +++ b/projects/gullnetwork/index.js @@ -25,7 +25,7 @@ const tvl = async (api) => { } module.exports = { - start: 1710844331, // May-17-2024 12:45:31 PM +UTC + start: '2024-03-19', // May-17-2024 12:45:31 PM +UTC methodology: 'GullNetwork TVL including total values of assets staked in our staking vaults, and assets in the liquidity pool.', } diff --git a/projects/hai/index.js b/projects/hai/index.js index 2aec692174..9a2ba44a3c 100644 --- a/projects/hai/index.js +++ b/projects/hai/index.js @@ -4,7 +4,7 @@ const config = { } module.exports = { - start: 1709780769, // globalDebtCeiling raised > 0 + start: '2024-03-07', // globalDebtCeiling raised > 0 }; Object.keys(config).forEach(chain => { diff --git a/projects/harmonix/index.js b/projects/harmonix/index.js index f0a7bb5b75..aff77b0e0e 100644 --- a/projects/harmonix/index.js +++ b/projects/harmonix/index.js @@ -1,6 +1,6 @@ module.exports = { misrepresentedTokens: true, - start: 1709251200, // Friday, March 1, 2024 12:00:00 AM + start: '2024-03-01', // Friday, March 1, 2024 12:00:00 AM methodology: "Aggregates total value of each Harmonix vault" } diff --git a/projects/hectagon/index.js b/projects/hectagon/index.js index e4c49b25df..5f616dac6c 100644 --- a/projects/hectagon/index.js +++ b/projects/hectagon/index.js @@ -12,7 +12,6 @@ const HECTA_BUSD_ADDRESS = "0xc7cee4cea7c76e11e9f5e5e5cbc5e3b798a1c4d0"; module.exports = { methodology: "Total Value Lock in Hectagon protocol is calculated by sum of: Treasury locked value", - start: 20195418, bsc: { tvl: (_, _b, {[chain]: block}) => sumTokens2({ chain, block, owner: TREASURY_ADDRESS, tokens: [HECTA_BUSD_ADDRESS, BUSD_ADDRESS,]}), staking: staking(gHECTA, HECTA_ADDRESS, chain), diff --git a/projects/hedgefarm/index.js b/projects/hedgefarm/index.js index b207d74b5f..badd044ae1 100644 --- a/projects/hedgefarm/index.js +++ b/projects/hedgefarm/index.js @@ -27,7 +27,6 @@ async function tvl(api) { module.exports = { methodology: 'Gets the total balance in the Alpha #1 contract from IOU total supply and price per share and in the Smart Farmooor (Alpha #2) from the total balance.', - start: 21220270, avax: { tvl, } diff --git a/projects/hodlify/index.js b/projects/hodlify/index.js index 563355f224..0a7450f092 100644 --- a/projects/hodlify/index.js +++ b/projects/hodlify/index.js @@ -51,7 +51,7 @@ const tvl = async (api) => { module.exports = { doublecounted: true, - start: 1693929600, // Tue Sep 05 2023 16:00:00 GMT+0000 + start: '2023-09-05', // Tue Sep 05 2023 16:00:00 GMT+0000 methodology: 'Hodlify TVL including total values of assets deposited in other protocols, and the petty cash in our earning vaults.', arbitrum: { tvl }, optimism: { tvl }, diff --git a/projects/huma/index.js b/projects/huma/index.js index fd27dc2d22..a174d7192b 100644 --- a/projects/huma/index.js +++ b/projects/huma/index.js @@ -14,7 +14,7 @@ const config = { module.exports = { methodology: 'sum all tvls from all pools', - start: 1716248276, //2023-05-01 + start: '2024-05-21', //2023-05-01 } Object.keys(config).forEach(chain => { diff --git a/projects/hydt/index.js b/projects/hydt/index.js index 0b916251df..977fc48e64 100644 --- a/projects/hydt/index.js +++ b/projects/hydt/index.js @@ -42,7 +42,7 @@ async function staking(api) { module.exports = { misrepresentedTokens: true, methodology: "Retrieving the reserve BNB balance for TVL. Retrieving the staked amounts for HYDT from the earn (HYDT staking) contract and the LP Tokens from the farm contract for staking.", - start: 1693763345, + start: '2023-09-03', bsc: { tvl, staking, diff --git a/projects/illuminex/index.js b/projects/illuminex/index.js index e4f0b39cd6..33f6241155 100644 --- a/projects/illuminex/index.js +++ b/projects/illuminex/index.js @@ -7,7 +7,7 @@ const ixToken = "0x08Fe02Da45720f754e6FCA338eC1286e860d2d2f"; module.exports = { methodology: "Counts liquidity on illumineX Exchange, as well as IX token single staking together with liquidity mining locked LP", misrepresentedTokens: true, - start: 1706475600, + start: '2024-01-28', sapphire: { tvl: getUniTVL({ factory: '0x045551B6A4066db850A1160B8bB7bD9Ce3A2B5A5', useDefaultCoreAssets: true,}), staking: stakingPricedLP(stakingFarmingContractAddress, ixToken, "sapphire", "0xf0f7c4e8edb9edcbe200a4eaec384e8a48fc7815", "oasis-network", true), diff --git a/projects/increment-protocol/index.js b/projects/increment-protocol/index.js index 0d30a34cf2..108d63ca2a 100644 --- a/projects/increment-protocol/index.js +++ b/projects/increment-protocol/index.js @@ -4,5 +4,5 @@ const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { methodology: "Counting the value of all tokens locked in the contracts to be used as collateral to trade or provide liquidity.", era: { tvl: sumTokensExport({ owner: '0xfc840c55b791a1dbaf5c588116a8fc0b4859d227', tokens: [ADDRESSES.era.USDC] }) }, - start: 1710004200 // 2024-03-09 09:10 + start: '2024-03-09' // 2024-03-09 09:10 } \ No newline at end of file diff --git a/projects/insuredefi/index.js b/projects/insuredefi/index.js index ab7335ad8e..d58c575df8 100644 --- a/projects/insuredefi/index.js +++ b/projects/insuredefi/index.js @@ -36,7 +36,7 @@ async function tvl(timestamp, block) { module.exports = { - start: 1513566671, // 2020/10/21 6:34:47 (+UTC) + start: '2017-12-18', // 2020/10/21 6:34:47 (+UTC) ethereum: { tvl } }; diff --git a/projects/invar-finance/index.js b/projects/invar-finance/index.js index 5ebb73cc66..7b1f51ad20 100644 --- a/projects/invar-finance/index.js +++ b/projects/invar-finance/index.js @@ -10,5 +10,4 @@ module.exports = { tvl: sumTokensExport({ owner:INVARIA2222, token: ADDRESSES.ethereum.USDC}), }, deadFrom: '2023-11-12', - start: 15389792, }; diff --git a/projects/inverse-finance-firm/index.js b/projects/inverse-finance-firm/index.js index 3ea79f3943..cb1ee47c30 100644 --- a/projects/inverse-finance-firm/index.js +++ b/projects/inverse-finance-firm/index.js @@ -50,6 +50,6 @@ module.exports = { [1707177600, "Launch of sDOLA"], [1718236800, "CRV liquidation"] ], - start: 1670701200, // Dec 10 2022 + start: '2022-12-10', // Dec 10 2022 ethereum: { tvl } }; diff --git a/projects/inverse/index.js b/projects/inverse/index.js index bc60510054..c4e11e6c61 100644 --- a/projects/inverse/index.js +++ b/projects/inverse/index.js @@ -51,6 +51,6 @@ module.exports = { [1648771200, "INV price hack"], [1655380800, "Inverse Frontier Deprecated"] ], - start: 1607731200, // Dec 12 2020 00:00:00 GMT+0000 + start: '2020-12-12', // Dec 12 2020 00:00:00 GMT+0000 ethereum: { tvl } }; diff --git a/projects/ion-dao/index.js b/projects/ion-dao/index.js index f60d837fa3..1beb1eee81 100644 --- a/projects/ion-dao/index.js +++ b/projects/ion-dao/index.js @@ -11,7 +11,6 @@ async function tvl() { module.exports = { timetravel: false, // need to add code to fetch osmosis block - start: 5887991, osmosis: { tvl, }, diff --git a/projects/ip/index.js b/projects/ip/index.js index f9f78c593f..1844ce8490 100644 --- a/projects/ip/index.js +++ b/projects/ip/index.js @@ -83,7 +83,6 @@ async function op_tvl(api) { } module.exports = { - start: 14962974, ethereum: { tvl: eth_tvl }, diff --git a/projects/ironbank/index.js b/projects/ironbank/index.js index d1c485f53a..ece02f5062 100644 --- a/projects/ironbank/index.js +++ b/projects/ironbank/index.js @@ -1,7 +1,7 @@ const { compoundExports2 } = require("../helper/compound"); module.exports = { - start: 1599552000, // 09/08/2020 @ 8:00am (UTC) + start: '2020-09-08', // 09/08/2020 @ 8:00am (UTC) ethereum: compoundExports2({ comptroller: '0xAB1c342C7bf5Ec5F02ADEA1c2270670bCa144CbB', blacklistedTokens: [ diff --git a/projects/ithaca/index.js b/projects/ithaca/index.js index 201b6181ee..33eb0d72fe 100644 --- a/projects/ithaca/index.js +++ b/projects/ithaca/index.js @@ -13,7 +13,6 @@ module.exports = { timetravel: true, misrepresentedTokens: false, methodology: 'counts the number of WETH and USDC in Ithaca Fundlock contract', - start: 176036233, arbitrum: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/ithil/index.js b/projects/ithil/index.js index 8f083e0f55..aaf2d87656 100644 --- a/projects/ithil/index.js +++ b/projects/ithil/index.js @@ -19,7 +19,6 @@ const config = { } module.exports = { methodology: 'We calculate the TVL as the sum of (deposits + loans + locked profits - losses) for each vault available', - start: 171730567, hallmarks: [ [1691649008, "private mainnet launch"] ], diff --git a/projects/juicebox-v1/index.js b/projects/juicebox-v1/index.js index 693c5e8369..8f9403b7da 100644 --- a/projects/juicebox-v1/index.js +++ b/projects/juicebox-v1/index.js @@ -11,7 +11,7 @@ module.exports = { methodology: "Count the value of the Ether in the Juicebox V1 terminals", ethereum: { - start: 1626369243, // 2021-06-15 17:14:03 (UTC) + start: '2021-07-15', // 2021-06-15 17:14:03 (UTC) tvl: async (_, block) => sumTokens2({ block, tokensAndOwners: [ diff --git a/projects/juicebox-v2/index.js b/projects/juicebox-v2/index.js index 8ccfde45aa..f9bf57d759 100644 --- a/projects/juicebox-v2/index.js +++ b/projects/juicebox-v2/index.js @@ -10,7 +10,7 @@ module.exports = { methodology: "Count the value of the Ether in the Juicebox V2 terminal", ethereum: { - start: 1653853643, // 2022-05-29 19:47:23 (UTC) + start: '2022-05-29', // 2022-05-29 19:47:23 (UTC) tvl: async (_, block) => sumTokens2({ block, tokensAndOwners: [ diff --git a/projects/juicebox-v3/index.js b/projects/juicebox-v3/index.js index 5521467880..b109c4c410 100644 --- a/projects/juicebox-v3/index.js +++ b/projects/juicebox-v3/index.js @@ -13,7 +13,7 @@ module.exports = { methodology: "Count the value of the Ether in the Juicebox V3 terminals", ethereum: { - start: 1663679075, // 2022-10-20 15:04:35(UTC) + start: '2022-09-20', // 2022-10-20 15:04:35(UTC) tvl: async (_, block) => sumTokens2({ block, tokensAndOwners: [ diff --git a/projects/kaiafun/index.js b/projects/kaiafun/index.js index 9d220060da..c045193c92 100644 --- a/projects/kaiafun/index.js +++ b/projects/kaiafun/index.js @@ -4,7 +4,6 @@ const { sumTokensExport } = require('../helper/unwrapLPs'); const WKLAY = '0x19aac5f612f524b754ca7e7c41cbfa2e981a4432'; module.exports.klaytn = { - start: 165171284, methodology: 'TVL counts Canonical WKLAY coins in KaiaFun\'s Core Contract.', tvl: sumTokensExport({ owners: ["0x080f8b793fe69fe9e65b5ae17b10f987c95530bf"], diff --git a/projects/keeper-dao/index.js b/projects/keeper-dao/index.js index 0220bd0596..6b1b9b7fcd 100644 --- a/projects/keeper-dao/index.js +++ b/projects/keeper-dao/index.js @@ -142,7 +142,7 @@ async function tvl(api) { } module.exports = { - start: 1611991703, // 01/30/2021 @ 07:28:23 AM +UTC + start: '2021-01-30', // 01/30/2021 @ 07:28:23 AM +UTC ethereum: { tvl } diff --git a/projects/kewl/index.js b/projects/kewl/index.js index 2a18513e60..0b7693686c 100644 --- a/projects/kewl/index.js +++ b/projects/kewl/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { methodology: "We count liquidity of all paris through Factory Contract and Pools (single tokens) seccions through Factory Contract.", - start: 1701478462, //Dec-2-2023 3:54:26 PM +UTC + start: '2023-12-02', //Dec-2-2023 3:54:26 PM +UTC misrepresentedTokens: true, chz: { diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index 057ded5fa8..a48f89d696 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -11,7 +11,7 @@ const bsquared_owners = ["0xA2E2F3726DF754C1848C8fd1CbeA6aAFF84FC5B2", "0x1EbEd4 const base_owners = ["0x43E3E6FFb2E363E64cD480Cbb7cd0CF47bc6b477", "0x7BC8D56cC78cF467C7230B77De0fcBDea9ac44cE","0xdf5ACC616cD3ea9556EC340a11B54859a393ebBB"]; module.exports = { - start: 1690971144, + start: '2023-08-02', bsc: { tvl: sumTokensExport({ owners, tokens: [ ADDRESSES.bsc.USDT, ADDRESSES.ethereum.FDUSD, ADDRESSES.scroll.STONE, ADDRESSES.bsc.WBNB, //WBNB diff --git a/projects/lavarage/index.js b/projects/lavarage/index.js index 1c6db59d14..5f204743a3 100644 --- a/projects/lavarage/index.js +++ b/projects/lavarage/index.js @@ -10,8 +10,8 @@ const TOKEN_PROGRAM_ID = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ const SPL_ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); const edgeCaseTimestamps = [ - { start: 1713880000, end: 1713885480 }, // 10:32 AM - 10:58 AM ET on April 23, 2024 - { start: 1713874500, end: 1713876060 }, // 8:15 AM - 8:41 AM ET on April 23, 2024 + { start: '2024-04-23', end: 1713885480 }, // 10:32 AM - 10:58 AM ET on April 23, 2024 + { start: '2024-04-23', end: 1713876060 }, // 8:15 AM - 8:41 AM ET on April 23, 2024 ]; const idleAccount = new PublicKey("bkhAyULeiXwju7Zmy4t3paDHtVZjNaofVQ4VgEdTWiE"); diff --git a/projects/lien/index.js b/projects/lien/index.js index ff7c6e0b89..f311d8a05c 100644 --- a/projects/lien/index.js +++ b/projects/lien/index.js @@ -27,6 +27,6 @@ async function tvl(timestamp, block) { } module.exports = { - start: 1619798400, // 30/4/2021 @ 04:00PM (UTC) + start: '2021-04-30', // 30/4/2021 @ 04:00PM (UTC) ethereum: { tvl } }; diff --git a/projects/lightning-network/index.js b/projects/lightning-network/index.js index 6aeb3aa7d3..179cc4a6d7 100644 --- a/projects/lightning-network/index.js +++ b/projects/lightning-network/index.js @@ -53,7 +53,7 @@ async function tvl({ timestamp }) { } module.exports = { - start: 1516406400, + start: '2018-01-20', bitcoin: { tvl }, }; diff --git a/projects/liqee/index.js b/projects/liqee/index.js index 624c99e19c..795ccdb364 100644 --- a/projects/liqee/index.js +++ b/projects/liqee/index.js @@ -127,5 +127,5 @@ module.exports = { bsc: { tvl: bsc }, - start: 1629776276, // Aug-24-2021 11:37:56 AM +UTC + start: '2021-08-24', // Aug-24-2021 11:37:56 AM +UTC } diff --git a/projects/liquidity-slicing/index.js b/projects/liquidity-slicing/index.js index 4737eeb067..0928513e44 100644 --- a/projects/liquidity-slicing/index.js +++ b/projects/liquidity-slicing/index.js @@ -50,7 +50,6 @@ async function tvl(api) { module.exports = { arbitrum: { - start: 224198345, tvl, } } diff --git a/projects/liquity/index.js b/projects/liquity/index.js index 2cdcb367d9..835ba9c1ca 100644 --- a/projects/liquity/index.js +++ b/projects/liquity/index.js @@ -7,7 +7,7 @@ const STAKING_ADDRESS = "0x4f9Fbb3f1E99B56e0Fe2892e623Ed36A76Fc605d"; const LQTY_ADDRESS = "0x6DEA81C8171D0bA574754EF6F8b412F2Ed88c54D" module.exports = { - start: 1617607296, + start: '2021-04-05', ethereum: { tvl: getLiquityTvl(TROVE_MANAGER_ADDRESS), staking: staking(STAKING_ADDRESS, LQTY_ADDRESS) diff --git a/projects/llamalend/index.js b/projects/llamalend/index.js index 42a4f8ebdf..47a846a397 100644 --- a/projects/llamalend/index.js +++ b/projects/llamalend/index.js @@ -37,7 +37,7 @@ async function tvl(api) { } module.exports = { - start: 1666638251, + start: '2022-10-24', methodology: 'TVL is calculated by adding up all the ETH in the pools and the totalBorrowed of every pool', ethereum: { tvl: tvl, diff --git a/projects/lobster-protocol/index.js b/projects/lobster-protocol/index.js index f136ccff46..140567d574 100644 --- a/projects/lobster-protocol/index.js +++ b/projects/lobster-protocol/index.js @@ -18,7 +18,7 @@ async function tvl(api) { module.exports = { misrepresentedTokens: true, - start: 1704067199, // Sunday 31 December 2023 23:59:59 + start: '2024-01-01', // Sunday 31 December 2023 23:59:59 methodology: "Aggregates total value of Lobster protocol vaults on Arbitrum", arbitrum: { diff --git a/projects/loopfi/index.js b/projects/loopfi/index.js index 496e556f16..9def15476c 100644 --- a/projects/loopfi/index.js +++ b/projects/loopfi/index.js @@ -36,7 +36,7 @@ const tokensYieldnest = { module.exports = { methodology: "Counts the number of WETH, WBTC and LRT tokens in the LoopFi Prelaunch Contracts in Ethereum and Scroll networks.", - start: 1718390875, + start: '2024-06-14', ethereum: { tvl: sumTokensExport({ ownerTokens: [[Object.values(tokens), LOOP_PRELAUNCH], [Object.values(tokensBtc), LOOP_PRELAUNCH_BTC], [Object.values(tokensYieldnest), LOOP_PRELAUNCH_YNETH]], diff --git a/projects/louverture/index.js b/projects/louverture/index.js index 5dd6974172..9d39b7ee95 100644 --- a/projects/louverture/index.js +++ b/projects/louverture/index.js @@ -21,7 +21,7 @@ async function staking(timestamp, ethBlock, chainBlocks) { module.exports = { - start: 1639872000, // 19/12/2021 @ 00:00am (UTC) + start: '2021-12-19', // 19/12/2021 @ 00:00am (UTC) avax:{ staking, tvl: async()=>({}) diff --git a/projects/love/index.js b/projects/love/index.js index e0587f6593..ec0391bcc3 100644 --- a/projects/love/index.js +++ b/projects/love/index.js @@ -2,7 +2,6 @@ module.exports = { methodology: "The liquidity on these three pools + the tokens staked on all three chains (PulseChain, Ethereum, and Binance Smart Chain)", - start: 1000235, }; const config = { diff --git a/projects/lsdx/index.js b/projects/lsdx/index.js index 9e6484c7b8..fdc0114b3d 100644 --- a/projects/lsdx/index.js +++ b/projects/lsdx/index.js @@ -24,7 +24,6 @@ async function tvl(api) { } module.exports = { - start: 16831303, ethereum: { tvl, pool2: staking(['0x1D31755E03119311c7F00ae107874dddEC7573f3', '0xE05630Da82604591F002b61F7116429CfDC4B542'], LSD_LPs), diff --git a/projects/lucidly/index.js b/projects/lucidly/index.js index 2934990891..34df9999c1 100644 --- a/projects/lucidly/index.js +++ b/projects/lucidly/index.js @@ -13,6 +13,6 @@ async function tvl(api) { module.exports = { - start: 1693971707, + start: '2023-09-06', ethereum: { tvl } }; diff --git a/projects/lumin-finance/index.js b/projects/lumin-finance/index.js index c39a9bc6ff..16a8afa881 100644 --- a/projects/lumin-finance/index.js +++ b/projects/lumin-finance/index.js @@ -41,7 +41,6 @@ async function staking(api) { module.exports = { methodology: 'Gets v1 total deposits, and v2 staking statistics on-chain.', - start: 194344665, arbitrum: { staking, tvl, borrowed, diff --git a/projects/lusd-chickenbonds/index.js b/projects/lusd-chickenbonds/index.js index d93510fdcd..d7caf1c27c 100644 --- a/projects/lusd-chickenbonds/index.js +++ b/projects/lusd-chickenbonds/index.js @@ -23,7 +23,6 @@ async function tvl(_, block) { module.exports = { methodology: 'counts the amount of LUSD tokens in the 3 buckets of the LUSD ChickenBonds protocol.', - start: 15674057, ethereum: { tvl, }, diff --git a/projects/lybra-v2/index.js b/projects/lybra-v2/index.js index c8acd6af6f..18d8cdd058 100644 --- a/projects/lybra-v2/index.js +++ b/projects/lybra-v2/index.js @@ -8,7 +8,6 @@ const wbETHvault = "0xB72dA4A9866B0993b9a7d842E5060716F74BF262"; const rETHvault = "0x090B2787D6798000710a8e821EC6111d254bb958" module.exports = { - start: 17990141, ethereum: { tvl: sumTokensExport({ tokensAndOwners2: [[ADDRESSES.ethereum.STETH, ADDRESSES.ethereum.WSTETH, "0xa2e3356610840701bdf5611a53974510ae27e2e1", ADDRESSES.ethereum.RETH], [stETHvault, wstETHvault, wbETHvault, rETHvault]] }), } diff --git a/projects/lybra/index.js b/projects/lybra/index.js index 848b7bf64d..bee2811b23 100644 --- a/projects/lybra/index.js +++ b/projects/lybra/index.js @@ -5,7 +5,7 @@ const { sumTokensExport } = require("../helper/unwrapLPs"); const LYBRA_CONTRACT = "0x97de57eC338AB5d51557DA3434828C5DbFaDA371"; module.exports = { - start: 1682265600, + start: '2023-04-23', ethereum: { tvl: sumTokensExport({ owner: LYBRA_CONTRACT, tokens: [ADDRESSES.ethereum.STETH]}), } diff --git a/projects/lyve/index.js b/projects/lyve/index.js index b3dc27950d..ce53e42837 100644 --- a/projects/lyve/index.js +++ b/projects/lyve/index.js @@ -15,7 +15,7 @@ async function tvl(api) { module.exports = { methodology: "Adds up the total value locked as collateral on the Lyve platform", - start: 1699459200, + start: '2023-11-08', }; Object.keys(ADMIN_ADDRESSES).forEach(chain => { diff --git a/projects/maker-rwa/index.js b/projects/maker-rwa/index.js index e1f80c3b05..33a025a5e0 100644 --- a/projects/maker-rwa/index.js +++ b/projects/maker-rwa/index.js @@ -72,7 +72,7 @@ const tvl = async (api) => { module.exports = { methodology: `Counts all the tokens being used as collateral of CDPs. On the technical level, we get all the collateral tokens by fetching events, get the amounts locked by calling balanceOf() directly, unwrap any uniswap LP tokens and then get the price of each token from coingecko`, - start: 1513566671, // 12/18/2017 @ 12:00am (UTC) + start: '2017-12-18', // 12/18/2017 @ 12:00am (UTC) ethereum: { tvl }, diff --git a/projects/maker/index.js b/projects/maker/index.js index d50414d7c7..c78a981db2 100644 --- a/projects/maker/index.js +++ b/projects/maker/index.js @@ -93,7 +93,7 @@ async function unwrapGunis({ api, toa, }) { module.exports = { methodology: `Counts all the tokens being used as collateral of CDPs. On the technical level, we get all the collateral tokens by fetching events, get the amounts locked by calling balanceOf() directly, unwrap any uniswap LP tokens and then get the price of each token from coingecko`, - start: 1513566671, // 12/18/2017 @ 12:00am (UTC) + start: '2017-12-18', // 12/18/2017 @ 12:00am (UTC) ethereum: { tvl }, diff --git a/projects/mangrove/index.js b/projects/mangrove/index.js index 4063ddd380..476dbded11 100644 --- a/projects/mangrove/index.js +++ b/projects/mangrove/index.js @@ -55,7 +55,7 @@ module.exports = { misrepresentedTokens: false, methodology: "TVL is calculated by getting the total promised liquidity on the orderbook on a specific block.", - start: 1708992000, + start: '2024-02-27', }; for (const chain in mgvReaders) { diff --git a/projects/meme-dollar/index.js b/projects/meme-dollar/index.js index ea585d4dc2..7d1df3a40d 100644 --- a/projects/meme-dollar/index.js +++ b/projects/meme-dollar/index.js @@ -10,7 +10,7 @@ const PINA_MEME_LP_CONTRACT = "0x713afa49478f1a33c3194ff65dbf3c8058406670"; module.exports = { methodology: "counts the number of tokens in Pina pool", - start: 1673928000, + start: '2023-01-17', ethereum: { tvl: () => 0, staking: staking( diff --git a/projects/merlin/index.js b/projects/merlin/index.js index d668ed0d98..b01220edea 100644 --- a/projects/merlin/index.js +++ b/projects/merlin/index.js @@ -1,5 +1,5 @@ module.exports = { - start: 1682899200, + start: '2023-05-01', era: { tvl: () => 0, }, diff --git a/projects/metastreet-v2/index.js b/projects/metastreet-v2/index.js index d8c8c0c05d..67291bb756 100644 --- a/projects/metastreet-v2/index.js +++ b/projects/metastreet-v2/index.js @@ -70,5 +70,4 @@ module.exports = { }, methodology: "TVL is calculated by summing the value of token balances and NFTs across all MetaStreet pools. Total borrowed is calculated by subtracting the tokens available from the total value of all liquidity nodes across all pools.", - start: 17497132, // Block number of PoolFactory creation }; diff --git a/projects/metastreet/index.js b/projects/metastreet/index.js index 7c0b8877d8..46ca4656ae 100644 --- a/projects/metastreet/index.js +++ b/projects/metastreet/index.js @@ -90,5 +90,4 @@ module.exports = { borrowed: getMetaStreetTVL(true), }, methodology: 'TVL is calculated by getting the ERC20 balance of each vault, which counts tokens deposited into contracts for earning yield but not the value of any NFT loan note collateral the vault has purchased. Borrowed tokens are also not counted towards TVL.', - start: 14878205 }; \ No newline at end of file diff --git a/projects/metronome/index.js b/projects/metronome/index.js index 93f566c8cf..13da3f99cb 100644 --- a/projects/metronome/index.js +++ b/projects/metronome/index.js @@ -5,7 +5,7 @@ const met = '0x2Ebd53d035150f328bd754D6DC66B99B0eDB89aa'; const proceeds = '0x68c4b7d05fae45bcb6192bb93e246c77e98360e1'; module.exports = { - start: 1527076766, // block 5659904 + start: '2018-05-23', // block 5659904 hallmarks: [ [1661257318,"Metronome V1 Sunset"] ], diff --git a/projects/milkomeda-djed/index.js b/projects/milkomeda-djed/index.js index 499b345b1e..105dc0cfa6 100644 --- a/projects/milkomeda-djed/index.js +++ b/projects/milkomeda-djed/index.js @@ -9,7 +9,6 @@ async function tvl(api) { module.exports = { methodology: 'The TVL of each Djed deployment on Milkomeda C1.', milkomeda: { - start: 10440400, tvl, }, }; diff --git a/projects/milkyway/index.js b/projects/milkyway/index.js index d1884ee3f2..f88570fc88 100644 --- a/projects/milkyway/index.js +++ b/projects/milkyway/index.js @@ -3,7 +3,7 @@ const { compoundExports } = require("../helper/compound"); module.exports = { deadFrom: '2023-12-15', timetravel: false, // milkomeda api's for staked coins can't be queried at historical points - start: 1599552000, // 09/08/2020 @ 8:00am (UTC) + start: '2020-09-08', // 09/08/2020 @ 8:00am (UTC) milkomeda: compoundExports("0x0Dd4E2B7E0E8a2Cd1258a9023D3a5062381554Cf"), }; diff --git a/projects/minerPepe/index.js b/projects/minerPepe/index.js index 60b718f980..e2bf7b8abb 100644 --- a/projects/minerPepe/index.js +++ b/projects/minerPepe/index.js @@ -6,7 +6,6 @@ const TOKENS = ["0x6d306C2C9CD931160763D99376a68C14D33DC954"] module.exports = { methodology: "MinerPepe the first mining PEPE Meme Coin on Binance Smart Chain. Miners enjoy 12% daily returns in BNB and MPEPE tokens", - start: 35011373, bsc: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/mobius/index.js b/projects/mobius/index.js index dab40934c3..3c5873c7eb 100644 --- a/projects/mobius/index.js +++ b/projects/mobius/index.js @@ -230,6 +230,5 @@ async function tvl(_, _b, {[chain]: block }) { } module.exports = { - start: 8606077, // January 19, 2021 11:51:30 AM celo: { tvl } }; diff --git a/projects/mojitoswap/index.js b/projects/mojitoswap/index.js index d8a21cd901..47c140bb5f 100644 --- a/projects/mojitoswap/index.js +++ b/projects/mojitoswap/index.js @@ -13,5 +13,4 @@ module.exports = { tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x79855a03426e15ad120df77efa623af87bd54ef3', }), staking: stakings([masterchefAddress, masterchefV2Address], mjtAddress), }, - start: 3000000, }; diff --git a/projects/mole/index.js b/projects/mole/index.js index 3fe52bf72b..acc470cf84 100644 --- a/projects/mole/index.js +++ b/projects/mole/index.js @@ -24,7 +24,7 @@ async function suiTvl() { // run command: node test.js projects/mole/index.js module.exports = { timetravel: false, - start: 1653840000, + start: '2022-05-29', // avax: { // tvl: avaxTvl, // staking: avaxStaking, diff --git a/projects/monroeprotocol/index.js b/projects/monroeprotocol/index.js index 1e80fd1868..33cdc7bd78 100644 --- a/projects/monroeprotocol/index.js +++ b/projects/monroeprotocol/index.js @@ -59,7 +59,7 @@ async function tvl(api) { module.exports = { methodology: "Adds up the total value locked as collateral in Monroe vaults", - start: 1710288000, // March 13, 2024 00:00 GMT + start: '2024-03-13', // March 13, 2024 00:00 GMT hallmarks: [ [1722000000, "V2 Launch"] ], diff --git a/projects/monster/index.js b/projects/monster/index.js index 848b287c27..54c3631c78 100644 --- a/projects/monster/index.js +++ b/projects/monster/index.js @@ -10,7 +10,6 @@ const LP_STAKING_2 = "0xc13926C5CB2636a29381Da874b1e2686163DC226"; module.exports = { methodology: "counts the number of MST tokens in the ve contract and the pairs in the staking pool", - start: 22569995, fantom: { tvl: async () => ({}), pool2: pool2([LP_STAKING_1, LP_STAKING_2], [LP_POOL_1, LP_POOL_2]), diff --git a/projects/moret/index.js b/projects/moret/index.js index 19ab8d9dd6..10751b6868 100644 --- a/projects/moret/index.js +++ b/projects/moret/index.js @@ -13,7 +13,7 @@ const tvlTokens = [ADDRESSES.polygon.WETH_1, // WETH module.exports = { methodology: 'counts all USDC/WBTC/WETH/GHST balances of market contracts.', - start: 1677225600, // 24 Feb 2023 08:00:00 UTC + start: '2023-02-24', // 24 Feb 2023 08:00:00 UTC polygon: { tvl: sumTokensExport({ owners: markets, tokens: tvlTokens, }), } diff --git a/projects/mountain-protocol/index.js b/projects/mountain-protocol/index.js index c17297e731..644c20547c 100644 --- a/projects/mountain-protocol/index.js +++ b/projects/mountain-protocol/index.js @@ -20,7 +20,6 @@ async function tvl(api) { module.exports = { misrepresentedTokens: true, methodology: "Calculates the total USDM Supply", - start: 16685700, ethereum: { tvl, }, diff --git a/projects/mstable/index.js b/projects/mstable/index.js index 9ddee7f25a..011e5e4526 100644 --- a/projects/mstable/index.js +++ b/projects/mstable/index.js @@ -127,7 +127,7 @@ const ethereumTvl = tvlForChain('ethereum') const polygonTvl = tvlForChain('polygon') module.exports = { - start: 1590624000, // May-28-2020 00:00:00 + start: '2020-05-28', // May-28-2020 00:00:00 polygon: { tvl: polygonTvl, }, diff --git a/projects/nayms/index.js b/projects/nayms/index.js index de6cd8b411..f2cf054f71 100644 --- a/projects/nayms/index.js +++ b/projects/nayms/index.js @@ -21,7 +21,7 @@ const ownerBase = "0x546Fb1621CF8C0e8e3ED8E3508b7c5100ADdBc03"; module.exports = { methodology: "Sum assets on Nayms", - start: 1681990619, // Thu Apr 20 13:36:59 2023 GMT + start: '2023-04-20', // Thu Apr 20 13:36:59 2023 GMT hallmarks: [[1681990619, "Nayms V3 Launch"]], ethereum: { tvl: sumTokensExport({ owner, tokens }), diff --git a/projects/neptune-mutual/index.js b/projects/neptune-mutual/index.js index 87fdb23f5b..41dbb0d853 100644 --- a/projects/neptune-mutual/index.js +++ b/projects/neptune-mutual/index.js @@ -39,7 +39,7 @@ async function tvl(api) { module.exports = { methodology: "TVL consists of the total liquidity available in the cover pools", - start: 1667260800, // Nov 01 2022 @ 12:00am (UTC) + start: '2022-11-01', // Nov 01 2022 @ 12:00am (UTC) ethereum: { tvl }, arbitrum: { tvl }, bsc: { tvl }, diff --git a/projects/nerve/index.js b/projects/nerve/index.js index 2a3aba64d5..1c1d957045 100644 --- a/projects/nerve/index.js +++ b/projects/nerve/index.js @@ -24,7 +24,7 @@ const ownerTokens = [ module.exports = { misrepresentedTokens: true, - start: 1614556800, // March 1, 2021 00:00 AM (UTC) + start: '2021-03-01', // March 1, 2021 00:00 AM (UTC) bsc:{ tvl: sumTokensExport({ ownerTokens }), staking:staking(xnrvAddress, nrv) diff --git a/projects/nexus/index.js b/projects/nexus/index.js index 7a63c3a307..2e46140c93 100644 --- a/projects/nexus/index.js +++ b/projects/nexus/index.js @@ -9,6 +9,6 @@ async function tvl(api) { module.exports = { misrepresentedTokens: true, - start: 1558569600, // 05/23/2019 @ 12:00am (UTC) + start: '2019-05-23', // 05/23/2019 @ 12:00am (UTC) ethereum: { tvl } } diff --git a/projects/nomad/index.js b/projects/nomad/index.js index a9b18f894b..6c7b0dfc7f 100644 --- a/projects/nomad/index.js +++ b/projects/nomad/index.js @@ -87,6 +87,5 @@ module.exports = { [1659312000,"trusted root exploit"] ], methodology: 'counts the total amount of assets locked in the Nomad token bridge.', - start: 13983843, ...chainExports(tvl, Object.keys(HOME_CHAINS)) }; diff --git a/projects/nsure/index.js b/projects/nsure/index.js index 7c2172a23d..5f6fcc9ef8 100644 --- a/projects/nsure/index.js +++ b/projects/nsure/index.js @@ -101,7 +101,7 @@ async function tvl(timestamp, block) { } module.exports = { - start: 1619081169, // Thu Apr 22 2021 16:46:35 + start: '2021-04-22', // Thu Apr 22 2021 16:46:35 ethereum: { tvl } }; diff --git a/projects/olympus/index.js b/projects/olympus/index.js index f3713bd1ac..7db910491f 100644 --- a/projects/olympus/index.js +++ b/projects/olympus/index.js @@ -176,7 +176,7 @@ async function ownTokens(api) { } module.exports = { - start: 1616569200, // March 24th, 2021 + start: '2021-03-24', // March 24th, 2021 timetravel: false, methodology: "TVL is the sum of the value of all assets held by the treasury (excluding pTokens). Please visit https://app.olympusdao.finance/#/dashboard for more info.", diff --git a/projects/onsenswap/index.js b/projects/onsenswap/index.js index 2e76f4eeae..3aa9ea655a 100644 --- a/projects/onsenswap/index.js +++ b/projects/onsenswap/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { misrepresentedTokens: true, - start: 1682168400, + start: '2023-04-22', era: { tvl: getUniTVL({ factory: "0x0E15a1a03bD356B17F576c50d23BF7FC00305590", diff --git a/projects/optionBlitz/index.js b/projects/optionBlitz/index.js index 6d58fb2e7b..c17184fb24 100644 --- a/projects/optionBlitz/index.js +++ b/projects/optionBlitz/index.js @@ -6,7 +6,6 @@ const BLX = "0x220251092F8B63efD0341F69f6ca907Bd6f271Bf"; // BLX const assets = [nullAddress, ADDRESSES.arbitrum.USDC_CIRCLE] // ETH, USDC module.exports = { - start: 194784191, arbitrum: { tvl: sumTokensExport({ owners: [treasury], tokens: assets }), staking: sumTokensExport({ owners: [treasury], tokens: [BLX] }), diff --git a/projects/opulous/index.js b/projects/opulous/index.js index 1148a46c88..677c89f7fd 100644 --- a/projects/opulous/index.js +++ b/projects/opulous/index.js @@ -33,7 +33,7 @@ const arbitrumTVL = async (api) => { } module.exports = { - // // start: 1660827158, + // // start: '2022-08-18', methodology: `Counts the number of OPUL tokens locked in the staking pool.`, algorand: { tvl: () => ({}), diff --git a/projects/orange-finance/index.js b/projects/orange-finance/index.js index 110b87f8f8..2bd434f325 100644 --- a/projects/orange-finance/index.js +++ b/projects/orange-finance/index.js @@ -23,7 +23,6 @@ async function tvl(api) { module.exports = { doublecounted: true, - start: 154577707, arbitrum: { tvl, }, diff --git a/projects/ottopia/index.js b/projects/ottopia/index.js index 0a07f498cd..f0bf14740d 100644 --- a/projects/ottopia/index.js +++ b/projects/ottopia/index.js @@ -32,7 +32,6 @@ async function tvl({timestamp}, block, chainBlocks) { module.exports = { methodology: "This adapter uses otterclam's subgraph to fetch tvl data.", - start: 30711580, polygon: { tvl, staking: staking(PearlBank, CLAM), diff --git a/projects/pairex/index.js b/projects/pairex/index.js index 03e88224b0..d13fdb5d8d 100644 --- a/projects/pairex/index.js +++ b/projects/pairex/index.js @@ -16,7 +16,7 @@ const tokens = [ ] module.exports = { - start: 1678852800, // 15/03/2023 @ 04:00am (UTC) + start: '2023-03-15', // 15/03/2023 @ 04:00am (UTC) arbitrum: { tvl: sumTokensExport({ tokens, owners: contracts }), }, diff --git a/projects/paladinfinance-dullahan/index.js b/projects/paladinfinance-dullahan/index.js index 8002d64096..4d39425d90 100644 --- a/projects/paladinfinance-dullahan/index.js +++ b/projects/paladinfinance-dullahan/index.js @@ -12,5 +12,4 @@ module.exports = { ethereum: { tvl, }, - start: 17824291 }; diff --git a/projects/paladinfinance-warlord/index.js b/projects/paladinfinance-warlord/index.js index e95d489818..f3719aa0e4 100644 --- a/projects/paladinfinance-warlord/index.js +++ b/projects/paladinfinance-warlord/index.js @@ -40,5 +40,4 @@ module.exports = { ethereum: { tvl: ethTvl, }, - start: 17368026 }; diff --git a/projects/pangolin/index.js b/projects/pangolin/index.js index 5bd5ebe240..2efca3ea2b 100644 --- a/projects/pangolin/index.js +++ b/projects/pangolin/index.js @@ -56,5 +56,5 @@ module.exports = { return toUSDTBalances(data.pangolinFactory.totalLiquidityUSD) } }, - start: 1612715300, // 7th-Feb-2021 + start: '2021-02-07', // 7th-Feb-2021 }; diff --git a/projects/papparico-finance/index.js b/projects/papparico-finance/index.js index 2858568558..1b8ba46e9b 100644 --- a/projects/papparico-finance/index.js +++ b/projects/papparico-finance/index.js @@ -14,7 +14,6 @@ const LP_MINING_CONTRACT_V2 = "0x2490AFBf1609119bB76E5e936f4ce4cBed815947"; const lps = [PPFT_MAIN_LP, XPPFT_LP]; module.exports = { - start: 13406569, cronos: { tvl: () => ({}), staking: sumTokensExport({ diff --git a/projects/peakdefi/index.js b/projects/peakdefi/index.js index 620d169217..00aa69d40c 100644 --- a/projects/peakdefi/index.js +++ b/projects/peakdefi/index.js @@ -23,7 +23,7 @@ async function tvl(api) { return sumTokens2({ api, owners: Object.values(funds), tokens }) } module.exports = { - start: 1607405152, // Dec-08-2020 05:25:52 PM +UTC + start: '2020-12-08', // Dec-08-2020 05:25:52 PM +UTC bsc: { staking: staking(stakingContracts.bsc, peakAddress, "bsc", peakAddress), }, diff --git a/projects/peardao/index.js b/projects/peardao/index.js index 60be1953c5..c3e34d0038 100644 --- a/projects/peardao/index.js +++ b/projects/peardao/index.js @@ -22,7 +22,6 @@ const tokens = [ module.exports = { methodology: 'Counts the value of LP tokens and PEX tokens in the staking contracts, assets locked in the P2P escrow contract, and assets in the treasury contract.', - start: 15966251, // Mar-11-2022 01:00:01 PM +UTC bsc: { tvl: sumTokensExport({ tokens, owner: DOTC_CONTRACT, }), staking: stakings([TREASURY_ADDRESS, PEX_STAKING_POOL_CONTRACT], PEX_TOKEN_CONTRACT), diff --git a/projects/perfect-pool/index.js b/projects/perfect-pool/index.js index 3eabd8a9c7..712c80696b 100644 --- a/projects/perfect-pool/index.js +++ b/projects/perfect-pool/index.js @@ -5,7 +5,7 @@ const NFT_ACE8 = '0x21F3ea812734b6492D88D268622CF068e9E6D596' const NFT_ACE16 = '0x70A254c8201adbD88d88D17937d5e8aBb8B8095F' module.exports = { - start: 1725311445, + start: '2024-09-02', base: { tvl: sumTokensExport( { owners: [NFT_ACE8, NFT_ACE16], token: ADDRESSES.base.USDC }, diff --git a/projects/perlinx/index.js b/projects/perlinx/index.js index caf7253f5c..3ae833fcdd 100644 --- a/projects/perlinx/index.js +++ b/projects/perlinx/index.js @@ -97,6 +97,6 @@ async function tvl(timestamp, block) { ==================================================*/ module.exports = { - start: 1600905600, + start: '2020-09-24', ethereum: { tvl } } diff --git a/projects/perp88/index.js b/projects/perp88/index.js index 58521b33fa..4864b7cab5 100644 --- a/projects/perp88/index.js +++ b/projects/perp88/index.js @@ -20,7 +20,7 @@ async function blastTvl(api) { } module.exports = { - start: 1668684025, + start: '2022-11-17', polygon: { tvl: sumTokensExport({ owner: POOL_DIAMOND_CONTRACT, diff --git a/projects/phission-finance/index.js b/projects/phission-finance/index.js index af8f50d528..ff14977390 100644 --- a/projects/phission-finance/index.js +++ b/projects/phission-finance/index.js @@ -8,7 +8,7 @@ const STAKING_CONTRACT = '0x569a157eac744b87a42314e8fc03a2e648ea33a2' module.exports = { methodology: 'Total amount of WETH split, plus the value of Pool2', - start: 1661851416, + start: '2022-08-30', ethereum: { tvl: sumTokensExport({ owner: SPLIT_CONTRACT, tokens: [WETH] }), pool2: sumTokensExport({ owner: STAKING_CONTRACT, tokens: [GOV_POOL], useDefaultCoreAssets: true }), diff --git a/projects/phoenix/index.js b/projects/phoenix/index.js index 21c4ed56d5..91dafc430e 100644 --- a/projects/phoenix/index.js +++ b/projects/phoenix/index.js @@ -1,7 +1,7 @@ const tvl = () => ({}) module.exports = { - start: 1631376000, // beijing time 2021-9-11 0:0: + start: '2021-09-11', // beijing time 2021-9-11 0:0: deadFrom: '2022-09-15', hallmarks: [ [Math.floor(new Date('2022-09-15')/1e3), 'Project is dead: https://twitter.com/Phoenix__PHX/status/1570389804734640129'], diff --git a/projects/piggy/index.js b/projects/piggy/index.js index de62d6ac68..0045af8317 100644 --- a/projects/piggy/index.js +++ b/projects/piggy/index.js @@ -4,7 +4,7 @@ const TROVE_MANAGER_ADDRESS = "0xb283466d09177c5C6507785d600caFDFa538C65C"; module.exports = { deadFrom: 1648765747, - start: 1623145388, + start: '2021-06-08', bsc: { tvl: getLiquityTvl(TROVE_MANAGER_ADDRESS) }, diff --git a/projects/pingu/index.js b/projects/pingu/index.js index a766ef060e..c2ae572bd8 100644 --- a/projects/pingu/index.js +++ b/projects/pingu/index.js @@ -6,7 +6,7 @@ const PINGU = "0x83E60B9F7f4DB5cDb0877659b1740E73c662c55B"; // PINGU const assets = [nullAddress, ADDRESSES.arbitrum.USDC_CIRCLE] // ETH, USDC module.exports = { - start: 1704844800, + start: '2024-01-10', arbitrum: { tvl: sumTokensExport({ owners: [fundStore], tokens: assets }), staking: sumTokensExport({ owners: [fundStore], tokens: [PINGU] }), diff --git a/projects/pizzax/index.js b/projects/pizzax/index.js index 13dcd1e112..e99bf60085 100644 --- a/projects/pizzax/index.js +++ b/projects/pizzax/index.js @@ -6,7 +6,6 @@ const TOKENS = ["0x488739D593DC2BC13Fd738CBaa35498bad5F8556"] module.exports = { methodology: "PizzaX is a Defi Miners. A fun platform to generate 15%/Day ROI for Lifetime — Pool as a Service (PAAS)", - start: 35011373, bsc: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/planar-finance/index.js b/projects/planar-finance/index.js index 85b8755899..f565087795 100644 --- a/projects/planar-finance/index.js +++ b/projects/planar-finance/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { misrepresentedTokens: true, - start: 1715328951, + start: '2024-05-10', blast: { tvl: getUniTVL({ factory: '0xdC401B87Ee940F5050f6a17f49763635653eb496', useDefaultCoreAssets: true,}), } diff --git a/projects/plenty/index.js b/projects/plenty/index.js index a7b90f1d52..2e72d1b473 100644 --- a/projects/plenty/index.js +++ b/projects/plenty/index.js @@ -13,7 +13,7 @@ async function getDexes() { module.exports = { timetravel: false, misrepresentedTokens: true, - start: 1672531200, + start: '2023-01-01', tezos: { tvl, }, diff --git a/projects/polygon/index.js b/projects/polygon/index.js index 4af516fc7f..51ec3af37d 100644 --- a/projects/polygon/index.js +++ b/projects/polygon/index.js @@ -90,7 +90,7 @@ async function tvl(_, block, _c) { } module.exports = { - start: 1590824836, // Sat May 30 13:17:16 2020 + start: '2020-05-30', // Sat May 30 13:17:16 2020 polygon: { tvl } diff --git a/projects/polytrade/index.js b/projects/polytrade/index.js index a9701231e6..1f335e9916 100644 --- a/projects/polytrade/index.js +++ b/projects/polytrade/index.js @@ -5,7 +5,7 @@ const chain = 'polygon' module.exports = { methodology: 'gets the amount in liquidity pool', - start: 1657074185, + start: '2022-07-06', polygon: { tvl: async (_,_b , {polygon: block}) => { const strategy = await sdk.api2.abi.call({ diff --git a/projects/ponyswap/index.js b/projects/ponyswap/index.js index a7edc1e19a..f887d0f8c9 100644 --- a/projects/ponyswap/index.js +++ b/projects/ponyswap/index.js @@ -1,6 +1,6 @@ const { uniTvlExport } = require("../helper/calculateUniTvl"); module.exports = { - start: 1678790700, + start: '2023-03-14', arbitrum: { tvl: uniTvlExport("0x66020547Ce3c861dec7632495D86e1b93dA6542c", "arbitrum", true), }, diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index 876ecf8c7a..acc9a0e21b 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -41,7 +41,6 @@ const VCX = "0xce246eea10988c495b4a90a905ee9237a0f91543"; module.exports = { ethereum: { - start: 12237585, staking: stakings([stVCX, veVCX], [VCX, WETH_VCX_BAL_LP_TOKEN]), tvl, }, diff --git a/projects/powerindex/index.js b/projects/powerindex/index.js index 124247dac2..faa31c0c47 100644 --- a/projects/powerindex/index.js +++ b/projects/powerindex/index.js @@ -45,7 +45,7 @@ async function eth(api) { } module.exports = { - start: 1606768668, // 11/30/2021 @ 08:37am (UTC) + start: '2020-11-30', // 11/30/2021 @ 08:37am (UTC) bsc:{ tvl: getBscTvl, }, diff --git a/projects/prime-staked/index.js b/projects/prime-staked/index.js index 9e35749857..0fffd6deec 100644 --- a/projects/prime-staked/index.js +++ b/projects/prime-staked/index.js @@ -12,7 +12,6 @@ module.exports = { doublecounted: true, methodology: "Returns the total assets owned by primeETH", - start: 19128047, ethereum: { tvl, }, diff --git a/projects/primitive/index.js b/projects/primitive/index.js index 92c9ae42a1..52bd9b6b09 100644 --- a/projects/primitive/index.js +++ b/projects/primitive/index.js @@ -4,7 +4,7 @@ const v1TVL = require('./v1') module.exports = { ethereum: { - start: 1647932400, // unix timestamp (utc 0) specifying when the project began, or where live data begins + start: '2022-03-22', // unix timestamp (utc 0) specifying when the project began, or where live data begins tvl: sdk.util.sumChainTvls([rmmTVL, v1TVL, ]), // }, } \ No newline at end of file diff --git a/projects/promethium/index.js b/projects/promethium/index.js index 01082b6a95..a0a1e30102 100644 --- a/projects/promethium/index.js +++ b/projects/promethium/index.js @@ -25,7 +25,7 @@ async function tvl(api) { module.exports = { methodology: "TVL displays the total amount of assets stored in the Promethium contracts, excluding not claimed fees.", - start: 1696164866, + start: '2023-10-01', arbitrum: { tvl }, hallmarks: [[1696164866, "Profitable pools deployment"]], }; diff --git a/projects/psy/index.js b/projects/psy/index.js index 654c5997cd..4ad1141bcd 100644 --- a/projects/psy/index.js +++ b/projects/psy/index.js @@ -13,7 +13,7 @@ async function tvl(api) { module.exports = { methodology: "Adds up the total value locked as collateral on the Gravita platform", - start: 1689519600, // Sun Jul 16 2023 15:00:00 GMT+0000 + start: '2023-07-16', // Sun Jul 16 2023 15:00:00 GMT+0000 arbitrum: { tvl, }, diff --git a/projects/puffer/index.js b/projects/puffer/index.js index f246b75efd..db4fa93879 100644 --- a/projects/puffer/index.js +++ b/projects/puffer/index.js @@ -7,7 +7,6 @@ async function tvl(api) { module.exports = { doublecounted: true, methodology: 'Returns the total assets owned by the Puffer Vault on Ethereum.', - start: 19128047, ethereum: { tvl, } diff --git a/projects/pumpxy/index.js b/projects/pumpxy/index.js index 2358b7bb8f..7e6d27d2a7 100644 --- a/projects/pumpxy/index.js +++ b/projects/pumpxy/index.js @@ -2,7 +2,7 @@ const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') module.exports = { methodology: "TVL is calculated by retrieving the ETH balance of all meme coin contracts deployed by the Zircuit factory contract. The factory contract dynamically manages meme coins, and their ETH holdings are summed up to calculate the total TVL.", - start: 1726030293, + start: '2024-09-11', zircuit: { tvl, }, diff --git a/projects/pv01/index.js b/projects/pv01/index.js index 8f64d3c0e8..caa377dcf8 100644 --- a/projects/pv01/index.js +++ b/projects/pv01/index.js @@ -14,7 +14,6 @@ async function tvl(api) { module.exports = { methodology: "Counts the total supply of rTBL (Rolling T-bill) tokens across all PV01 perpetual bond vaults.", - start: 20377028, ethereum: { tvl, }, diff --git a/projects/qian/index.js b/projects/qian/index.js index 976713a687..4567ff4bf0 100644 --- a/projects/qian/index.js +++ b/projects/qian/index.js @@ -9,6 +9,6 @@ async function tvl(api) { } module.exports = { - start: 1513566671, // 2020/10/21 6:34:47 (+UTC) + start: '2017-12-18', // 2020/10/21 6:34:47 (+UTC) ethereum: { tvl }, }; diff --git a/projects/quadrat/index.js b/projects/quadrat/index.js index 703470dfbe..5bae25dfad 100644 --- a/projects/quadrat/index.js +++ b/projects/quadrat/index.js @@ -4,7 +4,7 @@ const sdk = require('@defillama/sdk') module.exports = { doublecounted: true, methodology: 'Counts the tokens locked in Strategy Vaults in Uniswap v3 Pools.', - start: 1667197843, // Mon Oct 31 2022 06:30:43 GMT+0000 + start: '2022-10-31', // Mon Oct 31 2022 06:30:43 GMT+0000 }; const config = { diff --git a/projects/range/index.js b/projects/range/index.js index f9f28e581c..22e3e82055 100644 --- a/projects/range/index.js +++ b/projects/range/index.js @@ -51,7 +51,7 @@ const config ={ module.exports = { methodology: 'assets deployed on DEX as LP + asset balance of vaults', doublecounted: true, - start: 1683965157, + start: '2023-05-13', }; // vaults that were deployed through factory but are uninitialized and unused diff --git a/projects/rari/index.js b/projects/rari/index.js index 38e025c3e7..5e10de9ff7 100644 --- a/projects/rari/index.js +++ b/projects/rari/index.js @@ -60,7 +60,7 @@ async function fuseTvl(api) { module.exports = { doublecounted: true, - start: 1596236058, // July 14, 2020 + start: '2020-08-01', // July 14, 2020 ethereum: { tvl, pool2: pool2(rariGovernanceTokenUniswapDistributorAddress, RGTETHSushiLPTokenAddress), diff --git a/projects/ray/index.js b/projects/ray/index.js index 0dffad302e..382c9afb81 100644 --- a/projects/ray/index.js +++ b/projects/ray/index.js @@ -51,7 +51,7 @@ const allPortfolioManagers = [ owners.push(allPortfolioManagers[0].address) module.exports = { - start: 1568274392, // 09/12/2019 @ 7:46am (UTC) + start: '2019-09-12', // 09/12/2019 @ 7:46am (UTC) ethereum: { tvl: sumTokensExport({ owners, diff --git a/projects/rebalance/index.js b/projects/rebalance/index.js index 1ba5accb81..d30421003a 100644 --- a/projects/rebalance/index.js +++ b/projects/rebalance/index.js @@ -13,7 +13,7 @@ const abi = "function getDepositBalance(address user, address vault) view return module.exports = { methodology: "TVL displays the total amount of assets stored in the REBALANCE vault contracts.", - start: 1712143874, + start: '2024-04-03', hallmarks: [[1712143874, "Profitable vaults deployment"]], }; diff --git a/projects/reflexer/index.js b/projects/reflexer/index.js index 8c696fd367..6765cd88cf 100644 --- a/projects/reflexer/index.js +++ b/projects/reflexer/index.js @@ -32,6 +32,6 @@ async function tvl(timestamp, block) { ==================================================*/ module.exports = { - start: 1613520000, + start: '2021-02-17', ethereum: { tvl }, }; diff --git a/projects/revault/index.js b/projects/revault/index.js index 3806a085a7..3417ee4d61 100644 --- a/projects/revault/index.js +++ b/projects/revault/index.js @@ -10,7 +10,7 @@ async function tvl(api) { } module.exports = { - start: 1634150000, // 13th of October, 2021 + start: '2021-10-13', // 13th of October, 2021 bsc: { tvl, }, diff --git a/projects/reyield-finance/index.js b/projects/reyield-finance/index.js index 41e228a59a..cc74e32241 100644 --- a/projects/reyield-finance/index.js +++ b/projects/reyield-finance/index.js @@ -41,7 +41,7 @@ const chains = [ ] module.exports = { - start: 1695873578, // Sep-28-2023 03:59:38 AM +UTC + start: '2023-09-28', // Sep-28-2023 03:59:38 AM +UTC doublecounted: true, methodology: "TVL is equal to users' running positions' liquidity value plus uncollected fees.", }; diff --git a/projects/risq.js b/projects/risq.js index dd250a7dae..cf25fdac0b 100644 --- a/projects/risq.js +++ b/projects/risq.js @@ -32,7 +32,6 @@ async function tvl(api) { } module.exports = { - start: 10340221, // Aug-25-2021 03:12:42 PM +UTC bsc: { tvl, } diff --git a/projects/rize/index.js b/projects/rize/index.js index e5aacc1733..386369069e 100644 --- a/projects/rize/index.js +++ b/projects/rize/index.js @@ -104,7 +104,7 @@ async function naviSui(coinSymbol) { } module.exports = { - start: 1716599207, + start: '2024-05-25', timetravel: false, ethereum: { tvl diff --git a/projects/rosy-burnt-steak/index.js b/projects/rosy-burnt-steak/index.js index bdbfad1d95..47462e0e9f 100644 --- a/projects/rosy-burnt-steak/index.js +++ b/projects/rosy-burnt-steak/index.js @@ -5,7 +5,7 @@ const STEAK_CONTRACT = '0x3e7ab819878bEcaC57Bd655Ab547C8e128e5b208'; module.exports = { methodology: 'counts the number of ROSY tokens in the Steak contract.', - start: 1711020000, + start: '2024-03-21', sapphire: { tvl: () => ({}), staking: staking(STEAK_CONTRACT, ROSY_TOKEN_CONTRACT) diff --git a/projects/rumi/index.js b/projects/rumi/index.js index 737b047b64..6837416e2b 100644 --- a/projects/rumi/index.js +++ b/projects/rumi/index.js @@ -16,7 +16,6 @@ async function tvl(api) { module.exports = { methodology: 'Total asset value held in the Rumi lend vault and Rumi strategies', - start: 143884813, arbitrum: { tvl: () => ({}), }, diff --git a/projects/sablier/index.js b/projects/sablier/index.js index 853d27aa1a..4a1894a2d1 100644 --- a/projects/sablier/index.js +++ b/projects/sablier/index.js @@ -40,7 +40,7 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2022-10-03') / 1e3), 'Vesting tokens are not included in tvl'], ], - start: 1573582731, + start: '2019-11-12', timetravel: false, ronin: { tvl: sumTokensExport({ diff --git a/projects/saltyio/index.js b/projects/saltyio/index.js index 5e93dfba86..db13807632 100644 --- a/projects/saltyio/index.js +++ b/projects/saltyio/index.js @@ -10,7 +10,7 @@ const SALT_CONTRACT = '0x0110B0c3391584Ba24Dbf8017Bf462e9f78A6d9F' const STAKING_CONTRACT = '0x7c6f5E73210080b093E724fbdB3EF7bcdd6D468b' module.exports = { - start: 1713700739, + start: '2024-04-21', } Object.keys(config).forEach(chain => { diff --git a/projects/salvor/index.js b/projects/salvor/index.js index ca1f4c2d30..645cf13c0a 100644 --- a/projects/salvor/index.js +++ b/projects/salvor/index.js @@ -3,7 +3,7 @@ const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); module.exports.avax = { - start: 1683411200, + start: '2023-05-07', hallmarks: [ [1702501200, "Salvor Lending Launch"] ], diff --git a/projects/sandclock/index.js b/projects/sandclock/index.js index 985f49fa9c..8e1aff64ce 100644 --- a/projects/sandclock/index.js +++ b/projects/sandclock/index.js @@ -62,7 +62,6 @@ async function tvl(api) { module.exports = { methodology: 'add underlying asset balances in all the vaults together.', doublecounted: true, - start: 15308000, // The first vault YEARN_VAULT was deployed ethereum: { tvl, staking: staking("0x0a36f9565c6fb862509ad8d148941968344a55d8", "0xba8a621b4a54e61c442f5ec623687e2a942225ef") diff --git a/projects/scientixfinance/index.js b/projects/scientixfinance/index.js index 3d79d2528c..12013268de 100644 --- a/projects/scientixfinance/index.js +++ b/projects/scientixfinance/index.js @@ -15,7 +15,6 @@ const ScixBusd = "0xe8Efb51E051B08614DF535EE192B0672627BDbF9"; const scUsdBusd = "0x53085B02955CFD2F884c58D19B8a35ef5095E8aE"; module.exports = { - start: 10880500, // 09/16/2020 @ 12:00am (UTC+8) bsc: { tvl, staking: staking(VotingEscrow, SCIX), diff --git a/projects/scoreplay/index.js b/projects/scoreplay/index.js index 1ddddeb1a6..b10b7d1d5b 100644 --- a/projects/scoreplay/index.js +++ b/projects/scoreplay/index.js @@ -2,6 +2,6 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { - start: 1717958404, + start: '2024-06-09', base: { tvl: sumTokensExport({ owner: '0xFcab8B765FB0BCB05407d16173941e2d1F09DE12', tokens: [ADDRESSES.base.WETH] }) }, } \ No newline at end of file diff --git a/projects/seashell/index.js b/projects/seashell/index.js index e78ce92610..82d85d1232 100644 --- a/projects/seashell/index.js +++ b/projects/seashell/index.js @@ -6,7 +6,6 @@ const BLUEBERRY_GLP_COMPOUNDER_CONTRACT = module.exports = { methodology: "Total assets in Seashell's Blueberry GLP Compounder contract", - start: 66190371, arbitrum: { tvl: sumTokensExport({ owner: BLUEBERRY_GLP_COMPOUNDER_CONTRACT, tokens: [SGLP_TOKEN]}), }, diff --git a/projects/set-protocol/index.js b/projects/set-protocol/index.js index c92c8e6a0b..c6c5dd8474 100644 --- a/projects/set-protocol/index.js +++ b/projects/set-protocol/index.js @@ -25,6 +25,6 @@ } module.exports = { - start: 1554848955, // 04/09/2019 @ 10:29pm (UTC) + start: '2019-04-10', // 04/09/2019 @ 10:29pm (UTC) ethereum: { tvl } } diff --git a/projects/sfinance/index.js b/projects/sfinance/index.js index 284e9d3dcb..48e8d9fbfe 100644 --- a/projects/sfinance/index.js +++ b/projects/sfinance/index.js @@ -109,10 +109,10 @@ module.exports = { // #1 susdv2 pool started - // start: 1600758000, // 09/22/2020 @ 03:00:00pm +UTC + // start: '2020-09-22', // 09/22/2020 @ 03:00:00pm +UTC // #2 dfi pool started - // start: 1602345600, // 10/10/2020 @ 04:00:00pm +UTC - start: 1602374400, // 10/11/2020 @ 00:00:00am +UTC + // start: '2020-10-10', // 10/10/2020 @ 04:00:00pm +UTC + start: '2020-10-11', // 10/11/2020 @ 00:00:00am +UTC ethereum: { tvl } diff --git a/projects/shell/index.js b/projects/shell/index.js index acfc263df7..10fa59cdf3 100644 --- a/projects/shell/index.js +++ b/projects/shell/index.js @@ -21,7 +21,6 @@ const TOKEN_CONTRACTS = [ module.exports = { methodology: 'Sums up the value of all tokens wrapped into Shell v2', - start: 24142587, arbitrum: { tvl: sumTokensExport({ owner: OCEAN_CONTRACT, tokens: TOKEN_CONTRACTS}) }, diff --git a/projects/sherlock/index.js b/projects/sherlock/index.js index 7c11bbbd08..f64a94533d 100644 --- a/projects/sherlock/index.js +++ b/projects/sherlock/index.js @@ -34,6 +34,6 @@ async function tvl(timestamp, block) { module.exports = { methodology: 'We count USDC that has been staked into the contracts (staking pool). Periodically USDC is swept into Aave, so we also count the aUSDC that is held (in a separate contract from the main contract).', - start: 1632861292, // 9/28/2020 @ 8:00pm (UTC) + start: '2021-09-28', // 9/28/2020 @ 8:00pm (UTC) ethereum: { tvl } // tvl adapter } diff --git a/projects/shibui/index.js b/projects/shibui/index.js index f3f16e929c..81d51e4c56 100644 --- a/projects/shibui/index.js +++ b/projects/shibui/index.js @@ -9,8 +9,6 @@ const Boba_SHIBUI_USDT = "0x3f714fe1380ee2204ca499d1d8a171cbdfc39eaa"; module.exports = { - start: 394825, - boba: { tvl: () => ({}), pool2: pool2s([ diff --git a/projects/shield/index.js b/projects/shield/index.js index 526c871f47..9b1b1ac074 100644 --- a/projects/shield/index.js +++ b/projects/shield/index.js @@ -1,19 +1,13 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens2 } = require('../helper/unwrapLPs') -const USDT = ADDRESSES.bsc.USDT; +const { sumTokensExport } = require('../helper/unwrapLPs') const publicPool = "0x65081C21228dc943f47b1Cdb394Eb8db022bc744"; const privatePool = "0xFa4e13EfAf2C90D6Eaf5033A4f3cB189ee4eF189"; const pools = [publicPool, privatePool]; -async function tvl(timestamp, _, { bsc: block }) { - return sumTokens2({ chain: 'bsc', block, owners: pools, tokens: [USDT]}) -} - module.exports = { methodology: 'Dual liquidity pool is an innovation by Shield that allows the private pool to hedge the market making risk, while the low-risk public pool can accommodate liquidity to guarantee abundant liquidity on the market. TVL on Shield should combine liquidity from both public pool and private pool.', - start: 11160281, // Sep-23-2021 08:37:45 AM +UTC bsc: { - tvl, + tvl: sumTokensExport({ owners: pools, token: ADDRESSES.bsc.USDT}), }, } diff --git a/projects/shprd/index.js b/projects/shprd/index.js index 843600e621..a3073bf829 100644 --- a/projects/shprd/index.js +++ b/projects/shprd/index.js @@ -21,7 +21,7 @@ async function tvl(api) { module.exports = { - start: 1688162400, + start: '2023-07-01', hallmarks: [ [1695396647, "Fees distribution #1"], [1705582439, "Fees distribution #2"], diff --git a/projects/single/index.js b/projects/single/index.js index 54da257086..b573175c5f 100644 --- a/projects/single/index.js +++ b/projects/single/index.js @@ -101,7 +101,7 @@ const getHelpers = (chain) => { } module.exports = { - start: 1643186078, + start: '2022-01-26', // if we can backfill data with your adapter. Most SDK adapters will allow this, but not all. For example, if you fetch a list of live contracts from an API before querying data on-chain, timetravel should be 'false'. //if you have used token substitutions at any point in the adapter this should be 'true'. misrepresentedTokens: true, diff --git a/projects/singularx/index.js b/projects/singularx/index.js index 4d26f2eaa7..fe58897ede 100644 --- a/projects/singularx/index.js +++ b/projects/singularx/index.js @@ -17,6 +17,6 @@ const ethereumTokens = [ ]; module.exports = { - start: 1685817000, + start: '2023-06-03', ethereum: { tvl: sumTokensExport({ owners: ethereumContracts, tokens: ethereumTokens, }) }, }; \ No newline at end of file diff --git a/projects/sirius-finance/index.js b/projects/sirius-finance/index.js index 2255055245..26479ea7ae 100644 --- a/projects/sirius-finance/index.js +++ b/projects/sirius-finance/index.js @@ -26,7 +26,7 @@ module.exports = { misrepresentedTokens: true, methodology: "All locked tokens includes stable and crypto assets in Sirius's pools.", astar: { - start: 1650117600, // 2022/04/16 14:00 UTC + start: '2022-04-16', // 2022/04/16 14:00 UTC tvl, // tvl adapter staking: staking(VotingEscrow, SRS, Chain, CoinGeckoID, 18), }, diff --git a/projects/skale/index.js b/projects/skale/index.js index f8ddabb789..786f3ce638 100644 --- a/projects/skale/index.js +++ b/projects/skale/index.js @@ -3,7 +3,7 @@ const depositBoxETH = '0x49F583d263e4Ef938b9E09772D3394c71605Df94'; const depositBoxERC20 = '0x8fB1A35bB6fB9c47Fb5065BE5062cB8dC1687669'; module.exports = { - start: 1626697290, // Mon July 19 06:38:20 PM UTC 2021 + start: '2021-07-19', // Mon July 19 06:38:20 PM UTC 2021 ethereum: { tvl: sumTokensExport({ owners: [depositBoxETH, depositBoxERC20], fetchCoValentTokens: true, permitFailure: true }), } diff --git a/projects/skcs/index.js b/projects/skcs/index.js index 34cf3944b0..e7d1d478a4 100644 --- a/projects/skcs/index.js +++ b/projects/skcs/index.js @@ -16,7 +16,6 @@ async function tvl(timestamp, ethBlock, {kcc: block}) { module.exports = { methodology: 'Staked token and staking rewards are counted as TVL', - start: 12145436, kcc:{ tvl:tvl, } diff --git a/projects/slsd/index.js b/projects/slsd/index.js index 021ba9014f..965083da50 100644 --- a/projects/slsd/index.js +++ b/projects/slsd/index.js @@ -24,7 +24,6 @@ async function tvl(api) { } module.exports = { - start: 17142918, ethereum: { tvl, pool2: staking('0xBE13DC5235a64d090E9c62952654DBF3c65199d9', SLSD_LP) diff --git a/projects/smbswap/index.js b/projects/smbswap/index.js index 4b7503b6b3..101e2d460b 100644 --- a/projects/smbswap/index.js +++ b/projects/smbswap/index.js @@ -6,5 +6,5 @@ module.exports = { bsc: { tvl: getUniTVL({ factory: '0x2Af5c23798FEc8E433E11cce4A8822d95cD90565', useDefaultCoreAssets: true }), }, - start: 1645285089, // Sat Feb 19 2022 15:38:09 + start: '2022-02-19', // Sat Feb 19 2022 15:38:09 }; diff --git a/projects/smilee-finance/index.js b/projects/smilee-finance/index.js index 4c61403965..733958cdfe 100644 --- a/projects/smilee-finance/index.js +++ b/projects/smilee-finance/index.js @@ -1,6 +1,5 @@ module.exports = { methodology: 'Sum of balances from vault contracts associated with each DVP retrieved by the registry.', - start: 190367425, } const config = { diff --git a/projects/solid-world/index.js b/projects/solid-world/index.js index c3160daef4..5383c2e4a1 100644 --- a/projects/solid-world/index.js +++ b/projects/solid-world/index.js @@ -47,7 +47,7 @@ async function pool2(api) { } module.exports = { - start: 1684477800, // Fri May 19 2023 06:30:00 GMT+0000 + start: '2023-05-19', // Fri May 19 2023 06:30:00 GMT+0000 methodology: `TVL is a measure of the health of the Solid World ecosystem. The TVL can be looked at from 2 perspectives. The 1st perspective, "RWA" valuation, represents the total value of the tokenized forward carbon credits, and is computed as the present value of the on-chain forward credits (ERC1155), based on their exchange rate to CRISP tokens (ERC20) and subsequent USDC value, summed-up.The 2nd perspective, "pool2", represents the total value locked up in our staking contract, and it's calculated by adding up the value of all the LP tokens that are staked. The LP tokens represent the amount of liquidity that has been provided to the Solid World platform.`, polygon: { tvl, diff --git a/projects/sommelier/index.js b/projects/sommelier/index.js index 33421b9bf4..84e3a658cd 100644 --- a/projects/sommelier/index.js +++ b/projects/sommelier/index.js @@ -65,7 +65,7 @@ function filterActiveCellars(cellars, block) { module.exports = { methodology: "TVL is calculated as the sum of deposits invested into the strategy, deposits waiting to be invested, and yield waiting to be reinvested or redistributed across all Cellars.", - start: 1656652494, + start: '2022-07-01', ["ethereum"]: { tvl: ethereum_tvl }, ["arbitrum"]: { tvl: arbitrum_tvl }, ["optimism"]: { tvl: optimism_tvl }, diff --git a/projects/spacewhale/index.js b/projects/spacewhale/index.js index 4d71132704..0d5c8a4e23 100644 --- a/projects/spacewhale/index.js +++ b/projects/spacewhale/index.js @@ -6,7 +6,7 @@ const SPACEWHALE = "0xf5961a2441fC68E38300cd8ae8d6a172b12D7E7A"; // SPACEWHALE const assets = [nullAddress, ADDRESSES.arbitrum.USDC_CIRCLE] // ETH, USDC module.exports = { - start: 1712109600, + start: '2024-04-03', arbitrum: { tvl: sumTokensExport({ owners: [fundStore], tokens: assets }), staking: sumTokensExport({ owners: [fundStore], tokens: [SPACEWHALE] }), diff --git a/projects/spiral-dao/index.js b/projects/spiral-dao/index.js index 31eb0be0df..6e6da8c314 100644 --- a/projects/spiral-dao/index.js +++ b/projects/spiral-dao/index.js @@ -19,7 +19,6 @@ async function tvl(api) { module.exports = { methodology: 'Information is retrieved from both the blockchain and the SpiralDAO API. "https://api.spiral.farm".', - start: 16991020, ethereum: { tvl, staking: staking(STAKING, COIL), diff --git a/projects/stCelo/index.js b/projects/stCelo/index.js index 5fd621a142..bdf3c8e18a 100644 --- a/projects/stCelo/index.js +++ b/projects/stCelo/index.js @@ -31,7 +31,6 @@ async function tvl(timestamp, ethBlock, chainBlocks) { module.exports = { methodology: 'TVL counts Celo staked by the protocol.', - start: 14330000, celo: { tvl } diff --git a/projects/stake-ly/index.js b/projects/stake-ly/index.js index cb3098ab7b..9fe6de935c 100644 --- a/projects/stake-ly/index.js +++ b/projects/stake-ly/index.js @@ -7,7 +7,7 @@ async function tvl(api) { module.exports = { methodology: "TVL is KLAY staked by the users and rewards accrued from node staking", - start: 1663585837, + start: '2022-09-19', klaytn: { tvl, }, diff --git a/projects/stakedotlink/index.js b/projects/stakedotlink/index.js index 29c957dca0..107c8aa202 100644 --- a/projects/stakedotlink/index.js +++ b/projects/stakedotlink/index.js @@ -24,7 +24,7 @@ async function staking(api) { module.exports = { methodology: "Queries LINK staking/priority pools and SDL staking pool for the total amount of tokens staked", - start: 1670337984, + start: '2022-12-06', ethereum: { tvl, staking, diff --git a/projects/stakestone-btc/index.js b/projects/stakestone-btc/index.js index 1a0bf4984b..9d7ce6adfb 100644 --- a/projects/stakestone-btc/index.js +++ b/projects/stakestone-btc/index.js @@ -16,7 +16,6 @@ const ethTvl = async (api) => { } module.exports = { - start: 42326440, bsc: { tvl: bscTvl, }, diff --git a/projects/stakestone/index.js b/projects/stakestone/index.js index 224ba93e6d..fa19277070 100644 --- a/projects/stakestone/index.js +++ b/projects/stakestone/index.js @@ -18,7 +18,6 @@ const mantaTvl = async (api) => { } module.exports = { - start: 18182242, ethereum: { tvl: ethTvl }, diff --git a/projects/steakHut/index.js b/projects/steakHut/index.js index a2f6e7f8d4..5f2678b7bf 100644 --- a/projects/steakHut/index.js +++ b/projects/steakHut/index.js @@ -12,7 +12,6 @@ async function tvl(api) { const steakToken = "0xb279f8DD152B99Ec1D84A489D32c35bC0C7F5674" module.exports = { - start: 14003811, methodology: 'Counts the value of JLP tokens staked into SteakMasterChef.', avax: { tvl, diff --git a/projects/stealthpad/index.js b/projects/stealthpad/index.js index ccf9e75aa0..459476d093 100644 --- a/projects/stealthpad/index.js +++ b/projects/stealthpad/index.js @@ -3,7 +3,6 @@ const abi = require('./abi.js') module.exports = { misrepresentedTokens: true, - start: 17996063, methodology: `Counts liquidity in lp lock contracts`, } diff --git a/projects/stream/index.js b/projects/stream/index.js index b873277d15..844ab5c3cb 100644 --- a/projects/stream/index.js +++ b/projects/stream/index.js @@ -31,7 +31,6 @@ async function tvl(api) { module.exports = { misrepresentedTokens: true, methodology: "Calculates the TVL of all Stream vaults", - start: 16685700, ethereum: { tvl, }, diff --git a/projects/suzaku/index.js b/projects/suzaku/index.js index a706249524..c1e3b9fef9 100644 --- a/projects/suzaku/index.js +++ b/projects/suzaku/index.js @@ -8,7 +8,7 @@ async function tvl(api) { } module.exports = { - start: 1727654400, + start: '2024-09-30', avax: { tvl, }, diff --git a/projects/swaap-earn/index.js b/projects/swaap-earn/index.js index f9be8debc3..dc7fe78767 100644 --- a/projects/swaap-earn/index.js +++ b/projects/swaap-earn/index.js @@ -3,7 +3,7 @@ const { cachedGraphQuery } = require('../helper/cache') const query = `query FundsTVL{ funds { id } }` module.exports = { - start: 1713312000, // Apr 17 2024 00:00:00 GMT+0000 + start: '2024-04-17', // Apr 17 2024 00:00:00 GMT+0000 } const config = { diff --git a/projects/swaap/index.js b/projects/swaap/index.js index 0744bbe62c..d1af4e2f77 100644 --- a/projects/swaap/index.js +++ b/projects/swaap/index.js @@ -29,7 +29,7 @@ async function tvl(api) { } module.exports = { - start: 1655130642, // Jun-13-2022 02:30:42 PM +UTC + start: '2022-06-13', // Jun-13-2022 02:30:42 PM +UTC polygon: { tvl, }, diff --git a/projects/swapsicle/index.js b/projects/swapsicle/index.js index 5a4174c92b..cebbb79fa3 100644 --- a/projects/swapsicle/index.js +++ b/projects/swapsicle/index.js @@ -157,5 +157,4 @@ module.exports = { stakedTLOSIceBox ]) }, - //start: 15434772, } diff --git a/projects/symbiotic/index.js b/projects/symbiotic/index.js index fbc2c2c316..6944033af2 100644 --- a/projects/symbiotic/index.js +++ b/projects/symbiotic/index.js @@ -8,7 +8,7 @@ async function tvl(api) { } module.exports = { - start: 1718088924, + start: '2024-06-11', ethereum: { tvl, }, diff --git a/projects/symmetry-trade/index.js b/projects/symmetry-trade/index.js index 5979d08122..916c06b3b6 100644 --- a/projects/symmetry-trade/index.js +++ b/projects/symmetry-trade/index.js @@ -12,7 +12,6 @@ const TOKENS = [ module.exports = { methodology: 'counts the token deposited in market contract', - start: 923000, scroll: { tvl: sumTokensExport({ owner: MARKET_CONTRACT, tokens: TOKENS}), } diff --git a/projects/synthetix/api.js b/projects/synthetix/api.js index 1e5cc6072d..f242ddf26a 100644 --- a/projects/synthetix/api.js +++ b/projects/synthetix/api.js @@ -136,7 +136,7 @@ async function SNXHolders(snxGraphEndpoint, block, chain) { } module.exports = { - start: 1565287200, // Fri Aug 09 2019 00:00:00 + start: '2019-08-08', // Fri Aug 09 2019 00:00:00 optimism: { tvl: chainTvl("optimism") }, diff --git a/projects/synthetix/apiCache.js b/projects/synthetix/apiCache.js index 9280915254..7e0e2f728a 100644 --- a/projects/synthetix/apiCache.js +++ b/projects/synthetix/apiCache.js @@ -149,7 +149,7 @@ async function SNXHolders(snxGraphEndpoint, block, chain) { } module.exports = { - start: 1565287200, // Fri Aug 09 2019 00:00:00 + start: '2019-08-08', // Fri Aug 09 2019 00:00:00 optimism: { tvl: chainTvl("optimism") }, diff --git a/projects/synthex/index.js b/projects/synthex/index.js index 88364890f1..fc06264777 100644 --- a/projects/synthex/index.js +++ b/projects/synthex/index.js @@ -14,7 +14,6 @@ const DAI = ADDRESSES.optimism.DAI; module.exports = { methodology: "counts value of assets in the PoolC and PoolF", - start: 82762407, arbitrum: { tvl: sumTokensExport({ ownerTokens: [ diff --git a/projects/t-protocol-v2/index.js b/projects/t-protocol-v2/index.js index 864c3d6419..3916b2b061 100644 --- a/projects/t-protocol-v2/index.js +++ b/projects/t-protocol-v2/index.js @@ -8,7 +8,7 @@ const USTP = '0xed4d84225273c867d269f967cc696e0877068f8a' module.exports = { methodology: "counts value of assets in the Treasury", - start: 1677913260, + start: '2023-03-04', ethereum: { tvl, }, diff --git a/projects/t-protocol/index.js b/projects/t-protocol/index.js index dad6f75eea..14501bfd3f 100644 --- a/projects/t-protocol/index.js +++ b/projects/t-protocol/index.js @@ -7,7 +7,7 @@ const STBT = '0x530824DA86689C9C17CdC2871Ff29B058345b44a' module.exports = { methodology: "counts value of assets in the Treasury", - start: 1677913260, + start: '2023-03-04', ethereum: { tvl: sumTokensExport({ owner: TREASURY_CONTRACT, tokens: [USDC_TOKEN_CONTRACT, STBT] }), }, diff --git a/projects/taidog/index.js b/projects/taidog/index.js index b7a89476a5..2657a16651 100644 --- a/projects/taidog/index.js +++ b/projects/taidog/index.js @@ -79,7 +79,6 @@ module.exports = { misrepresentedTokens: true, methodology: "TVL counts user deposits of assets like (ETH, USDC, TAIKO) into protocol, counts pool2 (lp tokens) in staking contract 0xD664c3b22c60b4927ab1e0035b99F157bc2d8F1B, and counts the number of TAIDOG tokens in the staking contract 0x9b4484D5A2665930702d09f74086CAD86d96b25E", - start: 84000, taiko: { tvl: sumTokensExport({ tokensAndOwners: [ diff --git a/projects/tcv_platform/index.js b/projects/tcv_platform/index.js index 9a2da61ba6..73b6ac13c2 100644 --- a/projects/tcv_platform/index.js +++ b/projects/tcv_platform/index.js @@ -11,7 +11,7 @@ async function tvl(api) { module.exports = { methodology: "Calculates total liquidity from all NFT ranges in the given pools.", - start: 1717239410, + start: '2024-06-01', arbitrum: { tvl, }, diff --git a/projects/tetu/index.js b/projects/tetu/index.js index 950ba99fb8..17cc363f81 100644 --- a/projects/tetu/index.js +++ b/projects/tetu/index.js @@ -17,7 +17,7 @@ const EXCLUDED_VAULTS = { } module.exports = { - start: 1628024400, //Tue Aug 03 2021 21:00:00 GMT+0000 + start: '2021-08-03', //Tue Aug 03 2021 21:00:00 GMT+0000 misrepresentedTokens: true, }; diff --git a/projects/thala-vethl/index.js b/projects/thala-vethl/index.js index 8c9c0fa077..1d24a5f418 100644 --- a/projects/thala-vethl/index.js +++ b/projects/thala-vethl/index.js @@ -8,7 +8,7 @@ const thlDecimals = 8; module.exports = { timetravel: false, - start: 1692598825, + start: '2023-08-21', methodology: `TVL data is pulled from the Thala's API "https://app.thala.fi/api/vethl-tvl".`, aptos: { diff --git a/projects/tholgar/index.js b/projects/tholgar/index.js index e79f638b01..01cebefd2a 100644 --- a/projects/tholgar/index.js +++ b/projects/tholgar/index.js @@ -60,5 +60,4 @@ module.exports = { ethereum: { tvl: ethTvl, }, - start: 17368026 }; diff --git a/projects/thorn-protocol/index.js b/projects/thorn-protocol/index.js index 7778a25348..fb2544c228 100644 --- a/projects/thorn-protocol/index.js +++ b/projects/thorn-protocol/index.js @@ -11,7 +11,7 @@ async function tvl(api) { module.exports = { methodology: "Uses factory(0x888099De8EA8068D92bB04b47A743B82195c4aD2) address and whitelisted tokens address to find and price Liquidity Pool pairs", - start: 1729159200, + start: '2024-10-17', sapphire: { tvl, }, diff --git a/projects/tlx/index.js b/projects/tlx/index.js index c66b889291..b092c4e06e 100644 --- a/projects/tlx/index.js +++ b/projects/tlx/index.js @@ -41,7 +41,7 @@ async function tvl(api) { } module.exports = { - start: 1712731500, + start: '2024-04-10', methodology: "Total TLX locked in the genesis locker contract and total TLX staked in the staking contract. TVL is computed as the total margin deposited across the protocol's leveraged tokens.", optimism: { diff --git a/projects/toros/index.js b/projects/toros/index.js index 2b41830817..bdc0efe517 100644 --- a/projects/toros/index.js +++ b/projects/toros/index.js @@ -31,7 +31,7 @@ async function tvl(api) { module.exports = { misrepresentedTokens: true, - start: 1627776000, // Sunday, August 1, 2021 12:00:00 AM + start: '2021-08-01', // Sunday, August 1, 2021 12:00:00 AM methodology: "Aggregates total value of each Toros vault both on Polygon and Optimism", polygon: { diff --git a/projects/toucan-protocol/index.js b/projects/toucan-protocol/index.js index 441843bc51..909485c2db 100644 --- a/projects/toucan-protocol/index.js +++ b/projects/toucan-protocol/index.js @@ -54,7 +54,7 @@ const getRegenCredits = () => { }; module.exports = { - start: 1634842800, + start: '2021-10-21', base: { tvl: getCalculationMethod("base") }, diff --git a/projects/tranche/index.js b/projects/tranche/index.js index 6796d3d525..3912c836fd 100644 --- a/projects/tranche/index.js +++ b/projects/tranche/index.js @@ -93,7 +93,7 @@ function tvl(chain) { } module.exports = { - start: 1621340071, + start: '2021-05-18', ethereum: tvl('ethereum'), fantom: tvl('fantom'), avax: tvl('avax'), diff --git a/projects/treasury/betswirl.js b/projects/treasury/betswirl.js index 2a43dc69bd..1ecf614b30 100644 --- a/projects/treasury/betswirl.js +++ b/projects/treasury/betswirl.js @@ -74,7 +74,7 @@ module.exports = { methodology: "BetSwirl has no users TVL yet. However, it includes the bankrolls amounts (each tokens amount in the bank allowing players to bet).", // The first Bank was deployed on Polygon at tx 0x6b99f617946d2f8c23adcd440cd3309d2da750e52d135853f38a0da11cdc3233 - start: 1648344312, // new Date(Date.UTC(2022, 2, 27, 1, 25, 12)).getTime() / 1e3, + start: '2022-03-27', // new Date(Date.UTC(2022, 2, 27, 1, 25, 12)).getTime() / 1e3, bsc: { tvl: treasury("bsc"), ownTokens: staking('0xa475f643aa480a3df3e9872b6e80e75ae99b19db', '0x3e0a7C7dB7bB21bDA290A80c9811DE6d47781671'), diff --git a/projects/treasury/perfect-pool.js b/projects/treasury/perfect-pool.js index d902784660..bc0039ffde 100644 --- a/projects/treasury/perfect-pool.js +++ b/projects/treasury/perfect-pool.js @@ -4,7 +4,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const TREASURY = '0xFe4559392aF0E6988F2d7A4E6447a2E702Ff215d' module.exports = { - start: 1725311445, + start: '2024-09-02', base: { tvl: sumTokensExport({ owner: TREASURY, token: ADDRESSES.base.USDC }), } diff --git a/projects/treasury/shibui.js b/projects/treasury/shibui.js index d12d8955f9..fd0559b181 100644 --- a/projects/treasury/shibui.js +++ b/projects/treasury/shibui.js @@ -6,8 +6,6 @@ const Boba_SHIBUI_WETH = "0xcE9F38532B3d1e00a88e1f3347601dBC632E7a82"; const Boba_SHIBUI_USDT = "0x3f714fe1380ee2204ca499d1d8a171cbdfc39eaa"; module.exports = { - start: 394825, - boba: { tvl: async (api) => { return api.sumTokens({ owners: [ diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 449f13ba0b..7e4fc0214c 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -49,7 +49,7 @@ async function tvlMantle(api) { module.exports = { methodology: 'Token balance in vault and strategy contracts', - start: 1725926400, // Tuesday, September 10, 2024 12:00:00 AM, + start: '2024-09-10', // Tuesday, September 10, 2024 12:00:00 AM, hallmarks: [[1727218691, "TVL Cap Raise 1"],[1729045223, "TVL Cap Raise 2"]], ethereum: { tvl, diff --git a/projects/truefi/index.js b/projects/truefi/index.js index 87aef85eb8..a9256659a0 100644 --- a/projects/truefi/index.js +++ b/projects/truefi/index.js @@ -81,7 +81,7 @@ async function tvlArbitrum(api) { } module.exports = { - start: 1605830400, // 11/20/2020 @ 12:00am (UTC) + start: '2020-11-20', // 11/20/2020 @ 12:00am (UTC) ethereum: { tvl, staking: staking(stkTRU, TRU), diff --git a/projects/twtstake/index.js b/projects/twtstake/index.js index d9f6c3aa43..cb11610db3 100644 --- a/projects/twtstake/index.js +++ b/projects/twtstake/index.js @@ -7,7 +7,6 @@ module.exports = { [1681948800, "TWTStake Flagged on Twitter"] ], methodology: 'Counts the number of TWT tokens in the TWT Stake contract.', - start: 1000235, bsc: { tvl: () => 0, staking: staking(TWT_STAKE_CONTRACT,TWT_TOKEN_CONTRACT) diff --git a/projects/umamifinance/index.js b/projects/umamifinance/index.js index 4e1f1da2fe..5e8053f319 100644 --- a/projects/umamifinance/index.js +++ b/projects/umamifinance/index.js @@ -32,7 +32,7 @@ const gmVaultsAvax = [ module.exports = { doublecounted: true, - start: 1657027865, // UMAMI deployment block ts + start: '2022-07-05', // UMAMI deployment block ts arbitrum: { staking: stakings([mUMAMI, OHM_STAKING_sUMAMI], UMAMI), tvl: sumERC4626VaultsExport({ vaults: glpVaults.concat(gmVaultsArbitrum), isOG4626: true }), diff --git a/projects/unbk/index.js b/projects/unbk/index.js index a3014df280..53a9da7f90 100644 --- a/projects/unbk/index.js +++ b/projects/unbk/index.js @@ -46,7 +46,6 @@ async function tvl(timestamp, block, chainBlocks) { module.exports = { methodology: "Accross different vaults, counts the total number of assets accumulated on each of them", - start: 33000000, fantom: { tvl, }, diff --git a/projects/unitus/index.js b/projects/unitus/index.js index 16a937ec8d..fd04c5bf50 100644 --- a/projects/unitus/index.js +++ b/projects/unitus/index.js @@ -64,5 +64,5 @@ function chainTvl(chain) { module.exports = { ...generalizedChainExports(chainTvl, Object.keys(allControllers)), - start: 1564165044, // Jul-27-2019 02:17:24 AM +UTC + start: '2019-07-26', // Jul-27-2019 02:17:24 AM +UTC } diff --git a/projects/universe/index.js b/projects/universe/index.js index 6995120515..383b607ecb 100644 --- a/projects/universe/index.js +++ b/projects/universe/index.js @@ -97,5 +97,5 @@ module.exports = { tvl, pool2, }, - start: 1621939189, // May-25-2021 10:39:49 AM +UTC + start: '2021-05-25', // May-25-2021 10:39:49 AM +UTC }; \ No newline at end of file diff --git a/projects/uniwhale/index.js b/projects/uniwhale/index.js index d384ff2f86..ab0ef6fccd 100644 --- a/projects/uniwhale/index.js +++ b/projects/uniwhale/index.js @@ -5,7 +5,7 @@ const UNIWHALE_MARGIN_POOL = "0xBB1B941aB76fAE4e9F552B860eFaC1F367AC9bCc"; const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { - start: 1677833673, + start: '2023-03-03', bsc: { tvl: sumTokensExport({ owners: [UNIWHALE_LIQUIDITY_POOL, UNIWHALE_MARGIN_POOL, ], tokens: [USDT]}), }, diff --git a/projects/uno-farm/index.js b/projects/uno-farm/index.js index 0e83260959..a3921a6440 100644 --- a/projects/uno-farm/index.js +++ b/projects/uno-farm/index.js @@ -90,7 +90,7 @@ async function tvl(api) { } module.exports = { - start: 1656018000, + start: '2022-06-23', polygon: { tvl, }, diff --git a/projects/unore/index.js b/projects/unore/index.js index 2e173218aa..344334bc92 100644 --- a/projects/unore/index.js +++ b/projects/unore/index.js @@ -43,7 +43,7 @@ const config = { } module.exports = { - start: 1626100000, // Sep-20-2021 07:27:47 AM +UTC + start: '2021-07-12', // Sep-20-2021 07:27:47 AM +UTC kava: { tvl: async () => ({})}, }; diff --git a/projects/uplift/index.js b/projects/uplift/index.js index 5eff4a5931..c1bdce87f7 100644 --- a/projects/uplift/index.js +++ b/projects/uplift/index.js @@ -28,7 +28,7 @@ async function tvl(timestamp, block, chainBlocks) { module.exports = { methodology: "Counts the number of LIFT tokens in the Staking contract", - start: 1637191200, + start: '2021-11-18', bsc: { tvl: () => ({}), staking: tvl, diff --git a/projects/valleyswap/index.js b/projects/valleyswap/index.js index 93f82ef8a9..2d58db67a4 100644 --- a/projects/valleyswap/index.js +++ b/projects/valleyswap/index.js @@ -1,7 +1,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { - start: 411656, oasis: { tvl: getUniTVL({ factory: '0xa25464822b505968eEc9A45C43765228c701d35f', diff --git a/projects/valueliquid/index.js b/projects/valueliquid/index.js index 5874199351..72dd06ab5a 100644 --- a/projects/valueliquid/index.js +++ b/projects/valueliquid/index.js @@ -2,6 +2,6 @@ const { v1Tvl } = require('../helper/balancer') module.exports = { - start: 1601440616, // 09/30/2020 @ 4:36am (UTC) + start: '2020-09-30', // 09/30/2020 @ 4:36am (UTC) ethereum: { tvl: v1Tvl('0xebc44681c125d63210a33d30c55fd3d37762675b', 10961776) } }; diff --git a/projects/varen/index.js b/projects/varen/index.js index f62fe68570..7fe71195fe 100644 --- a/projects/varen/index.js +++ b/projects/varen/index.js @@ -4,7 +4,7 @@ const { getUniTVL } = require('../helper/unknownTokens') const stakingRewards = "0x25a25e2f0d2c211a96fa35e8c670ef6f5b3aba57" module.exports = { - start: 1606392528, // 11/26/2020 @ 12:08:48am (UTC) + start: '2020-11-26', // 11/26/2020 @ 12:08:48am (UTC) ethereum:{ staking: staking(stakingRewards, "0x72377f31e30a405282b522d588aebbea202b4f23"), pool2: pool2(stakingRewards, "0x88024deacdc2e9eda02a3051377ed635381faa54"), diff --git a/projects/vectorreserve/index.js b/projects/vectorreserve/index.js index 3ccda43a60..c26d674ee0 100644 --- a/projects/vectorreserve/index.js +++ b/projects/vectorreserve/index.js @@ -10,7 +10,6 @@ async function tvl(api) { module.exports = { methodology: 'Value of ETH and LSD tokens in VETH contract', - start: 19067821, ethereum: { tvl, pool2: staking(['0x2dd568028682ff2961cc341a4849f1b32f371064'], ['0xB6B0C651C37EC4ca81C0a128420e02001A57Fac2', '0x6685fcFCe05e7502bf9f0AA03B36025b09374726']), diff --git a/projects/vela-exchange/index.js b/projects/vela-exchange/index.js index 4e70f94995..e8e148734e 100644 --- a/projects/vela-exchange/index.js +++ b/projects/vela-exchange/index.js @@ -32,7 +32,6 @@ module.exports = { staking: async (api) => velaStaking(api,arbitrumEndpoint) }, base: { - start: 3566528, tvl: staking("0xC4ABADE3a15064F9E3596943c699032748b13352", ADDRESSES.base.USDbC), staking: async (api) => velaStaking(api,baseEndpoint) }, diff --git a/projects/vendor-finance-v2/index.js b/projects/vendor-finance-v2/index.js index 8190c9b908..31214b2f16 100644 --- a/projects/vendor-finance-v2/index.js +++ b/projects/vendor-finance-v2/index.js @@ -45,7 +45,6 @@ const config = { module.exports = { doublecounted: true, methodology: 'The sum of the balance of all listed collateral and lend tokens in all deployed pools.', - start: 88774917, }; Object.keys(config).forEach(chain => { diff --git a/projects/vendor-finance/index.js b/projects/vendor-finance/index.js index 6a649225e6..93c3d8f6ce 100644 --- a/projects/vendor-finance/index.js +++ b/projects/vendor-finance/index.js @@ -30,7 +30,6 @@ const config = { module.exports = { methodology: 'The sum of the balance of all listed collateral and lend tokens in all deployed pools.', - start: 20274088, deadFrom: '2024-08-30' }; diff --git a/projects/vesper/index.js b/projects/vesper/index.js index bb1fd92047..715fdc1457 100644 --- a/projects/vesper/index.js +++ b/projects/vesper/index.js @@ -54,6 +54,6 @@ function getChainExports(chain) { } module.exports = { - start: 1608667205, // December 22 2020 at 8:00 PM UTC + start: '2020-12-22', // December 22 2020 at 8:00 PM UTC ...['ethereum', 'avax', 'polygon', 'optimism', 'base'].reduce((acc, chain) => ({ ...acc, ...getChainExports(chain) }), {}) }; diff --git a/projects/vest/index.js b/projects/vest/index.js index 7187a502c5..d32ec42579 100644 --- a/projects/vest/index.js +++ b/projects/vest/index.js @@ -3,7 +3,7 @@ const ADDRESSES = require('../helper/coreAssets.json') module.exports = { methodology: "Total USDC locked in the Vest Exchange.", - start: 1710709200, + start: '2024-03-17', era: { tvl: staking([ "0xf7483A1464DeF6b8d5A6Caca4A8ce7E5be8F1F68", diff --git a/projects/vesta/index.js b/projects/vesta/index.js index ddeaf78332..d80dd26384 100644 --- a/projects/vesta/index.js +++ b/projects/vesta/index.js @@ -57,7 +57,7 @@ module.exports = { tvl, pool2, }, - start: 1644339600, + start: '2022-02-08', methodology: "Total Value Locked includes all stability pools, troves, and vst pairs", }; diff --git a/projects/vine/index.js b/projects/vine/index.js index db87fd3aaa..686ef8c378 100644 --- a/projects/vine/index.js +++ b/projects/vine/index.js @@ -1,7 +1,7 @@ const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') module.exports = { - start: 1706475600, + start: '2024-01-28', sapphire: { tvl: sumTokensExport({ owner: '0x1882560361578F2687ddfa2F4CEcca7ae2e614FD', tokens: [nullAddress] }), }, diff --git a/projects/visor/index.js b/projects/visor/index.js index e2e8bfe846..e18edc2971 100644 --- a/projects/visor/index.js +++ b/projects/visor/index.js @@ -9,7 +9,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') module.exports = { doublecounted: true, - start: 1616679762, // (Mar-25-2021 01:42:42 PM +UTC) + start: '2021-03-25', // (Mar-25-2021 01:42:42 PM +UTC) }; Object.keys(config).forEach(chain => { diff --git a/projects/w3bank/index.js b/projects/w3bank/index.js index dc623b8d98..8edfb78664 100644 --- a/projects/w3bank/index.js +++ b/projects/w3bank/index.js @@ -2,7 +2,7 @@ const { lendingMarket } = require("../helper/methodologies"); const { compoundExports2 } = require("../helper/compound"); module.exports = { - start: 1693843200, + start: '2023-09-04', pg: compoundExports2({ comptroller: '0x697bc9fd98ddafd1979c3e079033698ca93af451'}), methodology: `${lendingMarket}`, }; diff --git a/projects/warp/index.js b/projects/warp/index.js index d9f6c370df..dae8d74ff2 100644 --- a/projects/warp/index.js +++ b/projects/warp/index.js @@ -27,7 +27,7 @@ async function tvl(api) { } module.exports = { - start: 1610650220, + start: '2021-01-14', ethereum: { tvl }, } diff --git a/projects/waterfalldefi/index.js b/projects/waterfalldefi/index.js index e4f68b7560..b093f54783 100644 --- a/projects/waterfalldefi/index.js +++ b/projects/waterfalldefi/index.js @@ -135,7 +135,6 @@ async function tvl(chain, block) { module.exports = { methodology: 'Counts Waterfall DeFi tranche products TVL and staking TVL', - start: 16343128, bsc: { tvl: bscTVL, staking: bscStaking diff --git a/projects/weave/index.js b/projects/weave/index.js index 763b0ef497..a2691b0457 100644 --- a/projects/weave/index.js +++ b/projects/weave/index.js @@ -15,7 +15,6 @@ async function tvl(api) { module.exports = { methodology: 'gets the balance of the strategy contract', - start: 5793963, kava: { tvl, } diff --git a/projects/winr-protocol/index.js b/projects/winr-protocol/index.js index f743a7e34c..243db35d0c 100644 --- a/projects/winr-protocol/index.js +++ b/projects/winr-protocol/index.js @@ -2,7 +2,6 @@ const { gmxExports } = require('../helper/gmx') const WINR_VAULT_CONTRACT = "0x8c50528F4624551Aad1e7A265d6242C3b06c9Fca"; module.exports = { - start: 67057671, arbitrum: { tvl: gmxExports({ vault: WINR_VAULT_CONTRACT }), }, diff --git a/projects/wowswap/index.js b/projects/wowswap/index.js index c5b9da94b0..2d618234b8 100644 --- a/projects/wowswap/index.js +++ b/projects/wowswap/index.js @@ -40,7 +40,7 @@ function tvl(chain) { } module.exports = { - start: 1618218000, // Mon Apr 12 2021 09:00:00 + start: '2021-04-12', // Mon Apr 12 2021 09:00:00 misrepresentedTokens: true, }; diff --git a/projects/xdai/index.js b/projects/xdai/index.js index 6cab74c42c..87cae71d77 100644 --- a/projects/xdai/index.js +++ b/projects/xdai/index.js @@ -27,5 +27,5 @@ module.exports = { ethereum: { tvl: eth, }, - start: 1539028166, + start: '2018-10-08', }; diff --git a/projects/xfai/index.js b/projects/xfai/index.js index cc4a44c425..c8578d09a0 100644 --- a/projects/xfai/index.js +++ b/projects/xfai/index.js @@ -3,7 +3,7 @@ const FACTORY_ADDRESS = "0xa5136eAd459F0E61C99Cec70fe8F5C24cF3ecA26"; module.exports = { methodology: `Sums on-chain tvl by getting pools using xfai factory`, - start: 1692347965 , // Aug-18-2023 08:39:25 AM +UTC + start: '2023-08-18' , // Aug-18-2023 08:39:25 AM +UTC linea: { tvl: async (api) => { const pools = await api.fetchList({ lengthAbi: "uint256:allPoolsLength", itemAbi: "function allPools(uint256) external view returns (address)", target: FACTORY_ADDRESS}) diff --git a/projects/y24/index.js b/projects/y24/index.js index a2ae49cc6f..86bbc58032 100644 --- a/projects/y24/index.js +++ b/projects/y24/index.js @@ -6,7 +6,6 @@ const StakingContract2 = '0xe0Ceee33e1CE1EF4EA322B50D55d99E714B7BB6d'; module.exports = { methodology: 'This is the total value locked in y24 staking', - start: 35011373, bsc: { tvl: () => ({}), staking: sumTokensExport({owners: [StakingContract1, StakingContract2], tokens: [TOKEN_ADDRESS], lps: ['0x44628669C0F888b2884d20b94C22af465AA11f05'], useDefaultCoreAssets: true,}) diff --git a/projects/yamato/index.js b/projects/yamato/index.js index 2cde39faa4..345d87ca22 100644 --- a/projects/yamato/index.js +++ b/projects/yamato/index.js @@ -21,7 +21,7 @@ async function tvl(_, block) { } module.exports = { - start: 1690387200, + start: '2023-07-26', ethereum: { tvl, } diff --git a/projects/yamfore/index.js b/projects/yamfore/index.js index 9a5e32faa3..29919f2cb8 100644 --- a/projects/yamfore/index.js +++ b/projects/yamfore/index.js @@ -19,6 +19,6 @@ module.exports = { cardano: { tvl }, - start: 1728878400, + start: '2024-10-14', methodology: "TVL is equal to all ADA, CBLP and USDM (USDM by Moneta) held in the treasury and unlent funds, collected fees and loan collateral held by the V1 script.", }; diff --git a/projects/yaxis/index.js b/projects/yaxis/index.js index 99e18a06ed..dbc4808452 100644 --- a/projects/yaxis/index.js +++ b/projects/yaxis/index.js @@ -26,5 +26,5 @@ module.exports = { staking: staking_, pool2: staking(constants.UNISWAP_LPS.map(i => i.staking), constants.UNISWAP_LPS.map(i => i.address)) }, - start: 1600185600, // 09/16/2020 @ 12:00am (UTC+8) + start: '2020-09-15', // 09/16/2020 @ 12:00am (UTC+8) }; diff --git a/projects/yay-staking/index.js b/projects/yay-staking/index.js index c228def2f6..779c772e8c 100644 --- a/projects/yay-staking/index.js +++ b/projects/yay-staking/index.js @@ -11,6 +11,6 @@ const tvl = async (api) => { } module.exports = { - start: 1722488340, + start: '2024-08-01', ethereum: { tvl }, } \ No newline at end of file diff --git a/projects/yearn-ether/index.js b/projects/yearn-ether/index.js index 2077e35232..43b1cbaae9 100644 --- a/projects/yearn-ether/index.js +++ b/projects/yearn-ether/index.js @@ -7,6 +7,6 @@ async function tvl(api) { module.exports = { methodology: 'counts the total amount of ETH underlying the LSTs deposited into the yETH pool.', - start: 1693971707, + start: '2023-09-06', ethereum: { tvl } }; diff --git a/projects/yetiFinance/index.js b/projects/yetiFinance/index.js index cae094cbd6..6b04ffa4fd 100644 --- a/projects/yetiFinance/index.js +++ b/projects/yetiFinance/index.js @@ -1,7 +1,7 @@ // https://yetifinance.medium.com/yeti-finance-wind-down-55913bbf6aed module.exports = { misrepresentedTokens: true, - start: 1650027587, + start: '2022-04-15', deadFrom: '2324-02-10', hallmarks: [ [Math.floor(new Date('2023-12-28')/1e3), 'Protocol decides to wind down'], diff --git a/projects/yfii/index.js b/projects/yfii/index.js index 202195c85d..4c9d659208 100644 --- a/projects/yfii/index.js +++ b/projects/yfii/index.js @@ -105,6 +105,6 @@ async function tvl(timestamp, block) { module.exports = { doublecounted: true, - start: 1600185600, // 09/16/2020 @ 12:00am (UTC+8) + start: '2020-09-15', // 09/16/2020 @ 12:00am (UTC+8) ethereum: { tvl } }; diff --git a/projects/yiedl-vaults/index.js b/projects/yiedl-vaults/index.js index 3659a66116..300d674eaf 100644 --- a/projects/yiedl-vaults/index.js +++ b/projects/yiedl-vaults/index.js @@ -90,6 +90,6 @@ module.exports = { optimism: { tvl, }, - start: 1703073600, // 2023-12-20 12:00:00 UTC + start: '2023-12-20', // 2023-12-20 12:00:00 UTC methodology: 'Calculates the total value of positions held by the YIEDL Vaults in Synthetix Perpetuals.' }; diff --git a/projects/yieldfields/index.js b/projects/yieldfields/index.js index 67ee07a603..3caa7cd4bc 100644 --- a/projects/yieldfields/index.js +++ b/projects/yieldfields/index.js @@ -6,5 +6,5 @@ module.exports = { bsc: { tvl: getUniTVL({ factory: '0x0A376eE063184B444ff66a9a22AD91525285FE1C', useDefaultCoreAssets: true }), }, - start: 1621263282, // May-17-2021 03:54:42 PM + start: '2021-05-17', // May-17-2021 03:54:42 PM }; diff --git a/projects/yieldyak-staked-avax/index.js b/projects/yieldyak-staked-avax/index.js index c283738089..98651d7aa5 100644 --- a/projects/yieldyak-staked-avax/index.js +++ b/projects/yieldyak-staked-avax/index.js @@ -22,7 +22,7 @@ async function avax(api) { } module.exports = { - start: 1658869201, + start: '2022-07-26', methodology: "Total Supply and Underlying Price of the derivative is multiplied, resulting in number of staked Avax tokens.", doublecounted: true, avax: { diff --git a/projects/yldr/index.js b/projects/yldr/index.js index b601e17d0e..50187d6585 100644 --- a/projects/yldr/index.js +++ b/projects/yldr/index.js @@ -3,7 +3,7 @@ const { getLogs } = require('../helper/cache/getLogs') module.exports = { methodology: 'Get available liquidity for all reserves and include Uniswap V3 positions', - start: 1702931986, + start: '2023-12-18', }; const config = { diff --git a/projects/zeno/index.js b/projects/zeno/index.js index 541525055a..d76d60bba6 100644 --- a/projects/zeno/index.js +++ b/projects/zeno/index.js @@ -16,7 +16,7 @@ async function metisTvl(api) { } module.exports = { - start: 1710294153, + start: '2024-03-13', metis: { tvl: metisTvl, }, diff --git a/projects/zeroswap/index.js b/projects/zeroswap/index.js index 17163c26da..aa538efc9a 100644 --- a/projects/zeroswap/index.js +++ b/projects/zeroswap/index.js @@ -10,7 +10,6 @@ const AVAX_STAKING_ADDRESS = '0xa4751EAa89C5D6ff61384766268cabf25aCD1011' module.exports = { methodology: 'Counts tvl of all the tokens staked through Staking Contracts', - start: 1000235, ethereum: { tvl:() => ({}), staking: staking(ETH_STAKING_ADDRESS, ETH_TOKEN_ADDRESS), diff --git a/projects/zkUSD/index.js b/projects/zkUSD/index.js index 7082b77323..b9a17333fb 100644 --- a/projects/zkUSD/index.js +++ b/projects/zkUSD/index.js @@ -6,7 +6,7 @@ const TROVE_MANAGER_ADDRESS = { } module.exports = { - start: 1700000000, // Tuesday, November 14, 2023 10:13:20 PM + start: '2023-11-14', // Tuesday, November 14, 2023 10:13:20 PM }; Object.keys(TROVE_MANAGER_ADDRESS).forEach(chain => { diff --git a/projects/zkdx/index.js b/projects/zkdx/index.js index 2b75c223b5..4ccd02f99b 100644 --- a/projects/zkdx/index.js +++ b/projects/zkdx/index.js @@ -3,7 +3,6 @@ const {staking} = require("../helper/staking"); module.exports = { methodology: 'zkDX counts the staking values as tvl', - start: 3744214, era: { tvl: staking( ["0x79033C597B7d8e752a7511cF24512f4A7217C0B8", "0xd6cce119B45Efcb378a4735a96aE08826A37ca1c", diff --git a/projects/zkswap/index.js b/projects/zkswap/index.js index d903305201..267a7a92a8 100644 --- a/projects/zkswap/index.js +++ b/projects/zkswap/index.js @@ -8,7 +8,7 @@ const configs = [ ] module.exports = { - start: 1613135160, // 02/12/2021 @ 01:06pm UTC + start: '2021-02-12', // 02/12/2021 @ 01:06pm UTC ethereum: { tvl: sdk.util.sumChainTvls(configs.map(i => { return async function tvl(api) { diff --git a/utils/scripts/stringTimestamp.js b/utils/scripts/stringTimestamp.js new file mode 100644 index 0000000000..41708cffb2 --- /dev/null +++ b/utils/scripts/stringTimestamp.js @@ -0,0 +1,96 @@ +const fs = require('fs'); +const path = require('path'); + +// Function to convert Unix timestamp to 'YYYY-MM-DD' format +function convertTimestamp(unixTimestamp) { + const date = new Date(unixTimestamp * 1000); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; +} + +// Function to process files in the given directory +function processFiles(dir) { + if (['node_modules', 'raindex', 'helper', 'exactly'].some(name => dir.includes(name))) { + return; + } + fs.readdir(dir, (err, files) => { + if (err) { + console.error(`Error reading directory ${dir}:`, err); + return; + } + + files.forEach(file => { + const filePath = path.join(dir, file); + fs.stat(filePath, (err, stats) => { + if (err) { + console.error(`Error stating file ${filePath}:`, err); + return; + } + + if (stats.isFile()) { + fs.readFile(filePath, 'utf8', (err, data) => { + if (err) { + console.error(`Error reading file ${filePath}:`, err); + return; + } + + const regex = /start:\s*(\d+)/g; + const newData = data.replace(regex, (match, p1) => { + if (!/^\d{10}$/.test(p1)) { + console.error(`Invalid Unix timestamp ${p1} in file ${filePath}`); + return match; + } + + const year = new Date(parseInt(p1, 10) * 1000).getFullYear(); + if (year < 2005 || year > 2055) { + console.error(`Year ${year} out of range for timestamp ${p1} in file ${filePath}`); + return match; + } + const newTimestamp = convertTimestamp(parseInt(p1, 10)); + return `start: '${newTimestamp}'`; + }); + + if (newData !== data) { + fs.writeFile(filePath, newData, 'utf8', err => { + if (err) { + console.error(`Error writing file ${filePath}:`, err); + } else { + console.log(`Updated file ${filePath}`); + } + }); + } + }); + } else if (stats.isDirectory()) { + processFiles(filePath); + } + }); + }); + }); +} + +// Get the directory two levels up +const baseDir = path.resolve(__dirname, '../../projects'); + +// Process all directories two levels up +fs.readdir(baseDir, (err, dirs) => { + if (err) { + console.error(`Error reading base directory ${baseDir}:`, err); + return; + } + + dirs.forEach(dir => { + const dirPath = path.join(baseDir, dir); + fs.stat(dirPath, (err, stats) => { + if (err) { + console.error(`Error stating directory ${dirPath}:`, err); + return; + } + + if (stats.isDirectory()) { + processFiles(dirPath); + } + }); + }); +}); \ No newline at end of file From 5888991bebd5e52bf618763bcda6430c6b28810b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 27 Nov 2024 10:57:07 +0100 Subject: [PATCH 1207/1768] fix elixir --- projects/elixir/index.js | 2 +- projects/helper/coreAssets.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/elixir/index.js b/projects/elixir/index.js index 14febf5d5b..04681dee2b 100644 --- a/projects/elixir/index.js +++ b/projects/elixir/index.js @@ -39,7 +39,7 @@ module.exports = { tvl: async (api) => { // const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) // api.add(deUSD, deusdSupply); - await api.sumTokens({ owners: [COMMITS, FOUNDATION, FOUNDATION_2], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null, ADDRESSES.ethereum.SDAI] }) + await api.sumTokens({ owners: [COMMITS, FOUNDATION, FOUNDATION_2], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null, ADDRESSES.ethereum.SDAI, ADDRESSES.ethereum.sUSDS] }) }, pool2: sumTokensExport({ owner: DEUSD_LP_STAKING, tokens: LP_TOKENS }) }, diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 8201ef6787..22548e838c 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -43,6 +43,7 @@ "sUSD_OLD": "0x57ab1e02fee23774580c119740129eac7081e9d3", "sUSD": "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", "sUSDe": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", + "sUSDS": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD", "SUSHI": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "FDUSD": "0xc5f0f7b66764f6ec8c8dff7ba683102295e16409", From c85b4365c331e59f7b2e752aecd8aa679bb93061 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:18:14 +0100 Subject: [PATCH 1208/1768] ignore unreachable code --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index 73cae073d2..bb9d6c8514 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -16,5 +16,6 @@ module.exports = { "no-unused-vars": "off", "no-useless-escape": "warn", "no-prototype-builtins": "off", + "no-unreachable": "off", } } From 08306109778837d563de91d5b0404e0a065d7dd7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:20:34 +0100 Subject: [PATCH 1209/1768] tempfix fluid tokens --- projects/fluidtokens/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/fluidtokens/index.js b/projects/fluidtokens/index.js index 9f5649485c..e17151a6f1 100644 --- a/projects/fluidtokens/index.js +++ b/projects/fluidtokens/index.js @@ -59,7 +59,8 @@ async function tvl() { const boosted=parseInt(boosted_tvl.bs_available_volume)+parseInt(boosted_tvl.bs_active_volume); return { - cardano: (SC_offers_tvl+repay_tvl+pools_tvl+boosted) / 1e6, + // cardano: (SC_offers_tvl+repay_tvl+pools_tvl+boosted) / 1e6, + cardano: (SC_offers_tvl+pools_tvl+boosted) / 1e6, }; } From 7411c72faaaeab823eb3d560abaf3d7d7ff0e6c3 Mon Sep 17 00:00:00 2001 From: CardanoTokenIO <163329108+CardanoTokenIO@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:29:48 +0100 Subject: [PATCH 1210/1768] Include another script address for TVL (#12454) --- projects/danzo-arena/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/danzo-arena/index.js b/projects/danzo-arena/index.js index 95b91240b0..6d896b7e83 100644 --- a/projects/danzo-arena/index.js +++ b/projects/danzo-arena/index.js @@ -3,6 +3,7 @@ const { sumTokensExport } = require("../helper/chain/cardano"); const scriptAdresses = [ "addr1vx4caaf06swdn7cdfc7pu3sw235zvuhd02tw2np4uac9mwcp2vt4y", //Danzo Tokens locked inside the address for the DeFi game DANZO ARENA: https://danzo.gg/arena/ "addr1q8wu9v2wn8hkzq2g7q3ez8a99thw0gwmlhgpc2crmfk982xr2rqrszevgfwunrxu8ajh7pfhmaf6ppj60nj8rnhqhl4srgnekp", //Danzo Tokens locked inside the address for the DeFi game DANZO Game: https://danzo.gg + "addr1vxherk6ug9235v0mrrmywsr2493sxsydmaylzajs7xavd9q30593r", //Sugar tokens locked inside the address for the DeFi game Sugar Factory: https://sugar.systems/factory ]; module.exports = { From ae0cdd3e87ab767553a4e900e2157ab4dd3b5a81 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:32:51 +0100 Subject: [PATCH 1211/1768] Update: RocketPool (#12451) --- projects/rocketpool/index.js | 66 +++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/projects/rocketpool/index.js b/projects/rocketpool/index.js index 3553ad32c4..8b5631eb23 100644 --- a/projects/rocketpool/index.js +++ b/projects/rocketpool/index.js @@ -1,4 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk') const ETH = ADDRESSES.null const RPL = '0xd33526068d116ce69f19a9ee46f0bd304f21a51f' @@ -7,6 +8,7 @@ const rocketVault = '0x3bDC69C4E5e13E52A65f5583c23EFB9636b469d6' const rocketRewardsPool = '0xEE4d2A71cF479e0D3d0c3c2C923dbfEB57E73111' const trustedNodeManager = '0xb8e783882b11Ff4f6Cef3C501EA0f4b960152cc9' const rocketNodeStaking = '0xF18Dc176C10Ff6D8b5A17974126D43301F8EEB95' +const backfill_node_first_block = 21060563 const abi = { getNodeCount: "function getNodeCount() view returns (uint256)", @@ -21,14 +23,17 @@ const abi = { getNodeETHProvided: "function getNodeETHProvided(address _nodeAddress) view returns (uint256)", }; -const tvl = async (api) => { - const [nodeLength, pendingETHRewards, depositPoolBalance] = await Promise.all([ - api.call({ target: rocketNodeManager, abi: abi.getNodeCount }), - api.call({ target: rocketRewardsPool, abi: abi.getPendingETHRewards }), - api.call({ target: rocketVault, abi: abi.balanceOf, params: ['rocketDepositPool'] }), - ]) +const nodeBalances = async (api) => { + /** + Small hack for backfilling: the following code uses a recent contract deployed just 180 days ago. It allows retrieving all the nodeAddresses, + even those prior to this date. If the backfill api's timestamp is earlier than the contract's creation date, we use the creation date as the limit + to continue making calls. We'll then apply a filter to exclude nodeAddresses with registrationTime > api.timestamp + */ - const addresses = await api.call({ target: rocketNodeManager, abi: abi.getNodeAddresses, params: [0, nodeLength] }); + const block = await api.getBlock() < backfill_node_first_block ? backfill_node_first_block : await api.getBlock() + const nodeApi = new sdk.ChainApi({ chain: api.chain, block }) + const nodeLength = await nodeApi.call({ target: rocketNodeManager, abi: abi.getNodeCount }) + const addresses = await nodeApi.call({ target: rocketNodeManager, abi: abi.getNodeAddresses, params: [0, nodeLength] }); const batchSize = 100; const batchedAddresses = []; @@ -36,18 +41,34 @@ const tvl = async (api) => { batchedAddresses.push(addresses.slice(i, i + batchSize)); } - const results = await Promise.all( - batchedAddresses.map(async (batch) => { - const details = await api.multiCall({ calls: batch.map((address) => ({ target: rocketNodeManager, params: [address] })), abi: abi.getNodeDetails, permitFailure: true }) - const ethProvided = await api.multiCall({ calls: batch.map((address) => ({ target: rocketNodeStaking, params: [address] })), abi: abi.getNodeETHProvided, permitFailure: true }) - return { details: details ? details.filter((result) => result && result.exists) : [], ethProvided: ethProvided || [] }; - }) - ) - + const results = []; + for (const batch of batchedAddresses) { + const details = await nodeApi.multiCall({ calls: batch.map((address) => ({ target: rocketNodeManager, params: [address] })), abi: abi.getNodeDetails, permitFailure: true }); + const ethProvided = await nodeApi.multiCall({ calls: batch.map((address) => ({ target: rocketNodeStaking, params: [address] })), abi: abi.getNodeETHProvided, permitFailure: true }); + + const filteredResults = []; + if (details) { + for (let i = 0; i < details.length; i++) { + const detail = details[i]; + if (detail && detail.exists && detail.registrationTime <= api.timestamp) { + filteredResults.push({ + detail, + ethProvided: ethProvided[i] || 0, + }); + } + } + } + + results.push({ + details: filteredResults.map((result) => result.detail), + ethProvided: filteredResults.map((result) => result.ethProvided), + }); + } + const flattenedDetails = results.flatMap((result) => result.details); const flattenedEthProvided = results.flatMap((result) => result.ethProvided); - const { minipoolCount, ethMatched, nodeEthProvided } = flattenedDetails.reduce( + const { minipoolCount, ethMatched, nodeEthProvided} = flattenedDetails.reduce( (acc, curr, index) => { if (!curr) return acc; acc.minipoolCount += Number(curr.minipoolCount) || 0; @@ -55,10 +76,16 @@ const tvl = async (api) => { acc.nodeEthProvided += Number(flattenedEthProvided[index]) || 0; return acc; }, - { minipoolCount: 0, ethMatched: 0, nodeEthProvided: 0 } + { minipoolCount: 0, ethMatched: 0, nodeEthProvided: 0} ); - api.add(ETH, [pendingETHRewards, depositPoolBalance, ethMatched, nodeEthProvided]) + api.add(ETH, [ethMatched, nodeEthProvided]) +} + +const tvl = async (api) => { + await nodeBalances(api) + const depositPoolBalance = await api.call({ target: rocketVault, abi: abi.balanceOf, params: ['rocketDepositPool'] }) + api.add(ETH, depositPoolBalance) } const staking = async (api) => { @@ -68,6 +95,7 @@ const staking = async (api) => { } module.exports = { - methodology: 'TVL represents the total ETH from the minipools as well as the staking rewards pending distribution', + start: 1633046400, + methodology: 'TVL represents the total ETH from the minipools', ethereum: { tvl, staking } } \ No newline at end of file From d257cac8443631f45828f57c3395782d72425661 Mon Sep 17 00:00:00 2001 From: usr-icon-foundation <111794534+usr-icon-foundation@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:33:12 +0100 Subject: [PATCH 1212/1768] Add SOL and XLM tracking for Balanced (#12450) --- projects/balanced/helper.js | 2 ++ projects/balanced/index.js | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/projects/balanced/helper.js b/projects/balanced/helper.js index 1f2e07b1de..a0cc5fb5a6 100644 --- a/projects/balanced/helper.js +++ b/projects/balanced/helper.js @@ -43,6 +43,8 @@ const networkIdentifiers = { "0xa4b1.arbitrum": "arbitrum", "0x2105.base": "base", "sui/0000000000000000000000000000000000000000000000000000000000000002::sui::SUI": "sui", + "solana/11111111111111111111111111111111" : "solana", + "stellar/CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA" : "stellar" } // Get decimals of cross-chain Balanced assets in balancedAssetManagerContract diff --git a/projects/balanced/index.js b/projects/balanced/index.js index 7ccfd8a3bc..ef9b6cbbf4 100644 --- a/projects/balanced/index.js +++ b/projects/balanced/index.js @@ -44,4 +44,10 @@ module.exports = { sui: { tvl: async () => await computeTVL("sui"), }, + solana: { + tvl: async () => await computeTVL("solana"), + }, + stellar: { + tvl: async () => await computeTVL("stellar"), + } }; From fabdd28744118afb4f96b20957dc51a421de10d4 Mon Sep 17 00:00:00 2001 From: Ss5h Date: Wed, 27 Nov 2024 20:33:54 +0900 Subject: [PATCH 1213/1768] add cbBTC in btcfi-cdp (#12449) --- projects/btcfi-cdp/index.js | 3 ++- projects/helper/coreAssets.json | 3 ++- projects/helper/tokenMapping.js | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/btcfi-cdp/index.js b/projects/btcfi-cdp/index.js index 887b146987..8886bd5226 100644 --- a/projects/btcfi-cdp/index.js +++ b/projects/btcfi-cdp/index.js @@ -6,7 +6,8 @@ const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const chainPools = { bfc: { WBTC: { pool: '0xA84F9F42dF222da491571Fb70cCc11AC84B7F29D', token: ADDRESSES.bfc.WBTC }, - BTCB: { pool: '0xee66D8C40282439F2eE855D8a3666FB73257D349', token: ADDRESSES.bfc.BTCB } + BTCB: { pool: '0xee66D8C40282439F2eE855D8a3666FB73257D349', token: ADDRESSES.bfc.BTCB }, + cbBTC: { pool: '0xED00a5201607aa26CDDcdcf1583845e7435a2F39', token: ADDRESSES.bfc.cbBTC } }, } diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 22548e838c..c7a0e7a615 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1607,7 +1607,8 @@ "WBTC": "0x7b8FAC5F29E101BaaB33c5f9c39d4F85ba2cc7C1", "BTCB": "0xd267F821F1b8344B5A63626c8c824697194A173E", "BitcoinUSD": "0x6906Ccda405926FC3f04240187dd4fAd5DF6d555", - "BtcUSD": "0x6906Ccda405926FC3f04240187dd4fAd5DF6d555" + "BtcUSD": "0x6906Ccda405926FC3f04240187dd4fAd5DF6d555", + "cbBTC": "0x74B73Fd2eE237e9219dF30dfFDB206D237cbFC00" }, "scroll": { "WETH": "0x5300000000000000000000000000000000000004", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index fcca5c1705..c358488c5e 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -73,6 +73,9 @@ const fixBalancesTokens = { }, hela: { '0x3a035615e101373fa9ba21c5bea7fe4026fc40b4': { coingeckoId: "hela-usd", decimals: 18 }, + }, + bfc: { + '0x74B73Fd2eE237e9219dF30dfFDB206D237cbFC00': { coingeckoId: "coinbase-wrapped-btc", decimals: 8 }, } } From 8386a39c6294da06fd470dde06e6a2c263277aef Mon Sep 17 00:00:00 2001 From: aredtabora <165096994+aredtabora@users.noreply.github.com> Date: Wed, 27 Nov 2024 14:35:14 +0300 Subject: [PATCH 1214/1768] add ShardingDAO tvl (#12448) Co-authored-by: aredtabora --- projects/shardingdao/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/shardingdao/index.js diff --git a/projects/shardingdao/index.js b/projects/shardingdao/index.js new file mode 100644 index 0000000000..c54a721939 --- /dev/null +++ b/projects/shardingdao/index.js @@ -0,0 +1,14 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); +const coreAssets = require("../helper/coreAssets.json"); + +const tokens = [ + coreAssets.null, + coreAssets.ethereum.WBTC +]; + +module.exports = { + ethereum: { + tvl: sumTokensExport({ owner: "0x0feCcB11C5B61B3922C511d0f002c0b72D770dCE", tokens: tokens }) + }, + methodology: "Currently TVL is calculated as the sum of the assets locked inside the staking pool, including WBTC and native Ethereum on the contract." +}; From 3551dd446421270feacc0c7082f5fc6bc0fa1155 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:53:44 +0100 Subject: [PATCH 1215/1768] track levva #12443 --- projects/levva/config.js | 67 +++++++++++++++++++++++++++++++ projects/levva/index.js | 85 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 projects/levva/config.js create mode 100644 projects/levva/index.js diff --git a/projects/levva/config.js b/projects/levva/config.js new file mode 100644 index 0000000000..e30bd8d460 --- /dev/null +++ b/projects/levva/config.js @@ -0,0 +1,67 @@ +module.exports = { + arbitrum: { + factories: [ + { + factory: "0x1e36749E00229759dca262cB25Ad8d9B21bEB3F5", + fromBlock: 144171029, + version: "v1", + }, + { + factory: "0x537A3417Fe03e28F4E9640Bece70887a6938ff92", + fromBlock: 208756175, + version: "v1.5", + }, + { + factory: "0x4a805A6dbaCF824D5A39b9f3559aeFb831C1df95", + fromBlock: 220673210, + version: "v1.5", + }, + ], + contractRegistries: [ + { + fromBlock: 257563019, + address: "0x7a923e412B934ceC16042AA28244eE4881f9B722", + } + ] + }, + blast: { + factories: [ + { + factory: "0x1768Faee0A63927FeB81100046f5D63BfE0f08dB", + fromBlock: 501400, + version: "v1.5", + }, + ], + contractRegistries:[], + }, + ethereum: { + factories: [ + { + factory: "0xF8D88A292B0afa85E5Cf0d1195d0D3728Cfd7070", + fromBlock: 19824726, + version: "v1.5", + }, + { + factory: "0xc1aC50D46783387F4236a8364435b5CCEaDd9fe2", + fromBlock: 20725907, + version: "v1.5" + } + ], + contractRegistries: [ + { + fromBlock: 21027804, + address: "0x8Dbc09C0BD6D99AF01B8254432A13E6FF1b214Bd", + } + ] + }, + linea: { + factories: [ + { + factory: "0xF97305253804e7A7796f79aB4f8c8908492A8402", + fromBlock: 9312068, + version: "v1.5" + } + ], + contractRegistries:[], + } +}; diff --git a/projects/levva/index.js b/projects/levva/index.js new file mode 100644 index 0000000000..d22299f7a6 --- /dev/null +++ b/projects/levva/index.js @@ -0,0 +1,85 @@ +const { getLogs2 } = require("../helper/cache/getLogs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); +const config = require("./config"); + +module.exports = { + methodology: + "Counts the number of base and quote tokens in every marginly pool and underlying tokens in every levva vaults", +}; + +Object.keys(config).forEach((chain) => { + const { factories, contractRegistries } = config[chain]; + + module.exports[chain] = { + tvl: async (api) => { + await getPoolTvl(api, factories); + await getVaultTvl(api, contractRegistries); + }, + }; +}); + + +async function getPoolTvl(api, factories){ + const ownerTokens = []; + + for (const { factory, fromBlock, version } of factories) { + let logs; + if (version === "v1") { + // v1.0 contract + logs = await getLogs2({ + api, + target: factory, + eventAbi: + "event PoolCreated(address indexed quoteToken, address indexed baseToken, address uniswapPool, bool quoteTokenIsToken0, address pool)", + fromBlock, + }); + } else { + // v1.5 contract + logs = await getLogs2({ + api, + target: factory, + eventAbi: + "event PoolCreated(address indexed quoteToken, address indexed baseToken, address indexed priceOracle, uint32 defaultSwapCallData, address pool)", + fromBlock, + }); + } + + logs.forEach((i) => + ownerTokens.push([[i.quoteToken, i.baseToken], i.pool]) + ); + } + + await sumTokens2({ api, ownerTokens }); +} + +async function getVaultTvl(api, contractRegistries) { + const LEVVA_VAULT_CONTRACT_TYPE = 2000; + + const vaults = []; + // Retrieve logs from each contract registry to identify vaults + for (const { address, fromBlock } of contractRegistries) { + const logs = await getLogs2({ + api, + target: address, + eventAbi: "event ContractRegistered(uint64 contractType, address contractAddress, bytes data)", + fromBlock, + }); + + // Filter logs to find levva vault contracts + logs.forEach((l) => { + if (Number.parseInt(l.contractType) === LEVVA_VAULT_CONTRACT_TYPE) + vaults.push(l.contractAddress); + }); + } + + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults}) + const marginlyLent = await api.multiCall({ abi: 'function getLentAmount(uint8 protocol) view returns (uint256)', calls: vaults.map((i) => ({ target: i, params: 0})) }) + const totalLent = await api.multiCall({ abi: 'uint256:getTotalLent', calls: vaults }) + // Add total lent amount to balances + api.add(tokens, totalLent) + // Subtract marginlyLent from balances since it is counted as marginly pool TVL + api.add(tokens, marginlyLent.map(i => i * -1)) + + // Add free amount in ERC4626 + await api.erc4626Sum({ calls: vaults, tokenAbi: 'asset', balanceAbi: 'getFreeAmount' }); +} From 793d62464b64be92a1c881ec87b220e6d89b0e26 Mon Sep 17 00:00:00 2001 From: Yasir Ejaz <105588724+yasir7ca@users.noreply.github.com> Date: Wed, 27 Nov 2024 16:01:18 +0400 Subject: [PATCH 1216/1768] Bluefin AMM TVL Listing (#12447) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bluefin-amm/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/bluefin-amm/index.js diff --git a/projects/bluefin-amm/index.js b/projects/bluefin-amm/index.js new file mode 100644 index 0000000000..47c79bb914 --- /dev/null +++ b/projects/bluefin-amm/index.js @@ -0,0 +1,19 @@ +const sui = require("../helper/chain/sui"); +const { getConfig } = require('../helper/cache'); + +async function suiTvl(api) { + const pools = (await getConfig('bluefin/amm-sui', 'https://swap.api.sui-prod.bluefin.io/api/v1/pools/info')).map(i => i.address) + const res = await sui.getObjects(pools) + res.forEach((i) => { + const [coinA, coinB] = i.type.split('<')[1].split('>')[0].split(', ') + api.add(coinA, i.fields.coin_a) + api.add(coinB, i.fields.coin_b) + }) +} + + +module.exports = { + sui: { + tvl: suiTvl + }, +} \ No newline at end of file From 73abdb12e25589ffafbcdbb2c6ce27dbe74bbf28 Mon Sep 17 00:00:00 2001 From: yongjun925 Date: Wed, 27 Nov 2024 20:45:26 +0800 Subject: [PATCH 1217/1768] Add DODO Zircuit Mainnet pool data. (#12455) --- projects/dodo/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/dodo/index.js b/projects/dodo/index.js index f2fd2fac38..af0026414c 100644 --- a/projects/dodo/index.js +++ b/projects/dodo/index.js @@ -25,6 +25,7 @@ const config = { scroll: { dvmFactory: '0x5a0C840a7089aa222c4458b3BE0947fe5a5006DE', fromBlock: 83070, dspFactory: '0x7E9c460d0A10bd0605B15F0d0388e307d34a62E6', dppFactory: '0x31AC053c31a77055b2ae2d3899091C0A9c19cE3a' }, manta: { dvmFactory: '0x97bBF5BB1dcfC93A8c67e97E50Bea19DB3416A83', fromBlock: 384137, dspFactory: '0x29C7718e8B606cEF1c44Fe6e43e07aF9D0875DE1', dppFactory: '0xa71415675F68f29259ddD63215E5518d2735bf0a' }, mantle: { dvmFactory: '0x29C7718e8B606cEF1c44Fe6e43e07aF9D0875DE1', fromBlock: 21054048, dspFactory: '0x7dB214f2D46d94846936a0f8Bd9044c5C5Bd2b93', dppFactory: '0x46AF6b152F2cb02a3cFcc74014C2617BC4F6cD5C' }, + zircuit: { dvmFactory: '0xA909314363840f7c28b8EC314028e21722dd8Cb6', fromBlock: 1455081, dspFactory: '0xA312D73C1b537168f1C8588bDcaB9278df98Cd32', dppFactory: '0xb770C37F3A9eC6f25b791D9c791aDE09B0fb1AB8' }, // okexchain: { dvmFactory: '0x9aE501385Bc7996A2A4a1FBb00c8d3820611BCB5', fromBlock: 4701083, dspFactory: '0x44D5dF24d5Ef52A791D6436Fa45A8D426f6de34e' }, } From 78a16f910f41d3f331dbc3a01d382ca88928a685 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 27 Nov 2024 13:44:21 +0000 Subject: [PATCH 1218/1768] pendle bsc --- projects/pendle/v2.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/pendle/v2.js b/projects/pendle/v2.js index 93db46e334..5f6a47bdd0 100644 --- a/projects/pendle/v2.js +++ b/projects/pendle/v2.js @@ -36,6 +36,8 @@ const config = { "0x5ec2ae0afdec891e7702344dc2a31c636b3627eb", "0x70c1138b54ba212776d3a9d29b6160c54c31cd5d", "0x04eb6b56ff53f457c8e857ca8d4fbc8d9a531c0c", + "0x541b5eeac7d4434c8f87e2d32019d67611179606", + "0x5d1735b8e33bae069708cea245066de1a12cd38d" ], }, optimism: { @@ -118,7 +120,9 @@ Object.keys(config).forEach((chain) => { }); data.forEach((v, i) => { - let value = supply[i] * 10 ** (v.decimals - decimals[i]); + let value = supply[i] * 10 ** (v.decimals - + (sy[i].toLowerCase() == '0x7b5a43070bd97c2814f0d8b3b31ed53450375c19' // case for vbnb + ? 18 : decimals[i])); let index = tokenAssetTypeSy.indexOf(sy[i]); if (index !== -1) { value = (value * exchangeRates[index]) / 10 ** 18; From 8843b16a3b9bafb546e8196a10521c32cc0edc85 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 27 Nov 2024 16:40:59 +0100 Subject: [PATCH 1219/1768] pendle: add base --- projects/pendle/v2.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/pendle/v2.js b/projects/pendle/v2.js index 5f6a47bdd0..d1eb41e6ce 100644 --- a/projects/pendle/v2.js +++ b/projects/pendle/v2.js @@ -56,6 +56,11 @@ const config = { { factory: "0xcb02435716b0143d4ac1bdf370302d619e714126", fromBlock: 67661738 }, // v5 ], }, + base: { + factories: [ + { factory: "0x5202F7477685686284b3F47B0A5334b15ea0393D", fromBlock: 22350099 }, // v3 + ], + } }; module.exports = {}; @@ -153,4 +158,4 @@ async function filterWhitelistedSY(api, sys) { module.exports.ethereum.staking = staking( contracts.v2.vePENDLE, contracts.v2.PENDLE -); +); \ No newline at end of file From 3bf204da907f806eb8092382f178b7d23226726d Mon Sep 17 00:00:00 2001 From: GooGrand <55867268+GooGrand@users.noreply.github.com> Date: Wed, 27 Nov 2024 22:58:49 +0600 Subject: [PATCH 1220/1768] Add new cytonic chains (#12452) --- projects/cytonic/index.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/projects/cytonic/index.js b/projects/cytonic/index.js index cb9e01c15f..ab4ac254cf 100644 --- a/projects/cytonic/index.js +++ b/projects/cytonic/index.js @@ -36,7 +36,6 @@ const idl = { "errors": [] } - const BRIDGE_DEPOSITOR_EVM = '0xaEA5Bf79F1E3F2069a99A99928927988EC642e0B'; const BRIDGE_DEPOSITOR_SOL = 'HYDqq5GfUj4aBuPpSCs4fkmeS7jZHRhrrQ3q72KsJdD4'; @@ -143,6 +142,30 @@ module.exports = { ], }), }, + manta: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // ETH + ADDRESSES.manta.WETH, // WETH + ADDRESSES.manta.USDC, // USDC + ADDRESSES.manta.USDT, // USDT + "0x1468177dbcb2a772f3d182d2f1358d442b553089", // Manta mBTC + "0xaccbc418a994a27a75644d8d591afc22faba594e", // Manta mETH + "0x649d4524897ce85a864dc2a2d5a11adb3044f44a", // Manta mUSD + ], + }) + }, + bsquared: { + tvl: sumTokensExport({ + owner: BRIDGE_DEPOSITOR_EVM, + tokens: [ + ADDRESSES.null, // BTC + ADDRESSES.bsquared.WBTC, // WBTC + ADDRESSES.bsquared.USDT, // USDT + ], + }) + }, solana: { tvl: sol_tvl } From 537796e63ef48df74f13edba515196fa6194e9fd Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 28 Nov 2024 01:04:59 +0000 Subject: [PATCH 1221/1768] add hallmark --- projects/hydrometer/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/hydrometer/index.js b/projects/hydrometer/index.js index 759955785b..9a59ad55e9 100644 --- a/projects/hydrometer/index.js +++ b/projects/hydrometer/index.js @@ -2,6 +2,9 @@ const { uniTvlExport } = require('../helper/calculateUniTvl.js') module.exports = { misrepresentedTokens: true, + hallmarks: [ + [1732734407,"Rug Pull"] + ], base: { tvl: uniTvlExport("0xF60caCf0A3daa5B6a79ca6594BEF38F85391AE0A", undefined, undefined, { allPairsLength: 'uint256:allPoolsLength', From bdd3bd154ad211484e91d496817783eeddd91c13 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 28 Nov 2024 10:45:02 +0100 Subject: [PATCH 1222/1768] track dexodus #12473 --- projects/dexodus/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/dexodus/index.js diff --git a/projects/dexodus/index.js b/projects/dexodus/index.js new file mode 100644 index 0000000000..890dabbf6e --- /dev/null +++ b/projects/dexodus/index.js @@ -0,0 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + methodology: 'Counts the USDC and WETH tokens in the Dexodus liquidity pool on Base.', + base: { + tvl: sumTokensExport({ owner: '0x1A84d7E27e7f0e93Da74b93095e342b6e8dBd50A', tokens: [ADDRESSES.base.USDbC, ADDRESSES.base.WETH] }), + }, +}; From 024eb65ffff3c0053771c5901f3f3d9c5411f11d Mon Sep 17 00:00:00 2001 From: usr-icon-foundation <111794534+usr-icon-foundation@users.noreply.github.com> Date: Thu, 28 Nov 2024 10:45:48 +0100 Subject: [PATCH 1223/1768] Refactor helper.js (#12471) --- projects/balanced/helper.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/balanced/helper.js b/projects/balanced/helper.js index a0cc5fb5a6..6e487e6465 100644 --- a/projects/balanced/helper.js +++ b/projects/balanced/helper.js @@ -42,9 +42,9 @@ const networkIdentifiers = { "injective-1/inj": "injective", "0xa4b1.arbitrum": "arbitrum", "0x2105.base": "base", - "sui/0000000000000000000000000000000000000000000000000000000000000002::sui::SUI": "sui", - "solana/11111111111111111111111111111111" : "solana", - "stellar/CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA" : "stellar" + "sui": "sui", + "solana" : "solana", + "stellar" : "stellar" } // Get decimals of cross-chain Balanced assets in balancedAssetManagerContract From 204d096ec42a70767b9d5a4a21dfba6b881d664b Mon Sep 17 00:00:00 2001 From: Roy <42067944+royvardhan@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:21:49 +0530 Subject: [PATCH 1224/1768] feat: add vapordex apechain (#12467) --- projects/vapordex-v2/index.js | 4 ++++ projects/vapordex/index.js | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/projects/vapordex-v2/index.js b/projects/vapordex-v2/index.js index 4e6f81e8e6..1d7f243530 100644 --- a/projects/vapordex-v2/index.js +++ b/projects/vapordex-v2/index.js @@ -9,4 +9,8 @@ module.exports = uniV3Export({ factory, fromBlock: 312329030, }, + apechain: { + factory, + fromBlock: 2671998, + }, }); diff --git a/projects/vapordex/index.js b/projects/vapordex/index.js index a1f5a2e57b..a999bd2511 100644 --- a/projects/vapordex/index.js +++ b/projects/vapordex/index.js @@ -2,6 +2,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); const FACTORY_TELOS = "0xDef9ee39FD82ee57a1b789Bc877E2Cbd88fd5caE"; const FACTORY_AVAX = "0xc009a670e2b02e21e7e75ae98e254f467f7ae257"; +const FACTORY_APECHAIN = "0xc009a670e2b02e21e7e75ae98e254f467f7ae257"; module.exports = { telos: { tvl: getUniTVL({ @@ -17,6 +18,13 @@ module.exports = { }), }, + apechain: { + tvl: getUniTVL({ + factory: FACTORY_APECHAIN, + useDefaultCoreAssets: true, + }), + }, + methodology: "TVL comes from the DEX liquidity pools, and is pulled from the factory contract:", }; From c1faaa7019ddb92877712eea38b2f0ae6a3fe897 Mon Sep 17 00:00:00 2001 From: Deploydon <96504831+Deploydon@users.noreply.github.com> Date: Thu, 28 Nov 2024 04:58:33 -0500 Subject: [PATCH 1225/1768] Added Jade.Money (#12464) --- projects/jademoney/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/jademoney/index.js diff --git a/projects/jademoney/index.js b/projects/jademoney/index.js new file mode 100644 index 0000000000..9a592c3173 --- /dev/null +++ b/projects/jademoney/index.js @@ -0,0 +1,16 @@ +const { queryContract } = require("../helper/chain/cosmos"); + +const jadeContract = "neutron1mdy5fhtwdjagp5eallsdhlx6gxylm8rxqk72wjzg6y5d5kt44ysqprkduw"; +const usdcDenom = "ibc/B559A80D62249C8AA07A380E2A2BEA6E5CA9A6F079C912C3A9E9B494105E4F81"; + +async function tvl(api) { + const data = await queryContract({ contract: jadeContract, chain: "neutron", data: "{\"value\":{}}" }); + api.add(usdcDenom, data); +} + +module.exports = { + methodology: "Queries the Jade.Money contract for the total value of USDC deposits.", + neutron: { + tvl + } +} \ No newline at end of file From 9c344ab8ce9666a7ca73cbb059f80cae0944c545 Mon Sep 17 00:00:00 2001 From: marakitio Date: Thu, 28 Nov 2024 13:10:16 +0300 Subject: [PATCH 1226/1768] Create Tonyielding (#12462) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/tonyielding/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/tonyielding/index.js diff --git a/projects/tonyielding/index.js b/projects/tonyielding/index.js new file mode 100644 index 0000000000..640619f605 --- /dev/null +++ b/projects/tonyielding/index.js @@ -0,0 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens } = require("../helper/chain/ton"); +const TONYIELDING = 'EQAN0yTLUz7gGuM41LniwcdoKKLPYV0BCDPSxTSoqrlRSTAR'; + +module.exports = { + methodology: 'Counts the number of TON in the Tonyielding contract.', + ton: { + tvl: (api) => sumTokens({ api, owners: [TONYIELDING], tokens: [ADDRESSES.null] }), + } +}; From 63d24d66c85781cc182d9fcb3c8632dda827aaba Mon Sep 17 00:00:00 2001 From: muhammedea Date: Thu, 28 Nov 2024 13:10:42 +0300 Subject: [PATCH 1227/1768] add ubeswap-v3 (#12461) Co-authored-by: Kadir Ay --- projects/ubeswap-v3/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/ubeswap-v3/index.js diff --git a/projects/ubeswap-v3/index.js b/projects/ubeswap-v3/index.js new file mode 100644 index 0000000000..fe4a7bb7b5 --- /dev/null +++ b/projects/ubeswap-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + celo: { factory: '0x67FEa58D5a5a4162cED847E13c2c81c73bf8aeC4', fromBlock: 25639915, }, +}) \ No newline at end of file From 22269f05b0f90d6fb5c75be23c8d3ea13ddfd049 Mon Sep 17 00:00:00 2001 From: 0xSacha <90143060+0xSacha@users.noreply.github.com> Date: Thu, 28 Nov 2024 10:12:33 +0000 Subject: [PATCH 1228/1768] ADD nimbora liquid staking (#12459) --- projects/nimbora_lst/erc4626abi.js | 20 ++++++++++++++++++++ projects/nimbora_lst/index.js | 24 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 projects/nimbora_lst/erc4626abi.js create mode 100644 projects/nimbora_lst/index.js diff --git a/projects/nimbora_lst/erc4626abi.js b/projects/nimbora_lst/erc4626abi.js new file mode 100644 index 0000000000..8da32a0d8c --- /dev/null +++ b/projects/nimbora_lst/erc4626abi.js @@ -0,0 +1,20 @@ +const ERC4626Abi = [ + { + "name": "total_assets", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + } +] + +const ERC4626AbiMap = {} +ERC4626Abi.forEach(i => ERC4626AbiMap[i.name] = i) + +module.exports = { + ERC4626AbiMap +} \ No newline at end of file diff --git a/projects/nimbora_lst/index.js b/projects/nimbora_lst/index.js new file mode 100644 index 0000000000..1a7a7d5010 --- /dev/null +++ b/projects/nimbora_lst/index.js @@ -0,0 +1,24 @@ +const {multiCall} = require("../helper/chain/starknet"); +const ADDRESSES = require('../helper/coreAssets.json'); +const { ERC4626AbiMap } = require('./erc4626abi') + +const LiquidStakingData = [{ + address: "0x076c4b7bb1ce744e4aae2278724adedd4906ab89998623fe1715877ecb583bde", + token: ADDRESSES.starknet.STRK +}] + +async function tvl(api) { + const totalAssets = await multiCall({ + calls: LiquidStakingData.map(c => c.address), + abi: ERC4626AbiMap.total_assets + }); + api.addTokens(LiquidStakingData.map(c => c.token), totalAssets); +} + +module.exports = { + doublecounted: true, + methodology: "The TVL is the total staked STRK managed by Nimbora Lst", + starknet: { + tvl, + }, +}; \ No newline at end of file From 3e919af0229a622b28eb3ce4ea4f5614a4269568 Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Thu, 28 Nov 2024 02:18:02 -0800 Subject: [PATCH 1229/1768] Add Panko and Kim (#12457) --- projects/visor/config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/visor/config.js b/projects/visor/config.js index 4b8d6af40f..cd8f232c71 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -90,6 +90,7 @@ const HYPE_REGISTRY = { ["0xf1DF4F17e34Ba710DfFC487F73f1e19476E815a6", 8743213], // Thick ["0xe1cd1c2d2e4B44dE211D554649BC7dc49eF07784", 15063294], // Kinetix ["0x6809f4881707459Ad0287C6467365E3C910e9373", 19631061], // Aerodrome + ["0x392007E4a40236c656548b4655c372bD327A6096", 22026482], // Kim ], kava: [ ["0x683292172E2175bd08e3927a5e72FC301b161300", 6384272], // Kinetix @@ -135,6 +136,7 @@ const HYPE_REGISTRY = { ], taiko: [ ["0xc27ddd78fc49875fe6f844b72bbf31dfbb099881", 57600], // Uniswap + ["0x1E97925c365cd96D74Ec55A04569915c4D65e5e0", 606236], // Panko ], rsk: [ ["0x683292172E2175bd08e3927a5e72FC301b161300", 6414342], // Uniswap From acfd62860bb47cd30bdb622c1eb826307547f849 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:31:29 +0100 Subject: [PATCH 1230/1768] Compx CDP & streaming (#12479) Co-authored-by: Ronan Co-authored-by: Ronan <73086339+clooneyr@users.noreply.github.com> Co-authored-by: Xxiled <93330009+xxiled-plastic-cat@users.noreply.github.com> Co-authored-by: Garrett Vorce --- projects/compx-cdp/index.js | 70 +++++++++++++++++++++++++++++++ projects/compx-streaming/index.js | 65 ++++++++++++++++++++++++++++ projects/compx/index.js | 2 +- projects/helper/chain/algorand.js | 31 ++++++++++++-- 4 files changed, 163 insertions(+), 5 deletions(-) create mode 100644 projects/compx-cdp/index.js create mode 100644 projects/compx-streaming/index.js diff --git a/projects/compx-cdp/index.js b/projects/compx-cdp/index.js new file mode 100644 index 0000000000..6ca472a186 --- /dev/null +++ b/projects/compx-cdp/index.js @@ -0,0 +1,70 @@ +const { sumTokens } = require("../helper/chain/algorand"); + + +module.exports = { + algorand: { + tvl: getCDPVaultTokens, + staking, + }, +}; + +const stakingPools = [ + // NIKO + 'XZOKYETGUQKIJJG4LSBAFYLDQRKCT6PQUO5CZJQ37VUD2VYMWRHH2LK7MI', + // TinymanPool2.0 xMcRib-ALGO + 'RNL5YCWQDLYX4WXMM43ARQVFVNO4PSGWCLNKORUUVFCXQLR2LIURETDCDI' +]; + + +const vaults = [ + // Minting wallet + "XN4OX5OFLZFLDBI4J36EGOIMKGR4NISEVFCQRXDTC4WT35GPBM5EJI7IOA", + + // gAlgo Vault + "ABU4ZY2UAPJWIZPE5FZP6GWVXTIP77YNAF3KBWBNW6KNBZALKRKPZL6HLM", + + // Link Vault + "YVQRJKC7TUD3XB3XCAA7SMY5OG7AHOTU465DI7HIOL4NQZMG52NXLBOMYA", + + // AVAX Vault + "RQ4MNDFSG4CCCWEJMRNGE5ZRNV3F2PHZSDJZ5X266MXA65HMLRFFXNAW5Y", + + // Sol Vault + "ODJPJKPAHL7NPRJC5XF42SWFHB37ECCQEGFJIA4TFWOXGKJQA6M7S5NL2M", + + // goBTC Vault + "UVSJVQXX3KYYWTQVXPRTIA5QXYAM6Y26JI2P2NZP25RSJTVMP3X7ODNC5Q", + + // goETH Vault + "DMVBFMMH3RIKCS3V77DCETWJDA2HW4LPEBURBUD7RQNVK5SKH5QZG6ZF4Q", + + // Silver Vault + "H4437RZ3W2Q7JXIRPDIEFO65QNNTH4SICMNWT4SSEHNQ4UPIMAO63DNZGI", + + // Gold Vault + "MJET3QJDM5MXC5ZREAPW5PUK4HN73VRYMAFGMPWG7VEIRQIHFQPSMA6CUQ", + + // mAlgo Vault + "XXLNQOR5XNJU57W2TQ3WEJTL2RGQ2ABCSAU2CX4NSZZGPHB5WSOTT6BZXA", + + // Chips Vault + "RJQNFSLZWSZ3W6N5TJCS2F6KNEWTXUQDFI7GXDXXCOC5UDIPYYN3W665YE", + + // Coop Vault + "QTFSX7MJLUBP4TLCRNGMEQCOCG6Z2O5A7RAUREW5S5RYIGMGYDLDYYSMAQ", + + // Algo Vault + "HVDIX7FCCJGH3XFJNTEAQZ22CQTD2LUD7NKN7JCY37SGFA2763A4NHUHRQ", + + // Deprecated Algo Vault + "I4O4APZDX7R7GL26JA2G6ENO5KZHIN4ZLRJR4DANXJC6GU7A2SI6VNY6LA" +]; + +async function getCDPVaultTokens() { + // Don't count xUSD + return sumTokens({ owners: vaults, blacklistedTokens: ['760037151'] }); +} + +async function staking() { + return sumTokens({ owners: stakingPools, tinymanLps: [['2525037707', '2518721081'] ]}); +} diff --git a/projects/compx-streaming/index.js b/projects/compx-streaming/index.js new file mode 100644 index 0000000000..9b1a6d45f4 --- /dev/null +++ b/projects/compx-streaming/index.js @@ -0,0 +1,65 @@ +const { lookupTransactionsByID, sumTokens } = require("../helper/chain/algorand"); + +module.exports = { + algorand: { + tvl: getAlgoStreamTVL, + vesting: getASAStreamTVL, + }, +}; + +async function getAlgoStreamTVL() { + const { transactions } = await lookupTransactionsByID({ + 'tx-type': 'pay', + 'address': 'KYYHXY5CANPEOH4WA4ZSISEMD5QYYBP6DOG3HNWJJIJNNKARYF5JYCNSNE', + 'address-role': 'sender', + 'exclude-close-to': 'true', + }); + + const uniqueRecipients = new Set(transactions.map((txn) => txn["inner-txns"][0]["inner-txns"][0]["payment-transaction"]["receiver"])); + + const algoRecipients = Array.from(uniqueRecipients); + return sumTokens({ owners: algoRecipients, }); +} + +async function getASAStreamTVL() { + const asaFeeRecipients = await getASARecipients(); + return sumTokens({ owners: asaFeeRecipients, }); +} + +async function getASARecipients() { + let transactions = []; + let nextToken = null; + + do { + let query = { + 'tx-type': 'axfer', + 'address': 'JBV23ATJIL4MWXIJXZ6L2EJSJZOMP7YENNGUNQZAUTEN7QYSPC5ZHPR6SY', + 'address-role': 'sender', + 'exclude-close-to': 'true', + }; + + if (nextToken) { + query['next'] = nextToken; + } + + const response = await lookupTransactionsByID(query); + + transactions = transactions.concat(response.transactions); + + nextToken = response['next-token']; + + } while (nextToken); + + const uniqueRecipients = new Set(); + + transactions.forEach((txn) => { + const innerTxns = txn["inner-txns"][0]["inner-txns"]; + if (innerTxns && innerTxns.length >= 2) { + uniqueRecipients.add(innerTxns[2]["asset-transfer-transaction"]["receiver"]); + } else if (!innerTxns && txn["inner-txns"][0]["asset-transfer-transaction"]) { + uniqueRecipients.add(txn["inner-txns"][0]["asset-transfer-transaction"]["receiver"]); + } + }); + + return Array.from(uniqueRecipients); +} diff --git a/projects/compx/index.js b/projects/compx/index.js index b36986987b..afbd9e9468 100644 --- a/projects/compx/index.js +++ b/projects/compx/index.js @@ -17,4 +17,4 @@ module.exports = { algorand: { tvl, }, -}; +}; \ No newline at end of file diff --git a/projects/helper/chain/algorand.js b/projects/helper/chain/algorand.js index af9476fc01..cd9ca10181 100644 --- a/projects/helper/chain/algorand.js +++ b/projects/helper/chain/algorand.js @@ -64,11 +64,14 @@ const withLimiter = (fn, tokensToRemove = 1) => async (...args) => { return fn(...args); } -async function sumTokens({ owner, owners = [], tokens = [], token, balances = {}, blacklistedTokens = [], tinymanLps = [], blacklistOnLpAsWell = false, tokensAndOwners = [], }) { +async function sumTokens({ owner, owners = [], tokens = [], token, balances, api, blacklistedTokens = [], tinymanLps = [], blacklistOnLpAsWell = false, tokensAndOwners = [], }) { + if (!balances) { + balances = api ? api.getBalances() : {} + } if (owner) owners = [owner] if (token) tokens = [token] if (tokensAndOwners.length) owners = tokensAndOwners.map(i => i[1]) - const accounts = await Promise.all(owners.map(getAccountInfo)) + const accounts = await Promise.all(owners.map(limitedGetAccountInfo)) accounts.forEach(({ assets }, i) => { if (tokensAndOwners.length) tokens = [tokensAndOwners[i][0]] assets.forEach(i => { @@ -89,7 +92,7 @@ async function getAssetInfo(assetId) { async function _getAssetInfo() { const { data: { asset } } = await axiosObj.get(`/v2/assets/${assetId}`) - const reserveInfo = await getAccountInfo(asset.params.reserve) + const reserveInfo = await limitedGetAccountInfo(asset.params.reserve) const assetObj = { ...asset.params, ...asset, reserveInfo, } assetObj.circulatingSupply = assetObj.total - reserveInfo.assetMapping[assetId].amount assetObj.assets = { ...reserveInfo.assetMapping } @@ -98,6 +101,17 @@ async function getAssetInfo(assetId) { } } +async function getAssetInfoWithoutReserve(assetId) { + if (!assetCache[assetId]) assetCache[assetId] = _getAssetInfo() + return assetCache[assetId] + + async function _getAssetInfo() { + const { data: { asset } } = await axiosObj.get(`/v2/assets/${assetId}`) + const assetObj = { ...asset.params, ...asset, } + return assetObj + } +} + async function resolveTinymanLp({ balances, lpId, unknownAsset, blacklistedTokens, }) { const lpBalance = balances['algorand:' + lpId] if (lpBalance && lpBalance !== '0') { @@ -200,15 +214,24 @@ async function getPriceFromAlgoFiLP(lpAssetId, unknownAssetId) { throw new Error('Not mapped with any whitelisted assets') } +async function lookupTransactionsByID(searchParams = {}) { + const urlParams = new URLSearchParams(searchParams).toString(); + return (await axiosObj.get(`/v2/transactions?${urlParams}`)).data +} + +const limitedGetAccountInfo = withLimiter(getAccountInfo) + module.exports = { tokens, getAssetInfo: withLimiter(getAssetInfo), + getAssetInfoWithoutReserve: withLimiter(getAssetInfoWithoutReserve), searchAccountsAll, - getAccountInfo, + getAccountInfo: limitedGetAccountInfo, sumTokens, getApplicationAddress, lookupApplications: withLimiter(lookupApplications), lookupAccountByID: withLimiter(lookupAccountByID), + lookupTransactionsByID: withLimiter(lookupTransactionsByID), searchAccounts: withLimiter(searchAccounts), getAppGlobalState: getAppGlobalState, getPriceFromAlgoFiLP, From bc526326b0060d7b0ac534ace6e3a5ad79300bc1 Mon Sep 17 00:00:00 2001 From: Five Stars <146636499+fivestarsfi@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:40:56 +0300 Subject: [PATCH 1231/1768] syde adapter - update addr and logo (#12483) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/syde/index.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/projects/syde/index.js b/projects/syde/index.js index 8becae7d9a..35f7dbfc48 100644 --- a/projects/syde/index.js +++ b/projects/syde/index.js @@ -1,13 +1,14 @@ + const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const sydeBtcPool = "EQA2J0WCTdYdG-XeyMpPBTeu2dWB2f0oFiV4KVRfV0gewF4E" -const sydeEthPool = "EQD-7ycFO3yeh0EeT2wgXoOQmu64rdDBXqGm4nHDInPfCxJG" -const sydeEurPool = "EQDXvkuKPZahcTDRHSybwiU0E5VpiGFP2QS2iHr082JmtTT9" +const sydeBtcPool = "EQBm9Ns0p98h74liNdYn-jOnJ79BT5cm--LIAeoYlfeWzQOk" +const sydeEthPool = "EQCo4FcMyezTvv2xOY-6iW4AAGahV2u8tkMxVT90gDz0sk5t" +const sydeEurPool = "EQC9H5G-VrnnwFa60pn08t5EqNMREW8NscnqL13W2jl9je4P" module.exports = { methodology: 'Counts Syde smartcontract balance as TVL.', ton: { tvl: sumTokensExport({ owners: [sydeBtcPool, sydeEthPool, sydeEurPool], tokens: [ADDRESSES.null]}), } -} +} \ No newline at end of file From 11a74bb15cfc36c2a94f590e911482f15b732ca9 Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 28 Nov 2024 12:41:25 -0300 Subject: [PATCH 1232/1768] feat: add incaswap (#12482) --- projects/incaswap/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/incaswap/index.js diff --git a/projects/incaswap/index.js b/projects/incaswap/index.js new file mode 100644 index 0000000000..5a6ad6704a --- /dev/null +++ b/projects/incaswap/index.js @@ -0,0 +1,5 @@ +const { uniTvlExports } = require('../helper/unknownTokens'); + +module.exports = uniTvlExports({ + matchain: '0x1d9e11881Fca0e692B09AF0C0cbE70A643CB06FB' +}) From f2de67f216f83eed1a7ff4e0ac111bb4b1a151b7 Mon Sep 17 00:00:00 2001 From: Crumbs <97379465+0xCrumb@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:41:57 +0000 Subject: [PATCH 1233/1768] Add ApeChain TVL for Gains Network (#12481) --- projects/gainsNetwork.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/projects/gainsNetwork.js b/projects/gainsNetwork.js index 46b86f0da0..e8e99abbf5 100644 --- a/projects/gainsNetwork.js +++ b/projects/gainsNetwork.js @@ -1,7 +1,7 @@ const ADDRESSES = require('./helper/coreAssets.json') const { pool2 } = require("./helper/pool2"); const { staking } = require("./helper/staking"); -const { sumTokens2 } = require("./helper/unwrapLPs"); +const { sumTokens2, nullAddress } = require("./helper/unwrapLPs"); const tokens = { polygon: { @@ -48,12 +48,19 @@ async function baseTvl(api) { ]; return sumTokens2({ api, tokensAndOwners }); } + +async function apeTvl(api) { + // `0x00000000000f7e000644657dC9417b185962645a` is gTrade's own version of wAPE + // All trading and depositing happens in native tokens and held in custom non-rebasing wAPE + return sumTokens2({ owner: '0x00000000000f7e000644657dC9417b185962645a', tokens: [nullAddress], api}); +} // node test.js projects/gainsNetwork.js module.exports = { hallmarks: [ [1672531200,"Launch on Arbitrum"], [1705553229,"Launched gETH and gUSDC"], [1727650801,"Launch on Base"], + [1732233600,"Launch on ApeChain"], ], polygon: { tvl: polyTvl, @@ -72,4 +79,8 @@ module.exports = { tvl: baseTvl, staking: staking(['0x28efAa11199DAF45AA8fBf95f920e5bc090DCbF3'], '0xFB1Aaba03c31EA98A3eEC7591808AcB1947ee7Ac'), }, + apechain: { + tvl: apeTvl, + staking: staking(['0x6dCD75474F9BDE2793cb3Da00b8959fb27BFa9d5'], '0xe31C676d8235437597581b44c1c4f8A30e90b38a'), + }, }; From 0e6da5074a3ee183fc08217cb929554881285a00 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:52:36 +0100 Subject: [PATCH 1234/1768] track wagmi #12478 --- projects/wagmi/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/wagmi/index.js diff --git a/projects/wagmi/index.js b/projects/wagmi/index.js new file mode 100644 index 0000000000..c53c149e50 --- /dev/null +++ b/projects/wagmi/index.js @@ -0,0 +1,15 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokens } = require("../helper/chain/ton"); +const { getConfig } = require('../helper/cache') + +async function fetchTvl(api) { + const res = await getConfig('wagmi-ton', 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=wagmi') + await sumTokens({ api, tokens: [ADDRESSES.ton.TON], owners: res, onlyWhitelistedTokens: true, }) +} + +module.exports = { + timetravel: false, + ton: { + tvl: fetchTvl + } +} From eb15d42d2f1d197e862ac782cb1a752f00fa5b13 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:07:52 +0100 Subject: [PATCH 1235/1768] Taraswap (#12484) Co-authored-by: DevZi1la --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 7 ++++++- projects/taraswap/index.js | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 projects/taraswap/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 06c355b3f3..b69948ef65 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -314,6 +314,7 @@ "sx", "syscoin", "taiko", + "tara", "telos", "tenet", "terra", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c358488c5e..3f638cfe4a 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -76,7 +76,12 @@ const fixBalancesTokens = { }, bfc: { '0x74B73Fd2eE237e9219dF30dfFDB206D237cbFC00': { coingeckoId: "coinbase-wrapped-btc", decimals: 8 }, - } + }, + tara: { + [ADDRESSES.null]: { coingeckoId: "taraxa", decimals: 18 }, + '0x5d0fa4c5668e5809c83c95a7cef3a9dd7c68d4fe': { coingeckoId: "taraxa", decimals: 18 }, + '0xc26b690773828999c2612549cc815d1f252ea15e': { coingeckoId: "mountain-protocol-usdm", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/taraswap/index.js b/projects/taraswap/index.js new file mode 100644 index 0000000000..08675afca6 --- /dev/null +++ b/projects/taraswap/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3'); + +module.exports = uniV3Export({ + tara: { factory: '0x5EFAc029721023DD6859AFc8300d536a2d6d4c82', fromBlock: 10674828 }, +}) \ No newline at end of file From db05da06be12d4918a0b20af0b401a80f0b2ed45 Mon Sep 17 00:00:00 2001 From: CodingPeter <42434849+zhaowei666@users.noreply.github.com> Date: Fri, 29 Nov 2024 00:11:05 +0800 Subject: [PATCH 1236/1768] feat: Add Chakra chain (#12476) --- projects/chakra/index.js | 10 ++ projects/helper/bitcoin-book/chakra.js | 199 +++++++++++++++++++++++++ projects/helper/bitcoin-book/index.js | 2 + 3 files changed, 211 insertions(+) create mode 100644 projects/chakra/index.js create mode 100644 projects/helper/bitcoin-book/chakra.js diff --git a/projects/chakra/index.js b/projects/chakra/index.js new file mode 100644 index 0000000000..565631fb6d --- /dev/null +++ b/projects/chakra/index.js @@ -0,0 +1,10 @@ +const {sumTokensExport} = require("../helper/sumTokens"); +const sdk = require("@defillama/sdk"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + + +module.exports = { + // methodology: `Total amount of BTC in ${bitcoinAddressBook.chakra.join(", ")}. Restaked on babylon`, + doublecounted: true, + bitcoin: {tvl: sdk.util.sumChainTvls([sumTokensExport({owners: bitcoinAddressBook.chakra})])}, +}; diff --git a/projects/helper/bitcoin-book/chakra.js b/projects/helper/bitcoin-book/chakra.js new file mode 100644 index 0000000000..ea6ecd148e --- /dev/null +++ b/projects/helper/bitcoin-book/chakra.js @@ -0,0 +1,199 @@ +module.exports = [ + 'bc1pxl0qkdw4a3k9pmuj4nmq4ukx0vjl08trglj8t7cu47yel5zq2sdsyg2wmx', + 'bc1pnftjkef9uzqzzxh67370jd9hwyceq29z77flla46nuxml3ca9k2qt8mdk2', + 'bc1pp9jsp9gd42z0209jenkp60lh5ejgfxgjwxp3tfexcfqu5pcfzw8qsen4x2', + 'bc1pj8mqr8rkufs4lahnplfqsvpwly8d0uy7cfamx8e69xwwnklk2jqqcaradk', + 'bc1przagcuq9w7g82ct60vfkgkugn7pfc99m8254ejl84pajhvd6q0qsn20mcv', + 'bc1p4zq63urdn0kwazluez8ahur6pfrgyztwn2vpjyy8350j8fc9zj7qssxqz3', + 'bc1pj2ft77hjanus5sp5upv20hdv35yajnh8txzct7n2ydg3pd3a6rdqpcn4ug', + 'bc1pp7rtha88ja0fmy200vzml26gztjm96sy0cu8fr5ncquy7g8dv4zqpkl2w9', + 'bc1p7pg8yvkc2qz8d05734lhcm629khel40p3l0x44tuuj0dwgcazzqq30pegg', + 'bc1p7tvenf74kyrnwfn5rhrgky5f8m5dk2hs78m47yxejtn7xjslk80ssxxar3', + 'bc1pqa00um7l0vxe6a082vx6vqtv2zj7e5pmagtr9z7aumgpyha0yces56vyq6', + 'bc1p8ql5x9s4jfcysqrfdy4dz37v27n33rzk84hs2qyvsr4wc0qhg9qshmu6ds', + 'bc1pvyupae6aahseapcpwzudx9ztmcve8ajqeveumvzypjssemzuvczsespanu', + 'bc1pd5w73c9w2cfaktxfytd5lysnk5dasrp6snndrkgzkwah03mmy8ussg5w4f', + 'bc1pa5tnchz4hud3nez59u074l955syk09r6s2s7u6udl9hlc0tydjjqp8gvdf', + 'bc1p9lhx0a6ush7c8f3zvneyvu9cs4a5uhpeah9tu7tpn8qd0r040zsq8dq5x2', + 'bc1psa5w6puzv9tvqssqelu028khjwzqgtmd5hnjxdxssrce2ktjzs4qu3jcpv', + 'bc1pnyzmddgj8u7v9uxhjc0hd0nn2086s34aeq6m8tanljlh6saxcvfqtxmr3k', + 'bc1p6yc3sezasphs2ttp0eafypvj8ltq09lpjq508k2jwlxl244zdavq6l0k3x', + 'bc1pv8kpr3y93j4j9nvl6te2qvlqfce8zaw242tx4crzz45cq6m279jsdwhess', + 'bc1ptp4rkf58rcv0984qt8vlprkf9hfda7x6gde5gwgm3nmpejl6c4dsg9jkgx', + 'bc1pqhrhrl76qfyamanpptk76wd068wm2dakw843cvy4zll6wd9q9t5qremauq', + 'bc1pgfvr4mdcs6p2packv4demptah7ljjkgew2q0mykknhrdgn3s8lyq4vu3vv', + 'bc1pevu8e9dw86tcst69j3y0nmxfjk4ravjln2xf8yca9q99w4z9jgqsxux8ju', + 'bc1pqm4nnug236ux3057qjwpw9hapjzg2enhh0dqpujn5hdssthtwdpszj7u3z', + 'bc1pk238q3jm4ghsq4lafyvcy5mze0ufsm5d42haqekp0gak5cflsv9qnx0puc', + 'bc1ptag678du7exrv34pc4d47y98tzegse7n3njmv4k9grpjcxjckd7stn0ka3', + 'bc1pu0h93g6cvsua7ggmccqg2z0nm2ycrjwnuyndp37synyxvncmh0zqlk0sz5', + 'bc1pe8zfmgxtcf7ktv8n6276zr0ysr3w4lm9cauq7eu4vfgyem6mnxesxcuse5', + 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', + 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', + 'bc1q4nard6ndnh57xev095hqnrfh5lxxycwuewcwcc', + 'bc1qak5ch78tcpfmztcldgr5tlgnd4t59p6cuqjcnf', + 'bc1qn8gnv8y7u92tnqyzdnmtdvzyzszahn7js97jjj', + 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', + 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', + 'bc1q397395pz4ktvucdq7uj3jv424sx7ygm94kvfr6', + 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', + 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', + 'bc1pa7hk6q3sp66euxtvdvfe6xjskjsll7mpp3alm920xnr6jhy08dfscc6nrj', + 'bc1p7a4hwvvy44wt0mltkv4fmhuz5lt587ruqeyhvt5wp320304lhmdskkzh9u', + 'bc1pj2h9dgwn6lkgnhh4pckaj7a44mh6rnjcvnfpv76jlqh9hmltt8qq87qrsw', + 'bc1psqjef0lqvp7dvl3nr4dntk7m9yng4mp22yvkgqsl7utr7z4u9cwqffs44e', + 'bc1pnpv6gj9ufmq62jepc9uqey6yfzuzuksegkrt8ftnmh3fk42jdsksm7s0hq', + 'bc1p874e3rk8xs62pzsrpzxy986yf50k82ytcrdnrsvltdprcj3yp9rsz498je', + 'bc1pjthg04x7wvvq56znwkvfdw79vplprczp5dctpsnqx08jmurk7nuqtjx8an', + 'bc1p4pfgf8v540ay4297jwa07mnel85utw6slnjy94ax7h4j8t4zurys9hstqw', + 'bc1p2rd4z0avhftxxrwqgczwyr4jlr2exypdp9cnjup3wamwcm609zssv8znqg', + 'bc1pl3aff7d04ukpeeef2662rjf444ncf4g0u2mnepljddzz2jzw5yxsrjjyvc', + 'bc1pne6mtsu2f83yg9pdttpne095tnf3ekvrlx3wlajwn98tdv8xu79qmxmvpf', + 'bc1pzgwkmkkh0qdw6t67pasp49ydhmxekg385trdt529le32srk8zrdqrejtne', + 'bc1puhrvwrfjryfjq86lcx099d4lcdamml6snyqkqh7hfpn2rzdzc6fqzrkejj', + 'bc1phqgr25tert9u42glk22tgfqflw3vjfp5g54a8cu67japy0re96fsxd4er7', + 'bc1p77e4h9f3scelzut6tnq7lht85lqddcz4g0fu2zgrrr5yk4z4qlsq5f0a6v', + 'bc1pdxt4pr6y5cmzg6yd2e2fw9kwkguea33a9drqevdcz3mhmmjq08ls355all', + 'bc1pl0k0lggxhsnza2rm35enjy57f4tnqdcun7yuluw5p5vchlwdgt0sm3juyt', + 'bc1pmc8yrng60gmpa5uzm5d6hefwkeqgk2yr73mskuq8a6tu985cmt8sapm45p', + 'bc1pv869cl4sm6f0z5cdmfx4ndunzf3x2matgxhm9hmjuv2ntm4cpl2sa3qqvp', + 'bc1pd9e7njc90mdv7jxffq9kjs4mzqhpcl497p4qf48uuw0qc4jx5vgqlql5l0', + 'bc1pwam7788m42tqku5xg6nkntety4fe72turs2h3m8sh7dct3jeqlhq3pf0wf', + 'bc1pwzqwvzsw7260sxxu0pmqwjv2z0dgv6urqv3ya5rgequqlf8ltxusk7jntv', + 'bc1pp4ktfjves5e323pkrd4d50lcrl558u7afdfe6awtmeucvcyrv6dquugft7', + 'bc1p6rp4yszvcd5c2ntkzt6xejr2zv45y0n92j6kfm3u66vdzhg6gu2sq8g3ax', + 'bc1pacacjt6js4n65qwwms0x0u6u8htwdxe3tmwfvpehypzp08js88rsl48zve', + 'bc1p4xuceqfytlqrt2clsm6v2pe6uuvxsy5xu320mhtld8xa3jvj9x2shj8agr', + 'bc1pvur07pveccdu6a5rqh7u0dv2pg2aa8zktlelwslg6krm32a0h7hq28075u', + 'bc1pdstx9stfytpu52cj4el3ex6hl22n8yrlc803kxcs5ztrqf479wzqaqzzx2', + 'bc1p75xmu0gc3j0wxx8ve2r6004q9m5jskmu8tszdh28d2v0n8ldewzqhjrtnr', + 'bc1p63dm73sfg8qx7eadmqpj92pjfgg8fpfz6vjnr34sd8lrhqtwx8es68nrrz', + 'bc1pt46ngxcvhx96pr2pr2efxdjrez92jzgfqyml7sj69d6cl87q709slmkj3g', + 'bc1py48jd2xlxz2xk9a0tga4f03velnd6xffg5tnkldlkku4ud356r3q0fpjk8', + 'bc1pny0uj4f2hn2hgfz86jhvzj0nr98sz5senrcfgf4g3mugy3r3zl5sywhkgy', + 'bc1pgemhw9xx493wl9h2eqwgvr732ewe9dk9zfq3exzkaua0hj33a5rsu928nx', + 'bc1px5s3v0rpsuh2msuj6eft24jhkqkyxj0jpzw4vs52ude46nf6q7qsrkxavv', + 'bc1pfchlhr0rl5ruhtjst99ft9vdsjhuegz3j3hvqk3e3lnmwwzk32eq6tj2mw', + 'bc1pu9h2vwp4a5jta9r760msfta73mrep7d8gc75xwawjxx8nhvmluuqywg58k', + 'bc1p64w0hxsppgpmewk80fy5c7p9f652v3plxjf8kpkan5nl0tykeyzqerqjkk', + 'bc1ps0enq83ssc5xflgddh7w7usyapn80r9r62c8zhezx5gcwkd95g6sq5zff3', + 'bc1pz7f9mfhym4qts7uj8yucpcwu34xz44v5khemanl89g3c0r3sa6jqkvczrx', + 'bc1pnfn5x283red2kfthg42682wrmsm8lcgznfszhz52hmele906ejsqu2m6cx', + 'bc1p2duk8yuuxy70kclyupm968mll5ep5drmfa0umtmz3aymq5gu6avqgt9rcm', + 'bc1pqfhjgytf39urds4z5ptp2a5upmtlz0lux05wq480rvcvx9k94kts9qmedv', + 'bc1pl6zy43j8me89c9jqygsahu4sq89yge9ve2kz0asumwnkmk4373ws0h3tt7', + 'bc1pvaazyyuwk04fq6skxnkyh3crxfeepzzctuznzmtzyjp6x3klq6lsfa8ma4', + 'bc1p3g8n3aj52225dym3jmypg8u4cf3x3s49c5rzjvj6ygtl82v42qaq76qqa6', + 'bc1pgs95cjhpq5uedepr6ghvhx9upwdmrq3c67xt2drhkv2etjjlqnsqvxsu69', + 'bc1p8r84f5a6vvtl0gedshjzp4rv5mx88ra3etqch9du65fmqwglu0zst80e44', + 'bc1p348nh5crmn6zj66a9k4cjmrlrkszj4vaq33sgr6jzhtpyh2qcezspgep7h', + 'bc1pane2m0z8ymreh67xkathhrst8jm4ljw53nkq3da23fmmf6gm522sf03t55', + 'bc1pdhc4g25eysun4st2rhhfsusnk4ekhxp85xr2x4uq859tyxnap94sua2k4h', + 'bc1phzxznmd5yqp7x07kkes6q7sjcalnyd9pjddrfhywwv23ca7994jquww9fx', + 'bc1p7ekf7lt6f3alzzh8gkyjrv0xthp8r9gz28qa4wpam4lv432wn8nquwpuan', + 'bc1p7laa0uystmcyaekgmfy2767ndj6s4y86szdm6m8fta7nv4plywmsx5ln58', + 'bc1pa0xe6ahttju3kfr63fq4vmg67xy9sdw2enwsvmmjk8aem70mc5esh7k8et', + 'bc1pv98t2u3tx493ly278hdrkh4spdxe6a8hk9ev94ku5kf062eh7rwswdqm5g', + 'bc1pyzw7rk30ttw3yc36azwmmyfekyw8vpx7cj09has5xy76sv8gzleqdatxdg', + 'bc1pyjcncf6jsz5xcqmw6jhdvay025gygle6r6arhpu7dkpqufh9c9wqyvprju', + 'bc1pu5wre7gar0d8tgslaeu5epj62yvx667wuaun2n589nx55xzf42csg34qsq', + 'bc1plpjxvkkhj9qfuqnrjtnyvwxfm9j4rdq4jtwhu34anm8etzkyfc2s94vzw3', + 'bc1p0tnltsu0qz29xluwntvvcr29aw230tdhqygwg5mru8qqhdvw580sqlznpx', + 'bc1pswxs924q5t24yvvemauja7dvwlduz0nutkq6eu0ug9ptm74kcyys4hrwpe', + 'bc1pdcgcjztkqgnrhnm9xqdv87qtqhtr7vxdvpmpux8xzefeypqw39vs9a5z9j', + 'bc1pkkn0trywnslz5datc3lz087rgzd8z9644svwykpl2983lzkw9xyqspd2d5', + 'bc1pl30rp47rlxrfrtlplzz94kt7g2cr9lhjcygwfjp3tqqt0td7arwq5e25wg', + 'bc1pp05cfg3xdueaqvrl3kdcw3p83e7jy8tm8l0taxzhssmrv9tjlhqq5qkjm8', + 'bc1p3puq5p5yuz0jpy6equy7rwd2t28wzau8s5s7cwqm9n4w4nhd0tqqn6jjtj', + 'bc1p57j2tjs0ypujgjkdufur6xecmcvdte8k8tn9y6sxu0retxrn7hqqj6ncdf', + 'bc1pqhewzz5mgu4c90lkekp40ncnxtn9eleuvyk92u4l7djq69nwqyuqluwzcj', + 'bc1prx9e9mcwgp4zy9vwcp8dypgmgmese5rjhjeg9y5kxty3ez3lmk8s409uc3', + 'bc1ps0266nkjsz8wu97c927hntcmavzt6xfjve4uzehql9vh7un6cr4q6r06jh', + 'bc1p5337zpuhtpeccnq2ky7lgwzz4m8uwrvs785l4afflj2722x0e5hq5sjdn5', + 'bc1pjnv5znssndchjz3qst7ln0lvsqpyw3eml5pczavd465de9uktzgsvvftwr', + 'bc1pmq3y9hctw5w0j4382kh92j5yckjpuy66vy2u8q8vq425rk03x6qqpzdvh4', + 'bc1prx5de0k5hzgn85yq9mumv9pxnygey55v5fj3qd0234av38d0ek3sjk5k4m', + 'bc1pz63qe35d25ve7nztqdfy4x764zv9dfa33qqym3050p6yh6mk7xfsyk036w', + 'bc1pt4e9zqn3ulhztv5zv2xdsuen64mgn0krry27m7l5t6jsqaj33puq76yswh', + 'bc1pmf6sk2vlrjxrk0mm45q8dg78600czek4g38py9mt53gqt7dduvaqaacks5', + 'bc1pfh7yx8ks4e40rzsg6c5qdkax56ar9mpc7jflxkj8qgkgf6qnqtys32qylh', + 'bc1pzjsy40ch0yrh88ugdxnxd3za79qjkl077vdp4tazpjalsulzqy0qfx4t9n', + 'bc1pmqe4pz8em9djs55rtwupm63ksphlea7fpresr7vhwdgfwq9dln9spl07c7', + 'bc1pq6wxqycalncq6uskj47s5azx7sjl9q5gegfzyyunhu6qn66gppwslu3jwk', + 'bc1p4mv3p55y55jsqtx68dg7swu676mg4vk0zxatvddekyqjdf99lh6qw746z4', + 'bc1psuv33g5ae2alnyxngp36ucaf99q858d8kqwjl2zx2gz2dfh4gtaqz4r0an', + 'bc1pmavfsx7wthpr534paphewspktgkzjvg8986atg5lwsj0h5yjvw8qvlmckh', + 'bc1p5y9m4fhrwh2aruaf92vqamp296p376n7zd50hfll0glmf58detdsh47n7n', + 'bc1pudw3zmahe2qk43gquwja24dw5jj08sem2pjqtwqwddzrfhkw2djqhrjfkp', + 'bc1pdps6wc5aesqp496lpum78tvk03v7a0sx6jutj3raev7hc2gd4rtqyl8mr8', + 'bc1pa38cglkzzskdch4ax6z6vl5da90ca0lv5zt6lfqasljec60hh7mqvade8n', + 'bc1ps9xkycj4yv0fmsnql02zhf45ymkfays3p795ljpydp50qrwdl83s930nzq', + 'bc1psgt2v7r78zcuyhnr4n5p77zrnvf8eej3knkqg5dm62nzx4rxwftqyajluu', + 'bc1pxyhz7uky9jc62uahcyw932hx4cayk7vmy40axhctypqhee7xqtssx2tn0s', + 'bc1pqx2yk4kjp4vavadptf0vuk0qy9l6xejwkhsjcgmp4d6jpz9xq48s8murmc', + 'bc1p4jjzjylj5j9z0kznpgf8n37grrax9q7hch9zweclm54zjtk3t4jq9lmjty', + 'bc1pj7f85h0905m4k4s9k3u3pnderhh3kqqscmzpxsss4prm2v2x7upquezlk7', + 'bc1ppgqr4p8x9j0falssfppv3t9lc6e3zm464vs3sps7hqqguplxsh8qa2uww8', + 'bc1pne6n0a62cefy82wrwlkg3nasl6p0edtteh2vtpyjs8epe9tfqtjqfy5tdt', + 'bc1pzgc3djs00crekqlpm5nrfefydhkwx9k7n7dd8ldk4y09jcdush9svt3gt3', + 'bc1ph02t9cy6xdqtq3y8eeu33mfqkcdnhd7x72mwmxfwlhg2v4rn6a2qnsprrg', + 'bc1pm6ygunqn5frxs4rfcars6fhyx3ekh2aetucvsdp6sq9ktary2veq63lyrh', + 'bc1p4pzz9755vuty5u0w82d9k398h08dlm97nr67vp4pj0c2vr7kvzcs7lvt6h', + 'bc1p6p9wsa4xgxffem4pecnsv9xqdnkwfglq9nmz23a55dcvjahpylasn4x405', + 'bc1p7uc7yqew82fzlhfrx06pcfntavza7n8kr0mk4dl0y8vc2vjngzfqacu2jn', + 'bc1pkze8ew0fmr55ldwerc0nf8u78h5fryg0c8ft7k9eh8vwtt604f3sd2d9ls', + 'bc1p7csnymmm29h45r25lw28vjq6nvdu9245fyzlm9ls8kdxz65p7n0q5h7lzs', + 'bc1pkfjen0lj4t4tp0ff4x3vsj03yxye98c5zk60ju559rmcned8nw3q4vtqeh', + 'bc1pmdfv4u5m53ad66ewz4jm6dphgvf9x0sdaxqeygdszwht67r6yc2qtyuz94', + 'bc1p8u9nu5tqdwj2agler7yfxyjvwawpg99qq57yxgkl6uzalr4mtems47te9z', + 'bc1pysf2ulajuh668agfglzc7hxl4hgng6suk5u27cgadvvf2hx7ckuq0ka3d7', + 'bc1p50jtsv2jjnsf62sepmksa43pc07feg8v8ez5q62yskdkly3ukqtqvktt8c', + 'bc1prd5ltcsu4rhmwe3wawpeudtzpt5f7xcnp8yla3fxt5g2l5sz7f7sr8p9t5', + 'bc1p3r59km6mg760jgcpzftz3ckve6w8g5qv0nnte3ajw0j6epxhhhhqzqkmym', + 'bc1p5qp8dsa3mg7q2jxudmez6q83ceu86nduwrddfy0slu6ze3dcrq4qfhp0yv', + 'bc1pq6wxqycalncq6uskj47s5azx7sjl9q5gegfzyyunhu6qn66gppwslu3jwk', + 'bc1p83ggjdaaj6dc8davgc8kykdj43l6dppa255eskc0k9k7uczaegts3hvtns', + 'bc1pgrt28ph0vky6yhrjqcv74kckfkd753qms26lncdvvlkn4xudzgts9d0kqp', + 'bc1pthefst3f4fqnx6ux6klspat7cz43srganhmcsv6jkmua3gjx0jzsvfye0g', + 'bc1pe5yl3ps0q2k53t8td8fsc2d9f8jy47qa0tsk3fnpfp3ws8r92flsz276we', + 'bc1pxxmf0hm674e8k4ck0ej4thf2v4t2879qdkh28x8ncrgkxgxjhzxss3mdnf', + 'bc1pmnvhxwmghhcl5ucn4y4706eenn4t8sls80wul6r8lpamvz7nmgas7a7yjl', + 'bc1pfxzh6826f7m58fv2cw88eh3h4247rst6wmadrguaqu6cz3ahkelqgtvwc8', + 'bc1pfdcwmlwd6uf0v2xqu9mv6ngn643xvjnvl6x98upc2q62u234mr3qeqm8dq', + 'bc1pqs8u7mggrmu9w674wwm0vutvvj6fn6ptajwes03n7enshfq44s8sd0thfq', + 'bc1pqykt8748q4tkhggyqf0qgj63nupfxf0cu0c39gv7gyfu4sxkz5xqfpxlm0', + 'bc1px76g80nknyqd7jtt5028l02r0wa3dcn6m4za9hqsmjv20l3enqwqjw3wpy', + 'bc1pn9ch7e7rnsdea82jkmtdw7yn65wqarvgd46cvu5kzpxprmkvsq2qkfrtja', + 'bc1p5zq0ds0zz0yjpn39u4klj7na99wqc6v2ks6xe3c29c4r5d47yx8svn6djm', + 'bc1pefv4crs72muveu2zepwtjvh0nt7kz8f8lgatfvmvd0uskcng76zsmjqnyl', + 'bc1p5fu4x8yavvnqnk8a7tladh00f950l4y3xssgh6fj9qmdgh56aulsvee6eu', + 'bc1pfshdwlsaxa8eawtjjwr7wgpy3m0ta3y5m467mhtwkpv0afw3cvhq5alnj9', + 'bc1pkujnjxlyt5amwt0mru4nkhc8zgdf9evlyrqxtuc7qjwhrysqvy6q6khlw5', + 'bc1p73cyqn7ktdgukgap6h0w9dt4su0npquv2er8t6mwswty2040u9nsfa650f', + 'bc1punshkj7yqdmega5uw4tktun0nqnhzalu4g3l598u4gz0xxfuv2vsqr5ua2', + 'bc1pgn6ge3wnp345rmlkyzpakw48gvm66skywrmdhfg36mp5agpjrfksf45crf', + 'bc1pxa8pjexjhkn9hxf7s3n94m5jkdpazl228x62marwnwpc4r984avqfxhaet', + 'bc1ppwleazev9hquk5dy3ald46st8qjcy5v5x9a2gwm26tmdy5jheyvs66j0n5', + 'bc1p2pmrvmqqjzqwfq756cwnkj26244zqqysce3200syku4jasv7zcks6seq03', + 'bc1pw9htynya2wwgnaw04un9aceq8vlk84dnx7ajgpudy4mkl63fvllsyyxej3', + 'bc1p4npude5v5s6ru2dm670j8rt6g0f94vve8ug3nfa7yd2qrdqhqtwsxgkuan', + 'bc1p2du775tr8e9qg8jv983nj4vr86k43vmt4zehlr9dswe52xreulpsyjnyup', + 'bc1pgrdzruuv3ncnx5g66w6sxrztf8lkz3ns9k3kl5cdvpqj9vq0mjkq62ala2', + 'bc1pzzrraenqjjx9xkpjjq7plcek83dr3ys4fhvhx00488dy7snndursf2lwg0', + 'bc1pckplra3ysgdax8uc3ctw7whqj6y9jsn82ssrg538vl49v7zp384qpc8h0j', + 'bc1pn65nupzatpdqz5prfew5u5zkjplrr4dlr9666f5da9whju6027nqpeyy7y', + 'bc1pmenfjywpsp3n83zv2sq4402m4cad27rq3zcawrylv7jpsgxt8f0q52cvak', + 'bc1pl9f5vdkhutd9ksv3aehq84s7c626l33ukmsndlhjlcv7naejczqs3vamlz', + 'bc1p6veqam82ks6t8lnh9rmwh8c6p6qhfc6rnhd0809nq4j6n887payqy3x2da', + 'bc1py37ux5zjt5g8q3h7qx0vs6rw9gxtdj5se3m76szs8wwqf33hxels7hclld', + 'bc1pqh5fzeaghuas5y79z6cg2kg6sqj25ty8az93m65a8pmtcskmlcss47zfun', + 'bc1pxgw4nmrqarqg6cfk87zzxdvrcq3g35en8dve8sdsjtcpkpsar0rs2yf0qg', + 'bc1p8fudewhlw54rzhgw27nltk8y3xl2kq3m7xxjtp2js4xy6dv7p3vsmhzdaw', + 'bc1pxn9whp33rs4x46yv8rux8049ehc6e0ks7ganntjc4n6u4q7k7uasv9avn3', + 'bc1p26f6f3k4dlzarvelzypuvxfvn90le0svry05l878ztf8rukup0yq793tzt', + 'bc1p0nahvgu0e46mtg40eddverknurtjnrufxduzmm2emek8nmksstpqdyelw3', + 'bc1pe05ahukeuq9kg9evg9fvs34kquku4dmetack79k8l8srlm2r9x6sm0caz2', + 'bc1pkpk5fzr9enyc8zyasl3g3y7fyz5asrqg56ycsfpgw0w3x7p954xsdqfs4p', + 'bc1p942zmt4gmc0j6uaemy90zn0cxfr27zs8s8u2ln3ctu7sdcrvplesv0kqpw', + 'bc1pr8e0qy7ms9vu8k3g9ldqsudhmqedsdmd74yxgphgs29gf0nges7q26f5mg', +] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index ed023233e1..67c0ba8f20 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -85,6 +85,7 @@ const indiaCovid = require('./india-covid.js') const wooCEX = require('./woo-cex.js') const bitlayerBridge = require('./bitlayer-bridge.js') const arkhamExchange = require('./arkham-exchange.js') +const chakra = require('./chakra.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -185,4 +186,5 @@ module.exports = { wooCEX, p2pb2b, arkhamExchange, + chakra, } From 004c0006caa9bf650a96163b862cb583359c6b31 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:14:19 +0100 Subject: [PATCH 1237/1768] minor fix --- projects/chakra/index.js | 7 ++----- projects/pstake-btc/index.js | 5 ++--- projects/xlink-btc-lst/index.js | 3 +-- projects/xlink/index.js | 3 +-- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/projects/chakra/index.js b/projects/chakra/index.js index 565631fb6d..da04fa5299 100644 --- a/projects/chakra/index.js +++ b/projects/chakra/index.js @@ -1,10 +1,7 @@ -const {sumTokensExport} = require("../helper/sumTokens"); -const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/sumTokens"); const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') - module.exports = { - // methodology: `Total amount of BTC in ${bitcoinAddressBook.chakra.join(", ")}. Restaked on babylon`, doublecounted: true, - bitcoin: {tvl: sdk.util.sumChainTvls([sumTokensExport({owners: bitcoinAddressBook.chakra})])}, + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.chakra }) }, }; diff --git a/projects/pstake-btc/index.js b/projects/pstake-btc/index.js index 5d93995322..3afcdbefe2 100644 --- a/projects/pstake-btc/index.js +++ b/projects/pstake-btc/index.js @@ -1,9 +1,8 @@ const { sumTokensExport } = require("../helper/sumTokens"); -const sdk = require("@defillama/sdk"); const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { - methodology: `Total amount of BTC in ${ bitcoinAddressBook.pstakeBTC.join(", ")}. Restaked on babylon`, + methodology: `Total amount of BTC restaked on babylon`, doublecounted:true, - bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: bitcoinAddressBook.pstakeBTC })]) }, + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.pstakeBTC }) }, }; diff --git a/projects/xlink-btc-lst/index.js b/projects/xlink-btc-lst/index.js index 2092d3811a..cb798ae1e1 100644 --- a/projects/xlink-btc-lst/index.js +++ b/projects/xlink-btc-lst/index.js @@ -1,9 +1,8 @@ -const sdk = require("@defillama/sdk"); const { sumTokensExport } = require("../helper/sumTokens"); const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Staking tokens via Babylon counts as TVL", doublecounted:true, - bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: bitcoinAddressBook.xlinkLST })]) } + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.xlinkLST }) } } \ No newline at end of file diff --git a/projects/xlink/index.js b/projects/xlink/index.js index e309a6e272..f031befd7d 100644 --- a/projects/xlink/index.js +++ b/projects/xlink/index.js @@ -1,11 +1,10 @@ const ADDRESSES = require("../helper/coreAssets.json"); -const sdk = require("@defillama/sdk"); const { sumTokensExport } = require("../helper/sumTokens"); const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Staking tokens via AlexLab counts as TVL", - bitcoin: { tvl: sdk.util.sumChainTvls([sumTokensExport({ owners: bitcoinAddressBook.xlink })]) }, + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.xlink }) }, ethereum: { tvl: sumTokensExport({ owners: [ From c4084ef7a7e6bc31a4223beb8f81af434d1cd364 Mon Sep 17 00:00:00 2001 From: Joel Mun Date: Fri, 29 Nov 2024 01:19:51 +0900 Subject: [PATCH 1238/1768] feat: add STRK staking to zkLend (#12466) --- projects/zklend-strk-staking/abi.js | 19 +++++++++++++++++++ projects/zklend-strk-staking/index.js | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 projects/zklend-strk-staking/abi.js create mode 100644 projects/zklend-strk-staking/index.js diff --git a/projects/zklend-strk-staking/abi.js b/projects/zklend-strk-staking/abi.js new file mode 100644 index 0000000000..c15975632d --- /dev/null +++ b/projects/zklend-strk-staking/abi.js @@ -0,0 +1,19 @@ +const strkStaking = [ + { + "type": "function", + "name": "get_total_stake", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u128" + } + ], + "state_mutability": "view" + }, +] +const strkStakingAbi = {} +strkStaking.forEach(i => strkStakingAbi[i.name] = i) + +module.exports = { + strkStakingAbi, +} \ No newline at end of file diff --git a/projects/zklend-strk-staking/index.js b/projects/zklend-strk-staking/index.js new file mode 100644 index 0000000000..ef463027bd --- /dev/null +++ b/projects/zklend-strk-staking/index.js @@ -0,0 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { call } = require('../helper/chain/starknet') +const { strkStakingAbi } = require('./abi'); + +const stakingContract = '0x00ca1702e64c81d9a07b86bd2c540188d92a2c73cf5cc0e508d949015e7e84a7' + +async function tvl(api) { + const stakedAmount = await call({ target: stakingContract, abi: strkStakingAbi.get_total_stake }) + api.add(ADDRESSES.starknet.STRK, stakedAmount) +} + +module.exports = { + methodology: 'The TVL is calculated as a sum of total STRK deposited into zkLend\'s staking contract', + starknet: { + tvl, + }, +} From b3940abf29e4372d009a34f3ceb9ebf9c9da8a36 Mon Sep 17 00:00:00 2001 From: fico23 Date: Thu, 28 Nov 2024 18:51:23 +0100 Subject: [PATCH 1239/1768] AERA Finance: add esXAI & esXAI staking support (#12460) --- projects/aera/index.js | 65 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/projects/aera/index.js b/projects/aera/index.js index 270e3e3b4a..0b7c7ccc6a 100644 --- a/projects/aera/index.js +++ b/projects/aera/index.js @@ -7,6 +7,7 @@ const AAVE_ORACLE_NAME = 'AaveV3PositionOracle' const LLAMAPAY_ROUTER_ORACLE_NAME = 'LlamaPayRouterOracle' const GEARBOX_TOKEN_PREFIX = 'Farming of' const ARRAKIS_TOKEN_PREFIX = 'Arrakis Vault V2' +const ESXAI_POSITION_ORACLE_NAME = 'EsXai Position Oracle' const config = { polygon: { @@ -92,6 +93,9 @@ const config = { ], cometReward: '0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae', arrakisHelper: '0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6', + esXaiPoolFactory: '0xF9E08660223E2dbb1c0b28c82942aB6B5E38b8E5', + xai: '0x4Cb9a7AE498CEDcBb5EAe9f25736aE7d428C9D66', + esXai: '0x4C749d097832DE2FEcc989ce18fDc5f1BD76700c', vaultFactories: [ { address: "0xaF2762E1F75DeCdb8d240576e7A2CEc1A365cD46", @@ -131,7 +135,7 @@ const config = { }, } -module.exports.methodology = 'Counts tokens held directly in vaults, as well as aave and compound positions.' +module.exports.methodology = 'Counts tokens held directly in vaults, as well as all managed DeFi positions.' module.exports.start = 1682619377 Object.keys(config).forEach(chain => { @@ -143,6 +147,9 @@ Object.keys(config).forEach(chain => { const COMET_REWARD = config[chain].cometReward const ARRAKIS_HELPER = config[chain].arrakisHelper const vaultFactories = config[chain].vaultFactories + const ESXAI_POOL_FACTORY = config[chain].esXaiPoolFactory + const XAI = config[chain].xai + const ESXAI = config[chain].esXai const vaultCreateds = [] for (const { address, fromBlock } of vaultFactories) { @@ -177,6 +184,8 @@ Object.keys(config).forEach(chain => { const llamapayRouters = [] const gearboxFarmingPools = [] const arrakisVaults = [] + const xaiPositionVaults = [] + const esXaiVaults = [] for (let i = 0; i < vaults.length; ++i) { const vault = vaults[i] @@ -187,22 +196,37 @@ Object.keys(config).forEach(chain => { if (assetName) { if (assetName === COMPOUND_ORACLE_NAME) { compoundVaults.push(vault) + continue } if (assetName === AAVE_ORACLE_NAME) { aaveVaults.push(vault) + continue } if (assetName === LLAMAPAY_ROUTER_ORACLE_NAME) { llamapayRouters.push(assetInfo.asset) + continue } if (assetName.startsWith(GEARBOX_TOKEN_PREFIX)) { gearboxFarmingPools.push([vault, assetInfo.asset]) + continue } if (assetName.startsWith(ARRAKIS_TOKEN_PREFIX)) { arrakisVaults.push(assetInfo.asset) + continue + } + if (assetName === ESXAI_POSITION_ORACLE_NAME) { + xaiPositionVaults.push(vault) + continue } } + if (ESXAI && assetInfo.asset.toLowerCase() === ESXAI.toLowerCase()) { + esXaiVaults.push(vault) + continue + } + + if (assetInfo.isERC4626) { if (!erc4626UnderylingMap[assetInfo.asset]) erc4626UnderylingMap[assetInfo.asset] = null erc4626sAndOwners.push([assetInfo.asset, vault]) @@ -212,16 +236,23 @@ Object.keys(config).forEach(chain => { } } - const [underlyingTokens, vaultErc4626Balances] = await Promise.all([ + const [underlyingTokens, vaultErc4626Balances, esXaiVaultBalances] = await Promise.all([ api.multiCall({ abi: 'address:asset', calls: Object.keys(erc4626UnderylingMap) }), api.multiCall({ abi: 'erc20:balanceOf', calls: erc4626sAndOwners.map(x => ({ target: x[0], params: x[1] })) }), + api.multiCall({ abi: 'erc20:balanceOf', calls: esXaiVaults.map(x => ({target: ESXAI, params: [x]}))}) ]) + + esXaiVaultBalances.forEach(x => { + api.addToken(XAI, x) + }) + await Promise.all([ processAaveTvl(aaveVaults, api, AAVE_POOL, AAVE_POOL_DATA_PROVIDER), processCompoundTvl(compoundVaults, api, COMETS, vaults, COMET_REWARD), processLlamaPayTvl(llamapayRouters, api), processGearboxTvl(gearboxFarmingPools, api), - processArrakisTvl(arrakisVaults, api, ARRAKIS_HELPER) + processArrakisTvl(arrakisVaults, api, ARRAKIS_HELPER), + processXaiTvl(xaiPositionVaults, api, ESXAI_POOL_FACTORY, XAI) ]) Object.keys(erc4626UnderylingMap).forEach((erc4626Asset, i) => erc4626UnderylingMap[erc4626Asset] = underlyingTokens[i]) @@ -238,6 +269,28 @@ Object.keys(config).forEach(chain => { } }) +async function processXaiTvl(xaiPositionVaults, api, ESXAI_POOL_FACTORY, XAI) { + if (xaiPositionVaults.length === 0) return + + const pools = await api.multiCall({ abi: abi.getPoolIndicesOfUser, calls: xaiPositionVaults.map(x => ({target: ESXAI_POOL_FACTORY, params: [x]}))}) + const vaultPools = xaiPositionVaults.flatMap((vault, i) => pools[i].map(pool => ([vault, pool]))) + + const [bucketTrackers, stakedAmounts] = await Promise.all([ + api.multiCall({ abi: abi.esXaiStakeBucket, calls: vaultPools.map(x => x[1]) }), + api.multiCall({ abi: abi.getStakedAmounts, calls: vaultPools.map(x => ({target: x[1], params: [x[0]]}))}) + ]) + + stakedAmounts.forEach(x => { + api.addToken(XAI, x) + }) + + const bucketWithdrawables = await api.multiCall({ abi: abi.withdrawableDividendOf, calls: vaultPools.map((x, i) => ({target: bucketTrackers[i], params: [x[0]]}))}) + + bucketWithdrawables.forEach(x => { + api.addToken(XAI, x) + }) +} + async function processArrakisTvl(arrakisVaults, api, arrakisHelper) { if (arrakisVaults.length === 0) return @@ -377,5 +430,9 @@ const abi = { "strategy": "function stakerStrategyShares() returns (address)", "underlyingToken": "function underlyingToken() returns (address)", "sharesToUnderlyingView": "function sharesToUnderlyingView(uint256) returns (uint256)", - "queuedWithdrawals": "function queuedWithdrawals(uint256) returns (bytes32 root, uint256 shares)" + "queuedWithdrawals": "function queuedWithdrawals(uint256) returns (bytes32 root, uint256 shares)", + "getPoolIndicesOfUser": "function getPoolIndicesOfUser(address user) returns (address[])", + "esXaiStakeBucket": "function esXaiStakeBucket() returns (address)", + "getStakedAmounts": "function getStakedAmounts(address) returns (uint256)", + "withdrawableDividendOf": "function withdrawableDividendOf(address) returns (uint256)" } \ No newline at end of file From 79f7c734a0d24b9c33386067b9e1d4681fc897bf Mon Sep 17 00:00:00 2001 From: Deploydon <96504831+Deploydon@users.noreply.github.com> Date: Thu, 28 Nov 2024 14:53:14 -0500 Subject: [PATCH 1240/1768] Added NFA.Zone TVL Adapter (#12486) --- projects/nfazone/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/nfazone/index.js diff --git a/projects/nfazone/index.js b/projects/nfazone/index.js new file mode 100644 index 0000000000..af81755201 --- /dev/null +++ b/projects/nfazone/index.js @@ -0,0 +1,21 @@ +const { queryContract, sumTokens } = require("../helper/chain/cosmos"); + +const nfaContract = "neutron1pwjn3tsumm3j7v7clzqhjsaukv4tdjlclhdytawhet68fwlz84fqcrdyf5"; + +async function tvl(api) { + const baseDenoms = await queryContract({ contract: nfaContract, chain: "neutron", data: "{\"get_base_denoms\":{}}" }); + const assets = baseDenoms.map(({ denom }) => denom); + return await sumTokens({ + owners: [nfaContract], + chain: "neutron", + tokens: assets, + api, + }); +} + +module.exports = { + methodology: "Queries the NFA.zone contract to get the supported base assets. The sum of all these base assets held by the contract is returned.", + neutron: { + tvl + } +} \ No newline at end of file From f07b6daaa71ca8f7aa41fb868f343302f0d655ed Mon Sep 17 00:00:00 2001 From: rohatin-codemelt <128687400+rohatin-codemelt@users.noreply.github.com> Date: Thu, 28 Nov 2024 21:56:36 +0200 Subject: [PATCH 1241/1768] Beam-Dex Adapter (#12475) --- projects/beam-dex/index.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 projects/beam-dex/index.js diff --git a/projects/beam-dex/index.js b/projects/beam-dex/index.js new file mode 100644 index 0000000000..98f9d2a3c5 --- /dev/null +++ b/projects/beam-dex/index.js @@ -0,0 +1,4 @@ +const { uniV3Export } = require('../helper/uniswapV3') +module.exports = uniV3Export({ + zeta: { factory: '0x28b5244B6CA7Cb07f2f7F40edE944c07C2395603', fromBlock: 5320498, isAlgebra: true } +}) From 970fd510f3f93d03b628c984156ecacdae248744 Mon Sep 17 00:00:00 2001 From: Deploydon <96504831+Deploydon@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:21:33 -0500 Subject: [PATCH 1242/1768] Added NGMI.Zone TVL Adapter (#12488) --- projects/ngmizone/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/ngmizone/index.js diff --git a/projects/ngmizone/index.js b/projects/ngmizone/index.js new file mode 100644 index 0000000000..732eec07a1 --- /dev/null +++ b/projects/ngmizone/index.js @@ -0,0 +1,23 @@ +const { sumTokens } = require("../helper/chain/cosmos"); + +const ngmiContract = "neutron1xcjn7d2f6p2kjqdxtvm4dzeqay98hcmtts92uugw7efnz4zc05csyhhvq6"; + +const supportedAssets = [ + "untrn", +]; + +async function tvl(api) { + return await sumTokens({ + owners: [ngmiContract], + chain: "neutron", + tokens: supportedAssets, + api, + }); +} + +module.exports = { + methodology: "Totals the $NTRN balance held by the NGMI.zone contract.", + neutron: { + tvl + } +} \ No newline at end of file From 4cfe076bf4c73febe18fc80bd731e74a59824348 Mon Sep 17 00:00:00 2001 From: GiMa-Maya <128942712+GiMa-Maya@users.noreply.github.com> Date: Thu, 28 Nov 2024 21:35:08 +0100 Subject: [PATCH 1243/1768] Update Maya provider (need help) (#12446) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/mayachain/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/mayachain/index.js b/projects/mayachain/index.js index d793d9602d..92ee702771 100644 --- a/projects/mayachain/index.js +++ b/projects/mayachain/index.js @@ -119,7 +119,7 @@ async function tvl(api) { } } else { // e.g KUJI.KUJI - if (chainStr === baseToken) { + if (['KUJI'].includes(baseToken)) { sdk.util.sumSingleBalance(balances, chain, assetDepth / 1e8); } else if (tokenGeckoMapping[pool]) { sdk.util.sumSingleBalance( From f30cf122d8c94a08197295b8b3e96a854f9e71ca Mon Sep 17 00:00:00 2001 From: techbless1 Date: Fri, 29 Nov 2024 02:17:42 +0400 Subject: [PATCH 1244/1768] feat: bigpump (#12434) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bigpump/index.js | 15 +++++++++++++++ projects/helper/chain/ton.js | 32 +++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 projects/bigpump/index.js diff --git a/projects/bigpump/index.js b/projects/bigpump/index.js new file mode 100644 index 0000000000..76927102a3 --- /dev/null +++ b/projects/bigpump/index.js @@ -0,0 +1,15 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokens } = require("../helper/chain/ton"); +const { getConfig } = require("../helper/cache"); + +async function fetchTvl(api) { + const res = await getConfig('bigpump', 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=bigpump') + await sumTokens({ api, tokens: [ADDRESSES.ton.TON], owners: res, onlyWhitelistedTokens: true }) +} + +module.exports = { + timetravel: false, + ton: { + tvl: fetchTvl + } +} \ No newline at end of file diff --git a/projects/helper/chain/ton.js b/projects/helper/chain/ton.js index e9f9e10cfd..63367bb450 100644 --- a/projects/helper/chain/ton.js +++ b/projects/helper/chain/ton.js @@ -4,7 +4,7 @@ const plimit = require('p-limit') const _rateLimited = plimit(1) const rateLimited = fn => (...args) => _rateLimited(() => fn(...args)) -const { getUniqueAddresses, sleep } = require('../utils') +const { getUniqueAddresses, sleep, sliceIntoChunks } = require('../utils') async function getTonBalance(addr) { const res = await get(`https://toncenter.com/api/v3/account?address=${addr}`) @@ -14,7 +14,7 @@ async function getTonBalance(addr) { async function getJettonBalances(addr) { const response = await get(`https://tonapi.io/v2/accounts/${addr}/jettons?currencies=usd`) - const res = { } + const res = {} response.balances.forEach(val => { res[val.jetton.address] = { balance: val.balance, price: val.price.prices.USD, decimals: val.jetton.decimals } }) @@ -23,10 +23,7 @@ async function getJettonBalances(addr) { } async function _sumTokensAccount({ api, addr, tokens = [], onlyWhitelistedTokens = false }) { - if (tokens.includes(ADDRESSES.null)) { - const balance = await getTonBalance(addr) - api.add(ADDRESSES.null, balance) - } + if (onlyWhitelistedTokens && tokens.length === 1 && tokens.includes(ADDRESSES.ton.TON)) return; const { balances } = await get(`https://tonapi.io/v2/accounts/${addr}/jettons?currencies=usd`) await sleep(1000 * (3 * Math.random() + 3)) balances.forEach(({ balance, price, jetton }) => { @@ -43,16 +40,16 @@ async function getTokenRates({ tokens = [] }) { const { rates } = await get(`https://tonapi.io/v2/rates?` + ( new URLSearchParams({ tokens: tokens.join(','), currencies: "usd" }) ).toString()); - + const tokenPrices = {}; - + tokens.forEach(tokenAddress => { if (rates[tokenAddress]) { const usdPrice = rates[tokenAddress].prices.USD; tokenPrices[tokenAddress] = usdPrice; } }); - + return tokenPrices } @@ -63,6 +60,9 @@ async function sumTokens({ api, tokens, owners = [], owner, onlyWhitelistedToken if (owner) owners.push(owner) owners = getUniqueAddresses(owners, api.chain) + + if (tokens.includes(ADDRESSES.null)) await addTonBalances({ api, addresses: owners }) + for (const addr of owners) { await sumTokensAccount({ api, addr, tokens, onlyWhitelistedTokens }) } @@ -96,7 +96,21 @@ async function call({ target, abi, params = [] }) { return stack } +async function addTonBalances({ api, addresses }) { + const chunks = sliceIntoChunks(addresses, 399) + for (const chunk of chunks) { + const { accounts } = await get('https://toncenter.com/api/v3/accountStates?address=' + encodeURIComponent(chunk.join(',')) + '&include_boc=false') + accounts.forEach(({ balance }) => { + api.add(ADDRESSES.null, balance) + }) + if (addresses.length > 199) { + await sleep(3000) + } + } +} + module.exports = { + addTonBalances, getTonBalance, getTokenRates, sumTokens, From fccfc324cfbda2ccea1d9f58f1f298b7e84fd877 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Thu, 28 Nov 2024 15:24:56 -0700 Subject: [PATCH 1245/1768] Feat: Zetachain PumpBTC Market, Taiko USDa Market (#12465) --- projects/avalon-finance/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 18c7ed309d..bfbd464836 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -33,6 +33,7 @@ const solvMarkets = { const pumpBTCMarkets = { ethereum: aaveExports('', '0xE00A3FE97714765A1a2054E850724Fd1320FaCc0', undefined, ['0x2eE0438BCC1876cEA2c6fc43dD21417cF3D1c2eF'], { v3: true }), bsc: aaveExports('', '0xb1C93Ba1286b6CCA1496C266f0eBfCe94b0C0cc0', undefined, ['0x58c937fa2D147117dB43d187f9411151edfFf03c'], { v3: true }), + zeta: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), } const unibtcMarkets = { @@ -74,7 +75,13 @@ const listaMarkets = { bsc: aaveExports('', '', undefined, ['0x5157f63bE7808DEB090Eee7762e917745896A09E'], { v3: true }), // BSC - ListaDAO } +// @note USDa Defi Lending Markets, not USDaLend +const usdaDefiLendingMarkets = { + taiko: aaveExports('', '', undefined, ['0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'], { v3: true }), +} + module.exports = mergeExports( mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, + usdaDefiLendingMarkets, ) module.exports.methodology = methodologies.lendingMarket From fe2ac6b366e0a071b38d3774eb6a49c71d2a5f5b Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Fri, 29 Nov 2024 17:17:00 +0800 Subject: [PATCH 1246/1768] [UPDATE] update add bsquared onchain (#12493) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-farm/helper.js | 2 +- projects/desyn-farm/index.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/desyn-farm/helper.js b/projects/desyn-farm/helper.js index e4c51906f2..a75adfcfa3 100644 --- a/projects/desyn-farm/helper.js +++ b/projects/desyn-farm/helper.js @@ -1,6 +1,6 @@ const { getConfig } = require('../helper/cache') -const chains = ["ethereum", "arbitrum", "btr", "mode", "zklink", "core", "ailayer", "linea", "merlin", "scroll"]; +const chains = ["ethereum", "arbitrum", "btr", "mode", "zklink", "core", "ailayer", "linea", "merlin", "scroll", "bsquared"]; const abi = { getBalance: "function getBalance(address) view returns (uint256)" diff --git a/projects/desyn-farm/index.js b/projects/desyn-farm/index.js index 37d3e2839d..07add1a91d 100644 --- a/projects/desyn-farm/index.js +++ b/projects/desyn-farm/index.js @@ -1,6 +1,11 @@ const { getTvlFunction, chains } = require("./helper"); module.exports = { + hallmarks: [ + [1719734400, "Launched on Merlin Chain"], + [1718092800, "DeSyn KelpDAO Restaking Fund Launched"], + [1713340800, "Restaking Fund Series Launched"] + ], methodology: 'Focused on airdrops from DeSyn and new chains.', } From d832893ed327c8048e3c4b58085382b8b8b0ae6c Mon Sep 17 00:00:00 2001 From: thi-investax <118243127+thi-investax@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:23:46 +0700 Subject: [PATCH 1247/1768] Track tokenized fund TVL on ethereum for ixswap (#12490) Co-authored-by: anhthii --- projects/ixswap/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/ixswap/index.js b/projects/ixswap/index.js index eb5fafd74b..03f2490147 100644 --- a/projects/ixswap/index.js +++ b/projects/ixswap/index.js @@ -1,5 +1,6 @@ const {getUniTVL} = require("../helper/unknownTokens"); const {staking} = require('../helper/staking') +const { sumTokensExport } = require('../helper/unwrapLPs') const IXS_POLYGON = "0x1BA17C639BdaeCd8DC4AAc37df062d17ee43a1b8" const IXS_BASE = "0xfe550bffb51eb645ea3b324d772a19ac449e92c5" @@ -7,6 +8,11 @@ const STAKING_CONTRACTS = [ "0xad644F3cC768bc6dceF97096790e2210D5191cec", // stake bank ] + +const FUNDS = [ + '0x9546a22c244497b6fb5338e4ff7c74c5accb3ddd', // CKGP +] + module.exports = { polygon: { tvl: getUniTVL({factory: '0xc2D0e0bc81494adB71Ce9Aa350cC875DaE12D81D', blacklistedTokens: [IXS_POLYGON]}), @@ -16,4 +22,7 @@ module.exports = { tvl: getUniTVL({factory: '0x2eE28d1Bbc2EcB1fFDB83E8055d585E9F0fb757f'}), staking: staking(['0x44F07B446e14127136f3554A16014b49BC67D9E6'], IXS_BASE), }, + ethereum: { + tvl: sumTokensExport({ owners: FUNDS, fetchCoValentTokens: true }) + } } From 928333efa5090dda728781148fd4eaad23238be6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 29 Nov 2024 11:09:08 +0100 Subject: [PATCH 1248/1768] temp fix: forlend --- projects/forlend/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/forlend/index.js b/projects/forlend/index.js index 987c129486..c65238e474 100644 --- a/projects/forlend/index.js +++ b/projects/forlend/index.js @@ -1,5 +1,5 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { - findora: compoundExports2({ comptroller: '0x3b056De20d662B09f73bDb28Ea6fa7b7aC82259C', cether: '0xbd4eeda5062605f3c3b86039c5f2c5880f9ecd95'}), + findora: compoundExports2({ comptroller: '0x3b056De20d662B09f73bDb28Ea6fa7b7aC82259C', cether: '0xbd4eeda5062605f3c3b86039c5f2c5880f9ecd95', blacklistedTokens: ['0x0000000000000000000000000000000000000000']}), } From fd607e1c5d79d4da647089c5fd792117a2a5eb4c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 29 Nov 2024 11:10:42 +0100 Subject: [PATCH 1249/1768] fix forlend --- projects/forlend/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/forlend/index.js b/projects/forlend/index.js index c65238e474..9d64a9f4cd 100644 --- a/projects/forlend/index.js +++ b/projects/forlend/index.js @@ -1,5 +1,5 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { - findora: compoundExports2({ comptroller: '0x3b056De20d662B09f73bDb28Ea6fa7b7aC82259C', cether: '0xbd4eeda5062605f3c3b86039c5f2c5880f9ecd95', blacklistedTokens: ['0x0000000000000000000000000000000000000000']}), + findora: compoundExports2({ comptroller: '0x3b056De20d662B09f73bDb28Ea6fa7b7aC82259C', }), } From 8bdad3696dcfe3bf13508221c02ca667816557c3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 29 Nov 2024 11:19:51 +0100 Subject: [PATCH 1250/1768] track sacra #12458 --- projects/sacra/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/sacra/index.js diff --git a/projects/sacra/index.js b/projects/sacra/index.js new file mode 100644 index 0000000000..9281dc90b8 --- /dev/null +++ b/projects/sacra/index.js @@ -0,0 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') +const tresury = "0x146dd6E8f9076dfEE7bE0b115bb165d62874d110"; +const rewardPool = '0x8E629C4301871d2A07f76366FE421e86855DC690'; + + +module.exports = { + methodology: `We count the WFTM on treasuty and reward pool`, + fantom: { + tvl: sumTokensExport({ token: ADDRESSES.fantom.WFTM, owners: [tresury, rewardPool] }) + } +} \ No newline at end of file From 9f7ce1ba0b445e27a4ad9c4f9b261c67a286831f Mon Sep 17 00:00:00 2001 From: atoumbre Date: Fri, 29 Nov 2024 13:21:21 +0000 Subject: [PATCH 1251/1768] fix weft v2 tvl (#12495) --- projects/helper/chain/radixdlt.js | 14 +++++++------- projects/weft-finance-v2/index.js | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/projects/helper/chain/radixdlt.js b/projects/helper/chain/radixdlt.js index eaafd8f80c..feb784d83e 100644 --- a/projects/helper/chain/radixdlt.js +++ b/projects/helper/chain/radixdlt.js @@ -30,9 +30,9 @@ async function sumTokens({ owner, owners = [], api, transformLSU = false, }) { return fixBalances(api.getBalances()) } -async function queryAddresses({ addresses = [], miscQuery = {}}) { +async function queryAddresses({ addresses = [], miscQuery = {} }) { let items = [] - const chunks = sliceIntoChunks(addresses, 20) + const chunks = sliceIntoChunks(addresses, 20) for (const chunk of chunks) { const body = { ...miscQuery, @@ -70,7 +70,7 @@ async function queryLiquidStakeUnitDetails(addresses = []) { addresses = addresses.filter(i => i !== ADDRESSES.radixdlt.XRD) let lsuRedemptionValues = {} - const chunks = sliceIntoChunks(addresses, 20) + const chunks = sliceIntoChunks(addresses, 20) for (const chunk of chunks) { let body = { "addresses": chunk, @@ -82,7 +82,7 @@ async function queryLiquidStakeUnitDetails(addresses = []) { let validators = [] for (const lsuResource of data.items) { let v = lsuResource.metadata.items.filter(metadataItem => metadataItem.key === "validator") - if (v !== undefined) { + if (v !== undefined && v.length > 0) { let validator = v[0] if (validator.value.typed.type === "GlobalAddress" && validator.value.typed.value.startsWith("validator_")) { lsuRedemptionValues[lsuResource.address] = { @@ -112,10 +112,10 @@ async function queryLiquidStakeUnitDetails(addresses = []) { let xrdStakeVaultBalance = new BigNumber(xrdStakeVault[0].amount) let totalSupplyOfStakeUnits = new BigNumber(lsuRedemptionValues[stakeUnitResourceAddress]["totalSupplyOfStakeUnits"]) - let xrdRedemptionValue = xrdStakeVaultBalance / totalSupplyOfStakeUnits + let xrdRedemptionValue = xrdStakeVaultBalance / totalSupplyOfStakeUnits lsuRedemptionValues[stakeUnitResourceAddress]["xrdRedemptionValue"] = xrdRedemptionValue } - } catch(error) { + } catch (error) { console.log("There was an error getting the xrd redemption value. Check that all addressed used are LSU resource addresses") return {} } @@ -123,7 +123,7 @@ async function queryLiquidStakeUnitDetails(addresses = []) { return lsuRedemptionValues } -function sumTokensExport({...args}) { +function sumTokensExport({ ...args }) { return async (api) => sumTokens({ ...args, api, }) } diff --git a/projects/weft-finance-v2/index.js b/projects/weft-finance-v2/index.js index 7c338cbab6..619127b849 100644 --- a/projects/weft-finance-v2/index.js +++ b/projects/weft-finance-v2/index.js @@ -12,7 +12,7 @@ const lendingMarket = 'component_rdx1cpy6putj5p7937clqgcgutza7k53zpha039n9u5hkk0 const resourcePoolsKVS = 'internal_keyvaluestore_rdx1kzjr763caq96j0kv883vy8gnf3jvrrp7dfm9zr5n0akryvzsxvyujc' async function tvl(api) { - return sumTokens({ owners: [lendingPool, lendingMarket], api }); + return sumTokens({ owners: [lendingPool, lendingMarket], api, transformLSU: true }); } async function borrowed(api) { From 2988e34448cd54654850d79484d041ad8d27f827 Mon Sep 17 00:00:00 2001 From: MoonSeoHyeong <49308460+ddis1004@users.noreply.github.com> Date: Fri, 29 Nov 2024 22:24:13 +0900 Subject: [PATCH 1252/1768] Added Nexton Adapter (#12361) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/nexton/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/nexton/index.js diff --git a/projects/nexton/index.js b/projects/nexton/index.js new file mode 100644 index 0000000000..0c5a3dde02 --- /dev/null +++ b/projects/nexton/index.js @@ -0,0 +1,14 @@ +const { call } = require("../helper/chain/ton"); + +const contractAddress = "EQBED_4VLQC-SRdrVCtmcmwO7PtnvdLSRFRYNaGIZBqpaQHQ"; + +const tvl = async (api) => { + const tonStaked = (await call({ target: contractAddress, abi: "tonStaked" }))[0]; + api.addGasToken(tonStaked) +} + +module.exports = { + ton: { + tvl + } +} From 5f11fa835e9ddb3b8b096db7d5dab8414cbd3ac5 Mon Sep 17 00:00:00 2001 From: Davidutro <40721951+Davidutro@users.noreply.github.com> Date: Sat, 30 Nov 2024 14:13:37 -0500 Subject: [PATCH 1253/1768] Update Ajna-v2 to include new chain deployments (#12506) --- projects/ajna-v2/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/ajna-v2/index.js b/projects/ajna-v2/index.js index f4cfaf1894..609ed669b1 100644 --- a/projects/ajna-v2/index.js +++ b/projects/ajna-v2/index.js @@ -6,7 +6,12 @@ const poolFactories = { arbitrum: '0x595c823EdAA612972d77aCf324C11F6284B9f5F6', base: '0x154FFf344f426F99E328bacf70f4Eb632210ecdc', optimism: '0x43cD60250CBBC0C22663438dcf644F5162988C06', - polygon: '0x3D6b8B4a2AEC46961AE337F4A9EBbf283aA482AA' + polygon: '0x3D6b8B4a2AEC46961AE337F4A9EBbf283aA482AA', + blast: '0xcfCB7fb8c13c7bEffC619c3413Ad349Cbc6D5c91', + filecoin: '0x0E4a2276Ac259CF226eEC6536f2b447Fc26F2D8a', + linea: '0xd72A448C3BC8f47EAfFc2C88Cf9aC9423Bfb5067', + mode: '0x62Cf5d9075D1d6540A6c7Fa836162F01a264115A', + rari: '0x10cE36851B0aAf4b5FCAdc93f176aC441D4819c9' }; async function getTvl(poolFactory, api) { @@ -33,4 +38,4 @@ module.exports = Object.keys(poolFactories).reduce((acc, chain) => { borrowed: (api) => getBorrowed(poolFactories[chain], api) }; return acc; -}, { misrepresentedTokens: true }); \ No newline at end of file +}, { misrepresentedTokens: true }); From 7d66da2cc1cf52d2f4ad528691358e1e3bbfad07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Pinto?= <87367287+Sk1mer12@users.noreply.github.com> Date: Sun, 1 Dec 2024 02:32:02 +0700 Subject: [PATCH 1254/1768] Add support to ynETHx (#12505) --- projects/yieldnest/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index b0658cbde4..0383bef2b9 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -2,6 +2,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const YN_ETH = '0x09db87a538bd693e9d08544577d5ccfaa6373a48' +const yn_ETHx = '0x657d9ABA1DBb59e53f9F3eCAA878447dCfC96dCb' module.exports = { ethereum: { @@ -12,6 +13,9 @@ module.exports = { const lsds = await api.call({ abi: 'address[]:getAssets', target: lsdRegistry }) const bals = await api.call({ abi: 'function getAllAssetBalances() view returns (uint256[])', target: lsdRegistry }) api.add(lsds, bals) + const maxethBalance = await api.call({ abi: 'uint256:totalAssets', target: yn_ETHx }) + api.add(ADDRESSES.null, maxethBalance) + } }, bsc: { @@ -21,4 +25,4 @@ module.exports = { api.add(ADDRESSES.null, ynBnbBalance) } }, -} \ No newline at end of file +} From d6c16ce9533904962db40f4871a71788b0ae0d8e Mon Sep 17 00:00:00 2001 From: Ayush Shaw <41021590+shawayush@users.noreply.github.com> Date: Sun, 1 Dec 2024 01:13:18 +0530 Subject: [PATCH 1255/1768] Added EclipseFi TVL Adapter (#12504) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/eclipse/index.js | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 projects/eclipse/index.js diff --git a/projects/eclipse/index.js b/projects/eclipse/index.js new file mode 100644 index 0000000000..dc53a7cf91 --- /dev/null +++ b/projects/eclipse/index.js @@ -0,0 +1,68 @@ +const { queryContract } = require('../helper/chain/cosmos') + +const tokens = { + "ASTRO": "factory/neutron1ffus553eet978k024lmssw0czsxwr97mggyv85lpcsdkft8v9ufsz3sa07/astro", + "ECLIP": "factory/neutron10sr06r3qkhn7xzpw3339wuj77hu06mzna6uht0/eclip" +} + +async function singleSideStaking(api){ + const astroStakingBalance = await queryContract({ + contract: "neutron1qk5nn9360pyu2tta7r4hvmuxwhxj5res79knt0sntmjcnwsycqyqy2ft9n", + chain: 'neutron', + data: { + total_staking: {} + } + }); + + api.add(tokens["ASTRO"], (astroStakingBalance)) +} + +async function lpStaking(api){ + const astroStakingBalance = await queryContract({ + contract: "neutron1d5p2lwh92040wfkrccdv5pamxtq7rsdzprfefd9v9vrh2c4lgheqvv6uyu", + chain: 'neutron', + data: { + total_staking: {} + } + }); + + const totalDeposit = await queryContract({ + contract: "neutron1zlf3hutsa4qnmue53lz2tfxrutp8y2e3rj4nkghg3rupgl4mqy8s5jgxsn", + chain: 'neutron', + data: { + total_deposit: {} + } + }); + + const totalShares = await queryContract({ + contract: "neutron1zlf3hutsa4qnmue53lz2tfxrutp8y2e3rj4nkghg3rupgl4mqy8s5jgxsn", + chain: 'neutron', + data: { + total_shares: {} + } + }); + + const conversionRate = Number(totalDeposit) / Number(totalShares); + + api.add(tokens["ASTRO"], (2 * conversionRate * astroStakingBalance)) +} + +async function eclipStaking(api){ + const eclipStakingBalance = await queryContract({ + contract: "neutron19q93n64nyet24ynvw04qjqmejffkmyxakdvl08sf3n3yeyr92lrs2makhx", + chain: 'neutron', + data: { + query_state: {} + } + }); + + api.add(tokens["ECLIP"], ((Number(eclipStakingBalance.stake_state.total_bond_amount) ))); +} + +module.exports = { + neutron: { + tvl: singleSideStaking, + pool2: lpStaking, + staking: eclipStaking, + }, +} \ No newline at end of file From 694b7f84cf6ed01afb63bce89a604702fe61b79d Mon Sep 17 00:00:00 2001 From: TJ <58812386+TJ-2@users.noreply.github.com> Date: Sun, 1 Dec 2024 03:44:46 +0800 Subject: [PATCH 1256/1768] Add Meridian on Taraxa (#12503) --- projects/meridian-lend/index.js | 2 ++ projects/meridian/index.js | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/meridian-lend/index.js b/projects/meridian-lend/index.js index df360e037e..1fe6dcc8ff 100644 --- a/projects/meridian-lend/index.js +++ b/projects/meridian-lend/index.js @@ -17,4 +17,6 @@ module.exports = { meter: v2("meter", "0x64Be9ee529E555860DA0705819138F41247e76E6"), fuse: v2("fuse", "0xbdD3d2f93cc1c6C951342C42Ef0795323CE83719"), taiko: v2("taiko", "0x8Cf3E0e7aE4eB82237d0931388EA72D5649D76e0"), + tara: v2("tara", "0x96a52CdFE64749C146E13F68641073566275433e"), + } \ No newline at end of file diff --git a/projects/meridian/index.js b/projects/meridian/index.js index 9c2d836b9f..a666c742bb 100644 --- a/projects/meridian/index.js +++ b/projects/meridian/index.js @@ -1,8 +1,10 @@ const { getLiquityTvl } = require('../helper/liquity') module.exports = { - methodology: "Deposited ETH and TLOS on the Base and Telos network", + methodology: "Deposited Collateral on Meridian Mint", base: { tvl: getLiquityTvl("0x56a901FdF67FC52e7012eb08Cfb47308490A982C") }, telos: { tvl: getLiquityTvl("0xb1F92104E1Ad5Ed84592666EfB1eB52b946E6e68") }, fuse: { tvl: getLiquityTvl("0xCD413fC3347cE295fc5DB3099839a203d8c2E6D9") }, -}; \ No newline at end of file + tara: { tvl: getLiquityTvl("0xd2ff761A55b17a4Ff811B262403C796668Ff610D") }, +}; + From 041a637cdd1096f035f8f17d17392fcf2b0d2fad Mon Sep 17 00:00:00 2001 From: Joel Mun Date: Sun, 1 Dec 2024 04:45:10 +0900 Subject: [PATCH 1257/1768] fix: zkLend staking contract address (#12502) --- projects/zklend-strk-staking/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/zklend-strk-staking/index.js b/projects/zklend-strk-staking/index.js index ef463027bd..b1a2d0afc5 100644 --- a/projects/zklend-strk-staking/index.js +++ b/projects/zklend-strk-staking/index.js @@ -2,7 +2,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { call } = require('../helper/chain/starknet') const { strkStakingAbi } = require('./abi'); -const stakingContract = '0x00ca1702e64c81d9a07b86bd2c540188d92a2c73cf5cc0e508d949015e7e84a7' +const stakingContract = '0x057ea05c22d6b162d0f2ef4b3d1e1edf3c065d81cf0f41950f716a71e9ad6bae' async function tvl(api) { const stakedAmount = await call({ target: stakingContract, abi: strkStakingAbi.get_total_stake }) From 4dc45eab9ca217c466578122bea83791e03ef778 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 30 Nov 2024 20:49:57 +0100 Subject: [PATCH 1258/1768] code refactor --- projects/helper/chain/sui.js | 2 +- projects/springsui-ecosystem/index.js | 36 ++++++++++++++------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/projects/helper/chain/sui.js b/projects/helper/chain/sui.js index 7bfd9a9c8b..97ff648317 100644 --- a/projects/helper/chain/sui.js +++ b/projects/helper/chain/sui.js @@ -48,7 +48,7 @@ async function getObjects(objectIds) { "showContent": true, }], }) - return objectIds.map(i => result.find(j => j.data.objectId === i)?.data?.content) + return objectIds.map(i => result.find(j => j.data?.objectId === i)?.data?.content) } async function getDynamicFieldObject(parent, id, { idType = '0x2::object::ID' } = {}) { diff --git a/projects/springsui-ecosystem/index.js b/projects/springsui-ecosystem/index.js index 7f8178a58f..0a924af559 100644 --- a/projects/springsui-ecosystem/index.js +++ b/projects/springsui-ecosystem/index.js @@ -2,29 +2,31 @@ const sui = require('../helper/chain/sui') const CREATE_EVENT_TYPE = '0xb0575765166030556a6eafd3b1b970eba8183ff748860680245b9edd41c716e7::events::Event<0xb0575765166030556a6eafd3b1b970eba8183ff748860680245b9edd41c716e7::liquid_staking::CreateEvent>'; const EXCLUDE_POOL_IDS = [ - '0x15eda7330c8f99c30e430b4d82fd7ab2af3ead4ae17046fcb224aa9bad394f6b', + '0x15eda7330c8f99c30e430b4d82fd7ab2af3ead4ae17046fcb224aa9bad394f6b', ] async function tvl() { - const poolIds = (await sui.queryEvents({ - eventType: CREATE_EVENT_TYPE, - transform: (i) => i.event.liquid_staking_info_id, - })).filter((id) => !EXCLUDE_POOL_IDS.includes(id)); + const poolIds = (await sui.queryEvents({ + eventType: CREATE_EVENT_TYPE, + transform: (i) => i.event.liquid_staking_info_id, + })).filter((id) => !EXCLUDE_POOL_IDS.includes(id)); - let suiAmount = 0; - for (const poolId of poolIds) { - const pool = await sui.getObject(poolId); - suiAmount += pool.fields.storage.fields.total_sui_supply / 10 ** 9 - } - return { - sui: suiAmount, - } + let suiAmount = 0; + const data = await sui.getObjects(poolIds); + + data.forEach((pool) => { + if (!pool) return; + suiAmount += pool.fields.storage.fields.total_sui_supply / 10 ** 9; + }); + return { + sui: suiAmount, + } } module.exports = { - methodology: "Calculates the amount of SUI staked in ecosystem SpringSui LSTs.", - sui: { - tvl, - } + methodology: "Calculates the amount of SUI staked in ecosystem SpringSui LSTs.", + sui: { + tvl, + } } From 215c321add0d857d13342a4aa0ffe1efd792f635 Mon Sep 17 00:00:00 2001 From: reikodoteth <149171651+reikodoteth@users.noreply.github.com> Date: Sat, 30 Nov 2024 20:56:03 +0100 Subject: [PATCH 1259/1768] Update Goat Protocol (#12500) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/goat-protocol/index.js | 36 ++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/projects/goat-protocol/index.js b/projects/goat-protocol/index.js index c8aa49e7ae..c56d280878 100644 --- a/projects/goat-protocol/index.js +++ b/projects/goat-protocol/index.js @@ -1,24 +1,28 @@ -const { yieldHelper } = require("../helper/unknownTokens"); const { getConfig } = require('../helper/cache'); const { staking } = require('../helper/staking') -const chain = "arbitrum"; -const tokenAPI = "address:want"; const GOA_TOKEN_CONTRACT = '0x8c6Bd546fB8B53fE371654a0E54D7a5bD484b319'; const REWARD_POOL_CONTRACT = '0xAD9CE8580a1Cd887038405275cB02443E8fb88aC'; +const config = { + arbitrum: {} +} + module.exports = { - timetravel: false, - doublecounted: true, - [chain]: { - tvl: async (_, _b, { [chain]: block }) => { - const pools = await getConfig('goat-protocol', 'https://raw.githubusercontent.com/goatfi/goat-address-book/main/vault-registry/arbitrum.json'); - const vaults = []; - for(var i = 0; i < pools.length; i++) - if(pools[i].platformId != 'goatfi') - vaults.push(pools[i].earnedTokenAddress); - return yieldHelper({ vaults, chain, block, tokenAPI, useDefaultCoreAssets: true, }) - }, - staking: staking(REWARD_POOL_CONTRACT, GOA_TOKEN_CONTRACT) + doublecounted: true, + hallmarks: [ + [1732186800, "Multistrategies Launch"] + ], +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const multistrategies = await getConfig('goat-protocol', `https://api.goat.fi/multistrategies`); + const calls = multistrategies.filter(multistrategy => multistrategy.chain === api.chain).map(multistrategy => multistrategy.address); + return api.erc4626Sum({ calls, isOG4626: true, }) + } } -} \ No newline at end of file +}) + +module.exports.arbitrum.staking = staking(REWARD_POOL_CONTRACT, GOA_TOKEN_CONTRACT) \ No newline at end of file From 3e33a5a717b8c421e442f391cea74f1dcfec57d4 Mon Sep 17 00:00:00 2001 From: Samster91 <37342443+samster91@users.noreply.github.com> Date: Sat, 30 Nov 2024 21:04:25 +0100 Subject: [PATCH 1260/1768] IdleDAO - New vault added (#12498) Co-authored-by: Samster91 Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/idle/index.js | 53 +++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/projects/idle/index.js b/projects/idle/index.js index e15ae60c79..1b0c925d00 100644 --- a/projects/idle/index.js +++ b/projects/idle/index.js @@ -58,6 +58,11 @@ const contracts = { }, optimism: { + }, + arbitrum: { + cdos: [ + "0x3919396Cd445b03E6Bb62995A7a4CB2AC544245D" // Bastion Credit Vault + ] } } @@ -119,32 +124,32 @@ async function tvl(api) { fromBlock, }) cdos.push(...logs.map(i => i.proxy)) - - const [strategyToken, token, aatrances, bbtrances, aaprices, bbprices] = await Promise.all(['address:strategyToken', "address:token", "address:AATranche", "address:BBTranche", "uint256:priceAA", "uint256:priceBB"].map(abi => api.multiCall({ abi, calls: cdos }))) - blacklistedTokens.push(...cdos) - blacklistedTokens.push(...aatrances) - blacklistedTokens.push(...bbtrances) - - // Get CDOs contract values - const contractValue = await api.multiCall({ abi: 'uint256:getContractValue', calls: cdos }) - cdos.forEach((cdo, i) => { - const tokenDecimals = tokensDecimals[token[i]] || 18 - trancheTokensMapping[aatrances[i]] = { - token: token[i], - decimals: tokenDecimals, - price: BigNumber(aaprices[i]).div(`1e${tokenDecimals}`).toFixed() - } - trancheTokensMapping[bbtrances[i]] = { - token: token[i], - decimals: tokenDecimals, - price: BigNumber(bbprices[i]).div(`1e${tokenDecimals}`).toFixed() - } - - // Get CDOs underlying tokens balances - sdk.util.sumSingleBalance(balances, token[i], contractValue[i], api.chain) - }) } + const [cdoToken, aatrances, bbtrances, aaprices, bbprices] = await Promise.all(["address:token", "address:AATranche", "address:BBTranche", "uint256:priceAA", "uint256:priceBB"].map(abi => api.multiCall({ abi, calls: cdos }))) + blacklistedTokens.push(...cdos) + blacklistedTokens.push(...aatrances) + blacklistedTokens.push(...bbtrances) + + // Get CDOs contract values + const contractValue = await api.multiCall({ abi: 'uint256:getContractValue', calls: cdos }) + cdos.forEach((cdo, i) => { + const tokenDecimals = tokensDecimals[cdoToken[i]] || 18 + trancheTokensMapping[aatrances[i]] = { + token: cdoToken[i], + decimals: tokenDecimals, + price: BigNumber(aaprices[i]).div(`1e${tokenDecimals}`).toFixed() + } + trancheTokensMapping[bbtrances[i]] = { + token: cdoToken[i], + decimals: tokenDecimals, + price: BigNumber(bbprices[i]).div(`1e${tokenDecimals}`).toFixed() + } + + // Get CDOs underlying tokens balances + sdk.util.sumSingleBalance(balances, cdoToken[i], contractValue[i], api.chain) + }) + const trancheTokensBalancesCalls = [] allTokens.forEach((tokens, i) => { From 26ece794bf81d639bf7537d837fb8c345568ace4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 30 Nov 2024 21:38:03 +0100 Subject: [PATCH 1261/1768] track hlp --- projects/hyperliquid-hlp/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/hyperliquid-hlp/index.js diff --git a/projects/hyperliquid-hlp/index.js b/projects/hyperliquid-hlp/index.js new file mode 100644 index 0000000000..4ee18f0853 --- /dev/null +++ b/projects/hyperliquid-hlp/index.js @@ -0,0 +1,13 @@ +const { get } = require("../helper/http"); + +async function tvl(api) { + const data = await get("https://stats-data.hyperliquid.xyz/Mainnet/vaults"); + const hlp = data.find((d) => d.summary?.vaultAddress?.toLowerCase() === "0xdfc24b077bc1425ad1dea75bcb6f8158e10df303"); + api.addUSDValue(+hlp.summary.tvl) +} + +module.exports = { + hyperliquid: { tvl }, + misrepresentedTokens: true, + doublecounted: true, +} \ No newline at end of file From 4b3e8710f65e5e0e9cec26600ee490d11a144ac3 Mon Sep 17 00:00:00 2001 From: nikitariabukhin <108471336+nikitariabukhin@users.noreply.github.com> Date: Sat, 30 Nov 2024 16:09:02 -0500 Subject: [PATCH 1262/1768] Create index.js (#12507) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bitomato/index.js | 21 +++++++++++++++++++++ projects/helper/bitcoin-book/index.js | 4 ++++ 2 files changed, 25 insertions(+) create mode 100644 projects/bitomato/index.js diff --git a/projects/bitomato/index.js b/projects/bitomato/index.js new file mode 100644 index 0000000000..e23999051a --- /dev/null +++ b/projects/bitomato/index.js @@ -0,0 +1,21 @@ +const { cexExports } = require('../helper/cex'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js'); + +const config = { + bitcoin: { + owners: bitcoinAddressBook.bitomato, + }, + ethereum: { + owners: [ + '0x0b8b4EB21787d5a07AbAF6BC35E15CD5C59Cbb94', // Ethereum address for Bitomato + ], + }, + bsc: { + owners: [ + '0x0b8b4EB21787d5a07AbAF6BC35E15CD5C59Cbb94', // BSC address for Bitomato + ], + }, +}; + +module.exports = cexExports(config); +module.exports.methodology = 'We are tracking part of their cold wallets for Bitomato. The addresses were provided based on public information and verified activity.'; diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 67c0ba8f20..a27a76b17c 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -95,9 +95,13 @@ const teleswap = [ '31uHNFfbejkbUD2B26o2CARfU1ALJ6x6Ag', // BOB_LOCKER '3LNsey3ceG9ZHkQ7bcfAjwnew7KVujHt29', // BRC20_LOCKER ] +const bitomato = [ + 'bc1qgmtx3caf8rlxmzw703ga2sljv3rkkj39e4ysk9', +] module.exports = { ...fetchers, + bitomato, bitlayerBridge, teleswap, ainn, From 018a3d2bb938cda270fb847ccf0b15da8796f881 Mon Sep 17 00:00:00 2001 From: Adolf998 <154962952+Adolf998@users.noreply.github.com> Date: Sun, 1 Dec 2024 05:10:39 +0800 Subject: [PATCH 1263/1768] add bouncebit-cedefi project (#12230) --- projects/bouncebit-cedefi/index.js | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 projects/bouncebit-cedefi/index.js diff --git a/projects/bouncebit-cedefi/index.js b/projects/bouncebit-cedefi/index.js new file mode 100644 index 0000000000..100eebb045 --- /dev/null +++ b/projects/bouncebit-cedefi/index.js @@ -0,0 +1,62 @@ +const { cachedGraphQuery } = require('../helper/cache') + +const config = { + ethereum: { + subgraphUrl: 'https://api.studio.thegraph.com/query/96517/bb-defillama-eth/v0.0.4' + }, + bsc: { + subgraphUrl: 'https://api.studio.thegraph.com/query/96517/bb-defillama-bsc/v0.0.2' + }, + bouncebit: { + main: { url: 'https://bitswap-subgraph.bouncebit.io/subgraphs/name/bb-defillama-bb' }, + boyya: { url: 'https://bitswap-subgraph.bouncebit.io/subgraphs/name/bb-defillama-boyya-bb' } + } +} + +const query = `{ + tokens { + id + tvl + } +}` + +// stbbtc to bbtc +const TOKEN_MAPPINGS = { + '0x7f150c293c97172c75983bd8ac084c187107ea19': '0xf5e11df1ebcf78b6b6d26e04ff19cd786a1e81dc', // stBBTC -> bbtc +} + +async function fetchTokens(chain, subgraphUrl) { + const prefix = chain === 'bouncebit' ? `bouncebit-cedefi${subgraphUrl.includes('boyya') ? '-boyya' : ''}` : 'bouncebit-cedefi' + return cachedGraphQuery(`${prefix}/${chain}`, subgraphUrl, query) +} + +async function tvl(api) { + const chain = api.chain + + const tokenLists = await Promise.all( + chain === 'bouncebit' + ? [ + fetchTokens(chain, config[chain].main.url), + fetchTokens(chain, config[chain].boyya.url) + ] + : [fetchTokens(chain, config[chain].subgraphUrl)] + ) + + const allTokens = tokenLists.flatMap(result => result.tokens) + + allTokens.forEach(token => { + if (token.tvl <= 0) return + const targetToken = TOKEN_MAPPINGS[token.id] || token.id + api.add(targetToken, token.tvl) + }) + + return api.getBalances() +} + +module.exports = { + methodology: "Calculate TVL by querying BounceBit Cedefi subgraph" +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From d7358c2897aa1793ab1d8136394cc7121cadaba2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:56:49 +0100 Subject: [PATCH 1264/1768] minor fix --- projects/helper/tokenMapping.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 3f638cfe4a..ad04634ac9 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -82,6 +82,9 @@ const fixBalancesTokens = { '0x5d0fa4c5668e5809c83c95a7cef3a9dd7c68d4fe': { coingeckoId: "taraxa", decimals: 18 }, '0xc26b690773828999c2612549cc815d1f252ea15e': { coingeckoId: "mountain-protocol-usdm", decimals: 18 }, }, + xlayer: { + [ADDRESSES.null]: { coingeckoId: "okb", decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 1d48f4aea70befe57412a307ff4b0ae6d44785bd Mon Sep 17 00:00:00 2001 From: atoumbre Date: Sun, 1 Dec 2024 12:00:55 +0000 Subject: [PATCH 1265/1768] fix Weft V2 tvl (#12509) --- projects/helper/chain/radixdlt.js | 5 +++++ projects/weft-finance-v2/index.js | 1 + 2 files changed, 6 insertions(+) diff --git a/projects/helper/chain/radixdlt.js b/projects/helper/chain/radixdlt.js index feb784d83e..7c8cbf2335 100644 --- a/projects/helper/chain/radixdlt.js +++ b/projects/helper/chain/radixdlt.js @@ -98,6 +98,11 @@ async function queryLiquidStakeUnitDetails(addresses = []) { } } + + if (validators.length == 0) { + continue + } + let validatorsDetailsBody = { "addresses": validators, "aggregation_level": "Vault" diff --git a/projects/weft-finance-v2/index.js b/projects/weft-finance-v2/index.js index 619127b849..41e84af097 100644 --- a/projects/weft-finance-v2/index.js +++ b/projects/weft-finance-v2/index.js @@ -12,6 +12,7 @@ const lendingMarket = 'component_rdx1cpy6putj5p7937clqgcgutza7k53zpha039n9u5hkk0 const resourcePoolsKVS = 'internal_keyvaluestore_rdx1kzjr763caq96j0kv883vy8gnf3jvrrp7dfm9zr5n0akryvzsxvyujc' async function tvl(api) { + // return sumTokens({ owners: [lendingPool, lendingMarket], api, transformLSU: true }); } From b159d1645d42c15d8eeda9e141c5f68e8e3b9cf2 Mon Sep 17 00:00:00 2001 From: cairo Date: Sun, 1 Dec 2024 22:30:30 +0100 Subject: [PATCH 1266/1768] Fix TVL for Elixir (#12485) --- projects/elixir/index.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/projects/elixir/index.js b/projects/elixir/index.js index 04681dee2b..88e31f9f75 100644 --- a/projects/elixir/index.js +++ b/projects/elixir/index.js @@ -6,10 +6,10 @@ const MANAGER_ABI = { } const DEUSD_LP_STAKING = "0xC7963974280261736868f962e3959Ee1E1B99712"; -const COMMITS = "0x4265f5D6c0cF127d733EeFA16D66d0df4b650D53"; -const FOUNDATION = "0x4B4EEC1DDC9420a5cc35a25F5899dC5993f9e586"; -const FOUNDATION_2 = "0x738744237b7Fd97AF670d9ddF54390c24263CeA8"; -const deUSD = "0x15700b564ca08d9439c58ca5053166e8317aa138" +const COMMITS_CONTRACT = "0x4265f5D6c0cF127d733EeFA16D66d0df4b650D53"; +const COMMITS_VAULT = "0x4B4EEC1DDC9420a5cc35a25F5899dC5993f9e586"; +const COMMITS_VAULT_2 = "0x704377f719651C3eE6902Ff3C9D5522e5054d429"; +const deUSD = "0x15700b564ca08d9439c58ca5053166e8317aa138"; const LP_TOKENS = [ "0xb478Bf40dD622086E0d0889eeBbAdCb63806ADde", // DEUSD/DAI Curve LP @@ -37,9 +37,9 @@ const integration = async (api, manager, poolIds, tokens) => { module.exports = { ethereum: { tvl: async (api) => { - // const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) - // api.add(deUSD, deusdSupply); - await api.sumTokens({ owners: [COMMITS, FOUNDATION, FOUNDATION_2], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null, ADDRESSES.ethereum.SDAI, ADDRESSES.ethereum.sUSDS] }) + const deusdSupply = await api.call({ target: deUSD, abi: "erc20:totalSupply" }) + api.add(deUSD, deusdSupply); + await api.sumTokens({ owners: [COMMITS_CONTRACT, COMMITS_VAULT, COMMITS_VAULT_2], tokens: [ADDRESSES.ethereum.STETH, ADDRESSES.null] }) }, pool2: sumTokensExport({ owner: DEUSD_LP_STAKING, tokens: LP_TOKENS }) }, From 3252f7797e839319e4234a32248b78066e95de98 Mon Sep 17 00:00:00 2001 From: leifu Date: Mon, 2 Dec 2024 00:51:25 +0200 Subject: [PATCH 1267/1768] Update Thales TVL calculation across chains (#12508) --- projects/thales/abi.json | 3 +- projects/thales/addresses.js | 25 +++++ projects/thales/chainConfig.js | 63 +++++++++++++ projects/thales/constants.js | 66 +++++++++++++ projects/thales/index.js | 168 +++++---------------------------- projects/thales/utils.js | 70 ++++++++++++++ 6 files changed, 249 insertions(+), 146 deletions(-) create mode 100644 projects/thales/addresses.js create mode 100644 projects/thales/chainConfig.js create mode 100644 projects/thales/constants.js create mode 100644 projects/thales/utils.js diff --git a/projects/thales/abi.json b/projects/thales/abi.json index fff29c16a5..f6307863a3 100644 --- a/projects/thales/abi.json +++ b/projects/thales/abi.json @@ -3,5 +3,6 @@ "totalDeposited": "uint256:totalDeposited", "tradingAllocation": "uint256:tradingAllocation", "getUnderlyingBalance": "function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)", - "activeParlayMarkets": "function activeParlayMarkets(uint index, uint pageSize) external view returns (address[] memory)" + "activeParlayMarkets": "function activeParlayMarkets(uint index, uint pageSize) external view returns (address[] memory)", + "getActiveTickets": "function getActiveTickets(uint _index, uint _pageSize) external view returns (address[] memory)" } diff --git a/projects/thales/addresses.js b/projects/thales/addresses.js new file mode 100644 index 0000000000..db1148e4be --- /dev/null +++ b/projects/thales/addresses.js @@ -0,0 +1,25 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const CHAIN_TOKENS = { + optimism: { + USDC: ADDRESSES.optimism.USDC_CIRCLE, + ETH: ADDRESSES.optimism.WETH_1, + WETH: ADDRESSES.optimism.WETH, + THALES: '0x217d47011b23bb961eb6d93ca9945b7501a5bb11' + }, + arbitrum: { + USDC: ADDRESSES.arbitrum.USDC, + WETH: ADDRESSES.arbitrum.WETH, + THALES: '0xE85B662Fe97e8562f4099d8A1d5A92D4B453bF30' + }, + polygon: { + USDC: ADDRESSES.polygon.USDC + }, + base: { + USDC: ADDRESSES.base.USDbC, + WETH: ADDRESSES.base.WETH, + THALES: '0xf34e0cff046e154cafcae502c7541b9e5fd8c249' + } +} + +module.exports = CHAIN_TOKENS diff --git a/projects/thales/chainConfig.js b/projects/thales/chainConfig.js new file mode 100644 index 0000000000..8a0ce49bd6 --- /dev/null +++ b/projects/thales/chainConfig.js @@ -0,0 +1,63 @@ +const CHAIN_TOKENS = require('./addresses') +const CONTRACTS = require('./constants') + +const CHAIN_CONFIG = { + optimism: { + tokens: CHAIN_TOKENS.optimism, + staking: { + contract: CONTRACTS.optimism.STAKING_CONTRACT, + token: CHAIN_TOKENS.optimism.THALES + }, + speedMarkets: CONTRACTS.optimism.SPEED_MARKETS, + managers: CONTRACTS.optimism.MANAGERS, + liquidityPools: { + sports: [ + { address: CONTRACTS.optimism.SPORTS_POOLS.USDC, token: 'USDC' }, + { address: CONTRACTS.optimism.SPORTS_POOLS.WETH, token: 'WETH' }, + { address: CONTRACTS.optimism.SPORTS_POOLS.THALES, token: 'THALES' } + ], + digitalOptions: [ + { address: CONTRACTS.optimism.DIGITAL_POOLS.USDC, token: 'USDC' } + ] + } + }, + arbitrum: { + tokens: CHAIN_TOKENS.arbitrum, + staking: { + contract: CONTRACTS.arbitrum.STAKING_CONTRACT, + token: CHAIN_TOKENS.arbitrum.THALES + }, + speedMarkets: CONTRACTS.arbitrum.SPEED_MARKETS, + managers: CONTRACTS.arbitrum.MANAGERS, + liquidityPools: { + sports: [ + { address: CONTRACTS.arbitrum.SPORTS_POOLS.USDC, token: 'USDC' }, + { address: CONTRACTS.arbitrum.SPORTS_POOLS.WETH, token: 'WETH' }, + { address: CONTRACTS.arbitrum.SPORTS_POOLS.THALES, token: 'THALES' } + ], + digitalOptions: [ + { address: CONTRACTS.arbitrum.DIGITAL_POOLS.USDC, token: 'USDC' } + ] + } + }, + polygon: { + tokens: CHAIN_TOKENS.polygon, + speedMarkets: CONTRACTS.polygon.SPEED_MARKETS + }, + base: { + tokens: CHAIN_TOKENS.base, + staking: { + contract: CONTRACTS.base.STAKING_CONTRACT, + token: CHAIN_TOKENS.base.THALES + }, + speedMarkets: CONTRACTS.base.SPEED_MARKETS, + managers: CONTRACTS.base.MANAGERS, + liquidityPools: { + digitalOptions: [ + { address: CONTRACTS.base.DIGITAL_POOLS.USDC, token: 'USDC' } + ] + } + } +} + +module.exports = CHAIN_CONFIG diff --git a/projects/thales/constants.js b/projects/thales/constants.js new file mode 100644 index 0000000000..adba7771b8 --- /dev/null +++ b/projects/thales/constants.js @@ -0,0 +1,66 @@ +const CONTRACTS = { + optimism: { + LP_TOKEN: '0xdff90e4a6c229565f25337b1db9fa12f6d8cb118', + STAKING_CONTRACT: '0xc392133eea695603b51a5d5de73655d571c2ce51', + SPEED_MARKETS: [ + '0xE16B8a01490835EC1e76bAbbB3Cadd8921b32001', + '0xFf8Cf5ABF583D0979C0B9c35d62dd1fD52cce7C7' + ], + MANAGERS: { + digital: ['0x7f9e03e40d8b95419C7BdF30D256d08f2Ec11Dba'], + sports: ['0x2367FB44C4C2c4E5aAC62d78A55876E01F251605'] + }, + SPORTS_POOLS: { + USDC: '0x0fe1044Fc8C05482102Db14368fE88791E9B8698', + WETH: '0x4f2822D4e60af7f9F70E7e45BC1941fe3461231e', + THALES: '0xE59206b08cC96Da0818522C75eE3Fd4EBB7c0A47' + }, + DIGITAL_POOLS: { + USDC: '0x47Da40be6B617d0199ADF1Ec3550f3875b246124' + } + }, + arbitrum: { + LP_TOKEN: '0x447f7bbfb5192ed5d6f815afb171f3f004ee94ac', + STAKING_CONTRACT: '0x160Ca569999601bca06109D42d561D85D6Bb4b57', + SPEED_MARKETS: [ + '0x02D0123a89Ae6ef27419d5EBb158d1ED4Cf24FA3', + '0xe92B4c614b04c239d30c31A7ea1290AdDCb8217D' + ], + MANAGERS: { + digital: ['0x95d93c88c1b5190fA7FA4350844e0663e5a11fF0'], + sports: ['0xB155685132eEd3cD848d220e25a9607DD8871D38'] + }, + SPORTS_POOLS: { + USDC: '0x22D180F39A0eB66098cf839AF5e3C6b009383B6A', + WETH: '0xcB4728a1789B87E05c813B68DBc5E6A98a4856bA', + THALES: '0x9733AB157f5A89f0AD7460d08F869956aE2018dA' + }, + DIGITAL_POOLS: { + USDC: '0xea4c2343Fd3C239c23Dd37dd3ee51AEc84544735' + } + }, + polygon: { + SPEED_MARKETS: [ + '0x4B1aED25f1877E1E9fBECBd77EeE95BB1679c361', + '0x14D2d7f64D6F10f8eF06372c2e5E36850661a537' + ] + }, + base: { + LP_TOKEN: '0x3f386acc3a8e9194cf6279c219df8dd3c5b71974', + STAKING_CONTRACT: '0x84aB38e42D8Da33b480762cCa543eEcA6135E040', + SPEED_MARKETS: [ + '0x85b827d133FEDC36B844b20f4a198dA583B25BAA', + '0x6848F001ddDb4442d352C495c7B4a231e3889b70' + ], + MANAGERS: { + digital: ['0xc62E56E756a3D14ffF838e820F38d845a16D49dE'], + sports: [] + }, + DIGITAL_POOLS: { + USDC: '0x5713ab44042D92C642444bd2F0fee9c2336F9E3b' + } + } + } + + module.exports = CONTRACTS + \ No newline at end of file diff --git a/projects/thales/index.js b/projects/thales/index.js index de61108e84..f8ce181201 100644 --- a/projects/thales/index.js +++ b/projects/thales/index.js @@ -1,152 +1,30 @@ -const { sumTokens2 } = require('../helper/unwrapLPs') const { staking } = require('../helper/staking') -const abi = require('./abi.json') -const ADDRESSES = require('../helper/coreAssets.json') - -const ethMarketsManager = "0x5ed98Ebb66A929758C7Fe5Ac60c979aDF0F4040a" - -const opMarketsManager = "0xBE086E0A2c588Ad64C8530048cE4356190D6a6F3" -const OP_SUSD = ADDRESSES.optimism.sUSD -const opThalesStaking = "0xc392133eea695603b51a5d5de73655d571c2ce51" -const opThalesAmm = "0x278b5a44397c9d8e52743fedec263c4760dc1a1a" -const opRangedAmm = "0x2d356b114cbCA8DEFf2d8783EAc2a5A5324fE1dF" -const opParlayAmm = "0x82B3634C0518507D5d817bE6dAb6233ebE4D68D9" -const opSportsLp = "0x842e89b7a7eF8Ce099540b3613264C933cE0eBa5" -const opSportsVault = ["0x43d19841d818b2ccc63a8b44ce8c7def8616d98e", "0x5e2b49c68f1fd68af1354c377eacec2f05632d3f", "0x8285047f33c26c1bf5b387f2b07f21a2af29ace2", "0xbaac5464bf6e767c9af0e8d4677c01be2065fd5f", "0xc922f4CDe42dD658A7D3EA852caF7Eae47F6cEcd"] -const opAmmVault = ["0xb484027CB0c538538Bad2bE492714154f9196F93", "0x6c7Fd4321183b542E81Bcc7dE4DfB88F9DBca29F", "0x43318DE9E8f65b591598F17aDD87ae7247649C83"] -const opThalesLpToken = "0xac6705BC7f6a35eb194bdB89066049D6f1B0B1b5"; -const opThalesToken = "0x217d47011b23bb961eb6d93ca9945b7501a5bb11" -const opSportsMarketsManager = "0xFBffEbfA2bF2cF84fdCf77917b358fC59Ff5771e" - -const polygonMarketsManager = "0x85f1B57A1D3Ac7605de3Df8AdA056b3dB9676eCE" -const polygon_USDC = ADDRESSES.polygon.USDC -const polygonThalesAmm = "0xd52B865584c25FEBfcB676B9A87F32683356A063" -const polygonRangedAMM = "0xe8e022405505a9F2b0B7452C844F1e64423849fC" - -const arbitrumMarketsManager = "0x95d93c88c1b5190fA7FA4350844e0663e5a11fF0" -const arbitrum_USDC = ADDRESSES.arbitrum.USDC -const arbThalesStaking = "0x160Ca569999601bca06109D42d561D85D6Bb4b57" -const arbitrumThalesAMM = "0x2b89275efB9509c33d9AD92A4586bdf8c4d21505" -const arbSportsMarketsManager = "0x72ca0765d4bE0529377d656c9645600606214610" -const arbParlayAmm = "0x2Bb7D689780e7a34dD365359bD7333ab24903268" -const arbSportsLp = "0x8e9018b48456202aA9bb3E485192B8475822B874" -const arbSportsVault = ["0xfF7AEA98740fA1e2a9eB81680583e62aaFf1e3Ad", "0xE26374c7aFe71a2a6AB4A61080772547C43B87E6", "0xA852a651377fbE23f3d3acF5919c3D092aD4b77d", "0x31c2947c86412A5e33794105aA034DD9312eb711"] -const arbAmmVault = ["0x640c34D9595AD5351Da8c5C833Bbd1AfD20519ea", "0x0A29CddbdAAf56342507574820864dAc967D2683", "0x008A4e30A8b41781F5cb017b197aA9Aa4Cd53b46"] -const arbThalesToken = "0xE85B662Fe97e8562f4099d8A1d5A92D4B453bF30" - - -const baseMarketManager = "0xc62E56E756a3D14ffF838e820F38d845a16D49dE" -const baseSportsMarketManager = "0xB0EE5C967F209f24f7eF30c2C6Da38346a87E089" -const baseParlayAMM = "0x5625c3233b52206a5f23c5fC1Ce16F6A7e3874dd" -const baseSportsAMM = "0xAFD339acf24813e8038bfdF19A8d87Eb94B4605d" -const baseRangedAMM = "0xB8109ac56EE572990e6d2C6b4648042bB1C33317" -const baseThalesAMM = "0xe41cD3A25CBdeDA0BC46D48C380393D953bD2034" - - -const bscMarketManager = "0xc62E56E756a3D14ffF838e820F38d845a16D49dE" -const bscRangedAMM = "0xda5Bd4aBAFbE249bdC5684eAD594B0ac379687fd" -const bscThalesAMM = "0x465B66A3e33088F0666dB1836652fBcF037c7319" - -async function guniPool2(api) { - const [lp, token0, token1] = await api.batchCall([ - { target: opThalesLpToken, abi: abi.getUnderlyingBalance, }, - { target: opThalesLpToken, abi: 'address:token0', }, - { target: opThalesLpToken, abi: 'address:token1', }, - ]) - api.add(token0, lp[0]) - api.add(token1, lp[1]) -} - -async function getMarkets(api, manager) { - return api.call({ target: manager, abi: abi.activeMarkets, params: [0, 1000] }) -} +const CHAIN_CONFIG = require('./chainConfig') +const helpers = require('./utils') + +// Create module for each chain +const createChainModule = (chain) => { + const config = CHAIN_CONFIG[chain] + const module = { + tvl: (api) => helpers.calculateChainTVL(api, chain) + } -async function addSportsLPTvl(api, contract, token) { - api.add(token, await api.call({ target: contract, abi: abi.totalDeposited, })) -} + // Add staking if configured + if (config.staking) { + module.staking = staking( + config.staking.contract, + config.staking.token + ) + } -const speedMarkets = { - arbitrum: ['0x02D0123a89Ae6ef27419d5EBb158d1ED4Cf24FA3'], - polygon: ['0x4B1aED25f1877E1E9fBECBd77EeE95BB1679c361'], - optimism: ['0xE16B8a01490835EC1e76bAbbB3Cadd8921b32001'], - base: ['0x85b827d133FEDC36B844b20f4a198dA583B25BAA'], - bsc: ['0x72ca0765d4bE0529377d656c9645600606214610'], + return module } +// Export configuration for each chain module.exports = { - methodology: "sUSD/USDC locked on markets", - ethereum: { - tvl: async (api) => { - return sumTokens2({ api, owners: await getMarkets(api, ethMarketsManager), tokens: [ADDRESSES.ethereum.sUSD] }) - }, - pool2: dodoPool2("0x136829c258e31b3ab1975fe7d03d3870c3311651", "0x031816fd297228e4fd537c1789d51509247d0b43"), - }, - polygon: { - tvl: async (api) => { - const markets = await getMarkets(api, polygonMarketsManager) - markets.push(polygonThalesAmm, polygonRangedAMM) - if (speedMarkets[api.chain]) markets.push(...speedMarkets[api.chain]) - return sumTokens2({ api, owners: markets, tokens: [polygon_USDC] }) - }, - }, - optimism: { - tvl: async (api) => { - await addSportsLPTvl(api, opSportsLp, OP_SUSD) - const markets = (await Promise.all([opMarketsManager, opSportsMarketsManager,].map(i => getMarkets(api, i)))).flat() - markets.push(opThalesAmm, opParlayAmm, opRangedAmm, ...opSportsVault, ...opAmmVault) - if (speedMarkets[api.chain]) markets.push(...speedMarkets[api.chain]) - return sumTokens2({ api, tokens: [OP_SUSD], owners: markets }) - }, - staking: staking(opThalesStaking, opThalesToken), - pool2: guniPool2, - }, - arbitrum: { - tvl: async (api) => { - await addSportsLPTvl(api, arbSportsLp, arbitrum_USDC) - const markets = (await Promise.all([arbitrumMarketsManager, arbSportsMarketsManager,].map(i => getMarkets(api, i)))).flat() - markets.push(arbitrumThalesAMM, arbParlayAmm, ...arbSportsVault, ...arbAmmVault) - if (speedMarkets[api.chain]) markets.push(...speedMarkets[api.chain]) - return sumTokens2({ api, tokens: [arbitrum_USDC], owners: markets }) - }, - staking: staking(arbThalesStaking, arbThalesToken), - }, - base: { - tvl: async (api) => { - const markets = (await Promise.all([baseMarketManager, baseSportsMarketManager,].map(i => getMarkets(api, i)))).flat() - markets.push(baseParlayAMM, baseRangedAMM, baseSportsAMM, baseThalesAMM) - if (speedMarkets[api.chain]) markets.push(...speedMarkets[api.chain]) - return sumTokens2({ api, tokens: [ADDRESSES.base.USDbC], owners: markets }) - }, - staking: staking('0x84aB38e42D8Da33b480762cCa543eEcA6135E040', '0xf34e0cff046e154cafcae502c7541b9e5fd8c249'), - }, - bsc: { - tvl: async (api) => { - const markets = (await Promise.all([bscMarketManager,].map(i => getMarkets(api, i)))).flat() - markets.push(bscRangedAMM, bscThalesAMM) - if (speedMarkets[api.chain]) markets.push(...speedMarkets[api.chain]) - return sumTokens2({ api, tokens: [ADDRESSES.bsc.BUSD], owners: markets }) - }, - }, -} - - -function dodoPool2(stakingContract, lpToken) { - return async (api) => { - const [baseToken, quoteToken, totalSupply] = await Promise.all(["address:_BASE_TOKEN_", "address:_QUOTE_TOKEN_", "erc20:totalSupply"].map(abi => api.call({ - target: lpToken, - abi - }))) - const [baseTokenBalance, quoteTokenBalance, stakedLPBalance] = await api.multiCall({ - calls: [ - [baseToken, lpToken], [quoteToken, lpToken], [lpToken, stakingContract] - ].map(token => ({ - target: token[0], - params: [token[1]], - })), - abi: 'erc20:balanceOf' - }) - const ratio = stakedLPBalance/totalSupply - api.add(baseToken, baseTokenBalance * ratio) - api.add(quoteToken, quoteTokenBalance * ratio) - } + methodology: "Calculate TVL for liquidity pools, markets, staking and pool2", + optimism: createChainModule('optimism'), + arbitrum: createChainModule('arbitrum'), + polygon: createChainModule('polygon'), + base: createChainModule('base') } diff --git a/projects/thales/utils.js b/projects/thales/utils.js new file mode 100644 index 0000000000..86f2d6b6e6 --- /dev/null +++ b/projects/thales/utils.js @@ -0,0 +1,70 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const abi = require('./abi.json') +const CHAIN_CONFIG = require('./chainConfig') + +const utils = { + // Get token address from chain config + getTokenAddress: (chain, symbol) => CHAIN_CONFIG[chain].tokens[symbol], + + // Add LP TVL + addLPTvl: async (api, contract, token) => { + const tokenAddress = utils.getTokenAddress(api.chain, token) + api.add(tokenAddress, await api.call({ + target: contract, + abi: abi.totalDeposited + })) + }, + + // Get markets from manager + getMarketsFromManager: async (api, manager, abiMethod) => { + return api.call({ + target: manager, + abi: abi[abiMethod], + params: [0, 1000] + }) + }, + + // Get all markets for a chain + getAllMarkets: async (api, chain) => { + const config = CHAIN_CONFIG[chain] + if (!config.managers) return [] + + const [digitalMarkets, sportsMarkets] = await Promise.all([ + Promise.all((config.managers.digital || []).map(manager => + utils.getMarketsFromManager(api, manager, 'activeMarkets') + )), + Promise.all((config.managers.sports || []).map(manager => + utils.getMarketsFromManager(api, manager, 'getActiveTickets') + )) + ]) + + return [...digitalMarkets.flat(), ...sportsMarkets.flat()] + }, + + // Calculate chain TVL + calculateChainTVL: async (api, chain) => { + const config = CHAIN_CONFIG[chain] + + // Add LP TVLs + for (const poolType in config.liquidityPools || {}) { + for (const pool of config.liquidityPools[poolType]) { + await utils.addLPTvl(api, pool.address, pool.token) + } + } + + // Get all markets + const markets = [ + ...await utils.getAllMarkets(api, chain), + ...(config.speedMarkets || []) + ] + + // Calculate TVL for all markets and tokens + return sumTokens2({ + api, + owners: markets, + tokens: Object.values(config.tokens) + }) + } +} + +module.exports = utils From 8cf47e86ae7af1308ad61375616c730a5986bced Mon Sep 17 00:00:00 2001 From: sk-blum Date: Sun, 1 Dec 2024 23:52:09 +0100 Subject: [PATCH 1268/1768] Blum adapter (#12497) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/blum/index.js | 17 +++++++++++++++++ projects/helper/chain/ton.js | 3 +++ 2 files changed, 20 insertions(+) create mode 100644 projects/blum/index.js diff --git a/projects/blum/index.js b/projects/blum/index.js new file mode 100644 index 0000000000..004fb2f810 --- /dev/null +++ b/projects/blum/index.js @@ -0,0 +1,17 @@ +const ADDRESSES = require("../helper/coreAssets.json") + +const { sumTokens } = require("../helper/chain/ton") +const { getConfig } = require("../helper/cache") + +async function fetchTvl(api) { + const res = await getConfig('blum', 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=blum') + console.log(res) + await sumTokens({ api, tokens: [ADDRESSES.ton.TON], owners: res, onlyWhitelistedTokens: true, }) +} + +module.exports = { + timetravel: false, + ton: { + tvl: fetchTvl + } +} diff --git a/projects/helper/chain/ton.js b/projects/helper/chain/ton.js index 63367bb450..e606ac5b84 100644 --- a/projects/helper/chain/ton.js +++ b/projects/helper/chain/ton.js @@ -97,8 +97,11 @@ async function call({ target, abi, params = [] }) { } async function addTonBalances({ api, addresses }) { + api.log('Fetching TON balances', { addresses: addresses.length }) const chunks = sliceIntoChunks(addresses, 399) + let i = 0 for (const chunk of chunks) { + api.log('Fetching TON balances', { chunk: i++, chunks: chunks.length }) const { accounts } = await get('https://toncenter.com/api/v3/accountStates?address=' + encodeURIComponent(chunk.join(',')) + '&include_boc=false') accounts.forEach(({ balance }) => { api.add(ADDRESSES.null, balance) From f2745ad8b69c9468e6bcba7b9917dffd3f6d0bb4 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sun, 1 Dec 2024 20:03:39 -0600 Subject: [PATCH 1269/1768] keep ethereum historical tvl --- projects/thales/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/thales/index.js b/projects/thales/index.js index f8ce181201..1ae4a8587b 100644 --- a/projects/thales/index.js +++ b/projects/thales/index.js @@ -26,5 +26,6 @@ module.exports = { optimism: createChainModule('optimism'), arbitrum: createChainModule('arbitrum'), polygon: createChainModule('polygon'), - base: createChainModule('base') + base: createChainModule('base'), + ethereum: {tvl: async ()=>({})}, } From c03f138f17bf858365c04ae4252d6144205a282e Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sun, 1 Dec 2024 20:20:47 -0600 Subject: [PATCH 1270/1768] keep bsc historical tvl --- projects/thales/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/thales/index.js b/projects/thales/index.js index 1ae4a8587b..20c1f843fb 100644 --- a/projects/thales/index.js +++ b/projects/thales/index.js @@ -28,4 +28,5 @@ module.exports = { polygon: createChainModule('polygon'), base: createChainModule('base'), ethereum: {tvl: async ()=>({})}, + bsc: {tvl: async ()=>({})}, } From 24d3d846f89708e52c89630e75bd3dcf68255c89 Mon Sep 17 00:00:00 2001 From: lilchizh <55549631+lilchizh@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:14:45 +0700 Subject: [PATCH 1271/1768] change TONCO TVL calculation (#12511) --- projects/tonco/index.js | 48 ++++++----------------------------------- 1 file changed, 6 insertions(+), 42 deletions(-) diff --git a/projects/tonco/index.js b/projects/tonco/index.js index 6d54f1109d..6e5a974fed 100644 --- a/projects/tonco/index.js +++ b/projects/tonco/index.js @@ -1,48 +1,12 @@ -const { cachedGraphQuery } = require('../helper/cache'); -const { post } = require('../helper/http') -const { transformDexBalances } = require('../helper/portedTokens') -const sdk = require('@defillama/sdk') -const { ethers } = require("ethers") +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require('../helper/coreAssets.json') -const API_URL = 'https://indexer.tonco.io'; - -const poolsQuery = ` - { - pools { - address - jetton0 { - bounceableAddress - decimals - } - jetton1 { - bounceableAddress - decimals - } - totalValueLockedJetton0 - totalValueLockedJetton1 - } - } -` +const router = "EQC_-t0nCnOFMdp7E7qPxAOCbCWGFz-e3pwxb6tTvFmshjt5" +const wtTOn = "EQCHHakhWxSQIWbw6ioW21YnjVKBCDd_gVjF9Mz9_dIuFy23" module.exports = { - misrepresentedTokens: true, - timetravel: false, + timetravel: true, ton: { - tvl: async () => { - - const result = await cachedGraphQuery('tonco-swap', API_URL, poolsQuery) - - sdk.log(result) - - return transformDexBalances({ - chain: 'ton', - data: result.pools.map(pool => ({ - token0: pool.jetton0.bounceableAddress, - token1: pool.jetton1.bounceableAddress, - token0Bal: Number(ethers.parseUnits(String(pool.totalValueLockedJetton0.toFixed(pool.jetton0.decimals)), parseInt(pool.jetton0.decimals))), - token1Bal: Number(ethers.parseUnits(String(pool.totalValueLockedJetton1.toFixed(pool.jetton1.decimals)), parseInt(pool.jetton1.decimals))), - })) - }) - } + tvl: sumTokensExport({ owners: [router, wtTOn], tokens: [ADDRESSES.null], }), } } From f13169658daefa52d903ba96503c28857d40a133 Mon Sep 17 00:00:00 2001 From: MIMIEYES Date: Mon, 2 Dec 2024 17:15:49 +0800 Subject: [PATCH 1272/1768] add tvl of bitcoin (#12513) --- projects/helper/bitcoin-book/index.js | 2 ++ projects/helper/bitcoin-book/nervenetworkbridge.js | 4 ++++ projects/nervenetworkbridge/index.js | 4 ++++ 3 files changed, 10 insertions(+) create mode 100644 projects/helper/bitcoin-book/nervenetworkbridge.js diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index a27a76b17c..404a314666 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -86,6 +86,7 @@ const wooCEX = require('./woo-cex.js') const bitlayerBridge = require('./bitlayer-bridge.js') const arkhamExchange = require('./arkham-exchange.js') const chakra = require('./chakra.js') +const nerveNetworkBridge = require('./nervenetworkbridge.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -191,4 +192,5 @@ module.exports = { p2pb2b, arkhamExchange, chakra, + nerveNetworkBridge, } diff --git a/projects/helper/bitcoin-book/nervenetworkbridge.js b/projects/helper/bitcoin-book/nervenetworkbridge.js new file mode 100644 index 0000000000..0e2d9ef953 --- /dev/null +++ b/projects/helper/bitcoin-book/nervenetworkbridge.js @@ -0,0 +1,4 @@ +module.exports = [ + 'bc1q7l4q8kqekyur4ak3tf4s2rr9rp4nhz6axejxjwrc3f28ywm4tl8smz5dpd', + 'bc1qzhwyexqzfz4d0mu7ktdad63wfssg08cek9sgjp' +] diff --git a/projects/nervenetworkbridge/index.js b/projects/nervenetworkbridge/index.js index 633d888b88..afa9e54298 100644 --- a/projects/nervenetworkbridge/index.js +++ b/projects/nervenetworkbridge/index.js @@ -3,6 +3,8 @@ const sdk = require("@defillama/sdk"); const { getConfig } = require('../helper/cache') const { get } = require('../helper/http') const { BigNumber } = require("bignumber.js"); +const { sumTokensExport } = require("../helper/sumTokens"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js'); const getBridgeContract = { 'ethereum': '0xC707E0854DA2d72c90A7453F8dc224Dd937d7E82', @@ -87,6 +89,8 @@ async function tronTvl(api) { module.exports = { methodology: "Assets staked in the pool and trading contracts", + doublecounted: true, + bitcoin: { tvl: sumTokensExport({ owners: bitcoinAddressBook.nerveNetworkBridge }) }, tron: { tvl: tronTvl }, From a925a5cd22ac17e9d3d3a358cc50cb30d344f7c9 Mon Sep 17 00:00:00 2001 From: MIMIEYES Date: Mon, 2 Dec 2024 17:16:25 +0800 Subject: [PATCH 1273/1768] add staking of BTC (#12516) --- projects/pocm-staking/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/pocm-staking/index.js b/projects/pocm-staking/index.js index cc5ff2e551..5203531f7d 100644 --- a/projects/pocm-staking/index.js +++ b/projects/pocm-staking/index.js @@ -1,12 +1,15 @@ const http = require("../helper/http"); async function staking() { + const data = (await http.get("https://pocm.nuls.io/api/pocm/info")).data; return { - 'nuls': Number((await http.get("https://pocm.nuls.io/api/pocm/info")).data.totalStaking).toFixed(0) + 'nuls': Number(data.totalStaking).toFixed(0), + 'bitcoin': Number(data.totalStakingBTC).toFixed(8) }; } module.exports = { + doublecounted: true, timetravel: false, nuls: { tvl: async ()=> ({}), From a62f2662deac0dd5a5a3934c90285c1be31a2406 Mon Sep 17 00:00:00 2001 From: irlpotato <166589843+irlpotato@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:16:51 +0800 Subject: [PATCH 1274/1768] feat: remove hallmarks (#12517) --- projects/treehouse/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/treehouse/index.js b/projects/treehouse/index.js index 7e4fc0214c..62478f3126 100644 --- a/projects/treehouse/index.js +++ b/projects/treehouse/index.js @@ -50,7 +50,6 @@ async function tvlMantle(api) { module.exports = { methodology: 'Token balance in vault and strategy contracts', start: '2024-09-10', // Tuesday, September 10, 2024 12:00:00 AM, - hallmarks: [[1727218691, "TVL Cap Raise 1"],[1729045223, "TVL Cap Raise 2"]], ethereum: { tvl, }, From c1e411e5cde5faf0160d285c249ad39920e5c30f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 2 Dec 2024 12:19:08 +0100 Subject: [PATCH 1275/1768] Hyperlock (#12520) Co-authored-by: 0xGlider Co-authored-by: 0xGlider <165306420+0xConwayGlider@users.noreply.github.com> --- projects/hyperlock/index.js | 46 +++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/projects/hyperlock/index.js b/projects/hyperlock/index.js index 5c0497aae5..1d7a76babb 100644 --- a/projects/hyperlock/index.js +++ b/projects/hyperlock/index.js @@ -1,30 +1,42 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokens2 } = require("../helper/unwrapLPs"); -const { cachedGraphQuery } = require('../helper/cache') -const v2Deposits = "0xC3EcaDB7a5faB07c72af6BcFbD588b7818c4a40e"; -const v3Deposits = "0xc28EffdfEF75448243c1d9bA972b97e32dF60d06"; +const { sumTokens2 } = require("../helper/unwrapLPs") +const { staking } = require('../helper/staking') + +const HYPER = "0xEC73284E4EC9bcea1A7DDDf489eAA324C3F7dd31"; +const THRUST = "0xE36072DD051Ce26261BF50CD966311cab62C596e"; +const HYPER_THRUST = "0x569FcbDa292f1a69AB14e401bAD13Cc0E1DEC790"; + +const BOOSTER = "0x08d46dC9E455c9B97E671b6291a54ba5668B94AC"; +const VOTER_PROXY = "0x70A8075C73A9Ff9616CB5aF6BB09c04844718F27"; +const LOCKER = "0xc1De2d060a18CFfAB121E90118e380629d11977E"; + +const abi = { + "poolLength": "uint256:poolLength", + "poolInfo": "function poolInfo(uint256) view returns (address lptoken, address token, address gauge, address crvRewards, address stash, bool shutdown)" +} // https://docs.hyperlock.finance/developers/hyperlock-contracts module.exports = { doublecounted: true, blast: { tvl, + staking: staking(LOCKER, HYPER) }, } -const query = `{ - pools(where:{type: V2}) { id type } -}` +// node test.js projects/hyperlock/index.js +async function tvl(api) { + // THRUST + const totalSupply = await api.call({ target: HYPER_THRUST, abi: 'erc20:totalSupply' }); + api.add(THRUST, totalSupply); -async function tvl(api) { - const { pools } = await cachedGraphQuery('hyperlock/v2', 'https://graph.hyperlock.finance/subgraphs/name/hyperlock/points-blast-mainnet', query) - const tokens = pools.map(i => i.id) - await sumTokens2({ api, owner: v2Deposits, tokens: pools.map(i => i.id), resolveLP: true, }) - await sumTokens2({ api, tokensAndOwners: [ - [ADDRESSES.blast.USDB, '0x390b781BAf1e6Db546cF4e3354b81446947838d2'], - [ADDRESSES.blast.WETH, '0x1856c7e0b559e9d7287473cb4b4786398db4032a'], - ] }) - return sumTokens2({ api, owner: v3Deposits, resolveUniV3: true }) + // v2 pools + const pools = await api.fetchList({ target: BOOSTER, itemAbi: abi.poolInfo, lengthAbi: abi.poolLength, }); + pools.shift(); // remove the first pool, which is hyperTHRUST/THRUST stable pool + const tokensAndOwners = pools.map(p => [p.lptoken, p.gauge]); + await sumTokens2({ tokensAndOwners, resolveLP: true, api}); + + // v3 pools + await sumTokens2({ api, owners: [VOTER_PROXY], resolveUniV3: true }); } \ No newline at end of file From 782aa8359928b157b0f088b481d8977e8a34a762 Mon Sep 17 00:00:00 2001 From: Bruno Date: Mon, 2 Dec 2024 16:43:27 +0300 Subject: [PATCH 1276/1768] Update Gluon Gold's contract address (#12521) --- projects/gluon-gold/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/gluon-gold/index.js b/projects/gluon-gold/index.js index 04e44f05a7..2dea38f0f5 100644 --- a/projects/gluon-gold/index.js +++ b/projects/gluon-gold/index.js @@ -5,9 +5,9 @@ module.exports = { ergo: { tvl: sumTokensExport({ owners: [ - 'E81MR2gGkYE1vDkdcGYns4wYehfJLdX6hpwHMGrhwKEirNBZ6JRUKopeU1i7jT4NkgdM8GpL8bhFCyXFJuSaj8tiWSs28rq6Go3H5regcwr67yWiAy97RmXh94ierf8YuELivuMfwkEZd4X81RrfFJ2GDKzxmSdqUP6D4mXqepnxWcCvqGgk7DR1tKKuBJNroWaDSuDwrKASw68KuGspCbd1pgHs2iWzxirT4NTXq2rfPqmSJ7cqUQnd1mamB583H2ZC4esNzjqyMcvsQi6QFePSg8bwYbCTs4e8Nz42bZoUNQktFpteqwhcA5NRwXN7vDVQBGgHXr8KY3fDKmhoQiwTbrZLB5qzJ1UpCoAd4h88CERG7VbH4z5nyJC5c3j1SuEE5dSXPNtYR6yiGhNq2TCHNb24f5eZcBpBUQ6qviecoDtxPb78qnR2gBn4HcHGBWBZxfXJ3ZC7NPtNWreWWPuGMF5QF7EgswjALFHNDzRdkJpbsbrdaVbFNq9vC6Adug2P5NXnBjsr7wYTQrB4neWFNLS4vWQqgTYu3Cuap1V7mc13u7tK6X3s1wod6psy6cTWak1SEYtUcjwwvjHhQqn8R2D9G81jiH7efpCt9JdgCYoamioDfLaTFx7S2Su55bjLaD8JLsUyNL1LkDcmcUfhtiTAkM1mUDGswAHk6wDtoVUEuR59T94LUv9SFddZ2p1vJYi32AUAEZu66UiGkGeBDnNSq38mgiwta1X6SsNtv1mgZjkLx45Vun538ekYwWZ51EcvRgMScogtZ5xBDk1RRPn3HkXQLWGKr4yEFSwjuDNy8d4LbWUJ8n4prMvxQ8G5h7rUj9dJ5kz7YzKZRNF5VBmCAacYocgUUnEwQbVbkvFDDt7FQAQnNmY7tyjDQEJaeAviWp2Gtoewh7ShDDLgX69gB9XcAjuYn9Tbfvm6FLnfNE9qusqL76GnaPeJRf6LNR6JczQVBGhS4NUy6sBSSfq4oWFYbShUGTe3zLG9JFMcdAKZR7NwyHyKBM5Zj5w5kXroL1xLPahxBz6hiQmz9xcJGGWNQsNR2Acirx3PmQ1V23sSqjhLmDMRVYquStc8o86JUH7KzBjm12nAfdq4pN6LAfKdCvLwdQQn9MQxmcquog9EiQccdURgF9NJK1CwWgcgrfXLtSkm5JwbTPgQjd5HFR9y26DtLJr36RWZHrbv9zvv9GawT3J2jWQEk9Ue41zMRp9jjMP57S4JdWdVvPuxYSJf2e7y4diN9w3XxQYZv21Eq91DduD9dWE7aYbdJiXu2DpM8VRdTpC9K3xXhzSkczHWKpftYZyNQq8KQsQBPHLc5pQFfi7Fqr4YCPk4ZFmRSiY6MsnkJc2rtzYAi9BKh9wAGZteAE8oWqphhiTBbEwHUiZdXAKe1BSPrQFsrc2Q6oizcgwm4rjmESMv3PGoQCpCAuvQL1kd9TULwsng7vRyMsUUh2KvCFSHrpqaDEpXEXH5rjFRzzwL2FBU6VATpeDj2BBS5NcxwrDqCcbEBerq3QYHSkQr1dd3MeATt5HzaGyA8xLvfohHdgZ4rWGT9zQf7rCk2xPeh1G8KRqSEDE4SUtBZxZbxF34dPxJDr4xqzjG2FKPtptkmXrBWNV3DVxPn5V8WL8bCo6HraLdUcmDJN7kn8dYSEgFhr4nwtCt4yKdsVtmAHEMhaMmGVRd92kiE5Xtc2ey3ZsHuWHRQX1T5Dw8xCCJngGcas3eMMr2J2N8cYFJkqCzuNPn8JZM9wqQBNay7ygsSR8Jj2ffo6veKRZSkcLzpCLWrxYj7LhMRxLkxLGY64GmWXL1aoyjQar3mFph6ZYmYUD3G934YTRKkUpV56VsNmSVxrNFbRCEotZ2s5Xzn5UJDU3NtaqDE4WqckKK7AXXB7DTLKfwT39RxjFep7xep6HThP7TfhL15KwB1RhgYF8cmExFwWoiMKsGkF9P3Jy6PZBVa4pWEXGCF8pUfprjKUffUm8wa8c4UQXNKSGd19y9sscamFqa5iEsxmDFXti6bqcGmG58ggneM8k9P91QBzoMy1JZFxv955n9CQV27wWJmaWRErjrpbtgJQmVx1fhQDCmQJvTHduSYmZBjYRi7TrYkjfBc1pheMgH6uzxJ6LJ92T7B1kPqvMTwiDareuW7mcR9rNwUNorWZMvH8uACNd1sqoERGtfVLkNTirmWJ6nfnqw1WPPgiCQ5nBcixusHy26btdvEVmjDjx9iNb3RPJKCiDbQLBq1yZEbyTCu8T9yRXvCexFqz4DPN5NmjFFPvPtgmvpds1DEdGVVTfwAY4THxLTVyD4z87FEk5gGzn1Csod1ZDNctHpYpPpfk9CVgzXwp3z2D75KJvNu9jUVvMyVBS53WdnELYwcEsWdappt9y2fmefQmYuAww3ekvFGDA4KnxfpCCixHMcrSZX6khifCuqn6prTDFDAT7ssCt7QJKB7KpGreh9tE7SHqSAAkPUuiJNHqn6xPHVKFGmrV5fjy1zNMGLdpebEL5f37jXzPGCpmRXJ9ZCz3REznoZNNg1o4UJoACKuvcfbcg91CMZS6ZvhNp6WXYMNSZqgCcGpkTSS5Dvy5hHTy71bJhSoQPvusCP8v5C5ammcpiDSHeKoKyUJy5JghCnAiAYqZoN9MMATR64YmBqmzFxVqHdE9WqYYwkt7EerA2szprVoh5UwWfUFMkyCiAUUxmYdPodLpYaVZwBcMv5SiZuWEnX51H1oowEVj7qhr3SGRapBpYZmiLDdVSKtqru11XfQJfbCiG4uYk3U9ZsvzcZv5oXTmKCB4XEKFv7bK8w3wbpmgBCYJMZZ5JrTE8iZKKgL3TmiM9q2v1ggxtVq932axuw4ncELjL6oJ4Bo7Uck2zogD11KvhTGuSHwBk84cUpqCMSsauFiVSaZ47uYXKdAXNZKF3JRvzNjGePgDRnPMMruyztbNfNgRM3fz39s6NYRVGMth6MS5jbw1PYkYhp4nv66bjPpU7tGXuy6JhsT3iAZ52nKzNN88pPKJVMhi9mtA5hQtmTNfzQGZtC7EfVz5yd7TKXgPhUaCYD4KQSKASvi66nwkee1NUDPPA6kYU12ppV6PCzXg3Q6AX5mWPQv8eAg5PxUVCvAvRpuvZNUZWRCbJxgQEgNRfCYbsdT27z4MFttDw54bPDNZfWcNBP7Q6FRq5iJ6EcaXGof3sWPvjKXQ3G3VGBBJ4JhkzAFMcv274tnCMvfE6xQt4DDHFsWjTHbR4Mp8UZ49gDnUWqtMPH1KVXFQKJdDBUTmDrBSM3u33Ed3dKefqzeqWvhLvXVnfdSrUJhqa3bFsKzwMyeGjxdyuide5rZRff4JsT5Hb8erq4qUwckcWErv6L4kgJZc6MWREswrQn4KbrDHNUU1RxXzCKnhQfYMsKQT11XKB2uwHnF4b1CTkTJhafQSxiHFGA4KTP1qpftK3HtJaDRnw7wGoJqVoptAgBC6hmbWd1SdqDHC2e5dQUvXDciqkAv8vwWMxK6UWXzPkv4MMf11Dnmh1PFtbnZ26sJmoPwp4gWmWsidqtGvKRYdFiadMSAWfkpTQnWmQV5tBU51SbFMihDhSYHc835fVvEHZWzZUj2FhqSazJaoCgPiaQN38zeJ4SE2rZ8vhXy4m2UXuB1ZjsvHVqLJvmbgC33CqEMicoT4P4vjuhHUsVuwspcWYkW87ZaCj5qMfqxt4ZnygnGssjsQfXK6GMtNeR4iDJK9qHncBbJ5ye5Lih2tyU1JFB2FcZYB7dQSHGpUS6bMFktFNgPhCZ5CGjgCiKQAYBe4jx6TJDinLjWQ9P', + 'U2Jtp6oeBTnbGS7ed2PvkudukZYRBBSfi557aCmzQtYxoQzbYeTw82vRjtVCke3FQ7iK8PjEFwjBjFDH8ZAXhqjCZ33kZDrRS92kUJPGe1zZsSeJcMz6y4QVsVrhpnmgxmmCKo9ut2bQa96ExLUBojZznoW56qGbKut9U58QeowdtgMuHPxnUF4Srgucn3kUvd2aWVydGjNdRFzDVCArz9iqBNejbcfcJNSqyzJX88KBTTQwYKcxkNtkBF5ZzUMiAZVmymzmAnHUob8HRzVhD19sTEdKF3TEaiPhyWVUKgtUApXuAwwygxH8FCfrknESQFWXQdeniVs3aHPxeqPRyaeqAhkUjBRSSsZqjXYaXfoCbVN7mkQyYNMPcQ9qptQY1yBZBEh2EFZHbWuYBeCYFGb1R64HPinTkyEPAT76xhUCrqPCcejzLNAfHffZj3G7nB83jPewAi8Jzf9ApT73R8FnzEwJeWWznKYKViyB357W28NNGThwZDgJu7VxxnJf1X2HYfE6yywCfidhUwwstcBUT1yFDXHxSzF84eWwufTKCoA36ZRgjct3FvvM2A4pnQCzDjwLGVFPapHJK15JVgGFXCmYNxtAnhhEZTfSJXemVuBQ9HceB88WRPJzQ8bvvUdDWJzAxdseLVseZec1nzufW6uj1MS7F9ri2hCfzwxJmGA42ycWcaqdmCFSmuJAQtbnAbEaYKaWXi1Rw3ksiuiWPfWCyGmdKTXALA8wb5LrJz5oRgxQ9mmcWmg38nRMMqepHmhSEEFVjFQTP6GdQ7sq2Smke3g26yEzTJrySEbBxDUey2gytnuhLhff3e2dWpDeUbpgHsBw3TWMriYKZrUNDFBTr6ii6efPrjiPphZx1RsMuUYhKucbTviPq4q71nm15wpySA1rC2M4vuNRMwMmMLfepAFPh4nH63mNixDnTJrcdETBDhZr8Km62cpj3BGWHtbcMYyk7NmshwvpD3Eym6PCDLrdLAjCDN6MtSCAHvfRQS4Sm49aCmHt7r17kAfNt8GccWDUErhhtNymRUff8wya5Grrrfzx7Ynp54HuDJ9EcR6aaE6buNzfqxrnuaLGedcBwWkaoAMrKoLDAmyPcYskEcNMrENLk3JRdSdRpXERVjAQs6hCZV65mVYVgnYx9YgcvatKnMNGu3sHgQUBdxgHHfzDNqdxhrwfuUZ38xPGv8soo7yvz8ahhnEddLhvwdm9x73SM6Cb1CXupy1gNz8dgkDP6TVshDPGbtcAqCXpsdUL9ZzzWQPUv67dzMEAcHaz7deo8wgrhGc6qtG2Vfg3bnAWk5JtUV5bV9v4zRdLKrvEiqCCxXgoztAh9DhgeMFr5RAGWwmUBJbrn5jMBK6ijj9MEoRdfcymDJtpbbU1uTUkjSAw2gnpAeXLsmbgL4wTZWBhqBRGWyEk6Xw4oKFwV4KKVvfYEXiDg9vSQqF2xbxeGh5w5s6KvqyWKjn9EWMHeRWX5xhrwsAUMXKDAn2eX4e74zNovGprUTDF6tpQYeeqrhxgqnLJ4PgnTkeJT7XxJANZCnqbdt2jnWiKsKUyv6WMHiZeuGFzFxjg8Kvj1DVrmtM347tE9xufxteMECTXiRHHDM1r9VXsdZuRBsHsdmY9i5K2uHCLwXproCHu4TyP3NS7PXjY6Rz1Ltk1PEuqabUc1Gr59vs6MB3dqxKZjRKVu7aSRCxamFaUhSuCdy8raqpaX7tCHmD8zTPTLEQgzZnNq9bFePiuNfGXCZMVrw1wcnjrs39uh1kL1j7nYAAGRE79b4rnAJwRxZdpL7X9Jr7MuQrsVSjwFhFpvUfoZ1yY7hj6uKxPvZwQMVVrmqfFxEJNrCfgUabNZQLvRA6UuZbsg9BGLYtkfNJjLEpRJWiwJqKhnYC28DKmq4a7s29UN1wyePnKHNwAxDv7dzhdhZJa1XS7p4PgKKKzu24mDSKrHC1qnfcgTHQDbebNyveX8UEB2wwRgXLxoHsGmbWgTnnoW1P2x5m1nQomtU82W544iB1i48qc28wXLjdDk3x3P11VZVphRupHUa7y7F5KiG6UsnA87tHs6UB4K6C3dp59YvSdUCNW9khhHkT8mg4VVpLSvihwy8B2FBBTsXDaSnhNAmgx2SyHGXLTfZAdfhw8CSZRHxgeGif5upYSTxzfbH1QRUm6g4CwGScfyKM9D5nXKewfXrb6VZPJpDPXUxQnMaQ8wM1AgUMw3sX7TJJmYmfeWrnR8uhaLY7RFh3gAWfGCRr6SLMoKyez32DKH7gTGsj1ymM39JRuDKugMt5TW1LhhYuiAGX8zH5GnyPqMSNfVZiJYsh1ZPqF3AVkmTgd7VGR8ZBGyFUcrrw98kDMsQ3vBpYgCAwBGRvoA8cs4hvCF3udSRoqiPVXyDG8sS49GV74Jr4VHV7TTTBBdY8V6WPhL9cxHbzoMGYDFE9DN86b5jPK8Avu7Tjw9gKYUaUWmFbvr7xS1oG5fWHSmQ9uXeBzfi2kGBZDCiqcpBymBqzphePVFkvRHhAQiERMwF5LSZwo67joCHiPDNLV1uFG4wXCR5RxVpdjE2jxd8qCqJSub691AWWVDdRBK2i9zXByh5QAQtUTFPRuNHTyTcpA7Yaz1usgGSfQFPe2meQjjwkYy6Gnz53ynboPmP83v2BSwFZFNnubA55nVJPdqfJDUY4bRspJYMASWUzDECQKipgxeFjUtnZVAhNaDj7iCmPZ6WGFBgF4pULYqY1AoP33hcooQ8rdRDdJ7iidRowYVNMgb8QHC7XgHYFRrUDPBDQ6aefp58rYHv2BJrVdz3z1Jn8dAsyhx2eW6kf9URqB5ygAwTWSiogSfsQxye4eSF9o7pA5eDLQRsgN41Qm6M1ZfVkEktYLb7WSKxLesggCgPng8S7CKqp98WYf2h3FyTPukDSkc84SSfxFg6DQKRkdKhcGYd7aNBgNG3H4AkFgBe62Cjtor2QDJCYmTDnfb92adShmDdGvqZw2Tsj8XEw1TfCSH2ZqMUYNbGbATc2ZQK5daXHXwviqo4DjrEURWXUiepNifVHLt8W1WvAYLfKJHwPa3aBq9qQX7ik51KrLmLAdXhFofrmoAAuN6E9rULFUsTcp7xMHEKyAL7WjfwRGgortnMyhhtVfVqHAtiZmvGuppFHjYw7zFg6Shy6GhTPinzcPLwuiYSCLxU4SzvoANLvhMDRDgHuph8C3BVB3UjunEazhu1ctvTnoRLwqAQELDBsgW6bwQo7kLj2Lfrc88WUnDyxjsDphRsbJAaSWTAcNA3aYhKYjrxS5uhMa9C77NYRKPJPuQGw5MtiSjSojXtyfcWuyJAyvs9Cvra41FqiMhqtummsMbhUMZttfe5nGQcvnDUZZorR9TJXphpQn4GaGbRskU1g6HMdfCtAvhBbyccMjfk8LAJm7XPhsh1fGKC2Y8xKfRxhbystVmjzZ9Zt7XQdafhDKfHt21d7mw4pLPzEZoNNtgHwK3BKZv3b7AS2hsrBu6ct8cPnCcm4Y2iVNrpcZ6x7TLMupJRoyYwrPw9d3XNcDWMDMrqHEsM5d54hee1mQZk7Pyo6mEk4J6DNFh3u7GjfPtZwz9t6L7hUex93nqbvVcF5uTHpX8iw2kZdYgp9bH2HbNrMnL1Myx9XCLybzadAmRhGGRKVz9QtpoUGrNWcfYR5SAdvAUiKmudnakqzUe2F1Y45G1HbkQjbWfFHtDqTXcWoVdL3rzNzekZybbGjobSUoJyCwTEh3cSZJditQAQhQ9P93YW6MkpFQ2FtmS8SWZKy2PxMMec7i2ugCU5zBKPkNrugSgZr2TWejUE74Vr4MHvs5U7pS6b7obrVLkEuDWGCdnR4BDcvBFVPTNKPUUUXBw291nqEMoAWTxWYYSZhwkY6p9ftcx2y1Kq7P2RPiDZg1HYciuDdfGFNgmTYv', ], tokens: [ADDRESSES.null], }) } -} \ No newline at end of file +} From dd777e002e63c8ed385a5d09b92e9efbf65fd353 Mon Sep 17 00:00:00 2001 From: Divljo31 <71217620+Divljo31@users.noreply.github.com> Date: Mon, 2 Dec 2024 14:43:49 +0100 Subject: [PATCH 1277/1768] Added usd0 in Polynomial tvl calculationg (#12522) Co-authored-by: Divljo31 --- projects/helper/coreAssets.json | 3 ++- projects/polynomial-liquidity-layer/index.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index c7a0e7a615..0a0ee2e5af 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1946,7 +1946,8 @@ "polynomial": { "USDC": "0x17C9D8Cef7Ef072844EEaEdE1F9f54C7E3fa8743", "SDAI": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", - "sUSDe": "0x2A06DEAc3E863c23DD6a89Eeacd80aBA9E08B77B" + "sUSDe": "0x2A06DEAc3E863c23DD6a89Eeacd80aBA9E08B77B", + "USD0": "0x6224dC817dC4D5c53fcF3eb08A4f84C456F9f38f" }, "cronos_zkevm": { "wzkCRO": "0xc1bf55ee54e16229d9b369a5502bfe5fc9f20b6d", diff --git a/projects/polynomial-liquidity-layer/index.js b/projects/polynomial-liquidity-layer/index.js index dda769ab1f..c5780e43ce 100644 --- a/projects/polynomial-liquidity-layer/index.js +++ b/projects/polynomial-liquidity-layer/index.js @@ -4,6 +4,6 @@ const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { polynomial: { - tvl: sumTokensExport({ owner: '0xc133983D6d9140923b5eaE52664221d9099cf119', tokens: [ADDRESSES.polynomial.USDC,ADDRESSES.polynomial.SDAI, ADDRESSES.polynomial.sUSDe]}) + tvl: sumTokensExport({ owner: '0xc133983D6d9140923b5eaE52664221d9099cf119', tokens: [ADDRESSES.polynomial.USDC,ADDRESSES.polynomial.SDAI, ADDRESSES.polynomial.sUSDe, ADDRESSES.polynomial.USD0]}) } } \ No newline at end of file From 9a05f2aa057455ad0d2939aa88dbf1f1a5307961 Mon Sep 17 00:00:00 2001 From: kavsky02 <95619352+kavsky02@users.noreply.github.com> Date: Mon, 2 Dec 2024 14:44:43 +0100 Subject: [PATCH 1278/1768] Update Pools' addresses to new ones (#12524) --- projects/deltaprime/index.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/projects/deltaprime/index.js b/projects/deltaprime/index.js index 0d50cd626b..a297a8128d 100644 --- a/projects/deltaprime/index.js +++ b/projects/deltaprime/index.js @@ -18,20 +18,20 @@ const assetToAddressMappingAvalanche = require('./mappings/assetToAddressMapping const assetToAddressMappingArbitrum = require('./mappings/assetToAddressMappingArbitrum.json') // Avalanche -const USDC_POOL_TUP_CONTRACT = '0x2323dAC85C6Ab9bd6a8B5Fb75B0581E31232d12b'; -const USDT_POOL_TUP_CONTRACT = '0xd222e10D7Fe6B7f9608F14A8B5Cf703c74eFBcA1'; -const WAVAX_POOL_TUP_CONTRACT = '0xD26E504fc642B96751fD55D3E68AF295806542f5'; -const BTC_POOL_TUP_CONTRACT = '0x475589b0Ed87591A893Df42EC6076d2499bB63d0'; -const ETH_POOL_TUP_CONTRACT = '0xD7fEB276ba254cD9b34804A986CE9a8C3E359148'; +const USDC_POOL_TUP_CONTRACT = '0x8027e004d80274FB320e9b8f882C92196d779CE8'; +const USDT_POOL_TUP_CONTRACT = '0x1b6D7A6044fB68163D8E249Bce86F3eFbb12368e'; +const WAVAX_POOL_TUP_CONTRACT = '0xaa39f39802F8C44e48d4cc42E088C09EDF4daad4'; +const BTC_POOL_TUP_CONTRACT = '0x70e80001bDbeC5b9e932cEe2FEcC8F123c98F738'; +const ETH_POOL_TUP_CONTRACT = '0x2A84c101F3d45610595050a622684d5412bdf510'; const SMART_LOANS_FACTORY_TUP_AVALANCHE = '0x3Ea9D480295A73fd2aF95b4D96c2afF88b21B03D'; // Arbitrum -const USDC_POOL_TUP_ARBI_CONTRACT = '0x8FE3842e0B7472a57f2A2D56cF6bCe08517A1De0'; -const ETH_POOL_TUP_ARBI_CONTRACT = '0x0BeBEB5679115f143772CfD97359BBcc393d46b3'; -const BTC_POOL_TUP_ARBI_CONTRACT = '0x5CdE36c23f0909960BA4D6E8713257C6191f8C35'; -const ARB_POOL_TUP_ARBI_CONTRACT = '0x2B8C610F3fC6F883817637d15514293565C3d08A'; -const DAI_POOL_TUP_ARBI_CONTRACT = '0xd5E8f691756c3d7b86FD8A89A06497D38D362540'; +const USDC_POOL_TUP_ARBI_CONTRACT = '0x8Ac9Dc27a6174a1CC30873B367A60AcdFAb965cc'; +const ETH_POOL_TUP_ARBI_CONTRACT = '0x788A8324943beb1a7A47B76959E6C1e6B87eD360'; +const BTC_POOL_TUP_ARBI_CONTRACT = '0x0ed7B42B74F039eda928E1AE6F44Eed5EF195Fb5'; +const ARB_POOL_TUP_ARBI_CONTRACT = '0xC629E8889350F1BBBf6eD1955095C2198dDC41c2'; +const DAI_POOL_TUP_ARBI_CONTRACT = '0xFA354E4289db87bEB81034A3ABD6D465328378f1'; const SMART_LOANS_FACTORY_TUP_ARBITRUM = '0xFf5e3dDaefF411a1dC6CcE00014e4Bca39265c20'; From cc23771146c3d0dac8d4af288900d4a55f2f1826 Mon Sep 17 00:00:00 2001 From: Emu Meme Date: Mon, 2 Dec 2024 13:49:38 +0000 Subject: [PATCH 1279/1768] Add Emu (#12523) --- projects/emumeme/index.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 projects/emumeme/index.js diff --git a/projects/emumeme/index.js b/projects/emumeme/index.js new file mode 100644 index 0000000000..9f1efb3dd1 --- /dev/null +++ b/projects/emumeme/index.js @@ -0,0 +1,3 @@ +const { masterchefExports } = require('../helper/unknownTokens') + +module.exports = masterchefExports({ chain: 'bsc', masterchef: '0x99e1F72d10ad66906e18b02501e3395B8C4470FF', nativeToken: '0x0dfbB60c53d9226E8D70AA94eac614D8294D7Fa2', useDefaultCoreAssets: true, }) \ No newline at end of file From 33b023469dccebc0ab9077c157a5f16cbb1d5a48 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:51:04 +0000 Subject: [PATCH 1280/1768] Remove duplicates + list nexusBTC (#12527) --- projects/helper/bitcoin-book/chakra.js | 6 ------ projects/helper/bitcoin-book/index.js | 2 ++ projects/helper/bitcoin-book/nexusbtc.js | 10 ++++++++++ projects/nexusbtc/index.js | 11 +++++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 projects/helper/bitcoin-book/nexusbtc.js create mode 100644 projects/nexusbtc/index.js diff --git a/projects/helper/bitcoin-book/chakra.js b/projects/helper/bitcoin-book/chakra.js index ea6ecd148e..c9085c2ea5 100644 --- a/projects/helper/bitcoin-book/chakra.js +++ b/projects/helper/bitcoin-book/chakra.js @@ -29,15 +29,10 @@ module.exports = [ 'bc1pu0h93g6cvsua7ggmccqg2z0nm2ycrjwnuyndp37synyxvncmh0zqlk0sz5', 'bc1pe8zfmgxtcf7ktv8n6276zr0ysr3w4lm9cauq7eu4vfgyem6mnxesxcuse5', 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', - 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', 'bc1q4nard6ndnh57xev095hqnrfh5lxxycwuewcwcc', 'bc1qak5ch78tcpfmztcldgr5tlgnd4t59p6cuqjcnf', 'bc1qn8gnv8y7u92tnqyzdnmtdvzyzszahn7js97jjj', - 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', - 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', 'bc1q397395pz4ktvucdq7uj3jv424sx7ygm94kvfr6', - 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', - 'bc1pyuzcl3alwq3dmkvqk7fnzvn6zwu62rjs6vzqe7pzpm88fgpxhg9qmzqeuw', 'bc1pa7hk6q3sp66euxtvdvfe6xjskjsll7mpp3alm920xnr6jhy08dfscc6nrj', 'bc1p7a4hwvvy44wt0mltkv4fmhuz5lt587ruqeyhvt5wp320304lhmdskkzh9u', 'bc1pj2h9dgwn6lkgnhh4pckaj7a44mh6rnjcvnfpv76jlqh9hmltt8qq87qrsw', @@ -151,7 +146,6 @@ module.exports = [ 'bc1prd5ltcsu4rhmwe3wawpeudtzpt5f7xcnp8yla3fxt5g2l5sz7f7sr8p9t5', 'bc1p3r59km6mg760jgcpzftz3ckve6w8g5qv0nnte3ajw0j6epxhhhhqzqkmym', 'bc1p5qp8dsa3mg7q2jxudmez6q83ceu86nduwrddfy0slu6ze3dcrq4qfhp0yv', - 'bc1pq6wxqycalncq6uskj47s5azx7sjl9q5gegfzyyunhu6qn66gppwslu3jwk', 'bc1p83ggjdaaj6dc8davgc8kykdj43l6dppa255eskc0k9k7uczaegts3hvtns', 'bc1pgrt28ph0vky6yhrjqcv74kckfkd753qms26lncdvvlkn4xudzgts9d0kqp', 'bc1pthefst3f4fqnx6ux6klspat7cz43srganhmcsv6jkmua3gjx0jzsvfye0g', diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 404a314666..1d9b806e8d 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -87,6 +87,7 @@ const bitlayerBridge = require('./bitlayer-bridge.js') const arkhamExchange = require('./arkham-exchange.js') const chakra = require('./chakra.js') const nerveNetworkBridge = require('./nervenetworkbridge.js') +const nexusbtc = require('./nexusbtc') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -193,4 +194,5 @@ module.exports = { arkhamExchange, chakra, nerveNetworkBridge, + nexusbtc } diff --git a/projects/helper/bitcoin-book/nexusbtc.js b/projects/helper/bitcoin-book/nexusbtc.js new file mode 100644 index 0000000000..a1162d38c9 --- /dev/null +++ b/projects/helper/bitcoin-book/nexusbtc.js @@ -0,0 +1,10 @@ +module.exports = [ + '31oxjGsmepoq2cipeGQ2zKZRRBCf1m3kAC', + 'bc1pe9sgyavfjphc7pgxfc9kvjfx5hkkjtzfsz2yqtfgddekcgngx0cqx8lt7m', + 'bc1pq8nu54gwcwgkdnav6gpwylcyhpmnza4tks5cagx6t0730g8jecaqu308s8', + 'bc1padqwaxlk6gfw2ceeq3caxrn95ygp7fs64x8fxmj829vahw22qu7sql0ga8', + 'bc1p5xukglzfcelarf7jtegfwxzsfquc4wt8dpulrgwhtmqtpmwg8hxq0t7ett', + 'bc1pgwfwpkx8rqp2p4lpcztkweqrhnyk973crm5a3c8hw4d2mdpksq3syhpldc', + 'bc1pu9pzaaywpggum9024zdqzer3u8cuc7pcunrsj0sgskqf2dd4fw4q0k9g38' + ] + \ No newline at end of file diff --git a/projects/nexusbtc/index.js b/projects/nexusbtc/index.js new file mode 100644 index 0000000000..5c9d73b3dc --- /dev/null +++ b/projects/nexusbtc/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require('../helper/sumTokens'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + +//https://www.matrixport.com/nexusbtcReserve + +module.exports = { + methodology: 'The total value locked (TVL) is calculated by summing up the balances of BTC wallets specified in the NexusBTC address list within the bitcoin address book', + bitcoin: { + tvl: sumTokensExport({ owners: bitcoinAddressBook.nexusbtc }), + }, +}; \ No newline at end of file From be27e92c8736ff8eb7771198b9d87762bba888d2 Mon Sep 17 00:00:00 2001 From: Greg Nazario Date: Mon, 2 Dec 2024 08:51:59 -0500 Subject: [PATCH 1281/1768] [emojicoin] Add TVL with emoji coins (#12463) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/emojicoin/index.js | 27 ++++++++++++++++ projects/helper/chain/aptos.js | 58 ++++++++++++++++++++++++++++------ projects/helper/env.js | 2 +- 3 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 projects/emojicoin/index.js diff --git a/projects/emojicoin/index.js b/projects/emojicoin/index.js new file mode 100644 index 0000000000..16ab753190 --- /dev/null +++ b/projects/emojicoin/index.js @@ -0,0 +1,27 @@ +const { function_view, timestampToVersion } = require("../helper/chain/aptos"); + +async function getAllMarkets(ledgerVersion) { + // This function will get all markets and the associated TVL in APT + const registry = await function_view({ + functionStr: "0xface729284ae5729100b3a9ad7f7cc025ea09739cd6e7252aff0beb53619cafe::emojicoin_dot_fun::registry_view", + args: [], + type_arguments: [], + ledgerVersion, + }) + return registry.total_quote_locked.value +} + +async function tvl(api) { + // const version = await timestampToVersion(api.timestamp, 1962588495); // this query is not working + const tvl_amount = await getAllMarkets(); + api.add("0x1::aptos_coin::AptosCoin", tvl_amount); +} + +module.exports = { + timetravel: false, + methodology: + "Aggregates TVL in all pools in Emojicoin.fun", + aptos: { + tvl, + }, +}; \ No newline at end of file diff --git a/projects/helper/chain/aptos.js b/projects/helper/chain/aptos.js index da5bffe902..b3fe6f453e 100644 --- a/projects/helper/chain/aptos.js +++ b/projects/helper/chain/aptos.js @@ -1,4 +1,3 @@ - const sdk = require('@defillama/sdk') const http = require('../http') @@ -6,6 +5,7 @@ const { getEnv } = require('../env') const coreTokensAll = require('../coreAssets.json') const { transformBalances } = require('../portedTokens') const { log, getUniqueAddresses } = require('../utils') +const { GraphQLClient } = require("graphql-request"); const coreTokens = Object.values(coreTokensAll.aptos) @@ -14,6 +14,7 @@ const endpoint = () => getEnv('APTOS_RPC') async function aQuery(api) { return http.get(`${endpoint()}${api}`) } + async function getResources(account) { const data = [] let lastData @@ -36,11 +37,6 @@ async function getResource(account, key) { return data } -async function getCoinInfo(address) { - if (address === '0x1') return { data: { decimals: 8, name: 'Aptos' } } - return http.get(`${endpoint()}/v1/accounts/${address}/resource/0x1::coin::CoinInfo%3C${address}::coin::T%3E`) -} - function dexExport({ account, poolStr, @@ -101,8 +97,10 @@ async function getTableData({ table, data }) { return response } -async function function_view({ functionStr, type_arguments = [], args = [] }) { - const response = await http.post(`${endpoint()}/v1/view`, { "function": functionStr, "type_arguments": type_arguments, arguments: args }) +async function function_view({ functionStr, type_arguments = [], args = [], ledgerVersion = undefined }) { + let path = `${endpoint()}/v1/view` + if (ledgerVersion !== undefined) path += `?ledger_version=${ledgerVersion}` + const response = await http.post(path, { "function": functionStr, "type_arguments": type_arguments, arguments: args }) return response.length === 1 ? response[0] : response } @@ -126,11 +124,52 @@ function sumTokensExport(options) { return async (api) => sumTokens({ ...api, api, ...options }) } +const VERSION_GROUPING = 1000000 + +// If I can get this timestampQuery to work... everything will work seamlessly +async function timestampToVersion(timestamp, start_version = 1962588495, end_version = 1962588495 + VERSION_GROUPING) { + // eslint-disable-next-line no-constant-condition + while (true) { + let closestTransactions = await findClosestTransaction(timestamp, start_version, end_version) + if (closestTransactions.length < 1) { + start_version += VERSION_GROUPING + end_version += VERSION_GROUPING + } else { + return closestTransactions[0].version + } + } +} + +const graphQLClient = new GraphQLClient("https://api.mainnet.aptoslabs.com/v1/graphql") +const timestampQuery = `query TimestampToVersion($timestamp: timestamp, $start_version: bigint, $end_version: bigint) { +block_metadata_transactions( + where: {timestamp: {_gte: $timestamp }, version: {_gte: $start_version, _lte: $end_version}} + limit: 1 + order_by: {version: asc} +) { + timestamp + version + } +}`; +async function findClosestTransaction(timestamp, start_version, end_version) { + let date = new Date(timestamp * 1000).toISOString() + + const results = await graphQLClient.request( + timestampQuery, + { + timestamp: date, + start_version, + end_version, + } + ) + + return results.block_metadata_transactions +} + module.exports = { endpoint: endpoint(), dexExport, aQuery, - getCoinInfo, getResources, getResource, coreTokens, @@ -139,4 +178,5 @@ module.exports = { getTableData, function_view, hexToString, + timestampToVersion }; diff --git a/projects/helper/env.js b/projects/helper/env.js index b665d9001b..62f91c5eb0 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -9,7 +9,7 @@ const DEFAULTS = { COVALENT_KEY: 'ckey_72cd3b74b4a048c9bc671f7c5a6', SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', ECLIPSE_RPC: 'https://eclipse.lgns.net', - APTOS_RPC: 'https://aptos-mainnet.pontem.network', + APTOS_RPC: 'https://fullnode.mainnet.aptoslabs.com', SUI_RPC: 'https://fullnode.mainnet.sui.io/', SUI_GRAPH_RPC: 'https://sui-mainnet.mystenlabs.com/graphql', FLOW_RPC: 'https://rest-mainnet.onflow.org', From 6a892d69aebdcd111994a58842f5824855e2ab4f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:16:05 +0100 Subject: [PATCH 1282/1768] mark exsat as doublecounted --- projects/exsat-credit-staking/index.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/projects/exsat-credit-staking/index.js b/projects/exsat-credit-staking/index.js index ab4402f2f6..ba7b48d24c 100644 --- a/projects/exsat-credit-staking/index.js +++ b/projects/exsat-credit-staking/index.js @@ -1,12 +1,13 @@ const { sumTokens } = require("../helper/chain/bitcoin"); -const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js'); async function tvl() { - return sumTokens({ owners: await bitcoinAddressBook.exsatCreditStaking() }) - } + return sumTokens({ owners: await bitcoinAddressBook.exsatCreditStaking() }) +} module.exports = { - methodology: 'TVL is based on Bitcoin addresses in the exSat credit staking contract, summing their associated Bitcoin balances.', - start: '2024-10-23', - bitcoin: { tvl }, + doublecounted: true, + methodology: 'TVL is based on Bitcoin addresses in the exSat credit staking contract, summing their associated Bitcoin balances.', + start: '2024-10-23', + bitcoin: { tvl }, }; From 016d67f40ea6e17ba3fb1f1017b8505894cb44eb Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 2 Dec 2024 12:09:13 -0600 Subject: [PATCH 1283/1768] add cmeth --- projects/mitosis/index.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/projects/mitosis/index.js b/projects/mitosis/index.js index 885708245c..354bdfa267 100644 --- a/projects/mitosis/index.js +++ b/projects/mitosis/index.js @@ -39,6 +39,13 @@ const uniBTC_ADDRESS = { }, }; +const cmETH_ADDRESS = { + mantle: { + asset: "0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA", + vault: "0x6FF000453a9c14f7d3bf381925c8cde565DbCe55", + } +}; + const ezETH_ADDRESS = { ethereum: { asset: "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", @@ -199,5 +206,12 @@ module.exports = { { type: 'vault', data: uniBTC_ADDRESS.bsc }, ] ) - } + }, + mantle: { + tvl: chainTVL( + [ + { type: 'vault', data: cmETH_ADDRESS.mantle }, + ] + ) + }, }; From 9aaffdf6f278faea66394005da7b8dfa4029da24 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:53:19 +0100 Subject: [PATCH 1284/1768] Bountive (#12528) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: “TeddyNotBear” Co-authored-by: Teddy Not Bear <106410805+TeddyNotBear@users.noreply.github.com> --- projects/bountive/index.js | 78 +++++++++++++++++++++------------ projects/helper/coreAssets.json | 3 +- projects/helper/tokenMapping.js | 5 ++- 3 files changed, 57 insertions(+), 29 deletions(-) diff --git a/projects/bountive/index.js b/projects/bountive/index.js index 74d80582d4..b3a4c89b49 100644 --- a/projects/bountive/index.js +++ b/projects/bountive/index.js @@ -1,41 +1,65 @@ const ADDRESSES = require('../helper/coreAssets.json') const { bountiveTokenAbi } = require("./abi"); -const { multiCall } = require('../helper/chain/starknet') +const { multiCall } = require('../helper/chain/starknet'); +const { sumTokens2 } = require('../helper/unwrapLPs'); const bountiveTokens = [ - // BoSTRK: Bountive STRK - "0x018e009bbb035c506234e7a8eca6a7229adfd59a278ba3845285d28b03ed6d53", - // BoETH: Bountive ETH - "0x02fcaebd41710024e25b6dc646a62acb6560125a699a3f695b6adb54a180aaee", - // BoUSDC: Bountive USDC - "0x028a88bf75f1b10dc8552051a56fbdc732084af514f6065f4c67ea6d50204720", - // BoUSDT: Bountive USDT - "0x0243d9a1cffc0b5ebbf549efd1232a96b1ef392fe595e91dd72103d5a8e7d847", + // BoSTRK: Bountive STRK + "0x018e009bbb035c506234e7a8eca6a7229adfd59a278ba3845285d28b03ed6d53", + // BoETH: Bountive ETH + "0x02fcaebd41710024e25b6dc646a62acb6560125a699a3f695b6adb54a180aaee", + // BoUSDC: Bountive USDC + "0x028a88bf75f1b10dc8552051a56fbdc732084af514f6065f4c67ea6d50204720", + // BoUSDT: Bountive USDT + "0x0243d9a1cffc0b5ebbf549efd1232a96b1ef392fe595e91dd72103d5a8e7d847", + // BoDAI: Bountive DAI + "0x00c359a6eb59a7cd68bfc3d7a44d05b15ba3fbbb4eebc2d59d52d37f123bea00", ] const underlyingsTokens = [ - // STRK - ADDRESSES.starknet.STRK, - // ETH - ADDRESSES.starknet.ETH, - // USDC - ADDRESSES.starknet.USDC, - // USDT - ADDRESSES.starknet.USDT, + // STRK + ADDRESSES.starknet.STRK, + // ETH + ADDRESSES.starknet.ETH, + // USDC + ADDRESSES.starknet.USDC, + // USDT + ADDRESSES.starknet.USDT, + // DAI + ADDRESSES.starknet.DAI, ] async function tvl(api) { - const supplied = await multiCall({ - calls: bountiveTokens, - abi: bountiveTokenAbi.total_supply, - }); - api.addTokens(underlyingsTokens, supplied) + const supplied = await multiCall({ + calls: bountiveTokens, + abi: bountiveTokenAbi.total_supply, + }); + api.addTokens(underlyingsTokens, supplied) +} + +async function staking(api) { + const bountiveTokens = [ + // BoBROTHER: Bountive BROTHER + "0x067c176764a49143e405fadb3e35b2a18a16cc00527e53fed92267c1be1c53a5", + ] + const underlyingsTokens = [ + // BROTHER + ADDRESSES.starknet.BROTHER, + ] + + const supplied = await multiCall({ + calls: bountiveTokens, + abi: bountiveTokenAbi.total_supply, + }); + api.addTokens(underlyingsTokens, supplied) + return sumTokens2({ api }) } - + module.exports = { - methodology: 'TVL is the total tokens deposited on Bountive', - starknet: { - tvl, - } + doublecounted: true, + methodology: 'TVL is the total tokens deposited on Bountive', + starknet: { + tvl, staking, + } }; \ No newline at end of file diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 0a0ee2e5af..d8dc410aa1 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1298,7 +1298,8 @@ "UNO": "0x0719b5092403233201aa822ce928bd4b551d0cdb071a724edd7dc5e5f57b7f34", "NSTSTRK": "0x04619e9ce4109590219c5263787050726be63382148538f3f936c22aa87d2fc2", "ZEND": "0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34", - "NSTR": "0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007" + "NSTR": "0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007", + "BROTHER": "0x03b405a98c9e795d427fe82cdeeeed803f221b52471e3a757574a2b4180793ee" }, "ton": { "TON": "0x0000000000000000000000000000000000000000", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ad04634ac9..efa1ae4460 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -84,7 +84,10 @@ const fixBalancesTokens = { }, xlayer: { [ADDRESSES.null]: { coingeckoId: "okb", decimals: 18 }, - } + }, + starknet: { + [ADDRESSES.starknet.BROTHER]: { coingeckoId: "starknet-brother", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 3bfa1ca7a218b4993cffb2a366f32150db0ade69 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 3 Dec 2024 10:54:41 +0200 Subject: [PATCH 1285/1768] Add Ethereum TVL calculation to Grafun project (#12529) --- projects/grafun/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/grafun/index.js b/projects/grafun/index.js index 92cbfbc585..fcbeaadee9 100644 --- a/projects/grafun/index.js +++ b/projects/grafun/index.js @@ -3,5 +3,8 @@ module.exports = { methodology: "TVL is calculated by aggregating the market value of BNB tokens held within the Token Sale Factory smart contract.", bsc: { tvl: sumTokensExport({ owner: '0x8341b19a2A602eAE0f22633b6da12E1B016E6451', token: nullAddress }) + }, + ethereum: { + tvl: sumTokensExport({ owner: '0xb8540a7d74Cc4912443e8c4B2064B640FC763c4f', token: nullAddress }) } }; From d0a492d4cdec300b4eef8084622abe3f55e3ba13 Mon Sep 17 00:00:00 2001 From: MD Date: Tue, 3 Dec 2024 09:55:07 +0100 Subject: [PATCH 1286/1768] feat: add blast network for `impermax-finance` (#12530) --- projects/impermax/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/impermax/index.js b/projects/impermax/index.js index 1d78ec640b..0b5d8d3416 100644 --- a/projects/impermax/index.js +++ b/projects/impermax/index.js @@ -77,6 +77,12 @@ const config = { '0x3b1f3a48a70e372144307a4b126a5cda46e169ad', '0x2944e1544cE201ae19e6385490bBA13DaA5f44e4' ] + }, + blast: { + factories: [ + '0x7b816c1ccafa7d3e71e279ed9dc3226484f6ef87', + '0xb3c80cfcdd177e3fce2e66870e4768d1ead89f6c' + ] } } @@ -163,7 +169,8 @@ const blacklistedPools = { base: [], mantle: [], optimism: [], - real: [] + real: [], + blast: [] } module.exports = {} From a5635a4bf5f919d73052cd0b0de8f34e0c4b364e Mon Sep 17 00:00:00 2001 From: rav <85165079+rav-ipor@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:57:16 +0100 Subject: [PATCH 1287/1768] Fix IPOR Derivatives TVL calculations (#12532) Co-authored-by: adam Co-authored-by: kris-ipor <98769272+kris-ipor@users.noreply.github.com> --- projects/ipor-fusion/index.js | 2 +- projects/ipor/index.js | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/projects/ipor-fusion/index.js b/projects/ipor-fusion/index.js index edef674d2c..224ae04aed 100644 --- a/projects/ipor-fusion/index.js +++ b/projects/ipor-fusion/index.js @@ -1,6 +1,6 @@ const { getConfig } = require('../helper/cache') -const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/main/mainnet/addresses.json"; +const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/refs/heads/defillama/mainnet/addresses.json"; async function tvl(api) { const config = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); diff --git a/projects/ipor/index.js b/projects/ipor/index.js index 11b43e51c9..245d0fbab8 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -1,7 +1,7 @@ const { abi } = require("./abi"); const { getConfig } = require('../helper/cache') -const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/main/mainnet/addresses.json"; +const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/refs/heads/defillama/mainnet/addresses.json"; const V2DeploymentBlockNumber = 18333744 async function tvlEthereum(api) { @@ -15,22 +15,26 @@ async function tvlEthereum(api) { } async function calculateTvlForV2(api) { - const chain = api.chain - const {[chain]: { IporProtocolRouter, pools, vaults }} = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL) + const chain = api.chain; + const {[chain]: { IporProtocolRouter, pools }} = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); - let assets = vaults.map(i => i.asset) - assets = [...new Set(assets)] + // pools with swaps + const poolsWithSwaps = pools.filter(pool => pool.swapsAvailable); + const assets = [...new Set(poolsWithSwaps.map(pool => pool.asset))]; - const res = await api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: IporProtocolRouter }) - const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: assets }) + const [balances, decimals] = await Promise.all([ + api.multiCall({ abi: abi.getBalancesForOpenSwap, calls: assets, target: IporProtocolRouter }), + api.multiCall({ abi: 'erc20:decimals', calls: assets }) + ]); - res.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool, }, i) => { - const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool - const decimal = 18 - decimals[i] - api.add(assets[i], balance / (10 ** decimal)) + balances.forEach(({ totalCollateralPayFixed, totalCollateralReceiveFixed, liquidityPool }, i) => { + const balance = +totalCollateralPayFixed + +totalCollateralReceiveFixed + +liquidityPool; + api.add(assets[i], balance / (10 ** (18 - decimals[i]))); }); - const tokensAndOwners = pools.map(pool => [pool.asset, pool.AmmTreasury]); - return api.sumTokens({ tokensAndOwners, blacklistedTokens: assets }); + + // pools without swaps + const tokensAndOwners = pools.filter(pool => !pool.swapsAvailable).map(pool => [pool.asset, pool.AmmTreasury]); + return api.sumTokens({ tokensAndOwners }); } async function calculateTvlForV1(api) { From 3be74166e513ce22e891bcf569aec946e137b4fc Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 10:08:04 +0100 Subject: [PATCH 1288/1768] Renec lend (#12536) Co-authored-by: anhoangphuc --- projects/helper/solana.js | 15 +++++----- projects/renec-lend/index.js | 55 ++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 projects/renec-lend/index.js diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 67fbc7ca8a..3f09416a98 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -135,8 +135,9 @@ async function getTokenAccountBalances(tokenAccounts, { individual = false, allo return individual ? balancesIndividual : balances } -async function getMultipleAccounts(accountsArray) { - const connection = getConnection() +async function getMultipleAccounts(accountsArray, {api} = {}) { + const chain = api?.chain ?? 'solana' + const connection = getConnection(chain) if (!accountsArray.length) return [] accountsArray.forEach((val, i) => { if (typeof val === 'string') accountsArray[i] = new PublicKey(val) @@ -219,7 +220,7 @@ async function sumTokens2({ if (owners.length) tokensAndOwners = tokens.map(t => owners.map(o => [t, o])).flat() } if (!tokensAndOwners.length) { - const _owners = getUniqueAddresses([...owners, owner].filter(i => i), 'solana') + const _owners = getUniqueAddresses([...owners, owner].filter(i => i), chain) if (_owners.length) { const data = await getOwnerAllAccounts(_owners) @@ -248,18 +249,18 @@ async function sumTokens2({ } if (tokenAccounts.length) { - tokenAccounts = getUniqueAddresses(tokenAccounts, 'solana') + tokenAccounts = getUniqueAddresses(tokenAccounts, chain) const tokenBalances = await getTokenAccountBalances(tokenAccounts, { allowError, chain }) await transformBalances({ tokenBalances, balances, chain, }) } if (solOwners.length) { - const solBalance = await getSolBalances(solOwners, { chain }) - sdk.util.sumSingleBalance(balances, 'solana:' + ADDRESSES.solana.SOL, solBalance) + const solBalance = await getSolBalances(solOwners) + sdk.util.sumSingleBalance(balances, `${chain}:` + ADDRESSES.solana.SOL, solBalance) } - blacklistedTokens.forEach(i => delete balances['solana:' + i]) + blacklistedTokens.forEach(i => delete balances[`${chain}:` + i]) return balances diff --git a/projects/renec-lend/index.js b/projects/renec-lend/index.js new file mode 100644 index 0000000000..0258572a8b --- /dev/null +++ b/projects/renec-lend/index.js @@ -0,0 +1,55 @@ +const { sumTokens2, decodeAccount, getMultipleAccounts, getConnection, } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js"); + +const RENEC_LEND_SOLANA_PROGRAM_ID = new PublicKey("9L193MV4yakKcgNT2tN4Kvf1ypn9c1sVMvsRn1Amw2Au"); +const RENEC_LEND_RENEC_PROGRAM_ID = new PublicKey("AqR1WSUwNeVsz66ayH2J8iTyiGMgouRwPqzzMaxx49ba"); + +const getProgram = (api) => api.chain === 'solana' ? RENEC_LEND_SOLANA_PROGRAM_ID : RENEC_LEND_RENEC_PROGRAM_ID; + +async function borrowed(api) { + const connection = await getConnection(api.chain); + const programId = getProgram(api); + const reserves = await connection.getProgramAccounts( + programId, + { + filters: [{ + dataSize: 619, + }], + } + ); + const reserveAddresses = reserves.map((account) => account.pubkey.toBase58()); + + const infos = await getMultipleAccounts(reserveAddresses, { api }) + infos.forEach(i => { + const decoded = decodeAccount('reserve', i); + if (decoded === null) return; + const { info: { liquidity } } = decoded; + const amount = liquidity.borrowedAmountWads.toString() / 1e18 + api.add(liquidity.mintPubkey.toString(), amount) + }) +} + +async function tvl(api) { + const connection = await getConnection(api.chain); + const programId = getProgram(api); + + const marketAccounts = await connection.getProgramAccounts( + programId, + { + filters: [{ + dataSize: 290, + }], + } + ); + const marketAuthorities = marketAccounts.map((account) => PublicKey.findProgramAddressSync([account.pubkey.toBytes()], programId)[0]); + return sumTokens2({ owners: marketAuthorities, api }); +} + +module.exports = { + timetravel: false, + solana: { tvl, borrowed, }, + renec: { tvl, borrowed, }, + methodology: + "TVL consists of deposits made to the protocol and like other lending protocols, borrowed tokens are not counted. Coingecko is used to price tokens.", +}; + From cfa4b336bac093d00dbd7bf2d68bbc8f27c58c69 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 10:19:24 +0100 Subject: [PATCH 1289/1768] update avalon usdalend #12534 --- projects/avalon-finance-usdalend/index.js | 6 ++++-- projects/avalon-finance/index.js | 6 ------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/projects/avalon-finance-usdalend/index.js b/projects/avalon-finance-usdalend/index.js index 25cc7ba8ce..daad08e4b9 100644 --- a/projects/avalon-finance-usdalend/index.js +++ b/projects/avalon-finance-usdalend/index.js @@ -4,11 +4,13 @@ const methodologies = require('../helper/methodologies') const { mergeExports } = require('../helper/utils') //@note Main & Innovative Markets +const getExports = address => aaveExports(address, '', undefined, [address], { v3: true }) const mainMarket = { - iotex: aaveExports('', '', undefined, ['0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'], { v3: true }), + iotex: getExports('0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'), + taiko: getExports('0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'), + zircuit: getExports('0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'), } - module.exports = mergeExports( mainMarket, ) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index bfbd464836..457adca3f7 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -75,13 +75,7 @@ const listaMarkets = { bsc: aaveExports('', '', undefined, ['0x5157f63bE7808DEB090Eee7762e917745896A09E'], { v3: true }), // BSC - ListaDAO } -// @note USDa Defi Lending Markets, not USDaLend -const usdaDefiLendingMarkets = { - taiko: aaveExports('', '', undefined, ['0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'], { v3: true }), -} - module.exports = mergeExports( mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, - usdaDefiLendingMarkets, ) module.exports.methodology = methodologies.lendingMarket From 2ba06da763095766beef826b3a7e65b815c5d60f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 10:26:26 +0100 Subject: [PATCH 1290/1768] update sacra #12531 --- projects/helper/coreAssets.json | 3 ++- projects/sacra/index.js | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index d8dc410aa1..4fac20d486 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1917,7 +1917,8 @@ "USDC_e": "0xfbda5f676cb37624f28265a144a48b0d6e87d3b6" }, "real": { - "RWA": "0x4644066f535ead0cde82d209df78d94572fcbf14" + "RWA": "0x4644066f535ead0cde82d209df78d94572fcbf14", + "USDC": "0xc518A88c67CECA8B3f24c4562CB71deeB2AF86B7" }, "saakuru": { "WOAS": "0x557a526472372f1F222EcC6af8818C1e6e78A85f", diff --git a/projects/sacra/index.js b/projects/sacra/index.js index 9281dc90b8..e9391e979e 100644 --- a/projects/sacra/index.js +++ b/projects/sacra/index.js @@ -1,12 +1,22 @@ -const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') -const tresury = "0x146dd6E8f9076dfEE7bE0b115bb165d62874d110"; -const rewardPool = '0x8E629C4301871d2A07f76366FE421e86855DC690'; +const ADDRESSES = require('../helper/coreAssets.json') + +// fantom contracts +const controllerFantom = '0xE5365c31c08d6ee44fdd33394ba279b85557c449'; +const tresuryFantom = "0x146dd6E8f9076dfEE7bE0b115bb165d62874d110"; +const rewardPoolFantom = '0x8E629C4301871d2A07f76366FE421e86855DC690'; +// real contracts +const controllerReal = '0x6ce857d3037e87465b003aCbA264DDF2Cec6D5E4'; +const tresuryReal = '0xd0C1378c177E961D96c06b0E8F6E7841476C81Ef'; +const rewardPoolReal = '0xb35E67FD20070C3d3dC5EEa29D62e95b707471cA'; module.exports = { - methodology: `We count the WFTM on treasuty and reward pool`, + methodology: `We count the WFTM and USDC on treasuty, reward pool and controller contracts`, fantom: { - tvl: sumTokensExport({ token: ADDRESSES.fantom.WFTM, owners: [tresury, rewardPool] }) - } + tvl: sumTokensExport({ token: ADDRESSES.fantom.WFTM, owners: [controllerFantom, tresuryFantom, rewardPoolFantom] }) + }, + real: { + tvl: sumTokensExport({ token: ADDRESSES.real.USDC, owners: [controllerReal, tresuryReal, rewardPoolReal] }) + }, } \ No newline at end of file From 4506f899b7f434addbf833c11bdd3dac08a5e0c9 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:00:17 +0000 Subject: [PATCH 1291/1768] remove duplicated wallet (#12537) --- projects/helper/bitcoin-book/bitlayer-bridge.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/helper/bitcoin-book/bitlayer-bridge.js b/projects/helper/bitcoin-book/bitlayer-bridge.js index 85e16abf14..9d8065ff19 100644 --- a/projects/helper/bitcoin-book/bitlayer-bridge.js +++ b/projects/helper/bitcoin-book/bitlayer-bridge.js @@ -4,7 +4,6 @@ module.exports = [ "33uhW878fbvVxZuZ216q2XvgdajLdG4rN4", "32a7u8tM45GPSdjzy7PbRvuncEvHFxnYR4", "3D3a4fPJ5HKw43Qd6QHtoJ6RvMUL7UBDT5", - "19M7Z1E8Bs4pkXmHJrrJtngmVMUmgFu4K2", "bc1p87c2auxxj372evzhd5f5huddtrladtkn3z4p94ew32qvwcsgujestjj45r", "bc1puqn6dw6etk6yg8zruvf2s94cmhxkfncsaumwhtfhu5qy3e6m94sq37eq66", "bc1pvnh3zy48ml3nhzhqrtc7endhj9rrtrv5puy2775p3jwka8y99aqsz78uu2", From 5abbea6c40dae63f31a4b9000a206fa40c5848b1 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:52:40 +0000 Subject: [PATCH 1292/1768] Fix nexus btc (#12538) --- projects/helper/bitcoin-book/nexusbtc.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/projects/helper/bitcoin-book/nexusbtc.js b/projects/helper/bitcoin-book/nexusbtc.js index a1162d38c9..4b7500ca6e 100644 --- a/projects/helper/bitcoin-book/nexusbtc.js +++ b/projects/helper/bitcoin-book/nexusbtc.js @@ -1,10 +1,4 @@ module.exports = [ '31oxjGsmepoq2cipeGQ2zKZRRBCf1m3kAC', - 'bc1pe9sgyavfjphc7pgxfc9kvjfx5hkkjtzfsz2yqtfgddekcgngx0cqx8lt7m', - 'bc1pq8nu54gwcwgkdnav6gpwylcyhpmnza4tks5cagx6t0730g8jecaqu308s8', - 'bc1padqwaxlk6gfw2ceeq3caxrn95ygp7fs64x8fxmj829vahw22qu7sql0ga8', - 'bc1p5xukglzfcelarf7jtegfwxzsfquc4wt8dpulrgwhtmqtpmwg8hxq0t7ett', - 'bc1pgwfwpkx8rqp2p4lpcztkweqrhnyk973crm5a3c8hw4d2mdpksq3syhpldc', - 'bc1pu9pzaaywpggum9024zdqzer3u8cuc7pcunrsj0sgskqf2dd4fw4q0k9g38' ] \ No newline at end of file From c5369ed29a6f75945ac999e75cf1ff22dd8e5325 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:09:36 +0000 Subject: [PATCH 1293/1768] Divide Resolv products (#12540) --- projects/resolv-usr/index.js | 15 +++++++++++++++ projects/resolv/index.js | 2 -- 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 projects/resolv-usr/index.js diff --git a/projects/resolv-usr/index.js b/projects/resolv-usr/index.js new file mode 100644 index 0000000000..a44f7f9e76 --- /dev/null +++ b/projects/resolv-usr/index.js @@ -0,0 +1,15 @@ +const USR = "0x66a1E37c9b0eAddca17d3662D6c05F4DECf3e110"; + +const erc20 = { + "totalSupply": "uint256:totalSupply" +}; + +async function ethTvl(api) { + api.add(USR, await api.call({ abi: erc20.totalSupply, target: USR })); +} + +module.exports = { + ethereum: { + tvl: ethTvl + } +}; \ No newline at end of file diff --git a/projects/resolv/index.js b/projects/resolv/index.js index 95ba4c2387..705a1cb9bb 100644 --- a/projects/resolv/index.js +++ b/projects/resolv/index.js @@ -1,4 +1,3 @@ -const USR = "0x66a1E37c9b0eAddca17d3662D6c05F4DECf3e110"; const RLP = "0x4956b52aE2fF65D74CA2d61207523288e4528f96"; const erc20 = { @@ -6,7 +5,6 @@ const erc20 = { }; async function ethTvl(api) { - api.add(USR, await api.call({ abi: erc20.totalSupply, target: USR })); api.add(RLP, await api.call({ abi: erc20.totalSupply, target: RLP })); } From 6fb57b939b7cfc9e86a6006f82a60294dfbc2907 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:24:32 +0100 Subject: [PATCH 1294/1768] fix stargaze --- projects/stargaze/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/stargaze/index.js b/projects/stargaze/index.js index db843560ea..5fd6ce2460 100644 --- a/projects/stargaze/index.js +++ b/projects/stargaze/index.js @@ -2,7 +2,6 @@ const sdk = require("@defillama/sdk"); const { get } = require('../helper/http') async function tvl() { - throw new Error('Api response include NFT value') const balances = {}; /** From 9c4d4e64682a9b3b6f2cf07260525aad8b4df189 Mon Sep 17 00:00:00 2001 From: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:03:13 +0400 Subject: [PATCH 1295/1768] Added the new staking contracts and new PSM module for ZAI (#12539) --- projects/mahaxyz/index.js | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/projects/mahaxyz/index.js b/projects/mahaxyz/index.js index cc8cae18c1..ce02152c27 100644 --- a/projects/mahaxyz/index.js +++ b/projects/mahaxyz/index.js @@ -1,20 +1,21 @@ -const ADDRESSES = require('../helper/coreAssets.json'); -const { sumTokensExport } = require('../helper/unwrapLPs.js'); +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokensExport } = require("../helper/unwrapLPs.js"); +const { staking } = require("../helper/staking"); const eth = { // tokens dai: ADDRESSES.ethereum.DAI, maha: "0x745407c86df8db893011912d3ab28e68b62e49b0", usdc: ADDRESSES.ethereum.USDC, - susde: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497', + susde: ADDRESSES.ethereum.sUSDe, usdt: ADDRESSES.ethereum.USDT, weth: ADDRESSES.ethereum.WETH, zai: "0x69000dFD5025E82f48Eb28325A2B88a241182CEd", szai: "0x69000195D5e3201Cf73C9Ae4a1559244DF38D47C", // peg stability modules - psmUSDC: '0x69000052a82e218ccb61fe6e9d7e3f87b9c5916f', - psmsUSDe: '0xEEc58Cd30D88c70894B331b2fe0ECc2BF535656B', + psmUSDC: "0x69000052a82e218ccb61fe6e9d7e3f87b9c5916f", + psmsUSDe: "0x7DCdE153e4cACe9Ca852590d9654c7694388Db54", // pools zaiUsdcCurve: "0x4a0c954d0f19269f4fc5c217821c6150a8870ad4", @@ -27,26 +28,29 @@ const eth = { zaiSzaiCurveStaking: "0xfDAeB792FF19e7bd4f7ED5d6ce2ef7925d002A19", }; - const base = { usdc: ADDRESSES.base.USDC, - maha: '0x554bba833518793056CF105E66aBEA330672c0dE', + maha: "0x554bba833518793056CF105E66aBEA330672c0dE", + mahax: "0x7DF7505aa7cfAb3AC1A8D1EC225f2fafe5f04c74", zai: "0x69000dFD5025E82f48Eb28325A2B88a241182CEd", szai: "0x69000195D5e3201Cf73C9Ae4a1559244DF38D47C", // pools zaiUsdcAerodrome: "0x93EdC603D7A2eA03518Ac55219cAD320010a58e4", zaiMahaAerodrome: "0x96A0EC12A9F3bEabFf9Bb59c3F33EE439dAF2a85", + zaiMahaV3Aerodrome: "0xebF0D2faC88448874947550FA9B2A75f22FF571F", // staking contracts zaiUsdcStaking: "0xD87ECeF739161be77bbe9891dBA80F14275BBE34", zaiMahaStaking: "0xe77b404e934c1d97f179061349F459847f70Cd8C", -} + + gnosis: "0x7202136d70026DA33628dD3f3eFccb43F62a2469", +}; Object.keys(eth).forEach((k) => (eth[k] = eth[k].toLowerCase())); -const collaterals = [eth.usdc, eth.usdt, eth.dai, eth.usdc, eth.susde]; -const pegStabilityModules = [eth.psmUSDC, eth.psmsUSDe] +const collaterals = [eth.usdc, eth.susde]; +const pegStabilityModules = [eth.psmsUSDe]; module.exports = { ethereum: { @@ -54,7 +58,7 @@ module.exports = { tokensAndOwners: [ [eth.zaiMahaCurve, eth.zaiMahaCurveStaking], [eth.zaiUsdcCurve, eth.zaiUsdcCurveStaking], - [eth.zaiSzaiCurve, eth.zaiSzaiCurveStaking] + [eth.zaiSzaiCurve, eth.zaiSzaiCurveStaking], ], resolveLP: true, }), @@ -68,5 +72,6 @@ module.exports = { ], resolveLP: true, }), - } + staking: staking(base.mahax, base.maha), + }, }; From 9c13b2e82a3422bbc256151049f456b2cda3901f Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:04:46 +0100 Subject: [PATCH 1296/1768] Fix: Xrpl-dex, using cache (#12541) --- projects/xrpl-dex/api.js | 191 ++++++++++++++++++++++++++++++++++ projects/xrpl-dex/app.js | 203 ------------------------------------- projects/xrpl-dex/index.js | 38 +++---- projects/xrpl-dex/run.sh | 2 +- 4 files changed, 211 insertions(+), 223 deletions(-) create mode 100644 projects/xrpl-dex/api.js delete mode 100644 projects/xrpl-dex/app.js diff --git a/projects/xrpl-dex/api.js b/projects/xrpl-dex/api.js new file mode 100644 index 0000000000..4fa292adaf --- /dev/null +++ b/projects/xrpl-dex/api.js @@ -0,0 +1,191 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const rippleCodec = require("ripple-binary-codec"); +const { PromisePool } = require("@supercharge/promise-pool"); +const { getCache, setCache } = require("../helper/cache"); +const axios = require('axios') + +const NODE_URL = "https://xrplcluster.com"; +const API_XRP = "https://api.xrpscan.com/api/v1/amm/" +const RATE_LIMIT_DELAY_MS = 500; +const getTimeNow = () => Math.floor(Date.now() / 1000); +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) + +const retry = async (fn, retries = 3, delay = 1000) => { + let attempts = 0; + while (attempts < retries) { + try { + return await fn(); + } catch (error) { + attempts++; + console.error(`Attempt ${attempts} failed. Retrying...`); + if (attempts >= retries) throw error; + await sleep(delay); + } + } +}; + +const getLedgerDatas = async (binary, marker, atLedgerIndex) => { + const payload = { + method: "ledger_data", + params: [ + { + ledger_index: atLedgerIndex ?? "validated", + binary, + type: "amm", + ...(marker && { marker }), + }, + ], + }; + + return await retry(async () => { + const { data } = await axios.post(NODE_URL, payload); + + if (data.result && data.result?.state) { + return { + state: data.result.state, + marker: data.result.marker, + }; + } + + throw new Error("Invalid response format from XRPL"); + }); +}; + +const getPools = async (nextMarker, isBinary, atLedgerIndex, poolsFound = []) => { + try { + console.log(`Fetching pools... Marker: ${nextMarker || 'start'}, Pools found so far: ${poolsFound.length}`); + const { state, marker } = await getLedgerDatas(isBinary, nextMarker, atLedgerIndex); + + if (!state || state.length === 0) { + console.log("No more pools to fetch."); + return poolsFound; + } + + if (state && state.length > 0) { + const decodedState = isBinary + ? state.map((entry) => rippleCodec.decode(entry.data)) + : state; + + poolsFound.push( + ...decodedState.map((entry) => ({ + account: entry.Account, + asset1: { currency: entry.Asset.currency, issuer: entry.Asset.issuer }, + asset2: { currency: entry.Asset2.currency, issuer: entry.Asset2.issuer }, + })) + ); + + await setCache('xrpl-dex', 'pools', { pools: poolsFound, marker }); + } + + if (marker) { + await sleep(RATE_LIMIT_DELAY_MS); + return getPools(marker, isBinary, atLedgerIndex, poolsFound); + } + + return poolsFound; + } catch (error) { + console.error("Failed to fetch pools:", error.message); + } +}; + +const parseReserve = (reserveData) => { + if (!reserveData) return null; + + const isXrp = typeof reserveData === "string"; + return { + currency: isXrp ? ADDRESSES.ripple.XRP : reserveData.currency, + issuer: isXrp ? null : reserveData.issuer, + amount: isXrp ? reserveData : reserveData.value, + }; +}; + +const getReserveDatas = async (pool) => { + return await retry(async () => { + const { data } = await axios.get(API_XRP + pool.account); + + return { + token0: parseReserve(data?.amount), + token1: parseReserve(data?.amount2) + } + }); +}; + +const getAllReservesDatas = async (poolAddresses, atLedgerIndex) => { + const poolsWithReserves = []; + + const { errors } = await PromisePool.withConcurrency(4) + .for(poolAddresses) + .process(async (pool) => { + try { + await sleep(RATE_LIMIT_DELAY_MS); + + const { token0, token1 } = await getReserveDatas(pool, atLedgerIndex); + poolsWithReserves.push({ + pool: pool.account, + token0Reserve: token0, + token1Reserve: token1, + }); + } catch (error) { + console.error("Errors occurred while fetching reserves:", errors); + } + }); + + return poolsWithReserves; +}; + +const getXrplPools = async () => { + const timeNow = getTimeNow() + const startOfDay = Math.floor(new Date().setUTCHours(0, 0, 0, 0) / 1000); + const { pools: cachedPools = [], marker: lastMarker = null, lastUpdate = 0 } = await getCache('xrpl-dex', 'pools'); + + if (lastUpdate >= startOfDay) { + console.log(`Pools have already been updated today. Last update: ${new Date(lastUpdate * 1000).toISOString()}`); + return; + } + + console.time("xrpl-dex fetch pool list") + + try { + const pools = await getPools(lastMarker, false, undefined, cachedPools); + console.timeEnd("xrpl-dex fetch pool list"); + console.log("Total pools fetched:", pools.length); + const finalMarker = pools.marker || lastMarker + + await setCache('xrpl-dex', 'pools', { pools, marker: finalMarker, lastUpdate: timeNow }); + } catch (error) { + console.error("Error during XRPL pool fetching:", error.message); + console.timeEnd("xrpl-dex fetch pool list"); + } +} + +const getXrplBalances = async (pools) => { + const timeNow = getTimeNow(); + const startOfDay = Math.floor(new Date().setUTCHours(0, 0, 0, 0) / 1000); + const { balances: cachedBalances = [], lastUpdate = 0 } = await getCache('xrpl-dex', 'balances') || {}; + + if (lastUpdate >= startOfDay) { + console.log(`Balances have already been updated today. Last update: ${new Date(lastUpdate * 1000).toISOString()}`); + return cachedBalances; + } + + console.time("Fetching balances for pools"); + + try { + const balances = await getAllReservesDatas(pools); + console.timeEnd("Fetching balances for pools"); + await setCache('xrpl-dex', 'balances', { balances, lastUpdate: timeNow }); + return balances; + } catch (error) { + console.error("Error during balances fetching:", error.message); + } +}; + +const main = async () => { + await getXrplPools(); + const { pools = [] } = await getCache('xrpl-dex', 'pools'); + const seen = new Set(); + const uniquePools = pools.filter(pool => seen.has(JSON.stringify(pool)) ? false : seen.add(JSON.stringify(pool))); + await getXrplBalances(uniquePools) +}; + +main().catch(console.error).finally(() => process.exit(0)); \ No newline at end of file diff --git a/projects/xrpl-dex/app.js b/projects/xrpl-dex/app.js deleted file mode 100644 index c802dd38fb..0000000000 --- a/projects/xrpl-dex/app.js +++ /dev/null @@ -1,203 +0,0 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const rippleCodec = require("ripple-binary-codec"); -const { PromisePool } = require("@supercharge/promise-pool"); -const { getCache, setCache } = require("../helper/cache"); -const { transformDexBalances } = require("../helper/portedTokens"); -const xrpl = require("xrpl"); - - -const NODE_URL = "https://xrplcluster.com"; -// const xrpTBILL = 'rJNE2NNz83GJYtWVLwMvchDWEon3huWnFn' - -const fetchLedgerData = async (binary, marker, atLedgerIndex) => { - const xrplResponse = await fetch(NODE_URL, { - method: "POST", - body: JSON.stringify({ - method: "ledger_data", - params: [ - { - ledger_index: atLedgerIndex ?? "validated", - binary, - type: "amm", - ...(marker && { marker: marker }), - }, - ], - }), - }); - const xrplResponseJson = await xrplResponse.json(); - return { - state: xrplResponseJson.result.state, - marker: xrplResponseJson.result.marker, - }; -}; - -const fetchPoolReserves = async (pool, atLedgerIndex) => { - const xrplResponse = await fetch(NODE_URL, { - method: "POST", - body: JSON.stringify({ - method: "amm_info", - params: [ - { - ledger_index: atLedgerIndex ?? "validated", - asset: pool.asset1, - asset2: pool.asset2, - }, - ], - }), - }); - const xrplResponseJson = await xrplResponse.json(); - return { - token0: parseReserve(xrplResponseJson.result.amm?.amount), - token1: parseReserve(xrplResponseJson.result.amm?.amount2), - }; -}; - -let lastPrinted = 0 -const discoverPools = async (nextMarker, isBinary, atLedgerIndex, poolsFound = []) => { - const { state, marker } = await fetchLedgerData( - isBinary, - nextMarker, - atLedgerIndex - ); - if (state && state.length != 0) { - const decodedState = isBinary - ? state.map((entry) => rippleCodec.decode(entry.data)) - : state; - poolsFound.push( - ...decodedState.map((entry) => ({ - account: entry.Account, - asset1: { - currency: entry.Asset.currency, - issuer: entry.Asset.issuer, - }, - asset2: { - currency: entry.Asset2.currency, - issuer: entry.Asset2.issuer, - }, - })) - ); - } - - if (poolsFound.length % 10 === 0 && lastPrinted !== poolsFound.length) { - console.log(new Date(), "Pools found so far ", poolsFound.length); - lastPrinted = poolsFound.length; - } - if (marker) - return discoverPools( - marker, - isBinary, - atLedgerIndex, - poolsFound - ) - return poolsFound; -}; - -const parseReserve = (reserveData) => { - if (!reserveData) return null; - const reserveIsXrp = typeof reserveData === "string"; - return { - currency: reserveIsXrp ? [ADDRESSES.ripple.XRP]: reserveData.currency, - issuer: reserveIsXrp ? null : reserveData.issuer, - amount: reserveIsXrp ? reserveData : reserveData.value, - }; -}; - -const getAllPoolsReserves = async (poolAddresses, atLedgerIndex) => { - const poolsWithReserves = []; - - const { errors } = await PromisePool.withConcurrency(14) - .for(poolAddresses) - .process(async (pool) => { - const { token0, token1 } = await fetchPoolReserves(pool, atLedgerIndex); - poolsWithReserves.push({ - pool: pool.account, - token0Reserve: token0, - token1Reserve: token1, - }); - }); - if (errors.length > 0) - throw new Error(errors[0]) - return poolsWithReserves -} - -main().catch(console.error).then(() => { - console.log("done"); - process.exit(0) -}) - -function getTimeNow() { - return Math.floor(Date.now() / 1000); -} - -async function xrplDex () { - const timeNow = getTimeNow() - const aDayInSeconds = 60 * 60 * 24; - const projectKey = 'xrpl-dex' - const cacheKey = 'cache' - let { allPools, lastPoolUpdate, lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - if (!lastPoolUpdate || timeNow - lastPoolUpdate > 3 * aDayInSeconds) { - // try { - console.time("xrpl-dex fetch pool list"); - allPools = await discoverPools(null, 1); - console.timeEnd("xrpl-dex fetch pool list"); - lastPoolUpdate = getTimeNow(); - await setCache(projectKey, cacheKey, { allPools, lastPoolUpdate, lastDataUpdate, tvl }) - // } catch (e) { - // console.error(e) - // } - } - if (lastDataUpdate && timeNow - lastDataUpdate < 2 * 60 * 60) { - // data was updated recently, no need to update - return - } - const poolsWithReserves = await getAllPoolsReserves(allPools); - - tvl = await transformDexBalances({ - chain: 'ripple', - data: poolsWithReserves - .filter(i => i.token0Reserve && i.token1Reserve) - .map(i => ({ - token0: i.token0Reserve.currency, - token0Bal: i.token0Reserve.amount, - token1: i.token1Reserve.currency, - token1Bal: i.token1Reserve.amount, - })), - }) - await setCache(projectKey, cacheKey, { - allPools, lastPoolUpdate, lastDataUpdate: getTimeNow(), tvl, - }) -} - -async function openedenRippleTvl() { - const timeNow = getTimeNow() - const aDayInSeconds = 60 * 60 * 24; - const projectKey = 'openeden-tbill' - const cacheKey = 'cache' - let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds) { - lastDataUpdate = getTimeNow() - - const client = new xrpl.Client('wss://xrplcluster.com/'); - await client.connect(); - - const issuerAddress = "rJNE2NNz83GJYtWVLwMvchDWEon3huWnFn"; - const subscriptionOperatorAddress = "rB56JZWRKvpWNeyqM3QYfZwW4fS9YEyPWM"; - - const issuerAccountInfo = await client.request({ - command: 'gateway_balances', - account: issuerAddress, - hotwallet: [subscriptionOperatorAddress], - }); - - tvl = Math.round(Number(issuerAccountInfo.result.obligations?.TBL)) || 0; - await setCache(projectKey, cacheKey, { lastDataUpdate, tvl }) - client.disconnect(); - } -} - -async function main() { - return Promise.allSettled([ - // openedenRippleTvl(), - xrplDex() - ]) -} \ No newline at end of file diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index 2d20b6ce86..f460a28da6 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -1,25 +1,25 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { getCache, } = require("../helper/cache"); +const { getCache } = require("../helper/cache"); +const { transformDexBalances } = require("../helper/portedTokens"); +const tvl = async (api) => { + const { balances = [] } = await getCache('xrpl-dex', 'balances'); + + const tvl = await transformDexBalances({ + chain: 'ripple', + data: balances + .filter(i => i.token0Reserve && i .token1Reserve) + .map(i => ({ + token0: i.token0Reserve.currency, + token0Bal: i.token0Reserve.amount, + token1: i.token1Reserve.currency, + token1Bal: i.token1Reserve.amount, + })) + }) + api.addCGToken('ripple', tvl?.XRP / Math.pow(10, 6)) +} module.exports = { methodology: "Finds all AMM pools on XRPL, checks their reserves, calculates TVL (in XRP) for each pool and sums them up.", ripple: { tvl }, misrepresentedTokens: true, -}; - -function getTimeNow() { - return Math.floor(Date.now() / 1000); -} - -async function tvl(api) { - const timeNow = getTimeNow() - const aDayInSeconds = 60 * 60 * 24; - const projectKey = 'xrpl-dex' - const cacheKey = 'cache' - let { lastDataUpdate, tvl } = await getCache(projectKey, cacheKey) - const val = tvl?.XRP - if (!lastDataUpdate || timeNow - lastDataUpdate > aDayInSeconds || !val) - throw new Error("stale/missing tvl data"); - api.addCGToken('ripple', val/1e6) -} \ No newline at end of file +}; \ No newline at end of file diff --git a/projects/xrpl-dex/run.sh b/projects/xrpl-dex/run.sh index 83626d02a0..6f1fe596c7 100644 --- a/projects/xrpl-dex/run.sh +++ b/projects/xrpl-dex/run.sh @@ -1,3 +1,3 @@ npm i cd .. && npm i && cd xrpl-dex -node app.js \ No newline at end of file +node api.js \ No newline at end of file From 2c53541d02369c9351c558ab56f49d2f5caea598 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 19:39:20 +0100 Subject: [PATCH 1297/1768] xrpl dex: bugfix --- projects/xrpl-dex/api.js | 38 ++++++++++++++++++++------------------ projects/xrpl-dex/index.js | 6 ++++-- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/projects/xrpl-dex/api.js b/projects/xrpl-dex/api.js index 4fa292adaf..4c2c76cf9d 100644 --- a/projects/xrpl-dex/api.js +++ b/projects/xrpl-dex/api.js @@ -7,10 +7,11 @@ const axios = require('axios') const NODE_URL = "https://xrplcluster.com"; const API_XRP = "https://api.xrpscan.com/api/v1/amm/" const RATE_LIMIT_DELAY_MS = 500; +const MIN_POOL_SIZE = 3600 const getTimeNow = () => Math.floor(Date.now() / 1000); const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) -const retry = async (fn, retries = 3, delay = 1000) => { +const retry = async (fn, retries = 7, delay) => { let attempts = 0; while (attempts < retries) { try { @@ -18,8 +19,10 @@ const retry = async (fn, retries = 3, delay = 1000) => { } catch (error) { attempts++; console.error(`Attempt ${attempts} failed. Retrying...`); + const currentDelay = delay ? delay : attempts * 1000; if (attempts >= retries) throw error; - await sleep(delay); + + await sleep(currentDelay); } } }; @@ -51,16 +54,12 @@ const getLedgerDatas = async (binary, marker, atLedgerIndex) => { }); }; +let poolIndex = 0; const getPools = async (nextMarker, isBinary, atLedgerIndex, poolsFound = []) => { try { - console.log(`Fetching pools... Marker: ${nextMarker || 'start'}, Pools found so far: ${poolsFound.length}`); + console.log(`${++poolIndex} Fetching pools... Marker: ${nextMarker || 'start'}, Pools found so far: ${poolsFound.length}`); const { state, marker } = await getLedgerDatas(isBinary, nextMarker, atLedgerIndex); - if (!state || state.length === 0) { - console.log("No more pools to fetch."); - return poolsFound; - } - if (state && state.length > 0) { const decodedState = isBinary ? state.map((entry) => rippleCodec.decode(entry.data)) @@ -74,7 +73,6 @@ const getPools = async (nextMarker, isBinary, atLedgerIndex, poolsFound = []) => })) ); - await setCache('xrpl-dex', 'pools', { pools: poolsFound, marker }); } if (marker) { @@ -82,10 +80,11 @@ const getPools = async (nextMarker, isBinary, atLedgerIndex, poolsFound = []) => return getPools(marker, isBinary, atLedgerIndex, poolsFound); } - return poolsFound; } catch (error) { console.error("Failed to fetch pools:", error.message); } + + return poolsFound; }; const parseReserve = (reserveData) => { @@ -130,23 +129,26 @@ const getAllReservesDatas = async (poolAddresses, atLedgerIndex) => { } }); + if (errors?.length) console.log(errors) + if (errors.length > 0) throw errors[0] + return poolsWithReserves; }; const getXrplPools = async () => { const timeNow = getTimeNow() const startOfDay = Math.floor(new Date().setUTCHours(0, 0, 0, 0) / 1000); - const { pools: cachedPools = [], marker: lastMarker = null, lastUpdate = 0 } = await getCache('xrpl-dex', 'pools'); - - if (lastUpdate >= startOfDay) { + let { pools: cachedPools = [], marker: lastMarker = null, lastUpdate = 0 } = await getCache('xrpl-dex', 'pools'); + + if (lastUpdate >= startOfDay && cachedPools?.length > MIN_POOL_SIZE) { console.log(`Pools have already been updated today. Last update: ${new Date(lastUpdate * 1000).toISOString()}`); return; } - + console.time("xrpl-dex fetch pool list") try { - const pools = await getPools(lastMarker, false, undefined, cachedPools); + const pools = await getPools(null, 1); console.timeEnd("xrpl-dex fetch pool list"); console.log("Total pools fetched:", pools.length); const finalMarker = pools.marker || lastMarker @@ -161,11 +163,11 @@ const getXrplPools = async () => { const getXrplBalances = async (pools) => { const timeNow = getTimeNow(); const startOfDay = Math.floor(new Date().setUTCHours(0, 0, 0, 0) / 1000); - const { balances: cachedBalances = [], lastUpdate = 0 } = await getCache('xrpl-dex', 'balances') || {}; + const { balanaces: _preBalances, lastUpdate = 0 } = await getCache('xrpl-dex', 'balances') || {}; - if (lastUpdate >= startOfDay) { + if (lastUpdate >= startOfDay && _preBalances?.length > MIN_POOL_SIZE) { console.log(`Balances have already been updated today. Last update: ${new Date(lastUpdate * 1000).toISOString()}`); - return cachedBalances; + return; } console.time("Fetching balances for pools"); diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index f460a28da6..394027010b 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -3,11 +3,13 @@ const { transformDexBalances } = require("../helper/portedTokens"); const tvl = async (api) => { const { balances = [] } = await getCache('xrpl-dex', 'balances'); + console.log('balances', balances.length) + if (balances.length < 3600) throw new Error('No balances found') const tvl = await transformDexBalances({ chain: 'ripple', data: balances - .filter(i => i.token0Reserve && i .token1Reserve) + .filter(i => i.token0Reserve && i.token1Reserve) .map(i => ({ token0: i.token0Reserve.currency, token0Bal: i.token0Reserve.amount, @@ -15,7 +17,7 @@ const tvl = async (api) => { token1Bal: i.token1Reserve.amount, })) }) - api.addCGToken('ripple', tvl?.XRP / Math.pow(10, 6)) + api.addCGToken('ripple', tvl?.XRP / 1e6) } module.exports = { From 6014ac1a2bd2de4b19d1777cb08de72f9558a862 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:42:18 +0100 Subject: [PATCH 1298/1768] xrpl dex: bugfix --- projects/xrpl-dex/api.js | 2 +- projects/xrpl-dex/index.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/projects/xrpl-dex/api.js b/projects/xrpl-dex/api.js index 4c2c76cf9d..998f4ac1be 100644 --- a/projects/xrpl-dex/api.js +++ b/projects/xrpl-dex/api.js @@ -7,7 +7,7 @@ const axios = require('axios') const NODE_URL = "https://xrplcluster.com"; const API_XRP = "https://api.xrpscan.com/api/v1/amm/" const RATE_LIMIT_DELAY_MS = 500; -const MIN_POOL_SIZE = 3600 +const MIN_POOL_SIZE = 9500 const getTimeNow = () => Math.floor(Date.now() / 1000); const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) diff --git a/projects/xrpl-dex/index.js b/projects/xrpl-dex/index.js index 394027010b..6e789599aa 100644 --- a/projects/xrpl-dex/index.js +++ b/projects/xrpl-dex/index.js @@ -3,8 +3,7 @@ const { transformDexBalances } = require("../helper/portedTokens"); const tvl = async (api) => { const { balances = [] } = await getCache('xrpl-dex', 'balances'); - console.log('balances', balances.length) - if (balances.length < 3600) throw new Error('No balances found') + if (balances.length < 9500) throw new Error('No balances found') const tvl = await transformDexBalances({ chain: 'ripple', From 007887f0b2ce8046e49308eaaed2790316072fd9 Mon Sep 17 00:00:00 2001 From: Jon Greenwood <81202085+0xJonHoldsCrypto@users.noreply.github.com> Date: Tue, 3 Dec 2024 16:39:20 -0600 Subject: [PATCH 1299/1768] Add Base (#12543) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/metronome-synth/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/projects/metronome-synth/index.js b/projects/metronome-synth/index.js index b8c57da684..569412e575 100644 --- a/projects/metronome-synth/index.js +++ b/projects/metronome-synth/index.js @@ -34,5 +34,18 @@ module.exports = { "0x539505dde2b9771debe0898a84441c5e7fdf6bc0", ] }), + }, + base: { + tvl: sumTokensExport({ + owner: '0xAeDF96597338FE03E8c07a1077A296df5422320e', + tokens: [ + ADDRESSES.base.USDC, + ADDRESSES.base.WETH, + "0x1e41238aCd3A9fF90b0DCB9ea96Cf45F104e09Ef", + "0x82562507429876486B60AF4F32390ef0947b3d13", + "0x82562507429876486B60AF4F32390ef0947b3d13", + "0x46fb68Eb2b1Fc43654AbaE5691D39D18D933E4b4", + ] + }), } } From 937dc84ba8787d7aa6551320f16f8ddb998e5605 Mon Sep 17 00:00:00 2001 From: NicholasDotSol Date: Wed, 4 Dec 2024 16:41:06 +0700 Subject: [PATCH 1300/1768] duality-adaptor (#12546) Co-authored-by: Mona Lisa --- projects/Duality/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/Duality/index.js diff --git a/projects/Duality/index.js b/projects/Duality/index.js new file mode 100644 index 0000000000..0e14068a0a --- /dev/null +++ b/projects/Duality/index.js @@ -0,0 +1,18 @@ +const { sumTokens } = require('../helper/chain/cosmos') + +const chain = 'neutron' + +async function tvl(api) { + return sumTokens({ + chain, + owner: 'neutron1n58mly6f7er0zs6swtetqgfqs36jaarqlplf59', + }) +} + +module.exports = { + timetravel: false, + methodology: 'TVL in Duality module.', + neutron: { + tvl + } +} \ No newline at end of file From 978d1569dc0466ed1cd9de4d5f1edbc60052a9c2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Dec 2024 10:57:32 +0100 Subject: [PATCH 1301/1768] update steer #12547 --- projects/helper/cache.js | 10 +++++----- projects/helper/utils/graphql.js | 4 ++-- projects/steer/index.js | 12 +++++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/projects/helper/cache.js b/projects/helper/cache.js index 3563714604..04df9aec61 100644 --- a/projects/helper/cache.js +++ b/projects/helper/cache.js @@ -104,7 +104,7 @@ async function configPost(project, endpoint, data) { } -async function cachedGraphQuery(project, endpoint, query, { api, useBlock = false, variables = {}, fetchById, safeBlockLimit, } = {}) { +async function cachedGraphQuery(project, endpoint, query, { api, useBlock = false, variables = {}, fetchById, safeBlockLimit, headers, } = {}) { if (!project || !endpoint) throw new Error('Missing parameters') endpoint = sdk.graph.modifyEndpoint(endpoint) const key = 'config-cache' @@ -120,9 +120,9 @@ async function cachedGraphQuery(project, endpoint, query, { api, useBlock = fals variables.block = await api.getBlock() } if (!fetchById) - json = await graphql.request(endpoint, query, { variables }) + json = await graphql.request(endpoint, query, { variables, headers }) else - json = await graphFetchById({ endpoint, query, params: variables, api, options: { useBlock, safeBlockLimit } }) + json = await graphFetchById({ endpoint, query, params: variables, api, options: { useBlock, safeBlockLimit, headers } }) if (!json) throw new Error('Empty JSON') await _setCache(key, project, json) return json @@ -135,7 +135,7 @@ async function cachedGraphQuery(project, endpoint, query, { api, useBlock = fals } -async function graphFetchById({ endpoint, query, params = {}, api, options: { useBlock = false, safeBlockLimit = 500 } = {} }) { +async function graphFetchById({ endpoint, query, params = {}, api, options: { useBlock = false, safeBlockLimit = 500, headers } = {} }) { if (useBlock && !params.block) params.block = await api.getBlock() - safeBlockLimit endpoint = sdk.graph.modifyEndpoint(endpoint) @@ -144,7 +144,7 @@ async function graphFetchById({ endpoint, query, params = {}, api, options: { u let lastId = "" let response; do { - const res = await graphql.request(endpoint, query, { variables: { ...params, lastId }}) + const res = await graphql.request(endpoint, query, { variables: { ...params, lastId }, headers }) Object.keys(res).forEach(key => response = res[key]) data.push(...response) lastId = response[response.length - 1]?.id diff --git a/projects/helper/utils/graphql.js b/projects/helper/utils/graphql.js index e9a2c82f81..8860b580cd 100644 --- a/projects/helper/utils/graphql.js +++ b/projects/helper/utils/graphql.js @@ -1,7 +1,7 @@ const axios = require("axios"); -async function request(endpoint, query, { variables, withMetadata = false } = {}) { - const { data: result } = await axios.post(endpoint, { query, variables }) +async function request(endpoint, query, { variables, withMetadata = false, headers } = {}) { + const { data: result } = await axios.post(endpoint, { query, variables }, { headers }) if (result.errors) throw new Error(result.errors[0].message) return withMetadata ? result : result.data } diff --git a/projects/steer/index.js b/projects/steer/index.js index 32ad3085db..ff409d3ae8 100644 --- a/projects/steer/index.js +++ b/projects/steer/index.js @@ -178,15 +178,25 @@ const supportedChains = [ chainId: 314, identifier: 'filecoin' }, + { + name: 'Zircuit', + subgraphEndpoint: 'https://app.sentio.xyz/api/v1/graphql/rakesh/steer-protocol-zircuit', + headers: {'api-key': 'yu0Dep8seTmFjvlmAXN1ILNggARnx74MB' + }, + chainId: 48900, + identifier: 'zircuit' + }, ] // Fetch active vaults and associated data @todo limited to 1000 per chain const query = `{vaults(first: 1000, where: {totalLPTokensIssued_not: "0", lastSnapshot_not: "0"}) {id}}` +const z_query = `{ vaults(first: 1000, where: {lastSnapshot_gte: "0", totalLPTokensIssued_gt: "0"}) { id }}` supportedChains.forEach(chain => { module.exports[chain.identifier] = { tvl: async (api) => { - const data = await cachedGraphQuery('steer/' + chain.identifier, chain.subgraphEndpoint, query,) + let _query = api.chain === 'zircuit' ? z_query : query + const data = await cachedGraphQuery('steer/' + chain.identifier, chain.subgraphEndpoint, _query, { headers: chain.headers }) const vaults = data.vaults.map((vault) => vault.id) const bals = await api.multiCall({ abi: "function getTotalAmounts() view returns (uint256 total0, uint256 total1)", calls: vaults, permitFailure: true, }) From fcdf54db0f315268ce0437e146496cd77baefa32 Mon Sep 17 00:00:00 2001 From: krishnafractol <137801527+krishnafractol@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:34:43 +0530 Subject: [PATCH 1302/1768] Add Upshift to Defi Listing (#12545) Co-authored-by: krishna7860 Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/upshift/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/upshift/index.js diff --git a/projects/upshift/index.js b/projects/upshift/index.js new file mode 100644 index 0000000000..7dd6c00a84 --- /dev/null +++ b/projects/upshift/index.js @@ -0,0 +1,17 @@ +const { sumERC4626VaultsExport } = require('../helper/erc4626') +const config = { + ethereum: ["0xB7858b66dFA38b9Cb74d00421316116A7851c273", "0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42", "0x18a5a3D575F34e5eBa92ac99B0976dBe26f9F869", "0xEBac5e50003d4B17Be422ff9775043cD61002f7f"], + avax: ["0x3408b22d8895753C9A3e14e4222E981d4E9A599E"], + base: ["0x4e2D90f0307A93b54ACA31dc606F93FE6b9132d2"] +} + +module.exports = { + doublecounted: true, + methodology: "TVL is the sum of tokens deposited in erc4626 vaults", +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumERC4626VaultsExport({ vaults: config[chain], isOG4626: true }) + } +}) \ No newline at end of file From 37ea1d41b690a7e3ff1a8ed2fe2a7d6760404922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Soares?= <77671016+FSoaresDev@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:35:31 +0000 Subject: [PATCH 1303/1768] update astrovault adapter to include nibiru chain (#12552) --- projects/astrovault/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/astrovault/index.js b/projects/astrovault/index.js index 9d3ab70cf7..9a54844420 100644 --- a/projects/astrovault/index.js +++ b/projects/astrovault/index.js @@ -19,6 +19,15 @@ const data = { hybridFactory: "neutron16yn2gcz24s9qwpuxvrhl3xed0pmhrgwx2mz40zrazfc0pt5kq0psucs6xl", }, + + nibiru: { + stableFactory: + "nibi143hmeallpaasdyull3gjcmasrcg63yl8f4cumah7xmcmjnqewa9s5jkan2", + standardFactory: + "nibi1gmw5eqnergfdx5qp4w53vwaywg63dwnvqeus3g6a2926pz2axyqshrlh2m", + hybridFactory: + "nibi1gwsrmpkkcl82aqs3vk4vy2lt0dm3kr3sshmruzhxhsqh8xglxrtsglzpqj", + }, }; async function tvl(api) { @@ -86,4 +95,7 @@ module.exports = { neutron: { tvl, }, + nibiru: { + tvl, + }, } \ No newline at end of file From f4b597aa61394b3158813016ea6f6f04979228fc Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:48:34 +0100 Subject: [PATCH 1304/1768] binance: bnb chain is sunset https://www.bnbchain.org/en/blog/final-sunset-plan-of-bnb-beacon-chain --- projects/binance/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/binance/config.js b/projects/binance/config.js index f58740a565..d0cf269732 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -656,8 +656,8 @@ module.exports = { ], }, bep2: { - geckoId: 'binancecoin', - owners: getAddresses('BEP2'), + // geckoId: 'binancecoin', + // owners: getAddresses('BEP2'), }, tron: { owners: getOwners('TRX'), From 27bcf26bed5cfa42aa77dea0bfdcf00eec7edb0b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 4 Dec 2024 14:33:33 +0000 Subject: [PATCH 1305/1768] apechain bridge --- projects/apechain/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/apechain/index.js diff --git a/projects/apechain/index.js b/projects/apechain/index.js new file mode 100644 index 0000000000..662f72c521 --- /dev/null +++ b/projects/apechain/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require('../helper/unwrapLPs'); + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + tokensAndOwners: [ + ['0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0xc8a12b1DB09ec5a43919906d94Fa7eeAef1131D1'], // wstETH + ['0x83F20F44975D03b1b09e64809B757c47f942BEeA', '0xf33D21137cD0B878f3A18Cc60cD74F842c59cb00'], // sDAI + ['0x4d224452801ACEd8B2F0aebE155379bb5D594381', '0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9'], // APE + ] + }), + }, +}; \ No newline at end of file From ea72ba3c1a2bc561ccd7444e451878d6c4a676d6 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 4 Dec 2024 14:37:03 +0000 Subject: [PATCH 1306/1768] staking --- projects/apechain/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/apechain/index.js b/projects/apechain/index.js index 662f72c521..cfd7dead9e 100644 --- a/projects/apechain/index.js +++ b/projects/apechain/index.js @@ -1,4 +1,5 @@ const { sumTokensExport } = require('../helper/unwrapLPs'); +const { staking } = require('../helper/staking') module.exports = { ethereum: { @@ -6,8 +7,8 @@ module.exports = { tokensAndOwners: [ ['0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0xc8a12b1DB09ec5a43919906d94Fa7eeAef1131D1'], // wstETH ['0x83F20F44975D03b1b09e64809B757c47f942BEeA', '0xf33D21137cD0B878f3A18Cc60cD74F842c59cb00'], // sDAI - ['0x4d224452801ACEd8B2F0aebE155379bb5D594381', '0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9'], // APE ] }), + staking: staking('0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9', '0x4d224452801ACEd8B2F0aebE155379bb5D594381') }, }; \ No newline at end of file From 468769ee4e4db6e2e05e58bfa0eedd2b5bd3a67b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:10:30 +0100 Subject: [PATCH 1307/1768] astrovault: minor fix --- projects/astrovault/index.js | 10 ++++++---- projects/helper/tokenMapping.js | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/projects/astrovault/index.js b/projects/astrovault/index.js index 9a54844420..57fe9e1ffa 100644 --- a/projects/astrovault/index.js +++ b/projects/astrovault/index.js @@ -19,7 +19,7 @@ const data = { hybridFactory: "neutron16yn2gcz24s9qwpuxvrhl3xed0pmhrgwx2mz40zrazfc0pt5kq0psucs6xl", }, - + nibiru: { stableFactory: "nibi143hmeallpaasdyull3gjcmasrcg63yl8f4cumah7xmcmjnqewa9s5jkan2", @@ -32,7 +32,7 @@ const data = { async function tvl(api) { const { chain } = api - for (const factory of [ + for (const factory of [ data[chain].stableFactory, data[chain].standardFactory, data[chain].hybridFactory, @@ -72,7 +72,7 @@ async function tvl(api) { }) await PromisePool - .withConcurrency(20) + .withConcurrency(3) .for(allPools) .process(getPoolAssetsState) @@ -98,4 +98,6 @@ module.exports = { nibiru: { tvl, }, -} \ No newline at end of file +} + +module.exports = { nibiru: { tvl } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index efa1ae4460..e280e99149 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -18,7 +18,7 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) // orbit brige: https://bridge.orbitchain.io/open/v1/api/monitor/rawTokenList -const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify'] +const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru'] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', 'eclipse', ] @@ -88,6 +88,9 @@ const fixBalancesTokens = { starknet: { [ADDRESSES.starknet.BROTHER]: { coingeckoId: "starknet-brother", decimals: 18 }, }, + nibiru: { + 'unibi': { coingeckoId: "nibiru", decimals: 6 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 3eeba60b4fe15016bb6f382595cd0952ecfa4e75 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:45:57 +0100 Subject: [PATCH 1308/1768] update skale #12549 --- projects/skale/index.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/projects/skale/index.js b/projects/skale/index.js index 786f3ce638..d689547762 100644 --- a/projects/skale/index.js +++ b/projects/skale/index.js @@ -1,10 +1,39 @@ -const { sumTokensExport } = require('../helper/unwrapLPs') +const { sumTokens2 } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + const depositBoxETH = '0x49F583d263e4Ef938b9E09772D3394c71605Df94'; const depositBoxERC20 = '0x8fB1A35bB6fB9c47Fb5065BE5062cB8dC1687669'; module.exports = { start: '2021-07-19', // Mon July 19 06:38:20 PM UTC 2021 ethereum: { - tvl: sumTokensExport({ owners: [depositBoxETH, depositBoxERC20], fetchCoValentTokens: true, permitFailure: true }), + tvl, + } +} + +async function tvl(api) { + const ownerTokens = [[[ADDRESSES.null], depositBoxETH]] + const chains = ["elated-tan-skat"] + let tokens = [] + for (const chain of chains) { + const tokenCount = await api.call({ abi: abi.getSchainToAllERC20Length, target: depositBoxERC20, params: chain }) + + for (let i = 0; i < tokenCount; i += 10) { + let remainingTokens = tokenCount - i; + const res = await api.call({ + abi: abi.getSchainToAllERC20, + target: depositBoxERC20, + params: [chain, i, remainingTokens >= 10 ? i + 10 : i + remainingTokens], + }); + + tokens.push(...res); + } } + ownerTokens.push([tokens, depositBoxERC20]) + return sumTokens2({ api, ownerTokens }) +} + +const abi = { + "getSchainToAllERC20Length": "function getSchainToAllERC20Length(string schainName) view returns (uint256)", + "getSchainToAllERC20": "function getSchainToAllERC20(string schainName, uint256 from, uint256 to) view returns (address[])" } \ No newline at end of file From ea6bae21b784b6a2afebaddb16f280f2b10185fd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:56:55 +0100 Subject: [PATCH 1309/1768] update seafi #12555 --- projects/ggpVault/index.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/projects/ggpVault/index.js b/projects/ggpVault/index.js index 2fe134cd3a..e5f37a28ee 100644 --- a/projects/ggpVault/index.js +++ b/projects/ggpVault/index.js @@ -1,16 +1,7 @@ -const GGPVAULT_CONTRACT = "0xdF34022e8a280fc79499cA560439Bb6f9797EbD8"; -const GGP = "0x69260B9483F9871ca57f81A90D91E2F96c2Cd11d"; - -async function tvl(api) { - const bal = await api.call({ - abi: "uint256:totalAssets", - target: GGPVAULT_CONTRACT, - }); - api.add(GGP, bal); -} +const { sumERC4626VaultsExport } = require('../helper/erc4626') module.exports = { avax: { - tvl, + tvl: sumERC4626VaultsExport({ vaults: ['0xdF34022e8a280fc79499cA560439Bb6f9797EbD8', '0x36213ca1483869c5616be738Bf8da7C9B34Ace8d'], isOG4626: true }) }, }; From 6a7cf5c21faeda6a5df2d095773732ecbcb41a5f Mon Sep 17 00:00:00 2001 From: rav <85165079+rav-ipor@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:58:59 +0100 Subject: [PATCH 1310/1768] IPOR - switch back to main branch in config after transition period (#12554) Co-authored-by: adam Co-authored-by: kris-ipor <98769272+kris-ipor@users.noreply.github.com> --- projects/ipor-fusion/index.js | 2 +- projects/ipor/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/ipor-fusion/index.js b/projects/ipor-fusion/index.js index 224ae04aed..bbb66ccef0 100644 --- a/projects/ipor-fusion/index.js +++ b/projects/ipor-fusion/index.js @@ -1,6 +1,6 @@ const { getConfig } = require('../helper/cache') -const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/refs/heads/defillama/mainnet/addresses.json"; +const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/refs/heads/main/mainnet/addresses.json"; async function tvl(api) { const config = await getConfig('ipor/assets', IPOR_GITHUB_ADDRESSES_URL); diff --git a/projects/ipor/index.js b/projects/ipor/index.js index 245d0fbab8..2a506a631e 100644 --- a/projects/ipor/index.js +++ b/projects/ipor/index.js @@ -1,7 +1,7 @@ const { abi } = require("./abi"); const { getConfig } = require('../helper/cache') -const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/refs/heads/defillama/mainnet/addresses.json"; +const IPOR_GITHUB_ADDRESSES_URL = "https://raw.githubusercontent.com/IPOR-Labs/ipor-abi/refs/heads/main/mainnet/addresses.json"; const V2DeploymentBlockNumber = 18333744 async function tvlEthereum(api) { From a85c144087350889c1aec833e5ba2a7687e391a5 Mon Sep 17 00:00:00 2001 From: mo Date: Wed, 4 Dec 2024 19:54:15 +0100 Subject: [PATCH 1311/1768] TVL Curve: add ng-factories + taiko deployment (#12556) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/curve/abi.json | 3 +- projects/curve/contracts.json | 68 +++++++++++++++++++++++++-------- projects/curve/index.js | 15 +++++--- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 5 ++- 6 files changed, 71 insertions(+), 22 deletions(-) diff --git a/projects/curve/abi.json b/projects/curve/abi.json index 4925ec1182..1e5a53712a 100644 --- a/projects/curve/abi.json +++ b/projects/curve/abi.json @@ -18,6 +18,7 @@ "cryptoFactory": "function get_coins(address _pool) view returns (address[2])", "triCryptoFactory": "function get_coins(address _pool) view returns (address[3])", "CurveStableswapFactoryNG": "function get_coins(address _pool) view returns (address[])", - "CurveL2TricryptoFactory": "function get_coins(address _pool) view returns (address[3])" + "CurveTwocryptoFactoryNG": "function get_coins(address _pool) view returns (address[2])", + "CurveTricryptoFactoryNG": "function get_coins(address _pool) view returns (address[3])" } } \ No newline at end of file diff --git a/projects/curve/contracts.json b/projects/curve/contracts.json index bdbd6ed78e..20f177d9e6 100644 --- a/projects/curve/contracts.json +++ b/projects/curve/contracts.json @@ -36,7 +36,12 @@ "currency": "KRW" } }, - "CurveStableswapFactoryNG": "0x6A8cbed756804B16E05E741eDaBd5cB544AE21bf" + "blacklist": [ + "0x69000dFD5025E82f48Eb28325A2B88a241182CEd" + ], + "CurveStableswapFactoryNG": "0x6A8cbed756804B16E05E741eDaBd5cB544AE21bf", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0x0c0e5f2fF0ff18a3be9b835635039256dC4B4963" }, "polygon": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -52,7 +57,9 @@ "0xa7fd7d83e2d63f093b71c5f3b84c27cff66a7802", "0xacfbe6979d58b55a681875fc9adad0da4a37a51b" ], - "CurveStableswapFactoryNG": "0x1764ee18e8B3ccA4787249Ceb249356192594585" + "CurveStableswapFactoryNG": "0x1764ee18e8B3ccA4787249Ceb249356192594585", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0xC1b393EfEF38140662b91441C6710Aa704973228" }, "arbitrum": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -62,7 +69,8 @@ "2CRV": "0xbf7e49483881c76487b0989cd7d9a8239b20ca41" }, "CurveStableswapFactoryNG": "0x9AF14D26075f142eb3F292D5065EB3faa646167b", - "CurveL2TricryptoFactory": "0xbc0797015fcfc47d9c1856639cae50d0e69fbee8" + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0xbC0797015fcFc47d9C1856639CaE50D0e69FbEE8" }, "aurora": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -71,7 +79,9 @@ "metapoolBases": { "3CRV": "0xbf7e49483881c76487b0989cd7d9a8239b20ca41" }, - "CurveStableswapFactoryNG": "0x5eeE3091f747E60a045a2E715a4c71e600e31F6E" + "CurveStableswapFactoryNG": "0x5eeE3091f747E60a045a2E715a4c71e600e31F6E", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0xC1b393EfEF38140662b91441C6710Aa704973228" }, "avax": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -80,7 +90,9 @@ "metapoolBases": { "av3CRV": "0xb0d2eb3c2ca3c6916fab8dcbf9d9c165649231ae" }, - "CurveStableswapFactoryNG": "0x1764ee18e8B3ccA4787249Ceb249356192594585" + "CurveStableswapFactoryNG": "0x1764ee18e8B3ccA4787249Ceb249356192594585", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0x3d6cB2F6DcF47CDd9C13E4e3beAe9af041d8796a" }, "fantom": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -99,8 +111,9 @@ "scFUSDT": "0x02224765bc8d54c21bb51b0951c80315e1c263f9", "scMIM": "0x90b7c21be43855afd2515675fc307c084427404f" }, - "yearnTokens": {}, - "CurveStableswapFactoryNG": "0xe61Fb97Ef6eBFBa12B36Ffd7be785c1F5A2DE66b" + "CurveStableswapFactoryNG": "0xe61Fb97Ef6eBFBa12B36Ffd7be785c1F5A2DE66b", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0x9AF14D26075f142eb3F292D5065EB3faa646167b" }, "harmony": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -120,11 +133,12 @@ "base": { "wrapped": "0x4200000000000000000000000000000000000006", "registriesMapping": { - "triCryptoFactory": "0xa5961898870943c68037f6848d2d866ed2016bcb", "stableFactory": "0x3093f9B57A428F3EB6285a589cb35bEA6e78c336", "cryptoFactory": "0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd" }, - "CurveStableswapFactoryNG": "0xd2002373543Ce3527023C75e7518C274A51ce712" + "CurveStableswapFactoryNG": "0xd2002373543Ce3527023C75e7518C274A51ce712", + "CurveTwocryptoFactoryNG": "0xc9Fe0C63Af9A39402e8a5514f9c43Af0322b665F", + "CurveTricryptoFactoryNG": "0xa5961898870943c68037f6848d2d866ed2016bcb" }, "optimism": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -133,7 +147,9 @@ "metapoolBases": { "3CRV": "0x1337bedc9d22ecbe766df105c9623922a27963ec" }, - "CurveStableswapFactoryNG": "0x5eeE3091f747E60a045a2E715a4c71e600e31F6E" + "CurveStableswapFactoryNG": "0x5eeE3091f747E60a045a2E715a4c71e600e31F6E", + "CurveTricryptoFactoryNG": "0xc6C09471Ee39C7E30a067952FcC89c8922f9Ab53", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F" }, "xdai": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -153,7 +169,9 @@ "fraxtal": { "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "metapoolBases": {}, - "CurveStableswapFactoryNG": "0xd2002373543ce3527023c75e7518c274a51ce712" + "CurveStableswapFactoryNG": "0xd2002373543Ce3527023C75e7518C274A51ce712", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0xc9Fe0C63Af9A39402e8a5514f9c43Af0322b665F" }, "kava": { "addressProvider": "0x0000000022D53366457F9d5E68Ec105046FC4383", @@ -165,16 +183,36 @@ "xlayer": { "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "metapoolBases": {}, - "CurveStableswapFactoryNG": "0x5eee3091f747e60a045a2e715a4c71e600e31f6e" + "CurveStableswapFactoryNG": "0x5eee3091f747e60a045a2e715a4c71e600e31f6e", + "CurveTwocryptoFactoryNG": "0x0c59d36b23f809f8b6c7cb4c8c590a0ac103baef", + "CurveTricryptoFactoryNG": "0xd3b17f862956464ae4403ccf829ce69199856e1e" }, "bsc": { "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "metapoolBases": {}, - "CurveStableswapFactoryNG": "0xd7e72f3615aa65b92a4dbdc211e296a35512988b" + "CurveStableswapFactoryNG": "0xd7e72f3615aa65b92a4dbdc211e296a35512988b", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0xc55837710bc500F1E3c7bb9dd1d51F7c5647E657" }, "mantle": { "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "metapoolBases": {}, - "CurveStableswapFactoryNG": "0x5eee3091f747e60a045a2e715a4c71e600e31f6e" + "CurveStableswapFactoryNG": "0x5eee3091f747e60a045a2e715a4c71e600e31f6e", + "CurveTwocryptoFactoryNG": "0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F", + "CurveTricryptoFactoryNG": "0x0C9D8c7e486e822C29488Ff51BFf0167B4650953" + }, + "taiko": { + "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "wrapped": "0xA51894664A773981C6C112C43ce576f315d5b1B6", + "CurveStableswapFactoryNG": "0x06452f9c013fc37169B57Eab8F50A7A48c9198A3", + "CurveTwocryptoFactoryNG": "0xFAbC421e3368D158d802684A217a83c083c94CeB", + "CurveTricryptoFactoryNG": "0x0C9D8c7e486e822C29488Ff51BFf0167B4650953" + }, + "corn": { + "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "wrapped": "0xda5dDd7270381A7C2717aD10D1c0ecB19e3CDFb2", + "CurveStableswapFactoryNG": "0xd7E72f3615aa65b92A4DBdC211E296a35512988B", + "CurveTwocryptoFactoryNG": "0x5Ea9DD3b6f042A34Df818C6c1324BC5A7c61427a", + "CurveTricryptoFactoryNG": "0x7Ca46A636b02D4aBC66883D7FF164bDE506DC66a" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/projects/curve/index.js b/projects/curve/index.js index 3424f2ea1d..0d7b871d27 100644 --- a/projects/curve/index.js +++ b/projects/curve/index.js @@ -26,7 +26,9 @@ const chains = [ "fraxtal", "xlayer", "bsc", - "mantle" + "mantle", + "taiko", + "corn", ]; // Object.keys(contracts); const registryIds = { stableswap: 0, @@ -106,8 +108,11 @@ async function getPools(block, chain) { if (contracts[chain].CurveStableswapFactoryNG) { registriesMapping.CurveStableswapFactoryNG = contracts[chain].CurveStableswapFactoryNG } - if (contracts[chain].CurveL2TricryptoFactory) { - registriesMapping.CurveL2TricryptoFactory = contracts[chain].CurveL2TricryptoFactory + if (contracts[chain].CurveTricryptoFactoryNG) { + registriesMapping.CurveTricryptoFactoryNG = contracts[chain].CurveTricryptoFactoryNG + } + if (contracts[chain].CurveTwocryptoFactoryNG) { + registriesMapping.CurveTwocryptoFactoryNG = contracts[chain].CurveTwocryptoFactoryNG } const poolList = {} await Promise.all(Object.entries(registriesMapping).map(async ([registry, addr]) => { @@ -165,7 +170,7 @@ async function unwrapPools({ poolList, registry, chain, block }) { const callParams = { target: registryAddress, calls: poolList.map(i => ({ params: i.output })), chain, block, } const { output: coins } = await sdk.api.abi.multiCall({ ...callParams, abi: abi.get_coins[registry] }) let nCoins = {} - if (!['cryptoFactory', 'triCryptoFactory', 'CurveL2TricryptoFactory'].includes(registry)) + if (!['cryptoFactory', 'triCryptoFactory', 'CurveL2TricryptoFactory', 'CurveTricryptoFactoryNG', 'CurveTwocryptoFactoryNG'].includes(registry)) nCoins = (await sdk.api.abi.multiCall({ ...callParams, abi: abi.get_n_coins[registry] })).output let { wrapped = '', metapoolBases = {}, blacklist = [] } = contracts[chain] @@ -254,7 +259,7 @@ module.exports = chainTypeExports(chains); module.exports.ethereum["staking"] = staking( contracts.ethereum.veCRV, contracts.ethereum.CRV -); +); module.exports.harmony = { tvl: async (api) => { diff --git a/projects/helper/chains.json b/projects/helper/chains.json index b69948ef65..0075d0f039 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -69,6 +69,7 @@ "concordium", "conflux", "core", + "corn", "cosmos", "coti", "crab", diff --git a/projects/helper/env.js b/projects/helper/env.js index 62f91c5eb0..5f22b5e188 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -30,6 +30,7 @@ const DEFAULTS = { RPC_PROXY_URL: "https://rpc-proxy.llama.fi", UNIT0_RPC: "https://rpc.unit0.dev", RBN_RPC: "https://governors.mainnet.redbelly.network", + CORN_RPC: "https://rpc.ankr.com/corn_maizenet", ACE_RPC_MULTICALL: "0x025A2B4fCE1E0bD736D5cebe6C8a52229795376B", } diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index e280e99149..ac9c1d35e9 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -88,9 +88,12 @@ const fixBalancesTokens = { starknet: { [ADDRESSES.starknet.BROTHER]: { coingeckoId: "starknet-brother", decimals: 18 }, }, + corn:{ + '0xda5ddd7270381a7c2717ad10d1c0ecb19e3cdfb2': { coingeckoId: "bitcoin", decimals: 18 }, + }, nibiru: { 'unibi': { coingeckoId: "nibiru", decimals: 6 }, - } + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 68e930105af538a9eef1a15d63c02aa7f2a8c8ab Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 4 Dec 2024 22:34:50 +0100 Subject: [PATCH 1312/1768] remove duplicate --- projects/metronome-synth/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/metronome-synth/index.js b/projects/metronome-synth/index.js index 569412e575..490198487d 100644 --- a/projects/metronome-synth/index.js +++ b/projects/metronome-synth/index.js @@ -43,7 +43,6 @@ module.exports = { ADDRESSES.base.WETH, "0x1e41238aCd3A9fF90b0DCB9ea96Cf45F104e09Ef", "0x82562507429876486B60AF4F32390ef0947b3d13", - "0x82562507429876486B60AF4F32390ef0947b3d13", "0x46fb68Eb2b1Fc43654AbaE5691D39D18D933E4b4", ] }), From cbf5f2545cb0ffbbfcefc9764015aff6922e6766 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:38:53 +0100 Subject: [PATCH 1313/1768] track lpETH #12550 --- projects/lpeth/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/lpeth/index.js diff --git a/projects/lpeth/index.js b/projects/lpeth/index.js new file mode 100644 index 0000000000..2b2ba1f532 --- /dev/null +++ b/projects/lpeth/index.js @@ -0,0 +1,14 @@ + +async function tvl(api) { + const LPETH_CONTRACT = "0xF3a75E087A92770b4150fFF14c6d36FB07796252" + const liabilities = await api.call({ abi: 'uint256:liabilities', target: LPETH_CONTRACT, }) + api.addGasToken(liabilities) +} + +module.exports = { + methodology: 'Counts the amount of deposited ETH in the LPETH contract.', + doublecounted: true, + ethereum: { + tvl + } +} \ No newline at end of file From b6478d83a9fd54ca0fe5c2bc73a02acb562427c7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:48:38 +0100 Subject: [PATCH 1314/1768] track biquid #12558 --- projects/biquid/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/biquid/index.js diff --git a/projects/biquid/index.js b/projects/biquid/index.js new file mode 100644 index 0000000000..d162546b12 --- /dev/null +++ b/projects/biquid/index.js @@ -0,0 +1,11 @@ + +async function tvl(api) { + const totalSupply = await api.call({ target: '0xEff8378C6419b50C9D87f749f6852d96D4Cc5aE4', abi: "erc20:totalSupply", }); + api.addGasToken(totalSupply); +} + +module.exports = { + bfc: { + tvl, + } +} \ No newline at end of file From 3acd527aaecb6743223e60518d86d38851c3bb65 Mon Sep 17 00:00:00 2001 From: Wayne Kuo <95527849+WayneAl@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:50:45 +0800 Subject: [PATCH 1315/1768] Update Typus DOV, add refund vaults TVL (#12561) --- projects/typus-finance/index.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/projects/typus-finance/index.js b/projects/typus-finance/index.js index ba5f173d80..50a9549513 100644 --- a/projects/typus-finance/index.js +++ b/projects/typus-finance/index.js @@ -1,6 +1,7 @@ const sui = require("../helper/chain/sui"); const SINGLE_DEPOSIT_VAULT_REGISTRY = "0xd67cf93a0df61b4b3bbf6170511e0b28b21578d9b87a8f4adafec96322dd284d"; +const REFUND_VAULT_REGISTRY ="0xf9acfc0a06094f6515c4392ffef84d40cd5f1d72bc74cbde3ee99dd7bca6cf3f" const fud_token = "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; const V1_SINGLE_DEPOSIT_VAULT_REGISTRY = "0x4ae62c4d67f9f5d7077626fcc6d450535c4df710da455a0a2bd2226558832629"; const V1_SINGLE_BID_VAULT_REGISTRY = "0x2c8cdd00ced47e717420cd2fc54990b3b38e115e34a9209271063a59ddeeb059"; @@ -37,10 +38,7 @@ async function tvl(api) { parent: V1_SINGLE_DEPOSIT_VAULT_REGISTRY, }); - const v1depositVaultIds = v1depositVaultFields.map((item) => item.fields.id.id); - const v1depositVaults = await sui.getObjects(v1depositVaultIds); - - v1depositVaults.forEach( + v1depositVaultFields.forEach( ({ type, fields: { @@ -59,11 +57,7 @@ async function tvl(api) { parent: V1_SINGLE_BID_VAULT_REGISTRY, }); - const v1bidVaultIds = v1bidVaultFields.map((item) => item.fields.id.id); - - const v1bidVaults = await sui.getObjects(v1bidVaultIds); - - v1bidVaults.forEach( + v1bidVaultFields.forEach( ({ type, fields: { @@ -76,6 +70,16 @@ async function tvl(api) { api.add(coin, fields.performance_fee_sub_vault.fields.balance); } ); + + // Add Refund Vaults TVL + const refundVaultFields = await sui.getDynamicFieldObjects({ + parent: REFUND_VAULT_REGISTRY, + }); + + refundVaultFields.forEach(({ fields }) => { + const token = "0x" + fields.token.fields.name; + api.add(token, fields.share_supply); + }); } module.exports = { From 57af2719382dfc6e095b2e746f367c1226763e1d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:22:22 +0100 Subject: [PATCH 1316/1768] matrixdock: track xau #12562 --- projects/matrixdock/index.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/projects/matrixdock/index.js b/projects/matrixdock/index.js index 1a1c8b7c05..466547b81d 100644 --- a/projects/matrixdock/index.js +++ b/projects/matrixdock/index.js @@ -1,11 +1,14 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const config = { + ethereum: ['0x530824DA86689C9C17CdC2871Ff29B058345b44a', '0x2103E845C5E135493Bb6c2A4f0B8651956eA8682'], + bsc: ['0x23AE4fd8E7844cdBc97775496eBd0E8248656028'] +} -module.exports = { - misrepresentedTokens: true, - ethereum: { +Object.keys(config).forEach(chain => { + const tokens = config[chain] + module.exports[chain] = { tvl: async (api) => { - const STBT = '0x530824DA86689C9C17CdC2871Ff29B058345b44a' - api.add(ADDRESSES.ethereum.USDT, await api.call({ target: '0xad4A9bED9a5E2c1c9a6E43D35Db53c83873dd901', abi: 'uint256:latestAnswer'}) / 1e12) + const supplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: tokens }) + api.add(tokens, supplies) } } -} \ No newline at end of file +}) \ No newline at end of file From 2706726be9209a5a67b5207adfc2a9232be62e0f Mon Sep 17 00:00:00 2001 From: cmdevbc <89685615+cmdevbc@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:36:41 +0300 Subject: [PATCH 1317/1768] PRDT: Add Solana Contract (#12565) Co-authored-by: PRDT Finance <87976805+PRDTfinance@users.noreply.github.com> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/prdt/index.js | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/projects/prdt/index.js b/projects/prdt/index.js index e7100be91e..14134bd4ef 100644 --- a/projects/prdt/index.js +++ b/projects/prdt/index.js @@ -1,5 +1,7 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const { sumTokensExport, } = require("../helper/unwrapLPs"); +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokensExport } = require("../helper/unwrapLPs"); +const { sumTokensExport: solExports } = require("../helper/solana"); + const config = { ethereum: { @@ -14,7 +16,11 @@ const config = { predictionPROV2: "0x062EB9830D1f1f0C64ac598eC7921f0cbD6d4841", predictionPROV3: "0xe2ca0a434effea151d5b2c649b754acd3c8a20f0", }), - tokens: [ADDRESSES.null, ADDRESSES.arbitrum.USDT, ADDRESSES.arbitrum.USDC_CIRCLE], + tokens: [ + ADDRESSES.null, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC_CIRCLE, + ], }, bsc: { owners: Object.values({ @@ -26,7 +32,12 @@ const config = { predictionclassicV3: "0x00199E444155f6a06d74CF36315419d39b874f5c", predictionPROV3: "0x49eFb44831aD88A9cFFB183d48C0c60bF4028da8", }), - tokens: [ADDRESSES.null, ADDRESSES.bsc.USDT, ADDRESSES.bsc.USDC, ADDRESSES.bsc.ETH], + tokens: [ + ADDRESSES.null, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.ETH, + ], }, polygon: { owners: Object.values({ @@ -37,11 +48,21 @@ const config = { predictionclassicv3: "0x9f9564BE7b566dfE4B091a83a591752102aF3F33", predictionPROV3: "0x0b9c8c0a04354f41b985c10daf7db30bc66998f5", }), - tokens: [ADDRESSES.null, ADDRESSES.polygon.USDT, ADDRESSES.polygon.USDC_CIRCLE, ADDRESSES.polygon.WETH], + tokens: [ + ADDRESSES.null, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.USDC_CIRCLE, + ADDRESSES.polygon.WETH, + ], }, + solana: {}, }; +Object.keys(config).forEach((chain) => { + module.exports[chain] = { tvl: sumTokensExport(config[chain]) }; +}); -Object.keys(config).forEach(chain => { - module.exports[chain] = { tvl: sumTokensExport(config[chain]) } -}) +const solOwners = ["CcccPbvfmpNE5q4JFS5qU3mszP8obUy5Fp2BQ6Hm9Mnp"] +module.exports.solana = { + tvl: solExports({ owners: solOwners, solOwners }) +} \ No newline at end of file From 19546a1732c36c02324fb813a0ba109dbfdb40a7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:37:00 +0100 Subject: [PATCH 1318/1768] change default sol rpc address --- projects/helper/env.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/helper/env.js b/projects/helper/env.js index 5f22b5e188..7f71644488 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -7,7 +7,8 @@ const DEFAULTS = { EVMOS_MULTICALL_CHUNK_SIZE: "3", // evmos reduced gas limit, this is a workaround to make multicall work STARKNET_RPC: 'https://starknet-mainnet.public.blastapi.io', COVALENT_KEY: 'ckey_72cd3b74b4a048c9bc671f7c5a6', - SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', + // SOLANA_RPC: 'https://mainnet.helius-rpc.com/?api-key=0109717a-77b4-498a-bc3c-a0b31aa1b3bf', + SOLANA_RPC: "https://api.mainnet-beta.solana.com", ECLIPSE_RPC: 'https://eclipse.lgns.net', APTOS_RPC: 'https://fullnode.mainnet.aptoslabs.com', SUI_RPC: 'https://fullnode.mainnet.sui.io/', From e78b966fdbc2278256313d01dd175961cabd98ec Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:40:35 +0000 Subject: [PATCH 1319/1768] add more addresses bitlayer bridge (#12566) --- projects/bitlayer-btc/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/projects/bitlayer-btc/index.js b/projects/bitlayer-btc/index.js index 5a6957f6e9..c282ab582a 100644 --- a/projects/bitlayer-btc/index.js +++ b/projects/bitlayer-btc/index.js @@ -1,8 +1,18 @@ const { sumTokensExport } = require("../helper/sumTokens"); const { bitlayerBridge } = require("../helper/bitcoin-book"); +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { bitcoin: { tvl: sumTokensExport({ owners: bitlayerBridge }) }, + ethereum: { + tvl: sumTokensExport({ + ownerTokens: [ + [[ADDRESSES.ethereum.USDT], "0x92221E8Bc4E1D9a3E5D1cC39A524E90Cd4bdF8b1",], //USDT + [[ADDRESSES.ethereum.USDT], "0x6bc2b644A0D124F1e5dDf5a9BDd922e65a961343",],//usdt + [[ADDRESSES.null],"0x0CA2a8900b8140E1e70dc96F32857732f5F67B31",], //eth + [[ADDRESSES.ethereum.WSTETH],"0x6ac1108461189F1569e1D4dEdc9940a0395d3423",]] //eth + }), + }, }; From 5a676917d2fe71c64e9518337514806433f65270 Mon Sep 17 00:00:00 2001 From: Efrain9502 <137243819+Efrain9502@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:46:47 +0800 Subject: [PATCH 1320/1768] Add Echo LSD Adapter (#12569) --- projects/echo-lsd/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/echo-lsd/index.js diff --git a/projects/echo-lsd/index.js b/projects/echo-lsd/index.js new file mode 100644 index 0000000000..fb5940957a --- /dev/null +++ b/projects/echo-lsd/index.js @@ -0,0 +1,14 @@ +const { function_view } = require("../helper/chain/aptos"); + +async function getTVL() { + const totalTVL = await function_view({ functionStr: "0xa0281660ff6ca6c1b68b55fcb9b213c2276f90ad007ad27fd003cf2f3478e96e::lsdmanage::total_staked_apt", }) + return { + aptos: +totalTVL / 1e8 + } +} + +module.exports = { + aptos: { + tvl: getTVL + }, +}; From b5bbe0ec8ee5a3e19c5bb5f3b43aad0528370cda Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:09:10 +0800 Subject: [PATCH 1321/1768] feat(Adapter): Add TVL adapter for Vectis protocol on Solana (#12564) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/vectis/helpers.js | 56 +++++++++++++ projects/vectis/index.js | 85 ++++++++++++++++++++ projects/vectis/spotMarkets.js | 140 +++++++++++++++++++++++++++++++++ 3 files changed, 281 insertions(+) create mode 100644 projects/vectis/helpers.js create mode 100644 projects/vectis/index.js create mode 100644 projects/vectis/spotMarkets.js diff --git a/projects/vectis/helpers.js b/projects/vectis/helpers.js new file mode 100644 index 0000000000..40ee00803c --- /dev/null +++ b/projects/vectis/helpers.js @@ -0,0 +1,56 @@ +function deserializeUserPositions(accountInfo) { + if (!accountInfo) { + throw new Error('User account not found'); + } + + const buffer = accountInfo.data; + + // Deserialize spot positions + const spotPositions = []; + let offset = 104; // Anchor discriminator (8) + Skip authority(32) + delegate(32) + name(32) + + for (let i = 0; i < 8; i++) { + const spotPosition = { + scaled_balance: buffer.readBigUInt64LE(offset), + market_index: buffer.readUInt16LE(offset + 32), + balance_type: buffer.readUInt8(offset + 34), + }; + + // Only push non-empty positions + if (spotPosition.scaled_balance > 0n) { + spotPositions.push(spotPosition); + } + offset += 40; // Size of SpotPosition struct + } + + // Deserialize perp positions + const perpPositions = []; + for (let i = 0; i < 8; i++) { + const lastCumulativeFundingRate = buffer.readBigInt64LE(offset); + const baseAssetAmount = buffer.readBigInt64LE(offset + 8); + const quoteAssetAmount = buffer.readBigInt64LE(offset + 16); + + // Skip empty positions + if (baseAssetAmount === 0n && quoteAssetAmount === 0n) { + offset += 96; + continue; + } + + const perpPosition = { + last_cumulative_funding_rate: lastCumulativeFundingRate, + base_asset_amount: baseAssetAmount, + quote_asset_amount: quoteAssetAmount, + market_index: buffer.readUInt16LE(offset + 92) + }; + + perpPositions.push(perpPosition); + offset += 96; // Size of PerpPosition struct + } + + return { + spotPositions, + perpPositions + }; +} + +module.exports = { deserializeUserPositions }; \ No newline at end of file diff --git a/projects/vectis/index.js b/projects/vectis/index.js new file mode 100644 index 0000000000..1e82e546f2 --- /dev/null +++ b/projects/vectis/index.js @@ -0,0 +1,85 @@ +const { PublicKey } = require("@solana/web3.js"); +const { getTokenMintFromMarketIndex, processSpotPosition, processPerpPosition, getPerpTokenMintFromMarketIndex, getVaultPublicKey } = require("./spotMarkets"); +const { deserializeUserPositions } = require("./helpers"); +const { getPerpMarketFundingRates } = require("./spotMarkets"); +const { getMultipleAccounts } = require('../helper/solana') + + +module.exports = { + timetravel: false, + doublecounted: true, + methodology: "Calculate sum of spot positions", + solana: { + tvl, + }, +}; + + +const vaultAddresses = [ + new PublicKey("9Zmn9v5A2YWUQj47bkEmcnc37ZsYe83rsRK8VV2j1UqX"), + new PublicKey("4KvPuh1wG8j1pLnZUC5CuqTm2a41PWNtik1NwpLoRquE") +]; +/** + * Vault Equity Calculation Formula: + * VaultEquity = NetSpotValue + UnrealizedPnL + * + * Where: + * 1. NetSpotValue = Σ(spotPosition.scaledBalance * spotMarketPrice * direction) + * - spotPosition.scaledBalance: The size of the spot position + * - spotMarketPrice: Current market price of the asset + * - direction: 1 for deposits (longs), -1 for borrows (shorts) + * + * 2. UnrealizedPnL = Σ(perpPosition.baseAssetAmount * oraclePrice + perpPosition.quoteAssetAmount + fundingPnL) + * For each perpetual position: + * - baseAssetAmount * oraclePrice: Current value of the base asset position (e.g., BTC, ETH, SOL) + * - quoteAssetAmount: Amount of quote currency (USDC) in the position + * - fundingPnL: (market.amm.cumulativeFundingRate - position.lastCumulativeFundingRate) * position.baseAssetAmount / FUNDING_RATE_PRECISION + * + */ +async function tvl(api) { + const accounts = await getMultipleAccounts(vaultAddresses) + const deserializedData = accounts.map(deserializeUserPositions) + const perpIndices = deserializedData.map(data => data.perpPositions.map(position => position.market_index)).flat() + const perpKeys = perpIndices.map(index => getVaultPublicKey('perp_market', index)) + const perpAccounts = await getMultipleAccounts(perpKeys) + const perpAccountMap = {} + perpIndices.forEach((v, i) => perpAccountMap[v] = perpAccounts[i]) + + + for (const { spotPositions, perpPositions } of deserializedData) { + // + // Process spot positions + if (spotPositions?.length) { + spotPositions.forEach(position => { + const tokenMint = getTokenMintFromMarketIndex(position.market_index); + const adjustedBalance = processSpotPosition(position); + + api.add(tokenMint, adjustedBalance); + }); + } + + // Process perp positions + if (perpPositions?.length) { + + perpPositions.map(async position => { + // Handle base asset + const baseTokenMint = getPerpTokenMintFromMarketIndex(position.market_index); + const { baseBalance, quoteBalance } = processPerpPosition(position); + api.add(baseTokenMint, baseBalance); + // + // Handle quote asset (always USDC) + const quoteTokenMint = getTokenMintFromMarketIndex(0); + // + api.add(quoteTokenMint, quoteBalance); + + const { cumulativeFundingRateLong, cumulativeFundingRateShort, } = getPerpMarketFundingRates(perpAccountMap[position.market_index]); + const currentCumulativeFundingRate = position.base_asset_amount > 0n ? cumulativeFundingRateLong : cumulativeFundingRateShort; + const difference = (currentCumulativeFundingRate - BigInt(position.last_cumulative_funding_rate)) / BigInt(10 ** 6); + const fundingRatePnl = (difference * (position.base_asset_amount) / BigInt(10 ** 6)); + + api.add(quoteTokenMint, fundingRatePnl); + }) + } + } +} + diff --git a/projects/vectis/spotMarkets.js b/projects/vectis/spotMarkets.js new file mode 100644 index 0000000000..2f73d714c3 --- /dev/null +++ b/projects/vectis/spotMarkets.js @@ -0,0 +1,140 @@ +const anchor = require('@coral-xyz/anchor'); +const { PublicKey } = require("@solana/web3.js"); +const DRIFT_PROGRAM_ID = new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH') + +const SPOT_MARKETS = { + 0: { + name: 'USDC', + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + decimals: 6 + }, + 1: { + name: 'SOL', + mint: 'So11111111111111111111111111111111111111112', + decimals: 9 + }, + 19: { + name: 'JLP', + mint: '27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4', + decimals: 6 + }, + 28: { + name: 'USDS', + mint: 'USDSwr9ApdHk5bvJKMjzff41FfuX8bSxdKcR81vTwcA', + decimals: 6 + } +}; + +const PERP_MARKETS = { + 0: { + name: 'SOL-PERP', + mint: 'So11111111111111111111111111111111111111112', + baseDecimals: 9, + quoteDecimals: 6 + }, + 1: { + name: 'BTC-PERP', + mint: "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh", + baseDecimals: 8, + quoteDecimals: 6 + }, + 2: { + name: 'ETH-PERP', + mint: "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs", + baseDecimals: 8, + quoteDecimals: 6 + }, +}; + +function getTokenMintFromMarketIndex(marketIndex) { + if (!SPOT_MARKETS[marketIndex]) { + throw new Error(`Market index ${marketIndex} not found`); + } + return SPOT_MARKETS[marketIndex].mint; +} + +function getPerpTokenMintFromMarketIndex(marketIndex) { + if (!PERP_MARKETS[marketIndex]) { + throw new Error(`Perp market index ${marketIndex} not found`); + } + return PERP_MARKETS[marketIndex].mint; +} + +function getDecimalsByMarketIndex(marketIndex, isPerp = false) { + if (isPerp) { + if (!PERP_MARKETS[marketIndex]) { + throw new Error(`Perp market index ${marketIndex} not found`); + } + return PERP_MARKETS[marketIndex].baseDecimals; + } + + if (!SPOT_MARKETS[marketIndex]) { + throw new Error(`Spot market index ${marketIndex} not found`); + } + return SPOT_MARKETS[marketIndex].decimals; +} + +function processSpotPosition(position) { + const decimals = getDecimalsByMarketIndex(position.market_index); + const decimalAdjustment = 9 - decimals; + let balance = position.scaled_balance; + + // Apply decimal adjustment + if (decimalAdjustment > 0) { + balance /= BigInt(10 ** decimalAdjustment); + } + + // Apply sign based on balance_type + return position.balance_type === 1 ? -balance : balance; +} + +function processPerpPosition(position) { + + //if perp market 0, amount needs to mul by 10 + let baseBalance = position.market_index === 0 ? position.base_asset_amount : position.base_asset_amount / BigInt(10); + + let quoteBalance = position.quote_asset_amount; + + return { baseBalance, quoteBalance }; +} + + + +function getPerpMarketFundingRates(accountInfo) { + if (!accountInfo) { + throw new Error(`No account info found for market ${marketIndex}`); + } + let factorToPrecision = 1n; + + + const CUMULATIVE_FUNDING_OFFSET = 8 + 48 + 32 + 256 + (16 * 15) + 24; + + const cumulativeFundingRateLong = accountInfo.data.readBigInt64LE(CUMULATIVE_FUNDING_OFFSET); + const cumulativeFundingRateShort = accountInfo.data.readBigInt64LE(CUMULATIVE_FUNDING_OFFSET + 16); + + return { + cumulativeFundingRateLong, + cumulativeFundingRateShort, + factorToPrecision + }; +} + +module.exports = { + getTokenMintFromMarketIndex, + getDecimalsByMarketIndex, + processSpotPosition, + processPerpPosition, + SPOT_MARKETS, + PERP_MARKETS, + getPerpMarketFundingRates, + getPerpTokenMintFromMarketIndex, + getVaultPublicKey, +}; + +function getVaultPublicKey(seed, marketIndex) { + return PublicKey.findProgramAddressSync( + [ + Buffer.from(anchor.utils.bytes.utf8.encode(seed)), + new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2), + ], DRIFT_PROGRAM_ID)[0] +} \ No newline at end of file From ba3ab8fcac28a621c80456ce150ce3f32764842a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:46:07 +0100 Subject: [PATCH 1322/1768] lint fix --- projects/vectis/spotMarkets.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/vectis/spotMarkets.js b/projects/vectis/spotMarkets.js index 2f73d714c3..92bb6f3191 100644 --- a/projects/vectis/spotMarkets.js +++ b/projects/vectis/spotMarkets.js @@ -102,7 +102,7 @@ function processPerpPosition(position) { function getPerpMarketFundingRates(accountInfo) { if (!accountInfo) { - throw new Error(`No account info found for market ${marketIndex}`); + throw new Error(`No account info found for market`); } let factorToPrecision = 1n; From 1ff6f81730ac7b21e3eac3f097ebb97047a0767e Mon Sep 17 00:00:00 2001 From: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:46:57 +0800 Subject: [PATCH 1323/1768] [Bucket] add new collateral - sbETH (#12571) --- bun.lockb | Bin 0 -> 148570 bytes projects/bucket-protocol/index.js | 4 ++-- projects/helper/coreAssets.json | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100755 bun.lockb diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..3105ecafcefd07843b61227bc3eb2b78fc5f908b GIT binary patch literal 148570 zcmeFac{r6_`v$y)kXfZ7WQ@vCWJog0ER-q9w9WGrQHdr)hEymO8p)7oGK3?DB&TIqD`Ox-bb$hoCz2l z;uPfVM-B-M@{#uP_w);J^7cn$2Qa`6^`?MafFATD5*wfcAmYEHq7nl|HzY_w5%JWa zJtx#NFjDvnsX7XPtWb{gxIRGI$J5s{gfs^2QTM*i1@faxPLBC&I{$P{vj~l zBoaONi|jf32L*coe z0?Ic-IU3hMD&n}^f*_%O;k+HxBfq-9Kahxa4s~;bX+ZKMlgUcU6-cw^QgrT6`vnWi z)zi;Cm>D{a`d>rs*9pj@e)?1v?E+)#=l=spdju)>gBP#h!yQNDaJ>{ft_mr&Yk zLivw4OHk(DQs5(hgQQ6$F+hIEqjkXs?I4uV6*43egd{o_5b1q`atJ}R6;)>pbdY~} zfXL2AIf|Wds7JclODT39Q`^0eC6S=3(GlX5c5Lz#JCC5f2$VbfZwf~9sS5HC`sgEo zsC^xkkJrN<$U{h@Hv^*hI|8Ehq)%<91c>4#2#EaFQ=;fE21I_o0Q;z4Ta`&9Q9vdY zO1mIH#G{9Lq+1JlG;jYY{#DQph9o)*5c!h=h}H`k5SC)JJ|OCcBp~VsHy|3fUI;eo z?^`uWJ8Q@z|Fc(7;&~17D9$GUk)MfxD9(X^$bUIN2u(CEAmY7+PM~}%AmZf%Lf4~x zv?$}S8}jfI?Mg*$K;-X!9g6>=kVo@I5fJSc=XELbHaH~6FVq*-0+b{BAHZoee;xxO zyZ;myv(;2T0g*o;Udgb6A=0JR+~ERU`M1EPM#LOq&~4uCNA zqP>EpBb;DMg#HFN1qGAWKsjpX87%GYOjf6`8b7ykX=bU zU1!;zzQ&J=r#T`21&z$wH-8k}?SaPskn`nOPy;_KlQ zEDb)oKZ88dx#UV|KOIESJaF>*(H&A~kmry4mVi*d2p5>Z2cRDL5ebOaTNU_$=2ame zil>`Xa7ZB72_lCEd%8uC%wQVNgz^R8B%24kRMkZ zJ#b7sddcFQWal8+oKViYySij9n6k}$@4&h@P~@p2og-t56o1!%{-GDqcB&4EZ{j|@ z$l^4v7*0a!0JZBU*vPfIej6h8IwzK{aC^fW_G)uMh(i64R)1oVgnr`r=p!DI(vEAt9p%>v z`r;x|BaocA+T%TczN{==TDn7%)7bU;6YnN&ob)r>wCLFKw&KZI;amB|vY%$%DI_mD zE`2rrl0tZKiQT@M?W#(0-eQ}L;DaPZFIZtc`mS-ZUw7t~a6e{lbjXFOJ7_YIegEV19W zEwX*slv_%YrE#O!cvhmMxyv$@6Oq%CmJJHayfh81+UO~zFUmjP>F8VX2H`GQhlLKp zF9nCL-YwN@Sw~Xe&>&}RDH-8dZm7S?)k^u?L`p+r=EtOR_Lql_XLI9z^NY|QGtX9d z-dbAvoa{MQgLNdVjB&8)^PbUxyHZ2+M^@-2??1U>{%E?^E=GZ+ylV9?#1xnY1K0XCl<`HD##-8-N24@Ns*GBRY!-^zcL zU2SM=>ot|Hb~@?@&3wLIjvuwQJIC{-F}81Df{|=hQnsAADNy!O@0e?8^ZjKHI8^+2 zW*ZqCZ_0=`=5^N-$Bo5*<&D?ohbnMB&(1uK`}x_xS8s}+Rgc}btvAp~l-yjKyklMH zq=k^qCu@r=(&XDOw`@Fn!lpTC6r|@Lz8M@g#vC0sc;DJk@tfSCmdUi*YyTloQI54OYuCpGu|>%Hm+8q zu;F5c=*d02cNBs<#~$q;meRRrD?S;awVQFDWS44JSMAWZlgV@{e3{nkxO?Ic6=OS< zx8v%z7);*2))ZKO#rXNUzA#_1hb)iswq`eV=4H&Q%DcU`3YG;PIPZS(lC$sPeB9rO zaTD`v1N|IHu_T3FzFRjwBy~u=zLPcX7+iPq9Ct+Y!yp$u@sH-Mh3kEtJj~O3;@R@q zO?n)Z#>V!S7{tZz?B5)n8zE~Q9lLR$$iK=vrTgfx z*+@NSZGKXr(3g#-SGKatzn5C2IdM^0n~v_o2N8w_>GIyI+izrBZt7GmUNj`_>fT>? z`sCTs0-4?K^)05KI<__M_71Tq=Yw0O9artpG%4F2U6rU^GDGF=%CZCEkHlLoXBCAk zaqOElLuk4El9UyAJ&et)?|-_ZCtcj~6IWo~_t3g%wVs0Uz6^CNfLie_MBHDdc$7ZiT;E)x6=XFW=rl9iWf_72JPOr zmdEK@)x^hnk29I?72JEC)g!NYOWtjt%=dqa|6POi$JnLg2S3!U*&k+K;jr~M-#ORt z5jqWWeam{M2Xo$Za$Zi^cX}dev|p=Ci{WfxpZ_5qiQ!!LrXzLJpPV1Q=5V68S^A2A ztl&ZwpBlMc%l-McE^Rk%UHVY1j1<&9Z|}Pcow>#9=a|;93|hYwux{I?R+JE<5LWN} zd2J&XyW>ph*Y=D7%MN^Sm*U#2w?$HIiHGP5rR{s(sUB)w$tZQt?9>@yr$@`G3znL0 zYv_ErRk>PVSkfiEa@B+ir*_ui);!bp@5UMxYgC^J*3s|iX&F>CdCs*gp^tnb*2*k1 zDZ005(x@SB&R2!7yGxQ9)NMzDUmYwazuF&^*|;iuU#Y}D#pUGfS9;Cq87j%8hA9Vn zviK$VPe#kQ7`eFaQ=9g9V#D({7iaL$8TpcCwBA%?sUd4lgtFJfIdC#Nbl!;;Wa-e` zGC1wvi^I1|uAR?FJtcXx@1N}8b&l7gp@mcnTXTl>4jV-`?wd~>nr@VTFwrR1yumiw z|AoJLi>HzIY}tKr(F5UO_xBpd@x5<&#G+_pBFk1U(qW!%E+Skx>!sNX_3VcqlU>WR zpS@#JWABMSu~N<^^5gTF+X^eUCYLq~aqx-g_NmoZX7!iPQ=2hOktt$E1dLOcdga#7 z++^=bh1;2q1}>~3aqAvkSsNW$%ys6|x`(}sd4!BM3yAcJ*06|Nv7^iC())NUU_qGS zxu98wHOdF2_X}U=X)JBrwol8wKwO?#+{D0meSG+paV5qT24^3N-WK1X|3>4o#<4p_ zq{{KxTqPBoll?M;ru8|P4-W^}Ru3~~JsFa0+#AI)XIgu>wfTLM4euL!{XVOFGV!wD zx8l=p6M9$LnDj7#^Yih7Y124|+pVrWxiKr@QQx}e`jeY>xV?}u3tc|rNbjQ^O#Sk* zoXpNbsim)9Tij^uB%kuCvz7ZeBk^Lg%+<>>TFWHw*7B&1Z#3T5baYpR_L&KeQyecm zIruJ^2d|Ernd9uxd)msp$<&Fftf516CDYD`-Mg0gl#bqN@o;aD+8Dj5*Nrpp(`KLX zB%_UP)_aHfY)y6Rn_geoy3siB<~gm*jBuwJby*MZEQ|{K%6;hdoVh*s-DjU%a&54$ z^*-av1B!kbMQoD;B4ZyzW@q|J2|DNRcQ$Lw?zvxdQ7C`j%~Y1|o#)PmFM7%!Ra58p zKz@9Hy;PFyt+szp;JwEUr{?H-@mB6x_Od7<)w(b6W5#}sy8D-H<{r)zyK0hldd%sX zaQ*6xdE-er=hsbaX;~M)PD)R@_4@Fdtv;2HOG*oxeUm;OH+!#lW{LG9OP<#q8nb&c zR#Y=@neob6Ks`J0%iZAW$##pCEG_-p<&1glJ9V$SxZGYi8kF|fqnzEQ>z1kPwcL5P zuFrA~6jRe+`=eYZ`gWs_4#>1Mzu3VnW~o@ex$l?u3=c8;XOIiy&E{ibl0jMSYm&h&E&q_g|||> znWT=I96x_rRY>1q^FBkP1lRo~m5&;GRxCAI%eTF!K+QBDLSW~$m81ek*y|3z?S;%8Kvd-2rC+eG1yayfJ@BT@e zMkTv|&`P*}W`sOF^+k&=<{tyT8SoJY`2^1zG$qU*29gTZK0J5-@PQTq%=d;j%D`u! zl8_IyB+Ne!Z{&cF^0ac1KIY$pH`-J_DxYfqc_HZfz(=v4O2YO-fT&63PX_^bcB3g_ z{srKp@ke?jsxcZsr^6g|5b2U5&TE7 zqjl_246y&-fxn76e!s(4gGIA~%Kx45+XQ^%Kl0~y>{kIFt$&z?H1B=H{xia&#r`v+ z3K|oRpE`k$<_@iW!2Af{>-~ZMPl1o-FPs(q__T7W_UAySQUCGUohsi8_;4itbNoc7 z7{AlN$LmjlMlNcG+@L?IDbHXXl-xT0W10UIi&tay_ZwJ0E@X^{q39>XL z+tVh%@X`9^fd+7H{9_FN-uA!cG5=4mKYx1tO9lVY{R>*ZXzcMi z{%<}L%dr35z=wU~$NWQcnAU{(+%W02fRA~99|v6icf@>4;G^+J^{^GwoG?EF_@>nU zBQh@kl@MJr9VmWy|EF~y!uHnzAMHPA{i3p|+D`*Mir??@>w%B% zACTSOvHunL8o)>W#v1VUmkIY@6&4-xA92z6<8kw8ee6Hdp(Ww|mjWMMKhXR^WmC2P4*1Ldz`iIi<^BuVhEPs<|8W4mJlMy3 z|5VpcD)7;m}l(Y9DFR>Ib&J7WjDmqu5WCp9Fj@ zs(r+r>iD$+Uzy6Mm5XAC{hte82GOVTQ8}#%^BsY&1AH|0zhl1`_-Ov1z9Y@4#%~Dt zOMs8L*sovp1Gk$8i^h=ZKjKW)z6i`2)a5*Kd?ZdpIutdw>6)$L;t8Df=Jp|5WW;03YrDzsuhT zeAIvJ55~Xy`}aI{nv!;FA%2ef5?Bde;^H766U)CUk&V|JhDAi`#Hcz`zPYldhd$-!}bS(PrUxp zItMX-j>v!Be<5vJ66Tu#AMGC~Zpijjv2A%YP+- z+jRne1=T*Su|wLJ&m%=5t)cRfee|LwVZJl)wWxerc(@JbR}$>wI$99(MHf+?f2Y!S zq>uT5z}F-6pH>~rZv{Sj{-BkI`-b@u5pD_W(Y&kH&7Q^S2%NRs{cP?FY86 z1&bG*KhVm2>5HM_EFhX`!55BM>sD z!zUwx|7^67p$+Dn10U~yh&omObAXT6&+p7%j-~&(ex_>Q9{7JUf6IZ7*U#_tp93zQ ze-b|j;5$;s5044*<5vl{y$XEd{xj9}BMFCZc>Vm!Cb1sdj|M*Z59aT4;G^ePq{m7$ z@Qe4@J|7%j*%9pjg7&i-^Fx5|_y_#^z&9uGr@DT{q4ThWetv&})-{CvUk7|=g8iwE z|0UoPpFgL%{zifSC+lZ5JUrs{gZhs9^>d*9;SFw=4ty;_|EKEzL*NtdAF%E}nEhFd z+j+o&uPed+&j!DEgZa(C$NT3mDF0E7`66(5iLYO%!BnsRIly-#_&-(t0+m0DUo7y^ z^DCOSxKIDl(SOL`wr#*i&u?hlop9klaEQgYDF-|}p!xs1_6>or1$?AO>)bi#nce3*hi{71HNzi73u z2!m%pwf{TgzYX~7seCtDjT8KQ1bnAIu&)Y}*X$4M#{-{C<@^1H|Mal<^ns7oJ+0Rs zG&b0j5%Aajf&I(C$Jb9~EQ$>LBH^Yi>VMro|IYY%0DlA3e;+LR3)`p~H?0Rg_WyV0 zAFl?9Wc>&BeSz=)2mHst$K&@q{x8-1%l_~1vw@GFe|{(a-+}M@2mRlwMIu26etZAF z3VioJurIFtXZ%FqyHM@_&iPxF4v7>@<@@4EP5O1hP33ecpTD5J`*-Yb0zO;wH@%sNA{|^Bl`H$>kO(?jXLl=JAzB=4I zc~bdk|HbRzS91{0zcax9lm4^7;V0g|e&_zh2l&|j@A!Wk_~`uc|F7$39vmKOK>yKr z3&Lxv;~xloxP|*|elhUT^9z{%E&GKqc<>1QNl()+iB+r^nsK7T{&7xjIr z{l5Twe13uKO_k3Gok!1~h=+Wbjznlk*ndsn%K;x<`%uE=l-xi6#_a-uuS2!}Tm1*V z4AnmF!#`X7s|MTe2R`aQGgRR*_^Z`Fzr%b)^ zl?LW#{*6CX`yIfCM~I*HQ6FeY*gh{zKBE6<4bYM>e=YFQ^%HT>7~nXd{J$m4uLC{| zVKi!s`aV_rI&kr`r1l@ho)Zbtkg)x9;G@sa@Z6cI|HHtCBg`N32hJgAPS}1uIFIHp zBH}VyL~vU=I6OssyzZy!zZ#W~?^~zJkD&6A&uHwXI)C32_-OoSO}PIu@bHQEKU6kV z|Gj{Z_CI77*`F%^5b)s^DjNHP#{ud6Tf*)8fDcE=(Wou5O=}D=e=Z#UqWO!ssBEhC zoq?}M<10IXMhh!h(Fg4_6xQ7w}jih13tR{ME;}KRQInnu=(KigX|#t`yqiF_~Mqw!;h!nvq|#)SPp3w(5bf@rhgh09U?-x6;30{AF? zc;CV0|HegixSbdro}>ATuRp)y;d;yu06wx$>$v@$Uqt0&|8f1V5ZiwPd=&rR^ZpXyq@3!*g`~ z#QnxdD?bAG$o}uHpFH5B{$sniU$olq20j{p%%gQ4;`Xy0D12-m&jVWRn*blpf6V_C z57%S+3BX73Lw=(p zY9HsP%D+hEBimEi1F*dhz(?yBacQ-U`h@w*94Ye`#SP7!sm9+Q_~`iy*+yees}I)jT_d${Q1t5^^5wC(p1;~cHqNTxT3KhMvB@$|Hkb~|Hl7k#(&me{&V1?^@sES z+3KHjxV^H=e}4bwpBevIgZZ0*kK<1VP0)*$g!$)zkK%{s58~qTUuocW6TsI2KAyk7 z;^BJC*L0=$kL*t+VSWVg(f*J4^ivSP{5s%k0Uzh58b2;FW&gslr?ns0o-y!c!9JSz z=)0#=o&R~jN7rv;7rmzHe>d>)^&7=+s{Gk*l>Gy!zh$2ce7J@B5r0~3BU?CrwZMlX zz-Yw9WvKpF3Ag2P|Lgn^m7y~{S`y|v10S8ABKusl5UFi2{{ZmO^&j_rs`IA___~Dn zG1BM*w!g%KMAGH}Yc8b4%vs`KYG@bUc*;!oB8ajJbZ?zE0Q zH2t|&O}#1p)9N?kqJ-m}1bnSO82^XBNB2)t+53q0XZldSKZpFEfhuTB*nfNAqwmim z{#0Us`HjF=0X|wcXzZrCex~_S_76OFrn>)G0w2W>O#irk(P|&HpHF?^_ZXSrjVQ`M z`frH(F8-sIf+)WbUI?YAc)ZQD2u(^9WI1nwm$5@-oys5m7l@tAC{bhG_iY zTJR$wL~{!E_8)pmKT3am*7_q4*W4fJzag>%WBTLoAvFMz|61@u<=XH<2_eespbVsc zL)1?9N2~vi$WMK0JwnvpfQp9H@_$3bH=(vei1P4E@gort%`F>hIYLf&!R6~mLWt%L zOy?hoh-^?24lfjk%~Xs6MCrdF@_);ZS_-24R%-sgA*$a7FND$XLMi&kZwjLF?bJL% zi?!Y?$B1gUxS{|6$z z2q2n23#s`<)cVDMNKcwtzl>VHoLa9)&8q;Sc&Y)S_UcsB1VsJS2SoierIxRumRnQv zwt&bF^glQvz5^8<0g+#1DtZCJ56PRF4?r162+`X>Dh2_vKt2)`QW5EIg*?LTfXGfP zHNOiG`5#ZkBx-#MApDS0;TPiVr(!xFYJZrTKMIKSvZ?vw)ci>*o(6;;(iv(#9}wvk z0;2J_KrO!ni27Rzi1cfySO`wWCw^6LR23E zi1c;>BArA)_#q`xF$ECuQmMF)ifMqT{UJcquWUdGz#D+beiI<_rvnh#e+r2FeFliy zzXpUK(iwLY1ODb#jQ^}qXDh=DQ+1SBG&c>eGH_D5KL-0%MH{`P@xS|9N*vIAFS>tlq~2#CL~s9he@lr&G&L?n{D0^Ec9L@v4aEOt zf*Wc&5=ECN&2Ta_tFXZM?i&rGL6cUxYK9GIxAJzYnuNQXj#*sWdSZR&m09^CIo~+Q zc}Ffhxtq$#7W&XS(4OwRYy7f^?6!sLK@97ndv=@{77FBc3j{fouxT|sex!Polr$dy z`Mr^nLsikfI8pVJ9RbO8x896vFp7RD{ge@?pg$N`BBnomnM<7gJ;UsIhqVd1)Uf}M zW~kN~_UKUC)3rMEJooJ_Umq#83ax+I;5EV!Lcc8cGRK)le>$C+=^nAQXI_`&lGjzd z)b`R9KkI%m=d74XaM&Ak_JjRJ&qz2iB$;g0n9P(YNQ&=e9;4&c{4_in5T?$t;$8a-@3J1f^SCvU`}VuDQm&FwuijO9K6rjP@5EkB1G$Xzb-@ucO1^zNcp!96?NGOg z*5S7nMSB#>3A*Un7AFRV3E5-)dd}aj$G!4rJh;iadOxCgV|nseoso$W1N8>80W z?RnzSQO~SXb`4Ql7GlpArC)Y^YCd8bYp~bV2Av7vIH0o>oEY-QrE8A#zb;rZC%ox~ zUgV?f?8N2*b-A914VPO}`{o@cDeww>(v+##>Oa&mxUgNSl||vrsvGm9rtc8Gm(TgR zhM`r8sBe6?&$wOJcvQ;QXgNIKSo zS;pb*2hMV>5D5HmxY%~=V!Tvm0lIg={-QO96GQNJ^DPF|p_h2wFRW_!Dx)WzpH+S7 zX!qfn>?*b2ELxsEIO#2Nk!9cZxbqM13#=E3=_n58Dt*1IrSrDV-s8)LMhLnyuqYry zNsh{JWZn(a;>Tf1F9$}Mrt{rBzpqKRZDfCm>$e3mSKpUv(cR%L-ow7lL^Dpt^+0}$ zlz;2O%II{S{@pT%I?V{W=qwH=hR&3QJ?f;@`TdLQPQ8zBW7Xg0+qjJ*_v?k3-Sdtz z--D=vJnEW+4vZdtZ)_Jq&_&NSI58-NCZ2zNU@*_J zN8_yhgSuqF=`&e8u19_;x+=la^ySo*o@=wp9$Z;))7oWatIehdgKx^MtvBvCB(OXx z;&rFHV=+OO9g6}oEG;T;%nb0(8oQgT;?b8X3EuG+H!ei zqK%%s%_ftZc`3175iVqojmy}VzWCVqW|E(v%kdw&Ybv=Iq~0{u1^JFiIkEF9bAM`- z*!FaMw7t<(Q$Kx%uw{ll?bM?F|`QZ+Cj%YexTPBc5kmSQL<9`sE2;;fw1nxi!UVyEbI39rF&n{H!{eF(;$C zB5vF5F7>!)-uX8pJy(BWt`wVAbRqlX;6$e79jg_ur`=2rsW&0$qO(Mt{xALI!J>c+ zOaJfUJCmqu5_>4?_6R?{UP)S5;M&fWGe-K4Ek@Q^Dt{+Bj+{6j~N|5og>%u6kZ%o)XJCamaf#^;J3Wnnd{Ya zg6>?Ru9~+*#Jh3{LxKFBqiU+Pu40M2^pP{H#rAe{3^!d8HQT=4mDhZk$sHAG!RDd4 zm)!#6nWp*4vcOFrf$5HdtN1NS~b8a-=Z>-?-;y4hm-I>)rcA=+O z%WRkE<~*<2I{ZD^rkZ7*p@F7yUfTP=#4A1!8UCvJ^oq^80^)U(kEr`-GDp)Uu4=JJ zR8iRgi*vrHbG+hs1!LZ;ITgosEN^Zr(pCLlabeM64`tpJ)iTrdn;A5F>TG$&HD^8J zSocs9ea3>%c4JmQy$CEXZT0-=n%uepBDSk5D%I0#T$&*2TrX_RI<6S*+?^gHv5p)Hx zC?JEY;wqodS8glRe~#BGU{uR0oE06Np{B-lLCu8hKE+Djp|Dfy<;oGOv69~G3MBQ`a%2yn^o!1Z9WCdL3zTWyZcc-QE%(C}%Whw?f z+RQ?3<_ULV%DGghb7}M?FRa<)V|IaiIeA6Qg*DQrEyL$tCFlwfb!XFuFP$?i-rF-& zv!3Cat^?0Lj^c|cq{Y*1Q>TBFon@-YWd2Yp(qa}v?9PY5ALTQy&yCuz>FA*qRQrywC*-;+8uI;p3gwj%it}szoWuQuVtF)fL+&q&TH)ekwzo&kf(Xr~H zfv2dQp4s8^^F-TZ?4vdw7#Q0bJ zvNN^M)widKC(U-hc+&Wob{~tNm#LY`>om(1iwORT5p{Ro4V(YQ@%#KOZ?04cv>r@* zqQ>}Pk&{=@_2lnw>vC)Qp3*HjR?sCMRnN}kF|bJWhWTS*fe*QIwYs&ZXIsUzjS+Ok ziMp>s7^^~_`HpkA_QfwK(Yrr#tFyJWbXTbqOV}&5xkf1^dCpHaoas_KmeV)gAtfvI z%(|7QK6lYweDgizsm`~n^9Z`=voD+&+)v9lmtU@EXi;4fX=0k*-F2V5en7&#Z_NKyAn?tRuMgT!`pmHsEMNBV?&-CH`69afr3XHm z6Z~C7)a8G2h4<9SbC1uiI>RuxKQb#ZG;;I+*Zu50TJkq#F6}(YRzB)pvxhmcN#)Tz zOXf4K)1xZrT~ZaTJI4=SO>#QXPS8c)3&M#(X-KR**)Zk;SG&~rxRH+YpA<|~9MsEi zHYMI+aGF-f;*$U6SpNQ=76GpN?Sdf#B|0@5Bgr{Ct5jYUDF%8gqR+1JzP<#D0{&m# z??@AM{}1mc@%NpOJj2IRVGAZ+I6H+puxD}j3q4@mwe8*gbuZUEwiMaoAjUu1+Aqxc z(q8)l7sJ-sCYRE`SFA8eO&zgi-5)d@J5anMjSvS}qQ4@g-5XfNI(bJc7w9oOdyy&p z*>Ja8UYhSy9Sv8NgHOdK%c^Hz{B-*45*gBiofW(8EcF!W$a}qQ_2q17F5&D!bnbxT zD@WAzp7&u*?ZSQYW7mu))mm&{Y9VjHc5(C45B1#VJ7!e2KT55cVI7s&<73h*yk(xw z8vXb=-z8VXcO0XarQ@lHp3yI$vqa(37h8;6EIq4k zZXQ(&5?@|^pj3maP@+)ZuQ=qvth|nuPabk5xbKeI7xsI10xy2%6!_BG~zcMKFD}CqCTK+hAcrBzFYn?F$kSs`+C7@lf2NFqnkbQ z`Mke(T5|J|o{Kbg4O)NEm&s+?pz2jGMKXSMo!j*jJZdI{O~D{58hG%g_09%m#uk`o0}b3=tvzLd(xPj`%UfYBsHwaALj@-@f=_ z0smF|mdAbvc!SOTZmbcVwY>GiEy>8J?Z+C{k9>cd^oV0)O3I4t$0t~c*JJ$sJ*3T` z8Ome7w{>01Q?Xiw5I*a|Gs{ye@0^jmwy~w_W!#XGc=>r%kF$KKX+ifgqaI1@iR_SH z!Y0}LHL2g|LSIeKE3`A9cJ}@oo7SY24(ki1@6<{r zmoLy8o+}(8t8)L-2OH+~114>+s(szmI~MUi?frV{)9F0oISl%I6(TQc z=RVDRh`xh`*BkoI7ETPDZ=R`e9j5OXztEn#SjUb<;Kr)Skbq|U;#G6rn;Myj)8AK- z>%S5&rng4%)y)gDo~>t=_S8AkK3i93dlfl+r!zrU6^jBga4!`*Ae{T6n``OeT!(0N z?X!=M&0*D;^bZ^0IrVf|!ifWX(pmdQUwxg+u&bYMzHBKU%g6ht!+H)}dOq23%Yg4X zL3brlx7KCz!mvx~i>-@hRl9X-U3ap_g;@L{+K+J71}}_kS+V zyxz9Jroc|F?G|gvtf6hbUTO`knkfpU`_6jQ1iZL3b0s+{l75h&3xCV%Fv2-AM^@Gd4%xx{Q+g`=6>@m&s>3rCIZr<6^;_e~d_rZ5ha-=Tc zOgP?M`YwY_iHD#I-?9Ih7*bt}mOQEI?@LRoJL^1>Uo&wqh(R=mD|gPpPa3Mv($pCa zktRJInFD)wN?s#{Ic+?0XSA?7C@aNahJsQ{1ZO51i#i2DqOR zpEos$x>+C3(dSiV3Ut3VeUN&LeRPGT?Z?xzw!Hq3qPWT^*PVyGxb+s3|K)phT-)?Z zj@8@o^+k@5HpjUX8s1&?eY+u<;I9@@S469GZ$WZ(uH=a9y%3SlvCQ(DY;;?^Uoal( zm*>2@Qg`5``OFpbMz_mwHKiU*a9*QSa!a77eBri>hbDxgJGZ?h=xP&nKRsCTkSTG! z>@FM29fu#gAIrJMaYTHGq&@5z)qFu>;oD8xX}YbC=JQ+`NmZG%*3x<7ww@C*hqlPl z@2q~>QWm+HpsPdFeb2g^G3DH%KqsfR!LG$Jx=xGDm_3xp-|V&84weO+a)09D(SJod z{K5&g60KY2cFPw>zjfPKc8cl!@x@FxJ{J?$u`W?}buQUoVAGu|DbKe?Z9K7z71<%$uC)Ht8SHhaI8fBR6sC&p{vKt`l96I&Vs=|1Z;kNo)D66vbIv@^M~9$mMAV(m<*(#I zchdEd{w6Ek>aN-c2JLP~cd{qk&wH98B_yr6^R6Q=otlrP4qt#l%H8G9=5Ri4Uf!~t zA>qYP^`Z)S;(e4cQI~H~(5m`7?Rlf#8XV-u1UtXA9p|vpTNoH8RuQmV z;=|R-&O${Ny)tr+edMW)hj;3wF*WA~UVlsZjs)fNA@n_SoETVNZZ_|l%V8qE^hLvR zL7vXXhc&J*jHW-WI-O2S;ZFPn+rAiMb?s%>J+n_Ns|`xOmdW$(rd`HP*=td~>}Pkx z5uamCu_z$J{FECF>2~#fvh}TjmA+a2oyuiKBO)e!qpx~58t*EM%d}K{7RJftqg1@} zY3+NakndlUlXoxYW^mX8W<*`xUb;nELXnAw`YXlNc7Kl-} zsm7wYU;bm9h~51)Rr|Pnm5=Uf91(nf*Cw+yY_>yQ!qGRoLqqb%&JuLj5Ow(uxMsA- z&hc)w(ElLw!HsjPL4BX;k|iwT^hFMB2!@QQ{fepbP1T{WB6N_pNU~xV{7Rq*7|dd!6vfYrdt}n zuf0hYx~TnViThh$%RTIm!xF5%ZBFq@cH7G@IzImC{08smnMYrBBoh!?Oi53Kc)GzUuHY8s1c={N-YA_Rf<|)9(}KFZ|8g&&06!Y^utH z5oe1G`;535MjHJ~n%Z}f79V%qdQGAFb6TwEExY>h89^cTW3fAJjwV%Hm{;d2?eZ+APxjgv|HaLF+QZhnN3Mz~Uw_;fA;e;J zFHe>Gg>7MhVSCnJ>$QoRUqfPd!aXJVMG9CPBa?==bA`FiUE z%Wei{)ahDGJN7t#GNnFMWy{NvrOj&Y9&@CXE^-Xs>XZM(s;{V8@~GKgRyb#b-gz)z znV@U)Qx*ITZO-4J+HqfI#epz;tL(hRy}nCl%?^oW9~|jU%r3Bv#xYEtL)*Ieep44;a4l@ z-+y>pcsWJluxeEHy?rY5#WKee4DUvxyu+_Ba^NJzEd)&=3^@lQC zRgTfST1&94t0bJ4z(1q%Gcla@s=o9&=W74)iPZ@Q9Ig!J#7?rFxn?)EBT8%kUfvIW z&9-r@_csX3B$v^>@fizAo^e0aAVk4ftywO=gM6locn)s=Qx)Rdc6e)P(ARYn>k}9= zyBEm9ZVJT~lwiaBGFWHg(?O<+Bk#+XN zJr%b`nYZ1}2=dH7xNYsbjb1hSagl^^b0F&SI*e5%_>io=vzjKG$Zl}uQ;p{>`m9>b z)_UUGo83EKlnu!q3a`(bWjo6=#O~euRR%ZKb0rIGSrXuKd8zyT=ye3$jYQpZo}3NO zU6wtJ9;p8?9IZTyTW86dO!pm^9Zv632`C@v2!{W9~t9?R$&G3p2_R+o}(R z>eN+LEMKX&yNjUfNYtHaA)y>i|De@&_8gb+JL;zu`iy62wbF0rXNz7cBUBSFz~Z>L z`N(zKN5b!}m4sU=Mj5!)%?+D&*604rYduwi#Lsb@h`QDm2JNnG7C8+C&vITq={29j zmS=HbZuJxI2-&*~r@6Zr+|4GfMW61tO_poRx@Y{Ad52`-;;u!9yvrDuX4-EP+?T!NG!UrHQLKrou|Qf zW2xlYpjzF-UJYqq9+*22;^0EmRrFpt&^}mldjE$HwPJaFuNnKe!@^nYY^;}xvTd{Q zZ+hV#DxSPx`8?6M^vQ&|qm^7i!}=Rne@Zm55AJwJ*VsqUbtUSC#`OvcER={9I;!V0 z;CX6??Lv~Px2(#Yip+^V%xANbUNq?-Nfr%KNqEZTFz{HNuSA2&TVJua-&x4S!spzB7|En4F|-XnVIyTvwJ@m2C0XR#jSSe8(`jAh|? z;Kdyy!h$(Rvh2B@O><*Ev!JTkhF9*H*IKsYJF;58N{4ib>{p=tZ4Bjp$DOFV)Y_4h zo6ysxQ)&>kcSu<3WRr%~SKW@Tws1w6rM8={^@J8Yi!E?A>XD&4RJZ8EnK|K?<)1ht z+z$%V+{4yzrib9K2T`|eZA$B-?J7k&7wzWwJhyQ_nO9MhpuU+;`J|<%HqXX)9X&#ZFI>gTyE_6DXLeTXh z>fX4tKcH84w2w>5WxK_>TjJ;C9)9)IwLi>j&S`b=?*6A*ewSkG%2eJSoqnlvb>Nb5o$dYmT=rQ?KuHFiR!=vFuJdESSp`;`8uW&dZ3UiH4< z{rlXxLj8hnZ^-(5gN1H&e@{R8}vWyU4KcX&4Z>dms|6I$L6NR~J*?31U_^pZKzQ1m* zq~KR2ddA@ZOAd{}LiL7IJvR$PLNvpzx-Q>iP!f86Q1$u==RA2i;^*D|MBPP`?u%?T zH}Z8Cc)trja`dJ2QC&k_wKx znsZIAl9~O)`5Qpg-AZDAvNU@4Gmm=BOaXlvE6KRN4a^`2J!hFh9B<`;t)vG9r}DJJy>H-`!S`Hm&9Hjd;VzT zq+R;kYrfgeo9IuLd7pAWa8J2|{g`#ir;mm{l51Zr?OJJkSa71ZY1Vr7`QZ&Q1l=H_ zZu)|Gt=h{HRc2SK^Qt^|zbyJzYK?V3(|G#+180VUSW8FEW?Y|4>yI4K*S(OlEcQwN z*8QLNp60yt*~dO)U(Y_`z8*}}TaDv`=w6*@O7orWy-w#Z#M$BE}$Aw*rp;uz&UbsZZ%o0T8S z>a9CgqHuQGdQIgyOKey6R1Zd5mkX{wH}1kZ)ceNhm4%~P-s3(yQ*jOfxkV4m-}mG* z6Q8?7iMr>fUy=*oa-M;`>$SnS)x573Ew#ZVmw7blGY3~68;JTiyeCEH(Y*eW<54AV zS?&a%np+xnI@v7pfcnJ;$AVfO5%1T-h`N_0LT(Hy%xG?1875>iBi`t+oYA_aRsF-G zn>pq@dvMY~Fzh-xHb3n2uG0E63&Vmr{$1&EHcNN)(`|h8(P2+n6=B>q5p@q)`51F< zsEd9%VSe#Ue)-wf^&(RI&vg@qT=%@SFwtpkY~xn<2~WLxKp{rek^5@F)hC|T8Eqvl zd-v8QtGJ6N5p=_ex}AQrD~|8Jo}6x49!YYZue`eS#5+l=3)!9fZ$0?_q)uy}bbOJU zuE3^Omv8ocoY33stNe8rd8Eiqe*M+$S?5lO6Lcepx)b8n%>N<2;mF>Npg!=D70KvU3Do{P*EVp5fKWRjXMATR7TR zx4gXdKCPin%4VBx;SG@u5nil`pEn(7Wl-?CaOsVn$_W3W!wKO6AzfC2y<%fe*)0-` zy7J>K3A$T|{tnm%Uny&H^=*7ue0%Kz@o;^YJ4GHh=-zvXt2OR?8&DyeW3^kN_|41N zHwVW%)XxSF2?de{S053rz7VO~?P`hsCKsQd;lEG+;V*sn1}CLGOvgR!{gdkzq?i|6 zKl1L)`iJxH<-R>NWXb*3@yL_R*#p~iW>!gjtE(iPxmL`oT7 zi@bX<&-~8zZ58}quPJmo>}K1TO3;nQqJRvQh64uMrTvb&ceMnTu)LhcQxY2zq2S5C z825%g z(}ogGp~{u-q9w(oHcjS~knFVh4&F8uK6AW5DLrphv!UPkOc4oYft7ZPo>Zsk<*(%P zn|%3pOL1_d)krU9YXS{&BG-p!x!&PI6rJ@o2^`^oSgqZ)_7(ufE`Grz*>H z`+!n~1%2^rYW8Zc*(-PKiSQT6wpl$^7w#yxF}G{%ZTBzTCw$j`Is42G+Y1EU9Yo#2 z)oC4W?|3(p9hE9OQq%p42NJla3ykUVcFdd;Ccq)v=%KAIe`=poOk-nPWw&;)^rlqN zeU+XU1-{qiP0%Z(5OjAEbv?9q&zNyV*J-`_bNW@I1DE`Eh=t!_ebE-vaD~2p(`>Pv zyeB%(wZrr7jHa>5ijCG-HGJ)6n;Q@uI?1}N={IEYpWdjhaO_NHR^b8%ye*ZCQ|GJf}R!>ND}Y zWH(WFR>F7Rx%&IrwAxJH$*R2rt*%~VjOvk+Y$Y!4K{)y#tE4R55AM7eS7)sc zJT5Hr_$B%`2=M+8Pt^TvP!hAmaYglenfj#xTDyc+H!olBAZC6dbDpoG`AddIk67Ui zr&T_%&Nz5@=GmxJ)}0$ZRqO6MkiV30>>6~o46|1I|n{ackynoF=*rZ@)#%|`Kv`vfhZ`U+6 zX(vZ+V0PK@EvS9NC8=TJ{mx#ZZpgTYzz)UQ+JS8H)5m2ZC528xt1mYhYJ}cvj(E-) zzi)Y&cD`)3vXa@2p;J%J_Elc1nk3ZM7x)Pfg+!?AI- zwiy>@A9e~mk@$Jl=rZql4Fb&5$M+w*WZ2zV`cU}g8-C?bx}6+mQu|duzRi%|95A3X zql0*zPbTV;>{sntvHrpusXJ-fJ1^hnPt$l}d}i65w+;GBVmuAzB&=#uvpw*7L*)60 z(G~hS2?BdtjvnIE5MHSUbgZq8XSzBCdThcLMTcBP2ZDP7=%43cblQ}CrC&=ed%N?$c^(4%PRHCl#GtSo8 zxjVM67clF!qZ&s3K%X)|`nJicw#`4;zft)ZI!eAq>NcASlaTBYIq>BTdN0tl3t5H{FICjfO1MY4dWm zhE{Si$|c`=#us%)e8tA}iFb~Hlbf3BKKH)PmfIIf&`l%io@ut|0s`}u?megPxpV&W&t3nzb7qEGJgd9k zs(!or>+Y(q-kaSzv^*)3k$oZ+b4@8~z9|YK#zOtH2WsQ0$g$riNW%KQyyq!z5O^r; z=`HFjzXw}Y!k%a~a$C-5iqZSbcNMH;QSJD!V=&^Q)CI%bgI?RquU|0rQJRi5IUmVY zX`<7?f&Jb}GS>IvP~6!^+JWwZ@zUE$K5{Eu{O{mIV5X7>5#tsE^%&7VxJ3p zn^Kc^t+&sA)NrEAORzic5&M%_nXtb~9utQfSl{M>+C4*3p6_hAMNbjOeB$FQ4!=op zXy{o&xc|uOrnc0hNo5Az8)SrR$LzJ2Ok`&-*6(#Fdmu98Ul$qJp7?J*r&iM6-UwaB>-2}N4{~!13H?h87#Z01d!kg(%ZkzXeeq52e@Kmjp#oLdXvYj7n%v9))2k{69Y)>LM)-py+F}`V7 z-@7!u73s!<)d$LQJIfwyJQ>M-Qou5y_xu(^uED@3SE5JXi#Yh6rZy8!?cgq+s*rlN z>Sv)m@!?>~nX4z|goWlYzUf%sm-lq~48#Yb#$R0+QEN@Nj%vM_W%q{f+2)9nYt7My zQ?*^^U0qG6nP*oBWnAvfo91dvo8D5USO_04=Mi0!!H!!pu)g_U*q+yZknFQl3m)1F^LomKsSYK_88gb^&TCt|b#C|FCH=P^a2rXx}=6`qVOv!@r zghR-fH)$4W5iAkOw;19jL{Ch z5{eyXF`1Nt*BlMT*s zu=TEAw$m0!4(Ad3eT*@|)8k^?S4*R%X`4^4zOMF`=godjnTdtV>CKOtK1ENm>Z*x#F%W4i)D{m^Ds{@8 z;&qw$$bxMjZex8ts@uyfWp7sQDR4!`DYRv9e8)k(f}HXTnE2*lecfiv zcTKoxcGq&GIkxoNdH?H%yls?wOn>gsTz5IYQCPBEa?D-kpG}EQRWWsuW&+;)&IP`L zZ%4fjA3YPtTvdwk&ByxkJd~z(c+|#q*W=sr%cN4NxC`o;(vNf3{5sA(6{FgBexspp zQon=uQFD6u+l!0(OBHtYf?_A`(iOWb_%SLKG+=!1Vto~Vgv8mo=Q(BFxVibAXXas^ z`D8N zmq*!L{PzTn+BnCJk>m!2k9te%{Cc)L#2Q`J(>iD0@1WUBTj*rRm~@oVci9lGse{1Z~DAM{VAEF z$ptRTb7-r4IAN3@bo)wGdz11n{^Nw^aSpcn1W(ClCNaJRSl@vc2h9^Z*+$WE!@;?Z>#`0lm2DUh1#f0Y``F2Jlo#(ZiSD?mA&7krUWD~EkQb!9T%Y&3L^`JZYL*er>Vq&Ff%Q45r&G%Y zX7>GOo{%?RmB`bmv^S!eS>3s!ROEc4Xi1aP_hK>EtaQc=^xIkZ`>0~9@57q6>LUEi zT8w&^@=94kQs3LD3npaO-F?#cFd)4qDaK#pAP?7UM3Xf8y}eck1+&XoG=H`{xnEIAteY-8s zJh^_v|wlQ@|4?=#=*HJC%h6kK%4r$yEROqFwO|))Qd?e6HD+~9VGNFDhtd6=8 z`?cTSSNrgwW9h)4;DEdYt-K7-?54Hd8xIM!9t|;7%9F~c+9xgu0X|d}k zb9?ONfQm|-Tvb!#YEb{x><{dpLetL?i6@dpYd6<1GV_FZ&#}we5Yw**`Vjy(44r9 z2jg3b^<}YHR(wlJ=PJfJ%50@Ie?+$N@YVYcg5*v;`NT~%b&LAK`YqHYlg^tz3RVmE zO8so@+Ii4!ZF8?;Fm-0kLRUD(w+ibkYw#{+>gFAXseM09H7NFuoVhrh^CDn(bE&b( z`NogD@U80Mqbq#`%aZge{MVKWhcZLf(Z;Ef_28Z5ud1>YBn~A%XFIg7xi>-)*O& zls8G9RdSN?lBfd}v#z&?T#dpTIbGk>U|rQC<6%dBD5QVM5^ir02>5U}z3*~x_F)6^ z!tF}GuV|B#V0>$_zClr4CnsXha=dgHl^dcSTAn2$4MwYt(PKq>5(&{&S~t;6~@7H9ZYv~gdR9=*E9_;(?j=FG|0 z2Y4m?Gfr$g;P6yz;45>?=19}nt0XT67-`~!T8o=eTA#c za)0V}k+dF`kG8Fv-q_5I(zpLyEp}G&^MW09t2a-4tZzlIyMrZlTfFpG4a z&D5@(K6^l5^kQI5mx_MQ#x;W*M;k0MXJ*C6R$JO0WO!If9r>|m?>Pm5<XMdodz&|;yc~XnxnRGq(Tw%2mB^C3_|a?e?dx2v6AEhYSrT-v?5b5SVp!_s;%$2q zN)u#3o}nE-UcDjSbw8pJdhB{JdkGun3$h%)lmgC;W9r+2^>zL6*neO{=tcC1bGl93 z^3y@?zWZERH`>iMXG83U!j7!ZE4J*QYhB@|e(J}bp?<-)`KBk6Lxi)|)PmZuhwE>Q z?^CQVYf@O>tBpOKJLTo_4GS**qzH4oe9?_h<58p0RMXAtyH0#owUPZzu=(P^Lx#$uFKKf^t5<& zkJ#n5LQ^JZSIdjZ7an2;SK<@}m+oXn?OX}4U1gLw|0^%ZAN!p48P+$8+vjLygz))> z+s3=5q6vPB++(K8A&gogk-nSL_xRRyXz>Ykx(}&l_G9gHBVBKEZuYWjIx4dEIz>I! z5lo}Nj)&T?zDJ9b28OF+8ppOB>li2VGiER|l_(ZhVz=Qv-RAs2Is7S==6zAk?_zu9 zNc`l~)?CLZ`d2T74{xpolSS|~#nxcr`yA`rrpTEqFVbmumi6SP6OIBZ<*yF&c#3_E z;o2M3`|Fr^m(r=_v!25QZ61shBSXY*RidAN^}6Ts>(tnbR&i2!k{=k~cC4?#3w?$R zA?rsJ8<%$lE{Vw6D=TMv-060bqI`5x`wIV}Z&|LzJ)UGU zJ9I*3$Fr2+!x-NVtZ&fphOFykd~uP{^xljatxi_4FKu+Iug=;!#OwSL7T|jIa!2hr zwN>p^**X&6mQSS|rxj1#7>d|Y>ayo^rPr@x7~dCI-__mei}{hFp@nh_@veIqIQMF6 zIG($m{Kf7dVdMUHvYUA?l9DZ5%NQdl&a;nv;r!nI>E{$Joe1l4QJ{xcJp;CV=*0RS zJRiTkd8D1@X9nR5*Ih3vbp^O3>r~6wayM*vS2IphzKWY;$s{)~l)FOG{=zbh?rJ%1D_P*~W*4NMa#T(b?VfUfoQKI&#)0SWEb7bd;#WMMCr@FB1(K|PB z-OH1*`wFbtqb4TIcXltv;lBWZ$-?<=hDJtZOqEz>87BTj^iHFUXO zA3kjh&f3YCSstV47+!Y8iOk!i^P=7&5A#Kxw1|sW7R3R4~=5{hw)zA`8kQLM?G4Xv5Bq%Ap6L;|HmT(t|7$En zpFkxc;WW)i^@=^Ax3lv?XnpwVGq!sc7hZ(MX({z2)h5Afx1q8@e zbYpzGvA)l=UR`MWD&WLeIxXsu_G=sM+J$rD26mbyP7fb` z&?ksKoZwQ{n7-&LBFAe|lXcfSI<#9>kZ_|j(BOjIxdpQa1G2j?zHhO_~ zZ)G(fyDK!2r>q}EDRi*jhwx$fOT&FSQ55gOs?7rBo=9&$b0z)=Tl^iDeDyu;lsQE| zo@m#JFJtecda=IS4d^>&Klsjy1ue4v8qeGr-=;8OSA6$OC7!MrZRam%`%w zYHa5o`d91`ijg3tGHKhRe@=3p+~>@-T1 zpM7`Meb3kG4lC6T9UU*atPpV4VBA^d@{B~Kxc)vZ(-n=^LHBig%TBWvVto6tzW>5; zz&ot(zi=Edfc5q6WDmq=vKyI7rR+UTp8_zq!xqp08B8Ymw+y=~-tsCWN7 z&&Vco{U#4Vi}tI4=ugCslb4H64czW)JZnZH{BX9I{f5Y6jXu8qS+c$o$xr^*Z|=nS z4r6`i)CMjeUQVeJEkDXLO2assR#i}%xUq30STKOOR@N%v+*gI=obSW6QXaQ|vUnc! z8g*6q%yQUy#74MtThbe4RgCX@tnV!~(ZW3n;@#xu*@{*&eWt{MGy9$t1sttodRR_m zCR*618?tzwZQxP&9y!7rx?jvvUrJgyQc_%7JARqzpwpNp#`go(H%FDIM5IWyy^YtH z=5Be*H)V%c6p?|U<&`#sk`uye5scBPDCilvY(5K`_Wp(x$eE;EeymuE(bQJ zv$JyQis~`-{fPBtVviEZED&`)tvERv_tvI|CFE*CV*ef6xysqv@4r2tUQAHUPF5K; zQ!3M#o9&DW*HzM)9sK?5Q=PRM(sy8w2zWDp**gKLYQ0j^T*e3o?2hQ{{P!&tna_D z-T8v`{TH@7<5=H+VY~Ac>l-55nq%(BMdf_OolPvm^Ay8-sxE?N^39Nk&u`xqZYUK> zf4@f2e`<~UaYWSGK`uAPQTl^W`+g zcLMACqg~jkf2Cc_BdVe>rMEC&;aU-C(E7P}RrfEh?yO|O-`En1-m2ctk+@@|$ENPa z>dR|Q-uas0v`6q9x6qM6u)jV$clBLc{m|0%I``54-5T%kM|RcPekI z37x?BPGfzWO5R=HO%~AS5ORI4ym&hYanKEd=BG@}9frninbJ?PHM(xxV(T$JTigZ&Lr0+QoaR6l#6B=1Cp99{k7{rl4`{ z*q2?u$6#JwRL(t)TQ~XquQN;e;*9ExoIH_rQ_>$K8%R#R+pU$2@twu`er>mZdM9L* z$x~b6rK#-Q1f|&ZwV|~9qty5KqcoX0|6GNvxVzHOyLF^U3 z5qqMh`Od)XC%yDSCo0W@A5968ofq+Z)wrvAd)dMKlPe>>9^XHl@EeW9-bXE9ef3CL zFGWw^izQSRh%XG~TU-LfW z;_nEH44Y=!rsIaG?;_UMX7Eiwd`)cgH73>QtIybP$@23(B4H{ela^4?b|rjtjOKEA zy}Ptv2=f_b6`!1}SJl~8mT?|m-`cox7-l^Tz>ep?V|^P~3|@o=r0jik)nkoV-Y2i$ zZ`j((Hh4zGg=^o_uN7opG&mKY0kp z7B3~=BIZ1QPi{dyFK~H(3FjoM&27JyaGpbvTxQ`siIR2#*V+UL?~z?$B@|{eOX**@ zhdFM`SYO`fy1{pKKfd`UaboXgS@?WKYJZj(ht+zIc*aeJBc+CJ-CcVbII^jR zn}Tk&3J*q|6}U+%{v?92)xS3kwl?s{9T_)a>3)fgY{ve(i9P+o4ykXSFz7ERB1uI?5Kh$fg} zb}}N%pmt!qi>dEA*4HL@hcfSQ!9i!Lc!xtnvqvrzJf2#~^}2e;A#ozN@PYq6)-Kg# zqsP0L-)fECbz_LIwP@(RN-3p=p5qTx0|5Tk!Fixk2|a>m`xk6UY6PjHy{Z zcCcl!2z)C$k^YM0ZRr`N7yA@-1bugTwR3x|-#8+5a%V%(#b)%fa-fEWE@3p}PlK(xCm>VbMcDXj%O~$$~JE;#4xpcZ4UHG0&PwYI` zW+?oXkt2G?bCo&jjANsRQw>Ir7ESgS_?qt8u~zRiOEuSX?;@tYgjnBtP2vOPr*9ju ziq@>CKfIn#*LO2qVZ30c2{W1C=Fpc(yM)7q7Dwv3I-DpA{nAbroM^rOeCTG#Os}TU zJ5G^)>~mW5n>qMIvQoZO9Ypf^VfZZf*Y{JyN7v|+lAG^b_3v<_J(Xo{{NVAlqEO1> zpwofLUG$=ZwIjI?R#X`-Mbdw4GuEkcqQ~|_#8}^LyJx>ej@@q;nUT}B@mRPU@VMaS zsV{t|(<)+UA7wCXzh-93DYZkHkFLwQcClqGZ%I0;gOg_TrKpRTRqi__?Ek5u&oc0d zBq!{9LVIG^_0AH3G)tTMTN*9;wKLhj_c5lsZGL0q?co$^cI=)d3JlZO^}BwIFQ!^3 zqQylrgDy$^`M#=W4d=iM|M@W~*0(omdO)~yVc!=9?pJi@X|L_LA%A0Ko~C$?N_{}w zIAAAJ)Rmw!r;f4Pe|ix%`}TS`(XrT*GKVbpX*3#b7y3Dj{rrs#>nm?_XyIFxQIFaZ zSMQW|cCdGH?!&3&525-Lk~P&*2QLYRxp_x+d%I4DQ}i6U$V!@?PJ4F$1$HxkjSyL{ zXFAyDJLFj3y^sArY_}#-l9iE^Xfb>e9kfBtCoFGMV@5*oGP75{`G?YQdUMLS@ptd9 zlB!)K%Ev{*J%WngAF3C=Q9w!@#f^yr`i?w4kwgh!=a954@>%0{e#*b$aaURKC2v!Y z`ov?Z+|+2pn=OyOTI`|vtdlcNn*4?^MN9VklkD63Ot?s|dR#J{GKs)GKcmF@t_#hL z4N0^U9}J2*d{@PBB4U|cxw}|(k|fAk@7rO`%G^q$cS1fME%wdZpW4OdC^C2qnq^Cr zo_F*%9ZF!#FTm873hVnJJnPsDlcf2R@b{{z71P2oY4`PJuJL|x+kVJ)QuB3Q-LJhV zW96z&fdtv?-c_72B}q=EBy1`~yLovjFJG3&jyI{XzOM^x?t2^7S4vT}{wyO2Hj^r^ zD@j&U-}bG=aeDQ}T&ZUag(D%o62ofO+YbkXPTXDyFSk=I)=+tO;+vL_Mw6M3IFvbkHJ^2zzGUXuLtCt{mR zlK1D6B~jN-3ltd%tzzp-gY|9BI9=A`*m~m%1K(lZq{VHAZ|0kk3i2G-&TXpoDHHGY;4o5&pm>GA^jf5S?Ox?93g1`5-9Ooy@E*M&RN=DOCKiPr( zo(&z=cgF`Ff}I=fO(8c6#1=krmkZz57FtQ>I2#-hwz2H(u3X@C=|xZ3ZOW-gsRoAI zA@?Njh6+e{|5m*uZ+KguR9qQTUwW)>>%<9X-nNl^OQuSrh*MAU&ixASdzsR5yCESt zP3_P}dNaCZYFPWPNg~e08XNl6oy!<2||1*;?6vELX2nPZbEG zYeg46_Z4e*oZ(M)G^uMl&4ay9MSU|qkq|M}9Mt4rJnigqPWg(X{z*&Uo=~4>ULVBU z=~GRFwL9yz_y2sP&%-a^@1f1XX7x*4LoA%gbCpp?opw(M?H+7DkDmSE6N&6x7Sq)q z8@un`*>>oAX4x=Z>}&Q5>LZ(SQtle>lec^9c_1PgoIY)T%1`sY^)vHJYuh##M)I9x zLgLubS5F@Gr6kYeZEdtu@;L){Gu!IA!iL1jnuE^yBKwZ9Ip@$C1C zKV$W&Wc9+cptsdJTCsqbU9nI=MZ%HZ#`}+$;^gkricoI}&2V)Eadn-;n`hKn`$=dY(vn-4+E7td{ z{;?NHim?$(rsP~N;+^VguI7-d*hU@IDoY@2Hz_~uMZbG7zCWmw$UWz>Bas(89UZj^tMgKjwI6S^_^S}OyAu- z3bu6^Tu=O5Z|iliSLwY=vre{HW{1Bj+lT&*f#8Ezt8^m6Cj&I|Z+v_A@KM^s8f-g> zt`U49nLg{X?(-=1(dPl8cfw&_cUlUqrFp$$jH{y;2MAn5^zyDvatbZmnsg1{6-eJLYJWFK6vXr&T!v?|;yn%C}9SWY_9p&c7P z&GIfm)!cd1)KNe-&E?pa4;+IG#NzrV+L(kT#)o;tR!>>gi(|*fTv*@Tsg#nb1T4q( zRqTb#lDk~mb;zhCJM}5VUhS5+yg3+4{ZrNb$K1OQ*Gie`KK=|H%xk4IrAm*!!1*-n zJ#}#+_P&H0>ziTV-TByHAS6wbLx3Xv#l+EOZflL_hFT3IFG?eq-cm;Eg-3 z#T(D=%S@-9ALQc~%&I?>wBG_g3%~w0d-;aGfy8$I(h){|C5e^m7b}R=Fute{#V3-a zzAGWuD-R_zsIqdnt3~P(Uw1lh@XYr#qXCm$?6w`MVvgEbZ}nq4esOj!MLmD_*r7*S zF~#j|@ZPUo&*&eYU&HwFVSQ7=@Bfx@@xQv>SRYsnxL*Ss9f9UrygG+_ zf85tUddA>k=Iq=ey<&`HMbp8tYC+W>XEeQu>ZZFqFuwd)-^8_NPC+WxMpdRtF;qWZ z%lmTiT%6or=x~qO^`+#*t0dM=>RkfQPrrK*p23nJJ^V~Nl+>@oSa@f(Ph=`DRaO(m z7kw6oPb7)&qt@$`3S-1~wlPyYnG9-bE>UQm6G(YT9cA=WeR@RBG&rpwWA^xK)1Vz0 zFBVQ~2LIwC{~|>ct?;6Y_F*XU!k@qBJKXq0vVTU9+ev$(nAhH&^X#lvm1Gxxfx(SM z#h6xyR&|CdT7gEh(!_SXBl$Bd5{W98a!P1oT%7t8dw&a?`mHR)puQdNy9eugdxvJ6 zcQAd*5=HM<)9pu1@8?Wsgi>mfy;f9bvtIJ-6?pso%5pIQxa1Ug&lA1#rlp_Tp<17n|AlLPHMezy1sJ%hJAW&RCG@@!G*APj$*IWJekcy z+jeMJdNu_*zN*h-{Pf->z}+#`{)cNmzccp{Onn8gz9U5sX@fMU$4;vmm2XHMNqt16 z+o!5}VU+Ug;b;7N?({#keJSFtnYiL0ElTxCIA`s){jKMf#92Brnx5KksDEl;e9_nl zpGboJdrseRuyY+!J zR;O)zJT&);jb82}lnEHa_zGct<4rm4U)aB2$bVsvx33n7;Hk%(&u@?DQjyxW7Y1Hm z@8dcxQz{&5)UITb^xpiirMyG$_TLrjbPtWR?E>Z!2(g*EBn*K{rgYd0(uL^N9S&a5L?~f_YS!`nkYW zyB@nh{WaqLSe&r0H8-)+@FZUnSZ}xg>k}Y31$Tzw0Ih3k--a)w&y+ApgC1-g&~I(v6N%p78JWy}Vx{wJ4@6FLv^yEyKKxS5m|o73 zlGE+f_`nsqu1k;oNlA%$_GPEf&_|dDtjM1(*>3iz#_yA|laYgg<;>wspOh$C z$GRA^wzPY3*ze29V0~-M;^b|XGF_%$*vH&`7JsGM`saWbbNpyzQluld-WAF4=Q1C6 zWjySjuIVLx-)=uc;N|Lkx&5VDhO<|hpyqk(^L1IQFUg~QdS)k0z2;Ktc8>^E*_80D z6bUx@7qRTznV=n0>DwP#M!Y7lRMI1H(!kA+M4yy&^}FjG$zLT?#KGh&1LRnKhqYt@?q4Z zu(3rm%=IaAF}cJOJL23_8Hx-K&WZ9uvv=VyBp$Hq4Sc%H;$5D5S|_C{QKf_9x4$O) zTa2$f*7uft);{gbHBtUDNzvSEN)HZwC`@seI6{%cUot^!@#(ZhLML-|;i(c90lkE; z&m+mxUAIRR1$|M-e|M$3v08ls1!-FJ)4z36q)+=lqJGs`nVLqv-WAtUu8GQXw24yIirYc``5;yGg* z_-krj6XUCd^<@&I)c+wXB-7_P=oAvd6Ubj)p66<(H5StGb5=X?vCZyp`3LJlFS!-FT zPjj5(^l*ebork~Nu&G%RQI_|uw>6T#LcU$@`LZ*!a)?w_B+A@2i4l#7@#n(=I%y)Fy0r93Gj);d%Av@`o{a>QrSvPzE7-q`*>oUqff3~5?@RAh!2$a zZMoexGCC(^lyxvzGyCX^@Z78Ng_k^L`jiz&$jk{uR58A29-m0ApYIi;?zx@$zKSG*J$KqOVBTle)W3+|SEh4ZLvTr*v%@ILM`bU^=P9>?CC}0~Z1^~-t(S@E z)?Uf0FIQpjAJnnFH<*JPEus@g$nC?MD-E3;FIq$am;yKmbpk^G%~9*u$U^+oq;_(byRi`mXH%B!Pc2M-awBn$g? zYia)Z*Mi#t=I%mK+I30;4dMJfS`JfZ__Ldp9a}$on*B<{hU5wo4~vS2|IayuH?Dl6SP0`2VGdx*h!z~FsA;pUF=T$`TfQRHrf|A z1cGIGyN&G{%T7DI^5@XT_@ZkXpGdCE-*dW1T+(KHTG3i2dF6>@%cH7YUzA1!a)zsq zpX7Ty{Cj)(TtNNI2^HuCZBqH?x!E)}&_woM*m&=nwt2bnIh`-?fA6PER(br5r0xPAtt( zlPq>&e9=8NK9STHSCbVlrpG^3I~OY;wA}7KANy)fuZih0{nv!dFyTR;$G6`6lAJAZ zdnvCVBjDO*>7(eMrfsj>*^w_M!Mr+%@kKGgCz5gV9qma0-ztNXluqk%-M-gAuw6Id z^`)Z{>yHVmr$vtuKRs_nzAVFflzdHe{rLQ?_ru@kCyrIG+;vQh$&q}Gy`MzS+VP1* zZanr#Np{kmmECu49+GlQ)T4YU^^<}&jg5V!c(HHzmk{wMIV!f(YVJgf+4;2M$Ie^vWev_<^CM0Z z=Pz|lWD%WiU8@-;coH!BcAucKu5g!+Vej6wf~EbxFuuB2UpMv-#+L&cZm@qmPpYdt zr7XZoGO3oZucJpyz|inWV|19ob{!i3u6FOE%Uyh53IfynzCJ(5e|n|HMAg1x`9%Q6 zR}bsEo9B=ePsdT29a-dWV!mpa6Ivt~rSON=WjyrzL7h8v+Md+*C{OW5tE8~5Vx&}iaUR$u#8QS4qN-a{nlpd$Lu{Xc*q~c^BP5rUQ1s6 zSYrPT<9i(IJM`f6NDt!_>5Fr(n#9NHJtt<2b8oz#Ou4Uq72}JZrQs7v-8jo- zvU)lLLSgy2%Lf?WW5qr5-YPEZ&UeH$A-lEyZ@4xj5Ztg_p#LjWs3- zCpM=>?F)%mZrpDWr+H6Tefyz%ec|=p?E^DArLg^*A=a0bCj2zpG2^apzqTn^7h2dQ zj>zsvwLbjOTiX4mhu8%k!2uii%IEIz)cu)h6k1Y^U(o%B){ zwCN{fOu{|$i_@nwN^{1T7fgLMSe)YG`Hv}`JZk(piQa&&pIhC^qvv*-f9t!`(kIQA zvKz72G5RhVK9Lw-i|tXOQa3-=qsltDqj;bC?+~Z3<9X7ew&ENn^6mT2851=a?7h1q zcHYeBRc-%ZjJAvJk8Pu2fr-ohmo$urG4(aU`l?L^lPC6x&M7>Tzed%G4f)@xpteDG6=?KgH&4&2L5E|I`Se^BqCZx@cc{)|$N%$j<3HH#t*n0{0w~U*r?%RpebP*KOt!Ekkbh!RY7esxxll7nW zJ;V#9TYdL`>BF^Ex&I#{zyaIR{0H|Gs2$u&TM^ibz*YpdBCr*Ktq5#IU@HP!5!i~r zRs^;puoZ!=2y8`QD*{^)*oweb1hyiu6@je?Y(-!z0$UN-iojL`wj!_76!#Q5o-}OMh1CHLufi(Ed8v-r>CG=hbv@RWR7YUHi`zla5df*Kb zAfb0npmJ#cyO971z0Uz@@UzhbJxG9r-kE^bMKO7c1W4#mB5ga+iv&pMT?I(n0rVjO z5_-=7(slyn=<1}>I!5;x9@Byb;<1`ez5u9d&)3{-I6sOtZG#*$U!)bOnjTe?b;xv1l z#s|xvaGC>7$XIL#5K?SkbmIPLFyDhLR6!}2&zJBur~2bRC$G-sT)7nZ-_w7>6; zBOnlf~r}^MCNmyRQX}&m33YNd)wDUMk8kT?HG(Vgs1Is^g z+69~@3(HG5%^#=9!SXUry9gRO$M*rha9SX)+RkKh2XiPOSynhIJ*nUF5yG*y@<#Ay*Y z?I37GI4u&Vsewj})1q+NA<)pfl2E#W)6`*}6sP@t4-EkU{QM;W8BUAFl{*X?IZlhg zX_}x>;IvqrrUe=$PP>NFj)2w%pmZHH6nkypJ`y0s!D**KI4uvSnS(}z)ADhe1!yEV?JiEU1g!w( zQM!lItYBUYr`^YC)}W#D2_;k>&7%Geolhtg;xt>BN9Qa`ML5k4=J{~i-*>XXZ?l4i ze-};(uABpC?6`6daGE1%g#b#WIL!&>QQXkE^bn_=h51R?H+0@S!fDPh9|IaXZ_03* z3(R-HJWAy_?HtS};^I<)(_BGI!fBN_%?)X|b*pfiJ80d#UCjrwcU zKcoH_^}ndUMg1%4Pp`v9t^qrMod7ey0;d)y z0)QYO1PB8nfG8jahyxOUBp?My12TXtAP4LN_5<>O0ze250mJ|aKnjontpD0dxUv;0T}v90Jq<4L}J{1`Ys< z03(3f^}E0upd07`-U7WqAJ7lH0|tOWUx`gd;=zc zNni??24;X+U=ElE7JxMK#-i26d* z_o2QH^=+sxLw#2p6ukmm2Eu?)0JQ_?8b{Z(JKzC$0$zYO-~;#qy8+a;ptfWepbO{$ z`oI;4<5j>PxCmSTd;xdB4R8URf#bjl;3S|290oK2CSW^o1ibD8sINqQBkBuLpN9G{ zV*vGAsGmap66%Lgzk~W2)UTj^1oa!JpFsTr>IYD}kJ|Zq*mu-cqqZEi-KecbZ8N%e zL+vqYe^Gne0o(2bUIF1iAm9&N1oi>~z#(8CAO}Q4odW<5z#K3D3PDHh>S@?6YD-bu ziQ398&0 zcnqNazzIP82kPTcABpZ|Bms2abOk{7ccDNCfbK<&fC~V+f3*Pg0VQA$AOh$Dw16qV z3!r;*bkFVvXaf5I8GsXD1ZaR4unRANA|L_w1@(!yfOwckeIe@mPQmgU;1kS`0KGs5 zkP7SpY#~n-H~_o{&I0HjhZ^#B!1M+n2*d%`f$ac2Ug9{+vYT3~F!1 z0d$?R18e{*zyj<9P``-!NI3P-p-0WfpT3hGrZfOKfcjlhfCQifC;%z|J)zhJQ)++? zpvA!m)9nB=zz^^N=-fry=LNU{P5|HbBTq3v6hP;%Fo4cqbRMI&23>1=0Ce3UP#JX1 zNdr=V3?K`j>jYgd=(@pf#}Sqt06RbxKruq=s{m;KYyfM(3a|vs022U}K`}(zF$RnP z4FJ_w4LAs>1BU=?Jq=;m05}dD1M~r1KnFMqXakx6TJJD`-@hX;uLU44J>Udz5;r{! z(^G&ca0W03EC5t5RBu}V?T0FW>Wy@?f2b`%^Jf7k+`KAG@%xYFk&ZmjJlYP*L;H-@ z_X79pcdtYq*LLlD{z@Ov0V4eve z0xke(TfsmO5C{YSNb?6S0w_+OfIgrXcniD+-T<$Fmp~`b0ki|pfi~b7&6 z72q~-3&;VIfq39L5DA0>mjJZSVE|eW%_H#hmvPGxm^@TBv^`V?Z3C5w0+1hmeWc-+ zkvFPaG=TR-(-;6>9x6c#WWSbmPvpJFIqgj)}-kB>W=e}K_TG4l^`^XRyv za%I3H+&q4pXt^AxRp6$TxGBD#|9%_Ta~tgwc7L(!Aa8suk&gNlq@iu&i%#|y2~1SA0Xb@BB=#}R)mp=}^gc~lnpV~;b^(Y24? z7QQUL9w;B32l#Cu9e<9XynnPF)&pA(9j6xnS|7Wg_bk1>k(5Jnq>`F;TH z%RAh305?S%o)0kp9ze(9KRUM9A3!n_5puB|1;+@iYfBA2B3Zr#RHuq z`11qbkKnh1Kj;5_+&{xQD865C({bDsX%oOVzzR?W zLS<1oRbUxd0)7HNfbYN}umH>hbHFSx155)`0BTE7Isx;9z%O7GSOL%&$QU>d90T+K zG~PN4XaH#ZqX3}sRWOv7hN%=F0idz7C?E`=u?-pvaR4j;Gl0fOXiUTepm7-*8_@x1 ze6|fB0;mD>JOVwJ*aZJ|;5V=Vkb;JuTMz@NEFpk)08R1p=s5-&2U7xQjK~1&1kkqF z09F8vP6q_rL-qDkW1XIWwRA@By^ke}Dce z`EMUU+dvsc7^c^~XDVhqId4coXf7!xBPRRz3D7pk`5M@xeyG=K5prb3B*i3PY~|(R zK@Ro2Z#n5y-O8VJWW?YyM6Dq!E}(y|8nn*j?6>#s$}M;PtRpQZ1!G6iKWh>EG&>fv?$sd#InsZR0(@)2)7jO| zTdYEF8`GjWHRM3t(4j+Z6BD?3is$;!bw>>Saf9Riw-uv;ob25pBEpyLtpBX@CkA_o z{zkO8&SEA|BRh|XFh~-P0@PXta;RaQegz?spw0s~VI4`RfixUS$U$e-?OgR6Ea}=@ zunwG~XdOMsp@*FD3_6`BvzA1#4(KSy9Jiei6Giiw=_^Z+16x6LbGLGKgM&@bCCEPX zO)G62mjlPt$J0ghtecZ-tOwtyC7~rLfr)Bo6(vjvUHC&%n`{ zI6HW4ytHbg8giuJI)$7C+&T=bttl+8_xC}L?BBZCx!SndI=MQ8$0i$$UXHKXj*jV{ zE7;pp26Z?D3ie~~QY*p_{n=C4S7_Tv{;Kl?mjFmn9e>Z_0TONyMS`p#3d*qe z0?M%-cyJ0H2qHQ=)4Mw`JF`sB?CuaGt71f=pavBcBSF!Kq9EQ!L;@awh>Af0CEzWJ zMo~Nh`F>UJ^>k0qyzXJ$@1O5*C7JH7SM}=EtEyM;z5*Obu9qDyYN7o4m8VpE(Ydx+ z4zz_j%yrUqhAt@PB@4`(UtL(iUFEXOh9Dl1>*)*uJ-U zyPP3|NwEt($AB?{^!&%17yokaj5u-I3{z|(P5b_j&3n2EtGziNYBhTH`>sWXS ziY>{0(tQXZEK$1;IaKLG01+<4GZ9KnTt6^z>~-xwdT<)@q4u<>$dm5*s*sjiifQuq zp7je7cTagU2%P@FL5n_JLjKWaV7SAPBhCe+uwNlbJD`Pp36$r_oqGc-H*78hggAg6 zTn!x3-k)B*de^7>57SJDme6#P!Ou_4`F8xoKm9*k$eHuMJuE>?GvZ zQ2ykI;mw!MWDeL)V^z^eyt2wuI=9Vx*L>7Yr9>}NhA{d{S~T9T6NKi z$4XkPpGNIA$)E`H13)B**=89y>(DS#3w1z2jN5r-&^}QFUsZBaaqbj~}@R4iG$j1fv!h8 zaL`b@d-M3=rT?bZnbp8^FCfJANYC}pUlHH?p-HV;7bU*;u{Cc$zGWV@KNMSnTDon| zl*XOztE3b29Mx55NUNorHl1?l!YWW>Ys~j#^oa-^N;3QFLbC0QzKT6XI&X&GQTyxk zUJkN%De09E4jhc7M>*rS!lviomt@_!#hpbHJME>&8!a$(S<-pqJ`?KnaZsb!-{?_7 zuVE$Ba4Sj*kEAY7Mrx(Rftt7Unqxc7z#D4_Q_HBM+&ZhdR<{_6@}Q*My9ryk_OP3K zZ##7x^}tF+=&g>tdjp5`y3d(!P3UzXaXNF&;kw%UEBZ{Z?IKVkzi`R9SCoG_@}`xb zM$ra*Z{}8}1fW=?Iz$$9^!l>E+@J3tuPh@J=$qG%NNwYHuYdj6cY~={AgQItuxxYS zARJ*7Pw}NsEau zGN-%H#M{ST*nY>HJ03wv^ZTJkr|fSxx$dYfOJP6YP3;fP$`$?X@8@pm^ZCYw-?3H| z=fn413<&k-R1tJE-{xc|FRV^@FrK^s71 zg4})TsE^te{t+A)IA;KYA~g)zKd|i?3-8=yLIQx`U&DYGy6x%h zzYTpe!l9yGD(o0o4LYpPTP9=^ATY>=!F{WGe%$}c z*(T&GKu!eY`^rA;rk{01Z-(TPp>{rANT;Ls^GS!*6hhX>havfZ5YF22A1`>dUF*wD zYU3qN-mxbR46VxlgMg54}SQMR~2JS$l&^VKoG(;j9zoZ?(v^=8*k=w zFCcKt4LAJj@pl$Ka>-F9&T2rYJO%F#e#{eny9-0mW6AgI1O%1WP`UoDHHW|dC_Fjk zLmV8^OGF*Fw|MKJw?109!_22WAV&db*{;YP9ZuM@*re7Q5SUQI+;2ZP{jt*zebB@? z2M{!M4PU&|_Ng0hzJI@oqXB~8xS>p2`}!rme+aHwZV8#sL;bG(=A3bd-v{lb)~p1p z4*;RKcji6EEDzLwox^&~y{UzOkcND}=Dhi}lb)Sy;ye#XA3)wb_maC?d*>h~XKJvy zj{zaM^?Yg48NNgAohl));6tGvr12L7I)C$B-{Pwn0((SyKoH=fU-InOGq<01D?`|T z`U67o+vKs41y^tFah93SIe<{jRrcI=)lDbvq_GVeBZkpkF7sK_FnGr+WsgJS4c?{$ zLjAd3=l{@d+5`WIn~>RnP)YZ8T>HU4XYII6LLi+703qF(yR7?9myLd!`XzEKdJQ1N zL8q48OD6Tb@f3+uQ0&<*A?Me+O{u}N1|GQ+*(1Y5t24E zpR@F~ucBW-4>%u4r#B!Zoi7f3a>6%FB^W2R(L6udTgIoUMS6mE3wo zvwKe6a@r^ff!zKL2wB#y&8zk_e>sQ|O_mNIU3-gm?nm#E4}v#V(>M~vNT{CzK#1#R zi*~l}a8Z>g4|9D6AjI_)ZDj?uCH0L zynUiU;y|l1wiuxYqda&%0YG2jZ+hE&Vb7<$(vQ|@5LmETvUKlCyws-IR73W?z z=Nhx5>U>(ELrfm&gXs;66M5sK+2E+DsjXhE*Xok0HBnvCCs7`hh=|Y7QEck6NqLR{zY&!dHEJ__ROW*uu9_)*QTxTB7RmsBup2D>P*Gjpsdl z)9UM6{4xzu=cDGWX=R|+Dm4dDFR!6)crVdm_u7Y!e)E5qtkvy8W8}8DpRk4Yw~soy zM`WSVEi9sd@oKrLTR=5$YHDg6b-bgNbz}5R9ii+)y;7Uiy6Bre zLr&ZOglUaxt{YR*MQGJ2hJD%l%+9}E`O+dYpTU>(k zD^Wyz_sj=gn|1t*aw%)nbYp5;&6`>Vjj{UjNS#hIYL8vn@ci{>tY`_YF&IEWxtfE< zK-3addkS@%)tHj1Ye5~8t4o?;o=L8vQkO@qJL-JYIE{(Y)YSg_95ih_dNSr+sUQ5) z++Lq+!7eLIYdi}O>dzHMmpwJ==ee6rNMoeam{?3L>zM<@NLG8_ErAW^x2H8`)ZcDo zRMUK*h@MKHSouoy+M6$6YCPu9n36_8je4OSe5;?|zpu-7bDU32P2HDK%iu-i(+>F* zowly1;^uz;0oQV-OiIZ*4)SA)e^^yO!B5Kk6NOOhKMn{l1SH?1#ge!d6^QPr&a50(}H%zb}7&bPJj1v9!;d%mXi@s062O&cq#OWL%xpw6dh+Y+@V zs{N?ie!er~54&6}D7bzcCz)0X3TCS@POvXKlD`0e1BAdj(oZnk~@r5`bbSN^J_L3K?2-|rPPEeH11 z>7u_t;%VBp@z>bjY0dVpvA@%dz^^T!(~9W~KK>WXWBgBfzQ&9r{r@vsq>fP3ZI;@H zsH0AGZ8vQ^s-9<3x9IAUs=02=h}o~Pm{Z?*!Uz#P4IkI%^;R1ej7MyVeHwHSM#ep> z3~9`MXZ7C8Uw1VtPDS)-m!E2ve z_`x%P&`1f^inW)Jne$d|=-%d-9wy{C3Ay-p`#$RU`(@a7XzcMUkdWqsTkn{2@1T4M z!R{NMKN1aN%;w#F^8(K-`tVv+!1i1mB2vndToy_ zV{aQv9LSXkBY;CY#J+iX>k*|FkD_xU=-e-qClIWtAe>L@Yd7C8@;W+aj!u*SwFxqx z;E1V5=G}Z9#*r8Y5I-QDK<%Yg-+u5@*B7n;gxXU;62vn8*1z=3_oK=l;n@mi%~J=Q zBY<_O-zn`(de=r^8sWmiqE@{lDpP-Gy5v*I13)2N3EV{@7lddZ75V z+qtBW9QL1%6T1iW=PrEk;bv{A7I1_M$?Y^ix&UYA>}|0Xqu0@1kzyP(2N_HRq#YpI z%+Kng6L#JY2yL6i+Po=%P|bBdY(lru-L8I>PJ$|-E$p5cAjHAo(KU%~*Q_1{9LN)r zE1Cxg?O!;hV8jK-T)9J>n8UJOCi8ir@10vuz3}Maz=6KgNkh*AaujeL?b3b3iyeD5 zmk{LRn^H^FM|Pe>d*MhAfU_CY=q!Wt zW`>^IzG5YDfU|FChnQklGeIK$STq>c=3Ln4Ebpej)82m>aqR##(w(_~dGx~lSMUje zGM{e&q5Yb7-hTYwM*Zo2Ix7sP6Hz{NuxCd=K6yBC)A(J}_Axc=pQh6oYjD9JPSZVV z*p$xC&88D(28vqH^l5P|n(+Li=(|r_uk5V>LWhBXnx@BN!I18$Kk1)cXRKNi284S2 zfOI%tjGT6P<)$OvyJk6drh;qUS$7;DRHucZmEW#=y{ZxrI@klXU4c_iyzv@On~#HS zj(L2n4v0MCrT{o3w?F^k*)#sSzYXn7B^=~a8H$wqz(K#iJ=O2@!rrvUhW55&UGN~_ zkd>^NkiW0x^-s(r2)ITq(4C1#hqotX%>K)lU(0RQD!)I67kPyMJu^<2?^G zV;uGrlYxUxuniX-bIu#x|Fsg@3*J};A+46}zNkg7QRj}lWDX!$i%QbD8aPy^;U5S7 zFlx#;8pRlwqJ)QPwvot#B|1Cxse?ZwTU?kx1F`` zZsLGy4qQKefw1kT%I@Ac!t>mBfRJS&pMa*-c!Rp<-JY-Ynsv?>WlW7VWFv4$L+YRY zuK!`DoJ+bxT2+dZB9+p4A2`Ip%2$7X^XZij^^*C3gHI)7z^&f-$Njwn$(kezJy7GQ zA?eg+N@}|<60)A~!k)txzW*h5s-vU@x1WwDlc5a>3{DUHfaKo^8qR@jE zJDmF6Wg~B14+w08%tWERsD+7_2+O)??E2BZc8|Rb9I9Rk!pU)cl&nwSNGPv{S_y5YW-kB*FE|eJ*RL+gZ^TIAkTouzDQR8q)%vHx}*K z{O}XqmolV~nwhCuf?e!^PkZd$7dw*L5<2?~Tt|b|Q6Jjc2Y#3y`fl!s%Oo}F4@es; z#^12#mnHtK9^$Osi9cp{+ z`p+MqdD+NmCI@vmX|*PSvmh3}yYa*swU{#kA^uZSQ{y~4S(LQ8&#~o8=a-M6F-W0R zUtA_?Vd~)dv!}haooXAW{19&$VV|{{}Z}o9&&tA}l{DC}kF(Ys6UDObD`%~kKRe7O6Z|W}`czfKSBan~WlRvRs z*lF33I~JVsLJNwx$g&`Vx~ibR3R2%tJ$K(dW4^(f62s<#x>iq>`q#eWx1QhO^DQRM z$$qg{zU61*yA54*{ZE_^Q~MAQYO_Y?tzO(^-QPO_A|uGJ0HGFR*x&vB*G~MFc2ARz zf`clb?u9*6{%L#FGp#S)wvKU_+LHm1Px-Xt2bcY(?EpZeKR6tWkq>#};-#C;-Fx>( ze8wlYS&B9o_47O6P;JZ_y1DD{O|P6SseyxA0OviyI|-oeJ3%5t+5>{ryZ#MF))9{ zb6a1NQq{Q#n{7Uw0dSi9Svrr#`dF#xF7>{RHKevW=|0^c>jq9+xo{XS%mV? zZdTNsIu6NL9`5PQ2Q{j>G0Wbl`*KScig(Cm<5{Atqo)Hx zweZCc@Dr5gSX3hI3yx_dtatm z&PmV#`a8Q?a4_Ngzs&fzZ%&m7$=!@@4*nY67Qd-?Z0lNetrqP!tRBZuhkc>*Dd4Ug zf|GiaN1YEak2+^MF&##Xzg0hXS`wXqW2f?9IFG)yegB?8d%8_~CZ=PHA820sR_>MK zDn|T3=jM}aW(_FWkW=60fc=D7;P<1`a8F*bb=wJBa&GAj*KrimFW&NayA^N!cIHsL z<6px~+n&DTw+pZ9G#oEfKVLrBqQkW6kAA)s?^G+Fj9d5elx;`U*-ud4KSJQ&@{Z2=`lbwt{ef-Ag>VflmNceyw1}6?50yzH`*Rz>lCB;GfC zwqy10D*v?ZTD+4+Tu^brq?WTDTYV$m=`4`n-+9WGPgjq+Z@H|e!DlpMIpeM~oIPKV ztPji4^9=We^`JMZRciGC4Y#F-eAPa$FW{>|h3cBWDw2C*G#<|F5w5Aujn@PayyTW8 z6XxlGsXcOo6}gE>Jh#plj^&2nop5w~E&#dc&4nv9{lwg|SfWPL^Y~m`WEG1hF*Wh~;4 zg!06z7fh7t@fs}(PNJ1s9^lnzki0dKNT?kCAYNS#-JPQQ<50N5l9Gaf@YC|_Y4C}@ zn;xqQdg(;rqC)rry~G>0p^sipTFw~KECTAS~ z4jRTI*r4;@39&33DGzCREGozwzgiv%Mm`!CK|N9(iPj(<@K$Ise^n@=>mdjRf{lb7 z%3_?zj?9fmFS$TBrs=#w;Lwkk1~~Fv3Yo$W5L4bk0Xe#5X)hwE*gtvMM-wY_8H12S zU6n6ZS1Fzy1Yu1E%GOsyL!ttMyL5-9Qs;*|!Hz{ps{ z3;!0^9BR#y3Pdb#>`&adPP$3pCZAd4ZlaR6S^!TznU*~zuE)G^=2}A#Jf~LvgrV3@)?-aadfUaTN?y?+ZU5_e-s{8conTa7WJW_ zL@Tc8Bq1-FYo9~WBvA`_+){!gE?u}wk_KY(*|c4Mq#BK%7Vx5}(|px@#{xHV4xE^Y zK+}BTiZ60gba{(|ff*==RnaXDF2%6%33S^RkfCZuRq+|($r3q~BQ+sNrhZ_GZhRTn z2LRi6gwjxB=&Up;)eq#9cQ2jy;6}lsOC$|bv)FU6Bpk{v4mhQZ`Cc3^#`MYIfax+{ z0E12yi99V#*ApRN3I(TYG6tk3iaR^raxLcTSK^REoet{QFf6XFAj;x6X&Oq8$11!7 zytSZAF{%TR)Px|I`hi#xKH1TMCMU8PiKo zfIBdiiVCJuKfv7G-Hj;=;F~WTM!D4;PwxYbe_?g*+9oa`0g8CwT=HcVx+top;*F9T zSDUzDW>h2)Nl`3V8C|>LLQ9-@4qWj7rJ~_mXA?{5C;&C(9Y#uK>P&&}kpL$D0z<}R zF&L}YxGl)b8tI@d8B&8}hOg{z+?rdOxF?SA!?oxpIB~%WVem~W?Dz*#v2|aC23w&^ zFC3V+qyi1g8+A5ZYmIx1ls9$yv%?Vggb|K-f>5%^$I?9{RLd(|DN%5)XTH%4i2REj z>GB3(R766dNFDl?fnXGUT1*^9>J#1y^h;6uwGL8CO$frNA4uh0wKv&T13mdH4A-SJ zcD9*7YDtI#T$tlRNZB11B}(?rvvNV|UO%XrLjc@(iau;jB36Y9&gvr3sd@fT5Jz4U z4H`%gYU{;SA(43Uqh1s8#v)U-a0=9+mQvDziIjKNJ2$;C_>lt}pdp`tJrFnekbKL^ zedSsx55qDs++W2fcTdHXAez2fbg3$FGoZ9W8Y)H<=0nGwf-#KDVR$%N-W&fQEsiQm+`BLj73A66$msH8HEsOWtz$`C~?(&ylr*NQ_9SKXo?T zS~Zg*3SquL<8Vn0NrJfGIaONUf^mf0K}8OE%PVC-OFqGvi-hJnU?uY)K^pln3vTUE z1{p~jHpz+5jtb_K_|R0wVp8dAOE5rS=KYstwFDSD^XXDY~_!N+G3z zbu7zqDLnU9fXBaP)(+xI>M*d9&!}(=Q@IYzh*4ovRg2L|I#*7H$PpPq!MR}Kb^)(j zU(=clTw7l$pun}G2hRlz8;q1>i77n-i;R5(VkitnxYbTZcMc*Mzr%FgJA9&j0twkr zQ3TA@MxkA4F$QfNs$O2g1Z??)EVBr#49b+N@eEA&L6MZEjj*jv9Vobuh{2=tWFB&!R(o`)*#%K=Qq2%_YplAOCy6)mnZMs1v^#e?nhFi%b;%F$)W%gD(Rfr`O zXj$ICjC;jYlhdl!VY}|ptr4Z9#5X`sdC$sODo0e^d!Q*Z639F`qM8M2N(2R58A~A& zp_>RvxB_8GwRV@;R$U#ooJxk95~ZBioc} zMAj+q+~0ExDaz6#ZO{=RH)$A+MnTB5$_j%yV%VU-G7-q#V+VQLlM<73LnCBE*NnM2 zaQloS(8biFz?TehSnKyyYazO+${$VCz%|g2zaGZb(|i||1B-O`73k7WRwA=R)j+en zQGJ)VHcBQ>gq>uNvvwPlu#f&=mdQne#`Rsu%XrKxCwYYz(BzYeg?_OXbrY(Y2qerG zs1z#Rg=b3z0@?Bg_vk(ikkkXhHFN@FobH$zC$K@q)HpftBxV;1OG+KIDwzfZlF!f( zX;2QBPA20%@|8L#kIXT*F5>BYc4lRCkR!esHm(7WC)IUtRNI9^Q$;j0ngo zg#Zoy8pFy40;WB}dQBwi)P+s5lS~ZC$!AcdZW~+@3>{P3JY9`2081boI2NHJ=*Son z(Ie3Tl`@LS(3ykl)XO6Y2O74NASO__9d>Ic(wGH$+BZ;=ql^x0SX+O$z+K)JhP>nx z#}{r+msfKEhkp?pP{<2OIq;OOQ$Uw(h+YKG!G}|^xWzG|AgNCW;m$|r?01!3v* z9j4^~!7>uN66+CfBpC3geUDj^VnMtK$G{#2FoIalg8qDM5Pf^hcLdA?)xkg@q}BPL zVdZfefWfd|pawV5$C5NGNwoSJTKIzQLM#}LXQWaQ(&~dWzT>ab{8ROKwaJ->}mF9*y?D6Ov%rKkv2VvrSMdsv*11XCuy7+H61v9~%Nit)N9E3e#j zOs1!4rDXk>a^=rv?kO5Y9?%X?QGj|x13W1NzI2RpRVC1E4yUl2{0zmC&pbkfn!$7` zErY_65<|h22^3V*DKUGJ3@_R7l1U=Y2}4tpOj6k6Eyq3%d(I57(%=u0SL^p+m?!6; zAvMr>%ylG;(p3ja;BS*}riqZ^!<@WW+f^B>%8(#wJd%HlMu}x+>EBs=8AxH6)Q{C- zqDqKwG6t#_!;n*8nM8zyy!wpgXQUPcy~bd(ATQKR=0&S&xS>hPniWX&jSVv5QzVd( zvar`e8r&**24c;g4=S&FtEp@@^~sPTjesHRWJNJjikSI}sQMJfF`qRchyh+F z*KY`iOi-kT?`Qhr4c=dNQw_pCbO3~}jAD`{E9znZ3Sj^(PXxs*VmZl|Ju@(8|HK@+ zHQ)yGTrv`qQA&CS1=(jyNhW(^G-;Hr1T82=29{6h`C!+JFBTGrTWo zrF{cmv>T6tOeq51V+i@60X5o|EHcZ0h3qnXWkICNoQBFY-S4Y$ijWN!g?=Y73>ld; z4occ7o))xH-Vs{5PlXzMr8jsWm;Mpl(V7UCaMh}j>=%t<@=LlHX>oASuX(j-6oX8D zbeFJwBZ&QB2uZT2KqqwM>;yJ>$s!-FyQKFw%9Q-TeQ(!+Zz&trW?RDwikUuxN1L9b znlV`!OQbc)2<;JgdxPO1uYJQNJBoC(C|YJj5?)4%CQDh+PU9A2)4nl9xBix)tXvVP z?Kla}sF8FCS2N~kExrOP*VB3^!Rmn1u(FZ8s6rXakc>E(k?&j(%z|WRB9=If<1SFM ze`4OVm5c@1(92Yk##d&Od#XmMSg0m`78Ps5FvM@tI4IW5@Q(;3V?mRK!Kl?Ui+C{$ zUel3~OZrDMw=8H{3d+HBs-*eTLD5sGBAC$Z-do zakKTP>AiK(N&k3IH0>h;plJUDdfCiAif(jr=)oYwVFU%-*_M(iSVuJsO4e^CPli4E ztK#9Q2sk(u24!eiO$Im_KwbGPFdK~ zQe_biEmeW0Q)p*NLjKr|8jVrfM?OmPvzS1#%^F--$1`Y=TDJ6T!xSKA`+^2Bdumoq5Rs5A)&PCiG^~`_y0CO=W<#ljaSquw zBbY3wJ_h|j7VgU{ljG->v2Ng7-jIFP3a1)T2SuSw5VM#D;F%U8jgZH+_DPpBkv4^A zr!FCl;@#+e&=MP_oBVLF{3_=#Kv@Z+Oz7fCYe&$UI19tICbwsm)qsm3a7$%5L1tr{+fU8L20YkoGL4DIUbhOwS;!D8**a%Rj6Fz>a1w)K z0t~@A!Z85q$7v9bX>>i}2*>6XFIHAyO+?IbVU6MUG8NQHgS9GsRMeV;1(?OCNHR;_ zTZHWg)ZiN{RxtNU?Qj;MZjy{8^0J`vdT$D+#4w;9^-~`7Kj)1qHaxIq`+}(xxeCfb z-!ajIgHwPk9U`zA{y1tS;MSfnGr9E^xk7xqjcS<6K}a%*5#QD7<+GyapL zjIb}+%VFI#km5D8>`bQ(Rnk=@RhPpRaonG`4hzpCbq+#xz(T3gNkL3m$1Q4JNnq(E zI5_8;$+}>{RI?eT8UV4@aI)BjjaW>dH{KoO`ve#w&ea z8BU+$2_c?_F37jN7uw#je={Y0DIeL1MM|NmFhB6gCx>BscQtJi;2NkMfY`pehRW~v zVWFls6f7^(>(FeYf#-)hpYF7nClN-m5@BdMZF6#NYcpjA>`b3Q&)vD0#Q+uag%{1c zZTF^g-GN0vyc@`EemGTtz)bysJl)HWliq-c|L27uZo_D12o}BVi;UKRR8srt>FUVV1 zP~;+F+8Aj4EVv{m;yOoQA!fr$mNrQT5<~#*8ckbBTKEGw%bV#dNQ1?Zpw13dqyZK2 z0282V0azgN3vKYl)JY5n`RE}!W`F`yy(|q%``+qnY9v4=j{1#vto7y1iFH*GlAdnN z$Mcdy8wjga<8Yh7YKpTl%|=E7@0nMj_al#677thYYN#uM0}QaTJAmaV5$v|-ql@$! zUtL%%QIk8t;hKpv$uQh_jV7OKgL;s*`r+VXoqI)m$U2UI^o4k9C%T)_gz(;U#4L5a z@QDx5(yDRNb#*+7e>9(n=>tAOIf!#L1Df2No_YiW`UA15NIb^7Ot4EN6bS&aALvx# z?1OL+2TJ;@c&R!z5>U&5%;Y&k;E`7P)p+UHPCoI4k9Tk|05cJ3Je@Nm4uqf$Q*Iq3 zGb_^7WWLz;Y07%npzPj&g1)VE3ejj!P?TDM8Nm1?=EI5g7PzaEu=whpiP6Bw|zwD;?x! zCIV&i1u}Ox3Eb6T$&NTn`2fb;cR*VG3@BJ%5iGgy`pn9ifpAvonB!!Kg%KON@x!@= zl8HD6PR=2on|2r%LIBNpWZQ7Fu~bJ6?9>k&JiCQjK%wSBAalb(euS|Af-|OX4jN-7 z5+o!B_;(M4Eo~AZn=MpUHjcR)G5RPT;I`cdE|bk6@=HEvWx*r{Tt-89;>n9mp4f`d zb<2LZg3e;baDu}*$~XlR2L?&MP0uJOPUUdxba1tZ_FU#KTX$~e+_2@gNE4kDntOMpv1S(%Tx(F7Rcf%9-HwsAuXu#87`i*9{S z@MWR5pyfL<$deV(HK%*ZRLy6do!R?G#_~Rft;wF2^z z9b#Erx5Ikq*2}eZAqbn!Vlz7xpyEDAATMbFwtV6Wa%*$srDKf6OT8grd5#QxV$?^g z>YS9=OvEG%jI3G!aWMzuAp+KLR3c7+rGQ-wtxVDD9V#kASBxofSJT=-gYe|3^bXXL zIf6#=nG3;|AuemmoiQVqFOtjWCptPL-+`vJ<7l$R{YW}GMl>~=E>d!I}+KH9g&CROSFfPdh4dapR!p$HpU2LFQ-XI9vI7W4j!_>=h0|fP8>6|-W zoy#``(TIfk<{)oQ4f6cU%J1sc=)NIf@V!Hf;Z_hEm%z1sF{u~;9z}3qJ0+ckAme2v zU2Zkt?0{@Mvd3`qR(ydXkoXt%FBemD_ZvN6x{1M<@WVYB5vM&;sR^kRDVVJ9ZnDLA z2;a&CY~wL2rL^!1RLh%bBFsKii>@DV3Jg=ykz}aY1|C-}%T#<0<6swudNmUz2@wYT zt9zdr*Bnt%rqm)D!agZB5N;DPc9z6POcmfV7Q+EMFh=_*dH!2GKuYfO_{QB+;L3P} zIH*~2o?pns8fawtjQHD~548|LRSg8MSuDuNJUj@(Xb4kA3{i*f(WQO#kr))?kc=)4 zXSIw_Vs|V~nR7BSD&I6&&S|7a?kDlcTfTrKpMd6m?zEM4$(G<=zOXoX;5j8_%m+E~ zic25%)H^LLwgO5)^G;n5bJQWG{;>GD^jk?>f+) zI!tXFiv}^<7p@66`>_ph!-LT&6Fl|}iq==^r$Z&UkT$GHxwsOEJ%oc8ozRe53K{2LrKwr|S+ngaa za>(#Ct0vUS2gq1ofiD9zF5sjlt9h;$_*N`mMLr>GT1F{m*>XX z507_0F;pU2ZY~37mN$rlrr)FPBNzB~dOZEWMQOfGadF<+EJ^*An-~8Tg(Y No}n=~`9J9Qe*qis;fVkM literal 0 HcmV?d00001 diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index c4e070763b..444f203a04 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -107,9 +107,10 @@ function convertUnderlyingAssets(coin){ // sSUI if(coin === SCALLOP_sSUI) return ADDRESSES.sui.SUI // sbETH - if(coin === SCALLOP_sSB_ETH) return ADDRESSES.sui.WETH + if(coin === SCALLOP_sSB_ETH) return ADDRESSES.sui.ETH // sSCA if(coin === SCALLOP_sSCA) return SCA_ADDRESS + return coin } @@ -168,7 +169,6 @@ async function tvl(api) { /// Since we're unable to fetch the price of Scallop's sCOIN, we'll regard sCOIN as underlying assets const coin = convertUnderlyingAssets(coin_address) - api.add(coin, bucket.fields.collateral_vault); } diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 4fac20d486..c7f16e8294 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1418,7 +1418,8 @@ "USDC_BNB": "0x909cba62ce96d54de25bec9502de5ca7b4f28901747bbf96b76c2e63ec5f1cba::coin::COIN", "BUCK": "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", "SUI": "0x2::sui::SUI", - "USDC_CIRCLE": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC" + "USDC_CIRCLE": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + "ETH": "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH" }, "grove": { "WGRV": "0xE85f139488c689038028a3EB8fC38dcC29D4C340" From a4c0462cd11f461e9c57f7334800c0ace3cff7a6 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:47:47 +0100 Subject: [PATCH 1324/1768] Feat: Hyperliquid_Spot (#12570) --- projects/hyperliquid-spot/index.js | 38 ++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/projects/hyperliquid-spot/index.js b/projects/hyperliquid-spot/index.js index ce0db61f47..fd4550ff1d 100644 --- a/projects/hyperliquid-spot/index.js +++ b/projects/hyperliquid-spot/index.js @@ -1,12 +1,40 @@ -const { post } = require('../helper/http') +const ADDRESSES = require('../helper/coreAssets.json') +const axios = require('axios') -async function tvl(api) { - let data= await post('https://api.hyperliquid.xyz/info', {"type":"tvlBreakdown"}) - data = data.find(i => i.protocol === "Hyperliquid Spot DEX") - data.tokens.forEach(i => api.addCGToken('tether', +i.usdcValue)) +const USDC = ADDRESSES.ethereum.USDC +const API_URL = 'https://api.hyperliquid.xyz/info' + +const assetsInfos = async () => { + const payload = { "type": "spotMetaAndAssetCtxs" } + const { data } = await axios.post(API_URL, payload) + + return data[0].tokens.map((token) => { + const ctxToken = data[1].find((item) => item.coin.replace("@", "") == token.index); + return { ...token, ...ctxToken }; + }); +} + +const tvl = async (api) => { + const assets = await assetsInfos() + const payload = { "type": "spotClearinghouseState", "user": "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF" } + const { data } = await axios.post(API_URL, payload) + + const tokens = data.balances.map((token) => { + const tokenHold = assets.find((item) => item.index == token.token) + return { ...token, ...tokenHold } + }) + + const totalBalance = tokens.reduce((sum, token) => { + const total = parseFloat(token.hold || 0); + const markPx = parseFloat(token.markPx || 0); + return sum + (total * markPx); + }, 0); + + return api.add(USDC, totalBalance * 1e6, { skipChain: true }) } module.exports = { + methodology: 'TVL represents assets locked in limit order on the spot order book', misrepresentedTokens: true, hyperliquid: { tvl } } \ No newline at end of file From 8e51816c53a87dfc6e51268c606baf76808f1175 Mon Sep 17 00:00:00 2001 From: Beem Date: Thu, 5 Dec 2024 16:01:34 +0000 Subject: [PATCH 1325/1768] Radix: RadLock (Token Locker) (#12551) --- projects/radlock/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 projects/radlock/index.js diff --git a/projects/radlock/index.js b/projects/radlock/index.js new file mode 100644 index 0000000000..582eddf4ba --- /dev/null +++ b/projects/radlock/index.js @@ -0,0 +1,13 @@ +const { get } = require('../helper/http') + +async function tvl(api) { + const tokensLockedInXrdList = await get('https://api.radlock.io/token/locked?format=list&lpOnly=true') + return { + 'radix': tokensLockedInXrdList.reduce((acc, token) => acc + +token.xrd, 0) + } +} + +module.exports = { + timetravel: false, + radixdlt: { tvl } +} From c49f1f5700a356aa7a9f4a43acf86826d92e807c Mon Sep 17 00:00:00 2001 From: tyler-tsai Date: Thu, 5 Dec 2024 11:03:40 -0500 Subject: [PATCH 1326/1768] feat: add PSM TVL and new collaterals (#12474) Co-authored-by: Tyler Tsai --- projects/helio-money/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index 94e1253e48..a523494260 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -89,9 +89,25 @@ module.exports = { "0x26c5e01524d2E6280A48F2c50fF6De7e52E9611C", "0xf8Ca8D2B59A97125751af1069d4a5C4F7eB7A677", ], + //solvBTC.BBNB + ["0x1346b618dC92810EC74163e4c27004c921D446a5","0x03DB750d6212C6a0BCa9258E8cB7cf46dfD63067"], + + // USDT +["0x55d398326f99059ff775485246999027b3197955", "0xAd406CcF75f9E6216fA4349635B0cD77D0059b1f"], + + //FDUSD + ["0xc5f0f7b66764f6ec8c8dff7ba683102295e16409","0x2202a491752Fee0E616F06A89E2eF416E2Fcd7e9"], + + + + // vUSDT, PSM - LSR + // ["0x55d398326f99059ff775485246999027b3197955", "0x5763DDeB60c82684F3D0098aEa5076C0Da972ec7"], + ["0xfd5840cd36d94d7229439859c0112a4185bc0255","0xf76D9cFD08dF91491680313B1A5b44307129CDa9"] ], }), pool2, staking: staking('0xd0C380D31DB43CD291E2bbE2Da2fD6dc877b87b3','0xFceB31A79F71AC9CBDCF853519c1b12D379EdC46') }, }; + +// execute with `node test.js projects/helio-money` \ No newline at end of file From 73c8b729596d85494cad1f68d44126eab917be45 Mon Sep 17 00:00:00 2001 From: krishnafractol <137801527+krishnafractol@users.noreply.github.com> Date: Fri, 6 Dec 2024 02:46:10 +0530 Subject: [PATCH 1327/1768] Defi Listing - Upshift Updated Vault Addresses (#12573) Co-authored-by: krishna7860 --- projects/upshift/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/upshift/index.js b/projects/upshift/index.js index 7dd6c00a84..982cb10fab 100644 --- a/projects/upshift/index.js +++ b/projects/upshift/index.js @@ -1,6 +1,6 @@ const { sumERC4626VaultsExport } = require('../helper/erc4626') const config = { - ethereum: ["0xB7858b66dFA38b9Cb74d00421316116A7851c273", "0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42", "0x18a5a3D575F34e5eBa92ac99B0976dBe26f9F869", "0xEBac5e50003d4B17Be422ff9775043cD61002f7f"], + ethereum: ["0xB7858b66dFA38b9Cb74d00421316116A7851c273", "0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42", "0x18a5a3D575F34e5eBa92ac99B0976dBe26f9F869", "0xEBac5e50003d4B17Be422ff9775043cD61002f7f", "0xd684AF965b1c17D628ee0d77cae94259c41260F4"], avax: ["0x3408b22d8895753C9A3e14e4222E981d4E9A599E"], base: ["0x4e2D90f0307A93b54ACA31dc606F93FE6b9132d2"] } From 807d15caf167f8446714b7d5226b1333c7e48597 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 6 Dec 2024 04:46:59 +0000 Subject: [PATCH 1328/1768] add lisk and fraxtal --- projects/velodrome-v2/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/velodrome-v2/index.js b/projects/velodrome-v2/index.js index eba9afb904..1edd9132b8 100644 --- a/projects/velodrome-v2/index.js +++ b/projects/velodrome-v2/index.js @@ -20,6 +20,18 @@ module.exports = { allPairs: 'function allPools(uint256) view returns (address)', }, { useDefaultCoreAssets: true, hasStablePools: true, permitFailure: true, }), }, + lisk: { + tvl: uniTvlExport("0x31832f2a97Fd20664D76Cc421207669b55CE4BC0", undefined, undefined, { + allPairsLength: 'uint256:allPoolsLength', + allPairs: 'function allPools(uint256) view returns (address)', + }, { useDefaultCoreAssets: true, hasStablePools: true, permitFailure: true, }), + }, + fraxtal: { + tvl: uniTvlExport("0x31832f2a97Fd20664D76Cc421207669b55CE4BC0", undefined, undefined, { + allPairsLength: 'uint256:allPoolsLength', + allPairs: 'function allPools(uint256) view returns (address)', + }, { useDefaultCoreAssets: true, hasStablePools: true, permitFailure: true, }), + }, hallmarks: [ [1687465883, "v2 Migration on OP Mainnet"], // https://twitter.com/VelodromeFi/status/1671979216039202816 ] From 761a9dd4e12ec648ea4932b85cf3cf22a91b75eb Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 6 Dec 2024 05:02:45 +0000 Subject: [PATCH 1329/1768] add lisk and fraxtal and mode --- projects/velodrome-CL/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/velodrome-CL/index.js b/projects/velodrome-CL/index.js index f2b1fc3dc2..4747c74e65 100644 --- a/projects/velodrome-CL/index.js +++ b/projects/velodrome-CL/index.js @@ -1,7 +1,12 @@ +const factory = require('../helper/abis/uniswap.js') const {getUniTVL} = require('../helper/unknownTokens.js') const config = { optimism: { factory: '0x548118C7E0B865C2CfA94D15EC86B666468ac758'}, + lisk: { factory: '0x04625B046C69577EfC40e6c0Bb83CDBAfab5a55F'}, + fraxtal: { factory: '0x04625B046C69577EfC40e6c0Bb83CDBAfab5a55F'}, + //bob: { factory: '0x04625B046C69577EfC40e6c0Bb83CDBAfab5a55F'}, + mode: { factory: '0x04625B046C69577EfC40e6c0Bb83CDBAfab5a55F'} } Object.keys(config).forEach(chain => { From 9b2f953cfd2c1fae099e46b856f28a4ea2ae70e3 Mon Sep 17 00:00:00 2001 From: 0xLight <109751758+0xLightt@users.noreply.github.com> Date: Fri, 6 Dec 2024 08:48:41 +0000 Subject: [PATCH 1330/1768] Hermes V2 - Maia V2 - TALOS (#12574) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/hermes-v2/index.js | 13 +++++++++++++ projects/hermes/abi.json | 7 ------- projects/maia-dao/api.js | 5 ++++- 3 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 projects/hermes-v2/index.js delete mode 100644 projects/hermes/abi.json diff --git a/projects/hermes-v2/index.js b/projects/hermes-v2/index.js new file mode 100644 index 0000000000..2ebf35d431 --- /dev/null +++ b/projects/hermes-v2/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const { staking } = require('../helper/staking'); + +const stakerAddress = '0x54De3b7b5D1993Db4B2a93C897b5272FBd60e99E' + +module.exports = { + doublecounted: true, + methodology: 'The sum of All staked Uniswap V3 NFTs and burnt Hermes for staked TVL.', + arbitrum: { + tvl: sumTokensExport({ owner: stakerAddress, resolveUniV3: true}), + staking: staking('0x3A0000000000E1007cEb00351F65a1806eCd937C', '0x45940000009600102A1c002F0097C4A500fa00AB'), + }, +}; diff --git a/projects/hermes/abi.json b/projects/hermes/abi.json deleted file mode 100644 index f1669f797d..0000000000 --- a/projects/hermes/abi.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "poolInfo": "function poolInfo(uint256) view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accIrisPerShare, uint16 depositFeeBP, uint256 lpSupply)", - "balance": "uint256:balance", - "balanceof": "function balanceOf(address) view returns (uint256)", - "token0": "address:token0", - "token1": "address:token1" -} \ No newline at end of file diff --git a/projects/maia-dao/api.js b/projects/maia-dao/api.js index 55e19de8f5..71364f8166 100644 --- a/projects/maia-dao/api.js +++ b/projects/maia-dao/api.js @@ -4,5 +4,8 @@ module.exports = { metis: { tvl: () => 0, staking: staking('0xD7a586CE5250bEfaB2cc2239F7226B9602536E6A', '0x72c232D56542Ba082592DEE7C77b1C6CFA758BCD') - } + }, + arbitrum: { + staking: staking('0x000000f0C01c6200354f240000b7003668B4D080', '0x00000000ea00F3F4000e7Ed5Ed91965b19f1009B'), // v2 + }, } \ No newline at end of file From 3c6c7e8b2f4f2263f48eb660afc833dc7923b1ef Mon Sep 17 00:00:00 2001 From: Yuyin <106600353+yuyin-zhang@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:50:43 +1100 Subject: [PATCH 1331/1768] Add Agdex Adapter (#12572) Co-authored-by: liuxieric123 --- projects/agdex/index.js | 82 +++++++++++++++++++++++++++++++++++++++++ projects/helper/http.js | 1 + 2 files changed, 83 insertions(+) create mode 100644 projects/agdex/index.js diff --git a/projects/agdex/index.js b/projects/agdex/index.js new file mode 100644 index 0000000000..fe7f5b05ad --- /dev/null +++ b/projects/agdex/index.js @@ -0,0 +1,82 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { function_view } = require("../helper/chain/aptos"); + +const primary_fungible_asset_balance = "0x1::primary_fungible_store::balance" +const AGDEX = + "0xfa69897532f069bc0806868eaeec3328727d90c0cec710a17dde327e0bfab44f"; +const lzUSDC = + ADDRESSES.aptos.USDC_2; +const USDT = + ADDRESSES.aptos.USDT_2; +const APT = + ADDRESSES.aptos.APT; +const BTC = + ADDRESSES.aptos.CELER_WBTC; +const ETH = + ADDRESSES.aptos.CELER_ETH; + +const usdc_resource_account = "0x19fb80bd79fa8f7538404af85196396973e3fbbda1503495598172c8813f7ca5"; +const usdc_metadata = "0x2b3be0a97a73c87ff62cbdd36837a9fb5bbd1d7f06a73b7ed62ec15c5326c1b8"; + +const usdt_resource_account = "0xbb3c1b88599c563062e2b08fe3a92ab048d700f9aa44617c680d59a4aa69b23f"; +const usdt_metadata = "0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b"; + +const eth_resource_account = "0x38bca0c288df1e13d9a30d33c4ce8ee778333c52bd4e730b49c6c9379be39b10"; +const eth_metadata = "0xae02f68520afd221a5cd6fda6f5500afedab8d0a2e19a916d6d8bc2b36e758db"; + +const btc_resource_account = "0x70d303ed5dbfbae1f5ac76d50d5073f69a7115dfdfa737e82bb7c3c9364b3d17"; +const btc_metadata = "0xa64d2d6f5e26daf6a3552f51d4110343b1a8c8046d0a9e72fa4086a337f3236c"; + +const apt_resource_account = "0x8afc7aaa4616c0defbe655f3928a72ff849ef9a6889178f1c18c7c3ad006ebf7"; +const apt_metadata = "0xa"; + +async function tvl(api) { + const usdc_value = + await function_view({ + "functionStr": primary_fungible_asset_balance, + "type_arguments": ["0x1::fungible_asset::Metadata"], + "args": [usdc_resource_account, usdc_metadata] + }); + api.add(lzUSDC, usdc_value); + + const usdt_value = + await function_view({ + "functionStr": primary_fungible_asset_balance, + "type_arguments": ["0x1::fungible_asset::Metadata"], + "args": [usdt_resource_account, usdt_metadata] + }); + api.add(lzUSDC, usdc_value); + + const eth_value = + await function_view({ + "functionStr": primary_fungible_asset_balance, + "type_arguments": ["0x1::fungible_asset::Metadata"], + "args": [eth_resource_account, eth_metadata] + }); + api.add(lzUSDC, eth_value); + + const btc_value = + await function_view({ + "functionStr": primary_fungible_asset_balance, + "type_arguments": ["0x1::fungible_asset::Metadata"], + "args": [btc_resource_account, btc_metadata] + }); + api.add(lzUSDC, btc_value); + + const apt_value = + await function_view({ + "functionStr": primary_fungible_asset_balance, + "type_arguments": ["0x1::fungible_asset::Metadata"], + "args": [apt_resource_account, apt_metadata] + }); + api.add(lzUSDC, usdc_value); + api.add(BTC, btc_value); + api.add(ETH, eth_value); + api.add(USDT, usdt_value); + api.add(APT, apt_value); +} + +module.exports = { + timetravel: false, + aptos: { tvl }, +}; diff --git a/projects/helper/http.js b/projects/helper/http.js index e682d45ac4..2f9d9d4852 100644 --- a/projects/helper/http.js +++ b/projects/helper/http.js @@ -44,6 +44,7 @@ async function post(endpoint, body, options) { return data } catch (e) { sdk.log(e.message) + console.log(e) throw new Error(`Failed to post ${endpoint}`) } } From f3ccfaf26005cc9837ac5b709ad66118a363245a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 6 Dec 2024 09:55:29 +0100 Subject: [PATCH 1332/1768] remove log messages --- projects/2pi/index.js | 1 - projects/atrix.js | 279 +-------------------------- projects/blum/index.js | 1 - projects/cellana/index.js | 3 +- projects/helper/http.js | 1 - projects/hub3-ee/index.js | 73 +------ projects/lifinity-v2/index.js | 1 - projects/limitless/index.js | 1 - projects/liquix/index.js | 1 - projects/lyra-v2/index.js | 1 - projects/mira-ly/index.js | 1 - projects/openeden-tbill/index.js | 1 - projects/platypus-finance/index.js | 1 - projects/shadeprotocol-lend/index.js | 1 - projects/solar-studios/index.js | 1 - projects/tangible/index.js | 1 - projects/zombie-network/index.js | 1 - 17 files changed, 4 insertions(+), 365 deletions(-) diff --git a/projects/2pi/index.js b/projects/2pi/index.js index 81f8967c28..4ce6d7fc0c 100644 --- a/projects/2pi/index.js +++ b/projects/2pi/index.js @@ -27,7 +27,6 @@ const tvl = async (api) => { tokens.push(res[i][j].want) } } - console.log(res, api.chain) const bals = await api.multiCall({ abi: archimedesAbi.balance, calls}) api.add(tokens, bals) } diff --git a/projects/atrix.js b/projects/atrix.js index b1a9202997..fcb5249d9d 100644 --- a/projects/atrix.js +++ b/projects/atrix.js @@ -1,29 +1,7 @@ -const { sumTokens2, getConnection , getProvider} = require('./helper/solana') -// const { getConfig } = require('./helper/cache') -// const { PublicKey, } = require("@solana/web3.js"); -// const { TokenAmountLayout, } = require("./helper/utils/solana/layouts/raydium-layout"); -// const { Program } = require('@project-serum/anchor'); +const { sumTokens2, } = require('./helper/solana') async function tvl() { - // previously we were incorrectly counting all tokens in serum pools as atrix tvl return sumTokens2({ owner: '3uTzTX5GBSfbW7eM9R9k95H7Txe32Qw3Z25MtyD2dzwC', }) -/* const connection = getConnection() - const provider = getProvider() - const program = new Program(idl, 'HvwYjjzPbXWpykgVZhqvvfeeaSraQVnTiQibofaFw9M7', provider) - - const acc = await program.account.poolAccount.all() - const tokenAccounts = acc.map(({ account:i}) => [i.poolCoinAccount, i.poolPcAccount, ]).flat() - - console.log(tokenAccounts, tokenAccounts.length) - return sumTokens2({ tokenAccounts }) - return {} - const auth = 'CmiPgGfWeteicRisWRuJzn7L649zWpw9Qya8g3ey9cZt' - - console.time('raydium: ammV4Tvl fetching vault balances') - const allPoolVaultAmount = await connection.getProgramAccounts(new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'), { filters: [{ dataSize: 165 }, { memcmp: { offset: 32, bytes: auth } }], dataSlice: { offset: 64, length: TokenAmountLayout.span } }) - console.timeEnd('raydium: ammV4Tvl fetching vault balances') - console.log(allPoolVaultAmount.length, 'fetched vault amounts') - return {} */ } @@ -34,257 +12,4 @@ module.exports = { [1665521360, "Mango Markets Hack"], [1667865600, "FTX collapse"] ], -} -/* -const idl = { - "version": "0.0.0", - "name": "atrix", - "instructions": [], - "accounts": [ - { - "name": "ProtocolAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "bump", - "type": "u8" - }, - { - "name": "lpFeeNumerator", - "type": "u16" - }, - { - "name": "protocolFeeNumerator", - "type": "u16" - }, - { - "name": "feeDenominator", - "type": "u16" - }, - { - "name": "maxCancelPerIx", - "type": "u8" - }, - { - "name": "maxPlacePerIx", - "type": "u8" - }, - { - "name": "maxPlacePostLiq", - "type": "u8" - }, - { - "name": "orderProportionNumerators", - "type": { - "array": [ - "u16", - 12 - ] - } - }, - { - "name": "orderProportionLen", - "type": "u8" - }, - { - "name": "orderProportionDenominator", - "type": "u16" - }, - { - "name": "crankSolAccount", - "type": "publicKey" - }, - { - "name": "poolInitCrankFee", - "type": "u64" - }, - { - "name": "solBond", - "type": "u64" - } - ] - } - }, - { - "name": "PoolAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "coinMint", - "type": "publicKey" - }, - { - "name": "pcMint", - "type": "publicKey" - }, - { - "name": "market", - "type": "publicKey" - }, - { - "name": "openOrders", - "type": "publicKey" - }, - { - "name": "poolCoinAccount", - "type": "publicKey" - }, - { - "name": "poolPcAccount", - "type": "publicKey" - }, - { - "name": "poolLpAccount", - "type": "publicKey" - }, - { - "name": "lpMint", - "type": "publicKey" - }, - { - "name": "firstPlaced", - "type": "bool" - }, - { - "name": "orderIndex", - "type": "u8" - }, - { - "name": "lpFee", - "type": "u64" - }, - { - "name": "stableFee", - "type": "u64" - }, - { - "name": "ixi", - "type": "u8" - }, - { - "name": "icx", - "type": "u8" - }, - { - "name": "clientOrderId", - "type": "u64" - }, - { - "name": "orderProportionNumerators", - "type": { - "array": [ - "u16", - 12 - ] - } - }, - { - "name": "poolType", - "type": "u8" - }, - { - "name": "stableswapAmpCoef", - "type": "u64" - }, - { - "name": "coinDecimals", - "type": "u8" - }, - { - "name": "pcDecimals", - "type": "u8" - }, - { - "name": "lastAskCoin", - "type": "u64" - }, - { - "name": "lastAskPc", - "type": "u64" - }, - { - "name": "lastBidCoin", - "type": "u64" - }, - { - "name": "lastBidPc", - "type": "u64" - }, - { - "name": "version", - "type": "u64" - }, - { - "name": "placedAsks", - "type": { - "array": [ - { - "defined": "PlacedOrder" - }, - 12 - ] - } - }, - { - "name": "placedBids", - "type": { - "array": [ - { - "defined": "PlacedOrder" - }, - 12 - ] - } - }, - { - "name": "pca", - "type": "u64" - }, - { - "name": "ppca", - "type": "u64" - }, - { - "name": "mmActive", - "type": "bool" - } - ] - } - } - ], - "types": [ - { - "name": "PlacedOrder", - "type": { - "kind": "struct", - "fields": [ - { - "name": "limitPrice", - "type": "u64" - }, - { - "name": "coinQty", - "type": "u64" - }, - { - "name": "maxNativePcQtyIncludingFees", - "type": "u64" - }, - { - "name": "clientOrderId", - "type": "u64" - } - ] - } - } - ], - "events": [], - "errors": [] -} - */ +} \ No newline at end of file diff --git a/projects/blum/index.js b/projects/blum/index.js index 004fb2f810..53d9ebd14c 100644 --- a/projects/blum/index.js +++ b/projects/blum/index.js @@ -5,7 +5,6 @@ const { getConfig } = require("../helper/cache") async function fetchTvl(api) { const res = await getConfig('blum', 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=blum') - console.log(res) await sumTokens({ api, tokens: [ADDRESSES.ton.TON], owners: res, onlyWhitelistedTokens: true, }) } diff --git a/projects/cellana/index.js b/projects/cellana/index.js index c4627078cd..ff92478766 100644 --- a/projects/cellana/index.js +++ b/projects/cellana/index.js @@ -34,7 +34,7 @@ module.exports = { "Counts the lamports in each coin container in the Cellena contract account.", aptos: { - tvl: async (_, _1, _2, { api }) => { + tvl: async (api) => { const data = await _getResources() const coinContainers = data.filter(reserveContrainerFilter) @@ -48,7 +48,6 @@ module.exports = { }); //get funible asset balance await getfungibleAssetBalances(api) - console.log(api) } } } \ No newline at end of file diff --git a/projects/helper/http.js b/projects/helper/http.js index 2f9d9d4852..e682d45ac4 100644 --- a/projects/helper/http.js +++ b/projects/helper/http.js @@ -44,7 +44,6 @@ async function post(endpoint, body, options) { return data } catch (e) { sdk.log(e.message) - console.log(e) throw new Error(`Failed to post ${endpoint}`) } } diff --git a/projects/hub3-ee/index.js b/projects/hub3-ee/index.js index 1ae76f86a8..369792591d 100644 --- a/projects/hub3-ee/index.js +++ b/projects/hub3-ee/index.js @@ -1,19 +1,6 @@ const { PublicKey } = require("@solana/web3.js"); -const { sumTokens2, getProvider, getConnection, } = require("../helper/solana"); -const { Program } = require("@project-serum/anchor"); -const sdk = require('@defillama/sdk') +const { getConnection, } = require("../helper/solana"); -async function _tvl() { - const provider = getProvider(); - const programId = new PublicKey("2pi53pUUC5S4zyUU6Wrbe6EfYXS9LNcpikpwPFahtQQw"); - const program = new Program(sharesIDL, programId, provider); - let accounts = await program.account.issuer.all(); - accounts = accounts.filter(i => +i.account.holders > 0) - accounts.sort((a, b) => +b.account.holders - a.account.holders) - sdk.log(accounts.length) - console.log(accounts.slice(0, 10).map(i => i.account.span)) - return sumTokens2({ solOwners: accounts.map(i => i.publicKey) }) -} async function tvl() { const programId = new PublicKey("2pi53pUUC5S4zyUU6Wrbe6EfYXS9LNcpikpwPFahtQQw"); @@ -36,61 +23,3 @@ module.exports = { tvl, }, }; - -const sharesIDL = { - version: '0.1.0', - name: 'shares', - instructions: [], - accounts: [ - { - name: 'issuer', - type: { - kind: 'struct', - fields: [ - { - name: 'issuerKey', - type: 'publicKey' - }, - { - name: 'price', - type: 'u64' - }, - { - name: 'totalShares', - type: 'u64' - }, - { - name: 'totalFees', - type: 'u64' - }, - { - name: 'bump', - type: 'u8' - }, - { - name: 'holders', - type: 'u32' - }, - { - name: 'migration', - type: 'bool' - }, - { - name: 'a', - type: 'u64' - }, - { - name: 'b', - type: 'u64' - }, - { - name: 'd', - type: 'u64' - } - ] - } - }, - ], - errors: [] -} -//test it diff --git a/projects/lifinity-v2/index.js b/projects/lifinity-v2/index.js index 846353ac45..7debe1a2d3 100644 --- a/projects/lifinity-v2/index.js +++ b/projects/lifinity-v2/index.js @@ -3,7 +3,6 @@ const { Program } = require("@project-serum/anchor"); async function getTokenAccounts(programId, idl, chain) { const provider = getProvider(chain) - console.log(programId, chain) const program = new Program(idl, programId, provider) const data = await program.account.amm.all() return data.map(({ account: { tokenAAccount, tokenBAccount }}) => ([tokenAAccount, tokenBAccount,])).flat() diff --git a/projects/limitless/index.js b/projects/limitless/index.js index da315123fc..04cd577516 100644 --- a/projects/limitless/index.js +++ b/projects/limitless/index.js @@ -108,7 +108,6 @@ Object.keys(config).forEach(chain => { } }) - console.log(provided.length, withdrawn.length) const pools = getUniqueAddresses(provided.map(entry => entry.pool).concat(withdrawn.map(entry => entry.pool))) const token0s = await api.multiCall({ abi: 'address:token0', calls: pools}) const token1s = await api.multiCall({ abi: 'address:token1', calls: pools}) diff --git a/projects/liquix/index.js b/projects/liquix/index.js index 9df6fa82d2..5f699b26c4 100644 --- a/projects/liquix/index.js +++ b/projects/liquix/index.js @@ -46,7 +46,6 @@ Object.keys(config).forEach((chain) => { fromBlock, }); const vaults = logs.map(i => i.proxyAddress) - console.log(vaults.length) const _balances = await api.multiCall({ abi: 'function totalUnderlying(address vault_) external view returns ((address,uint256)[] memory)', target: helper, calls: vaults, permitFailure: true, }) for (const balances of _balances) { if (!balances) continue; diff --git a/projects/lyra-v2/index.js b/projects/lyra-v2/index.js index cc0875f993..1c119dda7a 100644 --- a/projects/lyra-v2/index.js +++ b/projects/lyra-v2/index.js @@ -21,7 +21,6 @@ chains.forEach(chain => { tvl: async (api) => { const oldToA = await getOldToA(api) const toa = await getToA(api) - console.log(chain, oldToA.concat(toa)) return sumTokens2({ tokensAndOwners: oldToA.concat(toa), api }) } } diff --git a/projects/mira-ly/index.js b/projects/mira-ly/index.js index 83252fe01d..d59f9d69b4 100644 --- a/projects/mira-ly/index.js +++ b/projects/mira-ly/index.js @@ -8,7 +8,6 @@ async function tvl(api) { // const provider = await fuels.Provider.create('https://mainnet.fuel.network/v1/graphql') // const contract = new fuels.Contract(contractId, abi, provider) // const { value } = await contract.functions.total_assets().get() - // console.log(contract.functions, +value) return sumTokens({ api, owner: contractId, }) } diff --git a/projects/openeden-tbill/index.js b/projects/openeden-tbill/index.js index b917bf45cc..60db9f3ded 100644 --- a/projects/openeden-tbill/index.js +++ b/projects/openeden-tbill/index.js @@ -16,7 +16,6 @@ async function evmTvl(api) { async function solTvl (api) { const res = await getTokenSupplies([solTbill]) - console.log(res) Object.entries(res).forEach(([token, balance]) => { api.add(token, balance) }) diff --git a/projects/platypus-finance/index.js b/projects/platypus-finance/index.js index cf16de413e..829b2a02dd 100644 --- a/projects/platypus-finance/index.js +++ b/projects/platypus-finance/index.js @@ -15,7 +15,6 @@ const query = `{ async function tvl(api) { if (api.timestamp > +new Date("2023-02-17") / 1e3) blacklistedTokens.push("0xdaCDe03d7Ab4D81fEDdc3a20fAA89aBAc9072CE2") // USP was hacked const { pools } = await cachedGraphQuery("platypus-finance", sdk.graph.modifyEndpoint('Bu5QPRWGnZB6NxU4S7kAKQZJpY4pHmAq3TV69V1W2Qqw'), query) - console.log(pools) const tokensAndOwners = pools.map(i => i.assetsList.map(v => [v.token.id, v.id])).flat() return sumTokens2({ api, tokensAndOwners, blacklistedTokens }); } diff --git a/projects/shadeprotocol-lend/index.js b/projects/shadeprotocol-lend/index.js index a1ab55b5cd..3a83ae9401 100644 --- a/projects/shadeprotocol-lend/index.js +++ b/projects/shadeprotocol-lend/index.js @@ -3,7 +3,6 @@ const { post } = require("../helper/http") async function getData(api) { const isoTimestamp = new Date((api.timestamp - 5 * 60 * 60) * 1000).toISOString() const { data: { lendStatsHistories } } = await post('https://prodv1.securesecrets.org/graphql', { "operationName": "getLendHistory", "variables": { "intervalIso": isoTimestamp }, "query": "query getLendHistory($intervalIso: String!) {\n lendStatsHistories(\n query: {where: {time: {gte: $intervalIso}}, orderBy: {time: \"desc\"}}\n ) {\n averageLtv\n collateralUsd\n debtAmount\n debtUsd\n time\n __typename\n }\n}" }) - console.log(lendStatsHistories.length) return lendStatsHistories[0] } diff --git a/projects/solar-studios/index.js b/projects/solar-studios/index.js index c519ab923f..d82c37f8b9 100644 --- a/projects/solar-studios/index.js +++ b/projects/solar-studios/index.js @@ -9,7 +9,6 @@ async function tvl(api) { const idl = await Program.fetchIdl(programId, provider) const program = new Program(idl, programId, provider) const data = await program.account.poolState.all() - console.log(data.length) const tokenAccounts = data.map(({ account: { token0Vault, token1Vault }}) => ([token0Vault, token1Vault,])).flat() return sumTokens2({ tokenAccounts, api, }) } diff --git a/projects/tangible/index.js b/projects/tangible/index.js index bf48c1b3de..6faa980f3e 100644 --- a/projects/tangible/index.js +++ b/projects/tangible/index.js @@ -11,7 +11,6 @@ const realTvl = async (api) => { const basketManager = '0x5e581ce0472bF528E7F5FCB96138d7759AC2ac3f'.toLowerCase() // get all baskets in existance const baskets = await api.call({ abi: 'address[]:getBasketsArray', target: basketManager }) - console.log(baskets) const basketTVL = await api.multiCall({ abi: 'uint256:getTotalValueOfBasket', calls: baskets}) api.add(USTB, basketTVL) } diff --git a/projects/zombie-network/index.js b/projects/zombie-network/index.js index 2cc2b3a615..019f19b31c 100644 --- a/projects/zombie-network/index.js +++ b/projects/zombie-network/index.js @@ -11,7 +11,6 @@ async function staking(api) { const bloodPrice = klayBalance / bldBalance const staking = stakingBalance * bloodPrice / 1e18 - console.log('staking', staking, klayBalance, bldBalance, stakingBalance, bloodPrice) api.addCGToken('klay-token', staking) } From 4fe47f6eeb42f949204e962493f5618fe3e4dcfb Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Fri, 6 Dec 2024 14:26:45 +0530 Subject: [PATCH 1333/1768] added new pools (#12575) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 117 ++++++++++++++++++++++++++++---------- 1 file changed, 86 insertions(+), 31 deletions(-) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index fa3f7404d6..e1ca781091 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -1,68 +1,73 @@ const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui") const { addUniV3LikePosition } = require("../helper/unwrapLPs") +const { log } = require('../helper/utils') const ALPHAFI_CETUS_TVL_IDS = [ { - +//usdt wusdc poolID: "0x30066d9879374276dc01177fbd239a9377b497bcd347c82811d75fcda35b18e5", - cetusPoolID: "0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20", + parentPoolID: "0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20", investorID: "0x87a76889bf4ed211276b16eb482bf6df8d4e27749ebecd13017d19a63f75a6d5", token0Type: ADDRESSES.sui.USDT, token1Type: ADDRESSES.sui.USDC }, - { + { //usdy wusdc poolID: "0xa7239a0c727c40ee3a139689b16b281acfd0682a06c23531b184a61721ece437", - cetusPoolID: "0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d", + parentPoolID: "0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d", investorID: "0x1b923520f19660d4eb013242c6d03c84fdea034b8f784cfd71173ef72ece50e1", token0Type: "0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY", token1Type: ADDRESSES.sui.USDC }, - { + { //wusdc sui poolID: "0xee6f6392cbd9e1997f6e4cf71db0c1ae1611f1f5f7f23f90ad2c64b8f23cceab", - cetusPoolID: "0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630", + parentPoolID: "0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630", investorID: "0xb6ca8aba0fb26ed264a3ae3d9c1461ac7c96cdcbeabb01e71086e9a8340b9c55", token0Type: ADDRESSES.sui.USDC, token1Type: ADDRESSES.sui.SUI }, { + //wusdc wbtc poolID: "0x676fc5cad79f51f6a7d03bfa3474ecd3c695d322380fc68e3d4f61819da3bf8a", - cetusPoolID: "0xaa57c66ba6ee8f2219376659f727f2b13d49ead66435aa99f57bb008a64a8042", + parentPoolID: "0xaa57c66ba6ee8f2219376659f727f2b13d49ead66435aa99f57bb008a64a8042", investorID: "0x9ae0e56aa0ebc27f9d8a17b5a9118d368ba262118d878977b6194a10a671bbbc", token0Type: ADDRESSES.sui.USDC, token1Type: ADDRESSES.sui.WBTC }, { + // weth wusdc poolID: "0xbdf4f673b34274f36be284bca3f765083380fefb29141f971db289294bf679c6", - cetusPoolID: "0x5b0b24c27ccf6d0e98f3a8704d2e577de83fa574d3a9060eb8945eeb82b3e2df", + parentPoolID: "0x5b0b24c27ccf6d0e98f3a8704d2e577de83fa574d3a9060eb8945eeb82b3e2df", investorID: "0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43", token0Type: ADDRESSES.sui.WETH, token1Type: ADDRESSES.sui.USDC }, - { + { //navx sui poolID: "0x045e4e3ccd383bedeb8fda54c39a7a1b1a6ed6a9f66aec4998984373558f96a0", - cetusPoolID: "0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703", + parentPoolID: "0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703", investorID: "0xdd9018247d579bd7adfdbced4ed39c28821c6019461d37dbdf32f0d409959b1c", token0Type: "0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX", token1Type: ADDRESSES.sui.SUI }, { + // buck wusdc poolID: "0x59ff9c5df31bfd0a59ac8393cf6f8db1373252e845958953e6199952d194dae4", - cetusPoolID: "0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5", + parentPoolID: "0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5", investorID: "0x8051a9ce43f9c21e58331b1ba2b1925e4ae4c001b1400459236d86d5d3d2888b", token0Type: ADDRESSES.sui.BUCK, token1Type: ADDRESSES.sui.USDC }, - { + {//wsol wusdc poolID: "0xd50ec46c2514bc8c588760aa7ef1446dcd37993bc8a3f9e93563af5f31b43ffd", - cetusPoolID: "0x9ddb0d269d1049caf7c872846cc6d9152618d1d3ce994fae84c1c051ee23b179", + parentPoolID: "0x9ddb0d269d1049caf7c872846cc6d9152618d1d3ce994fae84c1c051ee23b179", investorID: "0x74308f0de7ea1fc4aae2046940522f8f79a6a76db94e1227075f1c2343689882", token0Type: ADDRESSES.sui.SOL, token1Type: ADDRESSES.sui.USDC }, { + //sca sui poolID: "0x6eec371c24ad264ced3a1f40b83d7d720aa2b0afa860a6af85436f6a769842e1", - cetusPoolID: "0xaa72bd551b25715b8f9d72f226fa02526bdf2e085a86faec7184230c5209bb6e", + parentPoolID: "0xaa72bd551b25715b8f9d72f226fa02526bdf2e085a86faec7184230c5209bb6e", investorID: "0x651acc1166023a08c17f24e71550982400e9b1f4950cc1324410300efc1af905", token0Type: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA", token1Type: ADDRESSES.sui.SUI @@ -70,7 +75,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ // usdc sui { poolID: "0x727882553d1ab69b0cabad2984331e7e39445f91cb4046bf7113c36980685528", - cetusPoolID: "0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105", + parentPoolID: "0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105", investorID: "0xba6acd0350eab1c6bc433b6c869e5592fe0667ae96a3115f89d5c79dd78396ef", token0Type: ADDRESSES.sui.USDC_CIRCLE, token1Type: ADDRESSES.sui.SUI @@ -78,7 +83,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ // usdc usdt { poolID: "0xa213f04c6049f842a7ffe7d39e0c6138a863dc6e25416df950d23ddb27d75661", - cetusPoolID: "0x6bd72983b0b5a77774af8c77567bb593b418ae3cd750a5926814fcd236409aaa", + parentPoolID: "0x6bd72983b0b5a77774af8c77567bb593b418ae3cd750a5926814fcd236409aaa", investorID: "0xe553be450b7290025d5810da45102abdbaa211c5735e47f6740b4dd880edc0bd", token0Type: ADDRESSES.sui.USDC_CIRCLE, token1Type: ADDRESSES.sui.USDT @@ -86,7 +91,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ // usdc wusdc { poolID: "0x568a47adf2b10219f0973a5600096822b38b4a460c699431afb6dad385614d66", - cetusPoolID: "0x1efc96c99c9d91ac0f54f0ca78d2d9a6ba11377d29354c0a192c86f0495ddec7", + parentPoolID: "0x1efc96c99c9d91ac0f54f0ca78d2d9a6ba11377d29354c0a192c86f0495ddec7", investorID: "0x6cc5e671a2a6e9b8c8635ff1fb16ae62abd7834558c3a632d97f393c0f022972", token0Type: ADDRESSES.sui.USDC_CIRCLE, token1Type: ADDRESSES.sui.USDC @@ -94,7 +99,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ // usdc eth { poolID: "0xc04f71f32a65ddf9ebf6fb69f39261457da28918bfda5d3760013f3ea782a594", - cetusPoolID: "0x9e59de50d9e5979fc03ac5bcacdb581c823dbd27d63a036131e17b391f2fac88", + parentPoolID: "0x9e59de50d9e5979fc03ac5bcacdb581c823dbd27d63a036131e17b391f2fac88", investorID: "0xb0bff60783536f9dc0b38e43150a73b73b8a4f1969446f7721e187821915bd00", token0Type: ADDRESSES.sui.USDC_CIRCLE, token1Type: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH" @@ -102,7 +107,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ // deep sui { poolID: "0xff496f73a1f9bf7461882fbdad0c6c6c73d301d3137932f7fce2428244359eaa", - cetusPoolID: "0xe01243f37f712ef87e556afb9b1d03d0fae13f96d324ec912daffc339dfdcbd2", + parentPoolID: "0xe01243f37f712ef87e556afb9b1d03d0fae13f96d324ec912daffc339dfdcbd2", investorID: "0x5e195363175e4b5139749d901ddd5ef1ffc751777a7051b558c45fa12f24abc3", token0Type: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP", token1Type: ADDRESSES.sui.SUI @@ -110,7 +115,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ // buck sui { poolID: "0xeb44ecef39cc7873de0c418311557c6b8a60a0af4f1fe1fecece85d5fbe02ab5", - cetusPoolID: "0x59cf0d333464ad29443d92bfd2ddfd1f794c5830141a5ee4a815d1ef3395bf6c", + parentPoolID: "0x59cf0d333464ad29443d92bfd2ddfd1f794c5830141a5ee4a815d1ef3395bf6c", investorID: "0x9b7c9b6086d3baf413bccdfbb6f60f04dedd5f5387dee531eef5b811afdfaedc", token0Type: ADDRESSES.sui.BUCK, token1Type: ADDRESSES.sui.SUI @@ -118,13 +123,45 @@ const ALPHAFI_CETUS_TVL_IDS = [ // fud sui { poolID: "0x005a2ebeb982a1e569a54795bce1eeb4d88900b674440f8487c2846da1706182", - cetusPoolID: "0xfc6a11998f1acf1dd55acb58acd7716564049cfd5fd95e754b0b4fe9444f4c9d", + parentPoolID: "0xfc6a11998f1acf1dd55acb58acd7716564049cfd5fd95e754b0b4fe9444f4c9d", investorID: "0xaa17ff01024678a94381fee24d0021a96d4f3a11855b0745facbb5d2eb9df730", token0Type: "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD", token1Type: ADDRESSES.sui.SUI }, ] +const ALPHAFI_BLUEFIN_TVL_IDS = [ + { //sui usdc + poolID: "0x99b9bd1d07690a658b9723509278b83715f7c4bec2bc5983316c002b597dfabd", + parentPoolID: "0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa", + investorID: "0x863909d3ced121e06053dec3fd2cb08ecda4c54607ad1b3f4fc8c75267c8012c", + token0Type: ADDRESSES.sui.SUI, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //usdt usdc + poolID: "0x8d9220587b2969429c517e76b3695f01cb3749849d69937c4140a6715bf14c7f", + parentPoolID: "0x0321b68a0fca8c990710d26986ba433d06b351deba9384017cd6175f20466a8f", + investorID: "0x114bf16bd3504d6f491e35152d54f5340d66d7c6abaca7689b9081cd3af0cd93", + token0Type: ADDRESSES.sui.USDT, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //sui BUCK + poolID: "0x58c4a8c5d18c61156e1a5a82811fbf71963a4de3f5d52292504646611a308888", + parentPoolID: "0xe63329f43a9474d421be85ff270bafc04667b811d215d4d4ee2512bcf2713896", + investorID: "0xc04ef6923ae5cf047cf853d2fa809ab56dbe712ca95f87c5f3c12dcfe66f7ecd", + token0Type: ADDRESSES.sui.SUI, + token1Type: ADDRESSES.sui.BUCK + }, + { //AUSD usdc + poolID: "0x8ed765497eeedf7960af787c0c419cb2c01c471ab47682a0619e8588c06a9aa6", + parentPoolID: "0x881639630836b703aa3e04898f8a3740584859838d986619d0ee0f63a784c078", + investorID: "0x1f9f325dfb23a3516679cd7bda58c26791b2a34c40ce5e1cd88ee6f8361a0ea6", + token0Type: "0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD", + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + +] + const ALPHAFI_NAVI_TVL_IDS = [ { poolID: "0x643f84e0a33b19e2b511be46232610c6eb38e772931f582f019b8bbfb893ddb3", @@ -173,12 +210,30 @@ const ALPHAFI_NAVI_TVL_IDS = [ }, ] const ALPHAFI_NAVI_LOOP_TVL_IDS = [ - { + { //sui vsui poolID: "0xd013a1a0c6f2bad46045e3a1ba05932b4a32f15864021d7e0178d5c2fdcc85e3", - investorID: "0x36cc3135c255632f9275a5b594145745f8344ce8f6e46d9991ffb17596195869", + investorID: "0x36cc3135c255632f9275a5b594145745f8344ce8f6e46d9991ffb17596195869", tokenType: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT", expo: 9 }, + { //usdt usdc + poolID: "0xdd886dd4828a44b7ae48bb7eaceca1cecedd1dcc06174f66ee398dc0feb71451", + investorID: "0xe512e692f4d48a79abcfd5970ccb44d6f7f149e81bb077ccd58b89d4ab557d0e", + tokenType: ADDRESSES.sui.USDT, + expo: 6 + }, + { //usdc usdt + poolID: "0xb90c7250627e0113df2e60d020df477cac14ca78108e3c5968230f3e7d4d8846", + investorID: "0x3b9fe28a07e8dd5689f3762ba45dbdf10bd5f7c85a14432928d9108a61ef2dc2", + tokenType: ADDRESSES.sui.USDC_CIRCLE, + expo: 6 + }, + { //hasui sui + poolID: "0x4b22c2fc59c7697eea08c1cc1eadf231415d66b842875ba4730a8619efa38ced", + investorID: "0xa65eaadb556a80e4cb02fe35efebb2656d82d364897530f45dabc1e99d15a8a9", + tokenType: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI", + expo: 9 + }, ] const ALPHAFI_BUCKET_TVL_IDS = [ { @@ -189,21 +244,21 @@ const ALPHAFI_BUCKET_TVL_IDS = [ ] const ALPHAFI_POOL2_IDS = [{ poolID: "0x594f13b8f287003fd48e4264e7056e274b84709ada31e3657f00eeedc1547e37", - cetusPoolID: "0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720", + parentPoolID: "0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720", investorID: "0x46d901d5e1dba34103038bd2ba789b775861ea0bf4d6566afd5029cf466a3d88", token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", token1Type: ADDRESSES.sui.SUI }, { poolID: "0x430986b53a787362e54fa83d0ae046a984fb4285a1bc4fb1335af985f4fe019d", - cetusPoolID: "0x0cbe3e6bbac59a93e4d358279dff004c98b2b8da084729fabb9831b1c9f71db6", + parentPoolID: "0x0cbe3e6bbac59a93e4d358279dff004c98b2b8da084729fabb9831b1c9f71db6", investorID: "0x705c560fd1f05c64e0480af05853e27e1c3d04e255cd6c5cb6921f5d1df12b5a", token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", token1Type: ADDRESSES.sui.USDC }, { poolID: "0x4c0e42f1826170ad9283b321a7f9a453ef9f65aaa626f7d9ee5837726664ecdc", - cetusPoolID: "0x29e218b46e35b4cf8eedc7478b8795d2a9bcce9c61e11101b3a039ec93305126", + parentPoolID: "0x29e218b46e35b4cf8eedc7478b8795d2a9bcce9c61e11101b3a039ec93305126", investorID: "0xb43d1defd5f76ef084d68d6b56e903b54d0a3b01be8bb920ed1fa84b42c32ee1", token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", token1Type: ADDRESSES.sui.USDC_CIRCLE @@ -217,16 +272,16 @@ function asIntN(int, bits = 32) { return Number(BigInt.asIntN(bits, BigInt(int))) } -async function addPoolTVL(api, alphafiCetusPools) { - for (const { poolID, cetusPoolID, investorID, token0Type, token1Type } of alphafiCetusPools) { +async function addPoolTVL(api, alphafiDoubleAssetPools) { + for (const { poolID, parentPoolID, investorID, token0Type, token1Type } of alphafiDoubleAssetPools) { let investorObject = await sui.getObject(investorID) let poolObject = await sui.getObject(poolID) - let cetusPoolObject = await sui.getObject(cetusPoolID) + let parentPoolObject = await sui.getObject(parentPoolID) addUniV3LikePosition({ api, tickLower: asIntN(investorObject.fields.lower_tick), tickUpper: asIntN(investorObject.fields.upper_tick), - tick: asIntN(cetusPoolObject.fields.current_tick_index.fields.bits), + tick: asIntN(parentPoolObject.fields.current_tick_index.fields.bits), liquidity: poolObject.fields.tokensInvested, token0: token0Type, token1: token1Type @@ -278,7 +333,7 @@ async function addPoolTVL4(api, alphafiBucketPools){ async function tvl(api) { - await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS), addPoolTVL4(api, ALPHAFI_BUCKET_TVL_IDS)]) + await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS), addPoolTVL4(api, ALPHAFI_BUCKET_TVL_IDS), addPoolTVL(api, ALPHAFI_BLUEFIN_TVL_IDS)]) } async function pool2(api) { From f92b6ede4efac76e7128d9c83c83fd73b4b1b617 Mon Sep 17 00:00:00 2001 From: Octopus <156575930+gguuttss@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:09:57 +0100 Subject: [PATCH 1334/1768] fix: STAB Protocol Remove duplicate LSULP TVL add (#12576) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/radixdlt.js | 4 +++- projects/stab-protocol/index.js | 39 +++++++------------------------ 2 files changed, 12 insertions(+), 31 deletions(-) diff --git a/projects/helper/chain/radixdlt.js b/projects/helper/chain/radixdlt.js index 7c8cbf2335..5ca6b9bba5 100644 --- a/projects/helper/chain/radixdlt.js +++ b/projects/helper/chain/radixdlt.js @@ -12,7 +12,8 @@ const chain = 'radixdlt' const ENTITY_DETAILS_URL = `https://mainnet.radixdlt.com/state/entity/details` -async function sumTokens({ owner, owners = [], api, transformLSU = false, }) { +async function sumTokens({ owner, owners = [], api, transformLSU = false, blacklistedTokens = [] }) { + const blacklistSet = new Set(blacklistedTokens.map(i => i.toLowerCase())) const fixBalances = getFixBalancesSync(chain) if (owner) owners.push(owner) @@ -23,6 +24,7 @@ async function sumTokens({ owner, owners = [], api, transformLSU = false, }) { let items = await queryAddresses({ addresses: owners }) items.forEach((item) => { item.fungible_resources.items.forEach(({ resource_address, amount }) => { + if (blacklistSet.has(resource_address.toLowerCase())) return; api.add(resource_address, +amount) }); }); diff --git a/projects/stab-protocol/index.js b/projects/stab-protocol/index.js index 20e6b505c0..679b44f4d5 100644 --- a/projects/stab-protocol/index.js +++ b/projects/stab-protocol/index.js @@ -1,37 +1,16 @@ -const ADDRESSES = require('../helper/coreAssets.json') - -const { queryAddresses, sumTokens } = require('../helper/chain/radixdlt'); +const { sumTokensExport } = require('../helper/chain/radixdlt'); const STAB_COMPONENT = "component_rdx1cq70cjajtvllgk9z9wm9l8v6w8hsgtlw530cdgpraxprn4yevg89kf"; -const STAB_XRD_POOL_XRD_VAULT = "internal_vault_rdx1trk04c3sxffatj5h78w3266c8q07cvjlgq0zx44sask8wsam4q8rup"; -const ORACLE_COMPONENT = "component_rdx1cq7zsdqfh0mcwnutrevkz6wtml0vnav5fcmtf7rksmhk48urkyjg9c"; - -async function tvl(api) { - //get the token amounts of collaterals used in the STAB Protocol - const stabComponentTokens = await sumTokens({ owners: [STAB_COMPONENT], api }) - const xrdAmount = stabComponentTokens['radixdlt:resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd'] - const lsuLpAmount = stabComponentTokens['radixdlt:resource_rdx1thksg5ng70g9mmy9ne7wz0sc7auzrrwy7fmgcxzel2gvp8pj0xxfmf'] - - //calculate value of LSULP against XRD to get accurate price data - const [{ details: { state } }] = await queryAddresses({ addresses: [ORACLE_COMPONENT] } ) - const xrdPrice = state.fields[0].elements[0].fields[1].value - const lsuLpPrice = state.fields[0].elements[1].fields[1].value - const lsuLpMultiplier = lsuLpPrice / xrdPrice - - //add XRD and LSULP values to tvl - api.add('resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd', xrdAmount + lsuLpAmount * lsuLpMultiplier) - - //get the amount of XRD in the protocol native STAB/XRD pool (with 50/50 weights) - const stabXrdPoolXrdVault = await queryAddresses({ addresses: [STAB_XRD_POOL_XRD_VAULT] }); - const xrdAmountPool = stabXrdPoolXrdVault[0].details.balance.amount; - - //add only XRD value of pool to tvl (STAB value is excluded as backing of STAB tokens are already included in tvl) - api.add('resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd', xrdAmountPool) -} +const STAB_XRD_POOL = "pool_rdx1c4jj8lklg7edacflhk0tl202dzgawkujly4kqf0jfehyqd8watxw0r" module.exports = { methodology: 'Calculates TVL using the amount of collateral locked to borrow STAB using CDPs, and amount of STAB and XRD locked in the protocol-native STAB/XRD pool.', - radixdlt: { tvl }, - misrepresentedTokens: true, + radixdlt: { + //get the token amounts of collaterals used in the STAB Protocol and tokens locked in STAB/XRD pool + tvl: sumTokensExport({ + owners: [STAB_COMPONENT, STAB_XRD_POOL], + blacklistedTokens: ['resource_rdx1t40lchq8k38eu4ztgve5svdpt0uxqmkvpy4a2ghnjcxjtdxttj9uam'] + }) + }, timetravel: false, }; From befa0d9ed79ae7edec343d27afec7dc14097e0d6 Mon Sep 17 00:00:00 2001 From: yongjun925 Date: Fri, 6 Dec 2024 17:12:30 +0800 Subject: [PATCH 1335/1768] Add DODO GSP type pool (#12581) --- projects/dodo/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/projects/dodo/index.js b/projects/dodo/index.js index af0026414c..095da410a3 100644 --- a/projects/dodo/index.js +++ b/projects/dodo/index.js @@ -2,13 +2,13 @@ const { getLogs } = require('../helper/cache/getLogs') const ADDRESSES = require('../helper/coreAssets.json') const config = { - ethereum: { dvmFactory: '0x72d220cE168C4f361dD4deE5D826a01AD8598f6C', dodoBirthFactory: '0x3a97247df274a17c59a3bd12735ea3fcdfb49950', fromBlock: 10613640, dspFactory: '0x6fddb76c93299d985f4d3fc7ac468f9a168577a4', dppFactory: ['0x5336ede8f971339f6c0e304c66ba16f1296a2fbe', '0xb5dc5e183c2acf02ab879a8569ab4edaf147d537', '0x6b4fa0bc61eddc928e0df9c7f01e407bfcd3e5ef'] }, - arbitrum: { dvmFactory: '0xDa4c4411c55B0785e501332354A036c04833B72b', fromBlock: 226578, dspFactory: '0xC8fE2440744dcd733246a4dB14093664DEFD5A53', dodoBirthFactory: '0xbcc3401e16c25eaf4d3fed632ce3288503883b1f', dppFactory: ['0xDdB13e6dd168E1a68DC2285Cb212078ae10394A9', '0xa6cf3d163358af376ec5e8b7cc5e102a05fde63d'] }, + ethereum: { dvmFactory: '0x72d220cE168C4f361dD4deE5D826a01AD8598f6C', dodoBirthFactory: '0x3a97247df274a17c59a3bd12735ea3fcdfb49950', fromBlock: 10613640, dspFactory: '0x6fddb76c93299d985f4d3fc7ac468f9a168577a4', dppFactory: ['0x5336ede8f971339f6c0e304c66ba16f1296a2fbe', '0xb5dc5e183c2acf02ab879a8569ab4edaf147d537', '0x6b4fa0bc61eddc928e0df9c7f01e407bfcd3e5ef'], gspFactory: '0x710409D2121B7C8EA4aCAdd6803FDE2D85DF6473' }, + arbitrum: { dvmFactory: '0xDa4c4411c55B0785e501332354A036c04833B72b', fromBlock: 226578, dspFactory: '0xC8fE2440744dcd733246a4dB14093664DEFD5A53', dodoBirthFactory: '0xbcc3401e16c25eaf4d3fed632ce3288503883b1f', dppFactory: ['0xDdB13e6dd168E1a68DC2285Cb212078ae10394A9', '0xa6cf3d163358af376ec5e8b7cc5e102a05fde63d'], gspFactory: '0x46E55A974c5995675b025f7F607C3278B36f0c29' }, bsc: { dvmFactory: ['0x790B4A80Fb1094589A3c0eFC8740aA9b0C1733fB', '0xf50bdc9e90b7a1c138cb7935071b85c417c4cb8e'], fromBlock: 726278, dspFactory: '0x0fb9815938Ad069Bf90E14FE6C596c514BEDe767', dppFactory: ['0xd9CAc3D964327e47399aebd8e1e6dCC4c251DaAE', '0x7737fd30535c69545deeea54ab8dd590ccaebd3c', '0x9b64c81ba54ea51e1f6b7fefb3cff8aa6f1e2a09', '0xafe0a75dffb395eaabd0a7e1bbbd0b11f8609eef'], dodoBirthFactory: '0xca459456a45e300aa7ef447dbb60f87cccb42828', blacklistedTokens: [ '0xcc7fc8666f6e62cb44aa781de841ee6be3bbe54c', '0xdb1e780db819333ea79c9744cc66c89fbf326ce8', - ] + ], gspFactory: '0x78d43a889F42a344Fe98C3fb9455791Dc8178d55' }, polygon: { dppFactory: ['0xd24153244066F0afA9415563bFC7Ba248bfB7a51', '0x95E887aDF9EAa22cC1c6E3Cb7f07adC95b4b25a8'], dvmFactory: '0x79887f65f83bdf15Bcc8736b5e5BcDB48fb8fE13', fromBlock: @@ -24,13 +24,13 @@ const config = { linea: { dvmFactory: '0xc0F9553Df63De5a97Fe64422c8578D0657C360f7', fromBlock: 91468, dspFactory: '0x2933c0374089D7D98BA0C71c5E02E1A0e09deBEE', dppFactory: '0x97bBF5BB1dcfC93A8c67e97E50Bea19DB3416A83' }, scroll: { dvmFactory: '0x5a0C840a7089aa222c4458b3BE0947fe5a5006DE', fromBlock: 83070, dspFactory: '0x7E9c460d0A10bd0605B15F0d0388e307d34a62E6', dppFactory: '0x31AC053c31a77055b2ae2d3899091C0A9c19cE3a' }, manta: { dvmFactory: '0x97bBF5BB1dcfC93A8c67e97E50Bea19DB3416A83', fromBlock: 384137, dspFactory: '0x29C7718e8B606cEF1c44Fe6e43e07aF9D0875DE1', dppFactory: '0xa71415675F68f29259ddD63215E5518d2735bf0a' }, - mantle: { dvmFactory: '0x29C7718e8B606cEF1c44Fe6e43e07aF9D0875DE1', fromBlock: 21054048, dspFactory: '0x7dB214f2D46d94846936a0f8Bd9044c5C5Bd2b93', dppFactory: '0x46AF6b152F2cb02a3cFcc74014C2617BC4F6cD5C' }, + mantle: { dvmFactory: '0x29C7718e8B606cEF1c44Fe6e43e07aF9D0875DE1', fromBlock: 21054048, dspFactory: '0x7dB214f2D46d94846936a0f8Bd9044c5C5Bd2b93', dppFactory: '0x46AF6b152F2cb02a3cFcc74014C2617BC4F6cD5C', gspFactory: '0xE6cecb7460c9E52aA483cb1f0E87d78D7085686F' }, zircuit: { dvmFactory: '0xA909314363840f7c28b8EC314028e21722dd8Cb6', fromBlock: 1455081, dspFactory: '0xA312D73C1b537168f1C8588bDcaB9278df98Cd32', dppFactory: '0xb770C37F3A9eC6f25b791D9c791aDE09B0fb1AB8' }, // okexchain: { dvmFactory: '0x9aE501385Bc7996A2A4a1FBb00c8d3820611BCB5', fromBlock: 4701083, dspFactory: '0x44D5dF24d5Ef52A791D6436Fa45A8D426f6de34e' }, } Object.keys(config).forEach(chain => { - const { dvmFactory, fromBlock, dspFactory, dppFactory, dodoBirthFactory, blacklistedTokens, } = config[chain] + const { dvmFactory, fromBlock, dspFactory, gspFactory, dppFactory, dodoBirthFactory, blacklistedTokens, } = config[chain] module.exports[chain] = { tvl: async (api) => { const ownerTokens = [] @@ -44,6 +44,7 @@ Object.keys(config).forEach(chain => { } builder(dvmFactory, 'event NewDVM (address baseToken, address quoteToken, address creator, address pool)'); builder(dspFactory, 'event NewDSP(address baseToken, address quoteToken, address creator, address pool)'); + builder(gspFactory, 'event NewGSP(address baseToken, address quoteToken, address creator, address pool)'); builder(dppFactory, 'event NewDPP (address baseToken, address quoteToken, address creator, address pool)'); builder(dodoBirthFactory, 'event DODOBirth (address pool, address baseToken, address quoteToken)'); From 2365f074fd9e919745db23e0fb34321381acde7a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:42:52 +0100 Subject: [PATCH 1336/1768] track tonpump #12580 --- projects/tonpump/index.js | 15 ++++++++++++++ utils/scripts/checkTonDupes.js | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 projects/tonpump/index.js create mode 100644 utils/scripts/checkTonDupes.js diff --git a/projects/tonpump/index.js b/projects/tonpump/index.js new file mode 100644 index 0000000000..8737155ce9 --- /dev/null +++ b/projects/tonpump/index.js @@ -0,0 +1,15 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokens } = require("../helper/chain/ton"); +const { getConfig } = require("../helper/cache"); + +async function fetchTvl(api,) { + const res = await getConfig('tonpump', 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=hot') + await sumTokens({ api, tokens: [ADDRESSES.ton.TON], owners: res, onlyWhitelistedTokens: true, }) +} + +module.exports = { + timetravel: false, + ton: { + tvl: fetchTvl + } +} diff --git a/utils/scripts/checkTonDupes.js b/utils/scripts/checkTonDupes.js new file mode 100644 index 0000000000..80652ac35a --- /dev/null +++ b/utils/scripts/checkTonDupes.js @@ -0,0 +1,37 @@ +const { get } = require("../../projects/helper/http"); + +const addressBook = { + bigpump: 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=bigpump', + blum: 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=blum', + wagmi: 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=wagmi', + tonpump: 'https://tonfunstats-eqnd7.ondigitalocean.app/api/v1/getServiceTokens?service=hot', +} + +console.log('project count: ', Object.keys(addressBook).length); +const addressProjectMap = {} + +async function run() { + + await Promise.all(Object.keys(addressBook).map(async project => { + let addresses = await get(addressBook[project]); + for (let address of addresses) { + if (addressProjectMap[address]) { + addressProjectMap[address].push(project); + } else { + addressProjectMap[address] = [project]; + } + } + })) + + const duplicates = {} + for (const [address, projects] of Object.entries(addressProjectMap)) { + if (projects.length > 1) { + duplicates[address] = projects.join(', '); + } + } + + console.log('Ton meme duplicates count: ', Object.keys(duplicates).length); + console.table(Object.entries(duplicates)); +} + +run().catch(console.error).then(() => process.exit(0)); \ No newline at end of file From ba5ff8f2bdb44a549a2b53dd30e1f214dfc1d1c3 Mon Sep 17 00:00:00 2001 From: Adolf998 <154962952+Adolf998@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:43:41 +0800 Subject: [PATCH 1337/1768] update vip channel (#12579) --- projects/bouncebit-cedefi/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/bouncebit-cedefi/index.js b/projects/bouncebit-cedefi/index.js index 100eebb045..1ec098efda 100644 --- a/projects/bouncebit-cedefi/index.js +++ b/projects/bouncebit-cedefi/index.js @@ -5,7 +5,8 @@ const config = { subgraphUrl: 'https://api.studio.thegraph.com/query/96517/bb-defillama-eth/v0.0.4' }, bsc: { - subgraphUrl: 'https://api.studio.thegraph.com/query/96517/bb-defillama-bsc/v0.0.2' + subgraphUrl: 'https://api.studio.thegraph.com/query/96517/bb-defillama-bsc/v0.0.2', + subgraphUrl2: 'https://api.studio.thegraph.com/query/96517/bb-vip-defillama-bsc/v0.0.1' }, bouncebit: { main: { url: 'https://bitswap-subgraph.bouncebit.io/subgraphs/name/bb-defillama-bb' }, @@ -39,6 +40,11 @@ async function tvl(api) { fetchTokens(chain, config[chain].main.url), fetchTokens(chain, config[chain].boyya.url) ] + : chain === 'bsc' + ? [ + fetchTokens(chain, config[chain].subgraphUrl), + fetchTokens(chain, config[chain].subgraphUrl2) + ] : [fetchTokens(chain, config[chain].subgraphUrl)] ) From 5421e063b10fd5885ff679f7368be3935389cde3 Mon Sep 17 00:00:00 2001 From: Celeron Date: Fri, 6 Dec 2024 18:14:54 +0800 Subject: [PATCH 1338/1768] Add Celeron (#12578) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/celeron/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/celeron/index.js diff --git a/projects/celeron/index.js b/projects/celeron/index.js new file mode 100644 index 0000000000..6685e1a3d2 --- /dev/null +++ b/projects/celeron/index.js @@ -0,0 +1,23 @@ +const FARM_ADDRESS = "0x3384D85EC14163a9d35eeAb44261390aafD70f82"; +const FARM_IONIC_ADDRESS = "0x8D25067901B637D0eF1DF3163D782d89d53F403A"; +const CEL_ADDRESS = "0x8b83ECC4EF8FaEc5c05b7D6EC002B659BE137120"; + +async function tvl(api) { + let pools = await api.call({ abi: abiInfo.poolTvls, target: FARM_IONIC_ADDRESS }); + pools.forEach(i => api.add(i.assets, i.tvl)); +} + +async function staking(api) { + let pools = await api.call({ abi: abiInfo.poolTvls, target: FARM_ADDRESS }); + let target = pools.find((i) => i.assets === CEL_ADDRESS); + api.add(CEL_ADDRESS, target.tvl); +} + +module.exports = { + mode: { tvl, staking, }, +}; + +const abiInfo = { + poolTvls: + "function getPoolTotalTvl() view returns (tuple(uint256 pid, address assets, uint256 tvl)[])", +}; From 800ab143724caf1285233db91be097157c81b2c6 Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Fri, 6 Dec 2024 18:15:32 +0800 Subject: [PATCH 1339/1768] Add borrow interest rate calculation to spot positions (#12577) --- projects/vectis/index.js | 23 ++++++++++++++++------- projects/vectis/spotMarkets.js | 27 ++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index 1e82e546f2..d7bb8070a3 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -8,16 +8,20 @@ const { getMultipleAccounts } = require('../helper/solana') module.exports = { timetravel: false, doublecounted: true, - methodology: "Calculate sum of spot positions", + methodology: "Calculate sum of spot positions in vaults with unrealized profit and loss", solana: { tvl, }, }; +const vaultUserAddresses = [ + new PublicKey("9Zmn9v5A2YWUQj47bkEmcnc37ZsYe83rsRK8VV2j1UqX"), //Vault A + new PublicKey("4KvPuh1wG8j1pLnZUC5CuqTm2a41PWNtik1NwpLoRquE"), //Vault B + new PublicKey("Hcs63usAc6cxWccycrVwx1mrNgNSpUZaUgFm7Lw9tSkR"), //Vault C + new PublicKey("MzEPFp2LwCSMMPHLQsqfE7SN6xkPHZ8Uym2HfrH7g5P"), //Yield Compress A + new PublicKey("CMiyE7M98DSPBEhQGTA6CzNodWkNuuW4y9HoocfK75nG") //Yield Compress B + -const vaultAddresses = [ - new PublicKey("9Zmn9v5A2YWUQj47bkEmcnc37ZsYe83rsRK8VV2j1UqX"), - new PublicKey("4KvPuh1wG8j1pLnZUC5CuqTm2a41PWNtik1NwpLoRquE") ]; /** * Vault Equity Calculation Formula: @@ -37,7 +41,7 @@ const vaultAddresses = [ * */ async function tvl(api) { - const accounts = await getMultipleAccounts(vaultAddresses) + const accounts = await getMultipleAccounts(vaultUserAddresses) const deserializedData = accounts.map(deserializeUserPositions) const perpIndices = deserializedData.map(data => data.perpPositions.map(position => position.market_index)).flat() const perpKeys = perpIndices.map(index => getVaultPublicKey('perp_market', index)) @@ -50,10 +54,15 @@ async function tvl(api) { // // Process spot positions if (spotPositions?.length) { + const spotIndices = spotPositions.map(position => position.market_index) + const spotKeys = spotIndices.map(index => getVaultPublicKey('spot_market', index)) + const spotAccounts = await getMultipleAccounts(spotKeys) + const spotAccountMap = {} + spotIndices.forEach((v, i) => spotAccountMap[v] = spotAccounts[i]) + spotPositions.forEach(position => { const tokenMint = getTokenMintFromMarketIndex(position.market_index); - const adjustedBalance = processSpotPosition(position); - + const adjustedBalance = processSpotPosition(position, spotAccountMap[position.market_index]); api.add(tokenMint, adjustedBalance); }); } diff --git a/projects/vectis/spotMarkets.js b/projects/vectis/spotMarkets.js index 92bb6f3191..95694c2a1f 100644 --- a/projects/vectis/spotMarkets.js +++ b/projects/vectis/spotMarkets.js @@ -74,7 +74,7 @@ function getDecimalsByMarketIndex(marketIndex, isPerp = false) { return SPOT_MARKETS[marketIndex].decimals; } -function processSpotPosition(position) { +function processSpotPosition(position, spotMarketAccountInfo) { const decimals = getDecimalsByMarketIndex(position.market_index); const decimalAdjustment = 9 - decimals; let balance = position.scaled_balance; @@ -84,10 +84,31 @@ function processSpotPosition(position) { balance /= BigInt(10 ** decimalAdjustment); } - // Apply sign based on balance_type - return position.balance_type === 1 ? -balance : balance; + // For borrowed positions (balance_type === 1), apply interest rate + if (position.balance_type === 1) { + const cumulativeBorrowInterest = getSpotMarketCumulativeBorrowInterest(spotMarketAccountInfo); + // Apply interest rate to the balance + balance = (balance * cumulativeBorrowInterest) / BigInt(10 ** 10); + return -balance; // Return negative for borrows + } + + return balance; // Return positive for deposits } +function getSpotMarketCumulativeBorrowInterest(accountInfo) { + if (!accountInfo) { + throw new Error(`No account info found for market`); + } + + const CUMULATIVE_BORROW_INTEREST_OFFSET = 8 + 48 + 32 + 256 + (16 * 8) + 8; + + const lower64Bits = accountInfo.data.readBigInt64LE(CUMULATIVE_BORROW_INTEREST_OFFSET); + const upper64Bits = accountInfo.data.readBigInt64LE(CUMULATIVE_BORROW_INTEREST_OFFSET + 8); + + return (upper64Bits << 64n) + lower64Bits; + } + + function processPerpPosition(position) { //if perp market 0, amount needs to mul by 10 From acee95fdb13e13b5dbb1ac3c2d7f21b75300c179 Mon Sep 17 00:00:00 2001 From: thetis-market Date: Fri, 6 Dec 2024 18:19:57 +0700 Subject: [PATCH 1340/1768] Add Thetis Market (#12583) --- projects/helper/coreAssets.json | 5 ++- projects/thetis-market/index.js | 57 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 projects/thetis-market/index.js diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index c7f16e8294..39a843d928 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -809,7 +809,10 @@ "CELER_DAI": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::DaiCoin", "CELER_ETH": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WethCoin", "CELER_WBTC": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WbtcCoin", - "amAPT": "0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt" + "amAPT": "0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt", + "zWBTC": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WBTC", + "zWETH": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WETH", + "USDt": "0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b" }, "dogechain": { "WWDOGE": "0xb7ddc6414bf4f5515b52d8bdd69973ae205ff101", diff --git a/projects/thetis-market/index.js b/projects/thetis-market/index.js new file mode 100644 index 0000000000..800362e625 --- /dev/null +++ b/projects/thetis-market/index.js @@ -0,0 +1,57 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { getResource } = require("../helper/chain/aptos"); + +const POOL_TRADING_ACCOUNT = + "0x0c727553dd5019c4887581f0a89dca9c8ea400116d70e9da7164897812c6646e"; + +const APT_USDt_POOL = + "0x604440935157ff96d6e436220c708c410e1e1978bbefd6d714b70b1e5f1f11"; +const zWBTC_USDt_POOL = + "0x1166d5635ef8fd10e1aa2cb005c4a3fad91f3b452e35019d8ce90fa7634aeb"; +const zWETH_USDt_POOL = + "0x6366d76a364e565877e22f22807323ce630e3512eedf96570ae44312e4116565"; + +const Pools = [ + { + poolAddress: APT_USDt_POOL, + longToken: ADDRESSES.aptos.APT, + shortToken: ADDRESSES.aptos.USDt, + }, + { + poolAddress: zWBTC_USDt_POOL, + longToken: ADDRESSES.aptos.zWBTC, + shortToken: ADDRESSES.aptos.USDt, + }, + { + poolAddress: zWETH_USDt_POOL, + longToken: ADDRESSES.aptos.zWETH, + shortToken: ADDRESSES.aptos.USDt, + }, +]; + +async function tvl(api) { + const poolConfigs = await Promise.all([ + getResource(Pools[0].poolAddress, `${POOL_TRADING_ACCOUNT}::pool::Pool`), + getResource(Pools[1].poolAddress, `${POOL_TRADING_ACCOUNT}::pool::Pool`), + getResource(Pools[2].poolAddress, `${POOL_TRADING_ACCOUNT}::pool::Pool`), + ]); + const mergeArray = poolConfigs.map((p, i) => { + return { ...p, ...Pools[i] }; + }); + const tvlShortToken = mergeArray.map( + (p) => + Number(p.short_asset.pool_amount) + Number(p.short_asset.reserve_amount) + ); + api.add(ADDRESSES.aptos.APT, Number(mergeArray[0].long_asset.pool_amount)); + api.add(ADDRESSES.aptos.zWBTC, Number(mergeArray[1].long_asset.pool_amount)); + api.add(ADDRESSES.aptos.zWETH, Number(mergeArray[2].long_asset.pool_amount)); + api.add( + ADDRESSES.aptos.USDt, + tvlShortToken.reduce((acc, curr) => acc + curr, 0) + ); +} + +module.exports = { + timetravel: false, + aptos: { tvl }, +}; From 3be459335183dce99b389da8681836c3c6ad0ff4 Mon Sep 17 00:00:00 2001 From: LevenR <156494841+LevenR@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:52:06 +0800 Subject: [PATCH 1341/1768] Update lorenzo stBTC and enzoBTC vault bitcoin address (#12587) Co-authored-by: Leven Co-authored-by: 0xajing <163371347+0xajing@users.noreply.github.com> --- projects/helper/bitcoin-book/lorenzo-enzoBTC.js | 3 ++- projects/helper/bitcoin-book/lorenzo.js | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/helper/bitcoin-book/lorenzo-enzoBTC.js b/projects/helper/bitcoin-book/lorenzo-enzoBTC.js index bb7e56d6cb..976fbd5141 100644 --- a/projects/helper/bitcoin-book/lorenzo-enzoBTC.js +++ b/projects/helper/bitcoin-book/lorenzo-enzoBTC.js @@ -1,4 +1,5 @@ module.exports = [ 'bc1qndzgrwj3y2lhcklme4t72jxq3df2h05vjdgzpp', - '19wFRSr3GYHmVQtnmbkx7Wkjw3jZdyYB9a' + '19wFRSr3GYHmVQtnmbkx7Wkjw3jZdyYB9a', + 'bc1qa4yfx2meqadqwpmqznlct0t2j6pt5tw5xrpz06' ] \ No newline at end of file diff --git a/projects/helper/bitcoin-book/lorenzo.js b/projects/helper/bitcoin-book/lorenzo.js index 13ccded61a..5af5737f5e 100644 --- a/projects/helper/bitcoin-book/lorenzo.js +++ b/projects/helper/bitcoin-book/lorenzo.js @@ -28,5 +28,7 @@ module.exports = [ "bc1pw8za3k5upa565n0kv55e89a8l0hkzpnfenj767j0cwfu7rn83yhqvuehcd", //cap2, Delegate to Lombard FP(609b4b8e27e214fd830e69a83a8270a03f7af356f64dde433a7e4b81b2399806) - "bc1pa56692v3hxguvu8vgu5d7dh9twlj7wm87qvzvxdru3rnluv8nmdqk58ewz" + "bc1pa56692v3hxguvu8vgu5d7dh9twlj7wm87qvzvxdru3rnluv8nmdqk58ewz", + //other vault bitcoin address + "bc1pu2e56xlz284s5lh9am2k2ys2lhtau5mgq6j9fgljxt7tegsgtp3spmvk0w" ] \ No newline at end of file From 74ccb2f24c3bb51bb96c75e09ab437da2abde46c Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:54:19 +0800 Subject: [PATCH 1342/1768] add token config (#12584) --- projects/kiloex/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index a48f89d696..5e12b5225e 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -22,6 +22,7 @@ module.exports = { ADDRESSES.bsc.USDC, //usdc '0xf6718b2701d4a6498ef77d7c152b2137ab28b8a3', //stBTC '0x4aae823a6a0b376de6a78e74ecc5b079d38cbcf7', //SolvBTC + '0x2a3dc2d5daf9c8c46c954b8669f4643c6b1c081a', //uBTC ], }) }, op_bnb: { tvl: sumTokensExport({ owners: opbnb_owners, tokens: [ From 356240b9cdc1fedd170fba91135868415e54ad6e Mon Sep 17 00:00:00 2001 From: dmytro-horbatenko <148330112+dmytro-horbatenko@users.noreply.github.com> Date: Fri, 6 Dec 2024 13:56:19 +0200 Subject: [PATCH 1343/1768] Midas RWA: add mTBILL TVL for Oasis Sapphire (#12586) --- projects/midas/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/midas/index.js b/projects/midas/index.js index 2377b64c49..af5e0aa3b6 100644 --- a/projects/midas/index.js +++ b/projects/midas/index.js @@ -7,6 +7,9 @@ const config = { base: { mTBILL: '0xDD629E5241CbC5919847783e6C96B2De4754e438', mBASIS: '0x1C2757c1FeF1038428b5bEF062495ce94BBe92b2', + }, + sapphire: { + mTBILL: '0xDD629E5241CbC5919847783e6C96B2De4754e438', } } From 17aa078712f9ee89d04803da32d960debc78a0d4 Mon Sep 17 00:00:00 2001 From: garrett-vorce-compx Date: Fri, 6 Dec 2024 20:36:00 +0700 Subject: [PATCH 1344/1768] Feat/compx/add staking pools (#12582) Co-authored-by: Ronan Co-authored-by: Ronan <73086339+clooneyr@users.noreply.github.com> Co-authored-by: Xxiled <93330009+xxiled-plastic-cat@users.noreply.github.com> Co-authored-by: Garrett Vorce --- projects/compx-cdp/index.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/projects/compx-cdp/index.js b/projects/compx-cdp/index.js index 6ca472a186..8c2002de74 100644 --- a/projects/compx-cdp/index.js +++ b/projects/compx-cdp/index.js @@ -12,7 +12,15 @@ const stakingPools = [ // NIKO 'XZOKYETGUQKIJJG4LSBAFYLDQRKCT6PQUO5CZJQ37VUD2VYMWRHH2LK7MI', // TinymanPool2.0 xMcRib-ALGO - 'RNL5YCWQDLYX4WXMM43ARQVFVNO4PSGWCLNKORUUVFCXQLR2LIURETDCDI' + 'RNL5YCWQDLYX4WXMM43ARQVFVNO4PSGWCLNKORUUVFCXQLR2LIURETDCDI', + // JoeCoin + 'Y3CNVFHCAMWZP57R7S7URX366XRE6VKCHWDN57VMR7WL556OFTDXGAQZ3E', + // xUSD + 'EW6JAJOFRIXWURIIPCOCEXJ6SQ5QW2BQ7REE5CYEL4PSNYHUSIH2G55ZRI', + // cAlgo + 'ZKXS4SAXMCBVOHMWNGZZO7AXMRETLTLYLQRBO2KLSN2SPOGZCU4O3JABSA', + // Compx + 'DRZ2TY3YHPRCMD6MVWCHKFIDF4PCCQ3DOUW42MGMVOPTJVGRKORJBQTZS4', ]; From 468b4463103a23b833bbdda12d95611e2745c633 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 6 Dec 2024 14:43:33 +0100 Subject: [PATCH 1345/1768] Update: Hashnote (add Near) (#12590) --- projects/hashnote/index.js | 40 +++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/projects/hashnote/index.js b/projects/hashnote/index.js index 61cacff407..35bbcf0875 100644 --- a/projects/hashnote/index.js +++ b/projects/hashnote/index.js @@ -1,29 +1,25 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const { call } = require('../helper/chain/near') +const NEAR = '0x136471a34f6ef19fE571EFFC1CA711fdb8E49f2b' -const contracts = { - canto:{ - token: '0xfb8255f0de21acebf490f1df6f0bdd48cc1df03b', - oracle: '0x1d18c02bc80b1921255e71cf2939c03258d75470' - }, - ethereum:{ - token: '0x136471a34f6ef19fE571EFFC1CA711fdb8E49f2b', - oracle: '0x4c48bcb2160F8e0aDbf9D4F3B034f1e36d1f8b3e' - } +const CONFIG = { + canto: '0xfb8255f0de21acebf490f1df6f0bdd48cc1df03b', + ethereum: NEAR, + near: 'usyc.near' } -const tvl = async (api) => { - const totalSupply = await api.call({ target: contracts[api.chain].token, abi: 'uint256:totalSupply'}); - const rate = await api.call({ target: contracts[api.chain].oracle, abi: 'function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)'}); +const evmTvl = async (api, token) => { + const supply = await api.call({ target: token, abi: 'erc20:totalSupply' }) + api.add(NEAR, supply, { skipChain: true }) +} - return { - [ADDRESSES.ethereum.USDC]: (totalSupply * rate.answer)/1e8 - }; +const nonEvmTvl = async (api, token) => { + const supply = await call(token, 'ft_total_supply', {}); + api.add(NEAR, supply, { skipChain: true }) } -module.exports = { - canto: { - tvl - }, - ethereum:{tvl} -}; +Object.entries(CONFIG).forEach(([chain, address]) => { + module.exports[chain] = { + tvl: async (api) => (chain === 'near' ? nonEvmTvl(api, address) : evmTvl(api, address)) + }; +}); From 212ae1e9ea1e27ca42479ed5d977ee1e90520f5f Mon Sep 17 00:00:00 2001 From: tonfarmix <164873385+tonfarmix@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:43:46 +0300 Subject: [PATCH 1346/1768] [Farmix] add new staking pools (#12589) Co-authored-by: Maktd --- projects/farmix/index.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/projects/farmix/index.js b/projects/farmix/index.js index 559b765ffe..4fa1c6baec 100644 --- a/projects/farmix/index.js +++ b/projects/farmix/index.js @@ -9,15 +9,19 @@ const getPoolJettonsRateLimited = rateLimited(getPoolCurrentJettons); const POOLS = [ - 'EQC-jlX83DYZgSWRW5q_XuHLWWFQPp2xGmc8BCoeWckKpeHs', - 'EQD6gQSWCayHh0FvUnTXlpfizIWiq7UeE4gYvXGYtEhIYJ8q', - 'EQCE_6TevKEpj8OTz3rZt1D5bR6fENQbSN2bbW0jzxbWGGIo', + 'EQC-jlX83DYZgSWRW5q_XuHLWWFQPp2xGmc8BCoeWckKpeHs', // native TON + 'EQD6gQSWCayHh0FvUnTXlpfizIWiq7UeE4gYvXGYtEhIYJ8q', // USDT + 'EQCE_6TevKEpj8OTz3rZt1D5bR6fENQbSN2bbW0jzxbWGGIo', // NOT + 'EQDuM7dM6mw0vAMurdY0hTNREenlZR1yCurqqo99q3o42nCi', // stTON + 'EQC2HxXptnU7vstREZOHyheGTafnFNSlVus5Iwd8Ik89Q7dD' // tsTON ] const UNDERLYING_JETTONS = [ ADDRESSES.ton.TON, ADDRESSES.ton.USDT, ADDRESSES.ton.NOT, + ADDRESSES.ton.TON, + ADDRESSES.ton.TON, ] From 725b16a9e3eaaa5760dfc0db04ae692d9b6610bb Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:12:33 +0100 Subject: [PATCH 1347/1768] Feat: Opentrade RWA (Tbills+USD) (#12588) --- projects/opentrade/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 projects/opentrade/index.js diff --git a/projects/opentrade/index.js b/projects/opentrade/index.js new file mode 100644 index 0000000000..2e1a034024 --- /dev/null +++ b/projects/opentrade/index.js @@ -0,0 +1,27 @@ +const CONFIG = { + ethereum: [ + '0x3ee320c9f73a84d1717557af00695a34b26d1f1d', // XEVT + '0x0bbc2be1333575f00ed9db96f013a31fdb12a5eb', // TBV1 + '0x30c3115dca6370c185d5d06407f29d3ddbc4cfc4', // TBV2 + '0x7bfb97fe849172608895fd4c62237cb42a8607d2', // TBV3 + '0xa65446265517a29f7427abb1279165eb61624dd0', // TBV4 + '0x0f8cbdc544dc1d4bd1bdafe0039be07b825af82a', // XTBT + ], + avax: [ + '0xbb9360d57f68075e98d022784c12f2fda082316b', // XRV1 + '0xad6605f4987031fd2d6d6816be53eb7c5b764bf7', // XTBT + ] +} + + +const tvl = async (api, tokens) => { + const [assets, balances] = await Promise.all([ + api.multiCall({ calls: tokens, abi: 'address:liquidityAssetAddr' }), + api.multiCall({ calls: tokens, abi: 'uint256:totalAssets' }), + ]) + api.add(assets, balances) +} + +Object.entries(CONFIG).forEach(([chain, tokens]) => { + module.exports[chain] = { tvl: async (api) => tvl(api, tokens) } +}) \ No newline at end of file From 03de5f3801def3bc197c0846468364dacc0bc2fa Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 6 Dec 2024 18:40:56 +0000 Subject: [PATCH 1348/1768] add arena of faith stake mining --- projects/aof-stake-mining/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/aof-stake-mining/index.js diff --git a/projects/aof-stake-mining/index.js b/projects/aof-stake-mining/index.js new file mode 100644 index 0000000000..5f58b7ccb5 --- /dev/null +++ b/projects/aof-stake-mining/index.js @@ -0,0 +1,11 @@ +const { treasuryExports } = require("../helper/treasury"); +const { nullAddress } = require('../helper/tokenMapping'); + +module.exports = treasuryExports({ + metis: { + owners: ['0x946D86422775E7B32F3F8f0580504EADccF9b800'], + tokens: [ + nullAddress, + ], + }, + }) \ No newline at end of file From 7dd443184cca120232964ba850ac1b66d3454a2a Mon Sep 17 00:00:00 2001 From: David Lee Date: Sat, 7 Dec 2024 03:19:28 -0500 Subject: [PATCH 1349/1768] Add additional stablecoins (#12599) --- projects/level-money/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/level-money/index.js b/projects/level-money/index.js index d487654609..dd8bce06cb 100644 --- a/projects/level-money/index.js +++ b/projects/level-money/index.js @@ -33,6 +33,12 @@ const TOKEN_CONTRACTS = [ "0x5C5b196aBE0d54485975D1Ec29617D42D9198326", // stdeUSD AUSDC, AUSDT, + "0x437cc33344a0B27A429f795ff6B469C72698B291", // smart M + "0x8a60e489004ca22d775c5f2c657598278d17d9c2", // USDa (Avalon) + "0x2b66aade1e9c062ff411bd47c44e0ad696d43bd9", // staked USDa (Avalon) + "0x4956b52aE2fF65D74CA2d61207523288e4528f96", // RLP + "0x66a1E37c9b0eAddca17d3662D6c05F4DECf3e110", // USR + "0xfd03723a9a3abe0562451496a9a394d2c4bad4ab" // DYAD ]; module.exports = { From 93493cabf8bd9f414f9f9db0e449a115f17fe8a1 Mon Sep 17 00:00:00 2001 From: Five Stars <146636499+fivestarsfi@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:19:46 +0300 Subject: [PATCH 1350/1768] Syde Update - Back to old upgrade Addresses (#12598) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/syde/index.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/projects/syde/index.js b/projects/syde/index.js index 35f7dbfc48..8becae7d9a 100644 --- a/projects/syde/index.js +++ b/projects/syde/index.js @@ -1,14 +1,13 @@ - const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); -const sydeBtcPool = "EQBm9Ns0p98h74liNdYn-jOnJ79BT5cm--LIAeoYlfeWzQOk" -const sydeEthPool = "EQCo4FcMyezTvv2xOY-6iW4AAGahV2u8tkMxVT90gDz0sk5t" -const sydeEurPool = "EQC9H5G-VrnnwFa60pn08t5EqNMREW8NscnqL13W2jl9je4P" +const sydeBtcPool = "EQA2J0WCTdYdG-XeyMpPBTeu2dWB2f0oFiV4KVRfV0gewF4E" +const sydeEthPool = "EQD-7ycFO3yeh0EeT2wgXoOQmu64rdDBXqGm4nHDInPfCxJG" +const sydeEurPool = "EQDXvkuKPZahcTDRHSybwiU0E5VpiGFP2QS2iHr082JmtTT9" module.exports = { methodology: 'Counts Syde smartcontract balance as TVL.', ton: { tvl: sumTokensExport({ owners: [sydeBtcPool, sydeEthPool, sydeEurPool], tokens: [ADDRESSES.null]}), } -} \ No newline at end of file +} From b75ffeb3300f1c80ea51082b1781e913e9eedf81 Mon Sep 17 00:00:00 2001 From: Oleh Kyslashko Date: Sat, 7 Dec 2024 10:25:55 +0200 Subject: [PATCH 1351/1768] update delea contracts (#12594) --- projects/Delea/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/Delea/index.js b/projects/Delea/index.js index 7e6d957998..b285666eac 100644 --- a/projects/Delea/index.js +++ b/projects/Delea/index.js @@ -1,9 +1,18 @@ const { sumTokensExport } = require("../helper/chain/ton"); const ADDRESSES = require("../helper/coreAssets.json"); +const ownersList = [ + "EQB6rkS8xt3Ey4XugdVqQDe1vt4KJDh813_k2ceoONTCBnyD", + "EQCwIIRKpuV9fQpQxdTMhLAO30MNHa6GOYd00TsySOOYtA9n", + "EQA2OzCuP8-d_lN2MYxLv5WCNfpLH1NUuugppOZBZgNYn-aa", + "EQCgGUMB_u1Gkrskw2o407Ig8ymQmfkxWuPW2d4INuQoPFJO", + "EQA6Xba1d30QeSTVW7-cIAq-WHD9ZBFg90dQ7CB8mQ2Cxx25", + "EQADnjMkZBCS7-zKAPGHwFXGdd8b85m3bRDm52AX__ORLey-" +]; + module.exports = { methodology: 'Counts Delea smartcontract balance as TVL.', ton: { - tvl: sumTokensExport({ owners: ["EQB6rkS8xt3Ey4XugdVqQDe1vt4KJDh813_k2ceoONTCBnyD", "EQCwIIRKpuV9fQpQxdTMhLAO30MNHa6GOYd00TsySOOYtA9n", "EQA2OzCuP8-d_lN2MYxLv5WCNfpLH1NUuugppOZBZgNYn-aa", "EQCgGUMB_u1Gkrskw2o407Ig8ymQmfkxWuPW2d4INuQoPFJO"], tokens: [ADDRESSES.null]}), + tvl: sumTokensExport({ owners: ownersList, tokens: [ADDRESSES.null]}), } } From a7667d9845d1e3220a8279022393d7fe8ec5343d Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Sat, 7 Dec 2024 09:26:08 +0100 Subject: [PATCH 1352/1768] Update: Franklin-Templeton (add Ethereum) (#12592) --- projects/franklinTempleton-finance/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/franklinTempleton-finance/index.js b/projects/franklinTempleton-finance/index.js index 01f33d2aab..dfaa7d7614 100644 --- a/projects/franklinTempleton-finance/index.js +++ b/projects/franklinTempleton-finance/index.js @@ -5,7 +5,8 @@ const BENJI = { arbitrum: '0xb9e4765bce2609bc1949592059b17ea72fee6c6a', polygon: '0x408a634b8a8f0de729b48574a3a7ec3fe820b00a', avax: '0xe08b4c1005603427420e64252a8b120cace4d122', - base: '0x60cfc2b186a4cf647486e42c42b11cc6d571d1e4' + base: '0x60cfc2b186a4cf647486e42c42b11cc6d571d1e4', + ethereum: '0x3ddc84940ab509c11b20b76b466933f40b750dc9' } const stellarTvl = async (api) => { From 8233da81f8ed5d80db213313a99522de3dc8b73f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 7 Dec 2024 10:55:16 +0100 Subject: [PATCH 1353/1768] track plunderswap v3 --- projects/helper/env.js | 2 ++ projects/helper/tokenMapping.js | 8 +++++++- projects/plunderswap-v3/index.js | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 projects/plunderswap-v3/index.js diff --git a/projects/helper/env.js b/projects/helper/env.js index 7f71644488..461d4435ed 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -1,3 +1,4 @@ + const BOOL_KEYS = [ 'HISTORICAL', 'LLAMA_DEBUG_MODE', @@ -33,6 +34,7 @@ const DEFAULTS = { RBN_RPC: "https://governors.mainnet.redbelly.network", CORN_RPC: "https://rpc.ankr.com/corn_maizenet", ACE_RPC_MULTICALL: "0x025A2B4fCE1E0bD736D5cebe6C8a52229795376B", + ZILLIQA_RPC_MULTICALL: "0x38899efb93d5106d3adb86662c557f237f6ecf57", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ac9c1d35e9..31fcf58c00 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -88,12 +88,18 @@ const fixBalancesTokens = { starknet: { [ADDRESSES.starknet.BROTHER]: { coingeckoId: "starknet-brother", decimals: 18 }, }, - corn:{ + corn: { '0xda5ddd7270381a7c2717ad10d1c0ecb19e3cdfb2': { coingeckoId: "bitcoin", decimals: 18 }, }, nibiru: { 'unibi': { coingeckoId: "nibiru", decimals: 6 }, }, + zilliqa: { + '0x097c26f8a93009fd9d98561384b5014d64ae17c2': { coingeckoId: "stzil", decimals: 12 }, + '0x03a79429acc808e4261a68b0117acd43cb0fdbfa': { coingeckoId: "governance-zil", decimals: 15 }, + '0xccf3ea256d42aeef0ee0e39bfc94baa9fa14b0ba': { coingeckoId: "xcad-network", decimals: 18 }, + '0xe64ca52ef34fdd7e20c0c7fb2e392cc9b4f6d049': { coingeckoId: "kalijo", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/plunderswap-v3/index.js b/projects/plunderswap-v3/index.js new file mode 100644 index 0000000000..6cedf4d7d7 --- /dev/null +++ b/projects/plunderswap-v3/index.js @@ -0,0 +1,14 @@ +const { getConfig } = require('../helper/cache') +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + const data = await getConfig('plunderswap', 'https://static.plunderswap.com/PlunderswapPoolPrices.json') + const v3Pairs = data.filter(pair => pair.version === 'V3').map(pair => pair.address) + const token0s = await api.multiCall({ abi: 'address:token0', calls: v3Pairs }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: v3Pairs }) + return sumTokens2({ api, tokensAndOwners2: [token0s.concat(token1s), v3Pairs.concat(v3Pairs)] }) +} + +module.exports = { + zilliqa: { tvl } +} \ No newline at end of file From 47d13242fcfbf4dded7b8b7111a7f3d2c7b845c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1?= <165295358+cybro-developer@users.noreply.github.com> Date: Sat, 7 Dec 2024 14:01:54 +0000 Subject: [PATCH 1354/1768] Add more cybro vaults (#12604) --- projects/cybro/index.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/projects/cybro/index.js b/projects/cybro/index.js index 2472f233b5..0e9c8b243c 100644 --- a/projects/cybro/index.js +++ b/projects/cybro/index.js @@ -1,23 +1,25 @@ const vaults = [ - '0xc9434fbee4ec9e0bad7d067b35d2329e5f1d8915', - '0xf56dab7b7b2954aa86a591f164205e6cdd33797e', - '0x4caec64454893c7912e6beb1e19b4714dd353748', - '0xb4e96a45699b4cfc08bb6dd71eb1276bfe4e26e7', + '0xe922bccf90d74f02a9d4203b377399314e008e41', + '0xdccde9c6800bea86e2e91cf54a870ba3ff6faf9f', + '0x0667ac28015ed7146f19b2d218f81218abf32951', '0x9c3d4e6f96d2c3ddd8afee3891b955283a920889', - '0x4f3da57dbfb2b85c96e3556c5f1859ef88f5d6b1', - '0x7458ac85593472ba501ee361449638ed180a7ee7', - '0x83eaed4393328f77d0e402018a369b8b82e501a4', - '0x18e22f3f9a9652ee3a667d78911bac55bc2249af', '0xd58826d2c0babf1a60d8b508160b52e9c19aff07', + '0x7458ac85593472ba501ee361449638ed180a7ee7', + '0xdb5e7d5ac4e09206fed80efd7abd9976357e1c03', '0x567103a40c408b2b8f766016c57a092a180397a1', - '0xe922bccf90d74f02a9d4203b377399314e008e41', - '0x0667ac28015ed7146f19b2d218f81218abf32951', - '0xdccde9c6800bea86e2e91cf54a870ba3ff6faf9f', - '0x9cc62ef691e869c05fd2ec41839889d4e74c3a3f', + '0xc66fc517c8bf1c34ae48529df53dd84469e21daa', '0x3500e1d4e93c9f45aa8198efda16842cb73fa1bc', - '0x6654cddf2a14a06307af6a8d7731dd4e059962a1', - '0xdb5e7d5ac4e09206fed80efd7abd9976357e1c03', + '0xb4e96a45699b4cfc08bb6dd71eb1276bfe4e26e7', '0x3db2bd838c2bed431dcfa012c3419b7e94d78456', + '0xf56dab7b7b2954aa86a591f164205e6cdd33797e', + '0x83eaed4393328f77d0e402018a369b8b82e501a4', + '0x4f3da57dbfb2b85c96e3556c5f1859ef88f5d6b1', + '0x9cc62ef691e869c05fd2ec41839889d4e74c3a3f', + '0xc9434fbee4ec9e0bad7d067b35d2329e5f1d8915', + '0x18e22f3f9a9652ee3a667d78911bac55bc2249af', + '0x6654cddf2a14a06307af6a8d7731dd4e059962a1', + '0x4caec64454893c7912e6beb1e19b4714dd353748', + '0x24e72c2c7be9b07942f6f8d3cdce995df699514d', ] async function tvl(api) { From b0908f33a5befa982cc354f968835f33e9391b3c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 7 Dec 2024 15:02:41 +0100 Subject: [PATCH 1355/1768] minor fix --- projects/helper/tokenMapping.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 31fcf58c00..0a200e0566 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -61,6 +61,7 @@ const fixBalancesTokens = { }, arbitrum: { '0xbbeb34F9d50e0BABe1bd03Fd4120296354510529': { coingeckoId: "ignition-fbtc", decimals: 8 }, + '0x211cc4dd073734da055fbf44a2b4667d5e5fe5d2': { coingeckoId: "ethena-staked-usde", decimals: 18 }, }, bsc: { '0x2B25f4F134a56054b2b6388C2750F1eA3877e02b': { coingeckoId: "ignition-fbtc", decimals: 8 }, From e34dcd25b494b0c451040ef3f01e141f5138d108 Mon Sep 17 00:00:00 2001 From: Kacper Bak <290936+kbak@users.noreply.github.com> Date: Sat, 7 Dec 2024 15:18:57 +0100 Subject: [PATCH 1356/1768] added gud.tech adapter (#12603) --- projects/gud-tech/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/gud-tech/index.js diff --git a/projects/gud-tech/index.js b/projects/gud-tech/index.js new file mode 100644 index 0000000000..450d69d2e8 --- /dev/null +++ b/projects/gud-tech/index.js @@ -0,0 +1,17 @@ +const { getLogs2 } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const config = { + zircuit: { factory: '0xF9D8fC35C11cF6acd3D04CA1C3F7F4Fa65e20dCf', fromBlock: 6586739, missing: ['0xfd418e42783382e86ae91e445406600ba144d162']}, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, missing = [] } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: 'event TokenStakabilityChanged(address token, bool enabled)', fromBlock, }) + const tokens = logs.map(i => i.token).concat(missing) + return sumTokens2({ api, owner: factory, tokens, permitFailure: true, }) + } + } +}) \ No newline at end of file From 39637c310ad2bfc4515953d0ebd678cf5b931147 Mon Sep 17 00:00:00 2001 From: CardanoTokenIO <163329108+CardanoTokenIO@users.noreply.github.com> Date: Sun, 8 Dec 2024 16:23:23 +0100 Subject: [PATCH 1357/1768] Update sript address - Include more addresses related to the protocol (#12608) --- projects/danzo-arena/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/danzo-arena/index.js b/projects/danzo-arena/index.js index 6d896b7e83..76cc62fb10 100644 --- a/projects/danzo-arena/index.js +++ b/projects/danzo-arena/index.js @@ -3,7 +3,11 @@ const { sumTokensExport } = require("../helper/chain/cardano"); const scriptAdresses = [ "addr1vx4caaf06swdn7cdfc7pu3sw235zvuhd02tw2np4uac9mwcp2vt4y", //Danzo Tokens locked inside the address for the DeFi game DANZO ARENA: https://danzo.gg/arena/ "addr1q8wu9v2wn8hkzq2g7q3ez8a99thw0gwmlhgpc2crmfk982xr2rqrszevgfwunrxu8ajh7pfhmaf6ppj60nj8rnhqhl4srgnekp", //Danzo Tokens locked inside the address for the DeFi game DANZO Game: https://danzo.gg - "addr1vxherk6ug9235v0mrrmywsr2493sxsydmaylzajs7xavd9q30593r", //Sugar tokens locked inside the address for the DeFi game Sugar Factory: https://sugar.systems/factory + "addr1vxherk6ug9235v0mrrmywsr2493sxsydmaylzajs7xavd9q30593r", //Sugar tokens locked inside the address for the DeFi game Sugar Factory: https://sugarcardano.io/factory +"addr1vy3jm4p3s0ufyu4y7zv9jhzzf3uj0j5r9zegkge7gpdt7zgk33jxw", //Cock tokens locked inside the address for the DeFi game Cock Arena: https://cockcardano.io/arena +"addr1vxqnqk9vfxne3p3ecktnshjjjvyzfxc9pgyf9ux76nrukpq4j73z8", +"addr1vxh2lgfhrd65zer39d5a2lyfsmke9628n4fcu92yvq4ufgcuuy7th", +"addr1v8zyytsux8kg0ues0xd40m9yvghjs6s3vr92ndujq3lxqzscq75s0" ]; module.exports = { From c9d9c7672da035962106ab688be649fb3037ab0e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 11:30:45 +0100 Subject: [PATCH 1358/1768] fix noble --- projects/helper/chain/cosmos.js | 2 +- projects/noble/index.js | 27 +++++++++------------------ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index 404411154b..7f2a9566aa 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -43,7 +43,7 @@ const endPoints = { nibiru: "https://lcd.nibiru.fi", bostrom: "https://lcd.bostrom.cybernode.ai", joltify: "https://lcd.joltify.io", - noble: "https://api.noble.xyz" + noble: "https://noble-api.polkachu.com" }; const chainSubpaths = { diff --git a/projects/noble/index.js b/projects/noble/index.js index ec6c789752..1eaac59235 100644 --- a/projects/noble/index.js +++ b/projects/noble/index.js @@ -1,26 +1,17 @@ const { queryV1Beta1 } = require('../helper/chain/cosmos'); -const { sumTokens2 } = require('../helper/unwrapLPs'); - -const NOBLE_DENOMS_URL = 'bank/v1beta1/denoms_metadata'; -const NOBLE_SUPPLY_URL = 'bank/v1beta1/supply/'; +const NOBLE_SUPPLY_URL = 'bank/v1beta1/supply'; const IGNORE_DENOMS = ['ufrienzies', 'ustake']; async function tvl(api) { - const { metadatas } = await queryV1Beta1({ api, url: NOBLE_DENOMS_URL }); - - for (const metadata of metadatas) { - const baseDenom = metadata.base; - - // ignore invalid denoms - if (IGNORE_DENOMS.includes(baseDenom)) - continue; - - // fetch supply for denom - const { amount } = await queryV1Beta1({ api, url: `${NOBLE_SUPPLY_URL}${baseDenom}` }); - api.add(baseDenom, amount.amount); - } - return sumTokens2({ api }); + let key + do { + const { supply, pagination } = await queryV1Beta1({ api, url: `${NOBLE_SUPPLY_URL}?pagination.key=${key || ''}` }) + key = pagination.next_key + console.log(key) + supply.forEach(i => api.add(i.denom, i.amount)) + } while (key); + IGNORE_DENOMS.forEach(denom => api.removeTokenBalance(denom)) } module.exports = { From 9893d5fd600d3a55c2989941a1d6d3589368f4e5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 11:48:12 +0100 Subject: [PATCH 1359/1768] echelon: disable isolated lending as it was not working --- projects/echelon/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/echelon/index.js b/projects/echelon/index.js index 9d8b9c12aa..aabcafabef 100644 --- a/projects/echelon/index.js +++ b/projects/echelon/index.js @@ -4,7 +4,7 @@ const { transformBalances } = require("../helper/portedTokens"); const { get } = require("../helper/http"); const mainLendingContract = "0xc6bc659f1649553c1a3fa05d9727433dc03843baac29473c817d06d39e7621ba"; -const isolatedLendingContract = "0x024c90c44edf46aa02c3e370725b918a59c52b5aa551388feb258bd5a1e82271"; +const isolatedLendingContract = "0x5d22fc881144fb4bbaa40b2abf954348082e133fdcd01f7531574df421bde71d"; const coinAssetType = '300'; // main pool @@ -56,7 +56,7 @@ module.exports = { markets.forEach(({ cash, coin }) => { sdk.util.sumSingleBalance(balances, coin, cash); }); - +/* const isolatedPairAddresses = await getIsolatedPairAddresses(); const pairs = await Promise.all(isolatedPairAddresses.map(pairAddress => getPair(pairAddress))); pairs.forEach(({ collateral_token, total_collateral_amount, asset_token, total_supply_amount, total_borrow_amount }) => { @@ -64,7 +64,7 @@ module.exports = { sdk.util.sumSingleBalance(balances, collateral_token, total_collateral_amount); // isolated pair asset tvl (supply - borrow) sdk.util.sumSingleBalance(balances, asset_token, Number(total_supply_amount) - Number(total_borrow_amount)); - }); + }); */ return transformBalances("aptos", balances); }, @@ -77,11 +77,11 @@ module.exports = { sdk.util.sumSingleBalance(balances, coin, liability); }); - const isolatedPairAddresses = await getIsolatedPairAddresses(); + /* const isolatedPairAddresses = await getIsolatedPairAddresses(); const pairs = await Promise.all(isolatedPairAddresses.map(pairAddress => getPair(pairAddress))); pairs.forEach(({ asset_token, total_borrow_amount }) => { sdk.util.sumSingleBalance(balances, asset_token, total_borrow_amount); - }); + }); */ return transformBalances("aptos", balances); } From b42c228d99b192369a1907b4a455452e33ffa6ca Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 12:02:12 +0100 Subject: [PATCH 1360/1768] temp fix for orca --- projects/helper/solana.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/helper/solana.js b/projects/helper/solana.js index 3f09416a98..c525e7cc96 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -175,6 +175,9 @@ function exportDexTVL(DEX_PROGRAM_ID, getTokenAccounts, chain = 'solana') { const tokenAccounts = [] programAccounts.forEach((account) => { + if (DEX_PROGRAM_ID === '9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP' && account.account.space < 324) { + return; + } const tokenSwap = decodeAccount('tokenSwap', account.account); tokenAccounts.push(tokenSwap.tokenAccountA.toString()) tokenAccounts.push(tokenSwap.tokenAccountB.toString()) From 81f17448b4ba1bb1cebd61932def35de2972d745 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 9 Dec 2024 11:32:53 +0000 Subject: [PATCH 1361/1768] add tapbit cex (#12618) --- projects/helper/bitcoin-book/index.js | 4 +++- projects/helper/bitcoin-book/tapbit-cex.js | 4 ++++ projects/tapbit-cex/index.js | 13 +++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 projects/helper/bitcoin-book/tapbit-cex.js create mode 100644 projects/tapbit-cex/index.js diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 1d9b806e8d..2947a5084f 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -88,6 +88,7 @@ const arkhamExchange = require('./arkham-exchange.js') const chakra = require('./chakra.js') const nerveNetworkBridge = require('./nervenetworkbridge.js') const nexusbtc = require('./nexusbtc') +const tapbit = require('./tapbit-cex.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -194,5 +195,6 @@ module.exports = { arkhamExchange, chakra, nerveNetworkBridge, - nexusbtc + nexusbtc, + tapbit } diff --git a/projects/helper/bitcoin-book/tapbit-cex.js b/projects/helper/bitcoin-book/tapbit-cex.js new file mode 100644 index 0000000000..efd5be2de2 --- /dev/null +++ b/projects/helper/bitcoin-book/tapbit-cex.js @@ -0,0 +1,4 @@ +module.exports = [ + "1HSRxFoxC7HYbNutGyxCNXmGT1FG3M2Bt3", + "1PUvhYpjgvgjzmiwSCuGNqKQjKde29eFbH" + ] \ No newline at end of file diff --git a/projects/tapbit-cex/index.js b/projects/tapbit-cex/index.js new file mode 100644 index 0000000000..b0a2fb0e96 --- /dev/null +++ b/projects/tapbit-cex/index.js @@ -0,0 +1,13 @@ +const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require("../helper/bitcoin-book/index.js"); + +const config = { + ethereum: { + owners: ["0x33b9b598fb490f17426da7b7d344ead1bc3915dd"], + }, + bitcoin: { + owners: bitcoinAddressBook.tapbit, + }, +}; + +module.exports = cexExports(config); From 6b8d707805bf92a75faee8050c69fc69e836cb66 Mon Sep 17 00:00:00 2001 From: velo-tech <57611908+velo-tech@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:38:06 +0700 Subject: [PATCH 1362/1768] Update index.js (#12616) --- projects/velo/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/velo/index.js b/projects/velo/index.js index 172b47fed8..30ae9353b3 100644 --- a/projects/velo/index.js +++ b/projects/velo/index.js @@ -12,7 +12,8 @@ const AprFixLockedAddresses = [ "0xDa000FA80C5E9cb4E24a66bFF6a56cC454422e78", "0xEfA6EAbcb5fa35827DDB236046B3DDB6d257022B", "0xc12A93bf62CfD50620BCfDDD903913903DF647B4", - "0xc322a2110958c1365e88D88aef65Ebdf335b6E67" + "0xc322a2110958c1365e88D88aef65Ebdf335b6E67", + "0x7dd617eacd7Fd35f69275f943Ff82218213796b7" ]; const AprFixLockWithChangeableRatioTvl = [ From 5e1b392f94b6e528b8874d9199a38036b13faf94 Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Mon, 9 Dec 2024 19:41:08 +0800 Subject: [PATCH 1363/1768] Track StakeStone STONEBTC TVL (#12615) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/stakestone-stonebtc/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/stakestone-stonebtc/index.js diff --git a/projects/stakestone-stonebtc/index.js b/projects/stakestone-stonebtc/index.js new file mode 100644 index 0000000000..389449b041 --- /dev/null +++ b/projects/stakestone-stonebtc/index.js @@ -0,0 +1,16 @@ +const vaultABI = { + "getUnderlyings": "function getUnderlyings() external view returns (address[])" +} + +const Vault = '0x1fC603779DC6b4866769A58067777D2C52628226'; + +const Tvl = async (api) => { + const btclist = await api.call({ abi: vaultABI.getUnderlyings, target: Vault }) + return api.sumTokens({ owner: Vault, tokens: btclist }) +} + +module.exports = { + ethereum: { + tvl: Tvl, + } +} From 2f765215f68b1b3b778be66f7ffb6bd19facbe50 Mon Sep 17 00:00:00 2001 From: Ss5h Date: Mon, 9 Dec 2024 20:46:28 +0900 Subject: [PATCH 1364/1768] add core btc (#12612) --- projects/btcfi-cdp/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/btcfi-cdp/index.js b/projects/btcfi-cdp/index.js index 8886bd5226..74798ef459 100644 --- a/projects/btcfi-cdp/index.js +++ b/projects/btcfi-cdp/index.js @@ -9,6 +9,10 @@ const chainPools = { BTCB: { pool: '0xee66D8C40282439F2eE855D8a3666FB73257D349', token: ADDRESSES.bfc.BTCB }, cbBTC: { pool: '0xED00a5201607aa26CDDcdcf1583845e7435a2F39', token: ADDRESSES.bfc.cbBTC } }, + core: { + WBTC: { pool: '0x872b347cd764d46c127ffefbcaB605FFF3f3a48C', token: "0x7A6888c85eDBA8E38F6C7E0485212da602761C08" }, + BTCB: { pool: '0x872b347cd764d46c127ffefbcaB605FFF3f3a48C', token: "0x5832f53d147b3d6Cd4578B9CBD62425C7ea9d0Bd" } + } } async function bitcoinTvl() { From 163c9313716ec347b2cd3723a081f1377e27fda0 Mon Sep 17 00:00:00 2001 From: fightingm <417300459@qq.com> Date: Mon, 9 Dec 2024 19:47:18 +0800 Subject: [PATCH 1365/1768] feat: edit pionex config (#12611) Co-authored-by: KaiMing Xu --- projects/pionex-cex/index.js | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/projects/pionex-cex/index.js b/projects/pionex-cex/index.js index 7abac83d70..5a5e2747f9 100644 --- a/projects/pionex-cex/index.js +++ b/projects/pionex-cex/index.js @@ -12,7 +12,11 @@ const config = { "0x5e483d7803a8b39f0d6792a0431176a91fde6e31", "0x7175a01564ac4a83dd396e288a2707dee86caf63", "0x4998cb57364531560f4048213ba9b529ec27f14f", - "0x02104cae462af17739cc4315ef9ac710a9ed22a7" + "0x02104cae462af17739cc4315ef9ac710a9ed22a7", + "0x3c22c17501047d862b3a98e296079966aefd8df7", + "0xbbb72ba600d8493fea284d5fe44919f7b60d53f5", + "0x67be8ce27ef8158d51d8593bb5b26eafacc955d9", + "0xee5b5b923ffce93a870b3104b7ca09c3db80047a" ], }, bitcoin: { @@ -28,9 +32,35 @@ const config = { "TJZj4RS6v6U3HCpTSJ7CwNycRcoi7BREGx", "TLK8GVBqJNmcyaN5mpSPSzQfTjsSxb7sC9", "TGgMNPxdyUgdYwMSbMkpTPvaSkrRakKqcK", - "TAA7sxJ259JgstGPjanb5sB6ZJuCPtCobs" + "TAA7sxJ259JgstGPjanb5sB6ZJuCPtCobs", + "TJDENsfBJs4RFETt1X1W8wMDc8M5XnJhCe", + "TKRksVBKDBATKcifm4FXFHcD1FmJQ2bp3x" ], }, + solana: { + owners:[ + "DGFW1Effv88XzXkgfgyoFfmefzEU5Pp9zWJACBmCSh8K", + "FXv8hUveo3Di254W5vycvouxrmTJG4oQ5QMm1tLhY3NF" + ] + }, + bsc: { + owners:[ + "0xF6D4E5a7c5215F91f59a95065190CCa24bf64554", + "0x67be8ce27ef8158d51d8593bb5b26eafacc955d9" + ] + }, + optimism:{ + owners: [ + "0xF6D4E5a7c5215F91f59a95065190CCa24bf64554" + ] + }, + arbitrum: { + owners: [ + "0xF6D4E5a7c5215F91f59a95065190CCa24bf64554", + "0x67be8ce27ef8158d51d8593bb5b26eafacc955d9" + ] + }, + } module.exports = cexExports(config) \ No newline at end of file From 75e14a897a77d08e1c3c6556835a66431c0fadbe Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:37:32 +0100 Subject: [PATCH 1366/1768] add zil CG tokens #12607 --- projects/helper/tokenMapping.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 0a200e0566..2fed8c486e 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -100,6 +100,10 @@ const fixBalancesTokens = { '0x03a79429acc808e4261a68b0117acd43cb0fdbfa': { coingeckoId: "governance-zil", decimals: 15 }, '0xccf3ea256d42aeef0ee0e39bfc94baa9fa14b0ba': { coingeckoId: "xcad-network", decimals: 18 }, '0xe64ca52ef34fdd7e20c0c7fb2e392cc9b4f6d049': { coingeckoId: "kalijo", decimals: 18 }, + '0xe9d47623bb2b3c497668b34fcf61e101a7ea4058': { coingeckoId: "lunr-token", decimals: 4 }, + '0x9c3fe3f471d8380297e4fb222efb313ee94dfa0f': { coingeckoId: "zilpepe", decimals: 18 }, + '0x7d2ff48c6b59229d448473d267a714d29f078d3e': { coingeckoId: "zilstream", decimals: 8 }, + '0x241c677d9969419800402521ae87c411897a029f': { coingeckoId: "web3war", decimals: 12 }, }, } From 40c7f3e6f6e9f3c9dea25019685bd4075493e6b6 Mon Sep 17 00:00:00 2001 From: Beem Date: Mon, 9 Dec 2024 13:34:26 +0000 Subject: [PATCH 1367/1768] Radix: rly.fun TVL (#12606) --- projects/rlyfun/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/rlyfun/index.js diff --git a/projects/rlyfun/index.js b/projects/rlyfun/index.js new file mode 100644 index 0000000000..21071e2932 --- /dev/null +++ b/projects/rlyfun/index.js @@ -0,0 +1,14 @@ + +const { get } = require('../helper/http') + +async function tvl(api) { + const { tvl } = await get('https://api.radlock.io/tvl/rlyfun') + return { + 'radix': tvl + } +} + +module.exports = { + timetravel: false, + radixdlt: { tvl } +} From bf1836b325355b9391fa6ec0854fe8510355b066 Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:56:53 +0100 Subject: [PATCH 1368/1768] SwissBorg: Add new wallets (#12621) --- projects/swissborg/index.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index 052e2e97ac..ba5c888a26 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -88,6 +88,7 @@ const config = { '0xcDE4c1b984F3F02f997ECfF9980B06316de2577d', '0x7153D2ef9F14a6b1Bb2Ed822745f65E58d836C3F', '0xFF4606bd3884554CDbDabd9B6e25E2faD4f6fc54', + '0x9531AA9883bF11f2a63d86caD7e826f37Acec3c4', ] }, polygon: { @@ -110,13 +111,9 @@ const config = { arbitrum: { owners: [ '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', + '0x5509Be53b2dD0CD6fb8473B0EdA94e0a3059b73a', ] }, - // injective: { - // owners: [ - // 'inj1wvhk7xhzf9kus9a4tpa6v8vhuqvm265rz7zd6n', - // ] - // } } module.exports = cexExports(config) From 6728c82d8b7f578a4746ad0fac9dc46ba1727204 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:07:11 +0100 Subject: [PATCH 1369/1768] track hyperfluid #12622 --- projects/hyperfluid/index.js | 68 ++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 projects/hyperfluid/index.js diff --git a/projects/hyperfluid/index.js b/projects/hyperfluid/index.js new file mode 100644 index 0000000000..aea4412314 --- /dev/null +++ b/projects/hyperfluid/index.js @@ -0,0 +1,68 @@ +const { function_view } = require("../helper/chain/aptos"); + +async function _getPoolInfo(offset, limit) { + const poolInfo = await function_view({ + functionStr: "0x6cd504c269458a3a24ef21063c21bd222eb82cb75ac51f4622787a23558fa488::liquidity_pool::all_pools_with_info", + args: [String(offset), String(limit)], + type_arguments: [], + }); + + return poolInfo; +} + +async function _getCoinInfo(faType) { + const coinInfo = await function_view({ + functionStr: "0x1::coin::paired_coin", + args: [faType], + type_arguments: [], + }); + + if (coinInfo.vec.length > 0) { + const address = coinInfo.vec[0].account_address; + const module = Buffer.from(coinInfo.vec[0].module_name.replace('0x', ''), 'hex').toString('utf-8'); + const struct = Buffer.from(coinInfo.vec[0].struct_name.replace('0x', ''), 'hex').toString('utf-8'); + + return (address + "::" + module + "::" + struct); + } else { + return null; + } +} + +async function getPoolInfo() { + let offset = 0; + let limit = 100; + let poolInfo = []; + let [data, pager] = await _getPoolInfo(offset, limit); + + if (data.length !== 0) { + poolInfo = poolInfo.concat(data); + } + + while (offset + limit < pager.total) { + offset += limit; + [data, pager] = await _getPoolInfo(offset, limit); + poolInfo = poolInfo.concat(data); + } + + return poolInfo; +} + +module.exports = { + timetravel: false, + methodology: "Counts the total liquidity in all pools on Hyperfluid.", + aptos: { + tvl: async (api) => { + const poolInfo = await getPoolInfo(); + let balances = {}; + + for (const pool of poolInfo) { + const coin1 = await _getCoinInfo(pool.token_1.inner) || pool.token_1.inner; + const coin2 = await _getCoinInfo(pool.token_2.inner) || pool.token_2.inner; + + api.add(coin1, pool.token_1_reserve); + api.add(coin2, pool.token_2_reserve); + } + }, + }, +}; + From bf041db8d4a798b2f97526f417f6e8bd6ebe77c4 Mon Sep 17 00:00:00 2001 From: dunglv-smartosc <108668260+dunglv-smartosc@users.noreply.github.com> Date: Mon, 9 Dec 2024 11:13:52 -0500 Subject: [PATCH 1370/1768] Update D2Finance (#12625) Co-authored-by: dunglv-smartosc --- projects/d2finance/index.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/projects/d2finance/index.js b/projects/d2finance/index.js index 79b1afe321..03e52d4bfd 100644 --- a/projects/d2finance/index.js +++ b/projects/d2finance/index.js @@ -6,11 +6,9 @@ const vaultTvlOnArbitrum = sumERC4626VaultsExport({ "0x183424d5ae5ec9fd486634bc566d0f75ad9c9109", "0x5b49d7fae00de64779ddcd6b067c8eb046bd9a0b", "0x291344FBaaC4fE14632061E4c336Fe3B94c52320", - "0xEd80C858D43a1D043E86Cf1F20384e189cf23BDA", - "0x4ada76cc8755f62508a2df65d7fafa4fd26e76c6", - "0x1c17a39B156189BF40905425170a3Ff62fb650DA", - "0x7348925D3C63e4E61e9F5308eEec0f06EaA3bB7b", + "0x0F76De33a3679a6065D14780618b54584a3907D4", "0xD1D64dAeED7504Ef3Eb056aa2D973bD064843A84", + "0x1c17a39B156189BF40905425170a3Ff62fb650DA", "0xB0730AA7d6e880F901B5d71A971096dB56895a0f", "0x5f44A7DD0a016A5Ec9682df36899A781442CAa43", "0x0215EdEecdABE3DfC5EC8D59337eC9b26d359088", @@ -19,8 +17,10 @@ const vaultTvlOnArbitrum = sumERC4626VaultsExport({ "0x57f467C9c4639B066F5A4D676Cd8Ed7D87C1791b", "0x7348925D3C63e4E61e9F5308eEec0f06EaA3bB7b", "0xCFBBea43Fd99126E4c0eF53e2344609D513f72b3", - "0x0F76De33a3679a6065D14780618b54584a3907D4", - "0x195a9e0f29f96d4ab2139ee1272380a4aa352890" + "0x195a9e0f29f96d4ab2139ee1272380a4aa352890", + '0x75288264FDFEA8ce68e6D852696aB1cE2f3E5004', + '0xaB2743a3A2e06d457368E901F5f927F271fa1374', + '0x91aCd32dA9beA6DA3751dc12Ee0fBe47169349C1' ], isOG4626: true, }); @@ -30,11 +30,19 @@ const vaultTvlOnAvalanche = sumERC4626VaultsExport({ isOG4626: true, }) +const vaultTvlOnBase = sumERC4626VaultsExport({ + vaults: ['0x6c05A7d2c24B48fC3C615D294fEc2eB068548897'], + isOG4626: true, +}) + module.exports = { arbitrum: { tvl: vaultTvlOnArbitrum, }, avax: { tvl: vaultTvlOnAvalanche, + }, + base: { + tvl: vaultTvlOnBase, } }; From 2fc045048c5caf7e0e148b9d4886896b7dcb7f7a Mon Sep 17 00:00:00 2001 From: 0xsign <99134502+0xsign@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:14:16 +0100 Subject: [PATCH 1371/1768] Mellow add hcETH vault (#12624) --- projects/mellow-protocol-v2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/mellow-protocol-v2/index.js b/projects/mellow-protocol-v2/index.js index 24a222d970..b933fa5b71 100644 --- a/projects/mellow-protocol-v2/index.js +++ b/projects/mellow-protocol-v2/index.js @@ -17,6 +17,7 @@ const config = { '0x64047dD3288276d70A4F8B5Df54668c8403f877F', '0x7b31F008c48EFb65da78eA0f255EE424af855249', '0x4f3Cc6359364004b245ad5bE36E6ad4e805dC961', + '0x375A8eE22280076610cA2B4348d37cB1bEEBeba0', ], }, } From 203c48a95677ddc3d9857d4996660fc5a1773eb4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:17:52 +0100 Subject: [PATCH 1372/1768] update arcadia v2 #12626 --- projects/arcadia-finance-v2/index.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/projects/arcadia-finance-v2/index.js b/projects/arcadia-finance-v2/index.js index e100b98084..2fab62d8a9 100644 --- a/projects/arcadia-finance-v2/index.js +++ b/projects/arcadia-finance-v2/index.js @@ -9,6 +9,7 @@ const config = { cbbtcPool: "0xa37E9b4369dc20940009030BfbC2088F09645e3B" }, uniNFT: "0x03a520b32c04bf3beef7beb72e919cf822ed34f1", + alienBaseNFT: "0xb7996d1ecd07fb227e8dca8cd5214bdfb04534e5", slipNFT: "0x827922686190790b37229fd06084350e74485b72", wAeroNFT: "0x17B5826382e3a5257b829cF0546A08Bd77409270".toLowerCase(), sAeroNFT: "0x9f42361B7602Df1A8Ae28Bf63E6cb1883CD44C27".toLowerCase(), @@ -49,25 +50,26 @@ async function unwrapArcadiaAeroLP({ api, ownerIds, }) { wrappedData.forEach((data) => api.add(data.pool, data.amountWrapped)); stakedData.forEach((data) => api.add(data.pool, data.amountStaked)); - await uwrapStakedSlipstreamLP({api, sSlipNftIds, }); + await uwrapStakedSlipstreamLP({ api, sSlipNftIds, }); } -async function uwrapStakedSlipstreamLP( {api, sSlipNftIds, }) { +async function uwrapStakedSlipstreamLP({ api, sSlipNftIds, }) { const { slipNFT } = config[api.chain]; const balances = api.getBalances(); // Arcadia's staked slipstream NFT wrapper issues a position with the same ID as the wrapped NFT // -> fetch the values of the wrapped IDs by simply fetching the values of those IDs on the native slipstream NFT - await unwrapSlipstreamNFT({balances:balances, positionIds:sSlipNftIds, nftAddress:slipNFT, chain:'base', blacklistedTokens:[], whitelistedTokens:[], uniV3ExtraConfig:{} }); - } + await unwrapSlipstreamNFT({ balances: balances, positionIds: sSlipNftIds, nftAddress: slipNFT, chain: 'base', blacklistedTokens: [], whitelistedTokens: [], uniV3ExtraConfig: {} }); +} async function tvl(api) { - let { factory, pools, uniNFT, slipNFT, wAeroNFT, sAeroNFT, sSlipNFT } = - config[api.chain]; + let { factory, pools, uniNFT, slipNFT, wAeroNFT, sAeroNFT, sSlipNFT, alienBaseNFT } = config[api.chain]; pools = Object.values(pools); const uTokens = await api.multiCall({ abi: "address:asset", calls: pools }); await api.sumTokens({ tokensAndOwners2: [uTokens, pools] }); const accounts = await api.fetchList({ lengthAbi: 'allAccountsLength', itemAbi: 'allAccounts', target: factory, }); + if (alienBaseNFT) + await sumTokens2({ api, owners: accounts, uniV3ExtraConfig: { nftAddress: alienBaseNFT } }) const assetData = await api.multiCall({ abi: abi.assetData, calls: accounts, }); const ownerTokens = accounts.map((account, i) => [assetData[i].assets, account]) @@ -77,7 +79,7 @@ async function tvl(api) { account, ]); // add all simple ERC20s - await api.sumTokens({ ownerTokens, blacklistedTokens: [uniNFT, slipNFT, wAeroNFT, sAeroNFT, sSlipNFT], }); + await api.sumTokens({ ownerTokens, blacklistedTokens: [uniNFT, slipNFT, wAeroNFT, sAeroNFT, sSlipNFT, alienBaseNFT,], }); // add all Arcadia-wrapped LP positions await unwrapArcadiaAeroLP({ api, ownerIds }); From 6b14d149435fcf9ac464ae5a0d310fc500a53206 Mon Sep 17 00:00:00 2001 From: Da Sichuan <86024678+DaSichuan@users.noreply.github.com> Date: Mon, 9 Dec 2024 08:23:22 -0800 Subject: [PATCH 1373/1768] Correctly price SpringSUI Ecosystem LSTs (#12605) --- projects/suilend/index.js | 45 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/projects/suilend/index.js b/projects/suilend/index.js index 3104286932..0b51d8d422 100644 --- a/projects/suilend/index.js +++ b/projects/suilend/index.js @@ -1,23 +1,64 @@ const sui = require("../helper/chain/sui"); const SUILEND_LENDING_MARKET_ID = "0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1"; +const LST_CREATE_EVENT_TYPE = '0xb0575765166030556a6eafd3b1b970eba8183ff748860680245b9edd41c716e7::events::Event<0xb0575765166030556a6eafd3b1b970eba8183ff748860680245b9edd41c716e7::liquid_staking::CreateEvent>'; +const SUI_COIN_TYPE = '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI' +const SPRINGSUI_COIN_TYPE = '0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI'; async function tvl(api) { + const redemptionRates = await getRedemtionRates() + console.log(redemptionRates) const object = await sui.getObject(SUILEND_LENDING_MARKET_ID) + for (const reserve of object.fields.reserves) { const coinType = '0x' + reserve.fields.coin_type.fields.name; - api.add(coinType, reserve.fields.available_amount) + if (redemptionRates[coinType]) { + api.add(SUI_COIN_TYPE, redemptionRates[coinType] * reserve.fields.available_amount) + } else { + api.add(coinType, reserve.fields.available_amount) + } } } async function borrowed(api) { + const redemptionRates = await getRedemtionRates() const object = await sui.getObject(SUILEND_LENDING_MARKET_ID) for (const reserve of object.fields.reserves) { const coinType = '0x' + reserve.fields.coin_type.fields.name; - api.add(coinType, reserve.fields.borrowed_amount.fields.value / 1e18) + if (redemptionRates[coinType]) { + api.add(SUI_COIN_TYPE, redemptionRates[coinType] * reserve.fields.borrowed_amount.fields.value / 1e18) + } else { + api.add(coinType, reserve.fields.borrowed_amount.fields.value / 1e18) + } } } + +async function getRedemtionRates() { + const events = (await sui.queryEvents({ + eventType: LST_CREATE_EVENT_TYPE, + })) + const coinTypeToRate = {}; + for (const event of events) { + const coinType = '0x' + event.event.typename.name; + if (coinType === SPRINGSUI_COIN_TYPE) { + continue; + } + try { + const poolId = event.event.liquid_staking_info_id; + const data = await sui.getObject(poolId) + const totalSupply = parseInt(data.fields.lst_treasury_cap.fields.total_supply.fields.value) + const stakedSui = parseInt(data.fields.storage.fields.total_sui_supply); + coinTypeToRate[coinType] = stakedSui / totalSupply; + } catch(e) { + continue + } + } + return coinTypeToRate; +} + + + module.exports = { timetravel: false, sui: { From 5c9a098470017a8ce686f24fca616e51a5c77348 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:24:11 +0100 Subject: [PATCH 1374/1768] remove log message --- projects/suilend/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/suilend/index.js b/projects/suilend/index.js index 0b51d8d422..2036be1070 100644 --- a/projects/suilend/index.js +++ b/projects/suilend/index.js @@ -7,7 +7,6 @@ const SPRINGSUI_COIN_TYPE = '0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2c async function tvl(api) { const redemptionRates = await getRedemtionRates() - console.log(redemptionRates) const object = await sui.getObject(SUILEND_LENDING_MARKET_ID) for (const reserve of object.fields.reserves) { From 758f29ef44b218ad78ffc18b8bc8cf8d500144fc Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:27:46 +0100 Subject: [PATCH 1375/1768] Feat: Anemoy fund (RWA) (#12595) --- projects/anemoy-capital/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/anemoy-capital/index.js diff --git a/projects/anemoy-capital/index.js b/projects/anemoy-capital/index.js new file mode 100644 index 0000000000..8839a5b6d2 --- /dev/null +++ b/projects/anemoy-capital/index.js @@ -0,0 +1,30 @@ +const sdk = require('@defillama/sdk') +const ADDRESSES = require('../helper/coreAssets.json') + +const USDC = ADDRESSES.ethereum.USDC + +const LTF = { + ethereum: '0x8c213ee79581ff4984583c6a801e5263418c4b86', + base: '0x8c213ee79581ff4984583c6a801e5263418c4b86', + celo: '0x27e8c820d05aea8824b1ac35116f63f9833b54c8', +} + +const abi = 'function vault(address asset) view returns (address)' + +const getNav = async () => { + const chain = 'ethereum' + const ethApi = new sdk.ChainApi({ chain }) + const vault = await ethApi.call({ target: LTF[chain], params: [USDC], abi }) + return ethApi.call({ target: vault, abi: 'uint256:pricePerShare' }) +} + +const tvl = async (api) => { + const { chain } = api + const nav = await getNav() + const balance = await api.call({ target: LTF[chain], abi: 'erc20:totalSupply' }) + api.add(USDC, balance * nav / 1e6, { skipChain :true }) +} + +Object.keys(LTF).forEach((chain) => { + module.exports[chain] = { tvl } +}) From 2a8943419d6dfb11043c2a473c9b939784764790 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:31:01 +0100 Subject: [PATCH 1376/1768] minor fix --- projects/anemoy-capital/index.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/projects/anemoy-capital/index.js b/projects/anemoy-capital/index.js index 8839a5b6d2..6a7aeb34e3 100644 --- a/projects/anemoy-capital/index.js +++ b/projects/anemoy-capital/index.js @@ -11,16 +11,17 @@ const LTF = { const abi = 'function vault(address asset) view returns (address)' -const getNav = async () => { +const getNav = async (timestamp) => { const chain = 'ethereum' - const ethApi = new sdk.ChainApi({ chain }) + const ethApi = new sdk.ChainApi({ chain, timestamp }) + await ethApi.getBlock() const vault = await ethApi.call({ target: LTF[chain], params: [USDC], abi }) return ethApi.call({ target: vault, abi: 'uint256:pricePerShare' }) } const tvl = async (api) => { const { chain } = api - const nav = await getNav() + const nav = await getNav(api.timestamp) const balance = await api.call({ target: LTF[chain], abi: 'erc20:totalSupply' }) api.add(USDC, balance * nav / 1e6, { skipChain :true }) } @@ -28,3 +29,5 @@ const tvl = async (api) => { Object.keys(LTF).forEach((chain) => { module.exports[chain] = { tvl } }) + +module.exports.misrepresentedTokens = true \ No newline at end of file From 90b9a1315958fbe14a1ab4f8ded3f88160f9c867 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:21:16 +0100 Subject: [PATCH 1377/1768] update maia #12591 --- projects/hermes-protocol/index.js | 2 +- projects/maia-dao/api.js | 4 ++-- projects/maia-dao/index.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/hermes-protocol/index.js b/projects/hermes-protocol/index.js index 588585d64a..af59abf701 100644 --- a/projects/hermes-protocol/index.js +++ b/projects/hermes-protocol/index.js @@ -5,6 +5,6 @@ module.exports = { misrepresentedTokens: true, metis:{ tvl: uniTvlExport("0x633a093C9e94f64500FC8fCBB48e90dd52F6668F", "metis", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: true, }), - staking: staking("0xa4C546c8F3ca15aa537D2ac3f62EE808d915B65b", "0xb27bbeaaca2c00d6258c3118bab6b5b6975161c8"), + staking: () => ({}), }, } diff --git a/projects/maia-dao/api.js b/projects/maia-dao/api.js index 71364f8166..64f900102d 100644 --- a/projects/maia-dao/api.js +++ b/projects/maia-dao/api.js @@ -2,8 +2,8 @@ const { staking } = require('../helper/staking') module.exports = { metis: { - tvl: () => 0, - staking: staking('0xD7a586CE5250bEfaB2cc2239F7226B9602536E6A', '0x72c232D56542Ba082592DEE7C77b1C6CFA758BCD') + tvl: () => ({}), + staking: () => ({}), }, arbitrum: { staking: staking('0x000000f0C01c6200354f240000b7003668B4D080', '0x00000000ea00F3F4000e7Ed5Ed91965b19f1009B'), // v2 diff --git a/projects/maia-dao/index.js b/projects/maia-dao/index.js index 596a9bd012..0f1290838c 100644 --- a/projects/maia-dao/index.js +++ b/projects/maia-dao/index.js @@ -25,6 +25,6 @@ async function tvl(api) { module.exports = { metis: { - tvl, + tvl: () => ({}), } } From fc54285c493367483d72795f94b363c74edda0a9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:24:46 +0100 Subject: [PATCH 1378/1768] update clober #12563 --- projects/clober-liquidity-vault/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/clober-liquidity-vault/index.js b/projects/clober-liquidity-vault/index.js index 0ceb589677..7cb0e0bf6a 100644 --- a/projects/clober-liquidity-vault/index.js +++ b/projects/clober-liquidity-vault/index.js @@ -8,7 +8,7 @@ const abi = { const config = { base: { - rebalancer: '0x13f2Ff6Cc952f4181D6c316426e9CbdA957c6482', + rebalancer: '0x6A0b87D6b74F7D5C92722F6a11714DBeDa9F3895', bookManager: '0x382CCccbD3b142D7DA063bF68cd0c89634767F76', fromBlock: 21715410, }, From 64e36223fd3fa274b52b08d70d42ddc715671215 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:32:40 +0100 Subject: [PATCH 1379/1768] Fix: 21co (#12628) --- projects/21-co/index.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/projects/21-co/index.js b/projects/21-co/index.js index 4254a70a3f..d5cc8a5fab 100644 --- a/projects/21-co/index.js +++ b/projects/21-co/index.js @@ -1,7 +1,6 @@ const { cexExports } = require('../helper/cex') const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') - const config = { bitcoin: { owners: bitcoinAddressBook.twentyOneCo @@ -37,9 +36,7 @@ const config = { ], }, bep2: { - owners: [ - 'bnb1k3ulpgw4wzl0e8qx80u87aq9w7ekfygruzs4dg' - ], + // owners: ['bnb1k3ulpgw4wzl0e8qx80u87aq9w7ekfygruzs4dg'], }, /* bitcoin_cash: { owners: [ From 2ab5d6d098e7ac954429009ed9130c7189dd5eb7 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:32:54 +0100 Subject: [PATCH 1380/1768] Fix: Astarter (#12629) --- projects/astarter/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/astarter/index.js b/projects/astarter/index.js index c1629d936f..13481cbf1e 100644 --- a/projects/astarter/index.js +++ b/projects/astarter/index.js @@ -8,7 +8,7 @@ async function tvl() { } async function getPoolStake(poolIds) { - const response = await axios.post('https://api.koios.rest/api/v0/pool_info', { + const response = await axios.post('https://api.koios.rest/api/v1/pool_info', { "_pool_bech32_ids": poolIds }); return response.data.reduce((a, b) => a + b.live_stake / 1e6, 0); From 5017454b57d693d050d86e6088a925cbb4c65c2f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 20:08:37 +0100 Subject: [PATCH 1381/1768] update polynomial #12620 --- projects/helper/coreAssets.json | 1 + projects/helper/tokenMapping.js | 4 ++++ projects/polynomial-liquidity-layer/index.js | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 39a843d928..346589bb87 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1951,6 +1951,7 @@ }, "polynomial": { "USDC": "0x17C9D8Cef7Ef072844EEaEdE1F9f54C7E3fa8743", + "fxUSDC": "0x2369EB4a76d80fBeAa7Aa73e1e1f9EAeE88C07F4", "SDAI": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", "sUSDe": "0x2A06DEAc3E863c23DD6a89Eeacd80aBA9E08B77B", "USD0": "0x6224dC817dC4D5c53fcF3eb08A4f84C456F9f38f" diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 2fed8c486e..504ab1751c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -105,6 +105,10 @@ const fixBalancesTokens = { '0x7d2ff48c6b59229d448473d267a714d29f078d3e': { coingeckoId: "zilstream", decimals: 8 }, '0x241c677d9969419800402521ae87c411897a029f': { coingeckoId: "web3war", decimals: 12 }, }, + polynomial: { + '0x6224dc817dc4d5c53fcf3eb08a4f84c456f9f38f': { coingeckoId: "usual-usd", decimals: 18 }, + '0x2369eb4a76d80fbeaa7aa73e1e1f9eaee88c07f4': { coingeckoId: "ethereum:0x4f460bb11cf958606c69a963b4a17f9daeeea8b6", decimals: 0 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/polynomial-liquidity-layer/index.js b/projects/polynomial-liquidity-layer/index.js index c5780e43ce..50c406bcf8 100644 --- a/projects/polynomial-liquidity-layer/index.js +++ b/projects/polynomial-liquidity-layer/index.js @@ -4,6 +4,6 @@ const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { polynomial: { - tvl: sumTokensExport({ owner: '0xc133983D6d9140923b5eaE52664221d9099cf119', tokens: [ADDRESSES.polynomial.USDC,ADDRESSES.polynomial.SDAI, ADDRESSES.polynomial.sUSDe, ADDRESSES.polynomial.USD0]}) + tvl: sumTokensExport({ owner: '0xc133983D6d9140923b5eaE52664221d9099cf119', tokens: [ADDRESSES.polynomial.fxUSDC,ADDRESSES.polynomial.SDAI, ADDRESSES.polynomial.sUSDe, ADDRESSES.polynomial.USD0]}) } } \ No newline at end of file From 54f777bff41b3b1bd6a832f7b857a7145cb611b4 Mon Sep 17 00:00:00 2001 From: "salvor.io" <148768872+salvorio@users.noreply.github.com> Date: Mon, 9 Dec 2024 23:01:01 +0300 Subject: [PATCH 1382/1768] Added tvl assets (#12631) --- projects/salvor/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/salvor/index.js b/projects/salvor/index.js index 645cf13c0a..64d279bc01 100644 --- a/projects/salvor/index.js +++ b/projects/salvor/index.js @@ -7,7 +7,15 @@ module.exports.avax = { hallmarks: [ [1702501200, "Salvor Lending Launch"] ], - methodology: 'TVL counts AVAX coins in the Salvor Pool address:0xab4fe2d136efd7f8dfce3259a5e3c5e4c0130c80', + methodology: 'TVL counts AVAX coins in the Salvor Pool address:0xab4fe2d136efd7f8dfce3259a5e3c5e4c0130c80 and ERC20 assets in the Salvor Lending Pool address: 0x22e229d14dc80a1ea7ca7637173e8c6c36d60fe8', staking: staking("0x72b73fa1569dF9fF1aE9b29CD5b164Af6c02EbaA", "0xF99516BC189AF00FF8EfFD5A1f2295B67d70a90e"), - tvl: sumTokensExport({ owners: ["0xab4fe2d136efd7f8dfce3259a5e3c5e4c0130c80"], tokens: [ADDRESSES.avax.WAVAX, nullAddress] }), + tvl: sumTokensExport({ + owners: ["0xab4fe2d136efd7f8dfce3259a5e3c5e4c0130c80", "0x22e229d14dc80a1ea7ca7637173e8c6c36d60fe8"], + tokens: [ + ADDRESSES.avax.WAVAX, + ADDRESSES.avax.USDC, + ADDRESSES.avax.USDt, + nullAddress + ] + }), }; From c6e0c1808c0a36c8f8090f1f7ec39e4a93a62e50 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 9 Dec 2024 21:01:44 +0100 Subject: [PATCH 1383/1768] Fix: Belt-finance (#12630) --- projects/belt/abi.json | 4 -- projects/belt/config.js | 101 +++++++++++++++++++++++++++++++++ projects/belt/index.js | 120 ++++++---------------------------------- 3 files changed, 119 insertions(+), 106 deletions(-) delete mode 100644 projects/belt/abi.json create mode 100644 projects/belt/config.js diff --git a/projects/belt/abi.json b/projects/belt/abi.json deleted file mode 100644 index 87d3b9f162..0000000000 --- a/projects/belt/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "calcPoolValueInToken": "uint256:calcPoolValueInToken", - "token": "address:token" -} \ No newline at end of file diff --git a/projects/belt/config.js b/projects/belt/config.js new file mode 100644 index 0000000000..04b388d8c3 --- /dev/null +++ b/projects/belt/config.js @@ -0,0 +1,101 @@ +const CONFIG = { + bsc: [ + '0x51bd63f240fb13870550423d208452ca87c44444', + '0xa8bb71facdd46445644c277f9499dd22f6f0a30c', + '0xcb3346ad40c947a2228b2e224c3931a5224ba7ad', + '0xecb589831eefbdbbc48d1f86294724c76acd3314', + '0xaa20e8cb61299df2357561c2ac2e1172bc68bc25', + '0x9a144edd7309bcc4e106a1a04e7fc402115a0980', + '0x5142f6857f029bed5ddf6247d8a1f75984a3a380', + '0x1794bb186c15fddbf4aac4a3b0e2f40659e9b841', + '0x9a86fc508a423ae8a243445dba7ed5364118ab1d', + '0x27932f578128211f4c593f864ee2054b78f94992', + '0x4f52533c9504df756ecdfd311a8b846a59422e4e', + '0x55e1b1e49b969c018f2722445cd2dd9818ddcc25', + '0xdcfe3ca4863059ae2da63c7fdea04541bea178f9', + '0x7a59bf07d529a5fdbab67d597d63d7d5a83e61e5', + '0xed8487acc0d124efb5e8cfb5cf391caefbf99cbf', + '0x48f7fbea3781b95a9ac1cedb3d277bc3570bdcab', + '0x5ace08ff6d79663f9bf90686744c214317d0df8e', + '0x9171bf7c050ac8b4cf7835e51f7b4841dfb2ccd0', + '0x87c6668d33f224fe00adb3ef85a4a5ab4d5bf257', + '0x4b91dac1229f41c4d322f5f0fea246f069fb81a3', + '0xba2f7cb88d818bba7e932310f49d754eb29eb2ef', + '0xe12135207747d2ec1d1f0aabd4535e6ee08b853b', + '0x94065e5740b9c0560be9b830da0b2896da5f86d8', + '0x090f22ca2e3429f1f4dd38052cb451653e98f0c2', + ], + klaytn: [ + '0x7B6A8e0c40D3C3405afd5b4BAd3F5c202e18d518', + '0x766A73C9f9d51C773c95C649e26c59063f570cf8', + '0xf70644e5650e2ef5f0D31dF46e7e369771c2707F', + '0x1f450aE0AfC30b19610A57b52F9ac8C317Ac5B6A', + '0x3331e6EE96416E1B52B3182b67Faa970DC9a4F54', + '0xB551b72c1fC69E349180e1Feb11D87C719321274', + '0xe510d40a4B92302798d6baA1eF004E4629438e81', + '0x9B433Fb8424fCB35d6614C12559bA513F77b376f', + '0x2aD2811A8387191Ba08DACf8B95cC018B108252B', + '0x36715E1C3FD2Df068292De739F925dbdd28D7617', + '0x99084eb75E406A55dB913FA3E4f822Ff3690eAF5', + '0x426533F501c3615A4244087d2A9981b037C40D46', + '0xc0c09760BA26434d5482f61ae82a543c72ea8D08', + '0x3677F31C23D668d4c733f2a032ee2d3bc37aB4d9', + '0x2df990677D1E71BAEa494Ff962b408c06B8Cf6E1', + '0x9D2a003fe5FE21aB7CB1235080e48Ef801A1EE01', + '0x826c88315bb441e6886a63f80164E67F89359C5A', + '0x415cA0bbeD91664F5f94D8c62d6CB480F182a9CE', + '0xa541f77f0049A828c3CB8C800d877822Bbc7305c', + '0xF1FF200995ceC953B0A8c8539c21AF4AcC455186', + '0x94A37969EEB922535080E102F74d3c7b29470Afe', + '0xe7fa18E435FE9aCBdFb5016514B00C61C9a27507', + '0x3D5e1dd34e80E71Bcecad3eC1892B8aEe161A786', + '0x4935d93a4fe73E0F7E8bDFc9eF2e4eC79CDf1eB7', + '0x1E5dF060e7320414a2E9300968C66DD01291ca79', + '0x6731582c2F003741c135eC79F74864944A2884b0', + '0x39Ff319dd1282452cd73154B6ac670449234230F', + '0xf54c5E2305Bfe7dc62c6f1C0506c904F5564734b', + '0xBb8E0F162d53E15Dc1121081defF153b3A9481eF', + '0x31a1FCeB1296c1FE0e0A3D29658fA95898aE4f69', + '0x8A5724CA16eE5Cd4B6Ed6aFC8ab7766134CEAc53', + '0x430a6768Ef348B06F65F1FEEf01B9b2B58C75f79' + ], + heco: [ + '0xe8f67d3Dd4587E065d4abE8dCBe454E84526A715', + '0x6D8C89C937B68352916904Cb9FB39BA3aCd05c75', + '0x0bd7a237672BB287E31B80671704f83335E571f2', + '0x46e0898B8C480Bc3bF864a5C64Cd06940Ff33B4b', + '0x4Cd59EEB3a4D2fa5c35FD3dE0BA1723EeaF1D258', + '0x9d5E7AC92a7495EbCC0190964A3b90dfaFc2CF51', + '0x7840c4C08ab91AB23F57018BF6202a64C7C67588', + '0x923C5DD2449d7DCc54a86635F9196BEB2a4921a1', + '0x8434b37b493B27a1e679062210B74B4B22a66F38', + '0xB1493B7bc8e260B0b25235ae5c34B0dC201ce8C3', + '0x8d3a8a05e74c41edc6cd2cba2ec7fca0e1c611bb', + '0xff8376a18db1889abdf325cd28f37a12d2685b86', + '0xeb751332103b713b40321f86f5ab5468143c45aa', + '0xD3E341FDfa1c71C138e59c088EeBC069e2CfF96e', + '0x86f5c8eb736c95dd687182779edd792fef0fa674', + '0x5d790E3485aa6Dfe5b4F810C77CD7A41dF7B4CAC', + '0xCC6c6d6a68f303DaEE2F75C3D0E8688987cad2d8', + '0x00e517A416827720F00e61d9033E99426a6C3C63', + '0x96a020e1B07089e92f67FbFf1b870E638bf5a711', + '0x0e564BC863c2072C47FB8f952062BD5bc673E142', + '0xbca98b7049562B3BDA2E095fEf40626cf77Bc2f3', + '0x871dA29944D9CAeB25e048e6196D27c683C33796', + '0xCD70C61807130FcD68d8E2d0F32b2FB8be7A6C40', + '0x280Ae883FD219a56ef5182799f324451eaFE201D', + '0x9bC7a8ec3a8b9d9AEc0C5808456e35A934f457e5', + '0x2c03530b77699F08c69eCc4D33F801fb667f3406', + '0xBB550cDE1C88C2041Db27DC2fCf67f5354ECa0Ae', + '0x44F95Fa54b2ac1cEF14F5085dB2B1a7850b6881C', + '0x25D6A0133CF98E98e462a2a1AD127a5faEB01602', + '0xA8714b9c86Fb590bF2CEE12bdFccC575aB454272', + '0x2df074959D0f3FCfE9b5bFc18E4f9a3F7f56EDCc', + '0x50Cb33F99e05688b4969F728431041f6AA83A086', + '0xF95a075F57887405a424BAE3825086DeEa5c2a99', + '0x50eBED91FDf0dD0bBf2a46eCfB00e31F897dc870', + '0xC04a84d0E3f290D0777c233E0945678469adF353', + ] +} + +module.exports = CONFIG; \ No newline at end of file diff --git a/projects/belt/index.js b/projects/belt/index.js index b9e351d07a..6665c603ed 100644 --- a/projects/belt/index.js +++ b/projects/belt/index.js @@ -1,111 +1,27 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk') -const abi = require('./abi.json') -const { get } = require('../helper/http') -const BigNumber = require("bignumber.js"); -const { toUSDTBalances } = require('../helper/balances'); +const CONFIG = require('./config') -// https://docs.belt.fi/contracts/contract-deployed-info -const bscVaults = [ - ADDRESSES.bsc.beltBTC, - ADDRESSES.bsc.beltETH, - ADDRESSES.bsc.beltBNB, - '0x9171Bf7c050aC8B4cf7835e51F7b4841DFB2cCD0', - '0x55E1B1e49B969C018F2722445Cd2dD9818dDCC25', - '0x7a59bf07D529A5FdBab67D597d63d7D5a83E61E5', - '0x9A86fc508a423AE8a243445dBA7eD5364118AB1D' -] +const beltView = '0xB543248F75fd9f64D10c247b5a57F142EFF88Aac' -const hecoVaults = [ - '0x4Cd59EEB3a4D2fa5c35FD3dE0BA1723EeaF1D258', - '0xB1493B7bc8e260B0b25235ae5c34B0dC201ce8C3', - '0x86f5C8EB736c95dd687182779edd792FEF0fA674', - '0xA8714b9c86Fb590bF2CEE12bdFccC575aB454272', - '0xC04a84d0E3f290D0777c233E0945678469adF353', - '0x9bC7a8ec3a8b9d9AEc0C5808456e35A934f457e5', - '0x0e564BC863c2072C47FB8f952062BD5bc673E142' -] - -// const klaytnVaults = [ -// '0xe510d40a4B92302798d6baA1eF004E4629438e81', -// '0x426533F501c3615A4244087d2A9981b037C40D46', -// '0x826c88315bb441e6886a63f80164E67F89359C5A', -// '0xe7fa18E435FE9aCBdFb5016514B00C61C9a27507', -// '0x39Ff319dd1282452cd73154B6ac670449234230F', -// '0x430a6768Ef348B06F65F1FEEf01B9b2B58C75f79', -// '0xf70644e5650e2ef5f0D31dF46e7e369771c2707F' -// ] - -const tetherLP = "0x04100231d548Df31a003BEb99e81e3305Be9647b" -// const BELT = "0xE0e514c71282b6f4e823703a39374Cf58dc3eA4f" - -async function getTvl(chain, block, address) { - const underlyingTokens = await sdk.api.abi.multiCall({ - chain: chain, - calls: address.map(v=>({target:v})), - block, - abi: abi.token - }) - const underlyingBalances = await sdk.api.abi.multiCall({ - chain: chain, - calls: address.map(v=>({target:v})), - block, - abi: abi.calcPoolValueInToken - }) - const balances = {} - underlyingBalances.output.forEach((balance, index)=>{ - sdk.util.sumSingleBalance(balances, chain+':'+underlyingTokens.output[index].output, balance.output) - }) - - const beltInfo = await get('https://ss.belt.fi/info/all.json') - const lockedUSDT = beltInfo.info[chain.toUpperCase()].vaultPools.find(x => x.wantToken.toLowerCase() === tetherLP.toLowerCase()) - const [ usdt, wantLocked ] = Object.entries(toUSDTBalances(lockedUSDT.wantLocked))[0] - balances[usdt] = wantLocked - - return balances +const abi = { + calcPoolValueInToken: "uint256:calcPoolValueInToken", + token: "address:token", + getStakingStat: "function getStakingStat() view returns (tuple(address token, address beltToken, uint256 totalLockedWant, uint256 tokenDecimal, uint256 beltTokenDecimal, uint256 beltTokenTotalSupply, uint256 lockUpPeriod, uint256 pricePerFullShare) info)" } - -function bscTvl(timestamp, ethBlock, chainBlocks) { - return getTvl('bsc', chainBlocks['bsc'], bscVaults) +const tvl = async (api) => { + const tokens = await api.multiCall({ calls: CONFIG[api.chain], abi: abi.token }) + const suppliesInToken = await api.multiCall({ calls: CONFIG[api.chain], abi: abi.calcPoolValueInToken }) + api.add(tokens, suppliesInToken) } -function hecoTvl(timestamp, ethBlock, chainBlocks) { - return getTvl('heco', chainBlocks['heco'], hecoVaults) -} - -async function klaytnTvl() { - const beltInfo = await get('https://ss.belt.fi/info/all.json') - var tvl = new BigNumber('0'); - - beltInfo.info.KLAYTN.vaults.forEach(vault =>{ - tvl = tvl.plus(vault.tvl) - }) - - const lockedUSDT = beltInfo.info.KLAYTN.vaultPools.find(x => x.wantToken.toLowerCase() === tetherLP.toLowerCase()) - tvl = tvl.plus(lockedUSDT.wantLocked) - - return toUSDTBalances(tvl.toFixed(2)) -} - -async function getStaking(chain) { - const beltInfo = await get('https://ss.belt.fi/info/all.json') - const stakingInfo = beltInfo.info[chain.toUpperCase()].staking - - return toUSDTBalances(stakingInfo.tvl) +const staking = async (api) => { + const { token, pricePerFullShare, beltTokenTotalSupply } = await api.call({ target: beltView, abi: abi.getStakingStat }) + api.add(token, beltTokenTotalSupply * pricePerFullShare / 1e18) } module.exports = { - timetravel: false, - methodology: 'TVL includes the liquidity of all the Vaults, 3Tether LP and staking counts the BELT that has been staked in BSC. Data is pulled from:"https://ss.belt.fi/info/all.json".', - bsc: { - tvl: bscTvl, - staking: () => getStaking('bsc'), - }, - heco: { - tvl: hecoTvl, - }, - klaytn: { - tvl: klaytnTvl, - }, -} + methodology: 'TVL includes the liquidity of all the Vaults, 3Tether LP and staking counts the BELT that has been staked in BSC.', + bsc: { tvl, staking }, + heco: { tvl }, + klaytn: { tvl } +} \ No newline at end of file From f034892419d1b5a1798ce31845df2978bf31c311 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:01:04 +0100 Subject: [PATCH 1384/1768] fix ohm --- projects/olympus/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/olympus/index.js b/projects/olympus/index.js index 7db910491f..de65a9e05e 100644 --- a/projects/olympus/index.js +++ b/projects/olympus/index.js @@ -158,12 +158,13 @@ function buildTvl(isOwnTokensMode = false){ const tokens = tokensToBalances.map(i => i.tokenAddress) - const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens, permitFailure: true, }) const ownTokens = new Set(olympusTokens.map(i => i.toLowerCase())) tokensToBalances.map(async (token, i) => { if (ownTokens.has(token.tokenAddress.toLowerCase())) { if (!isOwnTokensMode) return; } else if (isOwnTokensMode) return; + if (!decimals[i]) return; api.add(token.tokenAddress, token.balance * 10 ** decimals[i]) }) return await sumTokens2({ api, resolveLP: true, }) From b39c1bca11dd1db7dbb2cb3d5fea11ad52a66e36 Mon Sep 17 00:00:00 2001 From: Danil Cherevashko Date: Mon, 9 Dec 2024 23:40:04 +0200 Subject: [PATCH 1385/1768] Add swap.coffee XROCK staking (#12609) --- projects/swap-coffee/index.js | 49 ++++++++++++----------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/projects/swap-coffee/index.js b/projects/swap-coffee/index.js index add69ba5f3..d74d44216f 100644 --- a/projects/swap-coffee/index.js +++ b/projects/swap-coffee/index.js @@ -1,46 +1,29 @@ -const { call, sumTokensExport, getTokenRates, getJettonBalances } = require('../helper/chain/ton') -const {sleep} = require("../helper/utils"); +const { sumTokensExport } = require('../helper/chain/ton') const CES_MASTER = "0:a5d12e31be87867851a28d3ce271203c8fa1a28ae826256e73c506d94d49edad" -const STAKING_CONTRACT = "0:29f90533937d696105883b981e9427d1ae411eef5b08eab83f4af89c495d27df" +const CES_STAKING_CONTRACT = "0:29f90533937d696105883b981e9427d1ae411eef5b08eab83f4af89c495d27df" const DEDUST_TON_CES_POOL = "0:123e245683bd5e93ae787764ebf22291306f4a3fcbb2dcfcf9e337186af92c83" const STONFI_CES_TON_POOL = "0:6a839f7a9d6e5303d71f51e3c41469f2c35574179eb4bfb420dca624bb989753" -async function getTokenSupply(addr) { - return (await call({ target: addr, abi: "get_jetton_data"}))[0] / 1e9 -} - -function calcVolume(reserve, supply, rate) { - return ((reserve / 1e9) / supply) * rate -} +const XROCK_MASTER = "0:157c463688a4a91245218052c5580807792cf6347d9757e32f0ee88a179a6549" +const XROCK_STAKING_CONTRACT = "0:c84deaf1d956d5f80be722bbdaeeba33d70d068ace97c6fc23e1bfeb5689e1ca" +const DEDUST_XROCK_USDT_POOL = "0:9cf96b400deedd4143bd113d8d767f0042515e2ad510c4b4adbe734cd30563b8" +const STONFI_XROCK_USDT_POOL = "0:6ba0e19f6adacbefdcbbc859407241eff578f4a57edc8e3e05e86dcfbb283f20" module.exports = { methodology: "Counts swap.coffee smartcontract balance as TVL.", timetravel: false, ton: { tvl: () => { }, - staking: sumTokensExport({ owners: [STAKING_CONTRACT], tokens: [CES_MASTER]}), - pool2: async (api) => { - const dedustPoolReserves = await call({ target: DEDUST_TON_CES_POOL, abi: "get_reserves" }) - const dedustLpSupply = await getTokenSupply(DEDUST_TON_CES_POOL) - - // toncenter api is rate limited - await sleep(3000) - - const stonfiPoolReserves = await call({ target: STONFI_CES_TON_POOL, abi: "get_pool_data" }) - const stonfiLpSupply = await getTokenSupply(STONFI_CES_TON_POOL) - - const rates = await getTokenRates({ tokens: ["TON", CES_MASTER] }) - - const stonLpPrice = calcVolume(stonfiPoolReserves[0], stonfiLpSupply, rates[CES_MASTER]) + - calcVolume(stonfiPoolReserves[1], stonfiLpSupply, rates["TON"]) - const dedustLpPrice = calcVolume(dedustPoolReserves[0], dedustLpSupply, rates["TON"]) + - calcVolume(dedustPoolReserves[1], dedustLpSupply, rates[CES_MASTER]) - - const balances = await getJettonBalances(STAKING_CONTRACT) - - return api.addUSDValue((stonLpPrice * balances[STONFI_CES_TON_POOL].balance / 1e9) + - (dedustLpPrice * balances[DEDUST_TON_CES_POOL].balance / 1e9)) - } + staking: sumTokensExport({ + owners: [CES_STAKING_CONTRACT, XROCK_STAKING_CONTRACT], + tokens: [XROCK_MASTER, CES_MASTER], + onlyWhitelistedTokens: true + }), + pool2: sumTokensExport({ + owners: [CES_STAKING_CONTRACT, XROCK_STAKING_CONTRACT], + tokens: [DEDUST_TON_CES_POOL, STONFI_CES_TON_POOL, DEDUST_XROCK_USDT_POOL, STONFI_XROCK_USDT_POOL], + onlyWhitelistedTokens: true + }) } } \ No newline at end of file From 35f5e343b3749fac7fd0dd49b48878fdefad0e34 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 9 Dec 2024 22:24:26 +0000 Subject: [PATCH 1386/1768] balancer treasury using kk api --- projects/treasury/balancer.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/projects/treasury/balancer.js b/projects/treasury/balancer.js index a0327c28f3..1d9601f342 100644 --- a/projects/treasury/balancer.js +++ b/projects/treasury/balancer.js @@ -1,4 +1,5 @@ const ADDRESSES = require("../helper/coreAssets.json"); +const { karpatKeyTvl } = require("../helper/karpatkey"); const { nullAddress, treasuryExports } = require("../helper/treasury"); // Treasury addresses per chain @@ -104,46 +105,48 @@ const avaxOwnTokens = [ "0xA39d8651689c8b6e5a9e0AA4362629aeF2c58F55" // 80BAL-20WAVAX BPT ]; - +// Keeping old code because karpatkey's api tends to break module.exports = treasuryExports({ ethereum: { owners: [eth, eth2], - tokens: ethTokens, + //tokens: ethTokens, ownTokens: ethOwnTokens }, arbitrum: { owners: [arb], - tokens: arbTokens, + //tokens: arbTokens, ownTokens: arbOwnTokens }, polygon: { owners: [pol], - tokens: polTokens, + //tokens: polTokens, ownTokens: polOwnTokens }, polygon_zkevm: { owners: [zkevm], - tokens: zkevmTokens, + //tokens: zkevmTokens, ownTokens: zkevmOwnTokens }, optimism: { owners: [op], - tokens: opTokens, + //tokens: opTokens, ownTokens: opOwnTokens }, base: { owners: [base], - tokens: baseTokens, + //tokens: baseTokens, ownTokens: baseOwnTokens }, xdai: { owners: [xdai], - tokens: xdaiTokens, + //tokens: xdaiTokens, ownTokens: xdaiOwnTokens }, avax: { owners: [avax], - tokens: avaxTokens, + //tokens: avaxTokens, ownTokens: avaxOwnTokens } }); + +module.exports.ethereum.tvl = async (api)=>karpatKeyTvl(api, "Balancer DAO", "BAL") \ No newline at end of file From 598241704987f0c65a8f00d988fcd7490559b5dc Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Tue, 10 Dec 2024 11:07:59 +0300 Subject: [PATCH 1387/1768] Add new chains and tokens to CrossCurve (#12632) --- projects/crosscurve/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index 0a997399ec..69e17877bd 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -49,6 +49,7 @@ module.exports = { "0xa70af99bff6b168327f9d1480e29173e757c7904", // crvUSDT "0xdad97f7713ae9437fa9249920ec8507e5fbb23d3", // crv3crypto ADDRESSES.polygon.WBTC, // WBTC + "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", // WETH ], }), }, @@ -64,6 +65,7 @@ module.exports = { "0xA5E0E46462970C9Ee8C2ECadcde254c483748Ec4", // b3pool "0xae87e5fa20f335ce14aa3b9e0616308d9ac7d4ce", // crvUSDT ADDRESSES.bsc.BTCB, // BTCB + "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", // ETH ], }), }, @@ -94,6 +96,7 @@ module.exports = { "0x1337BedC9D22ecbe766dF105c9623922A27963EC", // av3crv "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", // crv3crypto ADDRESSES.avax.BTC_b, // BTC.b + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", // WETH.e ], }), }, @@ -112,6 +115,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0x1337bedc9d22ecbe766df105c9623922a27963ec", // x3CRV + "0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1", // WETH ], }), }, @@ -165,6 +169,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0xcaef324bea3ff5c7a08710081294f3344ffadc54", // FRAX/USDT + "0xfc00000000000000000000000000000000000006", // wfrxETH ], }), }, @@ -176,4 +181,20 @@ module.exports = { ], }), }, + metis: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x420000000000000000000000000000000000000a", // WETH + ], + }), + }, + mode: { + tvl: sumTokensExport({ + owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", + tokens: [ + "0x4200000000000000000000000000000000000006", // WETH + ], + }), + }, }; From 5058828cd45018d4dc0cd3d3e89df20be739d915 Mon Sep 17 00:00:00 2001 From: hashai <163602313+SamvidNayak@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:10:10 +0300 Subject: [PATCH 1388/1768] add Hash AI tvl adapter (#12633) Co-authored-by: SamvidNayak --- projects/hashai/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/hashai/index.js diff --git a/projects/hashai/index.js b/projects/hashai/index.js new file mode 100644 index 0000000000..1243184b65 --- /dev/null +++ b/projects/hashai/index.js @@ -0,0 +1,20 @@ +const { staking } = require('../helper/staking'); +const { sumTokensExport } = require("../helper/unwrapLPs"); +const coreAssets = require("../helper/coreAssets.json"); + +const contracts = [ + '0xd2fe354cfebaa06f2140f13b66d0b3e1fc3ceec0', + '0x27cc372757ca955ebf93bd577cd95c4e12f5c14b', +]; + +const hashai = '0x292fcDD1B104DE5A00250fEBbA9bC6A5092A0076'; + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owners: contracts, + token: coreAssets.null + }), + staking: staking(contracts, hashai), + }, +}; From 18deb81cc8a4e6b2cbcb58868be92ac874e7eeba Mon Sep 17 00:00:00 2001 From: yash-trufin <113037107+yash-trufin@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:41:50 +0530 Subject: [PATCH 1389/1768] Add Injective TVL calculation to TruStake (#12636) --- projects/trufin-trustake/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/trufin-trustake/index.js b/projects/trufin-trustake/index.js index 83693706c7..6b4618b127 100644 --- a/projects/trufin-trustake/index.js +++ b/projects/trufin-trustake/index.js @@ -1,6 +1,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const { function_view } = require('../helper/chain/aptos') const { call: near_call } = require('../helper/chain/near') +const { queryContract } = require('../helper/chain/cosmos') const TRUSTAKE_APT_CONTRACT_ADDR = "0x6f8ca77dd0a4c65362f475adb1c26ae921b1d75aa6b70e53d0e340efd7d8bc80" const MODULE = "staker" @@ -35,6 +36,13 @@ async function nearTvl() { return { near: totalStaked[0] / 1e24 } } +const TRUSTAKE_INJ_CONTRACT_ADDR = "inj1x997dy6ka7y8u0r56yk2k83llspy33yet9zcnq" + +async function injectiveTvl(api) { + const { total_staked } = await queryContract({ contract: TRUSTAKE_INJ_CONTRACT_ADDR, chain: "injective", data: '{"get_total_staked": {}}'}) + api.add(ADDRESSES.injective.INJ, total_staked) +} + module.exports = { methodology: `Counts the TVL of native tokens across all TruStake vaults.`, ethereum: { @@ -45,5 +53,8 @@ module.exports = { }, near: { tvl: nearTvl + }, + injective: { + tvl: injectiveTvl } } From b0f298282a63f007a34f64192da8aca6ad42ce0b Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:30:27 +0100 Subject: [PATCH 1390/1768] Fix: Franklin-templeton (decimals issues) (#12637) --- projects/franklinTempleton-finance/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/franklinTempleton-finance/index.js b/projects/franklinTempleton-finance/index.js index dfaa7d7614..c364ccda98 100644 --- a/projects/franklinTempleton-finance/index.js +++ b/projects/franklinTempleton-finance/index.js @@ -12,8 +12,8 @@ const BENJI = { const stellarTvl = async (api) => { const stellarApi = `https://api.stellar.expert/explorer/public/asset/${BENJI[api.chain].ticker}-${BENJI[api.chain].address}` const response = await fetch(stellarApi) - const {supply, toml_info} = await response.json() - const adjustedSupply = toUSDTBalances((supply / Math.pow(10, toml_info.decimals))) + const {supply} = await response.json() + const adjustedSupply = toUSDTBalances((supply / Math.pow(10, 7))) const [[tokenAddress, tokenBalance]] = Object.entries(adjustedSupply); return api.add(tokenAddress, tokenBalance, { skipChain: true }) } From d1d9795fd39b067466f93408c03a5cda9106356a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:46:47 +0100 Subject: [PATCH 1391/1768] fix osmosis --- projects/helper/chain/cosmos.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index 7f2a9566aa..a315e9bb12 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -2,7 +2,7 @@ const sdk = require("@defillama/sdk"); const { transformBalances } = require("../portedTokens"); const { get, post } = require("../http"); const { PromisePool } = require("@supercharge/promise-pool"); -const { log } = require("../utils"); +const { log, sleep } = require("../utils"); const ADDRESSES = require('../coreAssets.json') // where to find chain info @@ -11,7 +11,7 @@ const ADDRESSES = require('../coreAssets.json') // https://cosmos-chain.directory/chains const endPoints = { crescent: "https://mainnet.crescent.network:1317", - osmosis: "https://rest.cosmos.directory/osmosis", + osmosis: "https://lcd.osmosis.zone", cosmos: "https://cosmoshub-lcd.stakely.io", kujira: "https://kuji-api.kleomedes.network", comdex: "https://rest.comdex.one", @@ -304,10 +304,15 @@ async function sumTokens({ balances, owners = [], chain, owner, tokens, blacklis if (owner) owners = [owner] log(chain, "fetching balances for ", owners.length); let parallelLimit = 25; + if (chain === 'osmosis') parallelLimit = 5; const { errors } = await PromisePool.withConcurrency(parallelLimit) .for(owners) - .process(async (owner) => getBalance2({ balances, owner, chain, tokens, blacklistedTokens, api, })); + .process(async (owner, i) => { + await getBalance2({ balances, owner, chain, tokens, blacklistedTokens, api, }) + if (chain === 'osmosis' && owners.length > 100) + await sleep(3000) + }); if (errors && errors.length) throw errors[0]; return transformBalances(chain, balances); From 9d69b4c4d0764682efac81ad7e27fa006a4c9b70 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:10:47 +0100 Subject: [PATCH 1392/1768] code refactor --- projects/franklinTempleton-finance/index.js | 24 ++++++++------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/projects/franklinTempleton-finance/index.js b/projects/franklinTempleton-finance/index.js index c364ccda98..50723516ea 100644 --- a/projects/franklinTempleton-finance/index.js +++ b/projects/franklinTempleton-finance/index.js @@ -1,7 +1,5 @@ -const { toUSDTBalances } = require('../helper/balances'); - const BENJI = { - stellar: {ticker: "BENJI", address: 'GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5'}, + stellar: { ticker: "BENJI", address: 'GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5' }, arbitrum: '0xb9e4765bce2609bc1949592059b17ea72fee6c6a', polygon: '0x408a634b8a8f0de729b48574a3a7ec3fe820b00a', avax: '0xe08b4c1005603427420e64252a8b120cace4d122', @@ -10,27 +8,23 @@ const BENJI = { } const stellarTvl = async (api) => { - const stellarApi = `https://api.stellar.expert/explorer/public/asset/${BENJI[api.chain].ticker}-${BENJI[api.chain].address}` - const response = await fetch(stellarApi) - const {supply} = await response.json() - const adjustedSupply = toUSDTBalances((supply / Math.pow(10, 7))) - const [[tokenAddress, tokenBalance]] = Object.entries(adjustedSupply); - return api.add(tokenAddress, tokenBalance, { skipChain: true }) + const stellarApi = `https://api.stellar.expert/explorer/public/asset/${BENJI[api.chain].ticker}-${BENJI[api.chain].address}` + const response = await fetch(stellarApi) + const { supply } = await response.json() + api.addUSDValue(supply / 1e7) } const evmTVL = async (api) => { const [decimals, totalSupply] = await Promise.all([ - api.call({target: BENJI[api.chain], abi:'erc20:decimals'}), - api.call({target: BENJI[api.chain], abi:'erc20:totalSupply'}) + api.call({ target: BENJI[api.chain], abi: 'erc20:decimals' }), + api.call({ target: BENJI[api.chain], abi: 'erc20:totalSupply' }) ]) - const adjustedSupply = toUSDTBalances((totalSupply / Math.pow(10, decimals))) - const [[tokenAddress, tokenBalance]] = Object.entries(adjustedSupply); - api.add(tokenAddress, tokenBalance, { skipChain: true }) - + api.addUSDValue((totalSupply / Math.pow(10, decimals))) } Object.keys(BENJI).forEach((chain) => { module.exports[chain] = { tvl: chain === 'stellar' ? stellarTvl : evmTVL }; }); +module.exports.misrepresentedTokens = true; \ No newline at end of file From 8aa54f455cf23bd9d54768279a797896122ff5db Mon Sep 17 00:00:00 2001 From: Sainath Reddy Date: Tue, 10 Dec 2024 14:45:42 +0530 Subject: [PATCH 1393/1768] feat: Add additional WBTC liquidity address to garden project (#12638) --- projects/garden/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/garden/index.js b/projects/garden/index.js index bb24cd53f2..5b1453b395 100644 --- a/projects/garden/index.js +++ b/projects/garden/index.js @@ -5,7 +5,7 @@ const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') const SEED_TOKEN_ADDRESS = "0x86f65121804D2Cdbef79F9f072D4e0c2eEbABC08"; // SEED TOKEN (Garden's Governance Token) Address const STAKING_CONTRACT_ADDRESS = "0xe2239938Ce088148b3Ab398b2b77Eedfcd9d1AfC"; -const WBTC_LIQUIDITY_ADDRESS = "0x9DD9C2D208B07Bf9A4eF9CA311F36d7185749635"; +const WBTC_LIQUIDITY_ADDRESSES = ["0x9DD9C2D208B07Bf9A4eF9CA311F36d7185749635","0xEF440AC3D77F906F9F0E1C15B35BCF300B4C427C"]; module.exports = { bitcoin: { @@ -15,13 +15,13 @@ module.exports = { }, ethereum: { tvl: sumTokensExport({ - owners: [WBTC_LIQUIDITY_ADDRESS], + owners: WBTC_LIQUIDITY_ADDRESSES, tokens: [ADDRESSES.ethereum.WBTC], }), }, arbitrum: { tvl: sumTokensExport({ - owners: [WBTC_LIQUIDITY_ADDRESS], + owners: WBTC_LIQUIDITY_ADDRESSES, tokens: [ADDRESSES.arbitrum.WBTC], }), staking: sumTokensExport({ From 8a0b0dc79fcdb8741b8d9da5ff58c52c684159de Mon Sep 17 00:00:00 2001 From: fico23 Date: Tue, 10 Dec 2024 14:01:39 +0100 Subject: [PATCH 1394/1768] AERA Finance: new factory on Base (#12642) --- projects/aera/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/aera/index.js b/projects/aera/index.js index 0b7c7ccc6a..0f96ce1949 100644 --- a/projects/aera/index.js +++ b/projects/aera/index.js @@ -130,6 +130,10 @@ const config = { { address: "0x5CD0Cb0DcDEF98a8d07a8D44054a13F2c35C53E1", fromBlock: 13582859 + }, + { + address: "0x1395C314782bba704ca984ad41e57275f6E77b09", + fromBlock: 23294637 } ] }, From 7275cbf7436ca1f0b0e8aa88898a8ef78b3fa40b Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:28:33 +0100 Subject: [PATCH 1395/1768] Fix: SailingProtocol (#12640) --- projects/sailingprotocol/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/projects/sailingprotocol/index.js b/projects/sailingprotocol/index.js index 9148042624..c413968e21 100644 --- a/projects/sailingprotocol/index.js +++ b/projects/sailingprotocol/index.js @@ -68,11 +68,6 @@ const tokens = [ "ticker": "QQQ", "sufficientLiquidityForDefiLlamaIndexer": false, }, - { - "address": "0xBa5c32915e2303EA41d1986f5B3AAd0a98B4Fd80", - "ticker": "ETHE", - "sufficientLiquidityForDefiLlamaIndexer": false, - }, { "address": "0xA78Fb2b64Ce2Fb8bBe46968cf961C5Be6eB12924", "ticker": "AAAU", From 97b0a98251896e7da9c27ce0a689afd469bbf6bf Mon Sep 17 00:00:00 2001 From: Sainath Reddy Date: Tue, 10 Dec 2024 18:58:46 +0530 Subject: [PATCH 1396/1768] feat: Add additional BTC address in bitcoin-book to garden project (#12639) --- projects/helper/bitcoin-book/garden.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/helper/bitcoin-book/garden.js b/projects/helper/bitcoin-book/garden.js index 11ad3a29ca..15748805f0 100644 --- a/projects/helper/bitcoin-book/garden.js +++ b/projects/helper/bitcoin-book/garden.js @@ -1,3 +1,4 @@ module.exports = [ - "bc1qhww67feqfdf6xasjat88x5stqa6vzx0c6fgtnj" + "bc1qhww67feqfdf6xasjat88x5stqa6vzx0c6fgtnj", + "bc1qs0vw6ahdv2xc9a5jkgqdpawmmc6eq6hqr50e7e" ] \ No newline at end of file From 344763297021dcb0b8261141dd8c7de3de94fb21 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:29:29 +0100 Subject: [PATCH 1397/1768] Fix: Furucombo (sunset) (#12649) --- projects/furucombo/index.js | 39 +++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/projects/furucombo/index.js b/projects/furucombo/index.js index a3263e5d93..e411dd4ce6 100644 --- a/projects/furucombo/index.js +++ b/projects/furucombo/index.js @@ -1,22 +1,23 @@ const { getLogs } = require('../helper/cache/getLogs') -const config = { - polygon: { factory: '0xFD1353baBf86387FcB6D009C7b74c1aB2178B304', fromBlock: 29080112 }, + +const factory = '0xFD1353baBf86387FcB6D009C7b74c1aB2178B304' +const fromBlock = '29080112' + +const tvl = async (api) => { + const logs = await getLogs({ + api, + target: factory, + eventAbi: 'event FundCreated (address indexed newFund, address comptroller, address shareToken, address vault)', + onlyArgs: true, + fromBlock, + }) + + const tokens = await api.multiCall({ abi: 'address[]:getAssetList', calls: logs.map(l => l.newFund) }) + const ownerTokens = tokens.map((t, i) => [t, logs[i].vault]) + return api.sumTokens({ ownerTokens }) } -Object.keys(config).forEach(chain => { - const { factory, fromBlock} = config[chain] - module.exports[chain] = { - tvl: async (api) => { - const logs = await getLogs({ - api, - target: factory, - eventAbi: 'event FundCreated (address indexed newFund, address comptroller, address shareToken, address vault)', - onlyArgs: true, - fromBlock, - }) - const tokens = await api.multiCall({ abi: 'address[]:getAssetList', calls: logs.map(l => l.newFund) }) - const ownerTokens = tokens.map((t, i) => [t, logs[i].vault]) - return api.sumTokens({ ownerTokens }) - } - } -}) \ No newline at end of file +module.exports = { + deadFrom: '2024-12-09', + polygon : { tvl : () => ({}) } +} From 22bfcc6478776a413e7a2da92cb693a050ac9dcc Mon Sep 17 00:00:00 2001 From: MishaShWoof Date: Tue, 10 Dec 2024 15:30:01 +0200 Subject: [PATCH 1398/1768] Add Mantle cUSDev3 (#12645) --- projects/compound-v3/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/compound-v3/index.js b/projects/compound-v3/index.js index 0d4ca453e2..5660fc5bb8 100644 --- a/projects/compound-v3/index.js +++ b/projects/compound-v3/index.js @@ -41,5 +41,10 @@ module.exports = compoundV3Exports({ '0x995E394b8B2437aC8Ce61Ee0bC610D617962B214', // USDT Market '0xE36A30D249f7761327fd973001A32010b521b6Fd', // ETH Market ], - } + }, + mantle: { + markets: [ + '0x606174f62cd968d8e684c645080fa694c1D7786E', // USDe Market + ], + }, }) From 1b6380a6f164edcc41724ce3f9056f3f04e49b89 Mon Sep 17 00:00:00 2001 From: tyler-tsai Date: Tue, 10 Dec 2024 21:30:16 +0800 Subject: [PATCH 1399/1768] feat: add sUSDX (#12648) Co-authored-by: Tyler Tsai --- projects/helio-money/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index a523494260..ffa67ff082 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -98,7 +98,11 @@ module.exports = { //FDUSD ["0xc5f0f7b66764f6ec8c8dff7ba683102295e16409","0x2202a491752Fee0E616F06A89E2eF416E2Fcd7e9"], - + // sUSDX + [ + "0x7788A3538C5fc7F9c7C8A74EAC4c898fC8d87d92", + "0x98b167359566c1ea05335D52794C7Eb6f8E6739a", + ], // vUSDT, PSM - LSR // ["0x55d398326f99059ff775485246999027b3197955", "0x5763DDeB60c82684F3D0098aEa5076C0Da972ec7"], From 0f4e6901fe9349b319e728b4a708d320f1156ca9 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:30:40 +0100 Subject: [PATCH 1400/1768] Fix: Clone (sunset) (#12647) --- projects/clone/index.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/projects/clone/index.js b/projects/clone/index.js index 13dabc9eaf..659d9f47b6 100644 --- a/projects/clone/index.js +++ b/projects/clone/index.js @@ -21,10 +21,9 @@ async function tvl() { } module.exports = { + deadFrom: "2024-09-30", + hallmarks: [[1727654400, "Clone Sunset"]], timetravel: false, - solana: { - tvl, - }, - methodology: - 'Return the amount of collateral in the vault.' + solana: { tvl : () => ({})}, + methodology: 'Return the amount of collateral in the vault.' } From 6a6a3dcd1ff7dd2e218494e6afe863deac701d7c Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:00:27 +0100 Subject: [PATCH 1401/1768] Fix: AllStake (#12641) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/allstake/idls/strategy_manager.json | 82 -------------------- projects/allstake/index.js | 43 ++++------ 2 files changed, 14 insertions(+), 111 deletions(-) delete mode 100644 projects/allstake/idls/strategy_manager.json diff --git a/projects/allstake/idls/strategy_manager.json b/projects/allstake/idls/strategy_manager.json deleted file mode 100644 index c543451595..0000000000 --- a/projects/allstake/idls/strategy_manager.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "version": "0.1.0", - "name": "strategy_manager", - "instructions": [], - "accounts": [ - { - "name": "StrategyManager", - "type": { - "kind": "struct", - "fields": [ - { - "name": "data", - "type": { - "defined": "VersionedStrategyManager" - } - } - ] - } - } - ], - "types": [ - { - "name": "StrategyManagerV1", - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "docs": [ - "owner of strategy manager program" - ], - "type": "publicKey" - }, - { - "name": "strategyMints", - "docs": [ - "list of supported strategies' mint address" - ], - "type": { - "array": [ - "publicKey", - 32 - ] - } - }, - { - "name": "strategyMintsLen", - "docs": [ - "size of the list above" - ], - "type": "u8" - }, - { - "name": "minWithdrawDelay", - "docs": [ - "min withdraw queueing delay length in seconds" - ], - "type": "i64" - } - ] - } - }, - { - "name": "VersionedStrategyManager", - "type": { - "kind": "enum", - "variants": [ - { - "name": "V1", - "fields": [ - { - "defined": "StrategyManagerV1" - } - ] - } - ] - } - } - ], - "events": [], - "errors": [] -} \ No newline at end of file diff --git a/projects/allstake/index.js b/projects/allstake/index.js index bb58a5242c..c8b3dbaa44 100644 --- a/projects/allstake/index.js +++ b/projects/allstake/index.js @@ -1,17 +1,15 @@ const { getUniqueAddresses } = require('../helper/utils'); -const { call, sumTokens } = require('../helper/chain/near'); -const { sumTokens2, getProvider } = require('../helper/solana'); +const { call, sumTokens, } = require('../helper/chain/near'); +const { sumTokens2, getConnection } = require('../helper/solana'); const { sumTokens2: evmSumTokens2 } = require("../helper/unwrapLPs") -const { Program } = require('@coral-xyz/anchor'); const { PublicKey } = require('@solana/web3.js'); const ALLSTAKE_NEAR_CONTRACT = 'allstake.near'; const ALLSTAKE_SOLANA_PROGRAM = new PublicKey('a11zL6Uxue6mYG3JD3APmnVhS4RVjGTJZbENY7L6ZfD'); -const ALLSTAKE_SOLANA_PROGRAM_IDL = require('./idls/strategy_manager.json'); const ALLSTAKE_ETHEREUM_STRATEGY_MANAGER_CONTRACT = '0x344F8B88357A710937f2b3db9d1B974B9a002afB'; async function ethereumTvl(api) { - const strategies = await api.fetchList({ lengthAbi: 'strategiesLen', itemAbi: 'strategies', target: ALLSTAKE_ETHEREUM_STRATEGY_MANAGER_CONTRACT}) + const strategies = await api.fetchList({ lengthAbi: 'strategiesLen', itemAbi: 'strategies', target: ALLSTAKE_ETHEREUM_STRATEGY_MANAGER_CONTRACT }) const tokens = await api.multiCall({ abi: 'address:underlying', calls: strategies }); return evmSumTokens2({ api, tokensAndOwners2: [tokens, strategies] }); } @@ -26,30 +24,17 @@ async function nearTvl() { } async function solanaTvl() { - const provider = getProvider(); - const programId = ALLSTAKE_SOLANA_PROGRAM; - // const idl = await Program.fetchIdl(programId, provider) - const program = new Program(ALLSTAKE_SOLANA_PROGRAM_IDL, programId, provider); - const state = await program.account.strategyManager.all(); - const strategyManager = state[0].account.data.v1[0]; - const tokens = getUniqueAddresses(strategyManager.strategyMints.slice(0, strategyManager.strategyMintsLen).map(mint => mint.toBase58()), true); - - const tokensAndOwners = []; - for (const token of tokens) { - const pubKey = new PublicKey(token); - const owner = PublicKey.findProgramAddressSync( - [ - Buffer.from('STRATEGY'), - pubKey.toBuffer(), - ], - ALLSTAKE_SOLANA_PROGRAM - )[0].toBase58(); - tokensAndOwners.push([token, owner]); - } - - return sumTokens2({ - tokensAndOwners + const result = await getConnection().getProgramAccounts(ALLSTAKE_SOLANA_PROGRAM, { + encoding: "base64", + // We only care about the strategy addresses. + dataSlice: { offset: 0, length: 0 }, + filters: [ + { dataSize: 316 }, + ], }); + const owners = result.map(({ pubkey }) => pubkey); + + return sumTokens2({ owners }); } module.exports = { @@ -57,7 +42,7 @@ module.exports = { tvl: nearTvl, }, solana: { - tvl: solanaTvl, + tvl: solanaTvl }, ethereum: { tvl: ethereumTvl, From 721057bb15d8c30e6249fa2a4cc9bcf8e2bed65f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:19:44 +0100 Subject: [PATCH 1402/1768] Add Access Protocol TVL functionality and refactor code (#12652) Co-authored-by: Vladislav Matus --- projects/access-protocol/index.js | 24 ++++++++++++++++ projects/helper/utils/solana/layout.js | 3 +- .../utils/solana/layouts/mixed-layout.js | 28 ++++++++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 projects/access-protocol/index.js diff --git a/projects/access-protocol/index.js b/projects/access-protocol/index.js new file mode 100644 index 0000000000..de1f60c510 --- /dev/null +++ b/projects/access-protocol/index.js @@ -0,0 +1,24 @@ +const { getMultipleAccounts, decodeAccount } = require("../helper/solana"); +const { PublicKey } = require("@solana/web3.js"); + +async function staking(api) { + const programId = new PublicKey('6HW8dXjtiTGkD4jzXs7igdFmZExPpmwUrRN5195xGup') + const accountKey = getKey(programId); + const [account] = await getMultipleAccounts([accountKey]); + const decoded = decodeAccount('access', account); + api.add(decoded.tokenMint.toBase58(), decoded.totalStaked); +} + +const getKey = (address) => { + return PublicKey.findProgramAddressSync([address.toBuffer()], address)[0].toBase58(); +} + +module.exports = { + timetravel: false, + methodology: + "Uses the Access Protocol SDK to fetch the total supply of staked ACS tokens", + solana: { + tvl: async () => ({}), + staking, + }, +}; diff --git a/projects/helper/utils/solana/layout.js b/projects/helper/utils/solana/layout.js index 42e27acd27..e409ec8d92 100644 --- a/projects/helper/utils/solana/layout.js +++ b/projects/helper/utils/solana/layout.js @@ -5,7 +5,7 @@ const { parsePhoenix } = require('./layouts/phoenix-dex') const { RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM, RAYDIUM_STABLE_STATE_LAYOUT_V1, } = require('./layouts/raydium-layout') const { INVESTIN_FUND_DATA, } = require('./layouts/investin-layout') const { MARKET_STATE_LAYOUT_V3, OPEN_ORDERS_LAYOUT_V2, MARKET_STATE_LAYOUT_V3_MINIMAL } = require('./layouts/openbook-layout') -const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, } = require('./layouts/mixed-layout'); +const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, ACCESS_LAYOUT, } = require('./layouts/mixed-layout'); const { SCN_STAKE_POOL, TOKEN_LAYOUT, } = require("./layouts/scnSOL"); const { SANCTUM_INFINITY } = require("./layouts/sanctum-infinity-layout"); const { parseSanctumLstStateList } = require("./layouts/sanctum-validators-lsts-layout"); @@ -65,6 +65,7 @@ const customDecoders = { stakePool: defaultParseLayout(STAKE_POOL_LAYOUT), hhParlay: defaultParseLayout(PARLAY_LAYOUT_PARTIAL), hhPari: defaultParseLayout(HH_PARI_LAYOUT_PARTIAL), + access: defaultParseLayout(ACCESS_LAYOUT), } function decodeAccount(layout, accountInfo) { diff --git a/projects/helper/utils/solana/layouts/mixed-layout.js b/projects/helper/utils/solana/layouts/mixed-layout.js index 53962af37c..3fe49025b4 100644 --- a/projects/helper/utils/solana/layouts/mixed-layout.js +++ b/projects/helper/utils/solana/layouts/mixed-layout.js @@ -269,8 +269,34 @@ const HH_PARI_LAYOUT_PARTIAL = BufferLayout.struct([ BufferLayout.seq(u64(), u8().span, 'amounts'), ]); +const ACCESS_LAYOUT = BufferLayout.struct([ + BufferLayout.u8('tag'), + BufferLayout.u8('bumpSeed'), + uint64('dailyInflation'), + publicKey('tokenMint'), + publicKey('authority'), + uint64('creationTime'), + uint64('totalStaked'), + uint64('totalStakedSnapshot'), + uint64('lastSnapshotOffset'), + uint128('ixGate'), + publicKey('freezeAuthority'), + uint128('adminIxGate'), + BufferLayout.u16('feeBasisPoints'), + uint64('lastFeeDistributionTime'), + BufferLayout.u32('feeRecipientsCount'), + BufferLayout.seq( + BufferLayout.struct([ + publicKey('owner'), + uint64('percentage'), + ]), + 10, + 'recipients' + ), +]); + module.exports = { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, ESOLStakePoolLayout, - PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, + PARLAY_LAYOUT_PARTIAL, HH_PARI_LAYOUT_PARTIAL, ACCESS_LAYOUT } From a52c1fb6352804bb5d6e57864a06c20402d6ba29 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:24:39 +0100 Subject: [PATCH 1403/1768] track taraxa treasury --- projects/treasury/taraxa.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/treasury/taraxa.js diff --git a/projects/treasury/taraxa.js b/projects/treasury/taraxa.js new file mode 100644 index 0000000000..e3a8bef5af --- /dev/null +++ b/projects/treasury/taraxa.js @@ -0,0 +1,10 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') + +module.exports = { + tara: { + tvl: async () => ({}), + staking: async (api) => { + return sumTokens2({ api, tokens: [nullAddress], owners: ['0x723304d1357a2334fcf902aa3d232f5139080a1b'] }) + } + } +} \ No newline at end of file From 7e4cf629be88909709c27b9b0e642a3d468eff05 Mon Sep 17 00:00:00 2001 From: MirthFutures <69535002+MirthFutures@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:25:24 -0500 Subject: [PATCH 1404/1768] Add Lisk Chain to Beefy (#12650) --- projects/beefy/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/beefy/index.js b/projects/beefy/index.js index 58dba00600..7a4d0c8172 100644 --- a/projects/beefy/index.js +++ b/projects/beefy/index.js @@ -46,6 +46,7 @@ const chains = { era: 324, metis: 1088, polygon_zkevm: 1101, + lisk: 1135, moonbeam: 1284, moonriver: 1285, sei: 1329, From ee386dfb5005dfc60742b0a3fa6a7026bee518b8 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 10 Dec 2024 16:10:59 +0000 Subject: [PATCH 1405/1768] fix decimals shifts --- projects/navi/index.js | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/projects/navi/index.js b/projects/navi/index.js index d4f0bd2ca3..9ec651667a 100644 --- a/projects/navi/index.js +++ b/projects/navi/index.js @@ -1,18 +1,8 @@ -const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui") +const { fetchURL } = require('../helper/utils') -const decimalShift = { - [ADDRESSES.sui.USDC]: -3, // USDC - [ADDRESSES.sui.USDT]: -3, // USDT - [ADDRESSES.sui.WETH]: -1, // WETH - ["0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD"]: -3, // AUSD - [ADDRESSES.sui.WBTC]: -1, // WBTC - [ADDRESSES.sui.USDC_CIRCLE]: -3, // native USDC - ['0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH']: -1, // native ETH - ['0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY']: -3, // USDY - ['0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a::fdusd::FDUSD']: -3, // FDUSD - ['0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS']: -3, // NS - ['0x5f496ed5d9d045c5b788dc1bb85f54100f2ede11e46f6a232c29daada4c5bdb6::coin::COIN']: -1, //stBTC +function getDecimalShifts(dynamicFields){ + return fetchURL(`https://coins.llama.fi/prices/current/${dynamicFields.map(c=>`sui:0x${c.fields.value.fields.coin_type}`).join(',')}`).then(r=>r.data.coins) } const storageId = "0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe" @@ -22,11 +12,15 @@ async function borrow(api) { const reservesId = storageObject.fields.reserves.fields.id.id const dynamicFields = await sui.getDynamicFieldObjects({ parent: reservesId }) + const decimals = await getDecimalShifts(dynamicFields) + dynamicFields.forEach((data) => { const coin = '0x' + data.fields.value.fields.coin_type const borrowed = data.fields.value.fields.borrow_balance.fields.total_supply * data.fields.value.fields.current_borrow_index / 1e27 - const amount = borrowed * (10 ** (decimalShift[coin] ?? 0)) - api.add(coin, amount) + if(decimals["sui:"+coin]){ + const amount = borrowed * (10 ** (decimals["sui:"+coin].decimals - 9)) + api.add(coin, amount) + } }) } @@ -36,13 +30,16 @@ async function tvl(api) { const reservesId = storageObject.fields.reserves.fields.id.id const dynamicFields = await sui.getDynamicFieldObjects({ parent: reservesId }) + const decimals = await getDecimalShifts(dynamicFields) dynamicFields.forEach(object => { const coin = '0x' + object.fields.value.fields.coin_type const total_supply = object.fields.value.fields.supply_balance.fields.total_supply * object.fields.value.fields.current_supply_index / 1e27 const borrowed = object.fields.value.fields.borrow_balance.fields.total_supply * object.fields.value.fields.current_borrow_index / 1e27 - const amount = (total_supply - borrowed) * (10 ** (decimalShift[coin] ?? 0)) - api.add(coin, amount) + if(decimals["sui:"+coin]){ + const amount = (total_supply - borrowed) * (10 ** (decimals["sui:"+coin].decimals - 9)) + api.add(coin, amount) + } }) } From 28d4260caad578a1d241bc254c6ff490520ae270 Mon Sep 17 00:00:00 2001 From: doomsower <12031673+doomsower@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:45:48 +0300 Subject: [PATCH 1406/1768] fix: update gearbox treasury script (#12655) --- projects/treasury/gearbox.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/projects/treasury/gearbox.js b/projects/treasury/gearbox.js index 45b2ffaee4..2e8f5f5e7c 100644 --- a/projects/treasury/gearbox.js +++ b/projects/treasury/gearbox.js @@ -3,8 +3,14 @@ const { nullAddress, treasuryExports } = require("../helper/treasury"); // Treasury const treasury = "0x7b065Fcb0760dF0CEA8CFd144e08554F3CeA73D1"; -const GEAR = "0xBa3335588D9403515223F109EdC4eB7269a9Ab5D"; +const treasuryFee = "0x3E965117A51186e41c2BB58b729A1e518A715e5F"; +const treasuryArb = "0x2c31eFFE426765E68A43163A96DD13DF70B53C14"; +const treasuryOpt = "0x1ACc5BC353f23B901801f3Ba48e1E51a14263808"; +const aeraVault = "0x564bc596affd8eb9c5065bc37835d801f3830c9e"; +const GEAR = "0xBa3335588D9403515223F109EdC4eB7269a9Ab5D"; +const GEAR_ARB = "0x2F26337576127efabEEc1f62BE79dB1bcA9148A4"; +const GEAR_OPT = "0x39E6C2E1757ae4354087266E2C3EA9aC4257C1eb"; module.exports = treasuryExports({ ethereum: { @@ -16,8 +22,30 @@ module.exports = treasuryExports({ ADDRESSES.ethereum.USDC, ADDRESSES.ethereum.DAI, ADDRESSES.ethereum.WSTETH,//wsteth + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.CRVUSD, ], - owners: [treasury], + owners: [treasury,treasuryFee,aeraVault], ownTokens: [GEAR] }, -}) + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDC_CIRCLE, + ], + owners: [treasuryArb], + ownTokens: [GEAR_ARB] + }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.WETH, + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.USDC_CIRCLE, + ], + owners: [treasuryOpt], + ownTokens: [GEAR_OPT] + }, +}); From 822b4fd6ae4ae7dba2aeb396cf68a3711cc8b986 Mon Sep 17 00:00:00 2001 From: rogi-sh <46889545+rogi-sh@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:54:03 +0100 Subject: [PATCH 1407/1768] Migrate Javsphere (JAV) to Base (#12653) Co-authored-by: igorshelkovenkov Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/javsphere/index.js | 43 ++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/projects/javsphere/index.js b/projects/javsphere/index.js index 415910ea31..1d17d51ada 100644 --- a/projects/javsphere/index.js +++ b/projects/javsphere/index.js @@ -1,32 +1,25 @@ -const { get } = require('../helper/http') const { staking } = require("../helper/staking.js"); -const {stakings} = require("../helper/staking"); -const vaultUrl = "https://mainnet.ocean.jellyfishsdk.com/v0/mainnet/address/df1q7zkdpw6hd5wzcxudx28k72vjvpefa4pyqls2grnahhyw4u8kf0zqu2cnz6/vaults"; -const ONE_YEAR_LOCKING_MAINNET = '0xD88Bb8359D694c974C9726b6201479a123212333' -const TWO_YEARS_LOCKING_MAINNET = '0xc5B7aAc761aa3C3f34A3cEB1333f6431d811d638' - -async function tvl(api) { - const tvls = await api.multiCall({ abi: 'uint256:currentTvl', calls: [ONE_YEAR_LOCKING_MAINNET, TWO_YEARS_LOCKING_MAINNET] }) - const dusdTVL = tvls.reduce((agg, i) => agg + i / 1e18, 0) - api.addCGToken('decentralized-usd', dusdTVL) -} - -async function defichainTvl(api) { - const { data: [vault] } = await get(vaultUrl) - const vaultTvl = +vault.collateralValue - +vault.loanValue - api.addCGToken('decentralized-usd', vaultTvl) -} +const STAKING_BASE = '0xE420BBb4C2454f305a3335BBdCE069326985fb5b' +const FREEZER_BASE = '0x03e225D2bd32F5ecE539005B57F9B94A743ADBFB' +const VESTING_BASE = '0x42a40321843220e9811A1385D74d9798436f7002' +const JAV_BASE = '0xEdC68c4c54228D273ed50Fc450E253F685a2c6b9' module.exports = { - methodology: `We count the total value locked in DUSD from all current products (dusd staking is a vault in defichain L1, - 1 year bond and 2 year bond are smart contracts on defimetachain L2. We also track staking and freezer of javsphers native token JAV). `, + methodology: `We count the total value locked from staking and freezer of javsphers native token JAV). `, + hallmarks: [ + [1733837635, "Migration to BASE"], + ], + base: { + tvl: () => { }, + staking: staking([STAKING_BASE, FREEZER_BASE], JAV_BASE), + vesting: staking(VESTING_BASE, JAV_BASE) + }, defichain_evm: { - tvl, - staking: stakings( ['0x4e15D4225623D07Adb43e9D546E57E1E6097e869', '0xF923f0828c56b27C8f57bc698c99543f63091E9A'], - '0x66F3Cf265D2D146A0348F6fC67E3Da0835e0968E'), - vesting: staking('0x7246ad1ac72715c5fd6c1FD7460A63afB8289104','0x66F3Cf265D2D146A0348F6fC67E3Da0835e0968E') - }, defichain: { - tvl: defichainTvl + tvl: () => { }, + staking: () => { }, + }, + defichain: { + tvl: () => { }, }, } From 46f98a7c09e4e74126779f9488670b427673c290 Mon Sep 17 00:00:00 2001 From: vesu-dev <174601598+vesu-dev@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:06:12 +0000 Subject: [PATCH 1408/1768] Add support for new pools (#12657) --- projects/helper/coreAssets.json | 4 +++- projects/vesu/index.js | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 346589bb87..cd9e1f8ecc 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1302,7 +1302,9 @@ "NSTSTRK": "0x04619e9ce4109590219c5263787050726be63382148538f3f936c22aa87d2fc2", "ZEND": "0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34", "NSTR": "0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007", - "BROTHER": "0x03b405a98c9e795d427fe82cdeeeed803f221b52471e3a757574a2b4180793ee" + "BROTHER": "0x03b405a98c9e795d427fe82cdeeeed803f221b52471e3a757574a2b4180793ee", + "XSTRK": "0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a", + "SSTRK": "0x0356f304b154d29d2a8fe22f1cb9107a9b564a733cf6b4cc47fd121ac1af90c9" }, "ton": { "TON": "0x0000000000000000000000000000000000000000", diff --git a/projects/vesu/index.js b/projects/vesu/index.js index 665a01f14f..0ec03ff739 100644 --- a/projects/vesu/index.js +++ b/projects/vesu/index.js @@ -4,7 +4,12 @@ const { abi, allAbi } = require("./abi"); const INTERNAL_SCALE = 10 ** 18; const SINGLETON = "0x02545b2e5d519fc230e9cd781046d3a64e092114f07e44771e0d719d148725ef"; -const POOL_ID = "0x4dc4f0ca6ea4961e4c8373265bfd5317678f4fe374d76f3fd7135f57763bf28"; +const POOLS = [ + "0x4dc4f0ca6ea4961e4c8373265bfd5317678f4fe374d76f3fd7135f57763bf28", // Genesis Pool + "0x7f135b4df21183991e9ff88380c2686dd8634fd4b09bb2b5b14415ac006fe1d", // Re7 USDC Pool + "0x52fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161", // Re7 xSTRK Pool + "0x2e06b705191dbe90a3fbaad18bb005587548048b725116bff3104ca501673c1" // Re7 sSTRK Pool +]; const ASSETS = [ ADDRESSES.starknet.ETH, ADDRESSES.starknet.WBTC, @@ -12,6 +17,8 @@ const ASSETS = [ ADDRESSES.starknet.USDT, ADDRESSES.starknet.WSTETH, ADDRESSES.starknet.STRK, + ADDRESSES.starknet.XSTRK, + ADDRESSES.starknet.SSTRK ]; async function tvl(api) { @@ -19,13 +26,14 @@ async function tvl(api) { } const borrowed = async (api) => { - const calls = ASSETS.map((asset) => ({ target: SINGLETON, params: [POOL_ID, asset] })); + const poolAssets = POOLS.map((pool_id) => ASSETS.map((asset) => ({ pool_id, asset }))).flat(); + const calls = poolAssets.map(({ pool_id, asset }) => ({ target: SINGLETON, params: [pool_id, asset] })) const assetStates = await multiCall({ calls, abi: abi.asset_config_unsafe, allAbi }); - return assetStates.forEach((res, index) => { + assetStates.forEach((res, index) => { const { total_nominal_debt, scale, last_rate_accumulator } = res['0'] const totalDebt = Number(total_nominal_debt) * Number(last_rate_accumulator) / INTERNAL_SCALE; const scaledTotalDebt = totalDebt * Number(scale) / INTERNAL_SCALE; - api.add(ASSETS[index], scaledTotalDebt); + api.add(poolAssets[index].asset, scaledTotalDebt); }); }; From 5adc27cf317fab4869748ca06ad0689f0919c4ff Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Dec 2024 18:58:49 +0100 Subject: [PATCH 1409/1768] move token mapping --- projects/helper/coreAssets.json | 25 ++++++++++--- projects/helper/tokenMapping.js | 64 --------------------------------- 2 files changed, 21 insertions(+), 68 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index cd9e1f8ecc..4ee765914a 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -279,7 +279,8 @@ "WSTETH": "0x5979D7b546E38E414F7E9822514be443A4800529", "plvGLP": "0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1", "USDe": "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", - "FRAX": "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F" + "FRAX": "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F", + "sUSDe": "0x211cc4dd073734da055fbf44a2b4667d5e5fe5d2" }, "fuse": { "WFUSE": "0x0be9e53fd7edac9f859882afdda116645287c629", @@ -1657,7 +1658,10 @@ }, "zilliqa": { "WZIL": "0x94e18ae7dd5ee57b55f30c4b63e2760c09efb192", - "USDT": "0x2274005778063684fbb1bfa96a2b725dc37d75f9" + "USDT": "0x2274005778063684fbb1bfa96a2b725dc37d75f9", + "stZIL": "0x097c26f8a93009fd9d98561384b5014d64ae17c2", + "gZIL": "0x03a79429acc808e4261a68b0117acd43cb0fdbfa", + "XCAD": "0xccf3ea256d42aeef0ee0e39bfc94baa9fa14b0ba" }, "fsc": { "WFSC": "0xb582fD9d0D5C3515EEB6b02fF2d6eE0b6E45E7A7" @@ -1916,7 +1920,10 @@ }, "etlk": { "OGV1WXTZ": "0x3571aed54ccea5b69b00516d5a149a6baea77118", - "WXTZ": "0xc9B53AB2679f573e480d01e0f49e2B5CFB7a3EAb" + "WXTZ": "0xc9B53AB2679f573e480d01e0f49e2B5CFB7a3EAb", + "USDC": "0x796ea11fa2dd751ed01b53c372ffdb4aaa8f00f9", + "USDT": "0x2c03058c8afc06713be23e58d2febc8337dbfe6a", + "WETH": "0xfc24f770f94edbca6d6f885e12d4317320bcb401" }, "rari": { "WETH": "0xf037540e51d71b2d2b1120e8432ba49f29edfbd0", @@ -1953,7 +1960,7 @@ }, "polynomial": { "USDC": "0x17C9D8Cef7Ef072844EEaEdE1F9f54C7E3fa8743", - "fxUSDC": "0x2369EB4a76d80fBeAa7Aa73e1e1f9EAeE88C07F4", + "fxUSDC": "0x2369eb4a76d80fbeaa7aa73e1e1f9eaee88c07f4", "SDAI": "0x615172e47c0C5A6dA8ea959632Ac0166f7a59eDc", "sUSDe": "0x2A06DEAc3E863c23DD6a89Eeacd80aBA9E08B77B", "USD0": "0x6224dC817dC4D5c53fcF3eb08A4f84C456F9f38f" @@ -2060,5 +2067,15 @@ "shido": { "WSHIDO": "0x8cbaffd9b658997e7bf87e98febf6ea6917166f7", "USDC": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd" + }, + "ace": { + "USDC_e": "0x71ee6485cf72b9c3bf183528a2241474f21b2efa" + }, + "tara": { + "WTARA": "0x5d0fa4c5668e5809c83c95a7cef3a9dd7c68d4fe", + "USDM": "0xc26b690773828999c2612549cc815d1f252ea15e" + }, + "corn": { + "BTCN": "0xda5ddd7270381a7c2717ad10d1c0ecb19e3cdfb2" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 504ab1751c..5ad283641e 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -45,70 +45,6 @@ const fixBalancesTokens = { apechain: { '0x0000000000000000000000000000000000000000': { coingeckoId: "apecoin", decimals: 18 }, }, - etlk: { - '0x796ea11fa2dd751ed01b53c372ffdb4aaa8f00f9': { coingeckoId: "usd-coin", decimals: 6 }, - '0x2c03058c8afc06713be23e58d2febc8337dbfe6a': { coingeckoId: "tether", decimals: 6 }, - '0xfc24f770f94edbca6d6f885e12d4317320bcb401': { coingeckoId: "weth", decimals: 18 }, - }, - ace: { - '0x71ee6485cf72b9c3bf183528a2241474f21b2efa': { coingeckoId: "usd-coin", decimals: 6 }, - }, - shido: { - '0x8cbaffd9b658997e7bf87e98febf6ea6917166f7': { coingeckoId: "shido-2", decimals: 18 } // WSHIDO - }, - ethereum: { - '0x777B2913b1BB171A83cA3cdf79CB40523Ac76fDb': { coingeckoId: "ignition-fbtc", decimals: 8 }, - }, - arbitrum: { - '0xbbeb34F9d50e0BABe1bd03Fd4120296354510529': { coingeckoId: "ignition-fbtc", decimals: 8 }, - '0x211cc4dd073734da055fbf44a2b4667d5e5fe5d2': { coingeckoId: "ethena-staked-usde", decimals: 18 }, - }, - bsc: { - '0x2B25f4F134a56054b2b6388C2750F1eA3877e02b': { coingeckoId: "ignition-fbtc", decimals: 8 }, - }, - mantle: { - '0x93C6afA1882ea5E5bF403cA8fcb5aF87409EeCd0': { coingeckoId: "ignition-fbtc", decimals: 8 }, - }, - bob: { - '0xd681C5574b7F4E387B608ed9AF5F5Fc88662b37c': { coingeckoId: "ignition-fbtc", decimals: 8 }, - }, - hela: { - '0x3a035615e101373fa9ba21c5bea7fe4026fc40b4': { coingeckoId: "hela-usd", decimals: 18 }, - }, - bfc: { - '0x74B73Fd2eE237e9219dF30dfFDB206D237cbFC00': { coingeckoId: "coinbase-wrapped-btc", decimals: 8 }, - }, - tara: { - [ADDRESSES.null]: { coingeckoId: "taraxa", decimals: 18 }, - '0x5d0fa4c5668e5809c83c95a7cef3a9dd7c68d4fe': { coingeckoId: "taraxa", decimals: 18 }, - '0xc26b690773828999c2612549cc815d1f252ea15e': { coingeckoId: "mountain-protocol-usdm", decimals: 18 }, - }, - xlayer: { - [ADDRESSES.null]: { coingeckoId: "okb", decimals: 18 }, - }, - starknet: { - [ADDRESSES.starknet.BROTHER]: { coingeckoId: "starknet-brother", decimals: 18 }, - }, - corn: { - '0xda5ddd7270381a7c2717ad10d1c0ecb19e3cdfb2': { coingeckoId: "bitcoin", decimals: 18 }, - }, - nibiru: { - 'unibi': { coingeckoId: "nibiru", decimals: 6 }, - }, - zilliqa: { - '0x097c26f8a93009fd9d98561384b5014d64ae17c2': { coingeckoId: "stzil", decimals: 12 }, - '0x03a79429acc808e4261a68b0117acd43cb0fdbfa': { coingeckoId: "governance-zil", decimals: 15 }, - '0xccf3ea256d42aeef0ee0e39bfc94baa9fa14b0ba': { coingeckoId: "xcad-network", decimals: 18 }, - '0xe64ca52ef34fdd7e20c0c7fb2e392cc9b4f6d049': { coingeckoId: "kalijo", decimals: 18 }, - '0xe9d47623bb2b3c497668b34fcf61e101a7ea4058': { coingeckoId: "lunr-token", decimals: 4 }, - '0x9c3fe3f471d8380297e4fb222efb313ee94dfa0f': { coingeckoId: "zilpepe", decimals: 18 }, - '0x7d2ff48c6b59229d448473d267a714d29f078d3e': { coingeckoId: "zilstream", decimals: 8 }, - '0x241c677d9969419800402521ae87c411897a029f': { coingeckoId: "web3war", decimals: 12 }, - }, - polynomial: { - '0x6224dc817dc4d5c53fcf3eb08a4f84c456f9f38f': { coingeckoId: "usual-usd", decimals: 18 }, - '0x2369eb4a76d80fbeaa7aa73e1e1f9eaee88c07f4': { coingeckoId: "ethereum:0x4f460bb11cf958606c69a963b4a17f9daeeea8b6", decimals: 0 }, - } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 2ab0c5c62500380fd1ca7ec23b1388cc9a9ae447 Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Tue, 10 Dec 2024 20:06:43 +0100 Subject: [PATCH 1410/1768] add folks galgo hallmarks (#12659) --- projects/folks-galgo/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/folks-galgo/index.js b/projects/folks-galgo/index.js index 56702c1ba1..c4da6cdf71 100644 --- a/projects/folks-galgo/index.js +++ b/projects/folks-galgo/index.js @@ -15,3 +15,15 @@ module.exports = { }, }, }; + +module.exports.hallmarks = [ + [1665158400, "Governance 5 Recommitment"], + [1673114400, "Governance 6 Recommitment"], + [1680879600, "Governance 7 Recommitment"], + [1688745600, "Governance 8 Recommitment"], + [1696694400, "Governance 9 Recommitment"], + [1704643200, "Governance 10 Recommitment"], + [1712505600, "Governance 11 Recommitment"], + [1720368000, "Governance 12 Recommitment"], + [1728316800, "Governance 13 Recommitment"], +] \ No newline at end of file From 737cc245fb4e099dda06d01b9f49f94220a79f36 Mon Sep 17 00:00:00 2001 From: Nathan James Date: Tue, 10 Dec 2024 14:08:41 -0500 Subject: [PATCH 1411/1768] Added eos-evm adapter (#12557) --- projects/eos-evm/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/eos-evm/index.js diff --git a/projects/eos-evm/index.js b/projects/eos-evm/index.js new file mode 100644 index 0000000000..11e821a152 --- /dev/null +++ b/projects/eos-evm/index.js @@ -0,0 +1,12 @@ +const { get_account_tvl } = require("../helper/chain/eos"); + +async function eos() { + return await get_account_tvl("eosio.evm", [["eosio.token", "EOS", "eos"]]); +} + +module.exports = { + methodology: `EOS EVM TVL is achieved by querying token balances from [eosio.evm] system account.`, + eos: { + tvl: eos + }, +} From 5cd85bc9b4f28568d5790d2e2a9e274ea42e55bf Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Dec 2024 21:03:11 +0100 Subject: [PATCH 1412/1768] fix kamino --- projects/helper/chain/rpcProxy.js | 6 ++++++ projects/kamino/api.js | 1 + projects/kamino/index.js | 11 ++++++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/projects/helper/chain/rpcProxy.js b/projects/helper/chain/rpcProxy.js index 203d0308cb..a1dd3ce6e6 100644 --- a/projects/helper/chain/rpcProxy.js +++ b/projects/helper/chain/rpcProxy.js @@ -34,4 +34,10 @@ module.exports = { return data }, }, + kamino: { + tvl: async () => { + const { data } = await client.get('/kamino/tvl') + return data + }, + }, } \ No newline at end of file diff --git a/projects/kamino/api.js b/projects/kamino/api.js index c0c58e761c..e41670c743 100644 --- a/projects/kamino/api.js +++ b/projects/kamino/api.js @@ -2,6 +2,7 @@ const { Kamino } = require('@kamino-finance/kliquidity-sdk') const { getConnection, } = require('../helper/solana') async function tvl() { + throw new Error('Using rpc proxy now') const kamino = new Kamino('mainnet-beta', getConnection()); const shareData = await kamino.getStrategiesShareData({}); return { diff --git a/projects/kamino/index.js b/projects/kamino/index.js index c35d609f75..060baec168 100644 --- a/projects/kamino/index.js +++ b/projects/kamino/index.js @@ -1,8 +1,13 @@ -const { getExports } = require('../helper/heroku-api') + +const { kamino } = require("../helper/chain/rpcProxy") module.exports = { doublecounted: true, timetravel: false, - misrepresentedTokens: true, - ...getExports("kamino", ['solana']) + misrepresentedTokens: true, + solana: { tvl } +} + +async function tvl(api) { + api.addUSDValue(await kamino.tvl()) } \ No newline at end of file From 566d8aa33e62b206c9323bfafeed79c6b60f48bf Mon Sep 17 00:00:00 2001 From: Danil Cherevashko Date: Wed, 11 Dec 2024 00:29:19 +0200 Subject: [PATCH 1413/1768] Add swap.coffee JETTON and DFC staking (#12661) --- projects/swap-coffee/index.js | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/projects/swap-coffee/index.js b/projects/swap-coffee/index.js index d74d44216f..42c2a0ba0c 100644 --- a/projects/swap-coffee/index.js +++ b/projects/swap-coffee/index.js @@ -1,28 +1,55 @@ const { sumTokensExport } = require('../helper/chain/ton') +// CES const CES_MASTER = "0:a5d12e31be87867851a28d3ce271203c8fa1a28ae826256e73c506d94d49edad" const CES_STAKING_CONTRACT = "0:29f90533937d696105883b981e9427d1ae411eef5b08eab83f4af89c495d27df" const DEDUST_TON_CES_POOL = "0:123e245683bd5e93ae787764ebf22291306f4a3fcbb2dcfcf9e337186af92c83" const STONFI_CES_TON_POOL = "0:6a839f7a9d6e5303d71f51e3c41469f2c35574179eb4bfb420dca624bb989753" +// XROCK const XROCK_MASTER = "0:157c463688a4a91245218052c5580807792cf6347d9757e32f0ee88a179a6549" const XROCK_STAKING_CONTRACT = "0:c84deaf1d956d5f80be722bbdaeeba33d70d068ace97c6fc23e1bfeb5689e1ca" const DEDUST_XROCK_USDT_POOL = "0:9cf96b400deedd4143bd113d8d767f0042515e2ad510c4b4adbe734cd30563b8" const STONFI_XROCK_USDT_POOL = "0:6ba0e19f6adacbefdcbbc859407241eff578f4a57edc8e3e05e86dcfbb283f20" +// JETTON +const JETTON_STAKING_CONTRACT = "0:160d382ed1a373e7e859d1a76b319b4a3e5c8945f26fc8177662ac59a2c67f38" +const JETTON_MASTER = "0:105e5589bc66db15f13c177a12f2cf3b94881da2f4b8e7922c58569176625eb5" +const STONFI_V2_JETTON_TON_POOL = "0:ff5f1fa2411d33dc6268cd0b74744d726e0c01145c9f4f9c9e867c0e244de490" +const DEDUST_JETTON_TON_POOL = "0:f417fc37e424d65314d646379fa15fb8d342910368d7e755f87b3220994518ff" +const STONFI_JETTON_TON_POOL = "0:139eae96db1bf5d02d7d2cd942dbac45b535757dbccc917997402587aadbfa3a" +const DEDUST_JETTON_USDT_POOL = "0:98ac7350eecb80d1f1d690912e2ed5e541e2efff1a722670103f97ed2407f473" +const STONFI_JETTON_USDT_POOL = "0:1b011c80e68e5942aab7e5c79b7b4faacd4999ecda9579df58b3edfbcca414f4" +const STONFI_V2_JETTON_USDT_POOL = "0:46fe73fa794a69f3d6723d10b136dc884061df06e602ccb5d58414306efe5310" + +// DFC +const DFC_STAKING_CONTRACT = "0:3acaf26d83f9bff8b88b72434fb6ab23182f5153e7690a07557e9626f8824bab" +const DFC_MASTER = "0:f6eb371de82aa9cfb5b22ca547f31fdc0fa0fbb41ae89ba84a73272ff0bf2157" +const DEDUST_DFC_TON_POOL = "0:84868f284afcd59de33eab700b57d18c3a8473946370ac6b6ae29db1dd29c89c" +const STONFI_DFC_TON_POOL = "0:a66a91222d03b4b9810e9af0de5cd47d8b947891854f126c8d2447304824d251" + module.exports = { methodology: "Counts swap.coffee smartcontract balance as TVL.", timetravel: false, ton: { tvl: () => { }, staking: sumTokensExport({ - owners: [CES_STAKING_CONTRACT, XROCK_STAKING_CONTRACT], - tokens: [XROCK_MASTER, CES_MASTER], + owners: [CES_STAKING_CONTRACT, XROCK_STAKING_CONTRACT, JETTON_STAKING_CONTRACT, DFC_STAKING_CONTRACT], + tokens: [XROCK_MASTER, CES_MASTER, JETTON_MASTER, DFC_MASTER], onlyWhitelistedTokens: true }), pool2: sumTokensExport({ - owners: [CES_STAKING_CONTRACT, XROCK_STAKING_CONTRACT], - tokens: [DEDUST_TON_CES_POOL, STONFI_CES_TON_POOL, DEDUST_XROCK_USDT_POOL, STONFI_XROCK_USDT_POOL], + owners: [CES_STAKING_CONTRACT, XROCK_STAKING_CONTRACT, JETTON_STAKING_CONTRACT, DFC_STAKING_CONTRACT], + tokens: [ + DEDUST_TON_CES_POOL, STONFI_CES_TON_POOL, + + DEDUST_XROCK_USDT_POOL, STONFI_XROCK_USDT_POOL, + + STONFI_V2_JETTON_TON_POOL, DEDUST_JETTON_TON_POOL, STONFI_JETTON_TON_POOL, DEDUST_JETTON_USDT_POOL, + STONFI_JETTON_USDT_POOL, STONFI_V2_JETTON_USDT_POOL, + + DEDUST_DFC_TON_POOL, STONFI_DFC_TON_POOL + ], onlyWhitelistedTokens: true }) } From 04e21f0e61d235f08157651b637f8558eb5654b7 Mon Sep 17 00:00:00 2001 From: Deploydon <96504831+Deploydon@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:33:24 +0700 Subject: [PATCH 1414/1768] Added Valence adapter (#12660) --- projects/valence/index.js | 81 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 projects/valence/index.js diff --git a/projects/valence/index.js b/projects/valence/index.js new file mode 100644 index 0000000000..08ee3c0c86 --- /dev/null +++ b/projects/valence/index.js @@ -0,0 +1,81 @@ +const { queryContract, queryV1Beta1 } = require("../helper/chain/cosmos"); +const { transformBalances } = require("../helper/portedTokens"); +//Staked indicates if the asset is staked by the pooler. +//If so, we must query the pool address for the balance to determine the value. If not staked, we can lookup the balance directly. +const poolerAddresses = [ + { + address: "neutron1ulaxj0nelxshdua6l5mdkcqxa5k3gvcc8ut9w5867ej7u80qjx9s5cq5yh", //stars + staked: true, + }, + { + address: "neutron1quwzg6ntuy2tvvdt73rr4e8zkeetu2v5mehjfykrzszlkjavupvsn98wx9", //shade + staked: true, + }, + { + address: "neutron1nqd6ge2r9ndkgkl67js35v6wln093euvvkyynr43fs4lghj7vzgsl4va57", //nolus + staked: true, + }, + { + address: "neutron1yj6m02det6qd6wdugtfytfryzcmt9z9apls0sf4ww07hqq54zexqt5xgaq", //mars + staked: false, + }, +]; + +async function tvl(api) { + for (const pooler of poolerAddresses) { + let lpBalance; + let poolAddress; + + const lpConfig = await queryContract({ + contract: pooler.address, + chain: "neutron", + data: '{"lp_config":{}}', + }); + + poolAddress = lpConfig.pool_address; + + const poolInfo = await queryContract({ + contract: poolAddress, + chain: "neutron", + data: '{"pair":{}}', + }); + + // Get LP token balance for staked pooler + if (pooler.staked) { + lpBalance = await queryContract({ + contract: poolInfo.liquidity_token, + chain: "neutron", + data: `{"balance":{"address":"${pooler.address}"}}`, + }); + + lpBalance = lpBalance.balance || 0; + } else { + const balanceData = await queryV1Beta1({ + url: `bank/v1beta1/balances/${pooler.address}`, + chain: "neutron", + }); + lpBalance = balanceData.balances.find((balance) => balance.denom === poolInfo.liquidity_token)?.amount || 0; + } + + const shareValue = await queryContract({ + contract: poolAddress, + chain: "neutron", + data: `{"share":{"amount":"${lpBalance}"}}`, + }); + + shareValue.forEach((token) => { + const denom = token.info.native_token.denom; + const amount = token.amount; + api.add(denom, amount); + }); + } + + return transformBalances("neutron", api.getBalances()); +} + +module.exports = { + methodology: "Queries the Covenant Liquidity Pooler Addresses to sum up total held value.", + neutron: { + tvl, + }, +}; From 08a6e1171a3e1137460af6c8516eaafa30bb69ce Mon Sep 17 00:00:00 2001 From: liuxieric123 Date: Wed, 11 Dec 2024 06:34:02 +0800 Subject: [PATCH 1415/1768] Agdex (#12644) Co-authored-by: Ryan Lin --- projects/agdex/index.js | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/projects/agdex/index.js b/projects/agdex/index.js index fe7f5b05ad..d9af9793c9 100644 --- a/projects/agdex/index.js +++ b/projects/agdex/index.js @@ -1,5 +1,5 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { function_view } = require("../helper/chain/aptos"); +const { function_view, getResource } = require("../helper/chain/aptos"); const primary_fungible_asset_balance = "0x1::primary_fungible_store::balance" const AGDEX = @@ -31,44 +31,65 @@ const apt_resource_account = "0x8afc7aaa4616c0defbe655f3928a72ff849ef9a6889178f1 const apt_metadata = "0xa"; async function tvl(api) { - const usdc_value = + const usdc_balance = await function_view({ "functionStr": primary_fungible_asset_balance, "type_arguments": ["0x1::fungible_asset::Metadata"], "args": [usdc_resource_account, usdc_metadata] }); - api.add(lzUSDC, usdc_value); + const usdc_r = await getResource( + AGDEX, + `${AGDEX}::pool::Vault<0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDC>` + ); + const usdc_value = parseInt(usdc_balance) + parseInt(usdc_r.reserved_amount); - const usdt_value = + const usdt_balance = await function_view({ "functionStr": primary_fungible_asset_balance, "type_arguments": ["0x1::fungible_asset::Metadata"], "args": [usdt_resource_account, usdt_metadata] }); - api.add(lzUSDC, usdc_value); + const usdt_r = await getResource( + AGDEX, + `${AGDEX}::pool::Vault<0xfa69897532f069bc0806868eaeec3328727d90c0cec710a17dde327e0bfab44f::token_map::USDT>` + ); + const usdt_value = parseInt(usdt_balance) + parseInt(usdt_r.reserved_amount); - const eth_value = + const eth_balance = await function_view({ "functionStr": primary_fungible_asset_balance, "type_arguments": ["0x1::fungible_asset::Metadata"], "args": [eth_resource_account, eth_metadata] }); - api.add(lzUSDC, eth_value); + const eth_r = await getResource( + AGDEX, + `${AGDEX}::pool::Vault<0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WETH>` + ); + const eth_value = parseInt(eth_balance) + parseInt(eth_r.reserved_amount); - const btc_value = + const btc_balance = await function_view({ "functionStr": primary_fungible_asset_balance, "type_arguments": ["0x1::fungible_asset::Metadata"], "args": [btc_resource_account, btc_metadata] }); - api.add(lzUSDC, btc_value); + const btc_r = await getResource( + AGDEX, + `${AGDEX}::pool::Vault<0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WBTC>` + ); + const btc_value = parseInt(btc_balance) + parseInt(btc_r.reserved_amount); - const apt_value = + const apt_balance = await function_view({ "functionStr": primary_fungible_asset_balance, "type_arguments": ["0x1::fungible_asset::Metadata"], "args": [apt_resource_account, apt_metadata] }); + const apt_r = await getResource( + AGDEX, + `${AGDEX}::pool::Vault<0x1::aptos_coin::AptosCoin>` + ); + const apt_value = parseInt(apt_balance) + parseInt(apt_r.reserved_amount); api.add(lzUSDC, usdc_value); api.add(BTC, btc_value); api.add(ETH, eth_value); From ebfcf6ef43ececabaa6b0577c9a597c77c47bbf4 Mon Sep 17 00:00:00 2001 From: Dashan McCain <91407856+DashanMcCain@users.noreply.github.com> Date: Wed, 11 Dec 2024 00:43:18 -0800 Subject: [PATCH 1416/1768] Add Nucleus adapter (#12663) --- projects/nucleus/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/nucleus/index.js diff --git a/projects/nucleus/index.js b/projects/nucleus/index.js new file mode 100644 index 0000000000..83a30e462c --- /dev/null +++ b/projects/nucleus/index.js @@ -0,0 +1,25 @@ +const { getConfig } = require("../helper/cache"); + +async function getMarkets() { + return getConfig('nucleus-vaults', "https://backend.nucleusearn.io/v1/protocol/markets"); +} + +async function getTokens() { + return getConfig('nucleus-tokens', "https://backend.nucleusearn.io/v1/protocol/tokens"); +} + + +const tvl = async (api) => { + + const vaultMap = await getMarkets(); + const owners = Object.keys(vaultMap); + const tokens = await getTokens(); + + return api.sumTokens({ owners, tokens }) + }; + +module.exports = { + ethereum: { + tvl, + }, + }; \ No newline at end of file From 5e09261c3575230c116910c11e5601566dd6825d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:01:13 +0100 Subject: [PATCH 1417/1768] Sym 2 (#12665) Co-authored-by: nikitulb Co-authored-by: allush --- projects/symbiosis-finance/config.js | 840 +++++++++++++-------------- projects/symbiosis-finance/index.js | 21 +- utils/scripts/useTokenLabels.js | 3 + 3 files changed, 409 insertions(+), 455 deletions(-) diff --git a/projects/symbiosis-finance/config.js b/projects/symbiosis-finance/config.js index 68ec85e76d..e53656179b 100644 --- a/projects/symbiosis-finance/config.js +++ b/projects/symbiosis-finance/config.js @@ -1,456 +1,394 @@ -const ADDRESSES = require('../helper/coreAssets.json') - -const TOKENS = { - ethereum: { - pufETH: "0xD9A442856C234a39a81a089C06451EBAa4306a72", - LADYS: "0x12970E6868f88f6557B76120662c1B3E50A646bf", - XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28", - G: "0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649" - }, - bsc: { - XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28", - G: "0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649" - }, - polygon: { - XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28" - }, - arbitrum: { - XDAO: "0x71eebA415A523F5C952Cc2f06361D5443545Ad28", - LADYS: "0x3b60FF35D3f7F62d636b067dD0dC0dFdAd670E4E" - }, - manta: { - pufETH: "0xA53E005Cecd3D7C89A4AE814617cC14828b6527E" - }, - scroll: { - pufETH: "0xc4d46E8402F476F269c379677C99F18E22Ea030e" - }, - zeta: { - pufETH: "0x1e4bF3CaBD7707089138dD5a545B077413FA83Fc" - }, - zklink: { - pufETH: "0x1B49eCf1A8323Db4abf48b2F5EFaA33F7DdAB3FC" - }, - cronos: { - USDC: ADDRESSES.cronos.USDC - }, - fraxtal: { - WETH: ADDRESSES.fraxtal.WETH, - FRAX: ADDRESSES.fraxtal.FRAX - }, - gravity: { - USDC_e: ADDRESSES.gravity.USDC_e, - wG: ADDRESSES.gravity.wG - }, - bsquared: { - WBTC: ADDRESSES.bsquared.WBTC, - }, - cronos_zkevm: { - USDC: ADDRESSES.cronos_zkevm.USDC, - } -} - module.exports = { chains: [ { - name: 'ethereum', - tokens: [ - ADDRESSES.ethereum.USDC, - ADDRESSES.ethereum.USDT, - ADDRESSES.ethereum.WETH, - ADDRESSES.ethereum.WBTC, - ADDRESSES.ethereum.FRAX, - TOKENS.ethereum.XDAO, - TOKENS.ethereum.LADYS, - TOKENS.ethereum.pufETH, - TOKENS.ethereum.G, - ], - holders: [ - '0xb80fDAA74dDA763a8A158ba85798d373A5E84d84', // portal v1 - '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 - '0x42Cd64f48496dDdfEfF8F3704df9175dbe20d325', // portal Teleport - ] - }, - { - name: 'bsc', - tokens: [ - ADDRESSES.bsc.BUSD, - ADDRESSES.bsc.USDC, - ADDRESSES.bsc.ETH, - ADDRESSES.bsc.BTCB, - TOKENS.bsc.XDAO, - TOKENS.bsc.G, - ], - holders: [ - '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 - '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 - '0xb91d3060C90aac7c4c706aef2B37997b3b2a1DcF', // portal Teleport - '0xab0738320A21741f12797Ee921461C691673E276', // v1 pool with Ethereum - ] - }, - { - name: 'avax', - tokens: [ - ADDRESSES.avax.USDC_e, - ADDRESSES.avax.USDC, - ], - holders: [ - '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 - '0xE75C7E85FE6ADd07077467064aD15847E6ba9877', // portal v2 - '0xab0738320A21741f12797Ee921461C691673E276', // v1 pool with Ethereum - '0xF4BFF06E02cdF55918e0ec98082bDE1DA85d33Db', // v1 pool with BNB chain - ] - }, - { - name: 'polygon', - tokens: [ - ADDRESSES.polygon.USDC, - ADDRESSES.polygon.WETH_1, - ADDRESSES.polygon.FRAX, - TOKENS.polygon.XDAO, - ], - holders: [ - '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 - '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 - '0x3338BE49A5f60e2593337919F9aD7098e9a7Dd7E', // portal Teleport - '0xab0738320A21741f12797Ee921461C691673E276', // v1 pool with Ethereum - '0xF4BFF06E02cdF55918e0ec98082bDE1DA85d33Db', // v1 pool with BNB chain - '0x3F1bfa6FA3B6D03202538Bf0cdE92BbE551104ac', // v1 pool with Avalanche - ] - }, - { - name: 'telos', - tokens: [ - ADDRESSES.telos.syUSDC, - ], - holders: [ - '0x17A0E3234f00b9D7028e2c78dB2caa777F11490F', // portal v1 - '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 - '0x7f3C1E54b8b8C7c08b02f0da820717fb641F26C8', // v1 pool with BNB chain - ] - }, - { - name: 'aurora', - tokens: [ - ADDRESSES.aurora.USDC_e, - ], - holders: [ - '0x17A0E3234f00b9D7028e2c78dB2caa777F11490F', // portal v1 - '0x7Ff7AdE2A214F9A4634bBAA4E870A5125dA521B8', // v1 pool with BNB chain - '0x7F1245B61Ba0b7D4C41f28cAc9F8637fc6Bec9E4', // v1 pool with Polygon - ] - }, - { - name: 'boba', - tokens: [ - ADDRESSES.boba.USDC, - ], - holders: [ - '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 - '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 - '0xab0738320A21741f12797Ee921461C691673E276', // v1 pool with Ethereum - '0xe0ddd7afC724BD4B320472B5C954c0abF8192344', // v1 pool with BNB chain - ] - }, - { - name: 'boba_avax', - tokens: [ - ADDRESSES.boba_avax.USDC_e, - ], - holders: [ - '0xd8db4fb1fEf63045A443202d506Bcf30ef404160', // portal v2 - ] - }, - { - name: 'boba_bnb', - tokens: [ - ADDRESSES.boba_bnb.USDC, - ], - holders: [ - '0x6148FD6C649866596C3d8a971fC313E5eCE84882', // pool v2 - ] - }, - { - name: 'kava', - tokens: [ - ADDRESSES.kava.USDC, - ADDRESSES.kava.USDt, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'era', - tokens: [ - ADDRESSES.era.USDC, - ADDRESSES.era.WETH, - ADDRESSES.era.WBTC, - ], - holders: [ - '0x39dE19C9fF25693A2311AAD1dc5C790194084A39', // portal v2 - '0x4f5456d4d0764473DfCA1ffBB8524C151c4F19b9', // new portal v2 - '0x97b99f47b086a074f214f4A62A3b041599726DC2', // portal Teleport - ] - }, - { - name: 'arbitrum', - tokens: [ - ADDRESSES.arbitrum.USDC, // USDC.e - ADDRESSES.arbitrum.USDC_CIRCLE, - ADDRESSES.arbitrum.WETH, - ADDRESSES.arbitrum.FRAX, - TOKENS.arbitrum.XDAO, - TOKENS.arbitrum.LADYS, - ], - holders: [ - '0x01A3c8E513B758EBB011F7AFaf6C37616c9C24d9', // portal v2 - '0x0425841529882628880fBD228AC90606e0c2e09A', // portal Teleport - ] - }, - { - name: 'optimism', - tokens: [ - ADDRESSES.optimism.USDC, - ADDRESSES.optimism.WETH_1, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'arbitrum_nova', - tokens: [ - ADDRESSES.arbitrum_nova.USDC, - ADDRESSES.arbitrum_nova.WETH, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'polygon_zkevm', - tokens: [ - ADDRESSES.polygon_zkevm.USDC, - ADDRESSES.polygon_zkevm.USDC_CIRCLE, - ADDRESSES.polygon_zkevm.WETH, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'mantle', - tokens: [ - ADDRESSES.mantle.USDC, - ADDRESSES.mantle.WETH, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'linea', - tokens: [ - ADDRESSES.linea.WETH, - ADDRESSES.linea.USDC, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - '0x7f6fb9f3ce785F3d85772c038Fda58eC9432D421', // portal Teleport - ] - }, - { - name: 'base', - tokens: [ - ADDRESSES.base.WETH, - ADDRESSES.base.USDbC, - ], - holders: [ - '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 - '0xEE981B2459331AD268cc63CE6167b446AF4161f8', // portal v2 new - ] - }, - { - name: 'tron', - tokens: [ - ADDRESSES.tron.USDT, - ], - holders: [ - 'TVgY3ayqTGUoe7th84ZNL5peVfRNdLFDjf', // portal v2 - ] - }, - { - name: 'scroll', - tokens: [ - ADDRESSES.scroll.WETH, - ADDRESSES.scroll.USDC, - TOKENS.scroll.pufETH, - ], - holders: [ - '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 - '0x9b1c1949995E43E6d391A4FDA207bf4386Ee5a32', // portal Teleport - ] - }, - { - name: 'manta', - tokens: [ - ADDRESSES.manta.WETH, - ADDRESSES.manta.USDC, - TOKENS.manta.pufETH, - ], - holders: [ - '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 - ] - }, - { - name: 'metis', - tokens: [ - ADDRESSES.metis.WETH, - ], - holders: [ - '0xd8db4fb1fEf63045A443202d506Bcf30ef404160', // portal v2 - ] - }, - { - name: 'mode', - tokens: [ - ADDRESSES.mode.WETH, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'rsk', - tokens: [ - ADDRESSES.rsk.rUSDT, - ADDRESSES.rsk.WRBTC1, - ], - holders: [ - '0x5aa5f7f84ed0e5db0a4a85c3947ea16b53352fd4', // portal v2 - ] - }, - { - name: 'blast', - tokens: [ - ADDRESSES.blast.WETH, - ], - holders: [ - '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 - ] - }, - { - name: 'merlin', - tokens: [ - ADDRESSES.merlin.WBTC, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'ftn', - tokens: [ - ADDRESSES.ftn.USDC, - ], - holders: [ - '0x318C2B9a03C37702742C3d40C72e4056e430135A', // portal v2 - ] - }, - { - name: 'zklink', - tokens: [ - ADDRESSES.zklink.WETH, - TOKENS.zklink.pufETH, - ], - holders: [ - '0x8Dc71561414CDcA6DcA7C1dED1ABd04AF474D189', // portal v2 - ] - }, - { - name: 'core', - tokens: [ - ADDRESSES.core.coreBTC, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'taiko', - tokens: [ - ADDRESSES.taiko.WETH, - ], - holders: [ - '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 - ] - }, - { - name: 'sei', - tokens: [ - ADDRESSES.sei.USDC, - ADDRESSES.sei.USDT, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'zeta', - tokens: [ - TOKENS.zeta.pufETH, - ADDRESSES.zeta.USDC_1, - ], - holders: [ - '0x8a7F930003BedD63A1ebD99C5917FD6aE7E3dedf', // portal v2 - ] - }, - { - name: 'cronos', - tokens: [ - TOKENS.cronos.USDC, - ], - holders: [ - '0xE75C7E85FE6ADd07077467064aD15847E6ba9877', // portal v2 - ] - }, - { - name: 'fraxtal', - tokens: [ - TOKENS.fraxtal.WETH, - TOKENS.fraxtal.FRAX, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'gravity', - tokens: [ - TOKENS.gravity.USDC_e, - TOKENS.gravity.wG, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'bsquared', - tokens: [ - TOKENS.bsquared.WBTC, - ], - holders: [ - '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 - ] - }, - { - name: 'cronos_zkevm', - tokens: [ - TOKENS.cronos_zkevm.USDC, - ], - holders: [ - '0x2E818E50b913457015E1277B43E469b63AC5D3d7', // portal v2 - ] - }, + name: 'ethereum', + tokens: [ + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC, + '0xd38BB40815d2B0c2d2c866e0c72c5728ffC76dd9', // SIS, + '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH, + '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT, + '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC, + '0x12970E6868f88f6557B76120662c1B3E50A646bf', // LADYS, + '0xD9A442856C234a39a81a089C06451EBAa4306a72', // pufETH, + '0x853d955aCEf822Db058eb8505911ED77F175b99e', // FRAX, + '0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649', // G, + '0x582d872A1B094FC48F5DE31D3B73F2D9bE47def1', // WTON + ], + holders: [ + '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8' // portal + ] + }, + { + name: 'bsc', + tokens: [ + '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', // USDC, + '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD, + '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', // ETH, + '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', // BTCB, + '0xF98b660AdF2ed7d9d9D9dAACC2fb0CAce4F21835', // SIS, + '0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649', // G, + '0x76A797A59Ba2C17726896976B7B3747BfD1d220f', // WTON + ], + holders: [ + '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4' // portal + ] + }, + { + name: 'avax', + tokens: [ + '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC, + '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', // USDC.e + ], + holders: [ + '0xE75C7E85FE6ADd07077467064aD15847E6ba9877' // portal + ] + }, + { + name: 'polygon', + tokens: [ + '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC.e, + '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', // WETH, + '0x45c32fA6DF82ead1e2EF74d17b76547EDdFaFF89', // FRAX + ], + holders: [ + '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8' // portal + ] + }, + { + name: 'telos', + tokens: [ + '0xe6E5f3d264117E030C21920356641DbD5B3d660c', // USDC, + '0x63d71E79AdF0886c989A23b04a0E86F1489b6BC3', // WETH, + '0x7bD3ffe9f0C9CF08FD60e102FEa455A6EA580276', // USDT + ], + holders: [ + '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8' // portal + ] + }, + { + name: 'kava', + tokens: [ + '0x919C1c267BC06a7039e03fcc2eF738525769109c', // USDt + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'boba', + tokens: [ + '0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc', // USDC + ], + holders: [ + '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8' // portal + ] + }, + { + name: 'era', + tokens: [ + '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', // USDC.e, + '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4', // USDC, + '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91', // WETH, + '0xBBeB516fb02a01611cBBE0453Fe3c580D7281011', // WBTC, + '0xdd9f72afED3631a6C85b5369D84875e6c42f1827', // SIS, + '0xED0c95EBe5a3E687cB2224687024FeC6518E683e', // syBTC + ], + holders: [ + '0x4f5456d4d0764473DfCA1ffBB8524C151c4F19b9' // portal + ] + }, + { + name: 'arbitrum', + tokens: [ + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // USDC, + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', // USDC.e, + '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', // WETH, + '0x9E758B8a98a42d612b3D38B66a22074DC03D7370', // SIS, + '0x3b60FF35D3f7F62d636b067dD0dC0dFdAd670E4E', // LADYS, + '0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F', // FRAX, + '0x1A6B3A62391ECcaaa992ade44cd4AFe6bEC8CfF1', // UXLINK + ], + holders: [ + '0x01A3c8E513B758EBB011F7AFaf6C37616c9C24d9' // portal + ] + }, + { + name: 'optimism', + tokens: [ + '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', // USDC.e, + '0x4200000000000000000000000000000000000006', // WETH + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'arbitrum_nova', + tokens: [ + '0x750ba8b76187092B0D1E87E28daaf484d1b5273b', // USDC, + '0x722E8BdD2ce80A4422E880164f2079488e115365', // WETH + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'polygon_zkevm', + tokens: [ + '0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035', // USDC, + '0x37eAA0eF3549a5Bb7D431be78a3D99BD360d19e5', // USDC.e, + '0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9', // WETH + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'linea', + tokens: [ + '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f', // WETH, + '0x176211869cA2b568f2A7D4EE941E073a821EE1ff', // USDC, + '0x6EF95B6f3b0F39508e3E04054Be96D5eE39eDE0d', // SIS + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'mantle', + tokens: [ + '0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9', // USDC, + '0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111', // WETH, + '0x1Bdd8878252DaddD3Af2ba30628813271294eDc0', // CATI + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'base', + tokens: [ + '0x4200000000000000000000000000000000000006', // WETH, + '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', // USDbC, + '0x9C7BEBa8F6eF6643aBd725e45a4E8387eF260649', // G + ], + holders: [ + '0xEE981B2459331AD268cc63CE6167b446AF4161f8' // portal + ] + }, + { + name: 'tron', + tokens: [ + 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', // USDT + ], + holders: [ + 'TVgY3ayqTGUoe7th84ZNL5peVfRNdLFDjf' // portal + ] + }, + { + name: 'scroll', + tokens: [ + '0x5300000000000000000000000000000000000004', // WETH, + '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4', // USDC, + '0x1467b62A6AE5CdcB10A6a8173cfe187DD2C5a136', // SIS, + '0xc4d46E8402F476F269c379677C99F18E22Ea030e', // pufETH + ], + holders: [ + '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4' // portal + ] + }, + { + name: 'manta', + tokens: [ + '0x0Dc808adcE2099A9F62AA87D9670745AbA741746', // WETH, + '0xb73603C5d87fA094B7314C74ACE2e64D165016fb', // USDC, + '0xA53E005Cecd3D7C89A4AE814617cC14828b6527E', // pufETH + ], + holders: [ + '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4' // portal + ] + }, + { + name: 'metis', + tokens: [ + '0x420000000000000000000000000000000000000A', // WETH + ], + holders: [ + '0xd8db4fb1fEf63045A443202d506Bcf30ef404160' // portal + ] + }, + { + name: 'ftn', + tokens: [ + '0x4237e0A5b55233D5B6D6d1D9BF421723954130D8', // USDC, + '0xE5b3562A0fa9eC3e718C96FfE349e1280D2Be591', // WETH, + '0xDeF886C55a79830C47108eeb9c37e78a49684e41', // USDT + ], + holders: [ + '0x318C2B9a03C37702742C3d40C72e4056e430135A' // portal + ] + }, + { + name: 'mode', + tokens: [ + '0x4200000000000000000000000000000000000006', // WETH + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'rsk', + tokens: [ + '0xef213441A85dF4d7ACbDaE0Cf78004e1E486bB96', // rUSDT, + '0x542fDA317318eBF1d3DEAf76E0b632741A7e677d', // WRBTC + ], + holders: [ + '0x5aa5f7f84ed0e5db0a4a85c3947ea16b53352fd4' // portal + ] + }, + { + name: 'blast', + tokens: [ + '0x4300000000000000000000000000000000000004', // WETH + ], + holders: [ + '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4' // portal + ] + }, + { + name: 'merlin', + tokens: [ + '0xF6D226f9Dc15d9bB51182815b320D3fBE324e1bA', // WBTC + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'zklink', + tokens: [ + '0x8280a4e7D5B3B658ec4580d3Bc30f5e50454F169', // WETH, + '0x1B49eCf1A8323Db4abf48b2F5EFaA33F7DdAB3FC', // pufETH + ], + holders: [ + '0x8Dc71561414CDcA6DcA7C1dED1ABd04AF474D189' // portal + ] + }, + { + name: 'core', + tokens: [ + '0x8034aB88C3512246Bf7894f57C834DdDBd1De01F', // coreBTC + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'taiko', + tokens: [ + '0xA51894664A773981C6C112C43ce576f315d5b1B6', // WETH + ], + holders: [ + '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4' // portal + ] + }, + { + name: 'sei', + tokens: [ + '0x3894085Ef7Ff0f0aeDf52E2A2704928d1Ec074F1', // USDC, + '0xB75D0B03c06A926e488e2659DF1A861F860bD3d1', // USDT + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'zeta', + tokens: [ + '0x1e4bF3CaBD7707089138dD5a545B077413FA83Fc', // pufETH, + '0x0cbe0dF132a6c6B4a2974Fa1b7Fb953CF0Cc798a', // USDC.ETH + ], + holders: [ + '0x8a7F930003BedD63A1ebD99C5917FD6aE7E3dedf' // portal + ] + }, + { + name: 'cronos', + tokens: [ + '0xc21223249CA28397B4B6541dfFaEcC539BfF0c59', // USDC + ], + holders: [ + '0xE75C7E85FE6ADd07077467064aD15847E6ba9877' // portal + ] + }, + { + name: 'fraxtal', + tokens: [ + '0xA8a59D73388D0c4344a7b0Ba287ddb654227c38a', // WETH, + '0xFc00000000000000000000000000000000000001', // FRAX + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'gravity', + tokens: [ + '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6', // USDC.e, + '0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD', // wG + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'bsquared', + tokens: [ + '0x4200000000000000000000000000000000000006', // WBTC + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'ton', + tokens: [ + 'EQD8AErK5HbmnftlHQuk8bXC_JuX1COLPeNIfMriw23gfO3I', // TON, + 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs', // USDT, + 'EQBh9XACT0B60U8Q48VnjyqCxzxpM4oA0c8rqKt4h70yk1V5', // UXLINK, + 'EQD-cvR0Nz6XAyRBvbhz-abTrRC6sI5tvHvvpeQraV9UAAD7', // CATI + ], + holders: [ + 'EQDpUHhVl5lJ6Y47DCd0TWdXB_kd-U-N6KyAELePNjfj15HT' // portal + ] + }, + { + name: 'cronos_zkevm', + tokens: [ + '0xaa5b845F8C9c047779bEDf64829601d8B264076c', // USDC + ], + holders: [ + '0x2E818E50b913457015E1277B43E469b63AC5D3d7' // portal + ] + }, + { + name: 'morph', + tokens: [ + '0xe34c91815d7fc18A9e2148bcD4241d0a5848b693', // USDC + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62' // portal + ] + }, + { + name: 'boba_bnb', + tokens: [ + '0x9f98f9f312d23d078061962837042b8918e6aff2', // USDC + ], + holders: [ + '0x6148FD6C649866596C3d8a971fC313E5eCE84882' // portal + ] + } ] } \ No newline at end of file diff --git a/projects/symbiosis-finance/index.js b/projects/symbiosis-finance/index.js index 6df91ba4bc..794479e66c 100644 --- a/projects/symbiosis-finance/index.js +++ b/projects/symbiosis-finance/index.js @@ -1,15 +1,28 @@ const config = require("./config"); const { sumTokensExport } = require('../helper/unwrapLPs') +const { sumTokensExport: sumTon } = require('../helper/chain/ton') module.exports = { - methodology: 'Counts the amount of stables locked in Symbiosis protocol contracts: Portals V1, NervePools V1, Portals V2, OmniPool V2', + methodology: 'Counts the amount of stables locked in Symbiosis protocol contracts: Portals V2', }; config.chains.forEach(chainInfo => { const {name: chain, tokens, holders} = chainInfo - module.exports[chain] = { - tvl: sumTokensExport({ chain, tokens, owners: holders }) + + if (chain === 'ton') { + module.exports[chain] = { + tvl: sumTon({ chain, tokens, owners: holders }) + } + } else { + module.exports[chain] = { + tvl: sumTokensExport({ chain, tokens, owners: holders }) + } } }) -module.exports.boba_avax.tvl = () => ({}) \ No newline at end of file +const deprecatedChains = ['aurora', 'boba_avax'] +deprecatedChains.forEach(chain => { + module.exports[chain] = { + tvl: () => ({}) + } +}) \ No newline at end of file diff --git a/utils/scripts/useTokenLabels.js b/utils/scripts/useTokenLabels.js index 36a8730639..f7c233fef1 100644 --- a/utils/scripts/useTokenLabels.js +++ b/utils/scripts/useTokenLabels.js @@ -28,7 +28,10 @@ function run() { run() +const ignoredFolders = ['symbiosis-finance', 'node_modules'] + function updateFile(file) { + if (ignoredFolders.some(s => file.includes(s))) return; let relativePath = path.relative(file + '/..', allLabelsFile) if (relativePath.startsWith('coreAssets')) relativePath = './' + relativePath const requireStr = `const ADDRESSES = require('${relativePath}')\n` From 31da1891de83498e3511027a0784389899916e50 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:02:57 +0100 Subject: [PATCH 1418/1768] Fix: stakewise v2 (#12664) --- projects/stakewise/index.js | 70 ++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/projects/stakewise/index.js b/projects/stakewise/index.js index a02caf9924..c44adcfbbe 100644 --- a/projects/stakewise/index.js +++ b/projects/stakewise/index.js @@ -1,52 +1,50 @@ const ADDRESSES = require('../helper/coreAssets.json') -const sdk = require('@defillama/sdk'); const { getLogs } = require('../helper/cache/getLogs') -async function tvl(api) { - const lsBals = await api.multiCall({ abi: 'erc20:totalSupply', calls: ['0x20BC832ca081b91433ff6c17f85701B6e92486c5', '0xFe2e637202056d30016725477c5da089Ab0A043A']}) +const CONFIG = { + ethereum: { + rETH2: '0x20BC832ca081b91433ff6c17f85701B6e92486c5', + sETH2: '0xFe2e637202056d30016725477c5da089Ab0A043A', + validator: '0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca', + factory: '0x3a0008a588772446f6e656133c2d5029cc4fc20e', + blacklist: ['0x09e84205df7c68907e619d07afd90143c5763605'] + }, + xdai: { + GNO: '0x9c58bacc331c9aa871afd802db6379a98e80cedb', + sGNO: '0xA4eF9Da5BA71Cc0D2e5E877a910A37eC43420445' + } +} - const solosValidators = await getLogs({ - target: '0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca', - topic: 'ValidatorRegistered(bytes32,bytes,uint256,address)', - fromBlock: 11726299, - api - }) +const topic = { + validatorRegistered: 'ValidatorRegistered(bytes32,bytes,uint256,address)', + vaultAdded: 'VaultAdded(address,address)' +} + +const ethTvl = async (api) => { + const { rETH2, sETH2, validator, factory, blacklist } = CONFIG[api.chain] + const lsBals = await api.multiCall({ abi: 'erc20:totalSupply', calls: [rETH2, sETH2]}) + const solosValidators = await getLogs({ api, target: validator, topic: topic.validatorRegistered, fromBlock: 11726299 }) lsBals.push(solosValidators.length * 32e18) - const vaults = await getLogs({ - target: '0x3a0008a588772446f6e656133c2d5029cc4fc20e', - topic: 'VaultAdded(address,address)', - fromBlock: 18470078, - api - }) + const vaults = await getLogs({ api, target: factory, topic: topic.vaultAdded, fromBlock: 18470078 }) + const assets = await api.multiCall({ - calls: vaults.map(v=>({target:"0x"+v.topics[2].slice(26)})), + calls: vaults + .map(v => ({ target: "0x" + v.topics[2].slice(26) })) + .filter(call => !blacklist.includes(call.target.toLowerCase())), abi: "uint256:totalAssets" }) api.add(ADDRESSES.ethereum.WETH, assets.concat(lsBals)) } -async function xdaiTvl(timestamp, ethBlock, { xdai: block }) { - const chain = "xdai" - const supply = await sdk.api.erc20.totalSupply({ - target: '0xA4eF9Da5BA71Cc0D2e5E877a910A37eC43420445', - block, - chain - }) - - return { - [ADDRESSES.ethereum.GNO]: supply.output - } +const xdaiTvl = async (api) => { + const { GNO, sGNO } = CONFIG[api.chain] + const supply = await api.call({ target: sGNO, abi: 'erc20:totalSupply' }) + api.add(GNO, supply) } - - module.exports = { methodology: 'Counts ETH staked', - ethereum: { - tvl, - }, - xdai:{ - tvl: xdaiTvl - } -} + ethereum: { tvl: ethTvl }, + xdai: { tvl: xdaiTvl } +} \ No newline at end of file From 28c8691ac62df5a8824fd3b43648104405d64d1f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:12:16 +0100 Subject: [PATCH 1419/1768] use token labels --- projects/DegenHive-dsui/index.js | 3 ++- projects/DegenHive-memepad/index.js | 3 ++- projects/accumulated-finance/index.js | 2 +- projects/agdex/index.js | 2 +- projects/alphafi/index.js | 4 ++-- projects/apechain/index.js | 5 +++-- projects/avalon-finance-usda/index.js | 7 +++--- projects/belt/config.js | 7 +++--- projects/cega-v2/index.js | 2 +- projects/crosscurve/index.js | 22 +++++++++---------- projects/deepbook-v3/index.js | 2 +- projects/eigenpie/config.js | 3 ++- projects/eigenpie/index.js | 3 ++- projects/emojicoin/index.js | 3 ++- projects/headstarter/index.js | 7 +++--- projects/helio-money/index.js | 6 ++--- projects/helper/tokenMapping.js | 2 +- projects/hinkal/registryTokens.js | 2 +- .../registryTokensWithUnderlyingAddresses.js | 2 +- projects/kiloex/index.js | 4 ++-- projects/lavarage/index.js | 3 ++- projects/magma/index.js | 3 ++- projects/mitosis/index.js | 8 +++---- projects/reya-perp/index.js | 2 +- projects/sensi/index.js | 3 ++- projects/stakewise/index.js | 2 +- projects/suilend/index.js | 1 + projects/synthetix-v3/index.js | 2 +- projects/treasury/bitdao.js | 3 ++- projects/treasury/dexfinance.js | 2 +- projects/treasury/sideshift-ai.js | 3 ++- projects/tron-btc/index.js | 2 +- projects/unibtc/index.js | 2 +- projects/uniiotx/index.js | 3 ++- projects/vectis/spotMarkets.js | 7 +++--- projects/zkLink/index.js | 2 +- utils/scripts/useTokenLabels.js | 9 +++++--- 37 files changed, 84 insertions(+), 64 deletions(-) diff --git a/projects/DegenHive-dsui/index.js b/projects/DegenHive-dsui/index.js index 797acfa061..68a819281c 100644 --- a/projects/DegenHive-dsui/index.js +++ b/projects/DegenHive-dsui/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui"); async function tvl(api) { @@ -5,7 +6,7 @@ async function tvl(api) { // Add TVL from SUI liquid staking const dsui_vault = await sui.getObject("0x85aaf87a770b4a09822e7ca3de7f9424a4f58688cfa120f55b294a98d599d402"); let sui_staked = Number(Number(dsui_vault.fields.dsui_supply * dsui_vault.fields.sui_claimable_per_dsui / 1e9 + dsui_vault.fields.sui_to_stake).toFixed(0)); - api.add( "0x2::sui::SUI", sui_staked) + api.add( ADDRESSES.sui.SUI, sui_staked) } diff --git a/projects/DegenHive-memepad/index.js b/projects/DegenHive-memepad/index.js index b5e52109b1..3389e10f52 100644 --- a/projects/DegenHive-memepad/index.js +++ b/projects/DegenHive-memepad/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui"); const { cachedGraphQuery } = require('../helper/cache'); @@ -22,7 +23,7 @@ async function tvl(api) { // Add TVL for MEME Pools for (const { fields } of suiMemePoolsData) { if ( fields.sui_available == 0) continue; - api.add( "0x2::sui::SUI", fields.sui_available) + api.add( ADDRESSES.sui.SUI, fields.sui_available) } } diff --git a/projects/accumulated-finance/index.js b/projects/accumulated-finance/index.js index f844b04379..4aaef007b0 100644 --- a/projects/accumulated-finance/index.js +++ b/projects/accumulated-finance/index.js @@ -73,7 +73,7 @@ const config = { "stETH": [ { "ethereum": { - "baseToken": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84", + "baseToken": ADDRESSES.ethereum.STETH, "LST": "0x684d7fd1067ed8e9686e6fd764d048b9bf92dfa9" } }, diff --git a/projects/agdex/index.js b/projects/agdex/index.js index d9af9793c9..3be03c6e20 100644 --- a/projects/agdex/index.js +++ b/projects/agdex/index.js @@ -19,7 +19,7 @@ const usdc_resource_account = "0x19fb80bd79fa8f7538404af85196396973e3fbbda150349 const usdc_metadata = "0x2b3be0a97a73c87ff62cbdd36837a9fb5bbd1d7f06a73b7ed62ec15c5326c1b8"; const usdt_resource_account = "0xbb3c1b88599c563062e2b08fe3a92ab048d700f9aa44617c680d59a4aa69b23f"; -const usdt_metadata = "0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b"; +const usdt_metadata = ADDRESSES.aptos.USDt; const eth_resource_account = "0x38bca0c288df1e13d9a30d33c4ce8ee778333c52bd4e730b49c6c9379be39b10"; const eth_metadata = "0xae02f68520afd221a5cd6fda6f5500afedab8d0a2e19a916d6d8bc2b36e758db"; diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index e1ca781091..b59a51e9e6 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -102,7 +102,7 @@ const ALPHAFI_CETUS_TVL_IDS = [ parentPoolID: "0x9e59de50d9e5979fc03ac5bcacdb581c823dbd27d63a036131e17b391f2fac88", investorID: "0xb0bff60783536f9dc0b38e43150a73b73b8a4f1969446f7721e187821915bd00", token0Type: ADDRESSES.sui.USDC_CIRCLE, - token1Type: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH" + token1Type: ADDRESSES.sui.ETH }, // deep sui { @@ -205,7 +205,7 @@ const ALPHAFI_NAVI_TVL_IDS = [ }, { poolID: "0xc37ec956fdef6c217505e62444ab93f833c20923755d67d1c8588c9b093ae00e", - tokenType: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", + tokenType: ADDRESSES.sui.ETH, expo: 8 }, ] diff --git a/projects/apechain/index.js b/projects/apechain/index.js index cfd7dead9e..b456cd56c7 100644 --- a/projects/apechain/index.js +++ b/projects/apechain/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); const { staking } = require('../helper/staking') @@ -5,8 +6,8 @@ module.exports = { ethereum: { tvl: sumTokensExport({ tokensAndOwners: [ - ['0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0xc8a12b1DB09ec5a43919906d94Fa7eeAef1131D1'], // wstETH - ['0x83F20F44975D03b1b09e64809B757c47f942BEeA', '0xf33D21137cD0B878f3A18Cc60cD74F842c59cb00'], // sDAI + [ADDRESSES.ethereum.WSTETH, '0xc8a12b1DB09ec5a43919906d94Fa7eeAef1131D1'], // wstETH + [ADDRESSES.ethereum.SDAI, '0xf33D21137cD0B878f3A18Cc60cD74F842c59cb00'], // sDAI ] }), staking: staking('0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9', '0x4d224452801ACEd8B2F0aebE155379bb5D594381') diff --git a/projects/avalon-finance-usda/index.js b/projects/avalon-finance-usda/index.js index a4e3c61b6a..5e3a46b117 100644 --- a/projects/avalon-finance-usda/index.js +++ b/projects/avalon-finance-usda/index.js @@ -1,21 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const config = { ethereum: { poolAddress: '0x3f390dD6EF69f68f9877aACC086856a200808693', - fbtcAddress: '0xC96dE26018A54D51c097160568752c4E3BD6C364', + fbtcAddress: ADDRESSES.bob.FBTC, lfbtcAddress: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', usdaAddress: '0x0b4D6DA52dF60D44Ce7140F1044F2aD5fabd6316', }, bsc: { poolAddress: '0xC757E47d6bC20FEab54e16F2939F51Aa4826deF7', - fbtcAddress: '0xC96dE26018A54D51c097160568752c4E3BD6C364', + fbtcAddress: ADDRESSES.bob.FBTC, lfbtcAddress: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', usdaAddress: '0x8a4bA6C340894B7B1De0F6A03F25Aa6afb7f0224', }, mantle: { poolAddress: '0x8f778806CBea29F0f64BA6A4B7724BCD5EEd543E', - fbtcAddress: '0xC96dE26018A54D51c097160568752c4E3BD6C364', + fbtcAddress: ADDRESSES.bob.FBTC, lfbtcAddress: '0x3119a1AD5B63A000aB9CA3F2470611eB997B93B9', usdaAddress: '0x2BDC204b6d192921605c66B7260cFEF7bE34Eb2E', }, diff --git a/projects/belt/config.js b/projects/belt/config.js index 04b388d8c3..bb1fb3c5d3 100644 --- a/projects/belt/config.js +++ b/projects/belt/config.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const CONFIG = { bsc: [ - '0x51bd63f240fb13870550423d208452ca87c44444', - '0xa8bb71facdd46445644c277f9499dd22f6f0a30c', + ADDRESSES.bsc.beltBTC, + ADDRESSES.bsc.beltBNB, '0xcb3346ad40c947a2228b2e224c3931a5224ba7ad', '0xecb589831eefbdbbc48d1f86294724c76acd3314', - '0xaa20e8cb61299df2357561c2ac2e1172bc68bc25', + ADDRESSES.bsc.beltETH, '0x9a144edd7309bcc4e106a1a04e7fc402115a0980', '0x5142f6857f029bed5ddf6247d8a1f75984a3a380', '0x1794bb186c15fddbf4aac4a3b0e2f40659e9b841', diff --git a/projects/cega-v2/index.js b/projects/cega-v2/index.js index 4a8f77f962..9984232255 100644 --- a/projects/cega-v2/index.js +++ b/projects/cega-v2/index.js @@ -27,7 +27,7 @@ module.exports = { ADDRESSES.arbitrum.WBTC, ADDRESSES.arbitrum.DAI, ADDRESSES.arbitrum.USDe, - '0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2', + ADDRESSES.arbitrum.sUSDe, ], owners: ["0x475c4af369b28997b25bd756ef92797ad3f69593"], }), diff --git a/projects/crosscurve/index.js b/projects/crosscurve/index.js index 69e17877bd..bdab2f52e3 100644 --- a/projects/crosscurve/index.js +++ b/projects/crosscurve/index.js @@ -49,7 +49,7 @@ module.exports = { "0xa70af99bff6b168327f9d1480e29173e757c7904", // crvUSDT "0xdad97f7713ae9437fa9249920ec8507e5fbb23d3", // crv3crypto ADDRESSES.polygon.WBTC, // WBTC - "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", // WETH + ADDRESSES.polygon.WETH_1, // WETH ], }), }, @@ -65,7 +65,7 @@ module.exports = { "0xA5E0E46462970C9Ee8C2ECadcde254c483748Ec4", // b3pool "0xae87e5fa20f335ce14aa3b9e0616308d9ac7d4ce", // crvUSDT ADDRESSES.bsc.BTCB, // BTCB - "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", // ETH + ADDRESSES.bsc.ETH, // ETH ], }), }, @@ -96,7 +96,7 @@ module.exports = { "0x1337BedC9D22ecbe766dF105c9623922A27963EC", // av3crv "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", // crv3crypto ADDRESSES.avax.BTC_b, // BTC.b - "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", // WETH.e + ADDRESSES.avax.WETH_e, // WETH.e ], }), }, @@ -115,7 +115,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ "0x1337bedc9d22ecbe766df105c9623922a27963ec", // x3CRV - "0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1", // WETH + ADDRESSES.xdai.WETH, // WETH ], }), }, @@ -124,7 +124,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ ADDRESSES.blast.WETH, // WETH - "0x4300000000000000000000000000000000000003", // USDB + ADDRESSES.blast.USDB, // USDB ], }), }, @@ -133,7 +133,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ ADDRESSES.mantle.WETH, // WETH - "0x09bc4e0d864854c6afb6eb9a9cdf58ac190d0df9", // USDC + ADDRESSES.mantle.USDC, // USDC ], }), }, @@ -143,7 +143,7 @@ module.exports = { tokens: [ ADDRESSES.linea.WETH, // WETH "0x3aab2285ddcddad8edf438c1bab47e1a9d05a9b4", // WBTC - "0x176211869cA2b568f2A7D4EE941E073a821EE1ff", // USDC.e + ADDRESSES.linea.USDC, // USDC.e ], }), }, @@ -152,7 +152,7 @@ module.exports = { owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ ADDRESSES.taiko.WETH, // WETH - "0x07d83526730c7438048d55a4fc0b850e2aab6f0b", // USDC + ADDRESSES.taiko.USDC, // USDC ], }), }, @@ -177,7 +177,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0x919C1c267BC06a7039e03fcc2eF738525769109c", // USDt + ADDRESSES.kava.USDt, // USDt ], }), }, @@ -185,7 +185,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0x420000000000000000000000000000000000000a", // WETH + ADDRESSES.metis.WETH, // WETH ], }), }, @@ -193,7 +193,7 @@ module.exports = { tvl: sumTokensExport({ owner: "0xac8f44ceca92b2a4b30360e5bd3043850a0ffcbe", tokens: [ - "0x4200000000000000000000000000000000000006", // WETH + ADDRESSES.optimism.WETH_1, // WETH ], }), }, diff --git a/projects/deepbook-v3/index.js b/projects/deepbook-v3/index.js index b1f880cc37..f133f0ac4a 100644 --- a/projects/deepbook-v3/index.js +++ b/projects/deepbook-v3/index.js @@ -5,7 +5,7 @@ const coins = { deepType: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP", suiType: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", usdcType: ADDRESSES.sui.USDC_CIRCLE, - bethType: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", + bethType: ADDRESSES.sui.ETH, wusdtType: ADDRESSES.sui.USDT, wusdcType: ADDRESSES.sui.USDC, nsType: "0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS", diff --git a/projects/eigenpie/config.js b/projects/eigenpie/config.js index d45891839f..5a18b6fbaf 100644 --- a/projects/eigenpie/config.js +++ b/projects/eigenpie/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { ethereum: { eigenConfig: "0x20b70E4A1883b81429533FeD944d7957121c7CAB", @@ -7,7 +8,7 @@ module.exports = { msteth: "0x1C1Fb35334290b5ff1bF7B4c09130885b10Fc0f4", egeth: "0x4bcc7c793534246BC18acD3737aA4897FF23B458", wsteth: "0xf0e673Bc224A8Ca3ff67a61605814666b1234833", - weth: "0x4200000000000000000000000000000000000006", + weth: ADDRESSES.optimism.WETH_1, } }; \ No newline at end of file diff --git a/projects/eigenpie/index.js b/projects/eigenpie/index.js index c487fad2e2..52a16d36f1 100644 --- a/projects/eigenpie/index.js +++ b/projects/eigenpie/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const config = require("./config"); const sdk = require('@defillama/sdk') @@ -17,7 +18,7 @@ async function tvl(api) { const zircuitApi = new sdk.ChainApi({ chain: 'zircuit', timestamp: api.timestamp }); await zircuitApi.getBlock() const zircuitSupplies = await getZircuitSupplies(zircuitApi); - api.add('0xae7ab96520de3a18e5e111b5eaab095312d7fe84', zircuitSupplies.zircuitMstethSupply * -1); // Adjust for msteth + api.add(ADDRESSES.ethereum.STETH, zircuitSupplies.zircuitMstethSupply * -1); // Adjust for msteth api.add('0xeFEfeFEfeFeFEFEFEfefeFeFefEfEfEfeFEFEFEf', zircuitSupplies.zircuitEgethSupply * -1); // Adjust for egeth // Fetch token list and their supplies diff --git a/projects/emojicoin/index.js b/projects/emojicoin/index.js index 16ab753190..75a7f7872e 100644 --- a/projects/emojicoin/index.js +++ b/projects/emojicoin/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { function_view, timestampToVersion } = require("../helper/chain/aptos"); async function getAllMarkets(ledgerVersion) { @@ -14,7 +15,7 @@ async function getAllMarkets(ledgerVersion) { async function tvl(api) { // const version = await timestampToVersion(api.timestamp, 1962588495); // this query is not working const tvl_amount = await getAllMarkets(); - api.add("0x1::aptos_coin::AptosCoin", tvl_amount); + api.add(ADDRESSES.aptos.APT, tvl_amount); } module.exports = { diff --git a/projects/headstarter/index.js b/projects/headstarter/index.js index 4b58cc3448..f842294468 100644 --- a/projects/headstarter/index.js +++ b/projects/headstarter/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs"); const STAKING_CONTRACT = "0x000000000000000000000000000000000070eac5"; -const HST = "0x00000000000000000000000000000000000ec585"; +const HST = ADDRESSES.hedera.HST; const ENTITIES = [ { @@ -14,7 +15,7 @@ const ENTITIES = [ ], }, { - token: "0x000000000000000000000000000000000030fb8b", + token: ADDRESSES.hedera.STEAM, contracts: [ "0x00000000000000000000000000000000005737f0", "0x00000000000000000000000000000000005737e1", @@ -25,7 +26,7 @@ const ENTITIES = [ ], }, { - token: "0x00000000000000000000000000000000005c9f70", + token: ADDRESSES.hedera.HLQT, contracts: [ "0x00000000000000000000000000000000005cb45b", "0x00000000000000000000000000000000005cb45f", diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index ffa67ff082..a3f27e05cf 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -93,10 +93,10 @@ module.exports = { ["0x1346b618dC92810EC74163e4c27004c921D446a5","0x03DB750d6212C6a0BCa9258E8cB7cf46dfD63067"], // USDT -["0x55d398326f99059ff775485246999027b3197955", "0xAd406CcF75f9E6216fA4349635B0cD77D0059b1f"], +[ADDRESSES.bsc.USDT, "0xAd406CcF75f9E6216fA4349635B0cD77D0059b1f"], //FDUSD - ["0xc5f0f7b66764f6ec8c8dff7ba683102295e16409","0x2202a491752Fee0E616F06A89E2eF416E2Fcd7e9"], + [ADDRESSES.ethereum.FDUSD,"0x2202a491752Fee0E616F06A89E2eF416E2Fcd7e9"], // sUSDX [ @@ -105,7 +105,7 @@ module.exports = { ], // vUSDT, PSM - LSR - // ["0x55d398326f99059ff775485246999027b3197955", "0x5763DDeB60c82684F3D0098aEa5076C0Da972ec7"], + // [ADDRESSES.bsc.USDT, "0x5763DDeB60c82684F3D0098aEa5076C0Da972ec7"], ["0xfd5840cd36d94d7229439859c0112a4185bc0255","0xf76D9cFD08dF91491680313B1A5b44307129CDa9"] ], }), diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 5ad283641e..9701731659 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -43,7 +43,7 @@ const fixBalancesTokens = { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, apechain: { - '0x0000000000000000000000000000000000000000': { coingeckoId: "apecoin", decimals: 18 }, + [ADDRESSES.null]: { coingeckoId: "apecoin", decimals: 18 }, }, } diff --git a/projects/hinkal/registryTokens.js b/projects/hinkal/registryTokens.js index 6481f4fa50..18f49e9743 100644 --- a/projects/hinkal/registryTokens.js +++ b/projects/hinkal/registryTokens.js @@ -956,7 +956,7 @@ const BASE_REGISTRY_TOKENS = [ "0x4e65fE4DbA92790696d040ac24Aa414708F5c0AB", ADDRESSES.blast.ezETH, "0x1Bc71130A0e39942a7658878169764Bbd8A45993", - "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", + ADDRESSES.base.wstETH, ]; const BLAST_REGISTRY_TOKENS = [ diff --git a/projects/hinkal/registryTokensWithUnderlyingAddresses.js b/projects/hinkal/registryTokensWithUnderlyingAddresses.js index 02fa16045c..baf20579c0 100644 --- a/projects/hinkal/registryTokensWithUnderlyingAddresses.js +++ b/projects/hinkal/registryTokensWithUnderlyingAddresses.js @@ -247,7 +247,7 @@ const BASE_REGISTRY_TOKENS_WITH_UNDERLYING_ADDRESSES = { "0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7": ADDRESSES.optimism.WETH_1, "0x99CBC45ea5bb7eF3a5BC08FB1B7E56bB2442Ef0D": - "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", + ADDRESSES.base.wstETH, "0x4e65fE4DbA92790696d040ac24Aa414708F5c0AB": ADDRESSES.base.USDC, }; diff --git a/projects/kiloex/index.js b/projects/kiloex/index.js index 5e12b5225e..f2dc1bbf2d 100644 --- a/projects/kiloex/index.js +++ b/projects/kiloex/index.js @@ -60,8 +60,8 @@ module.exports = { ADDRESSES.base.USDC, //USDC '0x3b86ad95859b6ab773f55f8d94b4b9d443ee931f', //SolvBTC '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf',//cbBTC - '0x04c0599ae5a44757c0af6f9ec3b93da8976c150a',//weETH - '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452',//wstETH + ADDRESSES.blast.weETH,//weETH + ADDRESSES.base.wstETH,//wstETH ] }) }, }; diff --git a/projects/lavarage/index.js b/projects/lavarage/index.js index 5f204743a3..97acad61c0 100644 --- a/projects/lavarage/index.js +++ b/projects/lavarage/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getProvider, sumTokens2 } = require("../helper/solana"); const { PublicKey } = require("@solana/web3.js"); const anchor = require("@project-serum/anchor"); @@ -18,7 +19,7 @@ const idleAccount = new PublicKey("bkhAyULeiXwju7Zmy4t3paDHtVZjNaofVQ4VgEdTWiE") const deployedAccount = new PublicKey("6riP1W6R3qzUPWYwLGtXEC23aTqmyAEdDtXzhntJquAh"); const multisigAccount = new PublicKey("DkPYEECBc28iute8vWvAuAU4xiM91Sht59p7FHZbmNQv"); const pendingUnstakeAccount = new PublicKey("HTnwdgfXrA6gZRiQsnfxLKbvdcqnxdbuC2FJsmCCVMw9"); -const usdcAddress = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"); +const usdcAddress = new PublicKey(ADDRESSES.solana.USDC); const iscAddress = new PublicKey("J9BcrQfX4p9D1bvLzRNCbMDv8f44a9LFdeqNE4Yk2WMD"); const usdcPoolAccount = new PublicKey("9m3wEeK3v5yyqDGMnDiDRR3FjCwZjRVB4n92pieGtTbP"); const iscPoolAccount = new PublicKey("CrsxVEF7YNGAk9QwwbB2vuesUWoDopfgFAhA9apoCJ2z"); diff --git a/projects/magma/index.js b/projects/magma/index.js index 739350a3e5..691288d584 100644 --- a/projects/magma/index.js +++ b/projects/magma/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getLiquityTvl } = require('../helper/liquity') // const { staking } = require('../helper/staking') const sdk = require('@defillama/sdk') @@ -7,7 +8,7 @@ module.exports = { tvl: sdk.util.sumChainTvls([ getLiquityTvl('0x21d81DABF6985587CE64C2E8EB12F69DF2178fe2'), getLiquityTvl('0xAeB0B38040aDdc4a2b520919f13944D9bC944435'), - getLiquityTvl('0xFF5F4bA96586EDae7E7D838D8770dFB3376Ec245', { nonNativeCollateralToken: true, collateralToken: "0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894" }) + getLiquityTvl('0xFF5F4bA96586EDae7E7D838D8770dFB3376Ec245', { nonNativeCollateralToken: true, collateralToken: ADDRESSES.bob.uniBTC }) ]), // staking: staking('0x037a2e9a464fbA409D0E55600836864B410d6Dd8', '0x6C0bf4b53696b5434A0D21C7D13Aa3cbF754913E'), // disabled as backing of WEN is already counted towards tvl }, diff --git a/projects/mitosis/index.js b/projects/mitosis/index.js index 354bdfa267..ca0b300a25 100644 --- a/projects/mitosis/index.js +++ b/projects/mitosis/index.js @@ -52,19 +52,19 @@ const ezETH_ADDRESS = { vault: "0x0109e9f292516dAB3E15EfC61811C5e5a7FA5358", }, arbitrum: { - asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + asset: ADDRESSES.optimism.ezETH, vault: "0xbEd575b0FeDa4F84b71144634693DaCc07749471", }, blast: { - asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + asset: ADDRESSES.optimism.ezETH, vault: "0x8506fD66FCeD711c11F9E837EcAEC0F87C3F60A0", }, linea: { - asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + asset: ADDRESSES.optimism.ezETH, vault: "0x96d6cE4e83dB947fF6bD1Ab0B377F23cd5D9ec2D", }, mode: { - asset: "0x2416092f143378750bb29b79eD961ab195CcEea5", + asset: ADDRESSES.optimism.ezETH, vault: "0xbEd575b0FeDa4F84b71144634693DaCc07749471" } }; diff --git a/projects/reya-perp/index.js b/projects/reya-perp/index.js index 1b13c74456..f6a84884be 100644 --- a/projects/reya-perp/index.js +++ b/projects/reya-perp/index.js @@ -2,5 +2,5 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') module.exports = { - reya: { tvl: sumTokensExport({ owner: '0xA763B6a5E09378434406C003daE6487FbbDc1a80', tokens: [ADDRESSES.reya.RUSD, "0x4D3fEB76ab1C7eF40388Cd7a2066edacE1a2237D", "0x809B99df4DDd6fA90F2CF305E2cDC310C6AD3C2c", "0x2339D41f410EA761F346a14c184385d15f7266c4", "0xAAB18B45467eCe5e47F85CA6d3dc4DF2a350fd42", "0x6B48C2e6A32077ec17e8Ba0d98fFc676dfab1A30"]})} + reya: { tvl: sumTokensExport({ owner: '0xA763B6a5E09378434406C003daE6487FbbDc1a80', tokens: [ADDRESSES.reya.RUSD, "0x4D3fEB76ab1C7eF40388Cd7a2066edacE1a2237D", "0x809B99df4DDd6fA90F2CF305E2cDC310C6AD3C2c", "0x2339D41f410EA761F346a14c184385d15f7266c4", "0xAAB18B45467eCe5e47F85CA6d3dc4DF2a350fd42", ADDRESSES.reya.WETH]})} } \ No newline at end of file diff --git a/projects/sensi/index.js b/projects/sensi/index.js index 5e578dac84..f8afeaaf7e 100644 --- a/projects/sensi/index.js +++ b/projects/sensi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const SENSI_TOKEN_CONTRACT = '0x63e77cf206801782239d4f126cfa22b517fb4edb' const SENSI_LOCKING_CONTRACT = '0xc13Aff57B67145012Ef3a4604bDB3f3dA17E114f' @@ -11,7 +12,7 @@ async function tvl(api) { const balance_of_SY = await api.call({ abi: SY_ABI.getSYPortfolio, target: SENSI_SY_CONTRACT }) const balance_of_SY_TVL = balance_of_SY.totalPayToken - api.add("0x0000000000000000000000000000000000000000", balance_of_SY_TVL) + api.add(ADDRESSES.null, balance_of_SY_TVL) } module.exports = { diff --git a/projects/stakewise/index.js b/projects/stakewise/index.js index c44adcfbbe..5ec1858c23 100644 --- a/projects/stakewise/index.js +++ b/projects/stakewise/index.js @@ -10,7 +10,7 @@ const CONFIG = { blacklist: ['0x09e84205df7c68907e619d07afd90143c5763605'] }, xdai: { - GNO: '0x9c58bacc331c9aa871afd802db6379a98e80cedb', + GNO: ADDRESSES.xdai.GNO, sGNO: '0xA4eF9Da5BA71Cc0D2e5E877a910A37eC43420445' } } diff --git a/projects/suilend/index.js b/projects/suilend/index.js index 2036be1070..6a57dddf1f 100644 --- a/projects/suilend/index.js +++ b/projects/suilend/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui"); const SUILEND_LENDING_MARKET_ID = "0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1"; diff --git a/projects/synthetix-v3/index.js b/projects/synthetix-v3/index.js index 6c0afca10e..c4a3d554ea 100644 --- a/projects/synthetix-v3/index.js +++ b/projects/synthetix-v3/index.js @@ -4,7 +4,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const CUSTOM_ADDRESSES = { arbitrum: { WEETH: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe", - sUSDe: "0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2", + sUSDe: ADDRESSES.arbitrum.sUSDe, tBTC: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40" } } diff --git a/projects/treasury/bitdao.js b/projects/treasury/bitdao.js index 121bb28e29..ef471f8be5 100644 --- a/projects/treasury/bitdao.js +++ b/projects/treasury/bitdao.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { nullAddress } = require("../helper/treasury"); const { getConfig } = require('../helper/cache') const API_URL = 'https://api.mantle.xyz/api/v2/treasury/tokens'; const MNT = '0x3c3a81e81dc49a522a592e7622a7e711c06bf354'; -const USDe = '0x4c9edd5852cd905f086c759e8383e09bff1e68b3'; +const USDe = ADDRESSES.ethereum.USDe; const COOK = '0x9f0c013016e8656bc256f948cd4b79ab25c7b94d' const ethenaFarm = '0x8707f238936c12c309bfc2b9959c35828acfc512'; const SPECIFIC_TOKENS = ['eth', 'ethena-farming-usde', 'eigen-layer-eth', 'mnt']; diff --git a/projects/treasury/dexfinance.js b/projects/treasury/dexfinance.js index 91864983c8..8a874ccf18 100644 --- a/projects/treasury/dexfinance.js +++ b/projects/treasury/dexfinance.js @@ -77,7 +77,7 @@ module.exports = treasuryExports({ '0x940181a94a35a4569e4529a3cdfb74e38fd98631', //aero '0x7f62ac1e974d65fab4a81821ca6af659a5f46298', //wels '0x78b3c724a2f663d11373c4a1978689271895256f', //tkn - '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452', //wsteth + ADDRESSES.base.wstETH, //wsteth '0x373504da48418c67e6fcd071f33cb0b3b47613c7', //wbasedoge ] }, diff --git a/projects/treasury/sideshift-ai.js b/projects/treasury/sideshift-ai.js index a98de007e9..1a65e39aff 100644 --- a/projects/treasury/sideshift-ai.js +++ b/projects/treasury/sideshift-ai.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const owners = ['0x8f456e525ed0115e22937c5c8afac061cc697f21'] @@ -13,7 +14,7 @@ module.exports = treasuryExports({ mantle: { tokens: [ "0xcda86a272531e8640cd7f1a92c01839911b90bb0", - "0xc96de26018a54d51c097160568752c4e3bd6c364" + ADDRESSES.bob.FBTC ], owners, ownTokens: [], diff --git a/projects/tron-btc/index.js b/projects/tron-btc/index.js index b1f938681e..df696de693 100644 --- a/projects/tron-btc/index.js +++ b/projects/tron-btc/index.js @@ -14,7 +14,7 @@ module.exports = { tvl: sumTokensExport({ ownerTokens: [ [[ADDRESSES.ethereum.WBTC], "0xbe6d2444a717767544a8b0ba77833aa6519d81cd",], //WBTC - [["0xc96de26018a54d51c097160568752c4e3bd6c364"], "0x38d516a43f9bab90455c16f9299866217062467e",],//FBTC + [[ADDRESSES.bob.FBTC], "0x38d516a43f9bab90455c16f9299866217062467e",],//FBTC ] }), }, diff --git a/projects/unibtc/index.js b/projects/unibtc/index.js index ad9c87b80b..447ab951ff 100644 --- a/projects/unibtc/index.js +++ b/projects/unibtc/index.js @@ -2,7 +2,7 @@ const ADDRESSES = require('../helper/coreAssets.json') const defaultVault = '0xF9775085d726E782E83585033B58606f7731AB18' const extraVault = '0x84E5C854A7fF9F49c888d69DECa578D406C26800' -const fbtc0 = '0xc96de26018a54d51c097160568752c4e3bd6c364' +const fbtc0 = ADDRESSES.bob.FBTC const fbtc1 = '0xd681C5574b7F4E387B608ed9AF5F5Fc88662b37c' const config = { diff --git a/projects/uniiotx/index.js b/projects/uniiotx/index.js index a2099f79f3..acf208282a 100644 --- a/projects/uniiotx/index.js +++ b/projects/uniiotx/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require("../helper/tokenMapping"); -const UNIIOTX_TOKEN_CONTRACT = '0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894'; +const UNIIOTX_TOKEN_CONTRACT = ADDRESSES.bob.uniBTC; const IOTX_STAKING_CONTRACT = "0x2c914Ba874D94090Ba0E6F56790bb8Eb6D4C7e5f"; async function tvl(api) { diff --git a/projects/vectis/spotMarkets.js b/projects/vectis/spotMarkets.js index 95694c2a1f..e171a00e00 100644 --- a/projects/vectis/spotMarkets.js +++ b/projects/vectis/spotMarkets.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const anchor = require('@coral-xyz/anchor'); const { PublicKey } = require("@solana/web3.js"); const DRIFT_PROGRAM_ID = new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH') @@ -5,12 +6,12 @@ const DRIFT_PROGRAM_ID = new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn3 const SPOT_MARKETS = { 0: { name: 'USDC', - mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + mint: ADDRESSES.solana.USDC, decimals: 6 }, 1: { name: 'SOL', - mint: 'So11111111111111111111111111111111111111112', + mint: ADDRESSES.solana.SOL, decimals: 9 }, 19: { @@ -28,7 +29,7 @@ const SPOT_MARKETS = { const PERP_MARKETS = { 0: { name: 'SOL-PERP', - mint: 'So11111111111111111111111111111111111111112', + mint: ADDRESSES.solana.SOL, baseDecimals: 9, quoteDecimals: 6 }, diff --git a/projects/zkLink/index.js b/projects/zkLink/index.js index b567f98bf2..1f9b6131b9 100644 --- a/projects/zkLink/index.js +++ b/projects/zkLink/index.js @@ -100,7 +100,7 @@ const config = { "0x80d12A78EfE7604F00ed07aB2f16F643301674D5", ], tokens: [ - "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", // wstETH + ADDRESSES.base.wstETH, // wstETH ], }, optimism: { diff --git a/utils/scripts/useTokenLabels.js b/utils/scripts/useTokenLabels.js index f7c233fef1..096f99530e 100644 --- a/utils/scripts/useTokenLabels.js +++ b/utils/scripts/useTokenLabels.js @@ -29,6 +29,7 @@ function run() { run() const ignoredFolders = ['symbiosis-finance', 'node_modules'] +const blacklistedAddresses = new Set(['XRP']) function updateFile(file) { if (ignoredFolders.some(s => file.includes(s))) return; @@ -42,10 +43,10 @@ function updateFile(file) { Object.entries(allLabels).forEach(([chain, mapping]) => { const label = ['ADDRESSES', chain] if (chain === 'null') { - updateFileStr([...label].join('.'), mapping, file) + updateFileStr([...label].join('.'), mapping) } else { Object.entries(mapping).forEach(([symbol, addr]) => { - updateFileStr([...label, symbol].join('.'), addr, file) + updateFileStr([...label, symbol].join('.'), addr) }) } }) @@ -53,7 +54,9 @@ function updateFile(file) { fileStr = requireStr + fileStr fs.writeFileSync(file, fileStr, { encoding: 'utf-8' }) - function updateFileStr(label, address, file) { + + function updateFileStr(label, address) { + if (blacklistedAddresses.has(address)) return; if (!address || !address.length) return; if (!updateFile) { updateFile = (new RegExp(address, 'i')).test(fileStr) From 517d21fb3cb89d77f667ddc16f6676106ee7ffe9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:43:26 +0100 Subject: [PATCH 1420/1768] update umbrella #12144 --- projects/umbrella/index.js | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/projects/umbrella/index.js b/projects/umbrella/index.js index 7b6435453d..6d3eddcaa2 100644 --- a/projects/umbrella/index.js +++ b/projects/umbrella/index.js @@ -1,23 +1,39 @@ const { staking } = require("../helper/staking"); +const { pool2 } = require("../helper/pool2"); -const stakingContract = "0xDa9A63D77406faa09d265413F4E128B54b5057e0"; -const UMB = "0x6fC13EACE26590B80cCCAB1ba5d51890577D83B2"; -const pool2StakingContract = "0x885EbCF6C2918BEE4A2591dce76da70e724f9a8E"; +const UMB_eth = "0x6fC13EACE26590B80cCCAB1ba5d51890577D83B2"; const UMB_WETH_UNIV2 = "0xB1BbeEa2dA2905E6B0A30203aEf55c399C53D042"; -const stakingContract_bsc = "0x648F235ec0C24fe170BD0822d2FEf442880A25EE"; const UMB_bsc = "0x846F52020749715F02AEf25b5d1d65e48945649D"; +const UMB_WBNB_PCSV2 = "0xFfD8eEFb9F0Ba3C60282fd3E6567A2C78C994266"; + +const ethPools = [ + '0xDa9A63D77406faa09d265413F4E128B54b5057e0', '0x5A2697C772d6062Eb2005e84547Ec4a36cCb3B52', '0x2d9D79B3189377449aB2AA4bBD2cd2651e0b85BE', +]; + +const ethLpPools = [ + '0x885EbCF6C2918BEE4A2591dce76da70e724f9a8E', '0xa67cbdAd80C34e50F5DE96730f658910f52b2F8c', '0xB67D91E38fbA6CfCb693d3f4598F8bd1e6e68AE3', +]; + +const bscPools = [ + '0x1541A01c407dCf88f32659D2C4A21Bb5763Fd2B4', '0x53Fa13Fa6c803d5fF6bDAe06bf6Bc12EdF1e343d', '0x55881395d209397b0c00bCeBd88abC1386f7aBe7', +]; + +const bscLpPools = [ + '0x8c7e186ce08F1f2585193b1c10799F42966BD7FF', '0xdCbcDb9bFAD7B0A08306aF10Aa11c3c3b6470921', '0x6Ff6B943D20B611E81a581c1E7951A6Dc0AC3455', +]; + module.exports = { - misrepresentedTokens: true, ethereum: { - tvl: (async) => ({}), - staking: staking(stakingContract, UMB), - pool2: staking(pool2StakingContract, UMB_WETH_UNIV2), + tvl: () => ({}), + staking: staking(ethPools, UMB_eth), + pool2: pool2(ethLpPools, UMB_WETH_UNIV2), }, bsc: { - staking: staking(stakingContract_bsc, UMB_bsc), + staking: staking(bscPools, UMB_bsc,), + pool2: pool2(bscLpPools, UMB_WBNB_PCSV2,), }, - methodology: "Counts liquidty on the staking and pool2 only", -}; + methodology: "Counts liquidty on the staking pools (v1, v2 and v3) on Eth and BSC (https://staking.umb.network/)", +}; \ No newline at end of file From 09a68b14d777df3be221de8771ad176a1a32693b Mon Sep 17 00:00:00 2001 From: Oleh Kyslashko Date: Wed, 11 Dec 2024 12:44:19 +0200 Subject: [PATCH 1421/1768] add jbtc (#12596) --- projects/helper/bitcoin-book/index.js | 4 +++- projects/helper/bitcoin-book/jbtc.js | 4 ++++ projects/jbtc/index.js | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 projects/helper/bitcoin-book/jbtc.js create mode 100644 projects/jbtc/index.js diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 2947a5084f..7393a67786 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -89,6 +89,7 @@ const chakra = require('./chakra.js') const nerveNetworkBridge = require('./nervenetworkbridge.js') const nexusbtc = require('./nexusbtc') const tapbit = require('./tapbit-cex.js') +const jbtc = require('./jbtc') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -196,5 +197,6 @@ module.exports = { chakra, nerveNetworkBridge, nexusbtc, - tapbit + tapbit, + jbtc } diff --git a/projects/helper/bitcoin-book/jbtc.js b/projects/helper/bitcoin-book/jbtc.js new file mode 100644 index 0000000000..bf147722d1 --- /dev/null +++ b/projects/helper/bitcoin-book/jbtc.js @@ -0,0 +1,4 @@ + +module.exports = [ + 'bc1qmukuv7j57umsd5tgg9fw88eqap57rzphkfckyp', +] diff --git a/projects/jbtc/index.js b/projects/jbtc/index.js new file mode 100644 index 0000000000..bc1d995856 --- /dev/null +++ b/projects/jbtc/index.js @@ -0,0 +1,9 @@ +const { sumTokensExport } = require('../helper/sumTokens') +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + +module.exports = { + methodology: 'Total amount of BTC locked in Bitcoin network on wallet bc1qmukuv7j57umsd5tgg9fw88eqap57rzphkfckyp', + bitcoin: { + tvl: sumTokensExport({ owner: bitcoinAddressBook.jbtc }), + } +} From 6ab9c2824bd18f0429765a05aa56ba6a4c770258 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:21:52 +0100 Subject: [PATCH 1422/1768] WisdomTree Fund (RWA) (#12654) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/franklinTempleton-finance/index.js | 9 ++--- projects/helper/chain/stellar.js | 17 ++++++++ projects/wisdomtree/index.js | 45 +++++++++++++++++++++ 3 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 projects/helper/chain/stellar.js create mode 100644 projects/wisdomtree/index.js diff --git a/projects/franklinTempleton-finance/index.js b/projects/franklinTempleton-finance/index.js index 50723516ea..e5c621f002 100644 --- a/projects/franklinTempleton-finance/index.js +++ b/projects/franklinTempleton-finance/index.js @@ -1,5 +1,7 @@ +const { getAssetSupply } = require("../helper/chain/stellar") + const BENJI = { - stellar: { ticker: "BENJI", address: 'GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5' }, + stellar: '', arbitrum: '0xb9e4765bce2609bc1949592059b17ea72fee6c6a', polygon: '0x408a634b8a8f0de729b48574a3a7ec3fe820b00a', avax: '0xe08b4c1005603427420e64252a8b120cace4d122', @@ -8,10 +10,7 @@ const BENJI = { } const stellarTvl = async (api) => { - const stellarApi = `https://api.stellar.expert/explorer/public/asset/${BENJI[api.chain].ticker}-${BENJI[api.chain].address}` - const response = await fetch(stellarApi) - const { supply } = await response.json() - api.addUSDValue(supply / 1e7) + api.addUSDValue(await getAssetSupply('BENJI-GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5')) } const evmTVL = async (api) => { diff --git a/projects/helper/chain/stellar.js b/projects/helper/chain/stellar.js new file mode 100644 index 0000000000..460b0378f5 --- /dev/null +++ b/projects/helper/chain/stellar.js @@ -0,0 +1,17 @@ +const { get } = require('../http') + +async function getAssetSupply(asset) { + const [assetCode, assetIssuer] = asset.split('-') + const { _embedded: { records } } = await get(`https://horizon.stellar.org/assets?asset_code=${assetCode}&asset_issuer=${assetIssuer}`) + let supply = 0 + for (const { balances } of records) { + supply += +balances.authorized + supply += +balances.authorized_to_maintain_liabilities + } + return supply +} + + +module.exports = { + getAssetSupply +} \ No newline at end of file diff --git a/projects/wisdomtree/index.js b/projects/wisdomtree/index.js new file mode 100644 index 0000000000..c0aec1c3f6 --- /dev/null +++ b/projects/wisdomtree/index.js @@ -0,0 +1,45 @@ +// Since the NAVs are hardcoded, here are the links to find the different NAVs from WisdomTree's PoR +// https://www.wisdomtree.com/investments/digital-funds/money-market/wtgxx +// https://www.wisdomtree.com/investments/digital-funds/fixed-income/flttx +// https://www.wisdomtree.com/investments/digital-funds/fixed-income/wtsyx +// https://www.wisdomtree.com/investments/digital-funds/fixed-income/wttsx +// https://www.wisdomtree.com/investments/digital-funds/fixed-income/tipsx +// https://www.wisdomtree.com/investments/digital-funds/fixed-income/wtstx +// https://www.wisdomtree.com/investments/digital-funds/fixed-income/wtlgx +// https://www.wisdomtree.com/investments/digital-funds/equity/spxux +// https://www.wisdomtree.com/investments/digital-funds/asset-allocation/wtsix + +const { getAssetSupply } = require('../helper/chain/stellar.js') + +const CONFIG = { + stellar: [ + { asset: 'WTGX-GDMBNMFJ3TRFLASJ6UGETFME3PJPNKPU24C7KFDBEBPQFG2CI6UC3JG6', NAV: 1.000 }, // WTGX + { asset: 'FLTT-GBTZKH3RNKW46XEZNCGZEBAGJISKDZKQXKSQ2N5G5SFX36TLWKKR6QJ6', NAV: 1.013 }, // FLTTX + { asset: 'WTSY-GB3ZUC7FGDEEBXY3BDEJWMPNGBFA66YRI4QQT6PBO3ZT6F33S7RL36VF', NAV: 1.004 }, // WTSYX + { asset: 'WTTS-GBBV5CF7UPA2PYRPA632URLB55BWML7X4H33ZRCDWMTULOXDGPHJR5VI', NAV: 9.833 }, // WTTSX + { asset: 'TIPS-GAJ4KSYLVBJKQ4UBPKJJXPYWVIRZWVTIYRMHBXTHGCDS4XJXXYEUALVD', NAV: 9.662 }, // TIPSX + { asset: 'WTST-GDEBI5X7J4IDXCSVV3KPFZIHQRCBVF3DAZMS5H7KYOBK45T6XYGDE77P', NAV: 9.511 }, // WTSTX + { asset: 'WTLG-GAK7PE7DD4ZRJQN3VBCQFBKFV53JGUM2SQATQAKLFK6MVONPGNYK34XH', NAV: 8.645 }, // WTLGX + { asset: 'SPXU-GDJBVX3QA5HJPBSAU5VIX2W6MC37NU4UFXPKEGK42SJCYN6AEQ4Z6COM', NAV: 15.815 }, // SPXUX + { asset: 'WTSI-GAD22PDBRFEMXAKPFDP4JGDFWKKD6VPXWUWEAXBS6ZYJYFFQDUN7HAFG', NAV: 10.282 }, // WTSIX + ], + ethereum: '0x1fecf3d9d4fee7f2c02917a66028a48c6706c179' // WTGX +} + +const stellarTvl = async (api) => { + const assets = CONFIG[api.chain] + for (const { asset, NAV } of assets) { + const supply = await getAssetSupply(asset) + api.addUSDValue(supply * NAV) + } +} + +const evmTVL = async (api) => { + const decimals = await api.call({ target: CONFIG[api.chain], abi: 'erc20:decimals' }) + const supply = await api.call({ target: CONFIG[api.chain], abi: 'erc20:totalSupply' }) + api.addUSDValue(supply / 10 ** (decimals)) +} + +Object.keys(CONFIG).forEach((chain) => { + module.exports[chain] = { tvl: chain === 'stellar' ? stellarTvl : evmTVL }; +}); From 9517c1c663aef7d3092be20f98e4f5edca4154db Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:37:09 +0100 Subject: [PATCH 1423/1768] refactor ascend #12666 --- projects/ascentyield/index.js | 46 +++++++++++++++-------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/projects/ascentyield/index.js b/projects/ascentyield/index.js index 2cffc9780d..25670debf3 100644 --- a/projects/ascentyield/index.js +++ b/projects/ascentyield/index.js @@ -1,38 +1,30 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/solana"); const { post } = require('../helper/http'); -const { sumTokensExport } = require("../helper/unwrapLPs") - const hyperliquidSubAccount = "0x75b2e5c67d2116bcf1b77c5e6444fc18bc5d38a4" // for trading at hyperliquid const jlpholder = "9nAgg9wAnuiPv57dXkmCwoGhhbTHS1RRzvYLjnRGZtXp" // for keeping JLP and USDC(buy JLP) const arbiusdcholder = "0xa6Ff9a77D6bD8B0a759055Cd8885e23228bc10Ec" // USDC on arbi(will bridge to solana) const hyperliquidMainAccount = "0x7151609Fdc7E0Cac89FB9720F0957AF9d552f8f9" // will transfer USDC to sub account - module.exports = { - methodology: "Aggregate trading account margins in HyperLiquid and JLP, USDC on the solana network.", - solana: { - tvl: async (api) => { - return sumTokens2({ - owner: jlpholder - }); - }, - }, - hyperliquid: { - tvl: async (api) => { - let data = await post('https://api.hyperliquid.xyz/info', { - type: "clearinghouseState", - user: hyperliquidSubAccount - }) - data = parseInt(data.marginSummary.accountValue) - api.addCGToken('usd-coin', data) - } - }, - arbitrum: { - tvl: sumTokensExport({ - owners: [arbiusdcholder, hyperliquidMainAccount], - tokens: [ADDRESSES.arbitrum.USDC_CIRCLE,] - }) - }, + misrepresentedTokens: true, + doublecounted: true, + methodology: "Aggregate trading account margins in HyperLiquid and JLP, USDC on the solana network.", + arbitrum: { + tvl + }, }; + + +async function tvl(api) { + // hyperliquid tvl + let data = await post('https://api.hyperliquid.xyz/info', { type: "clearinghouseState", user: hyperliquidSubAccount }) + data = parseInt(data.marginSummary.accountValue) + api.addCGToken('usd-coin', data) + + // solana tvl + await sumTokens2({ balances: api.getBalances(), owner: jlpholder }) + + return api.sumTokens({ owners: [arbiusdcholder, hyperliquidMainAccount], tokens: [ADDRESSES.arbitrum.USDC_CIRCLE,] }) +} \ No newline at end of file From d116c6beacb946e141900fb451bb40faa3a2417d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:19:12 +0100 Subject: [PATCH 1424/1768] track balancer v3 --- projects/balancer-v3/index.js | 13 +++++++++++++ projects/helper/balancer.js | 28 ++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 projects/balancer-v3/index.js diff --git a/projects/balancer-v3/index.js b/projects/balancer-v3/index.js new file mode 100644 index 0000000000..248757e14d --- /dev/null +++ b/projects/balancer-v3/index.js @@ -0,0 +1,13 @@ +const { v3Tvl } = require("../helper/balancer") + +const config = { + xdai: { vault: '0xbA1333333333a1BA1108E8412f11850A5C319bA9', fromBlock: 37360338 }, + ethereum: { vault: '0xbA1333333333a1BA1108E8412f11850A5C319bA9', fromBlock: 21332121 }, +} + +Object.keys(config).forEach(chain => { + const {vault, fromBlock,} = config[chain] + module.exports[chain] = { + tvl: v3Tvl(vault, fromBlock) + } +}) \ No newline at end of file diff --git a/projects/helper/balancer.js b/projects/helper/balancer.js index 4167dbc582..a38a0d75b3 100644 --- a/projects/helper/balancer.js +++ b/projects/helper/balancer.js @@ -34,6 +34,29 @@ function onChainTvl(vault, fromBlock, { blacklistedTokens = [], preLogTokens = [ } } +function v3Tvl(vault, fromBlock, { blacklistedTokens = [], preLogTokens = [], onlyUseExistingCache, permitFailure } = {}) { + return async (api) => { + const regsistedEvents = "event PoolRegistered(address indexed pool, address indexed factory, (address token, uint8 tokenType, address rateProvider, bool paysYieldFees)[] tokenConfig, uint256 swapFeePercentage, uint32 pauseWindowEndTime, (address pauseManager, address swapFeeManager, address poolCreator) roleAccounts, (bool enableHookAdjustedAmounts, bool shouldCallBeforeInitialize, bool shouldCallAfterInitialize, bool shouldCallComputeDynamicSwapFee, bool shouldCallBeforeSwap, bool shouldCallAfterSwap, bool shouldCallBeforeAddLiquidity, bool shouldCallAfterAddLiquidity, bool shouldCallBeforeRemoveLiquidity, bool shouldCallAfterRemoveLiquidity, address hooksContract) hooksConfig, (bool disableUnbalancedLiquidity, bool enableAddLiquidityCustom, bool enableRemoveLiquidityCustom, bool enableDonation) liquidityManagement)" + + const logs = await getLogs({ + api, + target: vault, + fromBlock, + eventAbi: regsistedEvents, + onlyArgs: true, + extraKey: 'PoolRegistered', + topics: ['0xbc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad'], + onlyUseExistingCache, + }) + + const pools = logs.map(i => i.pool) + const tokens = logs.map(i => i.tokenConfig.map(i => i.token)).flat() + + blacklistedTokens = [...blacklistedTokens, ...pools].map(i => i.toLowerCase()) + return api.sumTokens({ owner: vault, tokens }) + } +} + function v1Tvl(bPoolFactory, fromBlock, { blacklistedTokens = [] } = {}) { return async (api) => { let poolLogs = await getLogs({ @@ -52,7 +75,7 @@ function v1Tvl(bPoolFactory, fromBlock, { blacklistedTokens = [] } = {}) { } } -function balV2GraphExport({ vault, blacklistedTokens = [], graphURL, name, permitFailure, }) { +function balV2GraphExport({ vault, blacklistedTokens = [], graphURL, name, permitFailure, }) { return async (api) => { if (!graphURL) { throw new Error('graphURL is required') @@ -61,7 +84,7 @@ function balV2GraphExport({ vault, blacklistedTokens = [], graphURL, name, perm throw new Error('name is required (it is used as id for caching)') } const query = `{ tokens(first: 1000) { address } }` - const tokens = (await cachedGraphQuery(name, graphURL, query)).tokens.map(t => t.address) + const tokens = (await cachedGraphQuery(name, graphURL, query)).tokens.map(t => t.address) return sumTokens2({ api, owner: vault, tokens, blacklistedTokens, permitFailure }) } } @@ -70,4 +93,5 @@ module.exports = { onChainTvl, v1Tvl, balV2GraphExport, + v3Tvl, }; From 3b701c7b949665b7a55f56468d9c96515c50f1ad Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:26:36 +0000 Subject: [PATCH 1425/1768] Update taraxa.js --- projects/treasury/taraxa.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/projects/treasury/taraxa.js b/projects/treasury/taraxa.js index e3a8bef5af..c9abce64d9 100644 --- a/projects/treasury/taraxa.js +++ b/projects/treasury/taraxa.js @@ -2,9 +2,8 @@ const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') module.exports = { tara: { - tvl: async () => ({}), - staking: async (api) => { + tvl: async (api) => { return sumTokens2({ api, tokens: [nullAddress], owners: ['0x723304d1357a2334fcf902aa3d232f5139080a1b'] }) } } -} \ No newline at end of file +} From 93d0a89b6a01d13f51275560d22759fddbe1c873 Mon Sep 17 00:00:00 2001 From: Deploydon <96504831+Deploydon@users.noreply.github.com> Date: Thu, 12 Dec 2024 03:15:32 +0700 Subject: [PATCH 1426/1768] Astrovault duplicate export fix (#12670) --- projects/astrovault/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/projects/astrovault/index.js b/projects/astrovault/index.js index 57fe9e1ffa..e022079319 100644 --- a/projects/astrovault/index.js +++ b/projects/astrovault/index.js @@ -98,6 +98,4 @@ module.exports = { nibiru: { tvl, }, -} - -module.exports = { nibiru: { tvl } } \ No newline at end of file +} \ No newline at end of file From 566547dfca72f42f2b76675734aad0123e0847d0 Mon Sep 17 00:00:00 2001 From: shapeshed Date: Wed, 11 Dec 2024 20:15:56 +0000 Subject: [PATCH 1427/1768] Add ATOM USDC Duality vault (#12671) --- projects/margined-protocol/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/margined-protocol/index.js b/projects/margined-protocol/index.js index 05dc8c3e54..712030b720 100644 --- a/projects/margined-protocol/index.js +++ b/projects/margined-protocol/index.js @@ -21,6 +21,7 @@ const neutronVaults = { wBTCUSDC: "neutron17fyzkafg4scrd6xu0sp9llrl6hazegza7yer4erlea0kvk30yxsqk2xqfd", NTRNUSDC: "neutron1t0fl9k43g86sv60ghx9vtwed9rpgtf49rxzm05ff477j23h52c6s0urdc7", TIAUSDC: "neutron1wv8pl7tsatzx6n9yaqfksvu5y0x7j50g6mhy636udwfn3vyqp0hsu7g8yk", + ATOMUSDC: "neutron1krqwpk0kmphl93kykavp2fnr88g5rnrpk40c34a55yrl00tmfz0s99ewc6", } const config = { From 25425acc3c463e5b691f621412104d38bd2c8fe2 Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:17:44 +0800 Subject: [PATCH 1428/1768] update desyn github strategy library (#12675) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-basisTrading/index.js | 2 +- projects/desyn-farm/helper.js | 6 +++--- projects/desyn-farm/index.js | 2 +- projects/desyn-yieldAggregator/index.js | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/desyn-basisTrading/index.js b/projects/desyn-basisTrading/index.js index ec2b290495..7cc8e8a537 100644 --- a/projects/desyn-basisTrading/index.js +++ b/projects/desyn-basisTrading/index.js @@ -7,6 +7,6 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { - tvl: getTvlFunction('StrategyType3', true) + tvl: getTvlFunction('strategy3', true) } }) \ No newline at end of file diff --git a/projects/desyn-farm/helper.js b/projects/desyn-farm/helper.js index a75adfcfa3..984c4b6fc7 100644 --- a/projects/desyn-farm/helper.js +++ b/projects/desyn-farm/helper.js @@ -7,8 +7,8 @@ const abi = { } async function getInfoListPool(strategy_type, chain) { - const data = await getConfig('desyn/' + strategy_type, `https://api.desyn.io/etf/defillama/get_pool_list?strategy_type=${strategy_type}`) - return data.data.config[chain]?.safePools + const data = await getConfig('desyn/' + strategy_type, `https://raw.githubusercontent.com/Meta-DesynLab/strategy-asset/refs/heads/main/main/${strategy_type}.json`) + return data.config[chain]?.safePools } // This is aSTETH, @@ -47,7 +47,7 @@ function getTvlFunction(strategy_type, isDoubleCounted) { const allBals = await api.multiCall({ abi: abi.getBalance, calls }) api.add(allTokens, allBals) - if (strategy_type === 'StrategyType2') + if (strategy_type === 'strategy2') api.removeTokenBalance(leverageStaking) } } diff --git a/projects/desyn-farm/index.js b/projects/desyn-farm/index.js index 07add1a91d..749fad3489 100644 --- a/projects/desyn-farm/index.js +++ b/projects/desyn-farm/index.js @@ -11,6 +11,6 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { - tvl: getTvlFunction('StrategyType1', false) + tvl: getTvlFunction('strategy1', false) } }) \ No newline at end of file diff --git a/projects/desyn-yieldAggregator/index.js b/projects/desyn-yieldAggregator/index.js index 835f12569b..32d14b79cc 100644 --- a/projects/desyn-yieldAggregator/index.js +++ b/projects/desyn-yieldAggregator/index.js @@ -7,6 +7,6 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { - tvl: getTvlFunction('StrategyType2', true) + tvl: getTvlFunction('strategy2', true) } }) \ No newline at end of file From 75d4c96d5ef23633cb780aadb1bd04da93e76ab2 Mon Sep 17 00:00:00 2001 From: 0xR <99395193+0xrmvdao@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:30:35 +0300 Subject: [PATCH 1429/1768] Add SparkDEX Perps (#12676) --- projects/sparkdex-perps/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/sparkdex-perps/index.js diff --git a/projects/sparkdex-perps/index.js b/projects/sparkdex-perps/index.js new file mode 100644 index 0000000000..9ff7cbf5d1 --- /dev/null +++ b/projects/sparkdex-perps/index.js @@ -0,0 +1,15 @@ +const { nullAddress } = require("../helper/unwrapLPs"); + +const FlareUSDCe="0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6"; + +async function FlareTvl(api) { + const tokens = [nullAddress, FlareUSDCe]; + const owners = ["0xF59b51cB430736E0F344b0101b23981DEaE10968"]; + return api.sumTokens({ owners, tokens }); +} + +module.exports = { + flare: { + tvl: FlareTvl, + }, +}; From 23c9ffd4b95d391a1f546a097272d35f7126e7ab Mon Sep 17 00:00:00 2001 From: "salvor.io" <148768872+salvorio@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:31:17 +0300 Subject: [PATCH 1430/1768] added more assets on salvor (#12677) --- projects/salvor/index.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/projects/salvor/index.js b/projects/salvor/index.js index 64d279bc01..8cc83ddd6e 100644 --- a/projects/salvor/index.js +++ b/projects/salvor/index.js @@ -15,6 +15,32 @@ module.exports.avax = { ADDRESSES.avax.WAVAX, ADDRESSES.avax.USDC, ADDRESSES.avax.USDt, + ADDRESSES.avax.JOE, + "0x420FcA0121DC28039145009570975747295f2329", + "0xAcFb898Cff266E53278cC0124fC2C7C94C8cB9a5", + "0xB8d7710f7d8349A506b75dD184F05777c82dAd0C", + "0x184ff13B3EBCB25Be44e860163A5D8391Dd568c1", + "0x5Ac04b69bDE6f67C0bd5D6bA6fD5D816548b066a", + "0xAAAB9D12A30504559b0C5a9A5977fEE4A6081c6b", + "0x60781C2586D68229fde47564546784ab3fACA982", + "0xec3492a2508DDf4FDc0cD76F31f340b30d1793e6", + "0x8aD25B0083C9879942A64f00F20a70D3278f6187", + "0xE8385CECb013561b69bEb63FF59f4d10734881f3", + "0x65378b697853568da9ff8eab60c13e1ee9f4a654", + "0x4f94b8aef08c92fefe416af073f1df1e284438ec", + "0x201d04f88bc9b3bdacdf0519a95e117f25062d38", + "0x46b9144771cb3195d66e4eda643a7493fadcaf9d", + "0xebb5d4959b2fba6318fbda7d03cd44ae771fc999", + "0x18e3605b13f10016901eac609b9e188cf7c18973", + "0x4d6ec47118f807ace03d3b3a4ee6aa96cb2ab677", + "0x694200a68b18232916353250955be220e88c5cbb", + "0x03f77458e1eb9fa72b8186b573e40b106442f155", + "0x6ec18092ee47fcc8f1fe15899156ff20c64ab3d7", + "0x4a5bb433132b7e7f75d6a9a3e4136bb85ce6e4d5", + "0x8f56421dc48dcce052d9afc80b696291ddaa832a", + "0x56b9f5e181550b40472fd8c10a34e4ee6009c304", + "0xc8e7fb72b53d08c4f95b93b390ed3f132d03f2d5", + "0x7a842a6f4580edd3df41c1f31e0395044de6bc75", nullAddress ] }), From df889cff3d7205713f4dec4dbb2caa2438aa5e5e Mon Sep 17 00:00:00 2001 From: Holdstation <104961349+holdstation@users.noreply.github.com> Date: Thu, 12 Dec 2024 19:14:46 +0700 Subject: [PATCH 1431/1768] create holdstation-swap tvl (#12678) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/holdstation-swap/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/holdstation-swap/index.js diff --git a/projects/holdstation-swap/index.js b/projects/holdstation-swap/index.js new file mode 100644 index 0000000000..8d760f2337 --- /dev/null +++ b/projects/holdstation-swap/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + era: { factory: '0x1153D1d27A558471eF051c5D2D075d7D07B84A07', fromBlock: 31199635 }, +}) \ No newline at end of file From d9099c0430b14b63b59769db34edf1ebdd1660b8 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:13:21 +0000 Subject: [PATCH 1432/1768] replace comment bot --- .github/workflows/commentResult.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index 1b36c04979..7871360b75 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -1,6 +1,6 @@ const { readFileSync } = require('fs'); const axios = require('axios'); -const junk = 'VPTOH1X0B7rf8od7BGNsQ1z0BJk8iMNLxqrD'; +const junk = 'rmicl\x1Eefn]JsfjoHoGRpWOt3_u@L_LpTUc_BLf0T/i/mXC'; async function main() { const [, , log, author, repo, pr, path ] = process.argv; @@ -25,12 +25,14 @@ async function main() { `https://api.github.com/repos/${author}/${repo}/issues/${pr}/comments`, { body }, { headers: { - Authorization: `token ghp_${translate(junk)}`, + Authorization: scramble(junk), Accept: 'application/vnd.github.v3+json' } }); }; -function translate(input) { - return input ? translate(input.substring(1)) + input[0] : input; -}; -main(); \ No newline at end of file +function scramble(str) { + return str.split('').reduce((a, b) => { + return a + String.fromCharCode(b.charCodeAt(0) + 2); + }, ''); +} +main(); From 07c94f2c3abd0756a5973a705f5159cda67ad423 Mon Sep 17 00:00:00 2001 From: CodingPeter <42434849+zhaowei666@users.noreply.github.com> Date: Thu, 12 Dec 2024 21:17:42 +0800 Subject: [PATCH 1433/1768] update address book (#12681) --- projects/helper/bitcoin-book/chakra.js | 2037 ++++++++++++++++++++++++ 1 file changed, 2037 insertions(+) diff --git a/projects/helper/bitcoin-book/chakra.js b/projects/helper/bitcoin-book/chakra.js index c9085c2ea5..00ca490b99 100644 --- a/projects/helper/bitcoin-book/chakra.js +++ b/projects/helper/bitcoin-book/chakra.js @@ -190,4 +190,2041 @@ module.exports = [ 'bc1pkpk5fzr9enyc8zyasl3g3y7fyz5asrqg56ycsfpgw0w3x7p954xsdqfs4p', 'bc1p942zmt4gmc0j6uaemy90zn0cxfr27zs8s8u2ln3ctu7sdcrvplesv0kqpw', 'bc1pr8e0qy7ms9vu8k3g9ldqsudhmqedsdmd74yxgphgs29gf0nges7q26f5mg', + // cap 3 + 'bc1px73yykg3wfm74umz2f49gu9akk3g32l4776kj6m0k053944qlt9ss60p58', + 'bc1pmr7lkv52g7aq62r8czqjcvs53vz825zk20yzfaw4azruseugeggqxwr98p', + 'bc1p5qht37v7zxnm4hshsykmy7yxf0kqq36w2xhc9mz9fhnm59xgd3mq55fxem', + 'bc1pajxeut9kg9vwza8e4p5l2kywj8txzczxhlwkk9f6n2geg396mszsxyu4x2', + 'bc1p9yjpkzs8ftn98rvx2e4plhhw49hm36au9fvxg79jl6h923c23fzsjqd4xf', + 'bc1pa7fnwuakgr7svtne9j2ju4zd4pph7jnak9f84kvqlwan5spkqpgsve74t0', + 'bc1pssdvma8yfzajxl3uc7xd2hhd58888le05m38qwqnl2err03h79ms86lplc', + 'bc1pg5lt2pe2lkhd8r0pssazs86gjqr4jz23wwtq7c8cymrdz9ldgytqye30xl', + 'bc1prveqyfgrz9ku8lsuu2gezcmu8n4c0kamndyfxuam37wemy0ph0ustwvx7a', + 'bc1p8ly5j2us85f9h0urdms4an4tl3ldyw8wr7sadusn8qumxyuyxwzqk6a3pu', + 'bc1p6cesp3del2f4pxw5tan86twfrxeca52xms6xjz2hzw9drvx608ps2tagpe', + 'bc1p670s3pttdfvthuvw8g78x6ra3ye7yr8cm2fuqk4tlzqxqlqrwh8s8s4kgl', + 'bc1ptvg47kdvkdmx9arltpvduerkedjttg96slkut7nazqd0xpr2muhqy4qs9f', + 'bc1pckn0393my49e5875dgctj50jve6c9cxj7ssqfsr7znwckk5nfwyqfuecvy', + 'bc1p26gn2fsp8cg8nawjzp9u40lw8gk7r09ymdhkd5xyny0yp993aa6qn38256', + 'bc1ppy4xjkf56nzfkzm67gcvu9e3l93fg4kle7ykcfth5urjwmr8ez5q2puhev', + 'bc1pt64j94uwr44j84fedtg6sh0ydyvnsjzysapqc8hk9vku4mvfr4uqh0znyy', + 'bc1pxljm8tmuwq7hsfguj023myhcraqf5eut34z2e0qu5q4l8rhaw5cskzcup2', + 'bc1p60l2uz38ckkh2g04xatgx4zd0xrel8awy20rvvy5a6u469dkutzqtyft56', + 'bc1p7hp9ratwwj724j6lw6tq63dsaexp2pv2wtkhd8v46hvwx7cd63sqdkmuxr', + 'bc1ptjeug9wp9pgm30sjcjxrl44rznu50ra08xzrp7n4mpzak4u0u4dst3rkud', + 'bc1pnecr5rkk86efqv929whw3hnhqpkz3rgeh20y9ekzmg60ppqfmyws0prhua', + 'bc1pewl25pneve9sesad3grzd30d2j7rtxf5utxvcax5fkr67js7z2eq4faan3', + 'bc1ph8740mu7fsgvkuhmm43kwkrl26qwucxs6ptwgp9zzd5585ccv33qanz782', + 'bc1ptdx07yx2p5dnnmuxvkse5rxda9vh3kpv2zjfv4ywn8g3x3sgfepqm3acfj', + 'bc1p4wzzn7nqeafs6u67sern3lysuj9n90wlxrl4fc4w4mn4sz7xrzhstsaps0', + 'bc1p4chh7mhjetqtgkjfl2m8rcrh86rr520cyelprucfl3vlw2ds5wdsqj0zrp', + 'bc1pcv7clklkf5jzl6jv6r8z2ztklnf2nduggev6gumuyt3qasd6s4sqz7guuw', + 'bc1pmj0hev54qug28wluzvwrns0d9h4lj55e4qwyfrxxh3qyfh2fgthsf6n84d', + 'bc1pdz3tf8nnq3w8lxn6jlf9fnl5y7y4wy0y4d5j0jd5wwgsphc94ansqd7pnh', + 'bc1plcy9vqlep89ghsk809s3al3pmgx3gg90fu8g4vln35rpnsywezrqxltt9h', + 'bc1pm8hn8qa0yae9rm82dkp2kjrze39c03tjmyw5stnmc2k02uvu9vlqt9krvs', + 'bc1puty73g57p8rc7e3qzrfsaxpurv6tj8j0sqkaphkvus32ax8qh8qqrvv6zy', + 'bc1p4snlw30exhvtrxfdxmv6plwgzh0rf96660hr6srl6hvh94k5tyrsdy3c36', + 'bc1pkh4dkrz0x6s7f9rwjghmncptltyvw2p5n3dw9sz9txnu7wuyjy0szyeh43', + 'bc1palsgkgrzny8c6qrl5qgucgnzftsxezvl93vf8pv3p4458makayqswwkvlp', + 'bc1psksdj93ppus0ngt3xk8pkuwsg8kd9ej88vahe9ql6gh98hsmn7gsp064sj', + 'bc1pccsl8u3gpzjqg3rxcg75y65tjvzwa9dr0u2l2dt6wjhnw08r8q7qqw6z7q', + 'bc1prytnvamkfr8fsxe9vsux02d74eyhfqexlhchp4mpthntsrjec8uqjszpp0', + 'bc1pfxxulwq7wlr53tmzt0xe24entxvuc6p0wd5fclpynzm43ky4e7xqccduk3', + 'bc1ptw9zyw0zmhxxrnf3usn93tupvmu0qnxft8czfxnfwmtq0nd92fhsv8yewq', + 'bc1p2xn69z9sx2ae6pex85999hhchfw7k0gs4232vfn0ucgcfvtm8kvqdtnk5e', + 'bc1p8mxvay4xz67jyqzf36er86q54mt6g65dacnnuq9zscc2z7f03lpscfhvtr', + 'bc1plg9u96y3wu7h27zfnf2u6knzj272rxaarf8q6mhsgld3t5qdtlhsua6wyg', + 'bc1pca8suwpv0xr650phcmc6f0vuz7m27hrcdchlxxjn5nhmyzanvfpsxjzawn', + 'bc1phzwd2p3l9jtgn7p2n33dxu6h23dxq50fg3rk3ny7m7nhkxdxla3sapeje9', + 'bc1pxnqf50dazkvnjqp5ejf8039cetykcukl4xfhsundgn72eljhfm5qjpmnxv', + 'bc1png995wl5jxa05kq0v2fq3hf87furln0223y7q6g8aqjwrmh4cntqhpfv7g', + 'bc1p72q8nu8y5qan8xh52ykta4tldz30smwk2xngmur8qzqk9wqd55lsmdkgyc', + 'bc1pa4cqq3a0faaqxcprwmc62u270fgjxjwy8x4ly5r35fd4t2yy2t5q0r9uxq', + 'bc1p7lhjnvcxu5wtlxss9kuvjvkj97ej3vd4sc9c85qapgwzmx29n5zq02ue4y', + 'bc1pgvq6u3q37n7rtsuruaedvljs9r3lt73r3ly9ds7manrjgxzv3clqcd9whq', + 'bc1paqeh5pp538v0gprgt2mjd0ahmpusnla58n6j8nzpqqsx2qpjsk6qaeghyx', + 'bc1pchpn9c37vkq48wq9t6kmafq2yxlepxj6czqh0dc6grqtauvm3h2q4q92d6', + 'bc1pn0v9h2m7w22fdxpyvj809dpaj7q8tvzgjakcum768kfayyhuuu5qcw3092', + 'bc1pxgz0gjatzgsj76rl8qeth4qdy57hr79j95jvsa0z389c6xnjg5kq6xeurz', + 'bc1prhn3zw0dqw5cnjnzfrnmqsz8x7wvn7vc6l7uy4q59xcnklqh6h0sm7d0qg', + 'bc1plkvse8j3n42gycg5sa29gm6vp4qttp7fm0uwlpzvh579skl2r2xqqqk9tc', + 'bc1pk54c6jsgnu5kc0ftlyj89f5gvrw8pj5qlgngg4arz8rg58r8pvkqrcyewu', + 'bc1pt5g3c9mlskc7zl5wzmm0jksjkhr6w6k6zxex9tddavjl0jjmuqhsx7amy4', + 'bc1p4nmpnl4hfky803qvlxfdt8e6e548rh52s7tt7tf34kr5cecwj3ns97jcw5', + 'bc1p5ajju86lazv3z2cfpa8xfldcykd47y5crm7auy3fpglt85hnmn3qvlpmnm', + 'bc1pzzdvtlatxaqyrfc244v6vklpwmgqgwg949fk8ye7zq73rjgnsc4qkqv6yz', + 'bc1ptx0dvufjk25hnsyz6y96njjumvyqsy4y4uwaxe6hhres8jq2t8gsq2fg5v', + 'bc1pq6lr6hhqu7ejd2pmctmet2rqjq5gl0kl74eqk3n7umvuqshlc8tq5ck6sg', + 'bc1pa5pqkstnehd62e6z422x8reuhp3sk0xtv4na3tpacqrfky38asdsunmahp', + 'bc1petjzyxhrgpjm4urg0ldrqg2dkn0n74g2gll20ajumuhdxgmnhu9qwjzuue', + 'bc1pedeshmmapux06yu2024kkrwplt20an40cphrve2gxyh9eqd68x6qm0nd95', + 'bc1p7pyjh4lz4xm69cgf0ly93a83hds3jl542xgeye5m6wvg0zgprz8qr2h6mv', + 'bc1pet4lcmmumd7sdp2pvvg9z7gld9glwtv0mnhgqvuelc0wzlahehhslupmff', + 'bc1pnekalfmcfclee4w0h26czt2tk3jhazs7tuwrws6g36twnmg2rppqsl97qv', + 'bc1p5n6zrhj3zk5ncfwafl43dqmrmqwfze2955pnqzr72ps5h6str3zq6xwnts', + 'bc1pqjmedz5lwfwnkk70rspn5c2jps2r4crt9m90yzaydwke56sp6eeq6yk66y', + 'bc1pcjhml2frksl3yvx9qyv37d59pfcejht90hpxkq4p2d6j5ulg24squpxp66', + 'bc1pvmer093r98wxuxu6qu5xxg6wrftlp7fpjvqfw93qhdr5gxe2x88snp69vr', + 'bc1p05jgmz5hrj3a7kh2husedult6dpulfk6ms75743v5npznnh257fqz2lwpl', + 'bc1p05vpee84knuq2kr9a6j7jrftjhqjrl0c4mrgy6szdjtcerrpq76s62lzkc', + 'bc1p4tl57gxjj0w8md54es3e5xy3hullnstyt0fak8v9urcp0fk0zxaqyjqhr9', + 'bc1p5vmf43qfxncmxahmh46zjyau0lzqr5mf3fdx6gh920snhn0ru2zstsn0dk', + 'bc1pnuzga0q3kxr2jdpv2jdjufqwl8y3hgcrucmx85rfaalk6h2lq26s7wwjuc', + 'bc1p6yan8wgxhmmhzf5fqdzk6aycev7d5g4r2tzjsd993gtp5gxhcq8qhfpa0d', + 'bc1p5jak805vytrx3gau3t4hkj7npxv40gyugfw3nrs50wla9weqt76sqq7xdw', + 'bc1p9sqfdrkmgmyraqc99npmz2vv2qwqf63rwm56z622le6346zc63rqd80k9w', + 'bc1pn9zmpv5p9cnaefewuzs0d0rnngmasfuff8qzwqsvz6xx8nagjevsmtvkt9', + 'bc1pxz0q4tp8z4m5dnd4g5pafnym7855qr3qeuaxhxaztp5zp3pmmnts00zqln', + 'bc1ph0fxdlcnvp2nv597w30lexl3vawlv3rarw3c4rkwm4y4z379mgxqfmues2', + 'bc1prec7v3s02sfaxe9kd8s0dlguwd36x8nm8z59pcpm7qak7lf9z7xsw5nl6z', + 'bc1p3p35286qensre04k8dg6n5w2wz9mvjzm4magl2dtz6nnget7ml8s6gc29a', + 'bc1pac6dpcxzx96gppj3cdg605papuw7h5tke97urtaje4zj2lc73awse2llnd', + 'bc1paefgwk58cxfjvneg27nuc6ycw3m88s4nd5f4p9gysjqlyankt6yqlzmtsk', + 'bc1pdveqtq70syzudul95zwqms3gx5v2mhwlejw244gcuatqlawxl25qnnkxll', + 'bc1ppsth59uafqhy6flu59892tsukepymkg32t3ut5g9d4g65q7dru6qugatd4', + 'bc1p2nh43vlzpvef0y4hv6penc4j79ugrxx00l2yjsv5u0nk0n53mdssyk2l5m', + 'bc1p7l8tnrlmem2n6qu5edzlywz9mw7zalc9wn9u57zjc4htv3aujcassls3p9', + 'bc1p4st25l9zft4rw6205gpp073k7xg56pek5ejy6zhjlr8xrwll8adqkqje9n', + 'bc1pd95gg2kk03yx07947daqj5teta8hx4xprq6czguw7jperrgkjkvqny52dx', + 'bc1pmxpt3vtssvzu4y5xecuucnekalhn2tv68sg2ykc87w5ngnje958s3lcx0z', + 'bc1pvf2aw8zw85eug6v5j8jfn038haqt4l3mj5v3rn47q3gparqfvmys00zax6', + 'bc1p932wczq276wqj2rsn2yzqa7c09xa5jkcagpvvqgnrp4qv3c0rpmq9xuvk3', + 'bc1pw5xgeahx6rsjdchqcec30h5zlw0ekwta4zhtx7z6amvksr2altxst5k3f0', + 'bc1ptp0tr34x9892r20dqevqxgk80mvwllmdw0v04g5skdt2zdzqpj0snlrt3r', + 'bc1p8spsn7pszt05358jlm9f6c30275hekh6e8lcwth0ld0874mrl9vs9yyj3a', + 'bc1p093c66cfx4r4nvaxzgmlr0gjt3yrmzwa98v22pvwqnzrdqermvas7vr0xw', + 'bc1prqr72hlrr5g9rgedk6pgee92cvdwyx38nqaleg873en9kvratqaq7qul86', + 'bc1pks2tezhz3fv43equqrwhphxg9pf76ju2rlvat9zs2ml22t6aew7q4vusla', + 'bc1pr6k0kyeczstu3rxu9v6sw2m03a8gmz7ags454ujeplx0pxcsmrqs8ey0jd', + 'bc1p2w5fgqehmn86ffxlsn46sykh8w5rm5n0mcn0vtgvdkn6wjy5z98s9g3whj', + 'bc1peql6jfk0yy34h3uq9qtnmt8fs0mnck0dtx3zd0s2sankuhcv7gyq3eduwx', + 'bc1p0fy8pmwe5e9dyfxakkuf0hmy24tnxtjxtrvvgex3tvayw8nnxlnswjvlwj', + 'bc1pkxq2ku975yrau43tedpzfs9ffud2u5yzwhgvkka2z0vvefd5lfwq762qpx', + 'bc1pk94ryxvftm9kdjadpxsxwv629m392w6u47qmmjt09mshxhq4aw5sernje9', + 'bc1pcs3ce74fd0shdd9aqurrhl6esx76mswe5u2fgz24pc6953yxmj3sm03dul', + 'bc1p75ap32f2qvyex0s8m8cpqrjzfrqam47auufwyr526udvlw0urvasa822lt', + 'bc1pvlf3qmd0xls9r8gscwas93zzaadnc0yg3n3zgjz9xudcx9jp23ns9njf2c', + 'bc1p4cs99050n5u6gw609yxw3gk78xyaqxz9ryu8ght6mqjffy7987psr8rhws', + 'bc1ptcx02cr87p4mqqjs52ntkufk5779tk2jaay7vw6affn8s224c8xsy737da', + 'bc1pklzdssehpkeqr3yh0k27tc0fwjwlqmur754thmm7dnclw72v00es6dd6jx', + 'bc1pk2jpqll5ztcnqppqgyt6gm3l8pe422fqh9ewdgff46uu97eqykzqd766nu', + 'bc1pjfvg0l3x5tl62gq2xgwk63xsh8vq2k2lz8fup7pfv3f3chtuvraqephvzt', + 'bc1p4mlq6a9djjv55xqzaks5c956cznp0a60aqyqe88x5v7vag7hdk9q6wdkyx', + 'bc1partaf65t0yte9eupyumf7cm9nmk9s24t8s8dyk4kztr8fuxldcfsyu36ds', + 'bc1phk6uvrty6azzlldkvj7zws5naujxnr3anxs85md3snjh7uvx0t8qc6sjx8', + 'bc1p6avyxyxm5veyduqzz77cckl3u25xl8c7kwm780vfhlgl3a9qfxsqasx8c0', + 'bc1phlt7dy699flz7rqgvs9daltukxt8u6zyas6trdxj9e2ykkwjuzlse7crpv', + 'bc1pj9ar2uqyel6g6tjrvwpz4xxtn2903et4sue07mqdwyjuyl7hg5dqgq9xem', + 'bc1pv0zlwkhpju45ks83psy2jstph2qj38wgua4mwzpmyge0nrwdwjtq4er55p', + 'bc1pd7v0e037qhhfclqvhnnve08grna4znlxz4l0uk96rem7zs76xjlstjhcp8', + 'bc1pjhl7tvs2g5dwqgga025kxh8xgfyn5gfjkt3fn93g4zfz4euvpunsfylzp8', + 'bc1pwnj50yytwc6lx6xjyud2m76f3xeqqattn4e33m8ndzejqhyrl35sxad479', + 'bc1pmyxlsjecjp5m638ncarcwqg6qqua2y8hrh4acqne5xq56thydqsqg2t6mj', + 'bc1p9dmnpdga98cjvs0j8ghshyyjps23a20lkdepww7j0mrtwa7pyx5snqnx6d', + 'bc1pcswg83nmpdhv6sy49k7gl4uzk2ww7g5dsl7r7ks7hj9h3mxvgnkqu8rg4d', + 'bc1pdfn52ydmf9l83rzpmrna2srf6a9j9t6ylux9gcx8q5kyeuje8nhsngxrrd', + 'bc1pjdpmpdsza98d5zxwvafy8qxgmcju5dht70wxh28737vhtlygqhysr30m4a', + 'bc1p7z5t2hy32lpla9drwggmgvufkccnuwn3smx2xjchkxwh86enfj4qah5mtp', + 'bc1pnel9d6r9rgtqan8pksxp39eud839xz5h3n92aht5n5tcgxvlzzaqkdhsr9', + 'bc1pdzjyvhjvr0c6fl0r8rqmv4pqpu5v972sy9hkuwx470gu2k4m958svvp9p0', + 'bc1psgwupn0nx9fuwxr3yfcsd2juq45l4pthuqysfj69zw2y0ekva4xs9x9k8m', + 'bc1pct7e3u0ulu35qk60e7a6egsz4885wuq8cl3xgkfnu7z4zdvake9sla5jv3', + 'bc1p5568xmr2zds4z0w9wj9x0c07hy4zxq8ftgc233tgq9an34gxzwns4mdpyk', + 'bc1pgnthv3ax3fenuk7dy79wzhwt2e9f62vxle7nfvxwj90z09hvxa8su2cuzl', + 'bc1p3q0ssr4hjzx07s8x5wfucc4ndvwm42d2c29z74yp4dgqk8txxqass9mwze', + 'bc1pvsnjqq3at0kz03mhxdevyajpsp9lghy66flmmxlp3zcdrlshjhmq992h4d', + 'bc1pdjanmezrm7r3xezg90dq38c90gagr40g80q6tj5hfwe7lcya3kqq9k4xmv', + 'bc1pgn8pzk8np5mu3avumj5pkmfa9zx7kz5053xe57n420hws4cgtz6sp3vd6c', + 'bc1pw9enk88z0l0r70slprx2sl0p6hs9y5jhzxlxvwx9gsp6p9dqvp9qhkhevy', + 'bc1pdrgshmrme7vfwt6kazy5wa9vtymyw0gddxqch37aq4vm3axq9xsq40a03x', + 'bc1pm0tv5qzaqkdw26wfewtf48kze20kew0pkzsrcq0vqtstfxd20zysglfcmu', + 'bc1p93d8wg4zuqcqhyfjp2j52q87azuaqwj30h8zg0xuxtc6nwsv59lqkz3xsn', + 'bc1pk5n4k3qk7wpfkmhu9ph9u2vev3eh7k4fgkqs4seqt9gzvtjv2wtsdpqpgf', + 'bc1ptmk2ezsqxj3fwd3cryvf449j94tplr45mpun56uh9fahvnc2ta9qy5j4m4', + 'bc1pmypc043jn6kx7dumj5nsqz6ua8ftlt8lghqs3e3zcwplqxkrz3msrht94u', + 'bc1pxwfpvr5lqkyeul4df5x78ygrzvefp3z5pwjgf9r4ua8w7n9gc3ws90qyy3', + 'bc1pzg3qggtls64cuj69sjxfzfsgajyw2t8s54tpxg56p3zvtweerxrq68qnau', + 'bc1pqhycnukevj67rxct7wdcfuuxn8c700tuvu0pxruspvy5xumvayvq4udfv9', + 'bc1pwg68709ef0tjxkhl9vrj8tg6c4xdxl2sp62tlzazanvr730raylsvyysm8', + 'bc1ppnmrn3tke4tpj7fhhqer9q26wazctefdnyz4jly04mjatxvp3easya89qk', + 'bc1pvuty5mccd5cxx5s28cf40x799w6y0j4586ny83tzwzhc9j7l9lcswkfcrq', + 'bc1p6m76w9grx7ea6d6fas6ee9jkqcmuq8k4qtd4d25llzk67hyp6mkqpfvmzc', + 'bc1pv96wnrc8gyurl2zcavdfw6302rs3vp7me7j0pm0dk2vjhxaux49s8pkqrq', + 'bc1pkr7x7vv8v6nluhafymuuqr9qn2n28ykwtdd58xjx5469pv0f6q4sna0mpn', + 'bc1p50apxaw3g0l5xwv7jcrttjdvgtfywsy5x9rnd9pfhhyveuxak5gq8067nd', + 'bc1pxtfdfmsm488k84mnsahlnr74sag5x4wfp0mhcp0k6z3rcg2h95ns68sdn5', + 'bc1ps7ymmeg5x35ytna9jhsn7743dm7xj0ng49u3ag8ypxcqh6u5kzhscjwxz4', + 'bc1pjqd4gzzas7tarjh0fa8kje7s77w86nsy2dc39wjt7pn3lzwey44sxund5r', + 'bc1pw8z09e6hydz65jgenzzy60rf5ectafu2jks8zmkwzvvx3e4zva2qeusqh2', + 'bc1pyfwwyd8hqz8nmc6a7h9rudgphl9nlj08c7zf0lhu9ugy98v8ke9q8vunaw', + 'bc1p456z2mkn56fhgqml5c7qf75savg3cw8drhu33pferu8e5sr7jwsstwfy99', + 'bc1pcfmgtr3ksgh4g0s9q3lks3ksuedxw4zezdgru8ewfjptlsagxc4syygeq7', + 'bc1pdr637zkxea549qqns9x8t7w20he8uvs9ct6vtpcre3zysnlplass2ymvyd', + 'bc1pcdq2mykq9zfa9kcjej8hylzv478vuzn2dclw58zh6y8d0qmmfqms8knxs7', + 'bc1prt2c9z07ew4s4yv33634n2xhj8p7hdvlr2w37ur39jxlc07en0jsj6t5tu', + 'bc1p6p8cvmq4axs23v23hjk7hf44e484enzq4n5ggw5xqezt4arknk6s8vytx4', + 'bc1pv7hmph2e4yekx76ssnu89rdqkyy2n3zm98n086y9km2cjg46xgys72wfsy', + 'bc1pw6hje92e5faqk09fwdftu0pmqma5yw9w5qwcdfhd7qcc9phuqrasu4q70c', + 'bc1ppkw58em656s9mys5dh3gaz8ftde0cvej99vawxkegrh9vmcy93hqukaf2h', + 'bc1pyt254tvjql9rm56l3auv2z8kp59p7y2gctrr6c7z9ud7gegkhmjss729uz', + 'bc1pkkrjr7lr7q6pntmts3ugn9antr008yvzcky3ljq5r9mhq49t0z4sxur2v7', + 'bc1p7w90pjkd8z9zehljhk6vhlu94ljjr5d7aypzuy7hajun4wyesvvqan764v', + 'bc1pyqmj095km9a7xs2ec7fsfkn9vhrlpf98zdjmgv9p5fpwlwe5tr3sc5hau3', + 'bc1phefwpn4u6qt3ezgz9hwfu8uc5q8a8rcceqh8d0us56u6qwwam9yqzv3uy7', + 'bc1p55cvl9hwzeske4358nv34vu36pknm2y79aqsp0td5slm5g0lnp4qyjfrya', + 'bc1pxmewawekvks063fyccynvc395vf295mlxesz0ezglmct9rrh3dtslxgy3h', + 'bc1pn8d5lp47xs77kghpn9hpsmma0stsgfyyfy69d42rfh8ysvxv3t9qf003hq', + 'bc1pmzg9lhpp0l5gxn2nuffthlex7whrmyyknww667j3f6ynuej4pl4q3ev6uk', + 'bc1pnln4agkc7vsfjr27qq3vkha302hyr7x60w3e0l8ny9cdzxfjgz8qz5zv83', + 'bc1p2uyt30dh8qcpxjmqnskga9z2qeyd2wxkakn95225q2y0f52jdtqs2y6jue', + 'bc1pxmpk8enp99vuv4y8h4tuhgz95wvumslmw6tnndqxatujyaya5kcqmslg2c', + 'bc1pvkdmxtfww74jnu4g5fzjzx3kl9jjzwslk568kzm8lddzu5tft78sacp9d5', + 'bc1pmpzhac06pjnt25ppddpr6kf9mqnwyzd73fjqscv7s7l9rnqulswqu40t3e', + 'bc1p7q0wxwnztndmpnflpk6kclea8vlg6nu8e4qh2yyv7usft5e7c3hqzcrq0z', + 'bc1pv7f2hfppwakhlg8lwepzrk0pvjhmxznss5xza9a6zcamxl4yevnqg50h6x', + 'bc1purcvcd0r6se2yczpujynk2rs7t54qusc05alajgnc9wq6jf2nevqrpacz5', + 'bc1pl66rxulws8t4qrfeguge4lrwgfn03mkv6qm89l49wh49mjsm5n7s0ggpsy', + 'bc1pyqux85p4tlzfk0tmpr4fkjzsu3a2krw48p2d4n2k6zxlwgzjdm7sskg0wq', + 'bc1pzuem09ng928hxqu08yzg6al9pd0v0xj30c0rzlpvrugekv37rzgqrmuhqm', + 'bc1pjlqfr8r84k63kyccuusstgr2dchp2xycx8fqgdsjpmv730cktxeqnqj46v', + 'bc1pyltna3zmna7lxssjwj9er87aeur9h4hwdzuy6xcaqlem9xat43rq62rvjy', + 'bc1pt2jpdt7wf8ewz4xfltu6e47074mvh0l63me6az0wqjsle7g9jtgsyx7xtq', + 'bc1p7cre3w0frf495twarkhxnh8ehd3mmetw5xz4rq7kgeshxx20t3ns977l69', + 'bc1p0ujtq7wzsjr90qauy9lj8n9znas25ljwzwgj6a6gl3a6ganyuwxqrj5ql4', + 'bc1pcjj47zw95agrdmp872ahmlyaz3xladxw7sxpvef4uuww70v8h8es89ry5z', + 'bc1phadrah86el2qcjw8tc5cagfsms734ekn776jupqktxg0v9cx6v3q64lfp4', + 'bc1pqdpqwzayx44w7eaccv77mjne2rq3ranxevrmngue6nqdjmxlgtqsx03p6v', + 'bc1pgwwrtgvfrxlt6clt3c0ee6k33ea4n0wymt5mvkc3thn2dktmuysqvrc00t', + 'bc1p53fw6ph8jnt0hy88jla4y7p6kanm40lmhye5vnpz9pchjzn5euvs56t7a4', + 'bc1ptec6k6l6czn46dztnl9t558433ykp95uvjxqv7xygddm0m9s7sgsj70sp0', + 'bc1prpfv43tscty66hd37wgdpzvzprhw74wnzvwn6aejtf9hpe4rnhvqthgzy2', + 'bc1p9722ffaktwfwuamjn9vk5w4u3p98n0a9m77nyaayk4gplydpjmxqstwwqt', + 'bc1pta6gjwdqj9vnpa7ppuz4trhhw7twkd90sfjwhl2lf4lrjf0wzz0s4txtuj', + 'bc1pkuqcq2v98rdfmyl7zwgqh6h8y476d4epuw8pjdqtxs2zke0znjxq4z6da8', + 'bc1ptrvxjkvy08jw0vx3fnhqgxpk5dmkam00wg95g98grq5hzmtmrxgqp34ccw', + 'bc1pzs8gqdq9qs63nn4wkmq5j60mce4t34k3p3v6vvknauhk4ft0nhtqfmv8fg', + 'bc1p0pdu3k8ws0harv0juhy2jjvtk6jp8sgcr35qk02fkyv3uk0lx66qxt9gzc', + 'bc1pp3vxpr8qx5tvelg9mxplr6xwg8zt2gwyf2q7x7phuucp3gndxyps3utrch', + 'bc1pm5m9xy6elk29zhq6yk5rg3y9p0ez4kcqqqqjq86zqvtwhqks37ssx2wzm9', + 'bc1pl4qz06xdtuxr7eprt5wfe4dy4mwt5c9zency9ztqant5ljhk2djq3226jj', + 'bc1p35844gytp45nqep42mm5v7zppzt8wem6k0a5dxt4sqear3qzu2xs4g47sd', + 'bc1pnxquplar6z4jkavtrjncdvzjxwww7hqtsfle42tjkhsp2gy78r6s7lfdxz', + 'bc1plrqf302svkhtahv0srf9wk49shjauv4j76vtrxn7we7c32pyae6swafaux', + 'bc1pykpcds82th74a29yj0dw3xsje76jgznpj05xe8xw9uu9ef8ed6tq08xlgt', + 'bc1pwj2w5p2tlm3f0s7vx5wsvp0zpdv5cj60hnjppwndtl7j24jan3js8ar04u', + 'bc1pmnqv7rna0tdhfkdprlw5qnfpmkr37mety34ypsqkz4gzdj2ah5rqsf03s8', + 'bc1pdm3x8zc06xh3k0hr9dsv2a7dwjre3jmwme0rufvyeqk8cq6q5grqmrcjuf', + 'bc1pmer9etlmke5vlrzvhxsu0qacud7eccrjjfmz5qcd2qpdqwe39als9xf2pm', + 'bc1pptup5ckan0udmudfjcxqxsgfsu3w0x34zmskwjrldwx59r6f4ezsuf5rmn', + 'bc1pgp5p9253sc84e6cygxkrdaresnqxjs4u5nnxqdxgs7smqehv93csmp8stj', + 'bc1p7ahh239eashzpg8xzzegfmf4j58ayw6hdencaahfp9umev53fwsqs6rz3n', + 'bc1pedqhlupg9mlcudynj2fkv7044tncxxkm64ehd864qw8g8cecqujqwg0f82', + 'bc1p09hvm8fa2akew8af2hlk38hw4x7ks6uwa8x4yactz4wm4vev3yzsjamsy0', + 'bc1pknl08nq9f38nxge252we550x4w0ls5z0ycuwrnx9h9hfses4mg9qtmsx73', + 'bc1pc7c2t63rdk0wmacalukxlgqz7cqqqrqg4dh2knfgrna6llwx8vts76wykr', + 'bc1pxmtc5j3nhpj74vyka7we6ktjmg4pl20eel7r79k2qd9sgw3suw3skw56wy', + 'bc1phkefjd7h57g847waz6uvuuk0mm2uqs949qaz3ut3xpzq80apv4tscf0x6e', + 'bc1pe853kyf7ywpg5zptrzce03quqlp8lfgmzz56v9vy7dy4dpyupy6se2sl42', + 'bc1pv78v5k4vw2fjwnpprcfvk9400mqmj7k9dfmfuadzmzrg3ep89rvskwcqsm', + 'bc1ph95yy0wxg4udcykgfuw8leuz0gcrgc9gx6qehwphttvxd2r4znfqt7gu5r', + 'bc1pfhpspeuvqc0zrcq0u4ev4090uucdf9fn2cskwg0jc2n8cy28x8jqqyd7w7', + 'bc1psva4eghz3tds8fcs97kkcmmq5khnugswevgz5u5rk65zed6qjjgq5rchu3', + 'bc1puggdcecxkv564xl7pr70yhfc593ee0fzpwl73tvaq2punef47h3qaz7qel', + 'bc1p2vdx7qqqxf439sv8jlfhvkpjzh6lp5u0pkl63h53uy3zw4lq39qsrfx00p', + 'bc1pazxgmxnjrgpphq46zl8m4n26aqqhkdaa53glwxyhc737zlufvuzqr6xsev', + 'bc1p7lvcnrxdejfewxnej3aen3spqn5whffghswypyjj46axy4v3p2aqgud5yj', + 'bc1pdxusx39aqur5nzxplp4vq9z3dd3sewxf6ndaxusf53wjlwka3ckqz47wtn', + 'bc1p7mw26yzzt2fkh8qmwsd4ch0qd6mgycfsf9fctpfjkycugdcnempqcsu9mk', + 'bc1pzhjwldh0zdwv4x0emtac8uzrukt336d78uxg05vj86f768helfzq68ugqt', + 'bc1p2tuusv3f4p39svm4kztcnfk49hll5r8mj3t02ur55cwzgrzxq8ps22r78q', + 'bc1pl2nk6k0p3wkzudam5a7kfztkujkwkc3057zs9dqqklgwrfcjusvqyqscg8', + 'bc1ps5gsyfmnh8f5ppt5j3n6y3whnfvu7j0xh30u29l86en5znqct4cs9umus4', + 'bc1pnqtww8cuyh4ul0h2p5jgj9krpdpnkfawl8r7ynr0s2kcqfk6snaswyxu2z', + 'bc1p5chfnk48yzgwh0sg9yu5ndlq9uqwyhndhdac5gsxrwma5vhe4u8q7rgqnw', + 'bc1pslrnaanl8fxuvhkpk4624ft99dtgqq2kw6t4pew4cafjzfsr9y2q0t7ggr', + 'bc1p7ymstluquql4u73cgvwwcm440lqllptuhnye5kqeytvwvc89nwcswmxnya', + 'bc1p006ts6egely05j6rmcplaqcs5203e6lwr3vjsearsr5sq6l48w2se42gyk', + 'bc1ptemfk6p36l62p79t9mqnfp9dtx5e5ycawlwpfl9wf9k09cxc8fgq9hsfk4', + 'bc1pka2aj2ttex06drf3ggr00szlfq0k559v32q8xxvnul92py3ewjzqqzxmkz', + 'bc1p0kf69gwq8slrt50djsklur7dgp2fupnn43gquwnqmq2n5tf94x2scnmnhv', + 'bc1p2h2602h694e93z4ry7dtw5zh67pwyt9ggxcd30dcxjrnhtt7fu2s4andkv', + 'bc1pj6zxnlvec5yevrtqzyf4na32qyvpk2yv794wdqnwmwuunl9lhznsv2mgwp', + 'bc1p023q0jxn3w4fq2e3rvcf04y98g9zlyjzh2xmc87zqm9jk37mamss30dzsu', + 'bc1pwte4mzjau7mkx9cce0y2mnh96jek3td5trrshrq2552z20qkh42smrs2u4', + 'bc1pc3trzh6eeq6g58nz2348z00rwkm46fkyy9zutjp9yyzn6lzl7tms5hwhn0', + 'bc1ppell44x7l9xa44uet445n3h57n5980lv2qkw9z9yhtqmuzpy4lrsdy5vsm', + 'bc1pzc2yqafpr44vfdpgjrajgtp4nrtnunr5tw26xz023e265fpt7kas38h0w9', + 'bc1pzxvfnehv2yx6qy8m2f5g46usyenne5wnnlmg654pytfxcndzxncq46arez', + 'bc1pd2heygclga0c5cxegjqzsm60yl6qc9fs954sup0kzg3c36n7qgaszuuzgv', + 'bc1pnnsn8kytj8cja6h2u6rd0j95ww66ekhudhnktthtr7rglu9rycpq4c6x95', + 'bc1pnltpy437yfpg00g6u89gqn8r9qhdq709cnvgdqn9glmd6pt4z89sr488kd', + 'bc1pfqnwqn8vklzsyakkqsvyhgwcqd7c5rgjt3zljgjznrqdqsjxrl9q4w57rx', + 'bc1pjceax8p2aw7s8wsacwsz89j4qcgtuknq3rfl2pp6r0s6ce8v5e2q8snl8f', + 'bc1pkwmwdm07e5kqw0r3dn3m0u76h6a6ljkcsuypzt0jg9cvxwrx58xqatgcna', + 'bc1pr3gx99gd55zkzpx2y8taxd8yradew032jsqs4364pjv3g5xjd2kss3ae8k', + 'bc1pty3smgaamcsqsw57cjyvrg3j50ztcfcsa7mvc57ncf9cpp9watwqfnrz77', + 'bc1pv6zu6nke5na6zt44pv7e423aqfsddhhwjdhdz70kn9ngsgssfc8strp5wp', + 'bc1pjhqs0za0903p5l5l5ux4d3qpzgcej7lgmj7zufywh0dxgsdnzwlqqqmvg2', + 'bc1pn4mu0rvr7ugaj23qyyxcj9kj4ms6xcq8kz777etpdsu52mrza33qca9f9k', + 'bc1ps35dgqsfdnp92t3sczth54rjdet8r4jd3rm6f2ud8uzfflmd8kvsgc0xl0', + 'bc1ppk84a87jmu772myp0th6ydrq34972hujsdmjv653pmx9fxxfazmsz953n6', + 'bc1pru2aewv0u0g6w87xwf2kmq2sev0rx08zgpypgwraccwt8knv8e6s3vae2h', + 'bc1pgkh7nfe2l5543pk7r2c0cd82yp4qnkxla7sj9eyr6l2ysf7xv99qnq3nc3', + 'bc1ptg5e4af7d6dyswmykj9pfedgcrhv8mpnrlmxn5gw8fepusyn3ehsmxr0a3', + 'bc1pdx8sralug9qjzhpkdeum42dk86zq6vqtyqexetay0gk8dewzu2kq36vefz', + 'bc1pv65ll6h79ye2vc9cxtk0u0dm93v5n3gezsrn3grga3kkhut6e8hqegpvp7', + 'bc1pf3wcczcntfchcr36mp87fx46cltdaa5yg5hnxqx0ln2jnre8rryqkg4t56', + 'bc1pgqt93ptsw9xlgf4xqr4k6wtjfsztam6jsg9ad8mt7l0v3ny7enzq97hcl5', + 'bc1p5mr8cwtjwfyaldxsrpqml4a4jrq2ss6x98yraf2d3hqcu3c7rldq6e05hl', + 'bc1p2w87kftxjtxdfwul2rtjmr66sw9mdhas467pxkah6y3cwynscmvsa79v5m', + 'bc1pj609cy58du63dag06ljdf5z4k9wtpdv95cwxkasf4fwtatj4ymqqtlh5qg', + 'bc1pgmn70wn2n8t2zkgr857mm3zaf7yqjnuv076v53neum6299zkqevsy5ujfr', + 'bc1p84kxy08fqe3nqqcjqxya7zc59wwe8h92uehwj5c6698dugax9ptsw72r3l', + 'bc1pp3ng2vlsh447grrjt0acdvqdj2wcs5uw4x9kyzymq5ua6xtgmpmq7yly6u', + 'bc1pfkx52ptkcj774jendnw6ssdqh86vypy6zmryx4zptglz8gs2wmkseqx6h8', + 'bc1pxntyh9rj2jk22s8329gyzyu4zhcg9j04se467mz2llrgzkhmxfcsnw03qg', + 'bc1py3aw4rzkru6cv9u4xj99gufufauj0ezhsvwcj6rzw6s66tlm7r6s8gy8un', + 'bc1p7qltt278dvgee0rmdmjyfljullgw4ptz3rq7wp2sfcuwkvqujjssswm4zp', + 'bc1pd8n52vc6lf5sdza6p2979pdtu7adnhkgnmvu8ae6ux26l9zekwqs980lra', + 'bc1pmrsu0cevtdwtg2luvkfj6ej4jflxc37umd9265w2mqp5dwtfcsesphdrdd', + 'bc1p5587pmv6c7gtc7vtfycy2cjnu22ppe2yzgdl30mkpn8x4k6xwt5stcgy5c', + 'bc1p0xmse5e4rq0juxw9ahz4ne9v4p80t84lue46a7u4t9lczjympx2qlj87yf', + 'bc1p3hjvwxxwkkh5dwn2sc8zqv9qgl0xre5hj7fvfpfaecl6as2ww86q84294j', + 'bc1pcgqu6yxtw27405p2z8kk9adwsykzz954ujf0flym0j95mwvspphqrdklma', + 'bc1p2e7zf373kkkmgp3t7texdwegfmk2wg9v0827dq87zp0dhdaug4rq9knjay', + 'bc1pa5fp7uz4ysg260vvz74n7yghe4505wgyzedut6z3r4ajhyplfl2qumg3nt', + 'bc1pjkaxgevap4w9p65qzvwjx5kahz0p3mngepzpg9wzdte4a3mt4t5sxe88tf', + 'bc1pnfzv9m40kwmzux4pxljmd54qkxteguy9lkdgywda8j4pfssj4h8sm44v5k', + 'bc1p5rfevzz6jret4gsx9l2u8f3e8w7n35zdw6tdntyewh7wfkvcnensyfr7fj', + 'bc1pm2pkgxq8frdtxz9zng74p73s84plt5wf5udcsf5p3qykgukc9stqwdcczl', + 'bc1pr7uxu6f2rxt0a42yr7vre6lzqt6w07jepk73csmg8sdr75rqpj5smypzw6', + 'bc1ps7qzv9ul8602vp7yfnu9dr6457mg0pkl4d7emdjhg65c6kz56fqs2ej36v', + 'bc1pft3qp9vv8d65f6hy66p5ur5suse357fj4z00us98f6ajuxpy5v2qpsx089', + 'bc1padnp5u5x36tzv8kyw6ckn5wgmd0thuc7mst4w3my734963m0p3wsp93xq4', + 'bc1pvcwmlllxqckewlttez7872xev5pl63ce4rh34gn0elfqaljv868s0v30dc', + 'bc1phvs456kmfctdhv6hygr2hresfgw8ufcmmtd03ye40gzex26tz8zqq3z7tl', + 'bc1p0rh2uu7200x72gu2f5fn65aacxv758wsexjaggsxjygf3aws83gqrndqkc', + 'bc1pdjn7qd4t8p28y3d0j8wcv5akqjyg3wu5q3690k0ppp7pkh4dn7ps8rj7tq', + 'bc1pheny7amc6xsfgl42gqgxqvymypc98tu0gyfag468va93mcv0z4cqlyrrv6', + 'bc1pq4q8p4chxxpcyhnrkjetqn3dvhmwu4g788stgwwa6mfc4a2xsndsj02yu2', + 'bc1p677ldgt8c65lt8l7wl0e6qpz3zfd6j3vgv6xgztydlmduqq6zeuqnga9sh', + 'bc1pa0d6rkmuztq2le7ntd92mlag0z6etpxknq9fspzvw2kprytp43kq6zfnq7', + 'bc1pftxezv5qul52xtamym0dxqxdqwwgv5acqah3qflqh6el2zh92wss96wtrq', + 'bc1pssh09fsw250r8xmew2m6jy0zlfffratfag48p07xchw0vacsv4gsyzf4ed', + 'bc1p0qjzprtgp8tglswh7675u8vjtr6f9rqcazeac9yhxs6qzq50hv9q7pkkay', + 'bc1p649auvxunfqezjudxk7pydrnnne3ttnxllj6wkjjfukp32gxcf6sagqwce', + 'bc1ppzv6ejd9lc8rjvhl4kkz0jfhf595hzg9ly02sgcyj5htt9ukp0uqgxk3a5', + 'bc1pvhypjvsqjygjqdpgz3smw7jjgk46dyahafcpe8qnrlu6eep535ls8a4h8x', + 'bc1pjnyltm96gl89ragzuefm7n9zm6p8z8z0mw5w7gxnpa3038gacq8s2xjc25', + 'bc1p4uvt00mjws7g08rs8f3gk4hx28cztjvwze6p0c4sy5kvs892663sk609z4', + 'bc1pa7tkhwqe0e8766w67uydljgyz9scd3g7xy7xu7uhqy9zw8ufv4kqrdjyk0', + 'bc1ps7ncgkr4g8s7x5u9crur2h4k78uk6n9u0mwqjx4ka8d6djdyckascyvc25', + 'bc1pmy040qeut2fkvy9f3xlkumm7jky3awqhecvg66er5hec90q0l9vqqw6aj0', + 'bc1papcprqhhuf48e5x0s79z6pqpe76hq0yke0j7h99z9cfqw2muatxqxekclu', + 'bc1pf590pl0sja0ln4fsed5sd72f5mdq34lhlh0cjrnwu7saj2m7g6dqxcx87z', + 'bc1pzsqfk6g9e0w5hwhv3m0zak5rxcee28zu9ugz20cp03dtxazv5mzsmqq5w3', + 'bc1p7ga309ntxpv8rwnwz896q6acqwmhkhrxzwxy8kxhdad2puusznjsyfyzmk', + 'bc1pmxqls5gd0kn4p309rt48en4ledl9gcukpudy8cxuu20zkxmk0x7sywpgpj', + 'bc1pa6t73jr5wv9jvl7c89r3dtckqvcqkhtgce4t5gft8v2s4j26k5uqxg047n', + 'bc1pcd28epmqjhlve7lpsgezqxdz7fh4c3mwlr0t9hwvn5xk0vdhdqsqa5f45a', + 'bc1pafyvuf4kxem3u9ezjjt3jqj8j5muzswxhzugfflp6wrgl6mtaa4s7z5584', + 'bc1p4ylw8jvmgtesv8439p3ahhk9x6hduqz92ar9ej6d5ult3gvsndgsgpvjng', + 'bc1pkw085s98j3wsqfsk6ghl9e0ckzxlhahhu37az9j6qrk53755ujrsc90nva', + 'bc1pswxs924q5t24yvvemauja7dvwlduz0nutkq6eu0ug9ptm74kcyys4hrwpe', + 'bc1px8ghvnmj7lg79nw7tler4wxqgl5txfvq7nehpdjt07t7daf0vv0qk30jwu', + 'bc1pjaxy2l8mesfr57myj8q4ajl2s3x9f3rl5e0ktvy94mmynyg39waqqjw9zg', + 'bc1pvglnyqz9vawt74f5jvqx49f84pe37kny8kg78t6dfq9kyl9f5j7sfhywsz', + 'bc1prr8qa2eu5kkahlvrwau02cnjn3h3hptp0p37cj8vrek6682ugxaq3c27dq', + 'bc1p5egps97lezt7e0kdmt99nghdrmt3p2hm5um57yedqd4l9k733pusq9xu0g', + 'bc1p9sjgeztelm32rnk24pfw9yw0zjtrphfwgks2hxg5mlzp5q6djp8q8kvuvr', + 'bc1phzd3v76lgv2dhu89jc03rj4zjuaze38pq0tcy75vk8t2cj8ee55qx8je94', + 'bc1phesu76383cx57eg80z65lr94w8h063aq8yvz5wxeqpvn9vglugesvc5p5j', + 'bc1p8x4ntdgql5s4clsvwh04hhmj7njxdzthtf3xtdhtpgffsvkfhw8q7e0lrp', + 'bc1pr364ek9mh6tzvh4nvhe735ja6php05wkmlelq700n4cukwx75lhsazk2tu', + 'bc1pu0f8s69xv2wqyj82wszt8mzpftqk6hyysfd9dlnkv8zcqj2xeclsj0cy8l', + 'bc1pf9rdna4ug2e44u5x7q4qptm6vjxwn93nmu28xjf368rl6rhlzp5ssnw0d2', + 'bc1ppyrskaf06dxmcw4zedsj349zsfrr9fe7ck9pvdd4cvyv7ntjp9wqwxxjeq', + 'bc1pd4g6wem0tg98fz28v49u3dqzg4k8fhg8e3s7x60p9xzlmljqhklskvhe9q', + 'bc1pgkkdrvudn6v9wsqwz9fevqaq2we2c7qhcj8wcjrwjdrcmvsz03cqcl39c5', + 'bc1p557acdhw8qxajg7q2gmkmaf7yd9lns8wq3r3ywxpnwf66mgkjycqgamhv0', + 'bc1pzul2k7an8q8vzmn3w3jsl4gxw9yqveeenkuwcdjtucs64n8je6ds8aak3t', + 'bc1pkn63h5utrwle45mmllkl8avnnptfh9ef53qkn62022gt63ywvu4qlg65ph', + 'bc1p5ulg5wqcljrlyank5jh6w7x8hmmhdrg9v6l3m5a8gmmwh60g20pq3j307j', + 'bc1p2pvdsaq0zq5rnlm7pnqerg3yw6ajq7nuxal396j90kjh66xzwyhs6ed9u7', + 'bc1p32p4pknra7wz76rgkdxpyacsektkqm4ygfs369wsnalucsyhxe7ql058ul', + 'bc1pfz7cwvcvzpwly7ca35vc30ucxsm2p4ttyjn76anfv6u63y0ha6hqgw04q8', + 'bc1pqjlmmu2afwy9f7xfpl7ytnqvg0ksest8tzq805d82ht0rwckgmgsg2qr0c', + 'bc1px3dpv5vzp6xj5vcyuyqz9r96fnas0acmrl35wwu0u2fygu3fl94skm4dgp', + 'bc1p237ev25rm50jkyps56avcw49u7elp70vec36g2l4gl7mejt38j2sufemfd', + 'bc1py9jr3qjquuq720wqgkvuuczepxdlj0dvurpmzgum8vm3u5ufdhqqla85z9', + 'bc1pe9gecc828v90rf5n7dm4tcv7jtqjq5d0e8xqeea7whxauq2sldussq0zsl', + 'bc1p3enrsfqzsfy2p3yk6eyclmhdnsu3n4ju8dwrtjg9wcmr76wukj0qutfz66', + 'bc1pguz2pad7nn878n3cf58fq0t6n35zaw72ngfwkut8m4uahpsqfa7snxaymh', + 'bc1phngst8thnxvxf4njjpghp3y22386a8n9mlkgnjr3xdwzkyayutgsdfejx4', + 'bc1plkffql6wn2083672g8klwnqccczh7u5fr3h9e8ja5hkz4wg70rcq64cgh4', + 'bc1pwc9cz4zqvl8e08ej3mjhr65stazpln56yc70m76r26p9yaq42nesedrpdm', + 'bc1plnkgg629wa7atrd0h9u9m6q7ql2h82fpuz79akwys82mltma027qcpvhuw', + 'bc1pq4wgrsjdjef8cwlxd63zhexsdc83w03fyg7545uhs6yth2rgmr6q3qxwu8', + 'bc1pttln6sz2ayqexcjafdxyn58nyfatlcp0d0jnmckl8sv2avwfrxnsc5wvjn', + 'bc1pq84e0k0g25zheellpdtssrgmffusz08u34hw8trvcw5jsz3y8r7q4fcl6e', + 'bc1ph3nj7ag4wv485qqerzz72d0qe0xh42rxv6cn8pnmmtn8xk72hyfq8rvku3', + 'bc1pw9y8pn32ys3pxqk8ewgca74q64j0gwhnx3943ewna5v0dtzcmqmqadjxtw', + 'bc1p6fs4zfw3394trqar8qy5f669zdmeyd9nqpkgfwz0g9wh5tznjawsmhhweu', + 'bc1pqw4gnhs980ap3lq6dupucxsx0qhdu94zqxy4m3crtcm7sqrjc4tqjrcuuy', + 'bc1p95kmunznuh823utarhkas08wh9zsqw5ceshz3qtqrprfyn5znrkst744zy', + 'bc1ppernct4gxuyy0zaxkxnprc5x5h33zjylep4ayss47p2f4qrqjd3swutn4p', + 'bc1p2aj30zrmmrevs0zy0wuhfjupwtpasntfauvke63rvxcaptndknfqarenpj', + 'bc1pzfufj5hl3rukn02ztsq4gp7ftz4ndn9uxvvgy62fyvhgvfjeeuwqnhgcth', + 'bc1pngfunc2vyjkgpkgwqkqww6pz85zhv6cw6rlj8sw28v27d8lfg3xqqp5tvh', + 'bc1pz3affd66r2wreg24n5qjhzjff6vd9yyhrkpgsz79lkjpgu3g053sjeuzgj', + 'bc1padm32p3vxdhpek5633wy2t5t5dsylhzg93k8jlqjpapvr54klmssjh56df', + 'bc1ptuth4ehdz5nw8umy64qf83qn9536y0ccjmdny90aeup948lsw4wqx6tdyr', + 'bc1pqf7p9g4n09as897qs6wmpy5c02tm6xkzkpp3jwzf7eq7camy837s4tx4hw', + 'bc1p2h9lspkjg0x9ue5rnfh2qxp8z5mq78wl3034llpdwmr8mz3wa4hspyhc47', + 'bc1p396tp04mq99q89s2v2e0jsk97k5mhlpgm0g9tv4cezk72futn7vq8jqtnw', + 'bc1pk4xqgyzyumlt577gv3n7pamzg9e9xphe4n4lsp8c8lzg3t4rhapqje5nvg', + 'bc1p5tv8f3hd9jcexnrsrtuf9yxmshtqv2jpj4kdma4kcr5qlredcyrqyucmuz', + 'bc1p4tju5509klfx9jgkdqausaj6z9j8twfdg45w0rg7k4snqul8whss67r49t', + 'bc1ph4759dznfnfm9wra5hctvspqvwt6khmv4mhevz2mr7kx420uychsra970m', + 'bc1p9v63tz5adj2g0ppglenangyfjczqjwfrv3256sey8kra4v3cvg6qlpuhrc', + 'bc1per0p84pul3sjwhs5frmq5rh4xtlv6ty9g4jcgfyr5hrgqdfuqy3snfq95f', + 'bc1p780rzaana8jj0cd6uupyhghewat2e6pthrjaxlkfw5uepkgn28kqrdp4kq', + 'bc1p2kjltr4fp845aeepl359mp7vs47j6s9a9xk8ffvfux98p2tnkv3s7drtfs', + 'bc1pnt4avjw59hkq94dpnkrp7qm0mykmhg7v94wccuu6an0znw4xa0gsmlfdxm', + 'bc1pmkln4xl8zj383umglpcv4ua40gugsthycwj2tfjtaftuydstvwtqghk8qa', + 'bc1pd428qspvaqmtffr4au9ddan9yhuj5exsp6jt503g249zccsns4fqymlnm6', + 'bc1pkafkf6s0l4yyx8p3csk9ujuguev9chcj3hx6pznqj5tqxtmw4s7stf0svc', + 'bc1pm6s7mnu00xc8afuxpxx0l0t9vlc328e44lejda53wwuw5pfzy7vqp9caqq', + 'bc1pq2cv5h8efj0q3w6j3lcp7anl0hsaywjjrsansyhmmw08pl8tn38qu73alv', + 'bc1pjryhher7fpq05dq0f9dwngswqmpavnazl35rvkg032evmseeu44q8vrx40', + 'bc1pfeluypk5qwnfyr7evhlltey0yw7zsjz244sdw63teshdthgrmwsq8v2zhk', + 'bc1pgdp667s8lyv46smdnvhj4skux5nkmnx2a242kyxfawagatj2ln4qhuzhsr', + 'bc1pzep05tpvqud2pnpyky6sha6y6r2pnexwwlwxnuetetymnsvtzqsshkhsjs', + 'bc1pyh0ryrvzek2s7wpz6g6f4hh0paahacxmhdgcl5hqqrzmrwa6xk6qnw23nv', + 'bc1p46z6hx65cl0kgexe8322ta3wj7n6d4vz2v3qkr3cl0t7kw2v3j7qyqa6qk', + 'bc1p2ds3vnuy0ytw2u3k5e2scwe7yrnfa28ajctpd2erl7gje09dgxsqs3n864', + 'bc1p00fpem8c4q9kfpezqdrdl573ap28gveh2s4d3d63lvzf9jjq8xcqulml0a', + 'bc1p3n38e98v05tku798y3ekmlqf7q8huhllhzj5manfdf4ksgzrhkzqu34rkv', + 'bc1pedhen8gq2gf3jt7gyn9f8zq2f66jxl9y83achg92zjulvvaqvhnsw2qyv2', + 'bc1pze63tq5pf7tmnre227tn84yeqm2fplc6fhqhalu4vtxadlmq3fkqw02r5u', + 'bc1p7xnqsp85qqcyk6cmnnaq6qfvythl8j8jwh8a326dn5g5jr83wvhsnretgk', + 'bc1pny33wz79myncm6gcxr4wgnkn637xmqejqh9n6d4w4yv85en3u77qqjpd6e', + 'bc1prvluvnph4v36wuye62vejplhpu8nkyjv438d8naw4jztplvzw4dsxuf783', + 'bc1pe2efk6v84njvss25x5hagrsphsdvj0r9uygkxke0yfls345t2j4qvxwkxx', + 'bc1pq8ruxhh9u8exdk0w5z6zz2jtdf94kwpkweenmn6ygzxqg2vljpnqhvf6wg', + 'bc1pvfmx8mur82k9fx7q6hmgsmntukf8qvh0wtd8y750me9a95g8lqsq0ksu5l', + 'bc1pxkrm0j956yu5l5tljamx559jhfaxk7c630tdy9tlnfgevuwp670swy2d7m', + 'bc1pzc0rpmqyclkeqwks7wewq9afnykvupgtfquw4gutj6uday45yjdsc9r4uu', + 'bc1p6p4gvfcrlh44j93mhamduuzvyr7ezyg0fd5p6q3drg6qnnn4adxsnkjmye', + 'bc1p2hme44vjq2e4fxv38u7gv2fvtcgt3ja6y6k9g0usp0lzsjs5jtds7t7taw', + 'bc1pum78ujgtj6884sx2q3ye47nssd9lfznexfu5lxtkeax46tnklq2s8xrkzm', + 'bc1p7frxq4c2g5swzhelcx3xdfdkgxqnaaz5xaqs3q83h4gl40fwlx4q9umlyc', + 'bc1pg39jm8gzjyhmcyyw00lqfs0u83c7grp8zsdsttjwemdjz6mmnm7qud3wyg', + 'bc1pe2nhcmm9pvcqfudep2t9n54wzzhnplnsxp0jxxka789e27p3582s6pfht8', + 'bc1pgae3tyweaa5qd5czshxm2yh3v25q4t3fj030hh2pl64mxs6fwl6q6xt3gx', + 'bc1ps94nyps7tjjt3r2dvpxkxsds7lc6zg50wdpgkxu352pw7svfcy0q0n8ff6', + 'bc1pftvcfatnjs0reqd7ht8q45flzf2tjn22hcgn65hu3x2y5wh0txdslxz9xf', + 'bc1pxn7nht46qk79gu64f72ljkc0nusw8y6790fpecpespe67mv35l2sd0x305', + 'bc1pwtxvjty24zjsmtucuzxl2g8djtyt0u84kkhvmncdara97sxc0gys077yft', + 'bc1p9pt50nc8ujhy9gxysskrvk8j5gky3nyxpycxlr2n6v707dh0fk3ssyxhjh', + 'bc1p989mxkms82ztlwtlwuhrgcglxump3yhltqf4hy6kwg2qeg8ys8vq6klg79', + 'bc1p4cl8f32l5vmz2na30k2hxdx8djg2lcw9elxz2k45s8rws5jj35lslhhnqy', + 'bc1p9mg7dhctae22csxk5j0uy434x7jxueuq87ppcs5npsaa3kcm5a0sete8hr', + 'bc1pklqa0rwwdqce0wa5wn7l3lvslguu8suffv0wjxj6kx4c33n6uqxszgvepr', + 'bc1pxll06yfq3mwl6hz0h6fp6wsfcv4xwytte5zlgjgsvpq0jzz5hmpqlnlk5d', + 'bc1pc8js2p28282gvjw8vwpq0ps7w04pdjvx57mags29udamw73hrqls35dq9l', + 'bc1pph37e27k3ssm737fedlpsra794n5p29q7au98vxc6ntm6al0h40q83anah', + 'bc1ppx4yt0ukn8rpu8synzhzwcrvv9tcn0xc2cuaznvx2k80rk58merq4wq8mj', + 'bc1p2e3yjpjsm50vnv47hn5j4fepvfxcl0ha0ljvdlpzm2ze6sh963qstz3sqq', + 'bc1px3j0yvkh7qy6p5g86fqdu0jmk9cy3lrcvzxf28sp3uhg5a28juds4fvw8n', + 'bc1p6yala2kf77c3urre69ln3n7mdrv2udptty2gfc5yzzfytmcnkhqstm2uh2', + 'bc1pezpglnkd2dg63huk9ahhu4j0asp6z53lqgwwlp5030dqxf5ahvhqzysl9y', + 'bc1pf8ruje87k3rwu8y99qdzuw34yscjdc8n9cte5tnv3au9wy8wwkvqxwau88', + 'bc1p37hyq62wl7vzltpclk8r6qaeypxxgv0qf4jr7fl4l5qnt3unnmjqg7f940', + 'bc1p9q5xkax96hwtcn8le80fx3eyacja8k6xslxg80r7phfhsyvps23qx0cfuk', + 'bc1p2989qq2t4k5zvsnr688d9mma5d2v5xf3jdy2wgd2vahx68qe0m3sxs4xm8', + 'bc1pvjk3rxpjen2z7fn638ngfh0mdv29ud7wdgvptp4njya54dunmesqz3sup2', + 'bc1p8lm2y73lvr7dgtng228xx74hc38st73amygvk6cg238mx7n5x0wsrpd4pn', + 'bc1prf53z94halzgc29cgzpvwy2t3svdrytq4fyjgydk5tn77rayxmms2qq8q8', + 'bc1pkngwflk3kk3yktwz7y63s32pmrjn5ndsynn3nzd2ry0vp39xpppqleyur5', + 'bc1pyhgklu8uejlxn20n6ffkwqgsqp3u5rny7x9tppf2dhdafgeavwgsksn30v', + 'bc1pq6skvxwphwny4xte236wgqgpnzstgclvqxk4k9z4hgt6j9eqxfesdzza5v', + 'bc1p24atc2kptgdk73mgphv22lww2r3m462c0pte94u3ledzvy25s6xs23tlg9', + 'bc1p0tqynxkrku2akram3jp8fyv7kz0d8e26jugc9f3gjyppt36yvwzs8jruaa', + 'bc1pyxnqmfklufkm8mrcurmjvs748pfqz2lvt94ad877u3txyexjfkwsuqu0st', + 'bc1p0h2lygmz5yt6n859hr3lrk27jc2vtrgrrmxjwhk69zrmdchdqt9qwa7qt8', + 'bc1p9yn95mzfvzyes3cehfaxs9ax3wru2whrfp26tufa7yz4rsdpz4tsp9dq9u', + 'bc1pde9hxaf32tds6qqhaxrhpxn53gycchgzhf2gzgzhvvkk7jsr0xaqn3a9j3', + 'bc1p0yqnuv554vvfsvy3k909dprsepzu0jjes7k6dshvsvh0afrpuhfshd2r9r', + 'bc1pag3c8pp3t66jdfdcscx2zvj7gc3chc0l788ldsaw28hx262hexuquv2j28', + 'bc1pe9gn85dpv08ak06y3h0rctwh5tqj5x6xzesm8zfjqq7uuyyrhu9s24hezd', + 'bc1papxmk5kvp4frp5s6tnplc5zpunq476tzav87jxq6xgp6skvspkzs9adpra', + 'bc1ps5v7huguavr6y039fpcgqc3j7qkzdwmuqkucde37fw04ppmer3dq4957cg', + 'bc1pk4kasrnvzqk75e8p974lmuqm0dpg0cc8lx05cpf6yuf5p8yv800sg27e90', + 'bc1pe7zkzmzgv30r7amnc7tr8r9rjzvhgraf39j559evz7nkvqh8ht6qgjfj7j', + 'bc1p8tpj3g3ds3drp5daeg783j2tjpew8pdz98gnpmee6uj6l8ukf40qlpsvua', + 'bc1p2edvuq7493tvjeyrf3s3qyvakxsqfurvl6xzuazh4hnld908k93ssa96zm', + 'bc1p85eweta5rr34xj3kj77hkacgvhksf6k7mv09v76220jzezjr3yxsdl5ugp', + 'bc1pfqw4dze3k9spju3v4yxxv65t7fe09tta4jgfh0t9h02fjq0cxg0qmzrfqu', + 'bc1plafg3vaap0ulvl2r2mtaz97220sxelzd5mn87gsc9vf5m508lq3sz9vx8s', + 'bc1pl8c08aqsx90kzczkvwyu84gke59692ttk4ghh77sp9cpmynlmqhs0j423a', + 'bc1p0v3a8mc0yytwt26zxyjjscvw3apy56tra7hd0vhdrnuggy5pxgaqspf88d', + 'bc1p927pm4zl7t2qqrh77dmyl2vpesx0gm50ll7u26rp0nle4y8g3tcqn4ecuy', + 'bc1pnwu72ud69pleph0mcjqht0ckt57wkzqrn6n4yd3ltkkc9rpujj0qgswzhr', + 'bc1px3w3hyhlaxdlwacmzxlsdmaqymzqamcgwrzsslvr7jv62s9x8cwsf3umca', + 'bc1pavzq4xs02kqndgxhtw5e2h0sge85nqx2djgp92sd68fhsm0n09sq675553', + 'bc1pszzqthpe9zgws95580sp7uxylrdycq9p6ynxuuph8qvgjtuq6hdsqdgyqs', + 'bc1pddcp6s2z04n4dduljl25qrw8w9s7wy0k4zyp4r63uggc95z0jz9qhurtaw', + 'bc1phnsnnk2red4m46r5d8q7rxjj5asas8a24whc6ksm9zryk66czvus77m7v7', + 'bc1p6qlp254a34haw4yfgg9knqmulctamnldn5mv9r9lupc2e27prpeqmcd78u', + 'bc1pet3xftasta80uwvt366fz5py4ranhpq4zjnsrtacw67mtjzcn3kqw3msml', + 'bc1p26j6m2z3588th0u33as6a4gy9undawswga8405hq23ak2y6mz6eqhnrdpg', + 'bc1pk2cl9d5qz4zpw3fxtcpjqdgecg9s7du9gvj8ygfnnawcn3pmrvuqvjd9v7', + 'bc1pe7yh9y8z0u7t3hxds2ege2uhe3lwtz50mj6fuqn0yv97xazyer4qwva8f4', + 'bc1pujnqpa0auf9p0granvy477gu7y4tcwt2scrayzshgnr0lxx5ddes70hgj3', + 'bc1pr0k9wnm78qrhy9zxjxxm7tywv8xc72dqp9jz2gsz0cgtyj20rmkqctwr7g', + 'bc1ptmv4xztjcnlzh9y8fns79784zwjctxqfum8zwygmukd2qywsfvxq3vm9ly', + 'bc1passv8s0jsh5rwfrkmtpq9mxdfxng9vaguz0vf9nx0rg2u3w2xxxqht25d7', + 'bc1pcx4rgvxdv4alt36n6430aqxa4nqq5gjtmlfeqaehs4q65fg5yn0qp4lfg4', + 'bc1p9xp2nz48r5qul435w8ezh5pc2teqhkgunwtlu5wqffjqgde7vvrsjeusec', + 'bc1pf5ajz80htn2xawhz0urw9phz478yrk6fu274gt5gwlg8st03uglqpua3gk', + 'bc1pslhqk09v6l7g9gxlzu7sk7gdjwstf90k9ga80dgpe7cs0lt8ftksghavfs', + 'bc1ppw0pqsnzct3ydrcya0zffap5pzd8arappv5c76yddkg4g9z98flqllc9dp', + 'bc1p57lm9wgtvrqvqpmsl42gd7fuj7a880z905srj87sh4kex8pmmv8qskrn8n', + 'bc1pcfmkzd92jkgn5ccq58rvxgclnhwznul7spl3xyj07242jexv4ggqp7dxu6', + 'bc1pyd5vqy48fc2dkqd9gwpmqh32pvz4rpem99unzvzqghlzj06403eqkgmnrw', + 'bc1pwk34avuw0eezncy3vpx42asffe49466peushvw2ume28p55rfykq8cca5n', + 'bc1pnj9k9lxufc2wand8qmpq93xyclajgpmmtlcdxxrrwwv0dlejj82q2tz708', + 'bc1prkuk46zha0tynl4ye8wunpr4z077wfr79gn7wlf7repuj4k2segqgskxy2', + 'bc1p43elyt4xu6675uqgg90knlqsatl2efwe8rxctdpd7vyu0nmx2wsqy5kn4v', + 'bc1pudep5uxq94f33uuma0kcglyfm9uhzl0v324ajdgvd2p4250ja5hqra6c94', + 'bc1pwwx2gdpnglxz5g55jc43zjv8gw5wj0gl8jmudmzezwlmr5eknfmqxhewqv', + 'bc1pftkxdl9r0p58z2gtr3qrm2zalsy55skfupwlxpnagwcdk8a69k4syl7q0z', + 'bc1pcp9df4pzu9286kulz90dd7rvjqsp7j96n8d99avcv6y6d52tpkgs9dssnw', + 'bc1pa0cmdxw6wpyt74wl70mwx8xvmnguch7vxlt765c9zv9fphrrntsq8l58ze', + 'bc1pkh59u05ayelaau7ed7vhnttd8ne8k490eynxgn6mlzzl8qe74s6sy6hf9j', + 'bc1prtsvk869ppkyezjr5gfh0md5rd4f67uapv8jkyfwfsfzeh9ue47qe4hdxs', + 'bc1psnfhufxkagpzf5wxuf0uph9ewfj3v6e7dst6m69rjuzj6jkge05qu9fgj3', + 'bc1ps8u2rqyz7hmvlwlp4pltut0wx3yfs0nfljsgsetdwe9aw6mwrgqsy98c34', + 'bc1pqll3wtcqghpt4kwdkq2su8xecrt0k2a7khwsvgzh76pwfmpcav9swsculg', + 'bc1p6znqe43w23psy9ph6u3c5qay9f046h67mm3e6fnd09pq9hxvpwlq7p5p2s', + 'bc1pvhsfaq4rfw2lrr56rjr5hm6fkpekurs89lh2xtuetm7fyjx9nm9qzxvnwp', + 'bc1p6ah9jk8f646j9dugguryg9c32asvjdwk72erkfe6avnxkzfkn2jsrsgym9', + 'bc1p873jgpcamw4jm3zulshfw3x6vc5hxpzv6twgrnjf6k97lef2ax7q77qsut', + 'bc1p92yzefhg4zhtgg6ja4xtz9rmjnl0d2v26880y4ca0qu9p2kq7uaq92tync', + 'bc1pnh4uwlmqp56wvrg45ff83dlu09aev70trm9znrkzsc4rnwaprstqh0c8xk', + 'bc1pjtmkcudjaey6pve3qps8htpss6epmlf3xa53xx085gj25plezqrskgejky', + 'bc1pl9kqpnnaswvwhdxyvwpszwlqyhsfvtsnhfqwvmdd0mm8rzw805lqmu2zuc', + 'bc1pp7e5hgwh2vl52zmtsg2szvp0ls6wp6673du2qrmh3fy25u25qw9s400mfg', + 'bc1py80nuvk2m4xns6xg5l0k2wdtg7hath6lghcrupcahr8knlyr6daqljsrqd', + 'bc1pmqepnfttfrjfzrgg8expazwlnhq8z5velc4yfketswy8x70qpvkswkzxvc', + 'bc1pfh24d0aej2sxlck7saq4e446dkd8lnmqlltpp9d5tp5klaqpfzeqjqhyw0', + 'bc1pf8aw2ktm7wqyt0pw3gfv83rvj9gsg4k59ug6zxsqhj24crhsg20sjws8sk', + 'bc1pn7964f7usyktfl9l5nglv4zl99892ecureesftprzetdlcnqxl9sy95lc9', + 'bc1p6zs0wsd622avlh4r63tllma9j9sjc3ggealwjh3axa9gxe0s5snqdgqx7w', + 'bc1p93qdxz7t7na9ttvx4qrfd068znpftq9yp8w2487zp49rym92c9dqz8ppvr', + 'bc1p7drwu6ahwg8lxtfumyry39e2kysam6fk5l44xff6d6h39uh86w6skqtgy5', + 'bc1pm6n64jew63cm9fxvkn65aynw2l27khp0s8s8eqxl647zqje82t6sv0csp0', + 'bc1pcyftl5v96ap8w24x8c5ew7csggafvwufuvwgxn5hax6pvceamdas0gm2k3', + 'bc1p5rxhyx93jjzllkg5694uqhfdmz9ulmzcx9ly0tndq74qdlw6m60sft9ak0', + 'bc1p9yyplz4tsytkv548jxcqphntj7n2dyl9fzlxrcnngmzl6j4txvhs4whjwe', + 'bc1pfnqw4k4ecpe9w4n3rdgp9stuqaln95vf8ymwwema3h77e2p3fhgqf08zcz', + 'bc1pg4p4kxs84y39nlwsmxn3kd97g06wy63zdmngq9kceqpdctn8v3cqc00ddr', + 'bc1pk3cct9032h204zpqu3cywc8mak9pscys9hgkcqywhkw2js0jdw4saydwxv', + 'bc1p5dqqeq8mmdydadn5cmw8cr4vphlj4wfphcew7rhkcdyqrlxx7uzqxrsxf6', + 'bc1pku0da7v2ngkpmsxlhgku4m2gh2kfnp596y2ura0j4mf5a0xfs82qpfqnmy', + 'bc1pn9muhfua9s62rcswgfvnuvlkqn56hhxuu6yxqc40c7ktamr5tp8syc478k', + 'bc1ppg6yaewsrtpecmw3l8ayjhlxdygkflwuqmhl6sdrprrzqmtuafks5rn4wl', + 'bc1pcfe83gn6sdlmlv5tggeq60zw5pe0j0puaxrdsemsw3wtcck9myqqsjvjkx', + 'bc1puuquc4zzusldlmf5sd0ym6hhyh8a6zqufxf8qu2dxsyqlqa7zstssm88dq', + 'bc1p9vgpwl6pssk50vcfcys36f8yq7rllc007pg9xulvmyn5686qghhqhczsqr', + 'bc1pewyp27d8td020sq5f6gcepszsqz69zre3894fymst4rfawudr7fsa2h8au', + 'bc1p2vlx46mxmzeep743p7n6584ywjq8agpy9mvg5z5gsq26ch306wxs84rxkx', + 'bc1p453r94wgvd4qydu5ayqtaxujdqj6xzlfqupm0cwhpv00cs69v3zq76xldm', + 'bc1pvtdjphcexuuhyjwzgdfq73hed6dhd8xwa04rtq9gl7zxtaej6syqlq5320', + 'bc1pmspq2ref5mt3lxlzwgq7e088cwju2y9yj8260t7g8k0y80lzln5qwqke6t', + 'bc1pm8uzu7ffl6hazddrjz2wq6ns8dtzdexngpj4wd2sqlme8t0jvrgqau2x3e', + 'bc1przd2rhcnewnscngzxsxp5yz5p9k88hlknyl29k7vgq2djq49a7ms8q23xh', + 'bc1puelp7em5krt64c54ay7q4r5z0wg5p39uf50y669elykder235fxsxq3yfu', + 'bc1peje8rnywzmca66p577prd93z7uwrz70wuesjxa8m8aqrngp4kxpqf3ef45', + 'bc1pxg6t8qy309y8ehkzp87xlwf76c7ue7u2u9qzw4c7ghsu6t4h26hq248k6h', + 'bc1phu9zk846z64ysn8u9lfkx9pzf6na6nq8uycd03rmjs6434z2ndesyfrvpw', + 'bc1prwc6zc70spq3n3sjqtkx8we58dcg4lcxghwlch6muz0tsjnsd69swry2tz', + 'bc1p6tdu7nkaxhuee8n7zv6j9jtmv56mdd8a6fa57p72f36ltqp0dp3qe6dzwu', + 'bc1pqq5m5nc938xdacw3msdva4hx45vmamgzjfrpz42nyg5lrlsq99nqtsklph', + 'bc1p6uzm2e837zyqwe2awg0dpvsfa4akk0xehcdq70c94xqfaqhe9j4sz3kjk7', + 'bc1pj3xa6mfqv4krrfl0vmyf9zjvhpcsphtauvllv5e0unrnqseke56qz7kt69', + 'bc1pzllsl9d36pff8cq5klfnhn3p2vhl80mhwg5u8cql60dldfj9gr7q7selqz', + 'bc1pr9muzns9lafvyxl5qa2xse5ydgpcvjxxqjd8tewelgaa3v5fufhstsuqer', + 'bc1p0huwn4v8dsp959d3u5te8t6d992cy3uwwkj365els6qn7tudl8lsfqxg7l', + 'bc1p7n5rmt74nz2h870em276w48rcv7t7kgs6lxrajdcv93p6h6pwpuqhxuy85', + 'bc1ptkfcymqjd5ehw2t3trz6etu9rvcn0rryarkx6dwqy3s575x6twjswarwj8', + 'bc1pqnezmvet0l0ef3aan8cf3nampn72ah9qjn9da5a5qw4ljrlxjmpstes3h5', + 'bc1ptrl567f60nswqf7s6mz2vs5swj7c85zzys49xl505elll2rpszzskkmeqv', + 'bc1pu0wufndhwk2xa9vs5hesxj0dqknl37zzpuu766dgp3waxvwspqxs6f9hq0', + 'bc1puswt8zcdmg7zysajyxff4w2wwkzh8wtlcwgamuvhnyawr9lv40zskwxgh5', + 'bc1pl672vsqzvq6n52r8ltqp3yysmlwyh3tqgkpssyef89es3ts2ny9sfavpuj', + 'bc1p53d9ren0ytuh65gpkzn5mdq6fqye33k5daf09t46e7q538payx6s6emfxd', + 'bc1pywezkydczan6evpqsv2p76xy3y0z9hukjp4truf7glcv97gv6zssg02l2s', + 'bc1paf56ayvszfw98qx0e7xc0l8ygzuwt8qwnm0m23gps5efprvxgzjqdt5n6k', + 'bc1pnswdwtwwts3fglgmk45t8lmgvt5780hgjdff488cuukjnrua4tespj6t8w', + 'bc1p9rjdnmppms4j4g720zl65y6459qknqyqnh4whczdv5aauuuxh2jqwtlc9k', + 'bc1pfwf2hfylprwxxeeazauq896pa0cap38xtjcpxl29s9mpmzsg8xcq6h73sx', + 'bc1pd6s7cp4c6zdxzslk4exquyf8xujhuv8rm505fut70kf7z8vrwn4qmnd2eh', + 'bc1pepm4h223es4xs4h6w55f7ydeccm2kerx4mgffvhml8x836lmljusxd4maj', + 'bc1plmnedpm8fs8asevrwl03wx8sstsr9krk7dvvt9qy2ryyrhktudnslcdre9', + 'bc1pg7ntrvvr93shrn7lncnzz8fja38kk7fqq398mcww8dsq8ngyph4sc4gdyh', + 'bc1putp83u3saqptzxlvmfs2ldr2v3k7w5h6cpr0780n6shg0uyef3nqe64lyk', + 'bc1phkpad7qh45qv5fxpt479d5hs575jryq4u8jasqdmndmpnrgs922sh79e9f', + 'bc1pdpunm0rwr50yerfres8hu2hlrk7d3cqnteyuuyrkwhjs7aahv52qfmq3ed', + 'bc1pqnfak3zeqd44dycstxzs9wj2tf9ec9d3v8l5z4ref59gmzms7t7ss6cv5k', + 'bc1p46t72jvwknytr67d444jrjs4322z4z88rfmdt3aesqv0kmxrag9qa3ykmr', + 'bc1prqtx6dz3ujkhrh99vywlhc29m95w3jpyahvkyu3zrfgyhh53q66qsr65va', + 'bc1ppedswh5hn89ehpj2srcr05kcc0yskfwuzk8j5myc3mnt3qw0d7zsgwy8p6', + 'bc1prvcezqavsz8rymmez7mtyremsxwwvs9u2jkdzmnel0mp507tweyspd8luc', + 'bc1plce0nafqhx9apc7llnuu2lrflm5ezzvrxvxyph9g652ewtggm5nse8c04w', + 'bc1p36tjzzcwv3r79h4q559a3778fkddcsju3y87enqj0slx8zuh66vqf4d8jq', + 'bc1p2vh6pwdehq04rtm6e7gv7kckddj2mtqxekpmwajcw5nrxjqt888qnv46ta', + 'bc1p5sjstu4txplzjfqrrhjzfc6gudrdeh0fkpdgc5fvtdnwzemv5qesdrm3vf', + 'bc1pnv7ntcuqedexfa29shkktup82dmgycl6fhtuukm3ysepjfqp4qdqv80n8r', + 'bc1phr5z65p7lvu33rdc9a02mgdx3wnart8lavr60wf7n4s04qf9rwtqcatd7x', + 'bc1pv57tzfsrm0p68788e68d8wz0rahgqzscmw7zzc00u42fne70f65szuaxnt', + 'bc1pr9n3fgm2ar0t5gjpjt6u9dtw2dyvcpn8ax58fwry44yxdqpvscxsn8ejkc', + 'bc1pnqyytpdnfvakmr5nh6emcjnhqnxh9z94674k7z2y8zr05zrw8egqmk9fcm', + 'bc1pe3an2yh72wxva6m9gsf3ds7nm95mqsk4affc7xj9zue7m3zgwgmsfpsqxj', + 'bc1pv8unzcdqkpezavs4wpqwd8asypg9g389s724x0yn0unfhkx9g6psqhryjz', + 'bc1pm73ty6xd95xu96hjxetqmuydh8prk7e4daepg8w6n9t0uhnxez7qyfeye4', + 'bc1p9fyvcd5deqks7d0l6h38wzyglvlyhp6077f8rtzw95ut0g5gaussy2kj6m', + 'bc1p3rl6gauq9srgx9l39zy37vkfluvynfkdp7gtw3h5250h7tjnpfzslkzhwy', + 'bc1pe2dq05emu90krwshwdfnscr9mhtdc0ushxwdw2l9ntaxqzk5qy4slxm6fj', + 'bc1pngq7m0fmf7c54mccgcsxufqh7zszfqksd8ed55eh6mm050wak9lq2azyz4', + 'bc1pxjfk6knsqr75a9st7v6fkmve76jkufqz3hyrwyanauyqmlq5q7qs58p43c', + 'bc1pweqvl0eqzxmy7e3frktx8h9gefha7r733qptuku895lxrxl08kuq2s7jxn', + 'bc1pjtr5g90kh4793ajqq8dd27vrlvpf2j47p3xkaga5ryedcvpx5mwsyl3v79', + 'bc1pkn4rz05m4cfkw3mjhh9z43477868xdjrzz0dxjwkjrq565cdxx7sw2reag', + 'bc1ps3rdaf6g3hnqz347dw8ljk0z4y407tcdkk82e84eqrqdsjkesrlqdel9mw', + 'bc1peg094ja76hqj5d9y93rdgrls7uf29rrus3nrkyqqz4ms9ang638sdj32jh', + 'bc1pkfhwtr4rn6nyl7ct2yxxglq60qr0nusr2zm5t7kp98mu3w2uh3dqzvkjjn', + 'bc1pytd8ayd6fut06azy090e7g35xla9pcd2lkje202cm2p9h6g6sddqmt4ctd', + 'bc1punpttta0euqh529h6jcw9h3aszag7pf89kpf2mzw2t3pfcwa0zjqp66sjq', + 'bc1pk9kgvykk5l8409an8nk477g33gn4wawhwyup4smqf3ht0czedm6sqxyqkn', + 'bc1pu24tqazhmrgsv7w0kzm60v84cn0mvjfumltnvl5n5j7l85yxmmrs8rqa78', + 'bc1p8sduagt8hwnkc3sz8a3ss5vqe75sd7lp3r5ux6ywmlu0c08677jsp8xy5r', + 'bc1prmy5agjlp6glvr8eeh3rgkfzvfse9kcn5jw3lene256ht2dmqmxskxn47c', + 'bc1p9pfde9lpvptkxku9je3e59fle6jh3u03x68lg9tyrl4jkf7ve34qysmppz', + 'bc1pgjcqynw7u7s69y6384vxwl7t6u87xg4z4chm4mumncfr0xh0xp3shcsp0s', + 'bc1pljkmur34sez8y4asrk3w9v357vatvacspakgl2psdhhrg3zhehdsp3k5ge', + 'bc1pwfhvxgzkpcn4r6sl732spfy2ppfm7xds5j3cd7l093zx5n8j4j6scpwzn7', + 'bc1pf56cfl2fugk3rr8gn2v0w5qlhd98szwcrsays45ncgyzjhyyzp6sc3f6xr', + 'bc1pvzxfw0gtln544w5j9upl5usqyqxta2fcet88dd5658zvjgy9yucq6vccla', + 'bc1pkhjh99j6hh703a4d6k7zwdaqsj3kk0llquemq4qguhs5023384aqjyam3v', + 'bc1p3dtgk9yfkj83ru8yxan2mssd6ajn55z89y7a2wqpxwjxlm6yf6jqs2fxka', + 'bc1pwv4avw5n8r968ds7gar2prre6cng53nlzpyvcwp39sz8hz4qpcqqe29aj9', + 'bc1ptw7t4ahzwvun40p89j8vav880ky9trfp4c8pjvfgthqwrt6zem8sefnkce', + 'bc1pgfke95rd8tn7wg9f3nzjlwytschl8mqle26zjwn8lthvary57n2sw9shxt', + 'bc1p89c2yqhsdhgkpw463gvc7at6yxajj52av23exjsgykmhlwt3rpws6jdq50', + 'bc1p8sjqjturwayk6d88at3ypwcegzmjx0wyhwdsrttnrugh7t328pxq3x5gt9', + 'bc1pjpxvl3v0dfkjhhugjds3lnjg0j3g7kdwjjwke725jft3hhe8v8yqm00mnl', + 'bc1pvhde7d0h8h33mnhjj23vfjjr8l4kuu6xk3v2lmzj6532egsysqsqtdaqme', + 'bc1pnhd0pq7a26hsvhav0psdgqkk9we26cf3cdcmka270yxw0a4es54q33wa6e', + 'bc1phpu50k7rh0sdv2ezhuznkjrz6rzm6n4jt5lr9aezccs9uhqn9mfs9falq2', + 'bc1p4jq328ew2e0zptqgq9gza4tcyjg2hknvdxtsft5cxnayg6dsapsqwugnf7', + 'bc1p5l5xl460ezjnd0j9t7fpj9qdpl38hepuprgagt9fp3rj527tn5zq5r2jsv', + 'bc1p6n86rrjqvla82dypv75s29ndugev6mt0j0qwwhgkn9guw3zvvq9qz6phss', + 'bc1pt7pwq3en6na0g9n9d69ple2c0m6534fcwhh7nzd45m7qvztvl5mq6za46x', + 'bc1pg8ddz3lgdyzezlrrc0xv6ur2e5l94ymz3rqhzeq6v7wa7r0haqusgpvzqm', + 'bc1p4aq7du7juypnclpjush9wnr8y432zn4q4n0wx8sfhr6rx0pasacsaf8d6w', + 'bc1p3sggrqwl0d9kknq4lmlllcr3eq62rjp0r3je9acyx9xql07envyqntr8cy', + 'bc1p3may9yjw6lwm80mlfx7g9z8rxgyd09q40k7qnlkwhmzntjjk6lcs6hupym', + 'bc1pexjyhtc4gl5ngafr5pp9xya9q6h8x5kj386jld3vlemy7vjx834qf2lpws', + 'bc1pnlwlh2gd93g8smc3j2paaff3xdpxlqaqrym6ya77mflfkc3xs6dq0j572h', + 'bc1pntgtj3kk8yf9pq5qh30rvmn4zsfcjgzz29ch60pszt35df3jpgms9zyt5g', + 'bc1pwr93d94pfy02q9n6evc0d474fpjyz0se6fewf9le9sk2hzjgxknsvhpx9f', + 'bc1pvzzttfpzmwy7dpr4e5nv6uewrvv727mjhv4pzwv0kprq9xr60dvsv6kys9', + 'bc1pe39kat0zkgy89przhe2ff367v20276jtqal3g2jmyew7rfkzluas6uqs53', + 'bc1pg2f3h2vvs33t7fp2nf2ml9xpyxh98a0fc7mu889tvmwc678wjl8qmevpws', + 'bc1ps5e635jjfcme8ygylusqwfk48zf0552al376apmaqdvm3ekvyfps8zcthj', + 'bc1p9d94cj3s9f9pw7p80au6rqvpsvn7aafjgsz5tcwnlmh5lfca8rrsp2m0m8', + 'bc1p8v7qxmwt5vgz5tp2s9ay9en2sluj76fua4nzdjk2zlz5k3d087jszzvwat', + 'bc1pxqsvu5zzp87cvweqm4ukx38c4lcq6tsk6q02gvhe9d62clgx0znsgc8haj', + 'bc1pj6yhajkas7guvt2we6nmh89sqlnxkdxnhkrpnvk8acc89s6fjvfqz82px6', + 'bc1p0jrejp9fdujzw733vyxt6hs3q6q96yamu07nmvu84rakqutg380q3dlx0z', + 'bc1pa3dc5qjugg3y66fugahr3uydk9m2vv2sf34j9zhsk5e033zftmmsurr38f', + 'bc1pppffv2fgmryyrv3e2qs5x5dj95xaj478e2s95celpxf7twjyt6ksdlsx2v', + 'bc1plculyece6g7d2vvmgpm3d384uxlq65z4jd2sfsrvh7svwatjaxwsuj3gfu', + 'bc1pjmxynyrn2h3zd6t8mjskp5xfayrsnplmnvvutvl2pl8kxj5l25tqc3enkq', + 'bc1p2wcyqn4lcs58k38g6vhkm2rtefx9m9n2m2np76dtf6u83m3hlq6qstl0jz', + 'bc1ptkpw0zuy9207p4zvmwsdk3kyc5eafzl7ld7zna96z5syx9vhvhtqwvhpwa', + 'bc1p2kzdcaxdrvuz2grejk0ylkel387a5anr6xerqjf7e9us86u88kcq5ftk4a', + 'bc1pjtr0l29e2ghxduh0gh9jlj5v6uetp26666pmce299edevprpqjzqafahdp', + 'bc1p6uugyyp79dj5czgttrgq2fhavdtgr309skp0jejs4tnjnlxh8e2sek6pgw', + 'bc1pmarkag47jclzfgee3fes78m77u5mshgwn7h4adnay39k88mg7u4qth9ug6', + 'bc1pmdx3antnsmmlq7r9rufngtzwck94gqqml6st8nv0gmtj24u9dsjsevy8a0', + 'bc1ps89jfj65ephxq22kgnjsm4hufdxrf7eksam4kkku8r0gv2skztjq2ar9y9', + 'bc1pruzxxz84e3t6d2edrh24vd7av372v05t0aa30s36nnvq6p29rzrqeywjwl', + 'bc1p78dgz0mtzwxunvpen7a0ng2ey58z609v3fem5muvg7gdmqguay2qx77n6a', + 'bc1p05xcu6v7v84w235fvlpm2era3cljz3t0knyvzy932y6jv2hjse8sqt2l8h', + 'bc1pk6tj6tffsdw0ke3fllj6u8eafs6pwxd26em963ntewtdgx0mexksy6ds20', + 'bc1pqz2sduvdhqpuhk69g2w2u2uc5knwqza8hkyatfs5fg7nulek9j5svpn7gm', + 'bc1pd6q4dv5nmhcpx7ecnhljmu4h7szrxu9gqhanydjqwk792y8z2a0qj4l0gh', + 'bc1pv839nmpxvh7n4gemxeemhxagh62uuecwx0urvvex5n2d05txdq7sqvdjfk', + 'bc1p6865f9xtpe6ncjh8y9e76a03jj2s95rwy9503jd28tlksqspnruqun75df', + 'bc1p47cg4uhyaz74yhkk0ha0wjhr8xsfrjcm70fvewm4yezuexdaawmsnf4pzx', + 'bc1p29mx6h5p80fg623cknr33y6npnmw73ms6zdg89538hpdq7ng8utswa2lck', + 'bc1pg9jyr4ahpmvw7su4vsdypthglgk8j4c96gp0hrzymek89rytchyqpncx7u', + 'bc1pzzpkkfmjsf75zx0welvfhyru4xxvk5pucs0vrdlueyfc3mcjlq9sqcu9s2', + 'bc1paksx8j45dhtu5lgarsz57xhf0mnytxn9al0yqkjk3r584zdpcqxqqaeh7v', + 'bc1pvrw4x9ln7668c9przpkeg95lzysj9ukcdxa2v7yyz6rnpwjs9vlqhccyfx', + 'bc1p2hg0we6xefcfdt09sfwgxaqm2l2qhwj8wm5rsdrtujcwlzs9mncqtmf767', + 'bc1pus4a8nx4guuq6zvdja6gk2cv90ckjr793h6s27gyhwevsu9rsa4qhkwptw', + 'bc1p6lyxe04l73xwtch6wkwdpu0vgz8f40wle787qrnhyqsuya7t98dqwfp49x', + 'bc1p06xjlrmhlyhwpxwssax8pmxgewh2y44wrvqmyc8r34hxzp9rsu6sk6upa5', + 'bc1pt5ljexu5ucshrwvd7807nwealelhfj8gtjhv0tkh4xjsw3z7wk0szxc562', + 'bc1ptze5c73p8x6nhhsjuhvds6t3a3xm80048u7k4hxx2rn843dmw83s3tvdrj', + 'bc1pj37ufur8e2udymmrt8ee3m80lkm93umclnzyg9qcd9kaztv4r03qmarjd4', + 'bc1pj7edu2kahcy8prf3c935rrm3c748hlls45kk84yxae3khnl0e59q9ns6x0', + 'bc1pzmgvh97jg733aex4753mx0ah7tqqs93flfe70cdpyvg5hpq50slqtr6ght', + 'bc1p4havj4f9qxvxzd70e2wyz7rzlyfr0fnqk6d0yn4ks2yjrs970lsqy6pe70', + 'bc1p0ykpd0n0cyfggp83unsv55ypf27znra2tgtgljl3mzj8glfvsxcs2yql7m', + 'bc1pmqt4ur0y7sdqydr45mzpy2ll5e3xrqf4wrfal842cyw0rf4d747sk8thwn', + 'bc1pkguyvv43m34mgpph865d5mmesyfmzymmxqt9ex4ewyakh554uwgstalzud', + 'bc1pkewdy7ees4e7wkd7w5z98z02w6edf0rlnpmekdp37m3ttt6sqz4qgsj264', + 'bc1pem9ud098dxe8x6ytu8la78jkmdkkyhu3xcmvg8r7d7qkcks4v9xqsdusjx', + 'bc1py642vlh97zlgv8ezuukhfyfam3n4rpnf8gzazw304v4kvkjgx2tqedth2j', + 'bc1p57zkyepmlk4q8fuk5ghruhq6ha48lnnfl9celjetlfg0hyujf7lq9gu92k', + 'bc1pflfd44je7y2jj4dg67lzfvx892mcszxv9h0pp7z0majvkefc49xq9823yf', + 'bc1pdtynt40gzwqqm9cy04ksn80lxthxawhh2a3phsw6sqnzg8j7cmlssd6u5r', + 'bc1p4c2q70mljcwgyus8c0ht7knml84kskudqflug8mzdqcvevk8n69sscj42r', + 'bc1p65hx0xc2f4xp5mzyla050zqguw4p887eymu90z2pj6us4xpyhljqrq3ssf', + 'bc1phts9v7k9gr65nv7x6cznxums3kkrq0mtfx3ctqta3jx3saq9w9csmhe6hw', + 'bc1p9ue3hh9e8ulxvrs6utrfdfk4uq0expgg6kwp9p59fuz7hjdl0lrqvpjupg', + 'bc1pwdvlvlgglkmp08fhathyfdumkpy478a5r8qf6wgydaf943waskpqcnl5e0', + 'bc1pdlxw48hvh0f5axe3xq4h7aw0zc805u20q3lw0tcjmvvpsqrvx9lshplgk0', + 'bc1pc2p0uj2wy9vh5l9x2rg5x8g76dajxlvlm4pqkrs9hqlylrkagsjqyy3e02', + 'bc1p2f43d5xh0mr4d5vudrhyzxuv38k0nd99k34zvvepw2lxrxyftupqr44zly', + 'bc1pmpnvnece09efs5n6evzk0y8lajmuqyctygl6wqwmppujz7rx7xqqcs0l9q', + 'bc1pnk9849p9htufzskdcnn3teclmwntn60x79gvvgjhsgu8vcwghaasvcn87x', + 'bc1puyv3mtu8x5l59ujpxqvt3xr2geuhvtlmfveem2y3rnq8slrmkq0stg64uh', + 'bc1p0wnkhf2yzjk6r24urt3l75n94ead7k08ktudsvuuytx7amt2cz6slyh3r0', + 'bc1pwevlpl92ggut0ml4y0cr07qklk58726q44z64a7xgrrpelj20d9qk7cx4f', + 'bc1pzq2ekzwg49eu6sgkkp65sxhk0javl6586c9zssda0s9f0ea48y8qyyj00z', + 'bc1pdmtwu44chk30lsgj3z6qg4t72h6axsq9rlplppmp9yw06vs56p9q3t4frw', + 'bc1pp86cu4rxw7hlkla6v3289g3vjrcratukf3r8vekxfn74ywhqq0rqr4nkej', + 'bc1ps986ssqzvrj6ysh5rvva5cl8vad37hse2pgptd4a0txhlfu77jms956dlp', + 'bc1pkep6awfz623ufp8dn25jlnsx8283xs3l4rtj3aygzphmdpx0uags0ua4kn', + 'bc1puuyetydr8npfz7wq64u52kewlw37v7qc48sjaqtfhqedeyqn32mq2jcn37', + 'bc1p5f5ccca4qxscr6n6e5ef9cru65j744haegxejhshpcdeh82w759s7n5pq3', + 'bc1p99uf3ssxjkwmt4pmc28fmpf6kvqdnyl8zng5wvayk7gpsdy9h8wq7hwtqe', + 'bc1pp58akfkwn4n4e92ruwgp6s3n5mn6t3k86f8wytm3jz2ma8erqqes7xjltz', + 'bc1p96d78ym97vnmfg08u6r7tfp8uamef6cwy07apmkdf9asjrt9kalsgjs8uf', + 'bc1pqr0hapsrx8a9ua52la8xjjgv5spsuls0w3jqmjf5deaunxctwtfqhy0mx7', + 'bc1pyz9alfcct9ly90qtlz44hnnu7kx84aa7kaa3h6ufcv0n4kel5m8shl9j06', + 'bc1pc3yvcp45ewsftesep3g5z2vfzq7q2p35saqc055s6w36n5l89sas4syqru', + 'bc1pdjckvjuejmq5fv2x7dl9zg03qprxk6sfzz405l9l5f9qxuq5ftsqj2lmqc', + 'bc1ps7jychcgxgf4n7zeu4s6xzc34v5ydtls7cu2q879gy67e037uv7skm6f5w', + 'bc1pvmqms56ljkr5g0hhd22a34pa3552r8eycsk2wlawv0g0ke6zg4pqahga7p', + 'bc1ptrr30cptrntegm7tqfeuh0hcvszfngl5j8sxngw93cusrmk3hdlqkzmtq4', + 'bc1p2hrha5jm5d3f000tuhcf3aleum3m9xw484zyupj264l6gvqy257q2q9wmp', + 'bc1p7ks7gahnff2ze605lkfmat052vyeunv2579ac4xw34kjcxczx0nsh492ra', + 'bc1pekrfdkqp5ng5kht0974fe9sxr26xy03eegk6mft49a6lr4mzp6uqfc7zpu', + 'bc1pjppjxh2upduhx5y23ahufuc3pm8xycxudj30avuy2026883pt8fq5ue9ly', + 'bc1p8kjy8g8plvt9kdwvvx52z0vdpll0vatur70xdgj3ktcpkwjzk7nsc62zrh', + 'bc1psup5tdvss5cjhj8tpatkh8027u5z4yf2x3lgqva6fcreetvgvvkqfhu04v', + 'bc1prcwfjnfs5kytyzha5kkhl7kvjll6mkljuphra3tayxl4rp9kzncqsjthca', + 'bc1pn0t3gnppwvend3zyrpa9z6tfl0k3xtclg3dw863cxw88z64fhf6snftcp6', + 'bc1pe2jqyw0v2xp7fz3p9n7lmv43dczs6r3w2xy5p902k38maa4ketsqalrz0l', + 'bc1pufssugm0q83awnk73d8zspkwdjxew3axs7d5ej7aueuhyt7glwvscq4fls', + 'bc1pu0j6zsglmx60psfh9vcgpkzyf552stv2wwtzy5dsdf589nghmj3sv4u7wh', + 'bc1pr30wpw5qealzj33exwa7ey5p38msypp4tlw5vkhlmufcuqrd0wzsx4ay84', + 'bc1p0and0xyl7f72844aamdaehjx500p9xfu6gxvcxzvwc2dzu4ht44s9gsuar', + 'bc1p4td9y05qtp9rwy5fczfunph7utsmw2zl0waey7gfkyfddky4lles6yppay', + 'bc1pxdhx6vkgp7xjptgz29xj0xd6p7jgtlg04xf8pvsael0wtef4wqes7tegu6', + 'bc1ps2g50urtmkd473xc8mugqpmdlgzpsa224g7mjettzfe86qd6wnqs0zc0q7', + 'bc1pf43pqfuhsvk9k53jhmjgnrjmqevsdzj328etft358wzvyesxv7vqwjjuuj', + 'bc1pyk6y7lqxn94zzxy27rvelqzyfk3zqzacxkj6v6q6h6uxutus2muq9h6qy3', + 'bc1p7ngydy8tx6y8rrvseezja99aygmlpwuwsnshse5m9q4yfc9tx04qrynx3d', + 'bc1prkw6e2f8898lrxthx3pz8gny5x6q3yqgapty9almauswux84hteq04umz0', + 'bc1pj4mzxq84ljgjct4p8gwlwee3ku4a546hgvx7gqtegc8nutjurs0qdukeg9', + 'bc1ph76x8ejy77ep5mrgem6scsa6uk5uhnr2l3maqpqy95gf3s4qvy8qky6tat', + 'bc1pz3cql8sq5c6xdnrjmmca2vza4hsck6w0yqr8a6v29gezklvr3nrs3wnqkt', + 'bc1p2un7jha7f74kl2xysp959mqw46a56czy6pl8lfmfn0hzyavrlcesldqk36', + 'bc1pvlp2j2qpde6sezdap3vjxgdwyf8g542tqjlz2n477m6j0fagw0fsgsyft7', + 'bc1pnurgc90v686mlpqucgj4er8vx5c0wcu32ye8p0n0dsrsyxnysz5q7zsuw7', + 'bc1pfsept3yj6p2gfgf3azxg682kj77xpzj26uegsk0cc0j9fku5ynzq82493p', + 'bc1psu0qgleefylnw70hldsv76nckx0vnu6km8zd3gkqxeaycnkjamqsqet0ly', + 'bc1pt6glq4ppk7kpdgpch879zl7pswfykfc3epyyhfclxwp80skh4e7qvjnzn0', + 'bc1pr0eafs9m6qhg37cw4zey5xkekxqrwnt82aykfsyt7ucj93gndtysrzpae5', + 'bc1pctkw3zjsfswgzesx5lhnhp2zgqxg5tq5tnreggvme6lzdd3leq0qf2fft9', + 'bc1pzu4pmf2fsjz2ye847wqnt0s4rke58dfljewaxyltywm7u84uxt6qnevvcq', + 'bc1prj5jdcxppln79jxa0qxfm9wyv79r8uq3n0lluluusdw3203fp84snutzch', + 'bc1pskh7en4vrwg3acwmynasxcafyrfneqgantw6uhzvqsp8gw0hzy2s68l8lq', + 'bc1p42tyhgt8wx9h36mj87zgqpcqec2ljssjswn23ppuum8fnqk67e7q96k0te', + 'bc1pts9mhymmfg03z77jxszuy05dgd3ewkc2q08233e37393vtpes63skqexyd', + 'bc1pf4azn4r8sys8f47dae9246jhcxk7vgphexuyzhdfssjm0dtgwx9qpyfa0a', + 'bc1p30cwlw3juh28q36ap372gzh5eu7gs6c8fp4clzetm6knate5wrsqdeewrr', + 'bc1pmx8ekj9l42pucm69cmqkweuy2eknqw589prvgh08ytegdsq28udsllrhxc', + 'bc1p4qfnsg6namru0u5ujep876xke0vmlk3fgfp345m9qawtvn6c9llq324kwn', + 'bc1ppzujgd9etgpjnv05ewyvmsagyndz4zv2ycyhump33p7f06kudneqr73se9', + 'bc1pm33wmkzptfvjjlw5lar0wlqwvdvsy2r8f8azhgn0jzpq98eg3juqk77uut', + 'bc1pyd2r09jhdxv4netdph6jqqujr7w4v4n7zgpwx93sy93ukprrea2qscyyqq', + 'bc1p7emt8scx0d35gwtljwmu9smvgp8emr233rhvsk394rhaj2ueqrksuugfu8', + 'bc1petwkycr7dnykm3fjxfh7536cge4z0vta0hw2x78q3w22uf2dwg3s84q6e2', + 'bc1pnvv5sma90uvdu8e8p59e4s8ypz357dgh000t8q0p757dzkq78fkqc729pu', + 'bc1pvt6sgr3elrmwmlrvjjh3lwaxdrvuj7x2vppp9ufky78hjf302fsqmvjm0l', + 'bc1p85jrw6jrehgl63832mmxs03jh0lyg7hfl0024dcxknuwpgseklcq57wmnt', + 'bc1p87976l0zsalgps9ec675fa7fvhmw4fl9pf3ehnafupkqaa06tzvsxvsu3y', + 'bc1pc05kx76dcvhdktdhvnju2vhvrntqd70fp3hypzmf70efpq5mut6q8fk7t9', + 'bc1ptjf5a96e63jhzhcw958curm2n0udfftfjmlp2yf6z5f8nsqeaqss4lh3nk', + 'bc1pvl6c3yn9678a254wldsc9nhvaw2yxv0t5z5vpjrhfk5ygj78pgtsarlc93', + 'bc1pvcpt87rsyuwtd8z8eg3tx7xxmcq9tnyx6jkzw7pd9ar3cej792psameppg', + 'bc1p8mxm808dtxwd6v73lvm8mqc8jk9k2lvr4m50hx3kg43930kmfavs2xl4tc', + 'bc1p2afv7a30scmxan000k03984hwxzf9x6uv7wmkfxhl7q6f8tgyzgq33gytk', + 'bc1pg5k336s542nea9gkyc842e6n4n5gss02n3wmak8c60z3r85zhdyql9xacp', + 'bc1pladlfl0ja762uxuwf9cyvka84kxwtr657pys8hyhpd375w8acdjs5gajta', + 'bc1pv44elx479rcpr3zw3wm329qancwvmj9see6npmgkhp0f5yvrwzvqsx04gv', + 'bc1p50ec64v5wvc7dqtzlmmam08pygwlq6hyaeuvkdwwsveehx7s98cqt5m5h4', + 'bc1ptucezmwjuueug46sx9l4wf7hmuxw4g8xla2294z49lfrnzr70g9qpvzmh5', + 'bc1plkukg2vwu3kvj2gxh8szeewzhhmk30yecq302d2c7wrpsdjkwfwqxnj640', + 'bc1psxtf7cw34jktxdt5g5hydt87fns4p7x3qs8st8qmsnvjgg0gyehqd35km8', + 'bc1p4gwg274fns4g67g5h8lzc5qypvh2quyngjed9lfrjymyet78f9mqpsdh47', + 'bc1p07lkg59wtl5f67yvlycan7nv4gga67pq9gsljdzvasfhs6u02n2qxmgl09', + 'bc1pd939e48v8cgzefx533axv9d7vzadm94yh8f93e99fk7m8cdcg5hsf4vp7d', + 'bc1pr0ssrgstd9y4ars3ks7fadcanc2jy9283d7d6dqcsr8q6jqwjmeq3f9fgd', + 'bc1p7w5edmu8me8uw3h5kzs29c87aj0gyw9snkap46nkcx0ywn5xh90qhenvm7', + 'bc1puv4lhtukkuvkfcmtm38257ecpc39mm42f2h38pge4cykn7s3z9fsua5qzy', + 'bc1p42al7nkseh74cz9yc3qn4mrly3vqv8xlykxtrgak8d2wsak7cnqsu4ypt2', + 'bc1pf76mcfdy9tnu58s5g5ej4v6dmdyrqnjwlvlqca62ymecfnhqh4tqfdr6du', + 'bc1prdhygp2fmv4wlrr8t2tryvpcq7d4wrzy2q83k7jsksf6em26y2xslujrk8', + 'bc1p0r2d67jdfreyqxfgs2ywpedm0kengf3tgcpchft4f6r2csyk9ysq4rjh3q', + 'bc1p2w8s5dftsqylap3k9c7lxyu77jzhatcyduc2xspyah3wztrrgjtqgru0en', + 'bc1py2ker94htjym422lupss0vkc794udnulk2cpth275ax2w2chgpdsuuhs2q', + 'bc1pc6pfp38k92jxa6m2mn2vpc53p5380hfdqsa43gvkz5p53et08s0shwv6y9', + 'bc1p4uc96vts7k4twkyslfgjmsnd7ft4rzuq0hm3je0jhhmdsw0t3qjq0yhmrn', + 'bc1pjpqf2waep8t8ujqjx5ly78y306uxadlj2qafpwnhg4p0huzs4hashfs2xx', + 'bc1p69vqw635a7drd9sufa4yxdf7huk84p59zqj88ues2pzgcgq2t6rqap6daz', + 'bc1pcgu4ks2n7du0pd2tmy447zqadny7khfnahajzd4k4hywgpcu09ksmhjhkx', + 'bc1pnf8vp5wep895u3q76nazqyn9gghgac8cq0ezj7lqw0r7ug6gpsdqzgnkfe', + 'bc1pyw4kww4rcmunz5gkh5f7jh50sh2gd5gw6mmsxkpf3th0vk6us0gq3hcpym', + 'bc1ptent8vdwjvym948n2v0llhlyz8csg5g745gm4hkenua5sp02vc9sdvjvca', + 'bc1pzf4eyah8u7clkjsvq2rhqfwafsh5q52f55gnx0su4tqjhs2m83sq6v69sa', + 'bc1pvnqnguhsp4j3m456s7dh8dqluh5z8ew5hw5h93kdspy5naydkgxs00zekk', + 'bc1ps7yc7vzym3fy8ccsap9w9xcdel482lqpu6k863nk0jvxm5x0fhxqjtj2mp', + 'bc1pqv6vnj2ch3rcg32qq6sxnyq9vkvsgcvu38sqnmjgey5xtg2ycq5she3qc9', + 'bc1p5lt474mj0newptk4vwaayeeh38c7rwjnjg84y68gcy6hspg0nk5qdjvnpx', + 'bc1pw4558lhf4rlkeuugutfjmj05kgn76j7wy8we2ljlwlufkpmrs6lqsceelg', + 'bc1phk7vf46fyk3s98n6lagv6aaj9qnuk2u0y9979j9dp3tmp4nnkvusge73vh', + 'bc1p3papkjspjqln85ndzdmhccx42jfa9gty9q6j9hn2sdsq33sdks0q2lg6tu', + 'bc1pe9hk4tkrjml9pwkcyl62l6apudkggk2f8cqxu5qkzsp2d9kguksqnwnh3q', + 'bc1pnwqefa4z0zz8nyfc7y94qgzkuqwjp2c5wcm8d5th4ygzg32nj62qpzsfue', + 'bc1p5fcnrhl03z7xpvj0stylwgpt8jupkfs3prjk8d3trsgxalm50azsvsvwre', + 'bc1pl33wu8dh4vt6afsr3jr47298dsg5cjjjflfx7fylsl37y9zzaxastamse8', + 'bc1pe02f8skmcccqsmqmqwyakec8chsnl6p0x38yv6n30599687jk3gq72e449', + 'bc1pfelj84j5ted5twcvr79sfva89yxrxmkjemx93tc57xwx29l7khyqym3rdu', + 'bc1p5l627c88c5yu6eyerx7tptqmde5hzxdkmdpszkvqhzq9fgm8tkjs8y6lkz', + 'bc1p7s32twefk8ev5az4qvmh8cy7j50dx4ay56ke07rhy5sscnyvqq7qcze7rs', + 'bc1p73mfhvp3x4dpau7ck8mh5c5p068ayec0hzmgvjvxk9hcjxnfuhxq20hqvd', + 'bc1pz4nhjn5uz2rdzdkzu7zxvggs96xyaurqy859jzxmccvea2gh53js29np20', + 'bc1pl2cgdqwnww4cd3uc0rjvug3vca8m2n6sc6e3fyv3uegxmtd9cfkqtzpwvu', + 'bc1p364y9ydfj25yttc5a74v3r578nxcsk7gjnnmlhhqrtjpgwx0mwkq8u3c2l', + 'bc1prwve8c322evcp35wwh26rdpzkp9yvmdqkyqewmx83zpeps4dfansn8dyus', + 'bc1pfwaqqhs44my3u9xya70fsp4xxr7xnfd2np235tknvqgnvstfmsrq456qmm', + 'bc1ptrpcfx63xl4ulj00xvvhgs60zz70qvqltcx7ht4fjm92a6m4vpmqhwjrx8', + 'bc1pg7j0ppd3waktjh28ez5wts9f6fw6kj465064dg2pt8pyqtme6dqswdy9mu', + 'bc1pt9n0da6hdz2zjghm77226x8n82x54f25a80e9rnq30aw7sgfck8qnhjskd', + 'bc1p7l3flukmg8tk60f3lm0teku3mp3sue5rr3v52ju0x6mcj3qyg7hqscqav0', + 'bc1p6duxwva4gkekpdkrmquvcquqs824k8majkjt900gy7r89jjkym2s06gf83', + 'bc1p7csw4xhlunyxrk5tt4jjd8fwp9rxd09mcnnszevxd59ecmrgrdlqhsx3kh', + 'bc1plkuaadh9z2yqnqez7fd2r0quhyflsjmvl0pf9vrlcpvs6kda7c8qzfelaj', + 'bc1pzda53v0agjj0yyyu8zlanfr6tys7ma043af80zam44h0ph92m00qs66c3w', + 'bc1pt0gkgxtrvjnecxcdhakacyymrwl0gep3u4wmxkfh9g8wn5qgvazsjfzvts', + 'bc1pvekxald2mejnsc55jzy3gm5z6arx5mrujx7smmyqvmm2xevz7haq2ex8c3', + 'bc1pljaudz8n3kjmsur3rh6muggumqvrudrcsyjrc7zdjwcgmr8uvvhqxxel4e', + 'bc1py4kv8ee2urjy3fc58rfgylgqtqeckrugzrkgrjtgx76t3lx38k5swuu4ln', + 'bc1pwynqyun69vfc0k45gght0gtxgart205kc3xzz8q5u89vcmgp3d7qv073wv', + 'bc1pmc5lupjw6s7vg0rpnjksms7uy7ml2jvs82rk4fpl7qea0vene9ksuljxpc', + 'bc1ps0ezg5g4pvn9zknx0v2an8y7qywzv7k3l8n7qcmthfsv9349twpqf25t2z', + 'bc1pknex9pu5758ex0az6fkcl88yfu3k70x8fvhdwc9ak85gqegytlzq48cle9', + 'bc1p2fhf9cmuffu2xmfxr5rc03pdx9ej3e3e6d6ls4npj6wz7a4eqxvqj2qfry', + 'bc1pfkjmp89tyc3gj4lhx4jscl6ep3pdea05njsrckyhw948rkj9xxtqch5ucj', + 'bc1pfhcuemr7uq02keak42nj6nqa7huvlhkzplcfrfhhte3cw3paqtds2luqa7', + 'bc1pue6lh6kvchkw4zgfltk4rkg4f74t7w08defkhlxg0d0ys4q6k72qt469mm', + 'bc1puhcn4kvwn7uhurqxkj3cmnuuykyup7uhwt94pluhdxv339a48hesupqdkw', + 'bc1p6uk22jhary0mwn45372sh9zcql8350tkzp7f6qce8auyt3qszykqszm8nq', + 'bc1pkvqpehea6u26vw8tn6qned6nphe3jtpew92v6lgythgl9eh6qzjsrky5th', + 'bc1p2tlajc9f3tyrpqwtclfcfm3u6cey8es3uaafkhah5m3qwze8dvaqdaenwa', + 'bc1p6ckhtcvf23adp8trnn7kxfp9alteqgrk3qgzczshyfyfy98p6vhsnyaqzl', + 'bc1ppjfnrgkudhcgkyqllmp3repdnervr5qamp59plvp55t47q6zvqvqm53k76', + 'bc1ppa6zr8jlum0dpnl3620sxae4kanctujjfrzr2k79wlrpxfpf0uks96fy86', + 'bc1pduuxmdkp26vpf4mpwswzmls8gvh4avude7rngu386ygh6czgy26sycrf3w', + 'bc1p4l3esssvsknaufzeh2u335jjyqjqzhcqg4hadnq28907rmujxtvs7mlls3', + 'bc1p94s3ksd9lql0lkzzeekc9ukh59f7d9eq58a34u556knuw93syy3qtz86rs', + 'bc1ppc4a5nfee3fmsz8zkrstw9e6qaenakz623y5d23wlmm55mx39cqqeed504', + 'bc1pezlhpxn2umhgyxhvre34urhhajrxfg8rw73fk29pwe2w859vrgqqa2snf3', + 'bc1pmcanlzf4mwy73zlvcjrlasegt92s98xf7mhuk9sjse2puyyv6mcqsqwm35', + 'bc1phq4ww6h89zhpuqt5c43dj6ex8d9sm9zt8a53tkw8ndtjl343jz4qfmt88k', + 'bc1padwcr9a5sxv6ty97k545dxusdgw73ph4nc3u46vr6c2dn59q24sqxsfwez', + 'bc1p5vhyupttqkvh96f38g30wwgkxnrew7wh7c06cxyc3tvjvsuvx3zq2jwecd', + 'bc1pt5lyu4hlutnses2v4ewr8k9a67emcwtaklzwnmhvnmgdyn5z8h0sqwudp6', + 'bc1ppwtqqu2yd4atx4xkxxe2yu406etkq30c4y4zux9awvx7smrdhwlscmd8h2', + 'bc1prlxmrd3rr9gy3qvwvjt79d0qj7haxmcdwwhy3qmzl27r9h3t2hvsc7y72h', + 'bc1pp7x6w5spz8lnxyn5xnmetq83yq7xu8pn0e3xtn2pyz5q9lr7rqzsgy2ptn', + 'bc1pwjwx4j65p0kqjrkllfga0zgef4ph7nxgvz35s9un8avnt7mkjekqnvfclk', + 'bc1px8y5rgvkqgp5ya0kem7vz0mm85388ggdj09ymaj7rap3zrdv7j5s5tazje', + 'bc1p5j2j0utl9qlgkep2ygcjk6u70yqyr8lu5ww5d6ux6ha8072mnk3s4tchnu', + 'bc1p4dt6p5vc9h0y3u26y6zw0md732vwejp76c3y2nq82szxt8eyawrsauxy6q', + 'bc1pqhs3j42l850fknx9kq4fezry0sc4u9unmavy5ct40727e5llsm4stjfusf', + 'bc1p8sz04uprnnw0l587raajnngwvx6f40hmuenvjn0fhpc5gpe6ralsth5dgd', + 'bc1pcv8cljpp3m0j22d0cn0wnx8cf4hr64jhu3yceqjz0q9awr4xpx8s3rn6hy', + 'bc1pgkpmdayzh9xvm93k5c28qld4k6620fr44040q9gpsla3dx4zzlxqx6qyxk', + 'bc1p0zgqeqvs6lxftqqkczhp2fp96hw9eaus3d8auzq3qcldu402m47sdkpyup', + 'bc1pg6yzuyv0hezm44ex47a2fqqv2kfv9v43ttkpt8fg5u4gns9ths7saufpju', + 'bc1p24svszlkwcj7gclrw69t4t3qn7q7uexsh7yy6e7fvnz7fk2p29hq8xhq7r', + 'bc1py77xcqahmxs4alxufrhrrh6swtr79alsslhyev76g2skd8kzm7dqhpjm9n', + 'bc1pld7ujcn0fzf759upcgm3efclku2z6xq5vv54s4rwmj9dmrf075tq5969aa', + 'bc1prmzut3dq5sjf2ee3700y0tac2clv3z3can0pasys2ww5q4z2alus7vzj54', + 'bc1pyp58hmmyyws38gjuykjpkwa2mkxrhdsgfg4fywuwdc23p57cyl3qjp5s9s', + 'bc1pyk6eq7eys50txq08ty447xthhz2xne6ltjkk7sajyynhp3am40jqr9u0kx', + 'bc1pau5hm90x9nennpz6ydd29dnln0rg2mysx7gtyz28qz5qezhfyp3sdp3vz8', + 'bc1p6ejmjdwurfca99nyn9g9fv8wr49wvlvyn5d2ne8r5rcgjaxj2a8sewwfqg', + 'bc1pkygwezl2xscfpfvpym3xtfnc87w2h5q7956m6tp549vmtrt4p9uqcqvd57', + 'bc1pfm7mlhevds6mdaw803ffzxv4mnshu6cuuvjkj7vvrxu9hmenj02st2649u', + 'bc1pjrf0k7clvguj5qqkvaeh5edez02fr4unyxrqqhhe9mr4eh6vwcws6wk22h', + 'bc1psust2x652g0uj6648rnl05sjscgafk9zkkfve7dpwczv4t42vzhs20v4ny', + 'bc1phvrm27ztqyhu3wqgt4wnlqfnefv3vhtahumcvje4xl3eqanzvrfsdhyuvx', + 'bc1p56wdxvr4df3sum3hrpkjmgjph35j4gavjvem4z0u4fyr98zyvejsm73rcg', + 'bc1p3ervngq7ry0rkfyemljx2txelqg094y2xhl79j7rcc90kkzj0a8stqgd2u', + 'bc1pfjfmwr55jlard98qsynvtna6nct62dvq9el5t5lgh2chs64mxf4qectsx6', + 'bc1py7627utpvnz64xagah63d5gat5vh26r5rnn2wy0a7d9wxm8f9heqm5aagw', + 'bc1pdgdckgygwd085u7cvdzzajnxl8dgw4hw9m9snqy8x8qjvlezhqksar9hm3', + 'bc1plj4fqmtd009khqfa8u0xty35u5z82lct669aythdvdrga256pk7q2psrr3', + 'bc1pucl20kk840y5ka4q20lafn6lkf2tw302mul2wz8cez5c803fdjrqz3456f', + 'bc1p6tephfw25nffw3zk8emfsmwa2e7rxmgzuf8fu6ur669u0mu73rdsmxs40p', + 'bc1pd55t2tza2lyuev9zuhxp93kh3h2565kgngdmduq0kcxklmad9jhsr3xp7k', + 'bc1pry0kt6l7wd8j9fgq79yh7yf33nw4mt7xhatetkhgpqjhv6gpck7q3avd70', + 'bc1pyu7cdh4r04ha0z3ua5c24ufxjdy4vu6va0erjdnq2qp8dl082kmqqvga9j', + 'bc1pz3e64sywrht8de64xdc65aeu97jzlasccrnv7q3kca43mewqy8cq9z3w0q', + 'bc1pr33hsda2eq48ulh00tmulhg2ageg5cfg09c3yacc3ywrxpez4zqqczl35f', + 'bc1pgkx5253lsym9a6t6e80l452mwftw704up865rhathaeymutdatqslkmjrd', + 'bc1pmf35g9ue84kk7efzaaqugtz3v4fxx7kwec9hupaskuz5cknatpeqdn87jp', + 'bc1pzt6g9fnrtwwn5xrtth3hez44hw0e9lqgzgmxsv5z3f760sldkfrsvr4plw', + 'bc1p3hjcdv6f0p3g7jwffayd6wgljdhuse5stsq8vgp4309p75addxpq604f66', + 'bc1pkdwcq7rjeyt5wwm807d0x5z6x22drsah9ffcsfeqreevr9y6ugjsp0wtck', + 'bc1pglk2tmk5u64gph3gj792qz2cxhahpn5883nzmlxalxzqw9ke34rs87wh6q', + 'bc1p2pxwed4sqpnwt8gucgg7pmt5dkcvlh5qzxcs4nhf849mnkkfhjhq33mfkc', + 'bc1pfe70sl72ch4cdyagvvxljl566y46alvdfn3vfe5y53scuza799tqf275vs', + 'bc1pf6k73q49ck6q0sssk0auv7humavv380upc670hut5r5fu7lpq8kspwndpa', + 'bc1pxmj6ggtgkmhvahmqvxhfgfqhcnahjnns6ctvh2z8u8we0l0vanpqc658s4', + 'bc1pmky6hd5q282d6hz9wrqyzsfnv0zshd0a3l48nuwyd9emjnqnhvts28jtd7', + 'bc1phuwdle04t0m9auvdxfmxke046ewpcxldndtqmu5tcqnrt8dv2spqyaqx03', + 'bc1pwymyajtn5sktcwckwakpcgqlpdp520sw5d7nla0d56wnqvr7amhq74dkr3', + 'bc1psjpc9crw4pupxqf8st0a5puwe3v20dzl8lrlcrtk0wa44ay95vgsmhyvze', + 'bc1pssl4e20gwm8f3a4lrphkmhfgvlqd3s3xl6xnzmj7vvaexd3p6pms635w23', + 'bc1p8n68wljr0zrfllgpysam2lt0rgx5rsqvhuh5x59mcdwax0pmcp2s3339k9', + 'bc1pumml48pafme8xrn7cla5qr8rjg5jlljnkava4z0vx7sv206qp4kq8vc0pj', + 'bc1pj7uzjpymf055r4ksyu909fkyjv7nz6wca4m4dp6y0gnnj7vzrqgsutyrgv', + 'bc1pc4xrl00t0hxp5m5gvg5dskcwr07xdqakr9sy0ltrep3ul6288mxstyaes9', + 'bc1p3rql4hmhdxqa7z92we3cxrsld5hrwsy9ykhf6hcn8v6ndtvsj5dskg5mhl', + 'bc1pm2nmh5hs5xvxglfrhvpacwmqvswjc8xkv60vn8lxxm5qx2ldvvsq5ench9', + 'bc1p9yyzjcte8z2430e8wuyrd3qalw8xe455rxnqt2dcmthf0q5mjd7s058nlh', + 'bc1p6hla6gtvjx60k0ejkq6z3lpdt4yp5654jxqd2dq4d59g5a2qekzsx0fyf8', + 'bc1pczkz3epvk5hzzg5tf7j0qs8cqugyfrz28rltr23wmcrsen82f9yqkffj6t', + 'bc1pcmqhzzh9je7rv7pev47xd5kjx23ht7dgz8cr3rrlw8amrc8gd72qglhphf', + 'bc1p38wuj9zlqll8ken6t4raftldth64tw4n7vyddmuucvk36us02vns4zvu2m', + 'bc1pgd5ajxe3vsnmc66r7kqc6syfg6qyzgzmmyy0tdjnpustmgvcsqrqm0vn89', + 'bc1przu78pejvx4906kv5fxjzmlszwp4fukxe7rmfrkvfgukncmlcfvsj8u600', + 'bc1pg2c6f75kmaq6j8fuutt6lnvuh6v7dt6h46v0gfg3cgada2u4t65ql4x49s', + 'bc1p2c2sftd9rjw4z8zgtf0vzkxqelmtn5wzj65kc664zu3rjj2rru6q9gsvj8', + 'bc1p2c7exz075js6pqtgukmdn0jlpdx3jfsrcc6mjjqhsccw4y7lkcyq3d9lf5', + 'bc1p4vnasty7wq7ceshhlfxmyt272xsja569a7vvqfqjhy022ytj9f3s8qeumn', + 'bc1pctmn0ceelqwpl8w9xz9hgdz5v84m6apc5sx2rntkcwzt5mffnwps5acsmt', + 'bc1pvnwhgprvurxzc7nmscvjfgnsgm72scjtwufg8yg8uk4ql2pxs2wqxw5ggk', + 'bc1pjd4gyfqxurnrxamnyynvxgt7jl0yd0epz669f3q95sj4sr908jask4cwen', + 'bc1pajzphysva7sqxrajxqdhssrfpv6hjv647qpclyjqkjgn328kr4pspvq3nk', + 'bc1p6v83msec6kh0hj2wl8ws8kh3a043tn2k3z80fc8glvm5k8q9x90qf0zwc8', + 'bc1php9hqkn0c28vpkl57us63dkwhv49e7kaatep3ja3xyfv2vd96hhq4vyr7j', + 'bc1puunkgx9c0yjh7wd80gx8upx79ndge6rv9k0j8he0s9lled5xufgqsg6v8u', + 'bc1p0y6lxuhpkt0ykv4t5k7vlc7wg3w0aa9z96p4w204v04esjesu2es59nfwl', + 'bc1pmpaf9nzpw2kczzu2hchvpaeqjerkzw9kmspppmmzmn0hj8g6suxqrvlusm', + 'bc1pc49cm82f23nypm0p3vn54fylfzuhku6y2d5xglv8vefgmv3w7r5sslhxme', + 'bc1pjq2742n494f5tunuy2ar5ku3unm4n2dzwmzt8cmfyv4f34en05esmhzfna', + 'bc1p3sqsw4wqvrh4ngypc2m6hqqnhl33h58m4afxtgs7ls0v0llu33uqpt3k76', + 'bc1pw24catc5sw5yg8yw0jqhdzyrewkaugstujasu3e9pvg6z5r30aqq9urd27', + 'bc1pe6eta8dj6appj2nkxn7rtztluwslu6l6ll8md62dmjjdy2m6e42qlynmfn', + 'bc1px35l86nf0nu5g5wfzah6393h4p7veuvtyyn6dmqmm3k0duwd0sqqk07k5l', + 'bc1pqp430tn33lmpxfw3fcnmx37nr4y8td2l2ucmvcvrn5algru4nslsddqalk', + 'bc1pj6fttcmeqjl64u6uxt7h5r0f5fc3xjzvdxmhdejjgkd7zay373cqpzgzh2', + 'bc1p84xg5jhf3cntw60g74sxnrefl97fsscgwyvrjhcmex4nstyg5c5q9h5p2k', + 'bc1par4g8zmk09j00em3szmpd3qnv4z855dac8qchr0vjgt06urgpgks9k2r7w', + 'bc1p2sp0a8rvl0g8kwm3tmunwd3x4u8cn0fh4hejwe8523cyymq6ffpskllyxk', + 'bc1pfj64axv7fvrvd4yxr35fsdkfecr4jsn0c460pge8tcyvl6apm52q62vkrs', + 'bc1py6q6nxqeccw3p2upnqdpu2v6cq76hnwa52lcj0smwjd2geljmfzs9cpfwc', + 'bc1p2fzdyclgdzzah7q4ruqe235949atlfx8v4nv3k9k5ydas8klr26s77qqq7', + 'bc1pyrqj3xanwqtqx9k4v5r83nkjtkh45lemdhckzq6t9uw23pm7a95qaxnqtz', + 'bc1pfjysy28kxvnp9xl8vsfm2g6fy0lcq62rxrkt9mjrt4hc96fns6wqpn8me4', + 'bc1plgnh6seqksjr34r344ml6jekgzyhm3htnut70wy7cskxx2f6me2qtj2q98', + 'bc1pz0r3lsqkxmw2aauyalfkqy5l5hvwle5k58g53k9gf08r5qepfrps0r6hua', + 'bc1p7zm54pc7l8d7ycdvs2r0sqw5dfpqfchq54h9dnnr8nuf7pqjsvmse8fxal', + 'bc1p85h2grsr6qad2v8gn8y0pk3gz0c6pffgnwsqtcnrq5n33yhap8hqkmphtu', + 'bc1pcu6tz4xsj633y3klyl8ungavjzkmyeupnfn7rslkfrmvrccfw97qfrlhxn', + 'bc1ppz7cjawqvkeg4ts0emhyfp4awe6jf9pg7vajt5n8c939tth6gyzqsjclgh', + 'bc1ph2407k2dlf4gmsv88vztppefmqnpf3s4alnkq3rta0jk2whxh35qz65rnv', + 'bc1pqgxf0j0shw089yvl22x4p94uqqjtqhx4nuzrq7ewwxvsz3583mtsugupc8', + 'bc1pgc0mvwr5upsdh0uar229qd5gzqr4hjrfkf0mfwee8ekqyrv959zspz7pg7', + 'bc1pvrwp7lfzavhh94s95uakcx6f25mzt0jyyl7y7hse24efcexe0dksgeva89', + 'bc1p74muwr99vxkfkf9f4gjs9rpzxmalyyews89x8r7uu4e87zztnv2qfmr2rm', + 'bc1p8e355e03s2tdjmle92zefjvucgycqtxanrux7wex3rwerpgsp56qzjywp9', + 'bc1pa7ye64k549lrr6tjd5gfp0hw28mztsq6s2rnfl2c92qtz8x2pqhqq9hs8e', + 'bc1pmfchfps744xfj7zgtmdr36lvyq0x9sgde0u6pkw9n4xl5xnt9j7qa2tlc2', + 'bc1paqzrc6f6zqzjesdh0fy9ws3kz3c9783mjl3m0cy0438f79hr55mqwdwhaj', + 'bc1pkvtqg3tt5hl0yfjuzz7kyvkrsq7jn9s69rrjjj25v0tyv98lfstsaxjyuh', + 'bc1p9gnc5zycglrawnvgta0mut5e9sy3d68jlrw7d9nypgna095z23xqlmn4ka', + 'bc1py9j4j7lvkaszkmdllz4au4ure5pnh7tw3z9u5xck72l6s93tkwcqj9h7s7', + 'bc1pj6yp9wzfkcjdtv7q37c3fpngvcd8gfe8qnakgdv4uflywad7vd2sggc0dr', + 'bc1pf75d324cn0zukcn3y7344p6mqktwv0frnrudxq50reet2yyrygnqyx9krn', + 'bc1pflumgdunknpsyvwg4txlyhmraqenj4cscz9a0rlkxsdu4h247w2s8ej7pf', + 'bc1pv9x6ewdgmv0rdt8yhyzwfpddmn36e7hgec66dspjcgpz00zkk7dqhvnh97', + 'bc1p6tft22xxgxap84slunjvpmufzvezyzsnpwqm8z4qj4ylyxxqgx2q8e8u22', + 'bc1pakld2fe2t4qza5g3gk4qew8ywp5hn38tv9ngunp6vhqce976mevskpy6fq', + 'bc1pfujac9pwcjtx9j6nesefatjstgu2jtnave78l7pfd0gaz4cgysusqn0j7m', + 'bc1pj55nhtx9w8vrfy2vns2m6v60js2nwgeq74t8fx8z5mverv4lxvdq52y27m', + 'bc1p0y3up8vzus8xq683arjdy9yylaxj4v6czm6zvy8ccjfc7y8453kssllpf4', + 'bc1p40ndfm2hfx7un9rw2aed8kkwqvmuarmc6amzt05v2cynh4us76tscmdqke', + 'bc1pdxq56ejx89p2nrc4pmdjjgphr6ywr93p054duajeekf080m0e2xsarrv69', + 'bc1pyfmzth0k7nuqt7a4c2rfzmdsyky04ur222585c408nth7ntmu6ws9zs80q', + 'bc1plg3vjhaccqhlpycjvghqeeh0dv86f9zz78az6ruagpyzx9cslw4q06lmxy', + 'bc1p6e02er7mgkhj8hlfngg4hfnnv8xq45afl3ssexk248x50c8jpxlq8fh3jf', + 'bc1pv9hvnyh2nxuvj670pxgclfr7dy5elcypccadf5pqv8wu8dxhjkxqxa2k4l', + 'bc1phsrep06yly5tfpjym3vc785cplg5k0ag3ze29q3w96jsu7jhgf3qw4q4fu', + 'bc1pjwcd9j6t77w0nk43tlm26jlsvdrw3d7env35wxsx2fm6fkcz3rzskvf3hl', + 'bc1pa6whe5k3rsn8pl7s3dsjawdzt7pauyf8wttrlrckrscs2j5pahxswrjzg7', + 'bc1pc4uzw5773lvw5muvanjgm04z0zc9yhffessdd406rr77mutzt05s8z8wkj', + 'bc1pyexnashw7adeky8m2ysy53pgckkskrn0pm5j8fzwsdzyhl5d4j8sqmht3f', + 'bc1p5wlas49cxyspd8cwezueselkmgruqrgruqy6tcxmkdmgyq74gyhqfker4u', + 'bc1pf6vzh54tvnlgwhk8h68783xgcly9jxxwx9xudctms47qujvccehqkqp79j', + 'bc1pf7yh6u7jkccx6le32kjfsfuj6nkmfktm7aqc3sfy5uvxh3l78m2sswzwjm', + 'bc1ppupgqx0x6jy7sh8xwjf4gnzwhp4ham0dp062tade9rhztrwgxk0svytr2v', + 'bc1pcu0qt6rcmhx4qt3ekse94wlv6el3dp8fd5x5pl0n7tfk76erfvss2rxle9', + 'bc1ppyhh5ahv7vekmxz9j39hw3fl3g9at5e02uyzgduvrj53hvfhc0rqjd5v8z', + 'bc1peqyc2aeqsswz8ths0s62q6fwn0xaynuul6my40jzga8v356wd5lsrh6hc4', + 'bc1ppvp5fwkud5desukhr5rpnxl5g7kgje0djrtmpqaedc2lkv9tkxqq90hggl', + 'bc1psp7wwjrnt5cfzwkswz465rhcxddskuext2xr8mfuh4zp65anplxqclhxyv', + 'bc1pyjnvnanez83msl0akl9kyhnf9mryzejhrvrzslfsvwsp7ngd7vfqlrqtl4', + 'bc1pk8h2azau5p445nw764eqstymvh9n6e988hf7m2vpmnkrnu3w5v4sj0rrxm', + 'bc1pkm8rhvv0wmaw8tpmmsm64s9j0nyk04xzqw5upua7kt0eklpzrugsdt3uah', + 'bc1ppgk8xhjr9y5mk0vhtrr8fj4gd2rfpynvjvnml3jwv3j2wsd9c5ws8zprue', + 'bc1p8d8ywtj8n466d83f48fjflyat5spe44jyq332vrjhy4a66ey8jzq5en2x3', + 'bc1pd3xefxhetqngg7tfw4la4swnaewkt8dzvzfljved27mguxs8csuseexpgf', + 'bc1pegktaqlnkte7u3fq22ceyqtc42qrd0h7g5f6tvscdf7hyhn2k2asha58kj', + 'bc1p44q8fp9rcr52y0kxzhdw9j4kn50cc7gpvx8vsxw27sdcvhsv0hfslc4ds6', + 'bc1p85qhame800sd6vzktuhauywpgwcm62km9e7xcssswyxwsnwks44ql2l39c', + 'bc1ph52qg0fv6ncg5jpkh78kft234gfryjdmhuzf07egkuvca9mhq8ds0sumxd', + 'bc1puhmqpyz8fdvnw8v5hwyhmkcdhsqhdpcuwzu5s69zr0vm32l6wjnsu59xpn', + 'bc1pse4pfltw8at2wkm8r5y6q3gdm5y8znnmw9sm3prjl5k88cmpfj2sy4x7ad', + 'bc1p3p5y2lpvegs4449p20prkkk2sj0nvd774pf5cvft5xlg0t9pceusznzgz9', + 'bc1puczkxy5ff444wgkss6ajtt9zv3y4fh7svr2gzv4ca9qk7nlae02sn7yj29', + 'bc1pkmhpc2hl6ylfhld6zlvmc7ap6uyqe3s8x9cyf6aje6j2f87edzlsz0kn5g', + 'bc1p6ys72fyz84wmpax97qytn79acevusza0v7htmceqxc73pr6td6tsg22h9s', + 'bc1pnsl0rsuu4nk5y2c79wkar6exq9enk9cwt6thz8q667wyddt63w6s2k0fee', + 'bc1psec0uuj0hp9l7wch97uan3wygv0pt0xx99s9lsz7004d652dzq6sfjdvdm', + 'bc1phdyz3c0ys9p8kg8wmneg5tnwuv4w8mstwp6k24y00qu0nv027cas7yg2hy', + 'bc1pzrszgu0g90e6mmmj75f2dtsyszq33tqwr03r46v8hv2ndtf7039s8vjzpq', + 'bc1pszr9pdts9jjp2wdjx8nqjvdnyfy4vngsgzrugfkmzyh0u8azt36sqst4y2', + 'bc1p74smhmh8dpgyzmvdhgla4vw9mana0ar56lns27pja8kv6kznsfpsh8z0ru', + 'bc1p8vawcvccs9zjksjhywgm47erqj44kg7lvmha9tzd9zkvlr5jrntqdvtlqt', + 'bc1pknk32dw5cs8xekyc30ntc8tdrgek08t0jhuz8j9tm7jsjm77vvysd4l90n', + 'bc1p446hkww8lf002t4wt56ku0far8xg346v00ly4ch9vmhkhszxjcns3cj06f', + 'bc1pql3n9mfdmp2jhhhdh4dk4gjesgefxddsuwgt9e38x6ptwcxnyc3q7vy8p4', + 'bc1psrrm05tnks24v84ss7juwrwmkky5nat3ued5ndq6gm9tpyuuv2mqq8ysyy', + 'bc1pnwhkhkkre3wtn78wjx6ewwmhvfqftauwvlyexdfmx66xqejdyjhqlhc68n', + 'bc1p9u8hr2zt37wg0z2t7zenpl8tk0gdjjzcx9js2k44kt7v7ny27ukslj4w7s', + 'bc1p3gpg05jhp7t6s4tcamuy79ll23uxhwg7c9k2w5uwdkzppa8kqv9sd4wk6w', + 'bc1pyfm27klqtj09qq3nj37vrrgtq76juggrcu8j7a9jg0t244wcfktsfxwkze', + 'bc1pk48fhxzt5kt2ra7m2e9627qj0lejzfzfs8jz3ynj7sswskx93eeq8yyzwq', + 'bc1pv0mgepm98548vkc08uufqryklce5qq03kq5cpagwfwcjr7vlpsks42jraw', + 'bc1p92r96pdt400spd792f78dptwyckyx93u8rn6kkra2svau5ck2x3sd65kh4', + 'bc1pxm62rdrrxxf8m0t3mepp832ay3lfxzj9letkrm9gvqvdy0k2l3eqwngwa3', + 'bc1px58zapc36nus7ecxjz9kxxudnx9zxvdwgzhagnaywwdqeh3u75kqqll22s', + 'bc1p2cl2nfsycl7j80yw8f0fjnjrpusaypqs4g4s7g80u5vdqqx5q8ksr5re0t', + 'bc1pyjkq737hpk2p5y49esvgjmwhszc7hedear68dmgkgm9vuar7eazq0d3r26', + 'bc1p0dc3tm9u9llf9t2kvhv6fn7sl4znsc5s0wa4c00qlqzw4sgk7kyq7mteag', + 'bc1pxq8xay04ma2nukfa7tqe9xsl7kjl8tdztq8a6al5h6qpsx8v308syj04ld', + 'bc1p4p3mspge0j8hwvslpqwc09r4dkcspk05lxfkvvf2amq2smds79aqvm2f9v', + 'bc1psyqrq2peu7qgrser8zc5euca06dfy3gadfdxt8yfs0xvmzu8cq8syncwl5', + 'bc1p47qejj9thgay75446dh8j4cr0m6gv62ssz35f4wt2frwdepxdt7shge44n', + 'bc1pzkzct3dplhe9nl7n2rdt95sd3ycs2ktxyg8w4qutermc4j36hpwsecczqd', + 'bc1px4vd3f8rf90au2j77ly6xdhzvw9ff9gvfz8zptkxf5me7fl006as6gck7z', + 'bc1p0pxj2r2vpghzs7mhzvje8hsx6uy59cnqqkdr6vcazekn98p59y9sj5raq5', + 'bc1pt62ghm6g5tnee9flmfa3pe6pnnm2h3ec4rkhlmearnpvghg9lz9q3raw7r', + 'bc1p7jae0kg8ckdgwpzedzcs3rvwwcv6fxlh9jn4leevxrjwf6vpwpksrzhvj0', + 'bc1pw0f67mhq78vxz5x6d3gthcvkm4wgs656an5z55yd9ep70dzrquasq73p73', + 'bc1ps7ecm8jvdt78fltltz63ylu53na6qytf6rh80yuqewsdqgrcs3aqgcf5e6', + 'bc1p240gumy96hutd5eawjplh5levxy8vs57vnl2u9dh6j5hu2u2rsqqazvhrn', + 'bc1paft5tacpgen7tfe09jvrtskf9j580h80783ddy0pmpueqnleqs9qmazydg', + 'bc1pgmfqfrz7qjyef8ylf7apwtsf6syzmgehsk894cs8pvsq6g0lu5zs2gnk4e', + 'bc1ptg50red55s0xh5hpdvzxqtvd7yp8uqclrz22ey62z3ej3rmdrp7sn6jhfj', + 'bc1pfqzphjyh2c7h0ugwm4lcae3rd098elm4lqylu0qpvx6z82xphv5qwrld2h', + 'bc1pepgkrfys8sva5lj2gerhhnwaxpg8zpwh4cphsdhyq4lhws9sqj5s04099d', + 'bc1plj4jdnj8t0mdth3uu0fnzsmq53cmema4khy38ga6tv5df2jzrscs4aqwdx', + 'bc1paak2v24qk8ktd2feec2cvx4qvj4d5hdrngyjxn5wwy2uap8t2gnqj8jhhh', + 'bc1pvfdncg0v4lrvlvhxklzpmsj83hg7r3ekahqkqh07dvu56yqv3p9q82d9zq', + 'bc1pw35tl7z8sxju0ynx3v3jha66mdeqhse8xfr43q6l4cfyg5mc9twqplx8fu', + 'bc1pztv8p3rpt469c5807x0ju4y6706a30lh349zp6da3l0vyq52lrfszrx8q4', + 'bc1p24am4ll0uaksgrngkajjydnjsz8cpkm3jlz7dedu7eclf0ffu7hqklzshn', + 'bc1pkzmfw4y6ksdct0kuxl89km5c6693xztf4clk25ea7t2w2d5leh0s2g08qj', + 'bc1pykakedg84hy7wtxnkhk3tr29nz00pltn5m892cm986el5mdm6kss5nayvk', + 'bc1pq0h3zyf57qdvpphc8rngz6axmm09ua658a4dea9hw93w9n8t807swt3t9l', + 'bc1pl0hlelcnvpef74x26fdj7m8hjtng7jngw9zmplr8pepzpmkzv5ws0cq4au', + 'bc1p9sce58skemqgzgp3w335w2pexfp2rmzvyr00t229segnq8eefldsencsxe', + 'bc1p070cpf0chfajtget8g263rpct2v5h9wygsklpktf2gxhjgp6e28sv0z6lx', + 'bc1pxf7493tl0dykzfydcnjdz9cftwynj6465k58qkw8j6jcekavxggs680v3l', + 'bc1p2s2psedudl5s8cdmkkmvrhsgw8v5alp0hrm7ufd5d773xq7m89gq82sta0', + 'bc1pgl7r8ak6puvkv9q9nx8srjekjw7hpptaq5ufaqz2udleje7wvngqqspytf', + 'bc1p0tffp7rs4aasj9lm5j4pdn69kudt33d64yr6mg3l2rhdn0zrzd5shw26sa', + 'bc1puqtm0k6dqk8yykxljrj2mt3cpprqw5px06txha7lquf8w9y6azlqjcz0d7', + 'bc1paaeess9c6qsyyt9fwh4pthcxlf4m35608rdnkmephg69wza0zs9q9u4s78', + 'bc1p7adhm585zayu3q8pa2l5dc5tznu7vu0x9zypu7zlqfrn9z5f8ahqcuhrn4', + 'bc1p2mg0j4lpjpguvzk29p2elgcc9dy0mlnj7qyka86da49xc4t692tsjfga8l', + 'bc1pfyg7afvmxr6puv7jv6ugx9ruewn7p6lj4u4jlsckgumz3m655ensjgj4na', + 'bc1pksvxj9r042unvwvfv08tr3h650jlpx4kjzvjegnsev0f650d5acqxnqv7u', + 'bc1p277wm6r98npv7d7e097fgeh6nzfudcp5x49rvrt5xzj6adjd3jmq8jekjt', + 'bc1pzzv42797e7r7rqafmq5fkg85j5wqurh4aj2qlqj4246c67skmhxsq30sqq', + 'bc1pek74uy46grx8vu07mx97zwffnaquuvdysuar2f24qnas034tyvmscz6779', + 'bc1pq7lwh9zn4gae0xq0hg20z32e2z8gnpcf8yaks8uurgf34vf9d3rsw8h8r7', + 'bc1pxfq782fd2rdss07cx8q4r2ctfaerpeckhphz8va47359r7vvkpwqa26ag0', + 'bc1p09gjlqrt4laal3rqwa3tfc26ja2y2ajeg0xt3unn2yxhlkqflduq3wc8mh', + 'bc1p0wln5yupmlyy6utjnnjgw05fpdmcagql77pm0cduws3cm87eq2dqctvc6e', + 'bc1p8kdv2dyjlx7j9x274tn3dna75xqu3w4ud8d0rjvg3vfmdztu45ks9nup3n', + 'bc1pmnpx9csx3jsuvjjpp7nd2xglvdnmyrx8nzayl55h7u062kzf9xlsyjh4q6', + 'bc1p96a0vpnmrc8l79kuhseczw906j38ulde7uqzc5087n48wzt9ugcqcg0u6s', + 'bc1pp47fdc2y0tehkhgshmceqhvmltspjfcz5qka90lz3ds8x653dcks2y9xmw', + 'bc1pj6fc5l9zwc85g5fpnrqhctmrhvujc8zev0r92g3czlqnv0uvh42swtfvs4', + 'bc1ppyutgft3fz7rjvwk8z6tgfesqnmstxdr78pv62c4np2vkqtgxekqmefkuj', + 'bc1p5p5jzp4aut3clnppfglz38ztr407vun4pzj3llaa2yw4vyms667qgl85ha', + 'bc1p7x65s58gcc2f07xjwutnn7g2c39qq6t7pv8qa3pwfays5nf5jkusgwypaz', + 'bc1pr4av6xujwd4zf99e9dta4x5dc9wwf3j6rvpgc3jkcjy8q6dnzwxswq5guh', + 'bc1pvhkm0cfaaqdmft3epmcsqvwrrttntf78x6m7yyks0zc88xn7hgws26azn6', + 'bc1pq0p5pssvtg4ct07w56f64d4wudpgwar7yl8ly060hqt5sl2w9ncq5zahqk', + 'bc1p8epalgdp7r5xch3v34wd9f9u8ml85ufzflurmsk2trgy6jyx0eeszv3apq', + 'bc1pk6y0az3fqfunfqr7czknlq47mhjax40p3djy5u8xwzzzhnjazulqhj5sgs', + 'bc1pklq63jkc7jcjw35gxaeje7jtvdatkrk0tmwm6sh70q9xvx8ylx7s7jqjv8', + 'bc1pt7lpcnjr8qex02cy4w02cnt6jz3fyxqvtx5rzxfaqkweyg5zfytqq3ddf9', + 'bc1pj0gaaaddrajhtes3kau764unqldvxdewgm7w3yxnn65vdge280cq74meu9', + 'bc1pc9rz4jmmmm3fma7k480swc2gte5sa28glwnk0sfv93e09lmnl4mqfcd5a3', + 'bc1p8uh9vy7a70aj4e8mgdwxcte50uy68lzu83wcdjtl3q3echhmr0sqt8rd9t', + 'bc1pj5kayg4fpklmqfswk40nqel6tr0wrqrjf2390xmtkpzpq8qw5mwszzhn55', + 'bc1pcwvxhwk2r6m9dw85vgp6h6gd0xyj8fd8s57axu4p7eck42w3kvws4r286a', + 'bc1prv4ztm6u7p23fgh8s0c83lu5vuew3vkt5sdg5cxvmdpxdkph5cnq55w759', + 'bc1pe23sk2l2yszsnhu0cvl6r0jujq8690xrvxl9dwh6j786v2ralqxscd439v', + 'bc1pu7tadm30gw83aynm0vr4ta9ngcw8ftvystxvh0q3k3hpz5rnjzhqtpzn56', + 'bc1ptnzrd4ttdttesuqypsya7rcmg3xeuduv2rzel6n4khs4av3t9llsrv733v', + 'bc1pc42p9c8v3cpc0tncjzjfe6s43889hgzsec05jq5jgzfftw9c3xkqtwfhvt', + 'bc1pr3cfvu2txuw66eaepcyjnrfewn4gx2gv7jj7v62j7x583psfr5dq6gv9n3', + 'bc1paked3kwx4nftvj2x27c4pkpam3drdv6hcgj5g3flkacgawn7jyxq0zz8sq', + 'bc1phw0ypg8szvkveqdxdas27vevak8ded46cffcqtc9r08rtm63vhxqtqzhtc', + 'bc1pedv4rajnu96ldzwcdt32pqh9lxfp60hme2n7ync00w9qpyx4t9sqw3ycdp', + 'bc1pvc9m8xk04h3xddnsnk6rrmc0hse7gnsdwlyn8etgsay260m7ewns945fta', + 'bc1pur5v9eeyqpl39mp5wnmazkqrc25kee357frcylj4c2njzp2pflqspwusph', + 'bc1pr7gmp95wcjfc9e6ya9947zpzqpnn849mvztpwvvqn2aw2vk9qylqhkpkgw', + 'bc1pczedkchje8l2pcsm03swkhdvwdeavn39w2xwdg0aqktg099le7kqss5js5', + 'bc1pdz2pe6xw8l9snrnf0tgup6ptc0x8q22q27zlyfvm33tnlpqujp3s9c6mvg', + 'bc1pwp88cxytmp52e628f753n2yqvs8gf27rtfqkz05y0kpj5pfakg2qu5awqz', + 'bc1pke9aacezepmqtqrqsekk7fmyd4gfel28z8vv2r8ksrtc3y5vvw3qlpj5el', + 'bc1puagptary0p8ykuua965z5e9c0xapeqz50zea7k78lgaayvdlhjsq5s88ty', + 'bc1peqr4p2akv0rqucka34fr3293ehv5vk8el6a420mvfl7u99q4gk7scjlhn2', + 'bc1pcvcxdfrw3u57wdur02a9ul58zc5tr0ae5zdfazh4rhjgvzhnvlgqw85gjf', + 'bc1pt98lmv7eahz9343lxw3qs0a6gylj8dz9jutwuz9ucj9zweea8krs229hdm', + 'bc1pfchm264pfxw0nd932qfdr79rgep5ul57agm49v8fjdkdfmzfnk0sdm27ys', + 'bc1pm6kzpdt8lwquy5k0n7n0rzkht363gjkc8j7sew7xcldw86uzc6qqrgmxdy', + 'bc1p0k8rmsyk8sg3jq8jvak7zc7hr2g30477nv6kupl64clz9ky4h8pq60r5jl', + 'bc1ps9su7pghhghrq40hqudavujkp7sfvxqm8dcgwjzxl9gpu7zvf3jqpzfhjm', + 'bc1p0whvh7zep5z59udemrrzdc5w44tq2ht6luaqzy5naa97guw4z8nqswmkjh', + 'bc1plag7yhz0d5gxz9z6rkv58vzk5met0kgd4h8m305fe4shyc68nq9q5s2x6j', + 'bc1phqnua8m82gyc7j6j48wk3uaa6p04lvc29jglhk4ggg6wkhp4uu2s5kftv9', + 'bc1pp2dnxjm7a7lk4pa0epfax9rd4s87xw7hpgdxxjg2y9phwqlnha4sprye7n', + 'bc1p6shet8yenqznynt4meftetqkg9aj7acndgh6ecy8lcw8z8433xysp376qz', + 'bc1p9pt5pekyx2egdvmdgq9ap84qr4syhwryqkqgkax4acqgm3mhgrasprduq5', + 'bc1pwm6794tqxr3lc6348wy4z74ssj00tscnxmvd889kskac4jte95ps5v6nf8', + 'bc1pm7tnkc3c33h0xc3ry63w72hq3yfc39typagczzryu22w9p3ash8srnkvtz', + 'bc1pv0amvarvk0ft44zs8zlqe4rznw6x7gp86u48syqx7mkph4n2ureqxc3x5n', + 'bc1p3n66vj5qata55jlyjcv3rcjrwy2tgmwjd2n5y83alpztcp2uvmqqze79xs', + 'bc1petshrrt2u3gzfe04nfwun8ksu7xsnx648r3ky3jqxq0wwqj2x3hqckuvt6', + 'bc1puaj5d76cd7cw5l6nrvqqt86wgg3yyughyg976yadspwh8aetzf9qf76j4q', + 'bc1pqpj7mc27m4eq7ns95p58zx0c80sy40x05w9twujfef69ur5nue5s78t97m', + 'bc1pm9lp5evmzrr0edehgdpqqzmgr966uaxjf22m35mjj28rdsr0a5dqr2mwe5', + 'bc1psf34cgkrxs29lwc9lyv9a8adfvufemhgg4jqkk34vnglgfd7px6qvvgpqq', + 'bc1ph8cejfdk2j3ldk9aqywnj7xrnx0v24he0sf982nkdez9509awuasdfpdam', + 'bc1pz8hdpx0r2dzjqxkwaenulxjezwz3vmh823ehrzk06g5gll65g3es38f7d6', + 'bc1pgjfcqenfvfaeu94ftcgpnyt4kw5ted9rcqfe6n55mec6nqsfdr4spkf3gt', + 'bc1pzfvwpr8ancxnr868hgjy96lfykm59t7rjkr8xd6gx7l86jwkshdsl2ln2s', + 'bc1pltpr9uwy4f8rm64px473q84a9cghppx0fk4n80mhdxtjmgzgn8kscg7wm8', + 'bc1p3fxjqxexmqdr3sswzwa7t52d4qadexp0ru9czc7s0v8k9kk4spxqx2guea', + 'bc1penavaxm0hfuulxjprtsdmqn2x9wxs4aut53xswvqpga3x7rjw9ps88m3c6', + 'bc1pqt25anhef05urfp8y8qtqr6lk922gecja4era57pf0ujgukwpajq88px3t', + 'bc1pqmedya57zg28c2ae7qd67ua82ul4gd7nayftwuxwjx7euhnhu49qpmwjts', + 'bc1psgvx46lkx86qd20eckvg92ah4ksngntuevhypz02ch85sacwdsuqtffl4z', + 'bc1pj5n8e73n2fp6h5z7r624y85vs8hccfxq2r4fth8jjx3psa4qu6yspnewc3', + 'bc1p5d3vs7hp5ldvzjpqft55vezdhwv8tugunxhunfwt454vpsd8zgjs2ykfup', + 'bc1p78dzevaa8v4w0wzgv4mfw3xjdszlkqhm6pmq578l478dvrn57dvsrl2pme', + 'bc1ptr5et40v70zw5n62xr9xjhtmqwpag8uyr5uc34y4rjmlfhd5e8ys2aed7a', + 'bc1pq00nz60nhzkszfz2zghgsljsaa36ww3ead3fvy2r3j4z33ffc8uqpaeqj9', + 'bc1p6p2dj7dt4kn9x4xqa37ernke0aj508thxf7f4230thhms8ehhukqxleazh', + 'bc1ps6z56yehle0s2nt7anlxpmzkld6ywjpehlrn48xnagaa9e9x4kxqzl0u5k', + 'bc1pqmt0e0q4q3n3v5nlzfn9zp4m5lxkgz96lg0yqqmvd2kf4hztq8uqp4dckn', + 'bc1pnez6m0dywuc5x7ucnlgn63fujcvs3ntel53acxwwa2j6q00cnt5sgkusmy', + 'bc1p3zw7wywh4upj0gd5dzmzy3dmuqv2g7z202hs7m6ve8x5kwqnrrcqe709u9', + 'bc1phfdd403w9e9xq4lx0tsyw55sz5z0mexwtf79d9wmhac8n7vmz5lsq6amyu', + 'bc1px926j4sg5pxpulgl5ptl0e040cxeh75l6n6q75sn7a5nk4r8rnxsuwkegf', + 'bc1pejv8c3uwgk9vyy4cpn62227e9h05wnsagu08pueh4qqp6ughzvzs0qkypq', + 'bc1plten9grmergen9xlxdyxnnafxv6mpxzradlsnumr52k9sdcdwu3sqtx7tj', + 'bc1pq7a5cfr9zghsydzsfflrkgkns9u2zlspzr87222fu63m7utftqdq2eldxa', + 'bc1pqsv08t05sjs505xg3wjs07fem02nm653hlne5ke9k3cggewuzngqsl6p5r', + 'bc1pudll32guxevsayk6g2f5tv9nagujtt7s2xsajudvmkry6mcl4tcqj6ykxx', + 'bc1pp4ja6fmj488wcrqcs63fcsjuf77hpye0gqpyu3hysafdsyezwm9qjmrgpq', + 'bc1pafp3gtjj060ng48xpyr3mv0thlmsz6yf7a6ge839s0gza4xg6rhs3l2asz', + 'bc1p67y67ej0mszgentmvv57lhdl3jykvdcsy28q3qamm0eqwckjssuqml2xdc', + 'bc1pk6v36ajdzpml3pdz27nyg2rvshun220w45xevn7gq8htjdm8dncssc5z87', + 'bc1pcaf9d02r47su0jqrkq57l8wnkxvqfh007ky3jtll87ccfdj2huus2y77z8', + 'bc1pmfhn9hjqf24vzhkmcxd33fjap239r0pghakuwrqcnrg95na0g6kqulg50p', + 'bc1p5nx97kk7t0mvtedtggj4sa6yeqm56q9h0dgng7jqw3ce0tey65ushul93t', + 'bc1pdravsvcylky6te2rcmpjl802uyejjpdem4kxe7tfk6umnvazrmxs8xnnrs', + 'bc1p8kf3nfe498ar9qt52gkqsfpd37pnr7a2uqa0q3zqxvdaqctu4n3sy0v26y', + 'bc1p6tznt3u4lk6apxswxg36mk2d6z6e2xk7384f2kucua5wnu3yjntsnma3aw', + 'bc1prudvtzy9dqmhuaxee0lu8423t7fv6k604gyjsnshlqae4n8h6h5sl726qq', + 'bc1pluh37c8ced3xakg45nnc6842dvurdtakzguuwuxy3gaapnzv2sqsfvwu8r', + 'bc1psgqcygzyga8wpl4p3kyar7jsr7csdjact3pgcgqmy0hz84x3zwvq7a28er', + 'bc1pc57d5l42l0a5ca9c3r6m0jwhxwuqj7vs34k845y6nqrrj89338pskwf65e', + 'bc1pq3x7pkkcsy0v53307q4s35d5zcwrz3h9lrk8m7xcacgthl4x7yuqgffcel', + 'bc1p5glt87k558h4t4hk5d2gnwvem896483qp64cm4rey0jcgu2633qq7dykzp', + 'bc1pzjk0yvkz3lkk4w5ehyl7eqydl57sh0gs49yw7449c72n8mhpf54qv9eag7', + 'bc1pp94958lqm5w6ls76sddj55ak5hdf92yqzkz3qtdzwjsyh3j8extst422gw', + 'bc1pcxz588ac9rjcxdn4l3gve5ha9h7pv9p7srf2hymkkyvllmwdqyssunkdst', + 'bc1ppsgqdknsrley09js7pj6zm02ayjprunecl7l27gcym8684z5q3gq29gvwq', + 'bc1pq4xdjeg5fm6pvhw5jf4tkw4zh7g26v8pmj2ftxh4law92ygmerzqxdhrwz', + 'bc1p540hsfjg3tsrt37xtumjyk88cdqurxkjtz7hw0srhqay6ya9gsgqkuszsm', + 'bc1pejqatygf6xtttfvucvmvdhljnne7kh24fuhp9gc5mrk4nssnv5sqpajwps', + 'bc1p7uvspl6qt47eqyhe2azd6teulyy3ldm7kf65mjqan2wqnmwdquts36jg8p', + 'bc1pktcjahn3jda5t2zvh9knk44mse2gfvj9rxyfamqydz5x22rfnlus3jwz6u', + 'bc1pa9grs6wng9negv2rp0y3p7dnatvcym0mng9vvrjnkzs622nhk9jqak8dqe', + 'bc1phs0shgl8uj9uv0c4yyf80vsj0ptt2sww7daxu2tagpcgu2xfhw0qw54z5p', + 'bc1pecmtald0gq6xl97ddwm9e8xunr3ut0ssp20qptxvt6vy5c7g2tqqtmhzng', + 'bc1pcapsxmlv6j53d0lknkav8l0xdn232y58ym8wfeqszm0frg9at82qxqz4md', + 'bc1pd03w0la40qle3v9mh8qvv8kdd69fd8nvusyufczqr8k4llrenu2qmujxgc', + 'bc1pacnak64enz2u6pnawspxfya3825fee74zmh4aw7wwyy8eakm5rds0fardw', + 'bc1pdyerdal38qutfyxkmxau5rgt2n2q0x9wr7d44hht0vnyusrwjjmq8et98f', + 'bc1pec6uvys8hvf69nfjdezdarflcdzyphej3ypyrd5sc8nsph8tqa2q5w8pkf', + 'bc1plrvxzujel6t9ntpsd6yj8nrk0sc37325uefvzq6eua8xwddadcnsvgu2x0', + 'bc1pncckqrdhcyqdlqtje08svf67mam0f3844yyv5w5c89kcnhlgmj0s9cj577', + 'bc1pmf6qq38jgkptl8s86kaxdk6xsj5q78ur8x8tamnxq754wrau8t7qlrylql', + 'bc1pkqdswf06dt47q63fg3s278fvk0896ylc6ddff07nqgxtpf2mxpqsm7ca3w', + 'bc1paa3rh02rm73fqu5wdwufjnt4chd4tpf5qggyhe3eqxx34p6vwtwspjpn8y', + 'bc1paj7h80raslxp4chugeq35a8akan60au5vecveqmmzssvt4rsv4jqayv4gf', + 'bc1pfhqvqkua50z8s6xzjpe5tja69qh9y8gsucflegq8qrrpwc8g7s2sarw39v', + 'bc1pljk2dm94yrgh25um6vy9hllxsuwv579uujpf9mz7j488ze2338rstshtzf', + 'bc1pdfm0wrmgwvlsv2c4kcsjxctuph2fc00aawt7rq5phv93sucvqrqst7e98r', + 'bc1pdzv4thm3tayud0d9w5x3nlu0n0lad0dld58yekafmpwsnpcqr87sg73gzh', + 'bc1p9x584g4x300pvnqpkgfytkur8dnu3spsc7tl3em2up6cndzj0p6svm4ljm', + 'bc1pecme0f6qprrx2uqur3t063exq65sm4klk4ktz9pzrqdgezewqptsrqzder', + 'bc1pk3cz94tqdutk9qsm5pryzggala44f2htze33n55qgquzfh45u56qhdqrz3', + 'bc1pesc80s5cnsew4nv7pvgsjh990zqq3v6ea3gsm7lrvy2lk8t4rwesceslf3', + 'bc1pn3vfaaykhengvq0j2alw25ka95ue6sxuu36pmagct35lwda6eksqhfege7', + 'bc1p8hs94famh8q926p7k5vj8hxcqw97aq2f90v7lvl6g54x024pl68skdcc22', + 'bc1pgdl5md8zkp8sst7rl4x276sk4xdh9v0sdwq0atah2nmf7ewygd4qyeqg0h', + 'bc1pt54em3fgtlj2l2npyd9j6v9rkse4g4q0kaqhd0nfmcw8tfskrw6q25kxcw', + 'bc1pk2u0x67qa9nwp82yh9jp940mjzsc9uryas9vd37nwxav2v6kgfms2fh9md', + 'bc1pgty3epszkcv4zs0nt5g3wt5ze7da0egtzgyfzyrlq6uwggxrkyxszwrfw0', + 'bc1pxq5y7a943qld5rtsg6ndwe9flzcc6vq6qsqs3sgtegjdmmy5l40s0f84n5', + 'bc1pa7tnvxpe23q0z2c648durejzpz8c55lnwaft3z7f2vlh4h84c9ms9fwygh', + 'bc1ps53h86m8qyepj3syr842l62wrr56mrp67s8m2l3ka2y58u62rvhq59ujc9', + 'bc1p706ktvdghk84dzsf0kc23xhtc6lk893jme8h6kuv6r7mzehpd7fs0uymj4', + 'bc1plrdfqv239jjk9k47qry3693dsz9d3q86fj3mtnsyz02ky7uzq7dsxgcm5m', + 'bc1pt7qkcp9wxjtm4lw4jcpndr0f4jy2hg39pgtu2shf8wy0r936qzfq997lfn', + 'bc1p0xul57mz8qg52mahjutug3qp6tr506gjfjq47rews3v6he0uplhs2eemhj', + 'bc1phvs5qhkev4dj7xvcf6pe8cex44uu8jz856x9rg6l66ty73dqklpq4tgr20', + 'bc1pmhhh5qaglmh9nsqw4as70hducjg4ysf0h7eaye906swehxfk7cls5j9984', + 'bc1p5pdnwglz35hg0sat3dnehfwzhxg02c4kyknh4dagyps3qgx0gypqj9wvyt', + 'bc1pvj200xkay9r9ljy5epqg05r74akkj7ld50ls3sft4mc6jwp2cn5qzdlk0v', + 'bc1peagf9jew5lu5hdtxaevecn7j8wuheqemku3trnwm8rkjuvf3nfmqr97kew', + 'bc1plpjc9hqt8s2m7gv6x58p2razel4h9f73y2pajy6rqqk8ac7lu7xs6t80rf', + 'bc1phqf7cq5eay62zwqnlk258e60hf0tmng8gmvaccnytpqd6dpls95qq5z909', + 'bc1pw6ke44dkqv8x2fecjudtdxxxfpsqv9rl5dgkfeadj87tlkzsyxtqlankw7', + 'bc1p32a6ana5yqyt9lepnr269j6cux8hqlmz5w82txxhxlvyn65mcgnqm0fefm', + 'bc1ppwyr45jmdz9qsuq9sf6ergq0273t9kxz4tc4s5kev9r9p4c70q8qvec3yx', + 'bc1p3cuwsrekzuykkytzchqwum5lw57ks44f6u9lewn8c43mx4sk9pdqnclqlw', + 'bc1p8zvs79ukv88hhsh2hzstmtnad9uzsdarsx4e9h7y4hg5lzcwfkxs2hz550', + 'bc1pt5gy8n2ghp9vfxlde9n8xwa8t3ytfnce4zfnxsntpmctnddt5crsn8kac8', + 'bc1pmhhke8x8cm7clwcdzct8a86jmjaxwhrz0v58mtwdp3gm6sq28tds3ff3yp', + 'bc1p4495eajpm6x467838ychuc7eaxd79mwn7enyxtr6mcwy2te9kq7spgvy8j', + 'bc1pjlcz27hn9dake6rlmz93knus5nw9auzgp2k4wl86x7unaugsg2ms9f3cwl', + 'bc1pkydu5fhex6lk5du7q6xrel877ayhkjegt9ytswt566e5uxp8nvhqystssj', + 'bc1pvd2tjdjlhzdu8mkr6uapqavy4lqt3ms0pync3f2r5kaex9fyq96sswvv7u', + 'bc1ptpfpxw4r84sk43qw788z6yvjq24fjgfyaswzcts0qyvtc3srp0vq920us6', + 'bc1pnf2ad2ccvwjxx5e38q6r0nm9f5jsue6h4hss6xh9hyahvqx0mcls4fj3rg', + 'bc1prexk8rmmf8ul8uhw8xnwgkugdh60r7jjgr7l26ux3jgxkqup5j8sg4pp8d', + 'bc1pxntp4zsclq6969u3ed55glmkgwng9dat9d8axjhk860c7u0lnnxqyuka32', + 'bc1p3vkfjxaca88fknwgdu56xst26lelr3yk45yzv07g079d0a9nhnwsyksg90', + 'bc1p4pajywqctu08pe76uxsks05y8k5au77zarzfdsjps6taekd2tm7s5lx35n', + 'bc1pc0tufqfjq2ewq83053r4wkmjl2rg0rhkcd32jgujxecyvxxwaapsagywqg', + 'bc1pa5mca3rgs69uugphk58zq33tp7nh9p3d27vxq5t0scq3z8d07t2szx8evy', + 'bc1ptnrpwxnnmwyyxntjsv406xapnfx5aqaq0jcjna0ga7wkz0uaqmws4ac6rf', + 'bc1prjvm2gu9qkqjjksadsxqmm6femra8xrlfgnxd4w8k7ndws9rxfhs6eec4a', + 'bc1p908qh63dvzqt8hl3k6agwmhdx98ytthvechyezu0504m3eml6kvsjet36a', + 'bc1p4twhadsnzplk7mlxlycs8c3n7l3t7lg058ktmct3q009dcsupm0su3t4zu', + 'bc1pttcjsl929q685ntv45dzccn9qgfdzfrw5js545hrw5jj988n3mzqtcsw28', + 'bc1ptetq3erkzahfsekvcrjhka4s0c3vj7rxlf48qkjhr42dn5lx7p2q74u89h', + 'bc1p6j6ttwv2wsuun0mhy9tsvjglq5yqw2yy43h97cy6te3xgv4jrzfszh5t85', + 'bc1pnz0m98wv0kzdpcuuygjax7expqdamuc3w5juval5xtldj7gka7uq20tnq2', + 'bc1pcguvzng7yvdnuyntqygrtsce2rkyhxn3tnx7kwcltxnavhryy9cqtshuqf', + 'bc1pdgfzhgdyv2rwz0rzvxy45ctqh6df2rcrvex5kunz8pgae30ktlqskv78qq', + 'bc1p0jchrzwyzpgk8ksjz77gcdhxypmsj35kgvc249mau8gr0k9rpdvqpylxcm', + 'bc1pcg3w97n2yyt94yryqmqpxfdjyw4zpa0gp9z6aflxr77wsszv528s40tdq2', + 'bc1ptvad8yc5g0r543hhrk53aagpveqeavk2afps0ejwdyv48uzs6zns4u2z0k', + 'bc1prtrma3ne35m7wnmlvrpufkjzml7crtlgu8eaznsyk4sech3y90yspye4kx', + 'bc1pcgqmljue5z9pff9jdekytepegrxzlte6cg6svx0zxukld6zr874qn9mylu', + 'bc1pq3usutfaqrf4lgqk5glh2u8kxmdr8ddzeml686edak40ng3d8k2q6kqqeu', + 'bc1pd22qhq9sxt30q2fvkqmj2anduwwyeyleanpmnt9r09dxdv8ruucs0zyz70', + 'bc1pzy6fhztz5tsestc48lmthsl9zvuale58fe6rw9g9lf6lfe2nhwjs5l8jq8', + 'bc1pjkrgp5j9uapns49lfvn3lg6c72evd9n7lgt0gu6u4rcrc4g2jkjqmmcu3h', + 'bc1pwd9vp20jpyw549nct8wlgdtdx0w5wx8wg3qfy8hja5hkledvuceqk9w8qy', + 'bc1pg9lyrnyqthnc4w2x6jytdfrgu853fusgcph92q3chwjna0cenhystqj0cc', + 'bc1pst2upxksqp7lwtqw9htc3zqwwcqx0ze32gy8xzdl3706daxh4ykqaa8k2y', + 'bc1pp99xgqvep4pcpqtmwrcnrsd67ahxupfartfj2zgks4d48upnzwaq5gdgkj', + 'bc1pf4xx969ym8wwk5k3u8hyj254ruya9ty8pp2v0m4ef3e73xj845yq05p6me', + 'bc1pttmyvq60wkz5azqrtr960q42alyfwwxd9usfe6yvjqw5mg0cfqhqnws95k', + 'bc1ptx6euazpp4l82j0fyulve6um57g0sym87dgvcyk53x7qtjd4edxseeksfn', + 'bc1p34luf6anvfmljzuwa4k9xaunm6tleqqlg0qfxcnk0d7hru2vcdjqk0e9u6', + 'bc1p4cl34u59wgc6r4px8ge4fr86jhg27rqjpt6780zhntpje26pwqrsedz839', + 'bc1p473quqh47dlpvdpf66njzc65teaaqdl5klans3z8xqeu5zvzjqfs9vgcva', + 'bc1pvk6rcpnyte7tgd7c80ceksvq6892qex7cv9pdzdktp6dkq4ad2mss3n3c0', + 'bc1ppgasvm4dk2el45jw4cfkz7ldjamyzxemaj39mk9p90sd9x355ucqtlunml', + 'bc1pae60555ygx5q0v9g4e95vhlertg4wzxgwanqgu8tj0sekdqva9msgmar9x', + 'bc1pygmks9ncp7qatc68xdymzqhfapj0cxvacf052yu74j98jhfyqekqs644mt', + 'bc1pkjn6jaum5spegjz73xmrxlyt3f004j4ftt2ew0d6jns2t9sckqaq3f890s', + 'bc1pgxrwzfqlzahh60nm8dzcl69fkwadz6lmc2mtan4txw67gm6f5mzsaems4k', + 'bc1pg2m2c86cfqzryjeee4wf6t2k6smm99548hzd8gswls0lznte6ttserhvyh', + 'bc1p0q566ayukshmmjgkjzr5pmy4zxv5kg4t276akw2l06upvs2kvgfqujrzpl', + 'bc1p6sl34r200vht2endg49ttamrq7sg8lemzlrl9pc378lmh4mn6mvqllk2np', + 'bc1p78awv5ez5fa8x0qv8qys03nfweqjv6y7h6mxmvnn8ufqdy0y2qqsm0zfaw', + 'bc1p05hssmsmgvy7exc6eaxqyz9sfda5tzdf4n50dlm67stzpaws7kcqsk98dl', + 'bc1prhtlmtgvzv9j8dwg3np0t53t424awedaw403mhld7lwn4fjv6c4q9ta2c5', + 'bc1puqewvdjt6j8fr6vydkxwez3y5hggmtvrp3jx40whh9sxc526ck9qr8cn3t', + 'bc1pchlg057nl26dkgnw3ug3c5p49tzsl2t06qxgaveyqvkyhyg6kjvqdlz3zn', + 'bc1p9mnwv7janw79gw6h9k7765stsjyl8eppry9w043v43jzachcwg7q3x4hvl', + 'bc1pg8g7cwd3tduvx3lg6kjmkykugp6fyq9ause3a8ay7h4g2d7sz8vqecc8et', + 'bc1pvxajvafh83862kl0d0w3mzjcwvue4xzz6vyjtxe4t6la0f2ava9s3efct2', + 'bc1p366542yp30n430knxken5nlxzk8kfk9kf3u3evpvlk7wrzsu53zqy4cuy5', + 'bc1ppggpked283slcupygquthtsygj7u7l64ey8406ru7e7xahvv2vwscd8uuu', + 'bc1pnp9vupx2tgdnhku4qgmq5yrkgauah4tz2f04zrst405n6khun8dql34l8p', + 'bc1p7s9lmd55p2ucrcmwlungxae6mvrzqqh2ac0h25zyhlydmdzdh8hsltlwgg', + 'bc1pngrqedlrm4ysp69mh35zdrmpw49n2glmmnczljgp8q0juztvnhxshxn25m', + 'bc1p9q5dl9khz42q5n62n5tuecr3zvwjhgdky7rqmh0rj4wfpj0svkeqlj3tpk', + 'bc1ptllzpsajv3kzn6kxzjvz9xpaem2tw4uc22gygkyw5lllek07cpls0kqr6r', + 'bc1p7e3jj0q0z7kjh2dtd3kd8gqfhj9r2pps8svpjyre8lcq42redamq3pc2d2', + 'bc1pxu7lmm35jut8zcfx59e0hq25mc7v5fypeuau22x8nghulsk0tajql92ms3', + 'bc1ppjhjqswhtt0w46z4l6hjp3ztgqjh52xurjnlhkragy7zemyhzhjscpqzjw', + 'bc1pwj7t9l77j0pecstxnmnv6cxh8ltsh32lwdwqnfzkhqm452rnghgqx8w7na', + 'bc1pkljdq2tlxyh6l9vd5nddm6dyz37mdqmk6j3sx8zjl4t8nv4sw2lspkyvsd', + 'bc1pxkvg6dmn4lx38mkxullahd0rk8qqfvwllr7mmtzav37jjavjkqqs5de29f', + 'bc1pys65ddfjh8eeele67z7em5m66f3eu3ztnedzuksjukrpy753uv9q3h6r25', + 'bc1pqkhm2eu7wsxlahxcgj3qpderyfcv9a9gvx6fwykfx98zqxj8dcpsfghus0', + 'bc1pj0wzzjruzjezkxdupfjjhh4arf4d7spsqj2u8uldpc7gcdxs4lrq3vue5v', + 'bc1p6ugztsykt0nvvsa9v57wnpn4m6a8k0xk5wvvscjsgjkcv83chdesftcqhl', + 'bc1pxwv7k55m54qxpra4c3h6eahd5gukt5chp6k2selnmn0atxxfw7rsukjp37', + 'bc1p4y3fhe33j495m5j9lrakplv7a2f32xh3cx6f57z03qcjed49gmssch0ymm', + 'bc1puy3wdxg7fg5lm3h22jpvf5zlsfae44cpe9n0ydh98rd3lzhqsugspgf6u0', + 'bc1pvs0sp6augclzgxs66ufyfc5cwf754knsd65wpjkcezz364d94j5qw97s35', + 'bc1ppn2rxp5fwh32wkt4hrkswa3jy7yd2mcg74y5lj9fm30u0ahlpvqse8w5l8', + 'bc1pt0kmfd825lsmayvmv5v7evq77gvfpd47uukkfvt0d3hdd97tdc2s79psm9', + 'bc1pfcyqw3hgsgetvsz8kr2jt4vs595t0hj2wphwfmxqchm0aen46dnsgkgcfw', + 'bc1pc6msjansxaf7zvt6s686vgyw3lk9c57uceh3stxsf7uk0ultc4cqjg4lj4', + 'bc1pz0q8d9p0yra6e2078th3c9h2v5t6vg8gque76udqms0nfqcnqqwsrvl9c5', + 'bc1p5qrchfjd5flc94rf8zmu9k0z6p42zxtr0w9fv9tmjqt78nsa0xcsnzc6n7', + 'bc1pnm95rzvnwkr3cky26axqp3za5je705xza223vf0fv6lp8panmrcs844he2', + 'bc1phjp5ef2amhqw6qx4sv455d22ktztyns0gllkvmgrtxk7svg2duksnl6ca3', + 'bc1pz2twlfvclq59n6rg68njnnl94sctl5kzgkcm8ajvrc0jea4s5v7sje6zqp', + 'bc1p3yxhvfvulqespv3nzh85muhky30wzjrv3ft3xrxpav57x6m44pls8ksws9', + 'bc1pqx33h5kgt2zfghxlcyxgq8v3k7lgyuq673qjwp9x7zwre043adks04wymc', + 'bc1p54d3tnp0hew3kx5xm2ff6ran2uheath2n7dv39s39h74xnyewq6smxz9ym', + 'bc1pjmdvcsu6vgrhglyj3hp9562uqxun3jv0fhes95gh9mrm02v0naqsl37sqz', + 'bc1p4ale2hav7lc2t54m8v5rvmncjy64kzvrmwudn629xpasvqf9q6js65qme3', + 'bc1pykutm77t9m0n8lwfjpx602p0p2mglak79hunp2rxtulr9pcrx29sy947x6', + 'bc1p6yqcnpzqrhqtuy5mw0mxm8q4m5yn7798vca377k2n2erk00xt2nsx5wc6l', + 'bc1pl8q4pusq34lqhzmmwwwxl3jxdqe0gfsr40q3tpa0s0pnrxh5zh7qyfmtkp', + 'bc1pxrnwsznlwks2de28c4zltz8geu5evsxrtd9aat809jpu3xcwq2qqdfsjwe', + 'bc1pk6kta4dcw3h5v25qxk99qzkherxxnc8wmwej7kxagcg0q6f4re5qcqnqsp', + 'bc1p8at7f3vsl4w6d2yjszuy669zrgffx2s0r9c72uql7wvthx9z9x6sn3lhmk', + 'bc1p497f6kquk62jsk4td3y9aytcweae39s34uvlq295j3wp3hkwzshqetsdx0', + 'bc1p8wkvjfvwcah7nefg7yna0tg6sapjajs0e75a0awf95a2hjvklraqqpw6wd', + 'bc1p0snlk8z9p5fqpt4nxgvrlu4e7zpefrm7tfnf9el0pep2mu3lhlnsec3ljr', + 'bc1p23yfj82h89w076td8pepdpgs4rx4r93f6ru86wr6npnrp0t998mq6k0e00', + 'bc1pjy3fr708pzu7zem3tsgzlpycpcv2t4qnmay74h7s74uy95dvp6zqgsqd83', + 'bc1p0ql0hve83nk3um5wwrydw9f8tfjm6hs85fd8j5kmvz8lhxdy42jq0zdwrj', + 'bc1p2lxmjk2svvg3vye03w3xm7c4rxp2tp8edx88jftchmj3n52wthwqfdr82j', + 'bc1pc7n7gnjulxlmurd7l553hmcdsddgdujwl6snwdp0j39mlc72m3zqnfmg2k', + 'bc1plmf6puanj8rqxplkxpnqvfk9aygpagl64ds3fsjsxhjtfhut9hkqy6m5h3', + 'bc1ply5g5s8davjh82nmrhuj0hl7l6ysar0gvwcmf8df6cpx7ltxz5aqqdv3a3', + 'bc1pxwvqpfq3r8cky4ct90g4jwfgg3axyvkqmqll8d2ywy69qnssz45qls0c6j', + 'bc1pu4zxp7q4epvgavgrf7tazltcqvcu2udl9e9rjhx9983hukkv7a3qxcrj75', + 'bc1p3qkey4w53phmt4fqxxhjswfldssyrld5fwxu4v4g9wk3t7tuj07qq8m7a3', + 'bc1pfse6r50yushx432yffwekj68lfewus0zugltqemrk2pd5fs0tess2aflyn', + 'bc1ps87hz4dpq5jt586dfwffwrh0vxklrndejy2g2jqjllh609rjjjcq8dp4aa', + 'bc1phrkfqgn6lj0w9lma5ucqtrl2h4whe4g3pgktxq38d03q67hgzcvqv6j6mn', + 'bc1p5xc06jcxlrt3f0vaxd772cxy7qvanwrw4s98xkgykaztr6ac26wsfcvn9q', + 'bc1pkqxlf36anyu24lf4msppyn5ls3kskg7gxxse87qred6cexh0wmasvxdzjc', + 'bc1pavvjcn55swul8u8kguhnc9224vkan5s4w5mwlgjex7pywfdgkywq37pz49', + 'bc1p92ksste8mgnar9vgxlc5yj9c56u4lknfj2swjd39t3k9s6ddfqes5quff7', + 'bc1pn886qw06sgta3l2d0tz0cdnp7j38v9fdn8dj5s2ganct3p8gsrgsr9qgzr', + 'bc1pcl6z6he4u45daky7y5nc20gpu0dr6g9ffzh2z58tca38c9wqgrqsqg627j', + 'bc1pqfvcn8ltkn2lgal663pxl2ztnp936ytd44y2y2mqexzxvql6eyxsxtdun9', + 'bc1ptwsvqhxmuf9fn8djy0afwrrwud64f599q80xzu82t7wpqylw8ftsv995x9', + 'bc1pvn4k7m9nzstskkgcfmc9rpz8s8766frln9f9ajzwkptm8egdk0gq7qx2l0', + 'bc1phspzycwr50mj8gl9lvg5g4d8uqn8m47q4kf8xyeppjs5xhmm2gvsnyar9f', + 'bc1p8f6a34cecnv7gyp4gz5g909rsk8m3lspzyhfasw6gjceru3yfkes7zc6n5', + 'bc1p72kcp2qt5uzkdznya67ltehrlvg3jzzu3rml6kyals6c6uutzgkqcw03jd', + 'bc1phg9f4ska8ht8a62uk3m7m9f7t2j68dz9mg9ta2qcau7hp9kfh5hsjlvkma', + 'bc1p0wenzg80aklzhtmldeayywenje0njactylcfdefyayypuydyffesw5pkx8', + 'bc1psgfld7evtvpmkngdwgrpv2ya2jpa28v6vfwcn6vndyxefa3nk3js0hse0q', + 'bc1pcr3rtuwkp9puef5us3dv9z6kysylsv4e2acgj7avrq5hjuak6lgsa0vudw', + 'bc1p70tnt73egmnz3rgx86j6r39etl563lc6my9j5dtx9thda8cwnezqy903j8', + 'bc1pjjnqu090mmv9mwz2e8mpztk5aexdhq4vvw0njga948zvjzh5n3kqa8uu6r', + 'bc1p8js6enxs6drtm9wuzvxy42aaz8af3ptjwtt9crkgu8avua20rejqj2p8yu', + 'bc1p3zcjcp6zws2hk7ul3dhrruvcv45a0lq5c2m0aceyzqtk28t3lhusqrw2hd', + 'bc1pzajaukauvka6je0jhtfwpvf52gh63r5mr5uz5nrs4cpucr4fmyfqdupdqt', + 'bc1p9qjqr87ehpvdyq77w9m4dssc27lhwx6zslwf7wlvf4syz22jgqgq8aajv3', + 'bc1pw36cs264sg93f3utpvesqwszrxgqepmk7alusc9tcj70pec050ssp40g9f', + 'bc1pdhjcm7nl5xhr07akhgeu3zgrq3xf6k6666lqsct2qnqwt6ktusdse29060', + 'bc1plvu9svza4ss97zn4z83xqfjyuhvw5upqg807uem5g4rcj2k4mzkskkr3x5', + 'bc1p5xujdsd7jer2pw5v6w5lr8w54dgn436mv00jygtafadkvfv8c6sq0ywfkj', + 'bc1pdhupjj9d8gwev6zuggkxug2t9f4hw4wqmfe3sfvwcfd2hmqq58dqf9jql4', + 'bc1pw4q5zw7yfl9t40rtlx8ggk4jklrg9dyc8v4cxv8enlhjda2peg8srtgg4u', + 'bc1psh97u7hv7ntrryra64jkymarrfxy8q9l0h8r8k4k7y8rrl7lcvvqq90nxf', + 'bc1p2eexfdmn4wn0u292u4qlwxu98e6qgkgqqsk529t778mr32gphn0sx8wk3s', + 'bc1pntvd2tzfqsng8wd3ee8ty6ayzp0zn3a6mwr93l2enrcp0w0xswas8vqvks', + 'bc1pd8enuntrw762j678j700emjardwkr7fn89ufn96m44dnassv5u3qnnkjqy', + 'bc1p3tvu2aydvjua8sfr9cckdhtgsvz9q3hufdccc2cfqezva7tmxvhs86erd6', + 'bc1ptcfwh0fnl9crcx43tmljz7r4j2qxl5ref2zl47095a50k89drz6s6n0mcz', + 'bc1pfavl6mc0970sk3zye4zk5crud8fphr2wh0gtjrkl35ppwvrpa8pssry6ph', + 'bc1panrtcpa898ptt2xz03lyu39h5lvmfx3z5l6d3fzw397v5lwuqxysqrwpl2', + 'bc1pxlcxve3m453gjga4gxrmldaqcx9c043dedrhcnhmnsv38qurj7ns9y7zse', + 'bc1pvq68u4rlwtafzpvz8gya0y2ntjuqt9xfussxych3yu8dsmh0n8vq8vd3uc', + 'bc1pjr4e428y2ynjqgxefd40zwtynu74n5mrsk6ujwh9qhcswgfxlnmszqqhhu', + 'bc1pls5kh60ddw9fq7r6t3zggqfxr5ujluqctn5d5w33tvcavgkumafs7whf8a', + 'bc1ppdx6mym6zj34yt24pg04q5npqxk2v2tgv0h0gnvsnt0974ztejhsp6pvau', + 'bc1p6s8ja530p7mfu5aht0xrqqr572udasm35nxjm6fxrty90ap8qulq6fpgsd', + 'bc1pwce3wnjtcgyze55fcnddc3cn9npr7qnxldcmjlv2pp9k86gv24jsm9yl9w', + 'bc1pjqddh40gdnw77cdg0tn02ksfx7duk22r9e8whf2j4vh75hwu0p9smweccc', + 'bc1pcvktr3dusyqpmvvcyy4arnxzdk0yrc78t7678eeq32ac46anda8sdw878f', + 'bc1pkudmeflsua5e457ezppkx8v7257dtt884wj8jx2elu3qglf3wc9szf430w', + 'bc1p3xxn0pmnra7zpyenf77598w9mypewqjcd74xdsztktcwhe6hwh5s9zuhft', + 'bc1pjk95ue34tg0t6fmw9ty3r6uc6u400lqy6rzdmst5nmzw9rcwzxmssqn869', + 'bc1pj5n5ud8h2ksqzv9re3c53rd7zkw48cwz8uvqyrc5lpdkf2qvfhnqa70y2c', + 'bc1pzgkmqhtkxqan5vutwn0rlmfzmucnlcsvaps42squsgq5pxyzzh0sr7rpup', + 'bc1pg2upuhz8pp6l76qk3elu8rm029nmymvhz6ft3zm9napuqr4y4v7sswgzky', + 'bc1p5fhtqqe8rax526c49z73jdhx8tzq3vya2fdqsl3t5wkdyg7nx3tqg9kzlk', + 'bc1p7s9za8qsg6h5apdcjths8teq2etvzt6v2pxggyuntkn9d52xn7nsjrzd0h', + 'bc1p68dmdmcqkdn6m7lw8dryhy3c005jy29p9hfma8lagwwx9zaqpuyqn9a6hr', + 'bc1p2zkhhwhtekn3zd7jklgngjkldm2r7pe496qwel59jj9lpf4pcu3q84cpv2', + 'bc1p6aglvfvs47fkuuwsgt7zjjwrksa3ancs932mmr86zug0u0d73h8sfx7g9v', + 'bc1plukrfeackm0xnj4al32d8tntg6a2fyda3g55ejqzu520afya724qyyuc9a', + 'bc1pa9p6fjxg2ljz2mfet8zktrppg3g6k0j34z6mdfc9av4azwf76rzsezsh0z', + 'bc1pes5ttlq2eaw3uqdg6zyrq6cpqnmc9s58u63jz0qf2cv0tuv9wgcstzrezv', + 'bc1p5lq299c4pm78pz6l8522nv02y94rvsuanr8txucekvp4pnmkmd2q4dqwm9', + 'bc1pu0vruztq3n9g2mdnaql0lr5uzgerz44xsq5dygzqs8c74450hwpqm6udhq', + 'bc1prcs28xynjj080dmyamqnntqj405545vghqkanhvdlcy9nr63n8vsch5unf', + 'bc1p47m0p389ja22rm3ejqwyryz8lzfsuzk9hcntqhr6axkmnj6q0y7sllfr70', + 'bc1psw3pn9v4mvl4a67t42wtecxuqqennkawj22rq95hndlweexs8zhslxqvl8', + 'bc1ptnmkmp4yf2vxdecf5jv254usm0egp6ajz5thnzpc2vrmc8gwxgkswmr7mt', + 'bc1p4uhna3u0mef07j43jj6alnzh7dw8slx6guswlq45c393fh6xweuq2ggjqg', + 'bc1p5txr55rsnx2cdunxr8wdawqrg2g4z6p32nm5kglf8j6jumwgazxs5j2vv2', + 'bc1pnvsnnfp8vcc023wv8w4zw5jefp3mpsud79ydrssmy74c4a30ttqqaqjr33', + 'bc1pq6x8ylspfvfldcgus7897xs6vemvzrg2cn625acjjftp79swgqeqdta2ds', + 'bc1pjz54ga4gjhfrjasyyfh9f8vfjcyuku3p8j4qwphjrn9q32f6wduqn8xqss', + 'bc1pgr9h7p3ckd5y8fjm7gnmhhr30ju7y0m7xwhmqu8xxqwzwe6eleks2zxyqf', + 'bc1p4hnhzq5zkqwssqn0d5tpgrs8dy3s3uv3atd0f0r64wuy2y6tpjnsxn7r0t', + 'bc1pqqh3lnphnqvchr356z8eafu89vjwc7zlrfevyhnhzrqcymjekarqnv6mwt', + 'bc1p2742d6vcjngyxhkaz7ukgknu9s2x33jprzl52cnyvpnnge7z383qgp4u28', + 'bc1p4ql4xe6lpz0pe77834ph0sw89e79cyk2ev3dp2gtrdqnd6p8v7mqn33nut', + 'bc1pnpvpqy5tg0azxclaar98vcf652zgg6hwgf8xessfk9ra64uamuhq0s8sc5', + 'bc1pd4zjn077c44e43pfmz5ez7tx7fyx0v0kxgcv8xqrf8l4t05umctq924z8z', + 'bc1p49ffqe3j4f5jqc3avwnqp8uy45mszvfjg4vcsxclgrmnjnlug0zqh60xfj', + 'bc1puldv6dfe009avgtv2h5zmfws0lu428w9tg0957lv2snp6wxc3u2qkmf08h', + 'bc1p2jhjjnyudnjqdu2fe0tpwyrn6pvw8gn5ezq9gs8c45e93cfewc8q0q00xm', + 'bc1ppjn0jdfpr2g29qc4vu2z69c2vzjr40wnxsp8r60gp5eksnh88pusu0ujtv', + 'bc1p609jddxkn0gj4gdt73xwtulpw8r0nvde3pydlqwyf8fmcp094zxqh8ffa6', + 'bc1pmm8n3gzpz0hayc8l0fyezzltejfhtmtc5sr7a2uqd8t2f8q358jqvuvt3r', + 'bc1ppfyyu427xp2h3xxm4t7z2tqa6rg3fmndnqes6k05vnxmju5n4tps05venj', + 'bc1p6d7zy9f8prmfu04q48d37eeysn30uvl8c6zr9t569uczmd4d4a0spkmuy2', + 'bc1pppydj4zwc4h7unzeagkmr4hypzvp6tfrqs0sf69rk4jn73vwphtq8fa09g', + 'bc1psjysdan7ezddfqaaevv2y4k7w2jl2e2g2dh0ggqxm88sztxh6cpshj3mm3', + 'bc1pxzqmwn7jnrrwlp47mx7e447cxdanl5srcpwydnsvxr67ctvkpklqm7fvpx', + 'bc1pweldke3gcymlun3m7n39e258cpwz8vqthln4md77udvreaz8vzeq4t95xs', + 'bc1p89hu8yxsnuut49wltn06dz3u23d9vsze70dk52erufkzep5au7dqfq90g7', + 'bc1plsg6zz50fz3gs8h0tz5e0cw28qms278xfgwvsay747y5wp2826ts9mxv5p', + 'bc1p46fg0gmv50rsa8vd5jwfyu4274hnj5g96futyqdlu8uf57fd2udqr6plne', + 'bc1pvyejsj64jsyqsn8qrnlrt57cvrtrxv5cg3ha8pavau5kg8hz7gyskm47ax', + 'bc1pr374kkjfmewfhgq20n52qs44t2pdd78anpxdd4m7ydzrn2lxmq6qk8z5rs', + 'bc1pzxkpv09nz2vmlu95d939vfk0uwu34vyda6n5l5qgdcyvud7txcusk9rn0r', + 'bc1pdpxkerlrkdrz70f4mrtlemqtc4w9ww6q7msugaxq4vuez384js2q564vxu', + 'bc1pqlpxyhr2l4s5c32k0dzemfyq5yr8zgh88lrc68a94z3mvuwpfp0q6zepze', + 'bc1pk3venhqklz4n3d6k4958gl6eeug3lq33yjyvpvlwk7ceqewq320s6s5rff', + 'bc1pch9vdt2fp0qe0x5eg7edknjaarg4gymn0hvmy03zujax7stqm9lqwd36u5', + 'bc1p9zje7fy2ny88ewujscvgqtyz3yw288g7ula4jf2pp4896eacemdquqq7rw', + 'bc1pj24uwacvm28pf38rkcg3fjqvq7fu6zrv5zsk7qmducvl3zl9m2ussgt4ut', + 'bc1p4khrgn2lewmpwzdrte8ap4wxa3zwhvhlz2uarshesn0y6d22a7xq70y2sm', + 'bc1p25j6nry73s2hxyf7jwckaanmj0nknnm87au2zgp5xhs6cn7fqgrqxcj4lj', + 'bc1pxxdgfhu90l303gm4ndkjp3td9j66g3qykdzseh87zwck8pnm7hfqaygwsl', + 'bc1phytkzl289v8045m8zknj6c4cqlptnyxxps7mheyjm0ses5y5vtsqg90zzr', + 'bc1p5ah4fv30rv5z0g7u6c00dky07hll3m487hqfkc6vehqrzd7grjeqtjs5n3', + 'bc1p5llygh7h4ax0rm80v5cm8dcsqygsmv2c5xvxux37mtcek9ljk8vqxxxyru', + 'bc1p9nlwjkky68dtjsz7krjujk7pwkpm539zs08kd5979hktjw7cl06sjkh76m', + 'bc1pd4tz0e5sn9s6chpf82z97f68e2q73l753zmk99p83aktmvmh3c8sc5qjhx', + 'bc1p3m3nl20u0vsj2ylxllxv3kjxg4kyhrpn5d83fv529k97qlkr48sqj3t2yn', + 'bc1pt7tsgv8lh9cvpsefsdgmjjx57sjg0qj5ae38txqu9p4kae7p85ds4glr0z', + 'bc1ppw8cf33p3l7sf9yufue4tesax439ukv93rn08ejj0h4gu5zlz3zqs7u5x2', + 'bc1psgpl0rm70jzdcy7zgmy97cyf625ga9g2lafjgkzkxyqf7edg4d6su3ypr0', + 'bc1ppyk94e968tf23k970ar8jp7xdlxmfptl6jg4e75sps09xhq644mq6rl0uw', + 'bc1pzvmnwjsj3yekhh3ay2423j95dt9lnmqfud4l9y8pygr0udc77hjqg66fgm', + 'bc1p7fctjtjnns7lxzve9vrdxq8sv3t784cz07j8nuklpad57vk6vl3qvvz46e', + 'bc1p34ys2mulhwen2ftw37rxg8vk50lnq8sj6fkeqnjgrgkkrhh3h0ks6e7h7h', + 'bc1pcc389qjz5qrqqaxdexphmmfv8r7uu3yu5wgu75ce758np7f8x8fqnzz3ws', + 'bc1pg5c5qcsm5w28xu7xl7j8d2qcufs0jwx667y56y3hth8284nd2grquy5lj9', + 'bc1pvhrwvfazwxxczczear5gvkfxz66qjg4s3v3s008q8akxxhjz4qhqj7w6q0', + 'bc1pc53llf3d2x35jxcjgaj07nwzllrykk7j3we9xxqp8dg2afkwez9q2w75m6', + 'bc1p5llv0663xv4c27qcusumvuzu0dpxh6a3n7lrsz9l3w5tgahrd0ds7l4ec9', + 'bc1pu7rcwyhkn2tpu5rmsg8hqvtm4qjdnu5pjc6rtjs57g62pm70gvkqjz2ev2', + 'bc1p4z4ktct2ascyu6lcpaehqurjj6lfa28h3tt6qf270uzwa52n5t2qrd7xju', + 'bc1p7znnw2xg8udpu5zpdlaztq86z3qtkpyaawcaml3vlngs9mvaf3hqmf95gw', + 'bc1pf4l0e0w5m68ty2a7cwhxjtzk7ylczwtutdkhga0yt7wpwz4psp7qg5f4mp', + 'bc1pcwun6ay5qvd0snq07jx35ectrd8he4vdsmurrckq5qhujx0079fsverkcc', + 'bc1p27rn3sxhzmlagzeghu70978lvklhv3mfs6tj63s7tqurzhunyx6q24qsls', + 'bc1pfhq464klk55dwsd4cx0re2eeuanqdyle6vvvs2pjk9efvyz508ns8evcu0', + 'bc1pgzj63axq0r23r5ncmmmxxumqwnz03sewfp0t6w5qhguwfznmfa8s0rtyve', + 'bc1prshpg4n0lk5n4a0wt8z2r7g7pv687uhtwmekxta0v3ch0hmlxdhsg4cpru', + 'bc1pma9zyn8uxqfprfk363hhw9tk757hu3rt2e0v3dd4mu4sr3slvf8q67mlpg', + 'bc1pksl5yjcw2hv756crmszmcuen89n8y25k8dthc8lqmvqnu7zruaqslp29ym', + 'bc1p7faj7hnzkwwd7nyee38r274h6uh2gsl6na0rw2zq8gdg7sgxsa2q3fu3lv', + 'bc1p0gwqh6gxjwncp5qjel0dfgduhjkml68xn398nwkcpde04s9r2jdqxyx92u', + 'bc1p9ycpumjnj6tg6gd046agx5wm6ljx4yp0pjpvvdp0t5r9gpwwn2psq69nzn', + 'bc1p4g40vgtnf6upydxyp2z3ps0v2s78dtysrw2fgwmlvkxpg5nkxmtsjepau0', + 'bc1p6yrms3fw5fl8y5gu793vrleav9cg05mjlxz5x43pqw2aey62zecqxx3jrj', + 'bc1pn0jc24la557zuc3xywvd47pw5ulj3q58l6asvtgnel67chl7452qsg03gg', + 'bc1pcqe8lfx2qz657dnjzr70jx5tgy242htehagazmknulfclk9ur78qc0f4c9', + 'bc1pmj6l5cvjd2r2wsql4jrc4rex4nmlmu42mxzwzan5lj6njyywmkpq23slvd', + 'bc1p4wfrf99w2xpq9hwnwzlsr0qqf03phr836wxpgau69h6u7r8c962qpfm9xr', + 'bc1puz9pqxcn7tmau5gapx4gwvzfkl5kanj0gd2udvpz259upxg9cfjq8pjgyw', + 'bc1pjy78zsff53d3z03tygn0v3e5ef5utdc0y6y09cuw7n0s7ea3839q990yhg', + 'bc1pjn0zy4cndmxnnj435gj5y2vft05u48dwv2l5s9l829guun60m9rqk6ea24', + 'bc1phddy4hjphxnpxrj9rn8hn9p8v2ple42x7mmwxy0ag820c6q8v3gqddrg60', + 'bc1pwal0l3cvmtj8xrc5ntzhyyf9rwxnlhus7d3j7wp3ryaesd986jtqqa4hgp', + 'bc1pv3a5drhse6zcnmhwmrlwxl2uzekradwu8eetcn8xp8jnkwh73e2s0p89u7', + 'bc1pfcd7as4f0ldj5lv287cpr0hg5yg2q57ccwell35n2de72tnrvtdq8m620m', + 'bc1p6s9ewc2alshmq9s7h6tuvvcvrewxuddx7f22uxxu7k4sewsyj64s6s4ks4', + 'bc1p4j8r6q4xl05u3daplrtndqrstdha9hd2gukzwytry5hu9pgzultq9c4sn9', + 'bc1p3cw2qpyetqad50uwx49lktsr0nut8van7vtyg0587dfa4ez4qf4s3z8cqq', + 'bc1pz4uvma2kg2tghafdp07c9vupn8cpj4mwu6zw89r4vscd59td3mtq0ldwj8', + 'bc1p3hmw2pl08s5ssz0rv4qusvj69uz3znfrfp4acz3ww0vwek27t5ns7dx8g7', + 'bc1pdej6gyesjz0n4xexgz0w9w2r73dqr4rpdxa4fjmfw2984rhnn4xq4vrc6p', + 'bc1plsz4p5cy4yrfy5q3g5vzcuqxsparpvc98evnxmzcqvkj9p7fygys0yhda3', + 'bc1p25tpzctvazx3n0exwh2h6z8tvtrerapxk0kj38jemsr3wjjq0h9q5aq22s', + 'bc1pszald0cjkd7paevl2m0fyy43ktcscnmzawlzzf39fvttvml2xdkqgc6t7s', + 'bc1px2tptt6qa336a2ufxjwy344dnp09l5wp64h22ufsk8h49rvgrtystaxypl', + 'bc1p0ndheztg3ha40w32zukzxtj9ma6uwaykya5v4ukt4suclf0e674q7f82jt', + 'bc1pq6e9tch4xdqflgfhk5zgfz94xzm4mzddp9w9q8leqtvy9vasa7esdyx4yh', + 'bc1pe8t5w4l0p8v9t3hgvk6xj7j0haslq3h3s83mqxyslpygj07t3qxswxr37n', + 'bc1pm7x48ftez2ueg79y505fgy9vqjcxglfghqdpzkn9pe8qkdcr8qaqu9u9fx', + 'bc1pj4s6t56hzrdc0qnz99u3nwuttwwawc9xj78gw4cm6hwzuedgznuqsxtqg3', + 'bc1pdpelj2gehxxmrxqzf980wmwgfffnthw3muvsccpk8ms0en5r274s75agpu', + 'bc1pup46xavg8egvzqecnfkgn6dpxu74jhs6p8mjpkjc0n7t6hlq0hnsrk5hd4', + 'bc1p2nj5qavzru6uta705k37axrghswp42f7kdqhre8nmuuywfdkx85qtwxcuq', + 'bc1pk9ry75u0d99qwhs4ynul30xfmkfgwzq2cddxn5k2qek8uqm02h0sev22mt', + 'bc1pfl08ethnczmxpq0kajpm5ew39smvmna2xsdg3yfuuk77ld4ajcjqrcl3lg', + 'bc1pyq5zp5589e3ttemrpg6q7uf8tcpwuara2pfqgem3j47xtju0mycsmgd6jk', + 'bc1p8tjgq4mh5rh590lxccaxka8l5cr8qnmwwxqqw2fj0t8l0laradkqwzgy6a', + 'bc1pjs84jrng8hn9c4dgtqllurckfg2uku0uuagnttxmw26cv5kll5lq096z8r', + 'bc1pccwade3985pxrr3meykvd9mtx04dlzxedlkzwh8y8ew5q66klvrqg5mnhk', + 'bc1p0j6v6wkkdlldte8nxutndqqnyhmhszd2ljv9qtu950x3pktafk5sg95qgm', + 'bc1p4rwfd4sre5h4s9sz68w8qada7evthd3lkxlz0ae5t58kal22qpwsmy6swq', + 'bc1pcmylug7a54hg2stuy4xcjty6n6g6cetvml9m6v34u7axj28j09hqdzkj5v', + 'bc1pz52wmvmxssy4u5mpfufw4ap7kaac5m9upnenmzjx9mjqff2xy23q3qmf30', + 'bc1pqa7mta6levrdpfpp08qss068g8pwhd7fgfqj5j5zfgs29xkdkvkq69zdfg', + 'bc1pfakttu3pefht0n3va685l3xyl2vg6hxvzzgzmxj8ggrg3hsft9uqxvzml3', + 'bc1pquj0w88vjcgcuyrxclx07jmazrx8kthpjxfxrypc0wv6emakt5eqcf6ytm', + 'bc1p2pf4fmk7ygealkde4npfedc8cm4g2rnhvem0zc4zlrlvxfcjxjdsyj2kgv', + 'bc1phz7k8mfzvrhl2cqzvcnedpn39e4hjlu36g54srxhlza9sh3c93nsgra9g4', + 'bc1puujcaaumksz0zdrgaxahnytfep922kgsl40wj3g4sg7tf7rxv8nq5ay8zm', + 'bc1pzvckzplq68dz0u0v97esxc063640dq8fah42v4hd3wq39ychfpwsv7use7', + 'bc1pfx3938sdvkylz5rjgemvae4jfy2lvtdfnemgfevedp2vtk0q0npqp28efv', + 'bc1ppkryqg6kq73atsnz2pnzungfyr6ayhhfkjgd6fgcnnfv7hqpve9stwsat3', + 'bc1pyq8fxfh5zxgm9dmsekyxgm7mezerrf4rg9mhzjl2vena4dystq5spzy5lj', + 'bc1pcsq4gc5dxmcwarjavj4r8ncnehm5xgkyrtnjupeueauhj6wykrgqj04yq0', + 'bc1p9j64vgmzs75y9tm07mvevwaeves8eyzycpwyfz5txjnw5p7fr5astvvyye', + 'bc1p9u43avj6u0nf3vevy4c0drfve5c2w906dgz9x6w2wx7xak0j6n8ss0t2p0', + 'bc1p9r2sj8rtdykaq6n9m80d05qrw4xpm3d4etckk2t7mjqrwtcslx4qdvhsy3', + 'bc1p27c3vaw302qhsyptk6gtl3m0vljauq4dnq38nhsphq8d3wygn27q6lmdgv', + 'bc1phvsnfqfz4dj5v45u75zxmdhqjchvw4rzk30hxpaamnrldduejdsqfckq79', + 'bc1p4xu93awrd76w5jj9aafu8kzfdx3mzfkags77l3v63yxcn0ne6x6sx8luhz', + 'bc1pkllkf4vzvcgs34d6cfj7fc3zankpeuvx8c02pstccawem3jvv9xse5x3k4', + 'bc1p9n7ffh8637fvtxczf9lyjqylnj6gahchs337zlh5pm7m5h737assneeecu', + 'bc1pnjzrmygvu5px75qdlfxcfh0zkwuza5c0uptwulwjqh2lrgyw2z7snynxrt', + 'bc1paj5g066zfq4rsvzfwqazex95cq2svy49tpnlt95ex0yw5el25pyqkq6wkl', + 'bc1plkkkq8yz5pwl984l46nz9vx03lyvrudwpxheu5c0dt22ktxqsdxs3jww3u', + 'bc1pr63f8msjp5vc3q3dr7ehpxeykg0fq323v08jtvz83c6vsthc520qf559rh', + 'bc1pmzervjhxxkk485j53gq0zrx9gxzjgts5s0cgh2rdm2ulf0a837nqek8hgm', + 'bc1p6reaf4thx3exatmjazqg8e3rr9ren4kgs9nzg4y54pnfvmmp7luscr05f8', + 'bc1pxsa097ef7j4l09a0v7xeepfy4a98n7anh3d6clgy873qz2dvt5msqhyxpz', + 'bc1pg6jn5q4nccdex9nuhmshaqm7rglh7hf8wfcewjunt8tn9zplcx5qu3tqjs', + 'bc1pzatedgjr9mc99wyqd6vl7dvl2r02pjtvhyf0e3fc3mg80q9wqpaqgeseks', + 'bc1pccpkwdyyg9rmzmrkdvk64eh0ua6huw5mlytvjuh98p4r6mnttxzqd6uujn', + 'bc1pa3yec965gsu2pmka2m46zh4sq2mmszzq75z0ypfp92zzusmg5s5qar5k7s', + 'bc1peucveyzk2anseau5epg9hj5rd03t46fkrh5eeyqd4xh3s7kxsydqy5xjqc', + 'bc1p8z8swv0ugyy45kpyr37l9qkzsmkm4llseuqfna9ze880tuzrduzsuvgnaa', + 'bc1phpdwae7rx6tdd8wjjr0enf4yyxc7yjxehm4ujt0g8urckhekddmq3amkps', + 'bc1plhkvppd35r0dk5fkzgd5gct89hp9xd6p8edy7ahf5gnaxy49uj6s2xh5w6', + 'bc1pcu389kpd6zh4v0p52k8p66hh5kac5h23deye7d0lu27rdwwn96kq6gple7', + 'bc1pksf5aunqvuuxrh2cdzypv84xqwd5fc6jwplwlp57tdwumveezz3qzfjzyw', + 'bc1pm79htsspqwg5pkfr4cj0gfkt50qlzk303dzt2ghs7chndey6n60srvtxge', + 'bc1pr4zfxf00tnwukfas7fvdv8llhzlxjyueyhmg2tq2wnhw9qeqm8wqlw65nu', + 'bc1ppx89g77xgqy27f3wkkjyeuw76l54uz4nchnucnsg4r4ak2ytmwgqp8x80e', + 'bc1p93vpfq3kfqzcxk0pwcazgk8032x6c9nw699a3m2wtf88pcvyegnsyctqum', + 'bc1pmqkwjgu3nkqwyeccuclymyyn7ghvud29yjrc554p2g8sw0h5v8kstadu6c', + 'bc1p5uu8re8dr7fy4ntks6em05g2z3ct9g2ay0ccpc5sqquqw6ntzknqsnh9kg', + 'bc1p9qyurwnnmnzxc9swyszl3m4sr272mmfewygq2yae3vxtll3f4k0srjk7ml', + 'bc1p6rjsngceewz96eyn5larww99p52yt7zj9uwym7yz83ljgfrzc4jsuyffn5', + 'bc1pftcm3eqcs0y2z92tn9fnltydkpm22l02cnlhqt9hf9eudurlyf0qukxyxq', + 'bc1pnqn3l40cj659035vgnygvutv04zu6qp8sq50wttgrf3xfum3jwps6fxl7a', + 'bc1pgcat9q6c8z7g4pa3xslsys7pd0vr0hfdtgspujd9e9u5mnur9trstz8qhj', + 'bc1pvcwqr2q077hj8yck3uxjdmysmnpspksjgyw9uky9jr7w2lkzau0skyu6fp', + 'bc1pazpsg5dyycuh9w30pnkpp5j0l4kcxz926nujwt3j7a5trj97u4nqyk2tvp', + 'bc1pe6vjzxpsw6jha0c25medf8zpy2z03xqruele6835nkypgheup5as5u4dzx', + 'bc1ptjp8t699t6tqhtsk25a4vfvm8un9z7frg4a5ex9esgsy0p68q8vsjl3f5d', + 'bc1p09eecy0j6l6yaq0frgdjukhtqr4jkgs6nru4kuk93ndsry9pvkzqz4neck', + 'bc1p0m37e6t7w50wegq4tve6d2v6sj0va027fapqrnacdm3v8n4f467sefsxdz', + 'bc1pzn75wqyp6hn02pnq3e8v8dc2nvywzrmcjcrapwwgvymv27alzg9s0g83t3', + 'bc1pxyxc9t8cz3qf345eu5sdze2revwgu735rqwwh8af36hus5r605pqnyck69', + 'bc1pns9zxqhuklscqfzg66yjw246uhk74nmlqv0mmlakc2lefx7mlf4qn40zlp', + 'bc1p08d40glrlh629rqvwp9wd5t5dzr9evm3847zcnswz9alry9gxlcsuefsls', + 'bc1p96g6jvlkuvjcpc0rgsppj36q7ul9nyqt30sng334ey0jrl22uatqcn6w2w', + 'bc1p9ruwtdk4aveuqlnynth2tdasl9ha3gmed23k3uj4ydygfjlzmy9shavjqp', + 'bc1pelarnmq5u3k3v8u923eqpd0zgn39eekunmurhcrzwehd2a8uhllq6x76xa', + 'bc1ps40qs8gq7lpqgq3t56u32n06dwxchvqdzh99ydx882ccp0uq63gsr9cvy7', + 'bc1p5dt86z4zeut9u8nh9p43vlzgawylw8mnq7fvyrpvg0fqhj4hg4jqmywfrd', + 'bc1pxpk0rsxruj6rk5lpefa5zh7w5ec9e06gh9nge63m264ll0t6tt6sg775f6', + 'bc1pjknyuhf8xj36squ9lgxpqam3s9qgh0krasrrht7v7hdfnvqgvrlq9avaj7', + 'bc1p9w0cyveev8dlmjrjune95nkytwemjc8xxhv6xtvyuv59kzxnacusgep6zc', + 'bc1p6up5u3kvzksnxfes8u0ux35uzr6d4r738lkxmwwpzdvha9ltzyns96mde0', + 'bc1pnr54myjm7pup4lrtudhajempz3c9t3r0v6s0688d3799t5lt6u6su34aan', + 'bc1p0x05x3r0gx7353fwng7mehdmsn2cvq4d82kvw2yrzu9fscnehers20vmsq', + 'bc1p7el2e9akt63c7z5h8x44skppwhdc04ld47cyp6g4sj57z4e52tpq7pg0yl', + 'bc1pvuw7htlmg4emee4y3wkv32sqgprlcajlm7rk96rkqkawssxl3mkqzjyh9j', + 'bc1pnaky3xt6jteuh0q0ew46mdx20xudppcvknh5exgekyyplr72regsnjgew4', + 'bc1p5h23xyn7e90ya2uvtmqpmw3mrcahz0ktl3w57shn3kute7dj534q5xjr0k', + 'bc1p7vgzqvvpnjyhcxt8a89zlpz2nxqzuq25r4dk5je889zyesxuwqlqj399a3', + 'bc1pfcd4yypvh3x6hgmdajmzwxyvydeljky4ueua84dxlcr5uvgc53esagfmyw', + 'bc1p2fyvyvxvgn9uulhnyaczuyhtwglsvhcsw7rsvptz7enzywwjvdsq6qlzzy', + 'bc1pwh40gsptwu590j0al23hwa68y4ptqkmraje00m4el7ngfkgv8wgs09d4xx', + 'bc1p2cldshhxnj0fkwr7rz7tjqyn7rupz8nafwwljrfaam8n8y9tzuas473l2w', + 'bc1pz836d8x4qxs527nfle8rs2yvwme3xw6g72m2wakwegcz7nkceqwqtn8ckp', + 'bc1pdmkvzjcd9k9zxppsyrtpy0hklxfc3cd2wdqfheu7kj749gyhalyszp6t8x', + 'bc1p26l9n68f9za4fzxq0vsy5tz2l3rxvkenpagefd9p6045aykwnrfsfawpd9', + 'bc1pa806c2ewelpyh3er0kln35yty40k6f5lv3qmnlykr9d6js8e5mds3nehg5', + 'bc1p8eg9uc5gupjgp9f8xz5fls6920f74s4qqew9yusyrmesnq76t9equkh95q', + 'bc1plzqu6wf2fr9x8f40jxp2rv7092daew2r707wclxx6y6gxf5v5yqq4ksvkq', + 'bc1pgpr8jqal9avulr5crs7s43h9sruh3r6fmfkjm752v9mnwnxw66gs5fev89', + 'bc1psp5murlkxghvr3vqvvz9nlrve7j35smqrywm5yfj6uunxwxuyy7q6jzyjj', + 'bc1pu43kmh7dchftyak7kxkpe3y6y2l0y7334vapjgvh464yhsmcn3wqma5qyu', + 'bc1phrr75wn2f8f3pm250ufu8f4ma28e5k7tfakqqmt36ymnkx3vgh0sxvlx9q', + 'bc1p4ua3pss96fhdwvthv7hu9j65v90frcmcpss8vecdmwmarn30z5qsawufz9', + 'bc1pjcfhcmn7swgunhgvsypz2wlxalsczcvwtsqn5skmnttf2rg7gd0qsdys2m', + 'bc1p5n2q32gytmaatv0w2m2kns6esmmt4v0ekwxmqyuskl6fjg06l2xq0900eh', + 'bc1pxmcwy8fdwutu9s9z0qhdsa6gua8978yxe05k53w90e2c5ga4n2cs853xye', + 'bc1pf3dnz3zf8m00ec4c2ywkv79jahuxmygjhmgnzl5rak6u7nmw8lwqcfn9x7', + 'bc1pja0z4nedz5f7ap0tayx0j9d08lexu78tmv8t0qcgreqdgqw2pnds93uhhd', + 'bc1p4ew7dshmlcsc0fyr02s7v2netwec9lmsjrn4jha6hjfyjssh7xlqjlcmmg', + 'bc1px3q3kehg7mstq73ynv3fnugxn9k8sxwhz3y7re5jjslh07yf4dpsq7gwmf', + 'bc1p74q6de4agh7u4kgdcf8f2j20k9gn5j0z25sazygk6mk85v4yjffqywx0rl', + 'bc1pmzeaersnk7xr4n8hzdnnzklwzc884yus9sanntjmkhng5sqf24fs74gsst', + 'bc1p32xsn2zgs38w0h2jytzuz92v7g3sdd3yyw48yzp9y0hgxenme44snja7jh', + 'bc1prr6jerhav33unyydnl6rm5glh0xtdmnvh2ljn77wq5a2l6vsldls9u5mmq', + 'bc1pny3fdjmh8xs5gwcsy94ymr7a7lmn0zhe3cheuunanan0vhejh3csa4wn5h', + 'bc1pgpqlfmugn84khdt5qjlcrq3g4dm7k2kjvjnva5k9umejza7tfhpsmt7rf6', + 'bc1pg4j7x5uddfnjjjdh28wpk8wwjfdpfyers4vnfw48je9n8lzl9amq85n0cd', + 'bc1pnpwnqf5qfkw45ef7e9w7g3eprucmq86z8eunte9syxn4g339w9ksctan42', + 'bc1pl02lj3angsh9t9x9jyp5924kq0qnm5xknxeqjkge9h4u6du5w8kqkwpgyx', + 'bc1prsn4qs623gksy2wjs2lx9y8yu3ljlrfr6zhulg4de8fn9w7tj92sq8dnny', + 'bc1p8m8yps35tav9xe27kkgyl9a8cy0js66u94cykegmzq32tfunpscqyuvf5t', + 'bc1p537seqlcpyptknwrdajt7ghlr38k2lhkptugyx35skfvfzaqgk6sxa6j8x', + 'bc1pj078hf3ahntahfswr86ran8p0mpnvj2s4j9lcveytk9pwgjaztcqxz8q5t', + 'bc1p3yadm23zyskf64q7my8pen654teta8fk48xn2xpmtt7w4dr0sdeq548jm5', + 'bc1pkwl0yp67qyj226z93825gfekl8gnz7x2jglq5vpeym0ph2qjlexqdtcqye', + 'bc1pgmtdvweekd5xlzj6n9y3rvgrjspj6s4p2ha46ds0gw9jmzky3ajqthup5n', + 'bc1pdz2n509kpf0d7nge909lfnj2rzhau9263m9sysatun9p7a7lrw4spuvn9p', + 'bc1p9ga2ex8znzq85fl3cx7p6en55de7ugc0pjh806psuw3ne6afqpfs6rg88p', + 'bc1pz62mm3xznzkrpcakn5nq9s8tk4dfhlzu20m932rp233wydrkmgjskzf65x', + 'bc1p4uudaw0jdt9gj8fa4eqvwu9wpmls8crpuc00u6c2ud7j49mt9ycqafyypd', + 'bc1pp076ln9yydjvr4pdvaf008jmsl44dmfp29g2czjen5dnyn0wr55ssqq9yf', + 'bc1pguk3yx3cx5fv6nul8s2mjc86sga5cn8se58kxrtzg3uqm0malensc6y4nq', + 'bc1p86puqm4nf59merxfg7rxndt5lt3tq37c3ec8t8xthtm3mr2wkecs8qun5d', + 'bc1p7j4przr20qj8hke9x42qkurpguz8erjsl6flgntaq3c7n9e2eppselp3ej', + 'bc1p8475au3wf6jl8skmjzfhv7df5q093p6nvfuy83kvcue6falvz3lsgcgfk8', + 'bc1p5ep9g6s9ju6qz6rky0zxnj5jm5layvf0nsrggj8amjgwzxrnnddqjjhaqa', + 'bc1pc63rwjmaxejlf39sls2gwafd0ef83x2rc65km0jcqpqsx2508d4qys9cyp', + 'bc1pyjc9ngmcve2t2ww4vq6ph7fl4hs9vl7xprp6qtursdrahpz0w4xst3j5at', + 'bc1pl5u2gl5vtx846v3z4f73q0afuymdue905lwdl2dnf5q0kf9f6z3ssluxt7', + 'bc1pmkdug7q8wqakgrwnsp55he268n6mddst38n77f0nkd7hpx86vjhshakcqr', + 'bc1pmny9vx2suwr4a4yxj7j0xm5quaxn9zr7y69945p9mnkdzvmfk7dq4tfuak', + 'bc1pmenp2760ha6nmxna76cjwer8cm8erkc9t609fj54hqx9cqa5flpqs78r94', + 'bc1p523rq06nttp9rrjcn2zrs9lyptrr2gm0ll0rpmmr4exysfn6j7vqpteyxg', + 'bc1pfej5ggyee5xu0x8pgwsqxlkn22aw9y8jvep3l2s0ju202snq7zksfv0xye', + 'bc1pffrjhgh4f3ssuwaajzrd75prscz49kl9702fvfl5yznz9tj2czysc9xfm3', + 'bc1plefcr87theqzzdhgdspc7rdcj0gwy7w544weewudwu92rhl7txhq52tsn2', + 'bc1pal3r95n6czwfdv7we7qyle0s43cds69hsmtvwcwg95hw6ux4ca0sdpx76y', + 'bc1psnmjhhmp0l4rvjt3yreaf293evq5ca2736ddmrl8r4efjyxc2d0q0sf9pw', + 'bc1pgp2snnt82y5kcuucskmu637skt88hcmwfuw7jukwurfzu00xfmzq7aduzl', + 'bc1plp5gxlklk664xdh9d3su69df6mtm4nkrq5xfydp9ka8w6z94c23qa6yg50', + 'bc1p34m0akh5lapch5v07mcr2szs6nkwp0u7l64pj44are9aqm7yqfqs9ynvgt', + 'bc1pgr0gpnp9kn3277qqx5f9psnl8sd0yufp04rzzv67nwdth9ncghes0x0mgj', + 'bc1pkr3x67094sarvwcy9l05shjczxskk45gq7eveurxpds3hqm08uqqawenjn', + 'bc1p0sas0ly6gulcxu6z0uznyllreqwsan635qvx4d6xdggdw34lc65q7tdzf3', + 'bc1pmy9mj0ghgqdal0qhy4z6m7wwp8varfz623j3wsf37kfzpvmsxussyr6n00', + 'bc1phmamzsjftuz7u5hv7vncfs3dcfgh8e8xd3lqss8yhum8g8m4rqyq52vcaq', + 'bc1pjtqughcwtcv6j0hg25gv34xk5pn40makmqlrr46yxaqrsl4lvceswj6ykc', + 'bc1pd7zpaxy4h6r8cchmwczdu5tq9pun09l8kmn45y5ys0r6hccmrcwqc8v4gf', + 'bc1ptkgv70vdn9uymn8qqv0e9s437lm6l0rq0fqj5t6ec6qn5tqutzfsz8uq7a', + 'bc1ppjrc8j72384pwjdm3fk8kdhmyd8vjgan0682vl2ua8k4yxj858gs7yjnnf', + 'bc1pl2jmyw864g7vv2anghtf4c7shrc5jq97e24f7emmjdj7ktq6q37qrzn0zu', + 'bc1pe0xyj63z7yvdgcsdmqt4urdfm2xey30mqk4mnjmxljyzc7yy7y0s9w7edt', + 'bc1ph7z335s94gs0ysvu2sw0e82h7aw2k0smase62c9376yv6resmhuqwq2vl7', + 'bc1pszt4lgddtdhrh057ahw6u6qr7t4q3xej5wnfp3zd248ju7gplkcsqqzxdv', + 'bc1p9jwh42vergz9nyjmxk440mct37ux76nz5434xvsjhh2ekjfgmjtqhly8h3', + 'bc1p3l6gzhh4mgxrqj4muqkgvk462v6zdewn38cck0ye4ckxuc5uf57sqzwq6q', + 'bc1p5xn70e9pc6kv8qky8tr6anjlkahvygc2e7ej90m2yu46smgdurkqlmfgg8', + 'bc1plgvnm5rq2au7dz4tuf8xw0d79x2h7859f9g9ek98du50cccn586ssye22p', + 'bc1pt7a7tnrj5cd7snjpw09rcks3clm88krunks9guh956t0trm43evqasql3n', + 'bc1p5auc0c4qhlshrsshasux2tujen0ajcs75lmk83nrnss74kv633tsg2y47q', + 'bc1pkqwps7m80g6fguph9jgmepk56nart05msajk4gul397c0vjqncpszgw9uv', + 'bc1pcw0hn5xy63nm54m4uzxxzsem458xfj0gx4s5vj5yrhdu3xhr0jhsw0ewcr', + 'bc1p7hxs7s02qlxdtcjdladk0c85yx8dez63jz8qdakk3z523gc6ushqhpv77z', + 'bc1pftffhkqzmfmf0zlauhm0ewxkxl2qwdfzf5tytvdxsuht7thn0yqqzuujkd', + 'bc1pynrvffj50g9tgs0vn2eyyts4gd8whycg55d6pvea0nwz87kf87zsf4puhu', + 'bc1p20jep92gr8mcptfc6nervyframrzshxrx5ye3t6llp6fdmdukfnq9zwuwn', + 'bc1pr09t5u25lr4aplwxvuucvy742x4e48egshq8eczx24vlh9aktrkqrzpz99', + 'bc1pakxha5a3va4rn79txschreud9qr9unwd5rd5xf3aejzn568llpeq00mep3', + 'bc1pwhkhs68k6q54d2vm4y9nrzm0pxmggjxre7p4kj7wm7acyudytyvqpye2d3', + 'bc1plexf7qqt6zzpdc2pex74cqpvrpjhgcqn7h6lp7d9f4y7cu0zql7qmfnd5e', + 'bc1pykfq8clmyau89y3mvt6lsm0rw42hydhk4fpwk3t2f9kmv0dsxfesqts67m', + 'bc1pxzlzq5pazg9wf5cwd4qm42ldv0pamzhjdlnkgchpxup0rm7f9ars6xzq96', + 'bc1p5tv5hdfd737lmtvglj6a5era9uukjsxterlv2ne6e4pktfqhw2vsjrw9xr', + 'bc1pv339ydahcrc5l4t805rhhwagg6pdep6zlgfe4z84kltp4ykux2nswxryk3', + 'bc1p6vgyvlqq300aclfjmx5p2kuvfgkznq8a603j9p7fu7ersarh4w6sdpqv83', + 'bc1pyvghuecx32ml9wpq9przj5y35kenjkn3khl3j5r33g03n8hx7r6q7r7t9g', + 'bc1pq4rr2pu5uux5098rdp7qpe2akyef85u3hchfaltr5epa6r0yemcqkrcxp6', + 'bc1pdcymtfpqfscerv787gkkksjcpsjj7977dzl9rsadvj7fxfwvvzrssxleje', + 'bc1p6uegtrdhdq8tdxe9rhekctmkm2l0gv5atrucdkd482m22r5nx8gq64jzwv', + 'bc1pysm0uhnk9sky4dmr0nk8d99tks0c5p3n6mex4dagvjuyl74l3k0s9sqvrd', + 'bc1pa0qrlxqshjgc6ytgycgwfdzkz0svy5tm744cwnc8q2whdtgcjjtsxzkqfy', + 'bc1p3zdj5r6gfq6l3nexxjnyylwtk3szntwcs99j7pedyvjp930ya7sqs0yjdz', + 'bc1pej7arsqqgc0ucggue2xlr2yqfv9re2eemctskqwqv93mz980gyws6m44kt', + 'bc1pqgexvgnln9g3jv9cdk5gfuwk94qx0cazx55fndzks0gjpd0hjctsuqc3al', + 'bc1p2yxq7kzue2nmlu92gezng4z32x6g5ka7k6trftj8a42zl9c64jgshkqm58', + 'bc1pkd9arump85yy9nyjng3lgm0272y8ne44z3j65v3k3r8pyzv37zmqp4apgk', + 'bc1p5ls64xdx47r20ygvewucs05q003cttwuwj7t2uvauypf0aeny0fsu7kwum', + 'bc1ppw9czgjcmk3t38xezc4me90dq6e7yyf2gt00mnn5q4c5esv6l9csh563qn', + 'bc1p3fc28a90j6ayx0snpfwkc98447xdvqv6euv6rswt4dd22yxmx32s38yzk3', + 'bc1psen0kgkez4n0jpekukflet2yqmjm8gq5vqcdxdv69lm6szld8q0sz0a5t6', + 'bc1pnmwyse5x69ya6gkpj32wvcu3w4z2v9vqpl59cu9qa945j4ddhf5seemt8m', + 'bc1p50k8fpwxcz70w97fcxxr3hr7e6tlvmyw2alxu6vm7um2d6mnqzgq7cx8v3', + 'bc1p3fxcl9cf75n9c6rd3c6zgna8xwzsjq2zjvdx0v6xnt9rswqtyk7suqknvc', + 'bc1puaujxwps4w9jukr77v3ypswwq6cpgmnmdqfhks383av3v6kawglqsjukly', + 'bc1p5ls64xdx47r20ygvewucs05q003cttwuwj7t2uvauypf0aeny0fsu7kwum', + 'bc1paw036hyuzup8zkc4y8ts2s8ndlh6eyv5n8jjyl9394pr7vqlr6ssnw4l8k', + 'bc1peu0sxm2u2wqk6gx2ap96n4hfqlnpts4g84m7uae6ejsjgj24zhus6q3ws2', + 'bc1pjxmtvrys0gx8kaxxdju3fr75ueg48g7ugk5h4pjuy2ltf36enptsg83wkx', + 'bc1p2zk8d9f8wcyg7gr5yq6n2gyedryjny4d7y6pmv7zzl7zjex0kakswc8tnn', + 'bc1pf2p8pcmnv7ssekf0uvx55acuvs40kehly5430trmcufftw0jupgstya0e2', + 'bc1pdf6yyvz5w6zqesc8t5geenxra23mkv2xnd465wras9jt8ed5kz4syg3wp5', + 'bc1p2andmz4475q7yl2xdurnm33fkun8tdmepf60qgrl09rnzz9uttzqd634r8', + 'bc1pdg95fqjg7a66sj8tnppgpj8j9ukh0qqxd6fcf0apt9wwqwd5ws2sdxkry6', + 'bc1pg402ucm2cz2a0et4mkmxmkr3j75720zepdtpee4lqtdy55l5yn8scj3t70', + 'bc1pfyu87rcnnp95qmxz3l6f6grk40ut8ka7h9z5n3ummr4x6tcxxzlqralu4m', + 'bc1peruv2eealm9zn0ksxlx55e05nwxydw87rsg8xvf35sudrla03zhsmgssx7', + 'bc1pjelvgqecnarwe8m94kyssty9wg2kvdvwzqa9nmgwpz88gxnm5ucsd08vvy', + 'bc1pnhvhpev9cjdfff99aupnjwrvpxpxqznyxvrvjx2apsgpmqmmn2wqdfgn38', + 'bc1p6m56r8asvq33mh84dr4f7nxg20zmxz5dy76zulavtv60d45dppksszrx39', + 'bc1pedh6ntet5my440ullz4cd9cpxqd770urahcjy4dmp2396tmjlrss2df9gt', + 'bc1p7nxjhxwz42au8czxsjctuz0rersy5fqh4488k0rrale72ccgwcyqkpnvxj', + 'bc1pgn4jl6ckx07jcwp36pvg258ztedpkyh7msc9tt9vgswdep8rfqzqygdfnh', + 'bc1pwd2u606q4ft5ueh7gkzfrhxzffq37hspvj68rkjx6x8jngy6rfnqwjrlt4', + 'bc1p6x895u4l5pjdvasvr3afv9zv3gp6ky4t79gdjsv2j0587wavf9xsvw744t', + 'bc1pp4dwfps0squ4dr4srj4t0938rllfsefnjctun8aky5xvpctn9hxqre6jhx', + 'bc1puy9jknghzw4d96hux8kxun27ch94fjn23zdqlgkwx6c803ydsvhqka8mmg', + 'bc1pd059ap923050am3xhau8tg496qnu92wd0kqqd9uazkst0jfy83nsjj8jkc', + 'bc1pe85nk65mpylrqshfqe95d2pvxgp7na0xu6vemf0j2360uu2ea2sqlvdc2f', + 'bc1p3yggawdq8zc3mfqylhq2zjw4sxf9lnncmdpw9x203kjzet0ujqlsvwdr8h', + 'bc1pgzkf3c4347esf5efh88r43htdksqyp6txu2uh4s2pjlrptnywkmsh4zapx', + 'bc1pycz25aklxpysyp0y5nysze322h4a6sz6xp0nlnchh0kffkmtyhaselugw4', + 'bc1puv874pw4dj8zhrcemhqmf4n5c7uyp4rnpgv24l57yl3x3spdrd7sr69w8d', + 'bc1prju0dgjr6xnlj0wzp2r6tdv0u83m2q0e6s4kaxf5jyl2jzx47ddskjy5ey', + 'bc1p6vmqe86enggjam383339g2crqfd9gfjeysd4f2tchugt7d7y6dxsaww8mm', + 'bc1pwxsnwklg6eecmnzygdla5r3uhan9dqa683h6uasfgl98a47h03cqqpjsc6', + 'bc1p0knup6t8nkjajhn03sfyh0v2fj3e8u34t7kvxh294cs0nt20ky0qh7ar9x', + 'bc1pjzrh5apj0xwpdpvxh4neyfhr6myddw4m9xu9kvjh72rdyrnez2ds2vyed5', + 'bc1pa8vvjr54ah70scu98v6f89fce6y2gupkrca0hzlscsqgvgxyl49s8nj9sq', + 'bc1phttpm7ww0cw8f8l604r5dqkczt32et07j4fydxq63xrjjs4tf9tqvjl67h', + 'bc1pytfzru0pd567lvdcvg2nxekp8wdl97wjmwc8ql4e7akvfzlmg4js2jnha0', + 'bc1p23xhj86jarvkwzw8em8h4xhc65v6sy0rkmc4xs0gugr5gvggt6jqteye98', + 'bc1p33xu5xld4sj44q5snc9ngpe6tc54ckz6tyz97zd66ghee29shl3q97apcm', + 'bc1puxnck2gxx0ty9qxkwmfnu299assvu7k9720ndngxkfagqqvg9x2sl3rf8n', + 'bc1ph8f5d7tnskx0et8evhxeehxj82u5wd06qmfzfmsxgfdlefuh64ysh4axyz', + 'bc1p6l95u0ufnqfrnkf3288hxy8h5rzx098l50e8le759qv40997q4wqev6sqv', + 'bc1prygcq7u72pvgzm4d3n9srx33j43dnrwgyp674vux0e8jwjsf0egsumkkwk', + 'bc1purxfjs9rmgwgdgs8emz96ez4k88z8tresrd26z3xh0keuvuc5h2sgf6hv8', + 'bc1p3tf3yfg8cdvwmtaqk62qhey23jjpzjyzz6vggpn2w2cndg8k3w6q6u8nwl', + 'bc1pv9rjswk3w0qg8fn9e0phzfufsxchmyvqdy5e73ux2tjc4plnwhyq24xm8k', + 'bc1p6u97m5ve5deglchq4jpnwym7s70whw9e6lpraw8nygw4lkzuz8asj7h8qj', + 'bc1p07z0jt9m6epy2udmnmqrsagpjpw8z8qr4azz7dnl5sem6pfyez3qe8m0md', + 'bc1pttyq3ccv4w959ll29jk2gk8p9vmkss9wj3fmjd2mlt622sl2ljkqc8agpj', + 'bc1pq34x8ahnmqc8satp6gg8k3vg7zg4w8qgjyqteq7mltmfmq0f85dquv7m79', + 'bc1pdhnthm5e2npuplaw9aa2hqj8jj43davu7hysndk04vntaehmf4kqe748ck', + 'bc1prw2p3ju7vmytq55fkz3rtn5tqe5pe6t9tjrert8r4c2wgudfzl4qdd3yn8', + 'bc1pxrkfxv8nuvglznn9cvkfhpl8fdgxdnv8nwhdvdmhut4t6ucr4gzs0hfyzs', + 'bc1pw2f2pwckcwm09ahzu89lrfqpc5jmnuqpdyyq4c90arz475dsrrjskfx03y', + 'bc1phha7w579mufl8l88yfj6fpk7pdwnn0lh927qqhknlf4297m0s0yqutnh8g', + 'bc1pz028qrsk2apzzap3k0uehw22c3tq5v23zlxetwfpevrnmuwmmglq6t77xg', + 'bc1ppvfknf46ac5apg2uepaulhdkhj74y6fa2jnj8sstz0sg8shxtvxqgwdm48', + 'bc1p0zm6nngc7gfek3ypaey8m6fenf2aqsy7ekjq9et9h5cs7k48dwdsuzgdg0', + 'bc1pf4vrrs7zjygkxa8fz4x97f4wvj3t0kvf36z8ylva5qpmdf3cfv9qexaydh', + 'bc1pj5fck0vyzgrw3j3cnku0qzdps7ncs89dzu5dnanc4p90fzqqc05s04rads', + 'bc1pyh2plmezjzhflc638wqafe9kdte50w3tv66rc0866gxuef7dq5aq4s87c2', + 'bc1peh7shwz6y2fsy832s7ffx9fynlz0yagc7n506lnms32yqc7ekwasfdua6a', + 'bc1p74kn857hxzw8pfssza8zsmtt74w7j5pmhfgqnz8lh47fky3wlx4sk3qk0v', + 'bc1phpda0xr02h87xzmyacm5vh6jxvnrpc3qphjpecgenrvwy7elnxvsqsa9nj', + 'bc1py2m7xrkw4rtqrajf4p9nmvcmp8ulhy98rn6rxke46vmvez8jddwqzmrnze', + 'bc1p6nmecs2af8nd7hwsmt5xavhuge2vnl3rqtv2tu2eg059t0rtdy6qpulh5n', + 'bc1p3rqpmfghptqs4ukf324scs7kqxr9qw0wupmnd8xgz28lmmm2kufqhsjj0v', + 'bc1pdx8e6encs08rqpjeywe8kazxl6exxsay6cr4wrnmf0mltk5uqnhqs69z58', + 'bc1p3p50mxhmpqqwjltxl28v4jta06hpstazv8tlu384w869fex5hdmq8uvq3k', + 'bc1pgs8vr8m8dtkxunnzeppfqtjst7card4ty5kjnjpcq8pw8v33tynsk3hjdv', + 'bc1p5w3nejgqlkca0veuz8whelrxk2xzm2s58902l2kn4ahecfesydaqahxvh0', + 'bc1p4jfgn8n7vwkfeceypvjn4phg62tnln6luzkd39xe4c0awleefcuq22h5zf', + 'bc1pzwm2098dx54dwajj2n9z7azfv6lq2kn30qkfhef8z6rclhh2jkwsanv55x', + 'bc1p6n2ezr4z27r2c9jy3633hx6s7hlaskjvlr6pw295ycurzxgwt6sqjvu0m9', + 'bc1prdrdhgdgsjvrhpslq743wrva2kn8wds0rhj5elngc84cycajpkkshmzgml', + 'bc1pkqv8z8n6hgfe8ym240prq638xx9sn2xuqlph04em52n2xxrn954ste4aln', + 'bc1phknrycyemqgm3r9754pf3gn2hm2an69eqsypu9fcnvfu56dsjdrqels6tc', + 'bc1plqvesppw3djkn5dqxn73xec9s0xk8kp8v0ztpe9xvfp90svx6uas0zafdr', + 'bc1pnag5ynqguersuldlc0q25tyk8za7ar6jp5ecfhy9w88umsg2760secjncm', + 'bc1pelugygv377yc208309m04445pd993fjsatajcgkyy320a4fwj8mqa8yhlt', + 'bc1p9qdf3meuvsxma4t78dznteusgc9nljecx9tpsar4qs6u89fq0gmq24sjk4', + 'bc1pmhrwm6jjkpf44mq4pl32y6nnzq22l4ypu0cnsa2gg6fwtczy0tdqje8h0y', + 'bc1pnvuk2fzy3gyt5mthep0h8hnw9ye3ttngn3yeyd07d67ck9jfrllq5qnr84', + 'bc1pmvnc94ldhn0457achmse234gsqln87lw5e3wt4kj3ft57eyexj9s0etm9t', + 'bc1pf2etuczshaqxgeqrjq387ypag6e96vqd82asplzpa36mc7ll8e8qlxfxel', + 'bc1ppaq2hfny4eusgnml329fl3c4ku90er3rzq7f9hpd5a77m2spwt7qx47vsy', + 'bc1pdyn6hgl7wtjmf93l3xkm52a6zffxarxgw2ure86ddqhz6mdnhunscm5mrj', + 'bc1pkuv5hjywjkgg0xmetcwamadljjdl7az6uepxheu3x66ad6c5utaqzqwaql', + 'bc1pddvzdhar06ln20t6wrrekvg8tdat9xgdy4egtlr82fl553veeseqtaem74', + 'bc1plegu2atvert6sw8078ydsrskmeau2555tpwzmrh53ha2269njc0sxg3kpl', + 'bc1pryukm6w54adqy2g5qjwpuvjnd4y08s5xkqkqh3g7ff32rn3rc94qrseedv', + 'bc1pe7r3cwav5g4cp4yunmnr7h3n0tunss4zjv5f3lgwcjrmjlj35seqcfuhqy', + 'bc1pazdz9q50juq4algnlqaeujcj63vns3veep3umegkhjp5vf90xl4qhz08w2', + 'bc1psg2t3vt3ljp36jupfqr3nkvnhvsxvywh83pmr5ngl50lx5hz63yq07rrlh', + 'bc1pg9wd9xswmwpqq0u4j8djsum6ln5zvvqrnrum6fa8fzsc5g6t74lqtusplp', + 'bc1ppnt2lwgr482n5nh4nq03hcd75taax3mg6qxmcvjzsd0v7fts5d5qmzn0kt', + 'bc1pnz2wlkrmr3ysy3ldvefcjkwfhu2ce6mf38tvqs082mfvuvf99zysmtkwyu', + 'bc1p53ptd9dr8avw0v989yp78qv9rpq9lzkx6zsjpnnsc99vwkzlklmquts522', + 'bc1pprgvujm68xxesu5dmwe42yl2k0x7klghx4c69pa40hwlhx3y36qq4xxx2y', + 'bc1pjh56cqd43untgndwxd4dquuyu0ym7vea6r2k7nz4jdg3p035ny2se0djzw', + 'bc1ptzqu49lfl93m8f3wykujqw8cs45exmve3cd3yg9quydcu48wycgqhhxval', + 'bc1pje57rckyv344475ae6jek9dr07af0k7y3ews278ac3r3t9my63wsp83nky', + 'bc1pwrx00356nneqfxhpycqxfgavmnfhc0j5x4ld9z3f40h2aazzurdqn6kj2n', + 'bc1padqha953gerna0clhgnghlhqk2uz479wap9ftdgegajdq89dhhdq004c4u', + 'bc1p84g9pe943hzdfddyy65r0hrtcnarnqjs4qn66pj068da6c78ee8swtdpgx', + 'bc1p6ycc9vtgg09wzzcu39hq97wrg2ggw94hn9llhyt8vwghg5v78lkqhzlv6t', + 'bc1pjf2thrzcx3g8yquf7pj0ced57jfg9gndjvk96lyrr6pfmwjkdlwqum4l9c', + 'bc1pn23tnue4764na6e82scv9n5tm8gfgsd5v29yj5dscwa8t48ca7kszafy7a', + 'bc1pw6y8vk6aesl9qnctxv5p7l2tev79l594p3dm76jcjhhe8wyjfc0sd344md', + 'bc1p078f7jcexft9j44jqnhamu84h2al7alsze7kdnaljzhx4acp6y5s40srn3', + 'bc1pc47zn6tnlqy7xeryra55lrgyawxrctyq2mysmfj84dpke2c2qqms0n06hc', + 'bc1p7tfxamku98pzvzn4hj0gh79xtds6vwghqf647xukarqy7rcujt4sz5rre5', + 'bc1puxs2edn2j9nutumrfpv00qqhztlwxpet0qpfgg7s9tcn8kwe057saxrpmw', + 'bc1p5ahlzhrzsxm2kh460sr2d59x7fzsqt6kpml8j67c4gea5r7c63escs7g3h', + 'bc1phjte3tazrh88vgu57wkljejkzedvj0pgppqchducpxm465ejt8dqaqva9c', + 'bc1p58xalhmtam2qelasa0j5s37xsfjsfmnvezmvshv6vnz49hv0avqqyegv0r', + 'bc1p3fc7lpx008e8heav83nush9m7x6ktdnl2mf42n2pemgun8ew22zqgssl4n', + 'bc1pms9u0xfe7aytjlsj808una0prmnsj8h95ekv7wg6yfusfea0h5aqekxery', + 'bc1p77v8knduumr9z65xw58ty2nnxsumyspxd2mla4n78q06sd7jut8qp6y5dx', + 'bc1p3klzu6zh0wfzca6w44pf4uwq2f3vmdptmxh9efnkndd2a7qw0qls00q2mq', + 'bc1ptacgey53urcmtgl7qmzdwjruq29fzksdr0tf35p6ummyn4su48cqvuussa', + 'bc1pkjjmgxwrqkyhf2c7asrdxmxpndeyuq36wlcety5clvufqwhrrt7qgw59dd', + 'bc1pasvdk60surtnkv6qh9cd0k8uvp5y0smnxns7cvaxzgtlwu2uqcas4uzp37', + 'bc1pnncv6fw69d55aur2p3x06xesclex2f9gjzx7lxh3g8v879khmuqq3xgjsq', + 'bc1pw8937zezmu4s42gn6fq3ndtng2xsq5an7v4hhg2g4e590p4wj5lqtr8v5f', + 'bc1prl6ep6ne7rqg64fup48vpqu70leqz9c5f8l0k54gdchf92rkgdcsnlxf6x', + 'bc1pfz8gddruugafnlyffy92vy0awvgfh95ydmp4sl9py8qgmwfzvh4sey9ydy', + 'bc1p4rpw0tzr2uqzwelhe3g5auaefjepr9nyg88m8x8dy8fvd8jrcgcskexeph', + 'bc1p54f836cy0reqa7ctjl94umrtcv75sl0je3vwt4kdn6cx5vkdqd8qx8vktw', + 'bc1p45xednxj7ukrs2ezu77hw5taunv9jw02tj34qaxm6qdl97zw9fesu2hf6x', + 'bc1pxtxwj73v9n62jakrvq63sgzdy5k7jeh2dnfnx4jrzyevujy9404s4q3kxn', + 'bc1px8rke2jwsx2kfrzydnw284y5rg9xg0jy2qg7hygr6ftkq5vv768q4699av', + 'bc1pe47r4gk66u6ju0uvd0cwamuak2zcm6vm6u3sl783dq536h6h7rgszlp5ah', + 'bc1p9xuqyhap7txqye7zwqj5elalgyj5x5v5vun0dr9xr3yy236auswqwwq4ns', + 'bc1ps35u2f47fqc8m8swuw88de3fzakdsnk80w9xjw3wzatlcak37lwsy63dnu', + 'bc1puv5zdqw45ew6gkhy2wnz5ceyw5anp7f2ryqjs5a4g8ljpt9tdsusm6gf76', + 'bc1p00ftpj7ktpgw5wxfntca0sxenvnvmsgyqx8lyktufc9eqp4kr4eq0lss8u', + 'bc1pvav3syspg90zkrtsfvjp8526qfr9r4qedk0pqzxt633kmp8te85qv95p3w', + 'bc1p6pt88p2tw942e8f96z4tlh093jlstz0yxy476n9evx27xnfrj44sqh3zx4', + 'bc1p59zavt3r0v5shxkl7a77kz93mgw9kh5sfmtrmpr8ugmaumak37yqn0n5qe', + 'bc1pvr5ggylulpvct9zn3jal398wpfmgjs0p2dp0sjd8fj7385ts4pvq4zvk23', + 'bc1pl8jdylje2v0cdc7mexlkjh2rajk9ly4l5xl9rna2eyjn5d44nyysj4tvy9', + 'bc1pdd8ggxrjlf69drcatukevyh0m2vecyt9e7z7ra83whvdg4umv4msahd598', + 'bc1pjkghpqpxqt2xdnf9kg8phczdc847dxnjmvdf08d8z3w9djjdyx6qlujzll', + 'bc1pcfsgvud4k4ng5pqq8y482r83zv0yygat9dkzq52v8kg2enykcxlsyjxxjl', + 'bc1pfz2qzzc879hc4xnnkrr52cv38wgjpvcf8uxuh65hdk8n5ygpgk5searhee', + 'bc1p782ag0384vszpsapvenpmh2pvm49ncwrsq88t6nz8ehzvxlel9msv4s67m', + 'bc1pn7tc6u8amrg8ht6a70ykp5ea8lcntclvqfllndszqgx2gtt9h4msmpcn9c', + 'bc1p7dakkc9dpl4dmfzvc6ta5p23unnl9qetxlslefndwpcxq259rg7qhzk278', + 'bc1pxgs2d4mpz6tvs9clkj759q8cgsyglg56kr08vdkmvxvmyxjhpuqstt599v', + 'bc1pdn76ap000w32xqjfsdu2n0yg5uuxvtej9gnewmdeauuhqrl6xxmqmg3xt7', + 'bc1pwf9qfvx3ul40te45m2ex254mxq04l37m84ts324lkr6m4qyjcccqlfczyt', + 'bc1phh2z220vfq9wx958ym25ucc3nywg8ydu265gr7r2h9yyzw32a2xqpeqj42', + 'bc1pvdgrj6m0c8jddrqy33ncz5dwzyfp6ul6yhzfkxsx5aetp4eq3emqexytf8', + 'bc1pu4423sdl5463m4hm7jf0l0yz5f56wk2fj6ltamgj7sjr7avhp8tq8j8z3m', + 'bc1prs55frjm22697v2ujxx63385rphsvs7tx9z6mtvl60q3f2yh4w8s4aufj8', + 'bc1pmtvt5wfpdxrrwsg23hhhwsw5kxf7hs6z47wwrrpa0r76qqlktyysz94xnx', + 'bc1pn877aqs352x8rvr29dff0lzmmrzfnh3kf3jph52tq3j8rwn7fjxqf3x3pz', + 'bc1pax44twghgk5tq554hfpfhk5hugkhuhpl6fga3t7h5dgqfcn65z2spf7l5c', + 'bc1plqp7vq3ueda6908le4f8azj9e3czp2cah6c8y3zvc6k39sw7sa6sp0wlka', + 'bc1pnuucy5w6mh9g4eq55h8394a78e40ytmwz4nrw2enqx4800c044qqpqhl6j', + 'bc1pnvem4cvktzgw6zxq60x7wcdljluauvsx7gp48dtxfqe68s35pdvsyfnqjn', + 'bc1pdpeyqeauua9yjv3yrr3nc32wq2j3dxy6trkrhrn9ncxqn8c9nxcqu40l9h', + 'bc1p64mhea79tmllw2kuykc23dyyqarva3tl7lsn8cx4ejvc4csx4mlq07zprc', + 'bc1pl0kpcm6psfxavhcscaplf5sv85gg3m7r0qe7q9vulutrfndzezmqudmx7v', + 'bc1p4m3lyw8kehjq35zlzac8vlk6ytrzhv6euc3g9t9nxvk07qnrdmnq3mmjv4', + 'bc1palv6jnlmlqn99q4ldzclgl0h53wmuzvlq76jgnjtdjdv2tx5mmpsplmg68', + 'bc1psvgq4zew7revgstvvs89nf6zk8wx6up8yj5kahwa63f7qk05ls0q7y9wss', + 'bc1ppkxamtrslym6hvevaewnjjfzplaytuuctklpdhhctutjcsxkzy2qhn7slg', + 'bc1puxusccggwntmuadqv767sy3wxu5m5dk3s5dja44azj5ghlfcv7esw0xq6p', + 'bc1p7q8zkwupxfl3w3q2jjcagwgs36h8mwakggzj30u8q66vtxl8mwssnqr72q', + 'bc1pxhwc9xxyc6w5f5jnngxtkmazsry93nfh4j8tyjx8s408drdwsevqykktw4', + 'bc1phzfutlzv56a33xjd0k2gl9faxzl0nhdvzz9upgl9cqezzft3jm6sewk2uv', + 'bc1pv0r584d7c95gkx6k707psat4luc67msfpmckkvdqfyhydllaxu9s5el436', + 'bc1p8ay5ew45k3pnay6qw2lcl8fyuj8vmc3uczz7xt6mhxs80mflv43sg60a00', + 'bc1p0xdfvxrw0jm2h0ga000lmxtxaze8jn7vfhvv6lmw8n9h242t4v2qk4xjk5', + 'bc1p4m6ejwuwjhfzz94nxfgrzjuqqxcmgve4vj4ey7tzn5m9v23nyafqpes4hl', + 'bc1pwe0v76gch3h6cee2eljgnhwrwn9zkxwar25nden33dxgjc995qcs2k2e7z', + 'bc1ps2gfwh8v7dhenz30jwpr3xcxwd9538xsqn0vdsd8gpuc4hzjgy7snxhcvp', + 'bc1pxrr895mugdaanyeeejz5re6tg54ac5w3rxwj8f30atkju49dljuqzhl7wr', + 'bc1pyw837p3lg0slvnp6vj79unk4zhsgh7ypy5cg9hnmsl9m5qh055zq23lyzm', + 'bc1p9v44w4ln35tpe0ggqm2n4cs2hlhmlzwjcctlke28zdhad9rp29wswuw49g', + 'bc1p8zfvp20drnr0mw3gnh8yd88s2jems5kjc9a2u7hy7x36kmkgjrmqskhuly', + 'bc1p5je72vevln76z2ccegmm9ayh8akk0ucfq70thcvpw5vct44u63tq5u7vyr', + 'bc1pvkrhsr6mpm0sgrq4rvx6m7uk7uar0rjrp4cegut94eqhgfsdkhxquahd77', + 'bc1ppnlftma8gev5ds00v97xdna3a5k79ufww2vyerug0d276n3zt6zse8nqau', + 'bc1pc3rzsyk2rx86t3mrlragnymjf4685llzav40glyxuhw9zt05j3ms3h5wz5', + 'bc1py5pkv9sxgwudcz9prt20xfffh4e8t2p5xw88py27hlpfply47ats22c4y0', + 'bc1pagjh7vxnv577d3f9eqzkcd8tgc6srykys9rgukgyte32nz9z0x3qkmg5yp', + 'bc1p57gc0hvmw30q3v8h94whslj32h5q436ftkjtrh00y4wuv0tt47sq2wkade', + 'bc1p3lg9x2600xmna55hrgf77r4zx8ltxt3x9egr9zxxt596xyr2nt9qf9enec', + 'bc1pc30px7aryevq4mghkj7ytp34a06e0psjjzwvxqly3h8swvknp9yste47m3', + 'bc1pwkc77fssc9m7w5uw83ezt7z5798gusfvh2aep7kl8pzqa5hr6tvs3l2ka6', + 'bc1phgad4uyt35pdy5vvevvjfspqwg6xnh8tywue688lfjxzjec35huqsw7rpn', + 'bc1pn453ejn6dqpqr06npnq8njz7w8suu7jf2wf9056vrjd7laa69kmqfckpz7', + 'bc1p2l2x9s7yvun27xutqd75tetfn0w07eu7haepqfnzdls8hr796n8s6fhheg', + 'bc1pnpmhl3srastmxrnuu8lyey6qe7fthkkpuuen63cthgt0uwqwkkdqtcte9p', + 'bc1pz83r0veyzsgym76wflv3l0exquy5h46ykwgq3lc6pnqqamstjy8qhrpagt', + 'bc1p9ujscj46hn5d6nqkq0syv62hl7wj0k4m63wfhf2ne4qpwj5qdf4q9evd4w', + 'bc1pxjcxp5jrex5swm0huprs0h3cx5pywcgsykwnglp8s3s2gep3dj3qaxlzvx', + 'bc1p6lcnkexgzzj4whzwu96l47y23kzphlfj82aup73ax3pprdwvl3ns36ttr6', + 'bc1pw80rt6tu5d40aue64lh7eelqgyum6y6r7auacwrjk9yerkam8w6s95t63x', + 'bc1pm4z8xtxyrwktquetd7t0wu2rdsex6zjqrrluuhx3njlekrt039jqr0uz8g', + 'bc1prcwwfm9cxazz6z2ljz4n3nhqv0jfhvg4ed7qm97ynz2axr9g3qyqnhjkc2', + 'bc1pxsah25f66axv3uz6n7jttc8f7xh4q5njtlsgerhf67artudl9j9q289463', + 'bc1pa3yth3m6zheq0k2ckqlzsrvcmtdefn2j32u7u0es0vgndj9q2czqphage7', + 'bc1ped68t67t8yk9pe0f2pd84dxxvuulf7ahwcfk0hadx6m4vfq5cypqm09wrk', + 'bc1p0udpd4sfclysym4ex0x7rwrnxzsjvlpa9fk9av4e2ywr02q6p0wsqk57tj', + 'bc1pe32ytfeahzp030cvreg2htufzwhhykw7akk4vefd4vjkkhnyxv6qrk05p8', + 'bc1padt6sgas00edgesju2ce70l56zusq6d7h4p4xgq0nursga0qqzhqj6spk5', + 'bc1phrpwxyauk26h6rayl86fmjvsgfs8yq32x55fd9zvacf6rr5u0j0q4ct4nl', + 'bc1p4d4wq659nvecy08844h0gg79a79tg6wxhznxgtanq2pumtustrvqerhp4w', + 'bc1p8t9ghjgqw46lu6qfxn0jpc7e8lgcr0j9fvsa63e8d665mhrrmjdsttuvwy', + 'bc1p4ynfnkhrt0m3fyjcp69rryp5qee830gnjzls8mg2ptqpt52q73dsgywthc', + 'bc1p6jrtxy4t9aezqv9rgf847kw6nlhdqy88g3tgddds99n5d5expqts3kceg0', + 'bc1p5rr99pz99zg5rrnck9x8t8c9uxvtd5qfez3huglgv26amsupa96stnkk9f', + 'bc1p5msl4th83xacy8sw8u8k0znfhyqqdk9eqq0n805t3y5usuqmcgxqucxv83', + 'bc1pg4dpep60cgntcyzjuns5vmalshhphndeqrp0kpd8fxz6yt9s0tws39ehky', + 'bc1pvwwxkm9jkkfu6cns4gygsxf49v7pt93cmjr82tfcjdquwltq04zqw59qwc', + 'bc1pjx68s6dk9xvqnwvuc3tthz5kuhseptz4s0w3sk5tftmjs5x6ds2qj9vndn', + 'bc1pm2u3gqe544tl7cr0ea8aazve69sp5nkpfdzadr2e260e652r39ksxndney', + 'bc1pw5ls9fr90kddqamprchykkcflqc45g3swur2efxwz53pegzv3hgqmrt9ds', + 'bc1pane2m0z8ymreh67xkathhrst8jm4ljw53nkq3da23fmmf6gm522sf03t55', + 'bc1pmzsjlfwsrfkm6xcq6nay6agx3uxvu87kh5vwaqy9gx5rr8l03vrskr0gds', + 'bc1pk9zqlfjjn9h5vathr63qejscpd4ljsgetjd3zk8uskt3cu3g3z5qrsr2ht', + 'bc1p5zdcgdk5edp6y8zr7dny4lhjqucfjs53750396sdhewkawpy22ess84kk4', + 'bc1p9tt8f4kregqyq55uvgkhyst4sa2mlu6vw68kksnzgqjx9824fy6s3zq7hp', + 'bc1p2avzn4532avveyjgsvlp4efrsm27y390nk3hdxltw9zk5j8r4smqhshyr5', + 'bc1p3haghg60y5jw3dpqn0tz4mx8fp9fu06j0yhzjyhj7l6appywyd4sr6eprj', + 'bc1peg5t029ejm0dzg38pe5nv6rv4e3w25drxcsr664z7vy88nyhpdqqkq6a9a', + 'bc1p72r70w9uhkmftpwkf6qfknpdftcaljyrjlgd36qnluf5wx8eup7sk4kc4u', + 'bc1pqlja2gkl04jcagms942e8z0v8lxdmdxt9w7mqmdygzrqthhwk99sfhl6yq', + 'bc1pc9xzztm74w4zqm8yg690v9r50shyr9vkckufzjs4m4cdxwvf0tzsnk7ewd', + 'bc1p4jxwz3cvfyhgr9dsqnlenp676u9rderu9yvq7re6nyrzseqmw95sph63xc', + 'bc1pvfpg5v2ze70h03td8yc3ecvn6p3t5velj90ngrf2xcdf0kz54utqg6eeuw', + 'bc1pun2370d5c7lg3grc88f6s5p9pycnp6804zpn6waqfd2y5vxrgnksard60z', + 'bc1pdw74npe0yqfxqqmu56dlqvystzsnvlj77w3h404sayrp5w9zz9tsc45y9j', + 'bc1pv8mu9cfpyqrgmz63jtlxsmr7tw2vtpq9pj52a0mzp4vnh049aqeqpp7ule', + 'bc1pfta7kn83dqv893m4hvdev272eyerqt4p7wc76m6z6p9x9wkekkgqsq82sn', + 'bc1pu6vychqpd29rdvcakzsskumc6t3ct0jhcc7gk3gsadrqsk3q5daqtxfyny', + 'bc1p2rffxpdhxvufa8flvgetky286rrzn4u5e2m6kt2nwzzryl7jlpwsxzp9k3', + 'bc1p09y5fjrdcxh56du0wukpy40lqrsdyqdwlq3g3fpgpsqm6jpyrjhq85yjmf', + 'bc1p4kp4p4l00sw75aw733uukm3nmjstxnjgs4nqd9ah4xkhz5vnnknqj2yplj', + 'bc1pj2q2e6ctv4gznn7ymgpedcj4qpwvgyfcvkju8mn0gl08nqhshtes9sfc8n', + 'bc1pqkx2mw0y2tte7f6724a65crpp2lqkjp3sl8zll3uglmun2kakavqhak47u', + 'bc1p3fsnykumz4grrcaep37xu4eywflehuy0kuzvzrhrdz9vx8ljzmjquq08x3', + 'bc1pfpn0v8fend47qdzjd65ll0wxjena8naueetf3k48lzq0uqeh946qvtm3jz', + 'bc1p6zxvxfuksu5t3rxusukgr3kzkqwwry440zlr56k9n9dhus3aup0qh78mpy', + 'bc1p4mtdpt4q83h4jv8fhfkzrfcg3hkz8mfln0wdrhd3xk4qv2g7exwq4zy4cr', + 'bc1p33dzk43j8djjp0pajenefnyvytw67ppkkf6gj376e0nnsqz0e2vs9xrsue', + 'bc1phg9pptky4ldjlcyp650sqlqsrzp780d373degl2npa8gaamjac8sjywcn9', + 'bc1pftx7hqw76p47qfdl3y8nmtajh2clpxme62ltfh9gnnckyrzzay9smzq0a7', + 'bc1p7yhq02qj2tfz3mgnfmttn6w7garrgetk9g4cfp3udkpsqgy89wasq9gdy2', + 'bc1p3vxsmd8pyzvh8c0j0s8re8tlpv98ewn8qnp58juq40ndkrh3yems7nvys6', + 'bc1p7jjwzjpykr2y4pgaejv8ju0rngqy9djzlj36jmjah9hdd84u5n4qqdsq5u', + 'bc1phmcsjz6vsfz63zchzxau877n0wwqz2wfd3t937yeq94uct2vjw3snlwpf7', + 'bc1p9xh359eu37ywynud40hkn5q67yxnz4nhc5uu5mjav69p2gxx9ycq6a7pew', + 'bc1p3ad80amjmadfzdr79xc4s9zqjdxaensslnwyc8ze7lxr6jdnp7fq6zunfv', + 'bc1p7s59sktks4rhev3hw7g9gulz3tj9ttm8wdn5kfm79ddgz8jrrztq3pfya4', + 'bc1p5lfr0sppja5jlfjkds43vtstvzkxmnsagfhtchfsgk93e8e8ktsqp4076q', + 'bc1pjcpvvlg550w7up87g4ayrlaydrlq7h2587wvxcnm97za6q7euqeqg5cnes', + 'bc1pnkvl5s9nsv6she08zq32t78wtcffelhr4mdavw6psw9djfek5z3qhf2hav', + 'bc1pje9u9shrnjx3ymg45lmle7kaeu948ypd5dwnm5s8pch2njy3dehqq7a57e', + 'bc1pykm2afhjyrjuqc37f3uwdggepau97ljk5tv99prlqg54rpejwwsqzjtklk', + 'bc1phn7hzqk0d5km24qagethuh63re6x3esr0szs7f8wvt6afjdv940q9gdh09', + 'bc1prev3smc7n2rlek6pdktdeg4fegy4hr75tvhpwqj0qu794qmn8w5s6yetnl', + 'bc1pungg73vdjmrxevy6jfxggrmemf3mkva9ztr4u8j3sq52nzjpsyssanx6yp', + 'bc1p2ltevrwc2s5se683qxm0zceva5d0c2lasjn6087mw5hph56zk3hqfs3c9q', + 'bc1prrcj4dz3cvzkn3305k7xa9lc4wmnkk9a855jw322l2lvvvzsezmsveg9ld', + 'bc1pa96tlu8jclfkz75rn0ggfdxtfxca9jmgu09fvscep7xmu7hc5znsdzcsr8', + 'bc1psjln9er9upyy8m552zexfgqrj3ah9pe6rjy5uk9shf36d04qa2uqfqk7am', + 'bc1psymgd4x8lt2aq3xsv6687xr2l8c7d8eqjpqvy3dl8tkzzxve9v3s534yjv', + 'bc1p9w2pxlz9hkw2mwvvk4khc3ezqa4x2npptrxqa5wysdfejarn5gyq79ec7v', + 'bc1pe4xh3j29h9fcgzjnyx6gsfwd249a0mp4qu90gkzs0k60gxj5ezqqmsmmey', + 'bc1py9agj7amgqu0378mypddsp6quawpzdtk2ryeclr7nue94y8ffgcshd30gg', + 'bc1p4pp78da3a2hv3hf9ztpmxxc3kqxecm2eep5mdrzgkzfmkmsrs37qt3zk4v', + 'bc1pe3z4h5gyhpyn38x7yx04zwduq0d6e8ctlzm9a45kdcw8t96wcnksldt60w', + 'bc1putufhuxaanf80r9u2ct2ay583h9dsawl45sp6wq6vs6gg37g5ttsd3s9c4', + 'bc1p8y6xzvxa49qygp4eyslcxz4z0rmm2attrffu7m6k5eh3e4envkyqg8hmdg', + 'bc1prs56u7473g26gtjqxzmjl6k07akdnxrhleyvg2kk6kdjurts99gszvq6a3', + 'bc1pf76uhesvxzyjrn6g30lyrn22r96u0k7zyy8avfqwulx6f0u0exqqjerca2', + 'bc1pr3tq23pntrn3970lk4k4gwjgn503ls3lx4f3dv7nudy5234429gqhmcptq', + 'bc1pxfcuk7m40ww5gd50wl2dcwvqqxyjmpx8ejg9m8zmds58wnxxklasxr2qrj', + 'bc1pygh6a33pgg079kya4l3lsfzslj0qmr0j0jqu6xycssy0jxhj59hsruzlhu', + 'bc1pxd7tjtxqcevnnx5nvpd2zkr9fkvxxfznkl0gucck8tmulvxe69asxgrkn7', + 'bc1pwhz0wc4hw8xw65xdjjvnyyrz68w3a6wy7e09a0fj69p0wvmnxymsrjc59x', + 'bc1p7rwrt0yyxup5uxe6vdjxfna7zp52yj4nul9r7qy7gzwdppv72ursz643d4', + 'bc1p073j0k642jre5mvhxz70y4rjyngcc5zwylj9f0k8ua2swm77p5xsjtle68', + 'bc1phqcjzxshcnxazlx3rmkw8wul9s4fqk26c54kqmzw4q0sfwzdtp6qevte47', + 'bc1pqrpr886mnrtt3aypqy6a9hrv0vc6arly57sq5wg40gr229yre7ssh7vvk2', + 'bc1p0pvu2mxwx5k7rtpytcdhf47qpp9k4r62c0awy26efs4wtyw6z7eqecupk2', + 'bc1pdl3xxsz4fdzd0dl4sn8wwcvcn22fd95m3sjpug00lxes93nq6aqs3e8fy7', + 'bc1pumuwgzqtr93ygatvtv36ywktzlnuezyfx4gww8w75agtu4agt79qksnqj5', ] \ No newline at end of file From b6e826fef95b3cfa28ea0d3a03e743664f15a090 Mon Sep 17 00:00:00 2001 From: rogi-sh <46889545+rogi-sh@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:58:21 +0100 Subject: [PATCH 1434/1768] Add LeverageX (Javsphere) Earn side TVL (#12683) Co-authored-by: igorshelkovenkov Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/javsphere/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/javsphere/index.js b/projects/javsphere/index.js index 1d17d51ada..597cbb5088 100644 --- a/projects/javsphere/index.js +++ b/projects/javsphere/index.js @@ -4,6 +4,13 @@ const STAKING_BASE = '0xE420BBb4C2454f305a3335BBdCE069326985fb5b' const FREEZER_BASE = '0x03e225D2bd32F5ecE539005B57F9B94A743ADBFB' const VESTING_BASE = '0x42a40321843220e9811A1385D74d9798436f7002' const JAV_BASE = '0xEdC68c4c54228D273ed50Fc450E253F685a2c6b9' +const LEVERAGEX_BASE_EARN = '0xfd916d70eb2d0e0e1c17a6a68a7fbede3106b852' + +async function tvl(api) { + const config = await api.fetchList({ lengthAbi: 'tokensCount', itemAbi: "function tokens(uint256) view returns (address asset, bytes32 priceFeed, uint256 targetWeightage, bool isActive)", target: LEVERAGEX_BASE_EARN }) + const tokens = config.map(i => i.asset) + return api.sumTokens({ owner: LEVERAGEX_BASE_EARN, tokens, }) +} module.exports = { methodology: `We count the total value locked from staking and freezer of javsphers native token JAV). `, @@ -11,7 +18,7 @@ module.exports = { [1733837635, "Migration to BASE"], ], base: { - tvl: () => { }, + tvl, staking: staking([STAKING_BASE, FREEZER_BASE], JAV_BASE), vesting: staking(VESTING_BASE, JAV_BASE) }, From c60ce503fb026106d5a4e1d7f64176431e686dc5 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:04:12 +0000 Subject: [PATCH 1435/1768] add double count liquid restaking (#12686) --- projects/adrastea-lrt/index.js | 1 + projects/aspida/index.js | 1 + projects/fragmetric/index.js | 1 + projects/ibtc/index.js | 1 + projects/kyros/index.js | 1 + projects/ngad-euclid/index.js | 1 + projects/yieldnest/index.js | 1 + 7 files changed, 7 insertions(+) diff --git a/projects/adrastea-lrt/index.js b/projects/adrastea-lrt/index.js index f75e94027a..24c53d662b 100644 --- a/projects/adrastea-lrt/index.js +++ b/projects/adrastea-lrt/index.js @@ -1,5 +1,6 @@ const { sumTokensExport } = require('../helper/solana') module.exports = { + doublecounted: true, solana: { tvl: sumTokensExport({ owners: ['wYPqKV6XuRBSBU1zYiYB1ZTPhkR8PsDRz5kKgmSyum1'] }) } diff --git a/projects/aspida/index.js b/projects/aspida/index.js index ea3ff2f547..e9d0d5542b 100644 --- a/projects/aspida/index.js +++ b/projects/aspida/index.js @@ -1,4 +1,5 @@ module.exports = { + doublecounted: true, ethereum: { tvl: async (api) => { const totalSupply = await api.call({ target: "0xFC87753Df5Ef5C368b5FBA8D4C5043b77e8C5b39", abi: "uint256:totalSupply" }); diff --git a/projects/fragmetric/index.js b/projects/fragmetric/index.js index 462f79a038..2e340930a6 100644 --- a/projects/fragmetric/index.js +++ b/projects/fragmetric/index.js @@ -20,6 +20,7 @@ async function tvl() { module.exports = { timetravel: false, + doublecounted: true, solana: { tvl }, methodology: 'TVL is calculated by summing all restaked assets.', }; diff --git a/projects/ibtc/index.js b/projects/ibtc/index.js index 24fcdef49a..f31ee5d6c6 100644 --- a/projects/ibtc/index.js +++ b/projects/ibtc/index.js @@ -7,6 +7,7 @@ async function tvl(api) { } module.exports = { + doublecounted: true, xsat: { tvl }, diff --git a/projects/kyros/index.js b/projects/kyros/index.js index 7015c61d16..2bfab21bf2 100644 --- a/projects/kyros/index.js +++ b/projects/kyros/index.js @@ -10,6 +10,7 @@ async function tvl() { module.exports = { timetravel: false, + doublecounted: true, solana: { tvl }, methodology: 'The TVL is calculated by summing all restaked assets.', }; diff --git a/projects/ngad-euclid/index.js b/projects/ngad-euclid/index.js index f0e63e74a7..449c984f18 100644 --- a/projects/ngad-euclid/index.js +++ b/projects/ngad-euclid/index.js @@ -15,6 +15,7 @@ async function tvl(_, _1, _2, {api}) { } module.exports = { + doublecounted: true, ethereum: { tvl } diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index 0383bef2b9..7c3cc6bf56 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -5,6 +5,7 @@ const YN_ETH = '0x09db87a538bd693e9d08544577d5ccfaa6373a48' const yn_ETHx = '0x657d9ABA1DBb59e53f9F3eCAA878447dCfC96dCb' module.exports = { + doublecounted: true, ethereum: { tvl: async (api) => { const ynethBalance = await api.call({ abi: 'uint256:totalAssets', target: YN_ETH }) From be42bb87aac758e4dd0015f47329d07d05ccaa04 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:01:04 +0100 Subject: [PATCH 1436/1768] track mew finance #12682 --- projects/mew-fi/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/mew-fi/index.js diff --git a/projects/mew-fi/index.js b/projects/mew-fi/index.js new file mode 100644 index 0000000000..6472dc72be --- /dev/null +++ b/projects/mew-fi/index.js @@ -0,0 +1,9 @@ +const { sumTokensExport } = require('./helper/chain/ergo') + +module.exports = { + timetravel: false, + ergo: { + tvl: () => ({}), + staking: sumTokensExport({ owner: '2Czxg7U54ZyGMzjt35EYX9g98H9UjFqteuYWX5CSgGCYWAjg1ng2jgm4BHjA6u1Azeo7EYQsBMVLbhRreNASJu54ho', }) + } +} From 99d6f2746538574d0b474d412813576728cb2a7a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:25:57 +0100 Subject: [PATCH 1437/1768] cowswap: track arbitrum --- projects/balancer-cow-amm/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/balancer-cow-amm/index.js b/projects/balancer-cow-amm/index.js index 35c72404d9..f9e8053eee 100644 --- a/projects/balancer-cow-amm/index.js +++ b/projects/balancer-cow-amm/index.js @@ -10,6 +10,9 @@ const config = { ['0x703Bd8115E6F21a37BB5Df97f78614ca72Ad7624', 35259725], ['0x7573B99BC09c11Dc0427fb9c6662bc603E008304', 35163914], ], + arbitrum: [ + ['0xE0e2Ba143EE5268DA87D529949a2521115987302', 248291297 ] + ] } Object.keys(config).forEach(chain => { From 8bca8274e7461d65a2c4788e27699a5fedcb4890 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:42:40 +0100 Subject: [PATCH 1438/1768] feat: Adapter, Comtech-Gold (#12688) --- projects/comtech-gold/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/comtech-gold/index.js diff --git a/projects/comtech-gold/index.js b/projects/comtech-gold/index.js new file mode 100644 index 0000000000..36ddede975 --- /dev/null +++ b/projects/comtech-gold/index.js @@ -0,0 +1,10 @@ +const CGO = '0x8f9920283470f52128bf11b0c14e798be704fd15' + +const tvl = async (api) => { + const supply = await api.call({ target: CGO, abi: 'erc20:totalSupply' }) + api.add(CGO, supply) +} + +module.exports = { + xdc: { tvl } +} \ No newline at end of file From 3f1c023be14a1fb5110e4f3638381adcfd062cfa Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:48:14 +0100 Subject: [PATCH 1439/1768] Hashnote update (#12689) Co-authored-by: twothirtyfive --- projects/hashnote/index.js | 29 ++++++++++++++++++++++------- projects/helper/coreAssets.json | 1 - 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/projects/hashnote/index.js b/projects/hashnote/index.js index 35bbcf0875..9930d8a14c 100644 --- a/projects/hashnote/index.js +++ b/projects/hashnote/index.js @@ -1,25 +1,40 @@ const { call } = require('../helper/chain/near') +const { get } = require("../helper/http"); -const NEAR = '0x136471a34f6ef19fE571EFFC1CA711fdb8E49f2b' +const USYC = '0x136471a34f6ef19fE571EFFC1CA711fdb8E49f2b' const CONFIG = { canto: '0xfb8255f0de21acebf490f1df6f0bdd48cc1df03b', - ethereum: NEAR, - near: 'usyc.near' + ethereum: USYC, + near: 'usyc.near', + noble: 'uusyc' } const evmTvl = async (api, token) => { const supply = await api.call({ target: token, abi: 'erc20:totalSupply' }) - api.add(NEAR, supply, { skipChain: true }) + api.add(USYC, supply, { skipChain: true }) } const nonEvmTvl = async (api, token) => { const supply = await call(token, 'ft_total_supply', {}); - api.add(NEAR, supply, { skipChain: true }) + api.add(USYC, supply, { skipChain: true }); +} + +const nobleTvl = async (api, token) => { + const res = await get(`https://rest.cosmos.directory/noble/cosmos/bank/v1beta1/supply/by_denom?denom=${token}`); + api.add(USYC, parseInt(res.amount.amount), { skipChain: true }); } Object.entries(CONFIG).forEach(([chain, address]) => { module.exports[chain] = { - tvl: async (api) => (chain === 'near' ? nonEvmTvl(api, address) : evmTvl(api, address)) + tvl: async (api) => { + if (chain === 'near') { + return nonEvmTvl(api, address); + } else if (chain === 'noble') { + return nobleTvl(api, address); + } else { + return evmTvl(api, address); + } + } }; -}); +}); \ No newline at end of file diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 4ee765914a..1542216f88 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1952,7 +1952,6 @@ "noble": { "USDC": "uusdc", "USDY": "ausdy", - "uusdc": "uusdc", "ausdy": "ausdy" }, "ripple": { From e8b52681c50cd59f747a156602fbb68e0e59dc26 Mon Sep 17 00:00:00 2001 From: Ss5h Date: Fri, 13 Dec 2024 01:00:45 +0900 Subject: [PATCH 1440/1768] add wstBfc (#12610) --- projects/bifi/index.js | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/projects/bifi/index.js b/projects/bifi/index.js index c5a0511bf9..23da261467 100644 --- a/projects/bifi/index.js +++ b/projects/bifi/index.js @@ -51,16 +51,11 @@ const chainPools = { UnifiedDAI: { pool: '0x2168dAb12A6A93181bbAD9C9dc769307C36fB45C', token: ADDRESSES.bfc.UnifiedDAI }, UnifiedWBTC: { pool: '0xEa3b4a2dA5DbE8379AD4c60aaD5184df69D7C9AD', token: ADDRESSES.bfc.WBTC}, UnifiedBTCB: { pool: '0x0B31FeE8bF53bFe2f5F7083B73A4c9C8B517E32F', token: ADDRESSES.bfc.BTCB}, - BitcoinUSD: { pool: '0xcF2FC1d354018A39D5Ef036aA865Ad8cbF7B611E', token: ADDRESSES.bfc.BitcoinUSD } + BitcoinUSD: { pool: '0xcF2FC1d354018A39D5Ef036aA865Ad8cbF7B611E', token: ADDRESSES.bfc.BitcoinUSD }, + WstBFC: { pool: '0xf9B2f6D2a61923E61aD9F6DAA78f52b7e1722b12', token: '0x386f2F5d9A97659C86f3cA9B8B11fc3F76eFDdaE' }, }, } -module.exports = { - bitcoin: { - tvl: bitcoin - }, -}; - Object.keys(chainPools).forEach(chain => { const pools = chainPools[chain] module.exports[chain] = { @@ -70,20 +65,4 @@ Object.keys(chainPools).forEach(chain => { } }) -const wbtc = ADDRESSES.ethereum.WBTC -async function bitcoin(timestamp, ethBlock) { - const tokenPool = { - pool: '0x986Eb51E67e154901ff9B482835788B8f3054076', - token: '0x4ca7a5Fb41660A9c5c31683B832A17f7f7457344' - } - let tokenLocked = await sdk.api.erc20.balanceOf({ - owner: tokenPool.pool, - target: tokenPool.token, - block: ethBlock - }); - return { - [wbtc]: tokenLocked.output - } -} - module.exports.ethereum.staking = stakings(stakingPool, bfcAddr) From 1670ba3068a7401372d4b6dc22c94f13e2ce5853 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 12 Dec 2024 19:18:33 +0000 Subject: [PATCH 1441/1768] fix import --- projects/mew-fi/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/mew-fi/index.js b/projects/mew-fi/index.js index 6472dc72be..84a0098e8e 100644 --- a/projects/mew-fi/index.js +++ b/projects/mew-fi/index.js @@ -1,4 +1,4 @@ -const { sumTokensExport } = require('./helper/chain/ergo') +const { sumTokensExport } = require('../helper/chain/ergo') module.exports = { timetravel: false, From 6de1c5d8c1ddaba58310163ab111c01a84d28614 Mon Sep 17 00:00:00 2001 From: Samuele Marro Date: Fri, 13 Dec 2024 09:57:14 +0000 Subject: [PATCH 1442/1768] Add VinuSwap adapter (#12692) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 6 ++++++ projects/vinuswap/index.js | 36 +++++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 projects/vinuswap/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 0075d0f039..f3569d8435 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -337,6 +337,7 @@ "vechain", "velas", "venom", + "vinu", "vision", "vite", "vive", diff --git a/projects/helper/env.js b/projects/helper/env.js index 461d4435ed..9d1fd35aa6 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -35,6 +35,7 @@ const DEFAULTS = { CORN_RPC: "https://rpc.ankr.com/corn_maizenet", ACE_RPC_MULTICALL: "0x025A2B4fCE1E0bD736D5cebe6C8a52229795376B", ZILLIQA_RPC_MULTICALL: "0x38899efb93d5106d3adb86662c557f237f6ecf57", + VINU_RPC_MULTICALL: "0x63CE2062281fb85fE5BC407799A455C21f35F355", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 9701731659..1515d90d15 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -45,6 +45,12 @@ const fixBalancesTokens = { apechain: { [ADDRESSES.null]: { coingeckoId: "apecoin", decimals: 18 }, }, + vinu: { + '0xC0264277fcCa5FCfabd41a8bC01c1FcAF8383E41': { coingeckoId: "tether", decimals: 6 }, + '0xDd4b9b3Ce03faAbA4a3839c8B5023b7792be6e2C': { coingeckoId: "ethereum", decimals: 18}, + '0x00c1E515EA9579856304198EFb15f525A0bb50f6': { coingeckoId: "vita-inu", decimals: 18}, + '0xEd8c5530a0A086a12f57275728128a60DFf04230': { coingeckoId: "vinuchain", decimals: 18}, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/vinuswap/index.js b/projects/vinuswap/index.js new file mode 100644 index 0000000000..fd481329cc --- /dev/null +++ b/projects/vinuswap/index.js @@ -0,0 +1,36 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +// v1.1 factory +const factories = [ + '0x4bC45A5db58d4535FaF668F392035407d2a14E76', // v1 + '0xd74dEe1C78D5C58FbdDe619b707fcFbAE50c3EEe' // v1.1 +] + +// Deployed with an old contract +const V1_POOLS = [ + '0xa97FA6E9A764306107F2103a2024Cfe660c5dA33', + '0x3424b0dd7715C8db92414DB0c5A9E5FA0D51cCb5', + '0xfD763943f628e125CEE3D8d85DC0fc7098355d16', + '0x8d713bC2d35327B536A8B2CCec9392e57C0D04B4', + '0xd50ee26F62B1825d14e22e23747939D96746434c' +] + +async function tvl(api) { + const ownerTokens = [] + const token0s = await api.multiCall({ abi: 'address:token0', calls: V1_POOLS}) + const token1s = await api.multiCall({ abi: 'address:token1', calls: V1_POOLS}) + + ownerTokens.push(...V1_POOLS.map((pool, idx) => [[token0s[idx], token1s[idx]], pool])) + + const logs = await getLogs2({ api, target: factories[1], eventAbi: 'event PoolCreated(address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address feeManager, address pool)', fromBlock: 1, skipCacheRead: true, }) + + ownerTokens.push(...logs.map(l => [[l.token0, l.token1], l.pool])) + return sumTokens2({ api, ownerTokens }) +} + +module.exports = { + vinu: { + tvl + } +} \ No newline at end of file From d73afa6af7aaca6201ae212166dc39b0fa3d72c3 Mon Sep 17 00:00:00 2001 From: charq <73696209+buchaoqun@users.noreply.github.com> Date: Fri, 13 Dec 2024 18:02:50 +0800 Subject: [PATCH 1443/1768] Update github url (#12694) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: qwen-solv Co-authored-by: hja <740055963@qq.com> --- projects/solv-protocol-funds/index.js | 2 +- projects/solv-protocol-rwa/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/solv-protocol-funds/index.js b/projects/solv-protocol-funds/index.js index eaddedb068..717b6b53d3 100644 --- a/projects/solv-protocol-funds/index.js +++ b/projects/solv-protocol-funds/index.js @@ -14,7 +14,7 @@ const graphUrlList = { merlin: 'http://solv-subgraph-server-alb-694489734.us-west-1.elb.amazonaws.com:8000/subgraphs/name/solv-payable-factory-merlin', } -const slotListUrl = 'https://raw.githubusercontent.com/solv-finance-dev/solv-protocol-rwa-slot/main/slot.json'; +const slotListUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solv-rwa-slot.json'; const addressUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solv-funds.json'; diff --git a/projects/solv-protocol-rwa/index.js b/projects/solv-protocol-rwa/index.js index 25d703b28e..be2cf40b9f 100644 --- a/projects/solv-protocol-rwa/index.js +++ b/projects/solv-protocol-rwa/index.js @@ -8,7 +8,7 @@ const graphUrlList = { mantle: 'https://api.0xgraph.xyz/api/public/65c5cf65-bd77-4da0-b41c-cb6d237e7e2f/subgraphs/solv-payable-factory-mantle/-/gn', } -const slotListUrl = 'https://cdn.jsdelivr.net/gh/solv-finance-dev/solv-protocol-rwa-slot/slot.json'; +const slotListUrl = 'https://raw.githubusercontent.com/solv-finance/solv-protocol-defillama/refs/heads/main/solv-rwa-slot.json'; async function tvl(api) { From b8ca31658d4a826eecd4e9a97af5c5b5128b8055 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:23:03 +0100 Subject: [PATCH 1444/1768] update bitflux #12690 --- projects/bitflux/index.js | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/projects/bitflux/index.js b/projects/bitflux/index.js index a3f45f7644..6bab5ca62c 100644 --- a/projects/bitflux/index.js +++ b/projects/bitflux/index.js @@ -1,19 +1,21 @@ -const { sumTokensExport } = require("../helper/unwrapLPs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); -const swapFlashLoan = '0x4bcb9Ea3dACb8FfE623317E0B102393A3976053C'; +const swapFlashLoans = Object.values({ + 'BP1': "0x4bcb9Ea3dACb8FfE623317E0B102393A3976053C", + 'BP2': "0x6a63cbf00D15137756189c29496B14998b259254", + 'BP3': "0xE7E1b1F216d81a4b2c018657f26Eda8FE2F91e26", + 'BP4': "0xeC938Bc5b201E96b6AFE97070a8Ea967E0dcAe96" +}) -const ADDRESSES = { - 'WBTC': "0x5832f53d147b3d6Cd4578B9CBD62425C7ea9d0Bd", - "solvBTCb": "0x5b1fb849f1f76217246b8aaac053b5c7b15b7dc3", - "solvBTCcore": "0x9410e8052bc661041e5cb27fdf7d9e9e842af2aa" +async function tvl(api) { + const tokens = await api.multiCall({ abi: 'address[]:getTokens', calls: swapFlashLoans}) + const ownerTokens = tokens.map((token, idx) => [token, swapFlashLoans[idx]]) + return sumTokens2({ api, ownerTokens }) } module.exports = { - core: { - tvl: sumTokensExport( - { - owner: swapFlashLoan, - tokens: [ADDRESSES.WBTC, ADDRESSES.solvBTCb, ADDRESSES.solvBTCcore] - }), - } + core: { + tvl + }, + methodology: "Counts all BTC-pegged tokens in the Bitflux liquidity pools" } \ No newline at end of file From cc009a5a6b79339c4d4c251e416a686c991fd59d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:36:39 +0100 Subject: [PATCH 1445/1768] track mars perp #12695 --- projects/mars-perp/index.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 projects/mars-perp/index.js diff --git a/projects/mars-perp/index.js b/projects/mars-perp/index.js new file mode 100644 index 0000000000..d770a8b0d7 --- /dev/null +++ b/projects/mars-perp/index.js @@ -0,0 +1,23 @@ +const { queryContract } = require('../helper/chain/cosmos'); + +const contractAddresses = { + neutron: { + perps: 'neutron1g3catxyv0fk8zzsra2mjc0v4s69a7xygdjt85t54l7ym3gv0un4q2xhaf6' + }, +}; + +async function tvl(api) { + const chain = api.chain; + const { perps } = contractAddresses[chain]; + const info = await queryContract({ contract: perps, chain, data: { 'config': {} }, }); + const perpsVault = await queryContract({ contract: perps, chain, data: { 'vault': {} }, }); + + if (perpsVault) api.add(info.base_denom, perpsVault['total_balance']); +} + +module.exports = { + timetravel: false, + methodology: + "For each chain, sum token balances by querying the total deposit amount for each asset in the chain's params contract.", + neutron: { tvl }, +} From b64331610e9c9f6d9ca23d08aa919d31203513ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vuka=C5=A1in=20Manojlovi=C4=87?= Date: Fri, 13 Dec 2024 16:25:09 +0100 Subject: [PATCH 1446/1768] Add new assets to Nostra Money Market (#12699) --- projects/nostra/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/projects/nostra/index.js b/projects/nostra/index.js index e8034e051c..f10eb98de4 100644 --- a/projects/nostra/index.js +++ b/projects/nostra/index.js @@ -62,6 +62,26 @@ const supplyTokens = [ "0x036e722e04ef2ccadb9229b5415272353aaeb9554c989b83d4d932dba8dbe8f9", "0x065bde349f553cf4bdd873e54cd48317eda0542764ebe5ba46984cedd940a5e4", "0x000215cbd38a1e765cfd2c60bcb291c9d0b0bb7e7f56f682f0d3501303586185", + // EKUBO + "0x45863a5605ea7e77f2b043888a9efb1ff6e6b0fb9e62790ff987b2e084ca1f6", + "0x6b1063a4d5c32fef3486bf29d1719eb09481b52d31f7d86a50c64b0b8d5defb", + "0x06fd4a9efd0c884e0b29506169dd2fcad6b284d5bdbd46ede424abc26d71164", + "0x2360bd006d42c1a17d23ebe7ae246a0764dea4ac86201884514f86754ccc7b8", + // xSTRK + "0x6878fd475d5cea090934d690ecbe4ad78503124e4f80380a2e45eb417aafb9c", + "0x1b8d8e31f9dd1bde7dc878dd871225504837c78c40ff01cbf03a255e2154bf0", + "0x4d1125a716f547a0b69413c0098e811da3b799d173429c95da4290a00c139f7", + "0x257afe480da9255a026127cd3a295a580ef316b297a69be22b89729ae8c1d2a", + // BROTHER + "0x674d79e17ae51cbf3b49d443266460dce15215277d9c3aedd7e1733112e9e52", + "0x296f271f5ec4f45c93c1fd351bd44117795f5ef80c5134137d7dc9fce3dc364", + "0xf7c7bf6267b4c19d531ccd959cc4fb6ca39bc04af8b173f8255567b5688636", + "0x21bb27bc057be40e31752c53e7e8867b6d1b155ce46ae32454619adff0be777", + // sSTRK + "0x271f97bd18cdb2e7aff148db683be36891b0dbbffcd42024237a849ef7ad6cd", + "0x1dd8cab616528ba64689a2b7f10bad1acd6bb4e2de3f4f5dab1839f7a89a82e", + "0x24fbb2888e04b47f1bc1f3232528dcfc1ddf69d150b19241628e6d42b3545c6", + "0x1fb33831f458b0786e1a041ac2e9df7603635a7caa88aa4ed30c23a787d4e3a", ]; const debtTokens = [ "0x0491480f21299223b9ce770f23a2c383437f9fbf57abc2ac952e9af8cdb12c97", @@ -76,6 +96,10 @@ const debtTokens = [ "0x4b036839a8769c04144cc47415c64b083a2b26e4a7daa53c07f6042a0d35792", "0x3e0576565c1b51fcac3b402eb002447f21e97abb5da7011c0a2e0b465136814", "0x06726ec97bae4e28efa8993a8e0853bd4bad0bd71de44c23a1cd651b026b00e7", + "0x73fa792a8ad45303db3651c34176dc419bee98bfe45791ab12f884201a90ae2", + "0x424638c9060d08b4820aabbb28347fc7234e2b7aadab58ad0f101e2412ea42d", + "0x25a079284c3cd58bbed989250a169e7e52929070b4bcefaf8f0b9b7be77e5b1", + "0x4349ca3d519e1b1da9da5da3cf19e2039b1776a9fe98c529f95ead7964fe0d", ]; function* chunks(arr, n) { From 915bf90c3efc4ccb0c6b7dd54bc255bb69d93b13 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 13 Dec 2024 16:25:23 +0100 Subject: [PATCH 1447/1768] Update: Fortunafi (more assets) (#12698) --- projects/fortunafi/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/fortunafi/index.js b/projects/fortunafi/index.js index fa3ecdece1..907b59b8a9 100644 --- a/projects/fortunafi/index.js +++ b/projects/fortunafi/index.js @@ -16,7 +16,16 @@ const config = { ifBill: '0x45bafad5a6a531Bc18Cf6CE5B02C58eA4D20589b', }, ethereum: { + fBill: '0x108Ec61bd5A91F5596F824832524C6b6002E3F03', + ifBill: '0x4B57e1E3fd684d3bb82A0652c77FD7412dF6a2A5', fCOIN: '0x2378aC4EEAAe44695E1e3d0fcAEEd6ba8b0F5108', + ifCOIN: '0xA6d0f5bb034312f9a4fC565e916B84c264160994', + fHOOD: '0x62C5e58001f91E65C420c4dc4c2F2FAA2264f846', + ifHOOD: '0x7fC6B348368c34013aaC4a7888883b886226E95e', + fSPQQQ: '0x3010E93c37092991E9C1Cc7f7Eeed44148836657', + ifSPQQQ: '0x6D34113F41d5C3b327b6417fC17Ea449C71eA6f4', + fHV1: '0xD71412e045825d52b38355F8ade1230DD2E393e4', + ifHV1: '0xE7638CB7ad2384D635d2C49AeBE76cfbcceC50ed' }, } From d906e73633eaa65daf46df1342318bc8bcee6f8d Mon Sep 17 00:00:00 2001 From: o-sekiguchi <157677454+o-sekiguchi@users.noreply.github.com> Date: Sat, 14 Dec 2024 00:27:01 +0900 Subject: [PATCH 1448/1768] Add Arbitrum chain to existing Lockon protocol adapter (#12697) --- projects/lockon/index.js | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/projects/lockon/index.js b/projects/lockon/index.js index 3eab9037df..d061659ef0 100644 --- a/projects/lockon/index.js +++ b/projects/lockon/index.js @@ -1,14 +1,26 @@ const START_TIMESTAMP = 1690340140; // 2023-07-26T02:55:40Z -const CONTROLLER_ADDRESS = "0x153e739B8823B277844Ad885A30AC5bD9DfB6E83" - -async function tvl(api) { - const sets = await api.call({ abi: "address[]:getSets", target: CONTROLLER_ADDRESS, }) - const tokens = await api.multiCall({ abi: 'address[]:getComponents', calls: sets}) - const ownerTokens = sets.map((set, i) => [tokens[i], set]) - return api.sumTokens({ ownerTokens }) +const config = { + polygon: { + controllerAddress: "0x153e739B8823B277844Ad885A30AC5bD9DfB6E83", + }, + arbitrum: { + controllerAddress: "0xA36c2B06aFc96Ffd52d148Ed6acbB9fe2Ab864Be", + } } -module.exports = { - start: START_TIMESTAMP, - polygon: { tvl } +function tvlExport({controllerAddress}) { + return async function tvl(api) { + const sets = await api.call({ abi: "address[]:getSets", target: controllerAddress, }) + const tokens = await api.multiCall({ abi: 'address[]:getComponents', calls: sets}) + const ownerTokens = sets.map((set, i) => [tokens[i], set]) + return api.sumTokens({ ownerTokens }) + } + } + +module.exports.start = START_TIMESTAMP +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: tvlExport(config[chain]) + } +}) From 2bfcd60a664bb47a3590bb019f05501ac5206ae4 Mon Sep 17 00:00:00 2001 From: 0xmDreamy <124707942+0xmDreamy@users.noreply.github.com> Date: Sat, 14 Dec 2024 19:22:57 +0700 Subject: [PATCH 1449/1768] feat(abracadabra): Add various new cauldrons (#12708) --- projects/abracadabra/market.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/abracadabra/market.json b/projects/abracadabra/market.json index af4f168f02..f9957bf82f 100644 --- a/projects/abracadabra/market.json +++ b/projects/abracadabra/market.json @@ -9,7 +9,9 @@ "0x7962ACFcfc2ccEBC810045391D60040F635404fb": "0x09400D9DB990D5ed3f35D7be61DfAEB900Af03C9", "0x66805F6e719d7e67D46e8b2501C1237980996C6a": "0x7f1fa204bb700853D36994DA19F830b6Ad18455C", "0x49De724D7125641F56312EBBcbf48Ef107c8FA57": "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", - "0x780db9770dDc236fd659A39430A8a7cC07D0C320": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" + "0x780db9770dDc236fd659A39430A8a7cC07D0C320": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + "0x6B04C535C852AD19345571247ee12B5BF23dAcB6": "0x6985884C4392D348587B19cb9eAAf157F13271cd", + "0xFCE0b2fe7d7d5057C82A896e4D8EC0e4b813f71f": "0x58538e6A46E07434d7E7375Bc268D3cb839C0133" }, "avax": { "0x35fA7A723B3B39f15623Ff1Eb26D8701E7D6bB21": "0x0da67235dD5787D67955420C84ca1cEcd4E5Bb3b", @@ -68,7 +70,9 @@ "0x692887E8877C6Dd31593cda44c382DB5b289B684": "0xf35b31B941D94B249EaDED041DB1b05b7097fEb6", "0x406b89138782851d3a8C04C743b010CEb0374352": "0xdCD90C7f6324cfa40d7169ef80b12031770B4325", "0x85f60D3ea4E86Af43c9D4E9CC9095281fC25c405": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", - "0x00380CB5858664078F2289180CC32F74440AC923": "0x5C5b196aBE0d54485975D1Ec29617D42D9198326" + "0x00380CB5858664078F2289180CC32F74440AC923": "0x5C5b196aBE0d54485975D1Ec29617D42D9198326", + "0x38E7D1e4E2dE5b06b6fc9A91C2c37828854A41bb": "0x5C5b196aBE0d54485975D1Ec29617D42D9198326", + "0xE8ed7455fa1b2a3D8959cD2D59c7f136a45BF341": "0x73075fD1522893D9dC922991542f98F08F2c1C99" }, "fantom": { "0xed745b045f9495b8bfc7b58eea8e0d0597884e12": "0x0DEC85e74A92c52b7F708c4B10207D9560CEFaf0", From b4991748c5e2c0052863667bc167af69a0bf06cb Mon Sep 17 00:00:00 2001 From: Rafael Albuquerque <70333411+0xhafa@users.noreply.github.com> Date: Sat, 14 Dec 2024 10:54:41 -0300 Subject: [PATCH 1450/1768] feat: added marionette vethe deposits in hidden hand (#12702) --- projects/hidden-hand/index.js | 4 +++- projects/hidden-hand/marionette.js | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 projects/hidden-hand/marionette.js diff --git a/projects/hidden-hand/index.js b/projects/hidden-hand/index.js index ed63f14c7f..ffcf2f25d3 100644 --- a/projects/hidden-hand/index.js +++ b/projects/hidden-hand/index.js @@ -1,5 +1,6 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { cachedGraphQuery } = require('../helper/cache') +const marionette = require('./marionette'); const protocol_contracts = { ethereum: { @@ -77,8 +78,9 @@ async function tvl(api) { } module.exports = { - methodology: `Sums bribe tokens deposited on Hidden Hand Reward Distributors, Bribe Vaults and Harvester contracts.`, + methodology: `Sums bribe tokens deposited on Hidden Hand Reward Distributors, Bribe Vaults and Harvester contracts and veTHE deposited in Marionette.`, ethereum: { tvl }, optimism: { tvl }, arbitrum: { tvl }, + bsc: marionette.bsc, }; diff --git a/projects/hidden-hand/marionette.js b/projects/hidden-hand/marionette.js new file mode 100644 index 0000000000..af92074f7e --- /dev/null +++ b/projects/hidden-hand/marionette.js @@ -0,0 +1,23 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + const owners = ["0x60443fd265b4a4D51DFE2569569D45DBde393B14", "0x6045648cF69285fC2018Ca8F3ee8844d5e05Ee5d"]; //marionette adapters + + return sumTokens2({ + api, + owners, + solidlyVeNfts: [ + { + isAltAbi: true, + baseToken: "0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11", + veNft: "0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D" + }, // veTHENA + ], + permitFailure: true, + }); +} + +module.exports = { + methodology: `Sums veTokens deposited on Hidden Hand Marionette Adapters.`, + bsc: { tvl }, +}; From b4aff68d2dfe2e6fb58ddb732aed90bf8bc2a78c Mon Sep 17 00:00:00 2001 From: GMS Vaults Date: Sat, 14 Dec 2024 23:18:08 +0100 Subject: [PATCH 1451/1768] Add GMS Vaults | Base (#12704) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/gmsvaults/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/gmsvaults/index.js diff --git a/projects/gmsvaults/index.js b/projects/gmsvaults/index.js new file mode 100644 index 0000000000..3208fe7ed4 --- /dev/null +++ b/projects/gmsvaults/index.js @@ -0,0 +1,14 @@ +const { staking } = require("../helper/staking"); + +const base_vault = "0xe1515D3A8c503a0fc68015844a9fc742D1c80927"; +const base_staking = "0x3D893CC2C70242907cAac245D04C565056174EF7"; +const base_GMS = "0x13dE6E0290C19893949650fe6fdf9CDfFAFa6040"; + +module.exports = { + doublecounted: true, + methodology: 'staked gms + vault balance', + base: { + staking: staking(base_staking, base_GMS), + tvl: staking(base_vault, '0x2D5875ab0eFB999c1f49C798acb9eFbd1cfBF63c'), + }, +}; \ No newline at end of file From 10a31fd9e595cc060880f4862ae35cd6c35f3057 Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Sat, 14 Dec 2024 17:18:41 -0500 Subject: [PATCH 1452/1768] Added waxfun project (#12710) Co-authored-by: Mike D --- projects/waxfun/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/waxfun/index.js diff --git a/projects/waxfun/index.js b/projects/waxfun/index.js new file mode 100644 index 0000000000..a36b729806 --- /dev/null +++ b/projects/waxfun/index.js @@ -0,0 +1,18 @@ +const { get_account_tvl } = require("../helper/chain/eos"); + +// WaxFun +// https://wax.fun +async function wax() { + const accounts = ["main.waxfun"]; + const tokens = [ + ["eosio.token", "WAX", "wax"] + ]; + return await get_account_tvl(accounts, tokens, "wax"); +} + +module.exports = { + methodology: `WaxFun TVL is achieved by querying token balances from a launchpad contract`, + wax: { + tvl: wax + }, +} \ No newline at end of file From e49706bc75cd4e59cb860ce7868b89877b4371ee Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sun, 15 Dec 2024 04:03:43 +0000 Subject: [PATCH 1453/1768] add treasury for memewe --- projects/treasury/memewe.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/treasury/memewe.js diff --git a/projects/treasury/memewe.js b/projects/treasury/memewe.js new file mode 100644 index 0000000000..108a0151f3 --- /dev/null +++ b/projects/treasury/memewe.js @@ -0,0 +1,15 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + + +module.exports = treasuryExports({ + base: { + owners: [ + '0xFfC60ed4c5ee48beb646dD81521842A4a4d19980', + ], + tokens: [ + nullAddress, + "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" + ], + ownTokens: [], + }, +}) \ No newline at end of file From e8c7d8c0e15d7a2c5b32083430d7c5b11390d1d7 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Sun, 15 Dec 2024 13:59:07 +0400 Subject: [PATCH 1454/1768] Add BBBPump.fun to xdc network (#12703) --- projects/bbbpump/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/bbbpump/index.js diff --git a/projects/bbbpump/index.js b/projects/bbbpump/index.js new file mode 100644 index 0000000000..3b818bdba1 --- /dev/null +++ b/projects/bbbpump/index.js @@ -0,0 +1,25 @@ +const { nullAddress } = require('../helper/unwrapLPs'); +const { stakingPricedLP } = require("../helper/staking"); + +// Contract addresses +const MegadropBBB = "0x37c00AE5C4b49Ab0F5fD2FFB1033588e9bC33B08"; // Megadrop BBB +const BBB = "0xfa4ddcfa8e3d0475f544d0de469277cf6e0a6fd1"; // BBB Token +const XDC_BBB_LP = "0x95ab47ff0056cdc81a42b35d96551d9c5534947d"; // XDC-BBB LP Token +const BBBPump = "0x2E24BFdE1EEDa0F1EA3E57Ba7Ff10ac6516ab5Ec"; // BBBPump + +async function bbbPumpTvl(api) { + return api.sumTokens({ + tokensAndOwners2: [ + [nullAddress], + [BBBPump] + ] + }); +} + +module.exports = { + start: '2024-10-10', + xdc: { + tvl: bbbPumpTvl, + staking: stakingPricedLP(MegadropBBB, BBB, "xdc", XDC_BBB_LP, "wrapped-xdc"), + }, +}; \ No newline at end of file From f9ccb907f6b9acf49f997517074faca18c07a64a Mon Sep 17 00:00:00 2001 From: Knight <74679047+Knight-101@users.noreply.github.com> Date: Sun, 15 Dec 2024 15:50:19 +0530 Subject: [PATCH 1455/1768] updated new apis for vaults (#12712) Co-authored-by: Knight --- projects/kriya-dex-earn/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/kriya-dex-earn/index.js b/projects/kriya-dex-earn/index.js index 60cbaecb1f..02986229aa 100644 --- a/projects/kriya-dex-earn/index.js +++ b/projects/kriya-dex-earn/index.js @@ -2,10 +2,10 @@ const { fetchURL } = require("../helper/utils"); const sui = require("../helper/chain/sui"); const clmmVaultUrl = - "https://88ob93rfva.execute-api.ap-southeast-1.amazonaws.com/release/vaults"; + "https://vjkibmct3h.execute-api.ap-southeast-1.amazonaws.com/release/vaults"; const llVaultUrl = - "https://4sacq88271.execute-api.ap-southeast-1.amazonaws.com/release/vaults"; + "https://c19eainr59.execute-api.ap-southeast-1.amazonaws.com/release/defilama/vaults"; async function clmmVaultTVL(api) { const vaults = (await fetchURL(clmmVaultUrl))?.data; From 39fb855813cddef4be40116fbbcead90d96f7db8 Mon Sep 17 00:00:00 2001 From: RedWilly Date: Sun, 15 Dec 2024 20:56:25 +0000 Subject: [PATCH 1456/1768] Added Bondle.xyz tvl (#12714) --- projects/bondle/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/bondle/index.js diff --git a/projects/bondle/index.js b/projects/bondle/index.js new file mode 100644 index 0000000000..58f89b808e --- /dev/null +++ b/projects/bondle/index.js @@ -0,0 +1,17 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); +const coreAssets = require("../helper/coreAssets.json"); + +const routers = [ + "0x9272ddC213739Dad3B499C2C1245ff4A2cDe313A", + "0xc4d1a89d5BCC5A13c59fe2f3820E20B4f5d3095e", + "0x97b962Ab399beBF439a4a303d9754e79d6925EDa" +]; + + +const tokens = [coreAssets.null]; + +module.exports = { + shibarium: { + tvl: sumTokensExport({ owners: routers, tokens }) + }, +}; \ No newline at end of file From c56a78fcbadca330ab617e1ffb3af4f9a3b637c8 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:54:29 +0800 Subject: [PATCH 1457/1768] Add assets for Opus (#12720) --- projects/opus/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/opus/index.js b/projects/opus/index.js index 5f101278cf..56c6c5c5e6 100644 --- a/projects/opus/index.js +++ b/projects/opus/index.js @@ -7,6 +7,8 @@ const tokensAndOwners = [ [ADDRESSES.starknet.STRK, "0x031a96fe18fe3fdab28822c82c81471f1802800723c8f3e209f1d9da53bc637d"], [ADDRESSES.starknet.WBTC, "0x05bc1c8a78667fac3bf9617903dbf2c1bfe3937e1d37ada3d8b86bf70fb7926e"], [ADDRESSES.starknet.WSTETH, "0x02d1e95661e7726022071c06a95cdae092595954096c373cde24a34bb3984cbf"], + [ADDRESSES.starknet.XSTRK, "0x04a3e7dffd8e74a706be9abe6474e07fbbcf41e1be71387514c4977d54dbc428"], + [ADDRESSES.starknet.SSTRK, "0x03b709f3ab9bc072a195b907fb2c27688723b6e4abb812a8941def819f929bd8"], // Transmuters [ADDRESSES.starknet.USDC, "0x03878595db449e1af7de4fb0c99ddb01cac5f23f9eb921254f4b0723a64a23cb"], ] From 5183d3152dd9d0d978dbaa7c90d7bd1a8fed6f30 Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:55:45 +0800 Subject: [PATCH 1458/1768] update desyn api (#12717) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-farm/helper.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/desyn-farm/helper.js b/projects/desyn-farm/helper.js index 984c4b6fc7..b123d9ce59 100644 --- a/projects/desyn-farm/helper.js +++ b/projects/desyn-farm/helper.js @@ -6,6 +6,7 @@ const abi = { getBalance: "function getBalance(address) view returns (uint256)" } + async function getInfoListPool(strategy_type, chain) { const data = await getConfig('desyn/' + strategy_type, `https://raw.githubusercontent.com/Meta-DesynLab/strategy-asset/refs/heads/main/main/${strategy_type}.json`) return data.config[chain]?.safePools From 01a53a239b97ba2423adc59373f461b077a7be9d Mon Sep 17 00:00:00 2001 From: tanglenaut87 <90203390+tanglenaut87@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:06:16 +0100 Subject: [PATCH 1459/1768] New DEX: Metropolis Exchange (& new chain: Sonic) (#12715) Co-authored-by: tanglenaut <> Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/env.js | 2 ++ projects/helper/tokenMapping.js | 3 +++ projects/metropolis-exchange-amm/index.js | 5 +++++ projects/metropolis-exchange-dlmm/index.js | 5 +++++ 5 files changed, 16 insertions(+) create mode 100644 projects/metropolis-exchange-amm/index.js create mode 100644 projects/metropolis-exchange-dlmm/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index f3569d8435..81a6e959c2 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -300,6 +300,7 @@ "solana", "sommelier", "songbird", + "sonic", "sora", "stacks", "stafi", diff --git a/projects/helper/env.js b/projects/helper/env.js index 9d1fd35aa6..45586acb25 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -25,6 +25,8 @@ const DEFAULTS = { MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", SHAPE_RPC:'https://mainnet.shape.network', SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + SONIC_RPC: "https://rpc.soniclabs.com", + SONIC_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", APECHAIN_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", MORPH_RPC_MULTICALL: "0x33A213b1049D5AD2eeE6e61dAe040955e60383D4", WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 1515d90d15..4dcb089a9e 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -38,6 +38,9 @@ const ibcMappings = { } const fixBalancesTokens = { + sonic: { + '0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38': { coingeckoId: "fantom", decimals: 18 }, + }, // Sample Code ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain diff --git a/projects/metropolis-exchange-amm/index.js b/projects/metropolis-exchange-amm/index.js new file mode 100644 index 0000000000..fc730ab69c --- /dev/null +++ b/projects/metropolis-exchange-amm/index.js @@ -0,0 +1,5 @@ +const { uniTvlExports } = require('../helper/unknownTokens'); + +module.exports = uniTvlExports({ + sonic: '0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0', +}) diff --git a/projects/metropolis-exchange-dlmm/index.js b/projects/metropolis-exchange-dlmm/index.js new file mode 100644 index 0000000000..32d2b584c8 --- /dev/null +++ b/projects/metropolis-exchange-dlmm/index.js @@ -0,0 +1,5 @@ +const { joeV2Export } = require('../helper/traderJoeV2') + +module.exports = joeV2Export({ + sonic: '0x39D966c1BaFe7D3F1F53dA4845805E15f7D6EE43' +}) From 8acd3975086f931ceff5805bc8013b3c443d64df Mon Sep 17 00:00:00 2001 From: RedVeil <44397805+RedVeil@users.noreply.github.com> Date: Mon, 16 Dec 2024 12:19:55 +0100 Subject: [PATCH 1460/1768] VaultCraft/Popcorn - point to updated vault list (#12722) --- projects/popcorn/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index acc9a0e21b..8bc74146b8 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -16,16 +16,19 @@ const fraxLockVaultsNotRegistered = [ "0x1F0a3bF1e4Ea8f27449AFa0a3A27eFc3817431fc", "0xDc5Ed7b972710594082479AF498B1dA02d03a273", ]; + async function tvl(api) { let balances = {}; - const data = await getConfig('popcorn/' + api.chain, `https://raw.githubusercontent.com/Popcorn-Limited/defi-db/main/archive/vaults/${api.getChainId()}.json`); + const data = await getConfig('popcorn/' + api.chain, `https://raw.githubusercontent.com/Popcorn-Limited/defi-db/main/vaults/${api.getChainId()}.json`); let vaultAddresses = Object.keys(data); + if (api.chain === "arbitrum") { let fraxLockVaults = await api.call({ target: "0x25172C73958064f9ABc757ffc63EB859D7dc2219", abi: getVaultsAbi }); fraxLockVaults = fraxLockVaults.concat(fraxLockVaultsNotRegistered); vaultAddresses = vaultAddresses.filter((address) => !fraxLockVaults.includes(address)); await addFraxVaultToTVL(balances, api); } + const assets = await api.multiCall({ abi: getAssetAbi, calls: vaultAddresses, }); const totalAssets = await api.multiCall({ abi: getTotalAssets, calls: vaultAddresses, }); From 269d0e76d03e43514570f0806fce649dc6ea7bc0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 16 Dec 2024 12:20:24 +0100 Subject: [PATCH 1461/1768] update sdk version --- package-lock.json | 6 +++--- projects/helper/env.js | 19 ------------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b6ddb351c..e780464a8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.101", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.101.tgz", - "integrity": "sha512-mlZsTA9dxIDn/VG2qKq6q9BbIikb5UWL7WSI71JNRNDJ0RE/bHiRvpU0gjtgEb6svt5pV5jRsWONjcSPOWcljg==", + "version": "5.0.102", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.102.tgz", + "integrity": "sha512-S+MX9SL02E2IwgpviKIbxEtYjlUkGu8m57e7CjTbRtdyBrGbu1JhsvRCtuKm9Wz+bylX4I7jYbTC2fFdz/vvLg==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/helper/env.js b/projects/helper/env.js index 45586acb25..23c7da1cb9 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -15,29 +15,10 @@ const DEFAULTS = { SUI_RPC: 'https://fullnode.mainnet.sui.io/', SUI_GRAPH_RPC: 'https://sui-mainnet.mystenlabs.com/graphql', FLOW_RPC: 'https://rest-mainnet.onflow.org', - FLOW_EVM_RPC: 'https://mainnet.evm.nodes.onflow.org', MULTIVERSX_RPC: 'https://api.multiversx.com', ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", - IDEX_RPC: "https://xchain-rpc.idex.io", - ETN_RPC: "https://rpc.ankr.com/electroneum", - MATCHAIN_RPC: "https://rpc.matchscan.io,https://rpc.matchain.io", - MATCHAIN_RPC_MULTICALL: "0xDa91510Bd8c50bfa54FC2BE2dD6dAbE03eA8496c", - SHAPE_RPC:'https://mainnet.shape.network', - SHAPE_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", - SONIC_RPC: "https://rpc.soniclabs.com", - SONIC_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", - APECHAIN_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", - MORPH_RPC_MULTICALL: "0x33A213b1049D5AD2eeE6e61dAe040955e60383D4", - WC_RPC: "https://worldchain-mainnet.g.alchemy.com/public", - APECHAIN_RPC: "https://rpc.apechain.com", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", - UNIT0_RPC: "https://rpc.unit0.dev", - RBN_RPC: "https://governors.mainnet.redbelly.network", - CORN_RPC: "https://rpc.ankr.com/corn_maizenet", - ACE_RPC_MULTICALL: "0x025A2B4fCE1E0bD736D5cebe6C8a52229795376B", - ZILLIQA_RPC_MULTICALL: "0x38899efb93d5106d3adb86662c557f237f6ecf57", - VINU_RPC_MULTICALL: "0x63CE2062281fb85fE5BC407799A455C21f35F355", } const ENV_KEYS = [ From 087e6ed20e73de70f16b1d692cba1ed5d6ce05a6 Mon Sep 17 00:00:00 2001 From: help_me_up <93499348+jaejeonglee@users.noreply.github.com> Date: Mon, 16 Dec 2024 20:22:56 +0900 Subject: [PATCH 1462/1768] feat: new feature on goldstation (#12721) Co-authored-by: Booyoun --- projects/goldstation-dex/index.js | 12 +++++++++++- projects/goldstation-rwa/index.js | 8 +++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/projects/goldstation-dex/index.js b/projects/goldstation-dex/index.js index 7a965859b3..4540d2a5aa 100644 --- a/projects/goldstation-dex/index.js +++ b/projects/goldstation-dex/index.js @@ -1,5 +1,6 @@ const { getUniTVL } = require('../helper/unknownTokens'); const { sumTokensExport } = require('../helper/unwrapLPs'); +const { uniV3Export } = require("../helper/uniswapV3"); module.exports = { misrepresentedTokens: true, @@ -8,6 +9,15 @@ module.exports = { staking: sumTokensExport({ tokensAndOwners: [ ['0x4836cc1f355bb2a61c210eaa0cd3f729160cd95e', '0x4d55B04AC52b2CA41ad04337FF13CbAefbdC8954'], ]}) - } + }, + avax: { + tvl: uniV3Export({ + avax: { + factory: "0xF72f4652785a5186EDF7b93a9cfd246FeFc0ef5c", + fromBlock: 52760680, + isAlgebra: false, + }, + }), + }, } diff --git a/projects/goldstation-rwa/index.js b/projects/goldstation-rwa/index.js index ba828d7a03..9bdf133e74 100644 --- a/projects/goldstation-rwa/index.js +++ b/projects/goldstation-rwa/index.js @@ -6,7 +6,13 @@ async function tvl(api) { const supply = await api.call({ abi: 'erc20:totalSupply', target: GPC }) api.add(GPC, supply) - const lps = ['0xCd13CD31fb61345Abe7B7376A4664784622817EE'] + const lps = [ + '0xCd13CD31fb61345Abe7B7376A4664784622817EE', + '0xF1294AA9CF51fB138CB30324D2A7CE5c53DD6876', + '0xD8219DeE0BEf8f8CE618572A572f87ea27Ac8285', + '0xB5E70F160077163A2D90F4828Ef2EfF7e5F57915', + '0xf2426f8b8cb0352fd03319300b6d4d6837915d45' + ] return sumUnknownTokens({ api, lps, useDefaultCoreAssets: true }) } From 946107714d9850717d0ace21d2c41f8da51b0cca Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:47:14 +0000 Subject: [PATCH 1463/1768] add ethena (#12723) --- projects/ethena-usdtb/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/ethena-usdtb/index.js diff --git a/projects/ethena-usdtb/index.js b/projects/ethena-usdtb/index.js new file mode 100644 index 0000000000..700a3d514a --- /dev/null +++ b/projects/ethena-usdtb/index.js @@ -0,0 +1,10 @@ +const USDtb = "0xc139190f447e929f090edeb554d95abb8b18ac1c" + +module.exports = { + ethereum: { + tvl: async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: USDtb }) + api.add(USDtb, supply) + }, + } +} From c0b46529db2f667485d4acec38c78beb51c2b674 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:51:21 +0100 Subject: [PATCH 1464/1768] update velar --- projects/velar-amm/api.js | 40 +++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/projects/velar-amm/api.js b/projects/velar-amm/api.js index 0357b39ec4..58e64eda5c 100644 --- a/projects/velar-amm/api.js +++ b/projects/velar-amm/api.js @@ -1,29 +1,45 @@ +const { sumTokens } = require('../helper/chain/stacks') const { call } = require('../helper/chain/stacks-api') const { transformDexBalances } = require('../helper/portedTokens') const { sleep } = require('../helper/utils') const sdk = require('@defillama/sdk') const factory = 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-core' +const factory2 = 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-registry_v1_0_0' +const stableFactory = 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-registry_v1_1_0' module.exports = { stacks: { tvl } } -async function tvl() { +async function tvl(api) { + await uniTvl(api, stableFactory, true) + await uniTvl(api, factory) + // await uniTvl(api, factory2) +} + + +async function uniTvl(api, factory, isStable = false) { const data = [] const pairCount = +(await call({ target: factory, abi: 'get-nr-pools' })).toString() for (let i = 1; i <= pairCount; i++) { - const { - token0, token1, reserve0, reserve1, - } = await call({ target: factory, abi: 'do-get-pool', inputArgs: [{ type: 'uint', value: i }] }) - data.push({ - token0: token0.value, - token1: token1.value, - token0Bal: reserve0.value, - token1Bal: reserve1.value, - }) + const res = await call({ target: factory, abi: 'do-get-pool', inputArgs: [{ type: 'uint', value: i }] }) + const { token0, token1, reserve0, reserve1, ...rest } = res + // console.log({ token0, token1, reserve0, reserve1, rest, pairCount }) + // console.log(rest['lp-token']?.value) + // console.log(res) + if (isStable) { + await sumTokens({ owner: rest.contract.value, balances: api.getBalances() }) + } + else + data.push({ + token0: token0.value, + token1: token1.value, + token0Bal: reserve0?.value, + token1Bal: reserve1?.value, + }) sdk.log(`velar-amm: ${i}/${pairCount}`) - await sleep(2100) + await sleep(1100) } - return transformDexBalances({ chain: 'stacks', data }) + return transformDexBalances({ chain: 'stacks', data, balances: api.getBalances() }) } \ No newline at end of file From 9941dd3b30e9f5246236b66c58d2cb8daefad0ac Mon Sep 17 00:00:00 2001 From: "harry(jimi)" <691742@gmail.com> Date: Mon, 16 Dec 2024 23:06:32 +0800 Subject: [PATCH 1465/1768] fix: delta-trade near tvl missing some tokens (#12725) --- projects/deltatrade.js | 33 ++++++++++++++------------------- projects/helper/chain/near.js | 3 +++ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/projects/deltatrade.js b/projects/deltatrade.js index 815fecee33..784017fb2c 100644 --- a/projects/deltatrade.js +++ b/projects/deltatrade.js @@ -1,4 +1,3 @@ -const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require('./helper/chain/near') const { getConfig } = require('./helper/cache') const { get } = require('./helper/http') @@ -12,34 +11,25 @@ const programId = new PublicKey('CNLGhYQgNwjyDfHZTEjHfk1MPkqwP96qZahWN82UfcLM'); const GRID_CONTRACT_ID = 'grid.deltatrade.near'; const DCA_CONTRACT_ID = 'dca.deltatrade.near'; -const tokens = [ - 'wrap.near', - '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1', - 'token.v2.ref-finance.near', - ADDRESSES.near.BURROW, - 'token.lonkingnearbackto2024.near', - 'blackdragon.tkn.near', - 'ftv2.nekotoken.near', - 'gear.enleap.near', - 'token.0xshitzu.near', - 'edge-fast.near', - '802d89b6e511b335f05024a65161bce7efc3f311.factory.bridge.near', -] +const nearApi = 'https://api.deltatrade.ai'; +const solanaApi = 'https://solapi.deltatrade.ai'; + module.exports = { timetravel: false, near: { - tvl: () => sumTokens({ tokens, owners: [GRID_CONTRACT_ID, DCA_CONTRACT_ID] }), + tvl: nearTVL, }, solana: { tvl: solanaTvl, } } -async function getTokens() { - return getConfig('deltatrade/sol-pairs', undefined, { +async function getTokens(chain) { + return getConfig(`deltatrade/${chain}-pairs`, undefined, { fetcher: async () => { - const { data } = await get('https://solapi.deltatrade.ai/api/bot/grid/pairs'); + const url = `${chain === 'solana' ? solanaApi : nearApi}/api/bot/grid/pairs`; + const { data } = await get(url); const tokenSet = new Set() data.forEach(pair => { tokenSet.add(pair.base_token.code) @@ -52,6 +42,11 @@ async function getTokens() { }) } +async function nearTVL(){ + const tokens = await getTokens('near'); + return sumTokens({ tokens, owners: [GRID_CONTRACT_ID, DCA_CONTRACT_ID] }) +} + function getGlobalBalanceUser(token) { const [globalBalPda] = PublicKey.findProgramAddressSync([Buffer.from("global_balance_user"), state.toBuffer(), new PublicKey(token).toBuffer()], programId); @@ -61,7 +56,7 @@ function getGlobalBalanceUser(token) { } async function solanaTvl() { - const tokens = await getTokens(); + const tokens = await getTokens('solana'); const tokenAccounts = tokens.map(getGlobalBalanceUser) return sumTokens2({ tokenAccounts }) } diff --git a/projects/helper/chain/near.js b/projects/helper/chain/near.js index c79feedea2..55e6d4137d 100644 --- a/projects/helper/chain/near.js +++ b/projects/helper/chain/near.js @@ -51,6 +51,9 @@ const tokenMapping = { 'blackdragon.tkn.near': { name: 'black-dragon', decimals: 24 }, 'gear.enleap.near': { name: 'near-tinker-union-gear', decimals: 18 }, 'token.0xshitzu.near': { name: 'shitzu', decimals: 18 }, + 'purge-558.meme-cooking.near': { name: 'forgive-me-father', decimals: 18 }, + 'mpdao-token.near': { name: 'meta-pool-dao', decimals: 6 }, + 'kat.token0.near': { name: 'nearkat', decimals: 18 }, } async function view_account(account_id) { From b15bbba4dc581f3821ec355c2dd4558942c1392e Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 16 Dec 2024 16:12:46 +0000 Subject: [PATCH 1466/1768] add dai to spark borrows --- projects/spark-fi/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/spark-fi/index.js b/projects/spark-fi/index.js index 62f0098512..1771aae1c1 100644 --- a/projects/spark-fi/index.js +++ b/projects/spark-fi/index.js @@ -1,8 +1,11 @@ const ADDRESSES = require('../helper/coreAssets.json') -const { aaveExports } = require('../helper/aave'); +const { aaveExports, aaveChainTvl } = require('../helper/aave'); module.exports = { - ethereum: aaveExports('ethereum', '0x03cFa0C4622FF84E50E75062683F44c9587e6Cc1', undefined, ["0xFc21d6d146E6086B8359705C8b28512a983db0cb"], { v3: true, blacklistedTokens: [ADDRESSES.ethereum.DAI]}), + ethereum: { + tvl: aaveChainTvl('ethereum', '0x03cFa0C4622FF84E50E75062683F44c9587e6Cc1', undefined, ["0xFc21d6d146E6086B8359705C8b28512a983db0cb"], false, true, { blacklistedTokens: [ADDRESSES.ethereum.DAI] }), + borrowed: aaveChainTvl('ethereum', '0x03cFa0C4622FF84E50E75062683F44c9587e6Cc1', undefined, ["0xFc21d6d146E6086B8359705C8b28512a983db0cb"], true, true, {}) + }, xdai: aaveExports('xdai', '0xA98DaCB3fC964A6A0d2ce3B77294241585EAbA6d', undefined, ["0x2a002054A06546bB5a264D57A81347e23Af91D18"], { v3: true}) }; \ No newline at end of file From b0f13c9657a6514eda2fbdbd264c940d4d917911 Mon Sep 17 00:00:00 2001 From: Timepunk <45543880+0xTimepunk@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:17:03 +0000 Subject: [PATCH 1467/1768] feat: add halmark (#12726) --- projects/superform/index.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/projects/superform/index.js b/projects/superform/index.js index ddaa4146a2..5d0e489620 100644 --- a/projects/superform/index.js +++ b/projects/superform/index.js @@ -10,11 +10,11 @@ async function tvl(api) { const getSuperformRes = await api.multiCall({ abi: "function getSuperform(uint256) external view returns(address, uint32, uint64)", calls: forms, target: api.chainId === 250 ? fantom_factory_contract : factory_contract }) const super4626 = getSuperformRes.map(v => v[0]) const vaults = await api.multiCall({ abi: 'address:vault', calls: super4626 }) - + // Filter out blacklisted vaults const filteredVaults = vaults.filter(vault => !blacklisted_vaults.includes(vault.toLowerCase())); const filteredSuper4626 = super4626.filter((_, index) => !blacklisted_vaults.includes(vaults[index].toLowerCase())); - + const assets = await api.multiCall({ abi: 'address:asset', calls: filteredSuper4626 }) const vBals = await api.multiCall({ abi: "erc20:balanceOf", calls: filteredVaults.map((v, i) => ({ target: v, params: filteredSuper4626[i] })) }) const bals = await api.multiCall({ abi: "function previewRedeemFrom(uint256) external view returns(uint256)", calls: filteredSuper4626.map((v, i) => ({ target: v, params: vBals[i] })), permitFailure: true }) @@ -26,8 +26,9 @@ async function tvl(api) { module.exports = { methodology: "counts the TVL of each superform across all the supported networks", hallmarks: [ - [1707350400,"Early Access"], - [1715212800,"Open Launch"] + [1707350400, "Early Access"], + [1715212800, "Open Launch"], + [1734012000, "SuperVaults Launch"], ] }; From ff8e4f465b21724bc10126f5586898c5f380f5a4 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 16 Dec 2024 22:56:08 +0000 Subject: [PATCH 1468/1768] update from usdt to usdc for calculation --- projects/hyperliquid-perp/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/hyperliquid-perp/index.js b/projects/hyperliquid-perp/index.js index 5c14aacaae..4e7268de7f 100644 --- a/projects/hyperliquid-perp/index.js +++ b/projects/hyperliquid-perp/index.js @@ -3,7 +3,7 @@ const { post } = require('../helper/http') async function tvl(api) { let data= await post('https://api.hyperliquid.xyz/info', {"type":"tvlBreakdown"}) data = data.find(i => i.protocol === "Hyperliquid Perps DEX") - data.tokens.forEach(i => api.addCGToken('tether', +i.usdcValue)) + data.tokens.forEach(i => api.addCGToken('usd-coin', +i.usdcValue)) } module.exports = { From b596885202863007f15d2a71508802a942fb664c Mon Sep 17 00:00:00 2001 From: Real Shaman <85087525+realdealshaman@users.noreply.github.com> Date: Tue, 17 Dec 2024 05:10:27 +0000 Subject: [PATCH 1469/1768] Update index.js add hallmarks --- projects/bluefin-amm/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/bluefin-amm/index.js b/projects/bluefin-amm/index.js index 47c79bb914..0da5184623 100644 --- a/projects/bluefin-amm/index.js +++ b/projects/bluefin-amm/index.js @@ -13,7 +13,11 @@ async function suiTvl(api) { module.exports = { + hallmarks: [ + [1731974400, "Spot Launch"]. + [1733875200, "BLUE Token"] + ], sui: { tvl: suiTvl }, -} \ No newline at end of file +} From 468fab836f31f3aa120574993228642ef73581dd Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 17 Dec 2024 05:13:42 +0000 Subject: [PATCH 1470/1768] fix syntax --- projects/bluefin-amm/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/bluefin-amm/index.js b/projects/bluefin-amm/index.js index 0da5184623..a82891ef0c 100644 --- a/projects/bluefin-amm/index.js +++ b/projects/bluefin-amm/index.js @@ -14,7 +14,7 @@ async function suiTvl(api) { module.exports = { hallmarks: [ - [1731974400, "Spot Launch"]. + [1731974400, "Spot Launch"], [1733875200, "BLUE Token"] ], sui: { From 6a0fa1b2664a29b7a5f22862ce279990fd4528f6 Mon Sep 17 00:00:00 2001 From: UtyabLabs <168716796+utyablabs@users.noreply.github.com> Date: Tue, 17 Dec 2024 08:59:00 +0100 Subject: [PATCH 1471/1768] Add UtyabSwap TVL (#12733) Co-authored-by: Tiqan Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/ton.js | 5 +- projects/helper/chain/utils/ton-address.js | 237 +++++++++++++++++++++ projects/utyabswap/index.js | 44 ++++ 3 files changed, 285 insertions(+), 1 deletion(-) create mode 100644 projects/helper/chain/utils/ton-address.js create mode 100644 projects/utyabswap/index.js diff --git a/projects/helper/chain/ton.js b/projects/helper/chain/ton.js index e606ac5b84..43a4266227 100644 --- a/projects/helper/chain/ton.js +++ b/projects/helper/chain/ton.js @@ -73,7 +73,7 @@ function sumTokensExport({ ...args }) { return (api) => sumTokens({ api, ...args }) } -async function call({ target, abi, params = [] }) { +async function call({ target, abi, params = [], rawStack = false, }) { const requestBody = { "address": target, "method": abi, @@ -87,6 +87,9 @@ async function call({ target, abi, params = [] }) { if (exit_code !== 0) { throw new Error('Expected a zero exit code, but got ' + exit_code) } + + if (rawStack) return stack + stack.forEach((i, idx) => { if (i[0] === 'num') { stack[idx] = parseInt(i[1], 16) diff --git a/projects/helper/chain/utils/ton-address.js b/projects/helper/chain/utils/ton-address.js new file mode 100644 index 0000000000..62720d6da4 --- /dev/null +++ b/projects/helper/chain/utils/ton-address.js @@ -0,0 +1,237 @@ +const bounceable_tag = 0x11; +const non_bounceable_tag = 0x51; +const test_flag = 0x80; + +function crc16(data) { + const poly = 0x1021; + let reg = 0; + const message = Buffer.alloc(data.length + 2); + message.set(data); + for (let byte of message) { + let mask = 0x80; + while (mask > 0) { + reg <<= 1; + if (byte & mask) { + reg += 1; + } + mask >>= 1; + if (reg > 0xffff) { + reg &= 0xffff; + reg ^= poly; + } + } + } + return Buffer.from([Math.floor(reg / 256), reg % 256]); +} + +function parseFriendlyAddress(src) { + if (typeof src === "string" && !Address.isFriendly(src)) { + throw new Error("Unknown address type"); + } + const data = Buffer.isBuffer(src) ? src : Buffer.from(src, "base64"); + // 1byte tag + 1byte workchain + 32 bytes hash + 2 byte crc + if (data.length !== 36) { + throw new Error("Unknown address type: byte length is not equal to 36"); + } + // Prepare data + const addr = data.subarray(0, 34); + const crc = data.subarray(34, 36); + const calcedCrc = (0, crc16)(addr); + if (!(calcedCrc[0] === crc[0] && calcedCrc[1] === crc[1])) { + throw new Error("Invalid checksum: " + src); + } + // Parse tag + let tag = addr[0]; + let isTestOnly = false; + let isBounceable = false; + if (tag & test_flag) { + isTestOnly = true; + tag = tag ^ test_flag; + } + if (tag !== bounceable_tag && tag !== non_bounceable_tag) + throw "Unknown address tag"; + isBounceable = tag === bounceable_tag; + let workchain = null; + if (addr[1] === 0xff) { + // TODO we should read signed integer here + workchain = -1; + } else { + workchain = addr[1]; + } + const hashPart = addr.subarray(2, 34); + return { isTestOnly, isBounceable, workchain, hashPart }; +} +class Address { + static isAddress(src) { + return src instanceof Address; + } + static isFriendly(source) { + // Check length + if (source.length !== 48) { + return false; + } + // Check if address is valid base64 + if (!/[A-Za-z0-9+/_-]+/.test(source)) { + return false; + } + return true; + } + static isRaw(source) { + // Check if has delimiter + if (source.indexOf(":") === -1) { + return false; + } + let [wc, hash] = source.split(":"); + // wc is not valid + if (!Number.isInteger(parseFloat(wc))) { + return false; + } + // hash is not valid + if (!/[a-f0-9]+/.test(hash.toLowerCase())) { + return false; + } + // has is not correct + if (hash.length !== 64) { + return false; + } + return true; + } + static normalize(source) { + if (typeof source === "string") { + return Address.parse(source).toString(); + } else { + return source.toString(); + } + } + static parse(source) { + if (Address.isFriendly(source)) { + return this.parseFriendly(source).address; + } else if (Address.isRaw(source)) { + return this.parseRaw(source); + } else { + throw new Error("Unknown address type: " + source); + } + } + static parseRaw(source) { + let workChain = parseInt(source.split(":")[0]); + let hash = Buffer.from(source.split(":")[1], "hex"); + return new Address(workChain, hash); + } + static parseFriendly(source) { + if (Buffer.isBuffer(source)) { + let r = parseFriendlyAddress(source); + return { + isBounceable: r.isBounceable, + isTestOnly: r.isTestOnly, + address: new Address(r.workchain, r.hashPart), + }; + } else { + let addr = source.replace(/\-/g, "+").replace(/_/g, "/"); // Convert from url-friendly to true base64 + let r = parseFriendlyAddress(addr); + return { + isBounceable: r.isBounceable, + isTestOnly: r.isTestOnly, + address: new Address(r.workchain, r.hashPart), + }; + } + } + constructor(workChain, hash) { + this.toRawString = () => { + return this.workChain + ":" + this.hash.toString("hex"); + }; + this.toRaw = () => { + const addressWithChecksum = Buffer.alloc(36); + addressWithChecksum.set(this.hash); + addressWithChecksum.set( + [ + this.workChain, + this.workChain, + this.workChain, + this.workChain, + ], + 32 + ); + return addressWithChecksum; + }; + this.toStringBuffer = (args) => { + let testOnly = + args && args.testOnly !== undefined ? args.testOnly : false; + let bounceable = + args && args.bounceable !== undefined ? args.bounceable : true; + let tag = bounceable ? bounceable_tag : non_bounceable_tag; + if (testOnly) { + tag |= test_flag; + } + const addr = Buffer.alloc(34); + addr[0] = tag; + addr[1] = this.workChain; + addr.set(this.hash, 2); + const addressWithChecksum = Buffer.alloc(36); + addressWithChecksum.set(addr); + addressWithChecksum.set((0, crc16)(addr), 34); + return addressWithChecksum; + }; + this.toString = (args) => { + let urlSafe = + args && args.urlSafe !== undefined ? args.urlSafe : true; + let buffer = this.toStringBuffer(args); + if (urlSafe) { + return buffer + .toString("base64") + .replace(/\+/g, "-") + .replace(/\//g, "_"); + } else { + return buffer.toString("base64"); + } + }; + if (hash.length !== 32) { + throw new Error("Invalid address hash length: " + hash.length); + } + this.workChain = workChain; + this.hash = hash; + Object.freeze(this); + } + equals(src) { + if (src.workChain !== this.workChain) { + return false; + } + return src.hash.equals(this.hash); + } +} + +const addressToInt = (address) => { + return BigInt(`0x${address.toRawString().replace("0:", "")}`); +}; + +const intTo256BitHex = (n) => { + // Convert the BigInt to a hexadecimal string + const hex = n.toString(16); + // Pad with leading zeros to ensure it is 64 characters (256 bits) + return hex.padStart(64, "0"); +}; + +const convertIntToAddress = (uint) => { + const addressString = `0:${intTo256BitHex(uint)}`; + return Address.parseRaw(addressString); +}; + +const compareAddress = (a, b) => { + if (!a || !b) { + return false; + } + + try { + const parsedA = typeof a === "string" ? Address.parse(a) : a; + const parsedB = typeof b === "string" ? Address.parse(b) : b; + + return parsedA.equals(parsedB); + } catch { + return false; + } +}; + +module.exports = { + addressToInt, + convertIntToAddress, + compareAddress, +}; \ No newline at end of file diff --git a/projects/utyabswap/index.js b/projects/utyabswap/index.js new file mode 100644 index 0000000000..1f0d46403c --- /dev/null +++ b/projects/utyabswap/index.js @@ -0,0 +1,44 @@ +const { getConfig } = require("../helper/cache"); +const { call } = require("../helper/chain/ton"); +const { transformDexBalances } = require("../helper/portedTokens"); +const { convertIntToAddress, } = require("../helper/chain/utils/ton-address"); +const { PromisePool } = require("@supercharge/promise-pool"); +const { sleep } = require("../helper/utils"); + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + ton: { + tvl: async () => { + const pools = await getConfig('utyabswap', "https://api.utyabswap.com/v1/pools"); + const getPoolData = async (pool) => { + const data = await call({ target: pool.address, abi: "get_assets_full", rawStack: true, }); + + data.shift().pop(); + const asset0AddressInt = data.shift().pop(); + const asset0Address = convertIntToAddress(BigInt(asset0AddressInt)).toString() + const asset0Reserve = Number(data.shift().pop()) + + data.shift().pop(); + const asset1AddressInt = data.shift().pop(); + const asset1Address = convertIntToAddress(BigInt(asset1AddressInt)).toString() + const asset1Reserve = Number(data.shift().pop()) + + await sleep(1000 * (2 * Math.random() + 2)) + + return { + token0: asset0Address, + token1: asset1Address, + token0Bal: asset0Reserve, + token1Bal: asset1Reserve, + } + } + + const { results: data, errors } = await PromisePool.withConcurrency(2).for(pools).process(getPoolData); + + if (errors && errors.length) throw errors[0]; + + return transformDexBalances({ chain: "ton", data, }); + }, + }, +}; From e27e26241a2f1f469e638b2c77311a805115422d Mon Sep 17 00:00:00 2001 From: Cassian <164681176+cassianvalor@users.noreply.github.com> Date: Tue, 17 Dec 2024 10:59:20 +0300 Subject: [PATCH 1472/1768] track opengpu tvl/staking (#12732) Co-authored-by: cassianvalor --- projects/opengpu/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/opengpu/index.js diff --git a/projects/opengpu/index.js b/projects/opengpu/index.js new file mode 100644 index 0000000000..e60c3d05f4 --- /dev/null +++ b/projects/opengpu/index.js @@ -0,0 +1,20 @@ +const { staking } = require('../helper/staking'); +const { sumTokensExport } = require("../helper/unwrapLPs"); +const coreAssets = require("../helper/coreAssets.json"); + +const CONTRACTS = [ + '0x3C9634620A626b7e9a3fB74A8f800d67cdaF2A5B', + '0x695a9c59cd823cbb2cd8331a835d1eb7982b170a' +]; + +const oGPU = '0x067Def80D66fB69C276e53b641f37ff7525162f6'; + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owners: CONTRACTS, + token: coreAssets.null + }), + staking: staking(CONTRACTS, oGPU), + }, +}; \ No newline at end of file From de6c8e2dfcec9ba00e8c002e51ca4f5828562d2d Mon Sep 17 00:00:00 2001 From: SboomFi Date: Tue, 17 Dec 2024 15:10:46 +0700 Subject: [PATCH 1473/1768] add-sonic (#12729) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 1 + projects/sboomfi/index.js | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 projects/sboomfi/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 4dcb089a9e..c392aa4e92 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,6 +40,7 @@ const ibcMappings = { const fixBalancesTokens = { sonic: { '0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38': { coingeckoId: "fantom", decimals: 18 }, + '0x832497895f05100e53f42dfa8fc758b4866b183a': { coingeckoId: "fantom", decimals: 18 }, }, // Sample Code ozone: { diff --git a/projects/sboomfi/index.js b/projects/sboomfi/index.js new file mode 100644 index 0000000000..08f9002788 --- /dev/null +++ b/projects/sboomfi/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + sonic: '0x3638Ca700D67D560Be2A2d0DD471640957564829' +}) \ No newline at end of file From 1148127302f92524ead88fa2a6525c337714813a Mon Sep 17 00:00:00 2001 From: TsimakuridzeNikolozi <100114440+TsimakuridzeNikolozi@users.noreply.github.com> Date: Tue, 17 Dec 2024 12:11:03 +0400 Subject: [PATCH 1474/1768] Added hETHWETH Gauge Token to Hinkal Token registry (#12730) --- projects/hinkal/registryTokens.js | 1 + projects/hinkal/registryTokensWithUnderlyingAddresses.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/projects/hinkal/registryTokens.js b/projects/hinkal/registryTokens.js index 18f49e9743..11eb4ad25d 100644 --- a/projects/hinkal/registryTokens.js +++ b/projects/hinkal/registryTokens.js @@ -255,6 +255,7 @@ const ETHEREUM_REGISTRY_TOKENS = [ "0x35d8949372d46b7a3d5a56006ae77b215fc69bc0", "0x1f7e9321ce32af1f9ea1185fd10d31fea31ffd95", "0x270B7748CdF8243bFe68FaCE7230ef0fCE695389", + "0x8B2098043Cea715A18E81CC0A6a9d202Cf279014", ]; const ARBITRUM_REGISTRY_TOKENS = [ diff --git a/projects/hinkal/registryTokensWithUnderlyingAddresses.js b/projects/hinkal/registryTokensWithUnderlyingAddresses.js index baf20579c0..f8b4bb45aa 100644 --- a/projects/hinkal/registryTokensWithUnderlyingAddresses.js +++ b/projects/hinkal/registryTokensWithUnderlyingAddresses.js @@ -88,6 +88,8 @@ const ETHEREUM_REGISTRY_TOKENS_WITH_UNDERLYING_ADDRESSES = { ADDRESSES.ethereum.USDT, "0x028171bCA77440897B824Ca71D1c56caC55b68A3": ADDRESSES.ethereum.DAI, + "0x8B2098043Cea715A18E81CC0A6a9d202Cf279014": + "0x1f7e9321ce32af1f9ea1185fd10d31fea31ffd95", }; const ARBITRUM_REGISTRY_TOKENS_WITH_UNDERLYING_ADDRESSES = { From 594019069b51c86f73b475e2407855e33c15d03d Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:43:22 +0530 Subject: [PATCH 1475/1768] stSUI: Liquid staking protocol by AlphaFi (#12728) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi-stsui/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/alphafi-stsui/index.js diff --git a/projects/alphafi-stsui/index.js b/projects/alphafi-stsui/index.js new file mode 100644 index 0000000000..945514b6a7 --- /dev/null +++ b/projects/alphafi-stsui/index.js @@ -0,0 +1,16 @@ +const sui = require('../helper/chain/sui') + +async function tvl() { + const pool = await sui.getObject('0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5'); + const suiAmount = pool.fields.storage.fields.total_sui_supply / 10 ** 9 + return { + sui: suiAmount, + } +} + +module.exports = { + methodology: "Calculates the amount of SUI staked in stSui liquid staking contracts.", + sui: { + tvl, + } +} From 950b2d1fd0da10b6a505c0367e9dd26c79d3183e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:20:13 +0100 Subject: [PATCH 1476/1768] beetx: Add support for Sonic and refactor code (#12734) Co-authored-by: franz --- projects/beethovenx-sftmx/index.js | 34 ++++++++++++++++++------------ projects/beethovenx/index.js | 3 +++ projects/helper/tokenMapping.js | 1 + 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/projects/beethovenx-sftmx/index.js b/projects/beethovenx-sftmx/index.js index 9d02242bdb..d48f8736a6 100644 --- a/projects/beethovenx-sftmx/index.js +++ b/projects/beethovenx-sftmx/index.js @@ -1,17 +1,23 @@ -const ADDRESSES = require("../helper/coreAssets.json"); -const liquidStakingContract = "0xB458BfC855ab504a8a327720FcEF98886065529b"; - -async function tvl(api) { - const supply = await api.call({ - abi: "uint256:totalFTMWorth", - target: liquidStakingContract, - }); - api.add(ADDRESSES.null, supply); -} +const { sumTokens2 } = require("../helper/unwrapLPs"); module.exports = { - methodology: "Retrieve the total underlying FTM supply", - fantom: { - tvl, - }, + methodology: "Retrieve the total underlying FTM/sonic supply", }; + + +const config = { + fantom: '0xB458BfC855ab504a8a327720FcEF98886065529b', + sonic: '0xe5da20f15420ad15de0fa650600afc998bbe3955', +} + +Object.keys(config).forEach(chain => { + const liquidStakingContract = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const abi = chain === 'fantom' ? 'totalFTMWorth' : 'totalAssets' + const supply = await api.call({ abi: "uint256:" + abi, target: liquidStakingContract, }); + api.addGasToken(supply) + return sumTokens2({ api }) + } + } +}) \ No newline at end of file diff --git a/projects/beethovenx/index.js b/projects/beethovenx/index.js index 4866706c1d..c3763a50fc 100644 --- a/projects/beethovenx/index.js +++ b/projects/beethovenx/index.js @@ -7,4 +7,7 @@ module.exports = { optimism: { tvl: onChainTvl('0xBA12222222228d8Ba445958a75a0704d566BF2C8', 7003431), }, + sonic: { + tvl: onChainTvl('0xBA12222222228d8Ba445958a75a0704d566BF2C8', 368312), + }, }; diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c392aa4e92..1858351b73 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -39,6 +39,7 @@ const ibcMappings = { const fixBalancesTokens = { sonic: { + [ADDRESSES.null]: { coingeckoId: "fantom", decimals: 18 }, '0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38': { coingeckoId: "fantom", decimals: 18 }, '0x832497895f05100e53f42dfa8fc758b4866b183a': { coingeckoId: "fantom", decimals: 18 }, }, From e03d17f65f8774ce9e17611ca717b1cbeaea2279 Mon Sep 17 00:00:00 2001 From: MishaShWoof Date: Tue, 17 Dec 2024 11:47:15 +0200 Subject: [PATCH 1477/1768] feat: add new comet (#12736) From cbe250c7a8c735d6b1d3b964d459d27b4f0470ee Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Dec 2024 11:10:30 +0100 Subject: [PATCH 1478/1768] migrate token mapping --- projects/helper/coreAssets.json | 10 ++++++++++ projects/helper/tokenMapping.js | 11 ----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 1542216f88..be3f826f7e 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -2076,5 +2076,15 @@ }, "corn": { "BTCN": "0xda5ddd7270381a7c2717ad10d1c0ecb19e3cdfb2" + }, + "sonic": { + "wS": "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38", + "WS_1": "0x832497895f05100e53f42dfa8fc758b4866b183a" + }, + "vinu": { + "USDT": "0xC0264277fcCa5FCfabd41a8bC01c1FcAF8383E41", + "ETH": "0xDd4b9b3Ce03faAbA4a3839c8B5023b7792be6e2C", + "VINU": "0x00c1E515EA9579856304198EFb15f525A0bb50f6", + "WVC": "0xEd8c5530a0A086a12f57275728128a60DFf04230" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 1858351b73..9701731659 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -38,11 +38,6 @@ const ibcMappings = { } const fixBalancesTokens = { - sonic: { - [ADDRESSES.null]: { coingeckoId: "fantom", decimals: 18 }, - '0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38': { coingeckoId: "fantom", decimals: 18 }, - '0x832497895f05100e53f42dfa8fc758b4866b183a': { coingeckoId: "fantom", decimals: 18 }, - }, // Sample Code ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain @@ -50,12 +45,6 @@ const fixBalancesTokens = { apechain: { [ADDRESSES.null]: { coingeckoId: "apecoin", decimals: 18 }, }, - vinu: { - '0xC0264277fcCa5FCfabd41a8bC01c1FcAF8383E41': { coingeckoId: "tether", decimals: 6 }, - '0xDd4b9b3Ce03faAbA4a3839c8B5023b7792be6e2C': { coingeckoId: "ethereum", decimals: 18}, - '0x00c1E515EA9579856304198EFb15f525A0bb50f6': { coingeckoId: "vita-inu", decimals: 18}, - '0xEd8c5530a0A086a12f57275728128a60DFf04230': { coingeckoId: "vinuchain", decimals: 18}, - }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 6e54896120a30b5ea863bc950857d1b703ddcc55 Mon Sep 17 00:00:00 2001 From: Marc Puig Date: Tue, 17 Dec 2024 12:16:45 +0100 Subject: [PATCH 1479/1768] Add address to pStake BTC (#12737) --- projects/helper/bitcoin-book/pstake-btc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/bitcoin-book/pstake-btc.js b/projects/helper/bitcoin-book/pstake-btc.js index 86a053a920..ae061728a9 100644 --- a/projects/helper/bitcoin-book/pstake-btc.js +++ b/projects/helper/bitcoin-book/pstake-btc.js @@ -1,3 +1,3 @@ module.exports = [ - "bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay", "bc1px92pntcj0wd5076nnymp787a7qczsaauuefgntxngdwvkd584xgsaagem2", "bc1pxhkczd3jq9nq50p2xll99edhxlx5dj6ztgw5pgtzszjtlvg7tl4s8ttf04" + "bc1qajcp935tuvqakut95f0sc9qm09hxjj6egexl9d", "bc1pzq0ve6e7j6jt4ckx8uzdjyddrfda9ew8dxvrjmkxmfnj9yz68zeqgqh9cl", "bc1pjp9pg0d6wcejlg576st4s8d424zx443mdumdhvjcxx5ehnfk4xcqyru7ay", "bc1px92pntcj0wd5076nnymp787a7qczsaauuefgntxngdwvkd584xgsaagem2", "bc1pxhkczd3jq9nq50p2xll99edhxlx5dj6ztgw5pgtzszjtlvg7tl4s8ttf04", "bc1pxhe0dvtg7q06st7n7k0s6235ed4dhhawhhewpz7f4a0dmcrch09q2shl8y" ] \ No newline at end of file From 519da131d18749ef26e72534fe8e1116323a0e46 Mon Sep 17 00:00:00 2001 From: KovacZan Date: Tue, 17 Dec 2024 13:55:24 +0100 Subject: [PATCH 1480/1768] feat: Add neby-dex uniswap v3 dex (#12738) --- projects/neby-dex/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 projects/neby-dex/index.js diff --git a/projects/neby-dex/index.js b/projects/neby-dex/index.js new file mode 100644 index 0000000000..4aa7efb313 --- /dev/null +++ b/projects/neby-dex/index.js @@ -0,0 +1,9 @@ +const { uniV3GraphExport } = require("../helper/uniswapV3"); + +module.exports = { + sapphire: { + tvl: uniV3GraphExport({ + name: 'Neby Dex', graphURL: 'https://api.goldsky.com/api/public/project_clzi4lu67khgw01072ibvekvt/subgraphs/neby-dex-sapphire-mainnet/1.0.0/gn' + }), + } +} From ba27ba00f591bdfe96600d3a21a122ab97a946ff Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:03:59 +0000 Subject: [PATCH 1481/1768] phemex more wallets (#12740) --- projects/phemex/index.js | 74 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/projects/phemex/index.js b/projects/phemex/index.js index 3bb13492a3..c5f73f5b1c 100644 --- a/projects/phemex/index.js +++ b/projects/phemex/index.js @@ -7,7 +7,79 @@ const config = { }, ethereum: { owners: [ - '0xf7D13C7dBec85ff86Ee815f6dCbb3DEDAc78ca49' + '0xf7D13C7dBec85ff86Ee815f6dCbb3DEDAc78ca49', + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + bsc: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + base: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + avax: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + fantom: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + arbitrum: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + optimism: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + polygon: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + era: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + linea: { + owners: [ + '0x50be13b54f3eebbe415d20250598d81280e56772' + ], + }, + ripple: { + owners: [ + 'rQKKvBvEfXbTThkqrtqaY3sAKuW6iqcMzX', + 'rLMAAuqJowC5yMccaPnappeLM8vDfdiDTg', + ], + }, + sui: { + owners: [ + '0x51fc8f63faf7b22d401623f9c3ae5183e564d701741770f12ad1851c6c45a0c8', + ], + }, + tron: { + owners: [ + 'THAABzWrhp84Nr7gxss7qhtzA5mp3d1qUo' + ], + }, + solana: { + owners: [ + 'EWSHJzKpzjpwz9GuNKkXWMHXAiwtB7obSGhdFKu5QZku' + ], + }, + polkadot: { + owners: [ + '15hTaSogYFyGyRJhXdpQWRR1J9oya5nj4nFppi4XgUVMCvmP' ], }, } From 19866053bcf3ec5a6925028bd3b25fe55ce19b98 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 17 Dec 2024 15:07:04 +0000 Subject: [PATCH 1482/1768] temp comment chain --- projects/polynetwork/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/polynetwork/index.js b/projects/polynetwork/index.js index 17c1ddff42..ec5b0ff631 100644 --- a/projects/polynetwork/index.js +++ b/projects/polynetwork/index.js @@ -21,7 +21,7 @@ const blockchainEndpoints = { okexchain: 'getTVLOKC', neo3: 'getTVLNeo3', polygon: 'getTVLPolygon', - palette: 'getTVLPalette', + //palette: 'getTVLPalette', arbitrum: 'getTVLArbitrum', xdai: 'getTVLGnosisChain', zilliqa: 'getTVLZilliqa', From a282262813dcbb810c33df15af5b6f404717406e Mon Sep 17 00:00:00 2001 From: Daniil <34062256+mellaught@users.noreply.github.com> Date: Tue, 17 Dec 2024 19:14:50 +0300 Subject: [PATCH 1483/1768] updated the logic, added the inwstETHs vault (#12741) --- projects/inception-lrt/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/inception-lrt/index.js b/projects/inception-lrt/index.js index 3731811b65..6f54675793 100644 --- a/projects/inception-lrt/index.js +++ b/projects/inception-lrt/index.js @@ -1,11 +1,11 @@ const ADDRESSES = require('../helper/coreAssets.json') async function tvl_eth(api) { - const vaults = ['0x36B429439AB227fAB170A4dFb3321741c8815e55', '0xfE715358368416E01d3A961D3a037b7359735d5e', '0x90E80E25ABDB6205B08DeBa29a87f7eb039023C2', '0x4878F636A9Aa314B776Ac51A25021C44CAF86bEd', '0xA9F8c770661BeE8DF2D026edB1Cb6FF763C780FF', '0x1Aa53BC4Beb82aDf7f5EDEE9e3bBF3434aD59F12', '0x814CC6B8fd2555845541FB843f37418b05977d8d', '0xc4181dC7BB31453C4A48689ce0CBe975e495321c', '0xC0660932C5dCaD4A1409b7975d147203B1e9A2B6', '0x6E17a8b5D33e6DBdB9fC61d758BF554b6AD93322', '0x295234B7E370a5Db2D2447aCA83bc7448f151161', '0xd0ee89d82183D7Ddaef14C6b4fC0AA742F426355'] + const vaults = ['0x36B429439AB227fAB170A4dFb3321741c8815e55', '0xfE715358368416E01d3A961D3a037b7359735d5e', '0x90E80E25ABDB6205B08DeBa29a87f7eb039023C2', '0x4878F636A9Aa314B776Ac51A25021C44CAF86bEd', '0xA9F8c770661BeE8DF2D026edB1Cb6FF763C780FF', '0x1Aa53BC4Beb82aDf7f5EDEE9e3bBF3434aD59F12', '0x814CC6B8fd2555845541FB843f37418b05977d8d', '0xc4181dC7BB31453C4A48689ce0CBe975e495321c', '0xC0660932C5dCaD4A1409b7975d147203B1e9A2B6', '0x6E17a8b5D33e6DBdB9fC61d758BF554b6AD93322', '0x295234B7E370a5Db2D2447aCA83bc7448f151161', '0xd0ee89d82183D7Ddaef14C6b4fC0AA742F426355', '0xf9D9F828989A624423C48b95BC04E9Ae0ef5Ec97'] const total_deposited = await api.multiCall({ abi: 'uint256:getTotalDeposited', calls: vaults, permitFailure: true}) // const total_withdraw = await api.multiCall({ abi: 'uint256:totalAmountToWithdraw', calls: vaults, permitFailure: true}) - const strategies = await api.multiCall({ abi: 'address:strategy', calls: vaults}) - const tokens = await api.multiCall({ abi: 'address:underlyingToken', calls: strategies}) + // const strategies = await api.multiCall({ abi: 'address:strategy', calls: vaults}) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults}) // const result = total_deposited.map((deposited, index) => deposited - total_withdraw[index]); api.add(tokens, total_deposited) } From 24d55e08b0b4c32cc04a65c37373603208247ebb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:19:04 +0100 Subject: [PATCH 1484/1768] minor fix --- projects/Delea/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/Delea/index.js b/projects/Delea/index.js index b285666eac..bed1da0e6b 100644 --- a/projects/Delea/index.js +++ b/projects/Delea/index.js @@ -12,6 +12,7 @@ const ownersList = [ module.exports = { methodology: 'Counts Delea smartcontract balance as TVL.', + misrepresentedTokens: true, ton: { tvl: sumTokensExport({ owners: ownersList, tokens: [ADDRESSES.null]}), } From 4a85a968774e1a4ec39fafd49f56bb0bdd68b721 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Dec 2024 20:06:14 +0100 Subject: [PATCH 1485/1768] Track ink chain integration (#12747) --- projects/dyorswap/index.js | 1 + projects/helper/chains.json | 1 + projects/helper/env.js | 2 ++ projects/helper/tokenMapping.js | 3 +++ 4 files changed, 7 insertions(+) diff --git a/projects/dyorswap/index.js b/projects/dyorswap/index.js index 4f8b31d9f7..e4d27a2d89 100644 --- a/projects/dyorswap/index.js +++ b/projects/dyorswap/index.js @@ -8,6 +8,7 @@ const config = { degen: '0x2CcaDb1e437AA9cDc741574bDa154686B1F04C09', xlayer: '0x2ccadb1e437aa9cdc741574bda154686b1f04c09', bob: '0x2CcaDb1e437AA9cDc741574bDa154686B1F04C09', + ink: '0x6c86ab200661512fDBd27Da4Bb87dF15609A2806', } module.exports = { diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 81a6e959c2..126e04d281 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -159,6 +159,7 @@ "imx", "inevm", "injective", + "ink", "interlay", "iotaevm", "iotex", diff --git a/projects/helper/env.js b/projects/helper/env.js index 23c7da1cb9..b91fa8d842 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -19,6 +19,8 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", + INK_RPC: "https://rpc-gel.inkonchain.com/", + INK_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 9701731659..441bb7e182 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -45,6 +45,9 @@ const fixBalancesTokens = { apechain: { [ADDRESSES.null]: { coingeckoId: "apecoin", decimals: 18 }, }, + ink: { + [ADDRESSES.optimism.WETH_1]: { coingeckoId: "ethereum", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 646f7eeb89ff6d013610a6fa1542e4e02faafc88 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Dec 2024 21:07:14 +0100 Subject: [PATCH 1486/1768] fix onedex --- projects/onedex/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/onedex/index.js b/projects/onedex/index.js index 0270cd2bcb..67e89282ab 100644 --- a/projects/onedex/index.js +++ b/projects/onedex/index.js @@ -5,6 +5,7 @@ module.exports = { elrond: { tvl: sumTokensExport({ owner: "erd1qqqqqqqqqqqqqpgqqz6vp9y50ep867vnr296mqf3dduh6guvmvlsu3sujc", + blacklistedTokens: ['GROK-f2a62f'] }), staking: sumTokensExport({ owners: ["erd1qqqqqqqqqqqqqpgql9z9vm8d599ya2r9seklpkcas6qmude4mvlsgrj7hv", "erd1qqqqqqqqqqqqqpgq8nlmvjm8gum6y2kqe0v296kgu8cm4jlemvlsays3ku"] From e4addded46a9dc4bd588a6d313cb233f1c646238 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 17 Dec 2024 22:29:36 +0100 Subject: [PATCH 1487/1768] track ink bridge --- projects/ink/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 projects/ink/index.js diff --git a/projects/ink/index.js b/projects/ink/index.js new file mode 100644 index 0000000000..960c3f1599 --- /dev/null +++ b/projects/ink/index.js @@ -0,0 +1,15 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0x88FF1e5b602916615391F55854588EFcBB7663f0", + "0x5d66C1782664115999C47c9fA5cd031f495D3e4F", + ], + fetchCoValentTokens: true, + }), + }, +}; From cd947c7a6e21468759996ccbd7d22d0e2005ffda Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Dec 2024 09:34:14 +0100 Subject: [PATCH 1488/1768] track inswap.io --- package-lock.json | 6 +++--- projects/helper/env.js | 2 -- projects/inkswap/index.js | 4 ++++ 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 projects/inkswap/index.js diff --git a/package-lock.json b/package-lock.json index e780464a8e..177f1400cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.102", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.102.tgz", - "integrity": "sha512-S+MX9SL02E2IwgpviKIbxEtYjlUkGu8m57e7CjTbRtdyBrGbu1JhsvRCtuKm9Wz+bylX4I7jYbTC2fFdz/vvLg==", + "version": "5.0.103", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.103.tgz", + "integrity": "sha512-wJSKpnYFzFZoK99jm3qDm6npZkb448Fw/E85VqcVBnvTFiYFyzU03J4KwZvMKO1YnWjegm5wOT9Hs4fMbvp/Dg==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/helper/env.js b/projects/helper/env.js index b91fa8d842..23c7da1cb9 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -19,8 +19,6 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", - INK_RPC: "https://rpc-gel.inkonchain.com/", - INK_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", } const ENV_KEYS = [ diff --git a/projects/inkswap/index.js b/projects/inkswap/index.js new file mode 100644 index 0000000000..4e3cead06b --- /dev/null +++ b/projects/inkswap/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + ink: '0xBD5B41358A6601924F1Fd708aF1535a671f530A9' +}) \ No newline at end of file From f495356a58b7b5ff04548820ad8c0e66795f81b0 Mon Sep 17 00:00:00 2001 From: 0xsign <99134502+0xsign@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:20:56 +0100 Subject: [PATCH 1489/1768] Mellow add isETH vault (#12755) --- projects/mellow-protocol-v2/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/mellow-protocol-v2/index.js b/projects/mellow-protocol-v2/index.js index b933fa5b71..d3d2866ef3 100644 --- a/projects/mellow-protocol-v2/index.js +++ b/projects/mellow-protocol-v2/index.js @@ -18,6 +18,7 @@ const config = { '0x7b31F008c48EFb65da78eA0f255EE424af855249', '0x4f3Cc6359364004b245ad5bE36E6ad4e805dC961', '0x375A8eE22280076610cA2B4348d37cB1bEEBeba0', + '0xcC36e5272c422BEE9A8144cD2493Ac472082eBaD', ], }, } From e165264c9810c73e90a4afaa8f5ada93bc191b3b Mon Sep 17 00:00:00 2001 From: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:21:16 +0800 Subject: [PATCH 1490/1768] [Bucket] add FDUSD collateral (#12754) --- projects/bucket-protocol/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js index 444f203a04..b3c0a841e1 100644 --- a/projects/bucket-protocol/index.js +++ b/projects/bucket-protocol/index.js @@ -9,6 +9,7 @@ const BUCK = ADDRESSES.sui.BUCK; const USDC = ADDRESSES.sui.USDC; const USDT = ADDRESSES.sui.USDT; const USDC_CIRCLE= ADDRESSES.sui.USDC_CIRCLE +const FDUSD= "0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a::fdusd::FDUSD" const SCALLOP_swUSDC = "0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC" const SCALLOP_sUSDC = "0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC" const SCALLOP_sUSDT = "0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT" @@ -54,6 +55,8 @@ const USDC_PSM = const USDT_PSM = "0x607e7d386e29066b964934e0eb1daa084538a79b5707c34f38e190d64e24923e"; +const FDUSD_PSM = "0xb23092f74b7bbea45056d8564a7325be993cc2926b89f384367b9ad309dd92c5" + const BUCKETUS_PSM = "0xba86a0f37377844f38060a9f62b5c5cd3f8ba13901fa6c4ee5777c1cc535306b"; @@ -108,7 +111,7 @@ function convertUnderlyingAssets(coin){ if(coin === SCALLOP_sSUI) return ADDRESSES.sui.SUI // sbETH if(coin === SCALLOP_sSB_ETH) return ADDRESSES.sui.ETH - // sSCA + // sSCAUSDT_PSM if(coin === SCALLOP_sSCA) return SCA_ADDRESS return coin @@ -141,6 +144,9 @@ async function tvl(api) { const usdcCirclePSMObj = await sui.getObject(USDC_CIRCLE_PSM); const usdcCirclePSMAmount = usdcCirclePSMObj.fields.pool; + const fdusdPSMObj = await sui.getObject(FDUSD_PSM); + const fdusdPSMAmount = fdusdPSMObj.fields.pool; + const usdcPSMObj = await sui.getObject(USDC_PSM); const usdcPSMAmount = usdcPSMObj.fields.pool; @@ -224,6 +230,7 @@ async function tvl(api) { api.add(USDC_CIRCLE, Math.floor(usdcCirclePSMAmount)); api.add(USDC, Math.floor(usdcPSMAmount)); api.add(USDT, Math.floor(usdtPSMAmount)); + api.add(FDUSD, Math.floor(fdusdPSMAmount)); // 1 Cetable = 0.5 USDC + 0.5 USDT const halfCetableAmount = Math.floor(cetablePSMAmount / 2); From 23428e319a0b454f6629b5f9a11c7eea9f4f37b6 Mon Sep 17 00:00:00 2001 From: VarekStorm <163447238+VarekStorm@users.noreply.github.com> Date: Wed, 18 Dec 2024 13:22:00 +0300 Subject: [PATCH 1491/1768] added DevvE tvl adapter (#12753) Co-authored-by: VarekStorm --- projects/devve/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/devve/index.js diff --git a/projects/devve/index.js b/projects/devve/index.js new file mode 100644 index 0000000000..5b15135dd9 --- /dev/null +++ b/projects/devve/index.js @@ -0,0 +1,12 @@ +const { staking } = require('../helper/staking'); + +module.exports = { + methodology: "DEVVE can be staked in the protocol", + ethereum: { + tvl: () => ({}), + staking: staking( + "0xa0dab5d6907a9CFFD023e0160210eAB464322b70", + "0x8248270620Aa532E4d64316017bE5E873E37cc09" + ), + }, +}; From 1d1a8857fe8f921c79baef898e7aa3b31772cc91 Mon Sep 17 00:00:00 2001 From: Linkie Link Date: Wed, 18 Dec 2024 11:22:32 +0100 Subject: [PATCH 1492/1768] Added Mars Perps launch hallmark (#12752) --- projects/mars/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/mars/index.js b/projects/mars/index.js index 6894881fe6..4713913830 100644 --- a/projects/mars/index.js +++ b/projects/mars/index.js @@ -122,5 +122,6 @@ module.exports = { [1690945200, 'Launch on Neutron'], [1696906800, 'Mars v2 launch on Osmosis'], [1724166000, 'Mars v2 launch on Neutron'], + [1734098400, 'Perps launch on Neutron'] ], }; From 0d9fb125f9c1c84475938384b835043112f2333d Mon Sep 17 00:00:00 2001 From: Bao Nguyen <151540392+baonguyen1904@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:23:21 +0700 Subject: [PATCH 1493/1768] Update Harmonix PoolFactory in arbitrum (#12751) --- projects/harmonix/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/harmonix/index.js b/projects/harmonix/index.js index aff77b0e0e..74ab9da984 100644 --- a/projects/harmonix/index.js +++ b/projects/harmonix/index.js @@ -5,7 +5,7 @@ module.exports = { } const config = { - arbitrum: "0x7274463BF93E0058481042Cbd6e0cc73042E6285", + arbitrum: "0x3363A85c31cf13a96802e2935724232767420135", ethereum: "0xC7C8Cdd1E9817Fc98AD1b05cD3633c6471A9473b", base: "0x45dC73fB760f2382Cfd11e28C0Dd0a3A8d3E4C31", } @@ -18,4 +18,4 @@ Object.keys(config).forEach(chain => { api.addCGToken("tether", bal/1e6) } } -}) \ No newline at end of file +}) From 4c7df0c5683c652c9fbae487ef7c250ae28de84b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:27:30 +0100 Subject: [PATCH 1494/1768] update feeFree #12750 --- projects/FeeFree/index.js | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/projects/FeeFree/index.js b/projects/FeeFree/index.js index 1d46901ddc..b77357c471 100644 --- a/projects/FeeFree/index.js +++ b/projects/FeeFree/index.js @@ -1,9 +1,9 @@ const { getLogs2 } = require('../helper/cache/getLogs') const { sumTokens2 } = require('../helper/unwrapLPs') -const EVENT_ABI = 'event Initialize(bytes32 id, address indexed currency0, address indexed currency1, uint24 fee, int24 tickSpacing, address hooks)' +const EVENT_ABI_OLD = 'event Initialize(bytes32 id, address indexed currency0, address indexed currency1, uint24 fee, int24 tickSpacing, address hooks)' -const config = { +const configOLD = { zora: { pool: "0xB43287b2106BC044F07aE674794f5492E851d3dC", router: "0x0Fee97363deEFBE4De038D437D805A98dbEbA400", @@ -16,6 +16,24 @@ const config = { } } +const EVENT_ABI = 'event Initialize(bytes32 indexed id, address indexed currency0, address indexed currency1, uint24 fee, int24 tickSpacing, address hooks, uint160 sqrtPriceX96, int24 tick)' + +const config = { + zora: { + pool: "0x2BB2DeAeF5D4E62D3798Ce67C3D623da09188AB9", + fromBlock: 23864003, + }, + base: { + pool: "0x60B393a76cEa4a3AFff00e1Fb08d0F63A8F4A314", + fromBlock: 23809396, + }, + scroll: { + pool: "0xA407e0637b22e1F64395D177C8EAD26C03dC3294", + fromBlock: 11975196, + } +} + + module.exports = { start: '2024-04-25', // Apr 26 2024 } @@ -24,6 +42,14 @@ Object.keys(config).forEach(chain => { const { pool, fromBlock, } = config[chain] module.exports[chain] = { tvl: async (api) => { + + if (configOLD[chain]) { + const { pool, fromBlock, } = configOLD[chain] + const logs = await getLogs2({ api, factory: pool, eventAbi: EVENT_ABI_OLD, fromBlock, }) + const tokens = logs.map(i => [i.currency0, i.currency1]).flat() + await sumTokens2({ api, owner: pool, tokens, }) + } + const logs = await getLogs2({ api, factory: pool, eventAbi: EVENT_ABI, fromBlock, }) const tokens = logs.map(i => [i.currency0, i.currency1]).flat() return sumTokens2({ api, owner: pool, tokens, }) From 955ee81344a352cd81a2c58629997bf06157e184 Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:29:05 +0800 Subject: [PATCH 1495/1768] add Vault D and LST Vault into tvl calculation (#12749) --- projects/vectis/index.js | 85 ++++++++++++++++++++-------------- projects/vectis/spotMarkets.js | 27 +++++++++-- 2 files changed, 73 insertions(+), 39 deletions(-) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index d7bb8070a3..c2980de5ea 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -18,8 +18,10 @@ const vaultUserAddresses = [ new PublicKey("9Zmn9v5A2YWUQj47bkEmcnc37ZsYe83rsRK8VV2j1UqX"), //Vault A new PublicKey("4KvPuh1wG8j1pLnZUC5CuqTm2a41PWNtik1NwpLoRquE"), //Vault B new PublicKey("Hcs63usAc6cxWccycrVwx1mrNgNSpUZaUgFm7Lw9tSkR"), //Vault C - new PublicKey("MzEPFp2LwCSMMPHLQsqfE7SN6xkPHZ8Uym2HfrH7g5P"), //Yield Compress A - new PublicKey("CMiyE7M98DSPBEhQGTA6CzNodWkNuuW4y9HoocfK75nG") //Yield Compress B + new PublicKey("ARLwHJ3CYLkVTeW3nHvPBmGQ7SLQdhZbAkWHzYrq57rt"), //Vault D + new PublicKey("MzEPFp2LwCSMMPHLQsqfE7SN6xkPHZ8Uym2HfrH7g5P"), //Yield Compass A + new PublicKey("CMiyE7M98DSPBEhQGTA6CzNodWkNuuW4y9HoocfK75nG"), //Yield Compass B + new PublicKey("CnaXXuzc2S5UFSGoBRuKVNnzXBvxbaMwq6hZu5m91CAV") //LST Yield Compass ]; @@ -41,52 +43,65 @@ const vaultUserAddresses = [ * */ async function tvl(api) { + // Get all vault accounts first const accounts = await getMultipleAccounts(vaultUserAddresses) const deserializedData = accounts.map(deserializeUserPositions) - const perpIndices = deserializedData.map(data => data.perpPositions.map(position => position.market_index)).flat() - const perpKeys = perpIndices.map(index => getVaultPublicKey('perp_market', index)) - const perpAccounts = await getMultipleAccounts(perpKeys) - const perpAccountMap = {} - perpIndices.forEach((v, i) => perpAccountMap[v] = perpAccounts[i]) + // Collect unique market indices upfront + const allSpotIndices = new Set() + const allPerpIndices = new Set() + + deserializedData.forEach(({ spotPositions, perpPositions }) => { + spotPositions?.forEach(pos => allSpotIndices.add(pos.market_index)) + perpPositions?.forEach(pos => allPerpIndices.add(pos.market_index)) + }) + + // Batch fetch + const allKeys = [ + ...[...allSpotIndices].map(index => getVaultPublicKey('spot_market', index)), + ...[...allPerpIndices].map(index => getVaultPublicKey('perp_market', index)) + ] + + const allAccounts = await getMultipleAccounts(allKeys) + + // Create lookup maps + const spotAccountMap = {} + const perpAccountMap = {} + + let offset = 0 + ;[...allSpotIndices].forEach((index, i) => { + spotAccountMap[index] = allAccounts[i] + offset = i + 1 + }) + ;[...allPerpIndices].forEach((index, i) => { + perpAccountMap[index] = allAccounts[i + offset] + }) + // Process positions using the cached account data for (const { spotPositions, perpPositions } of deserializedData) { - // - // Process spot positions if (spotPositions?.length) { - const spotIndices = spotPositions.map(position => position.market_index) - const spotKeys = spotIndices.map(index => getVaultPublicKey('spot_market', index)) - const spotAccounts = await getMultipleAccounts(spotKeys) - const spotAccountMap = {} - spotIndices.forEach((v, i) => spotAccountMap[v] = spotAccounts[i]) - spotPositions.forEach(position => { - const tokenMint = getTokenMintFromMarketIndex(position.market_index); - const adjustedBalance = processSpotPosition(position, spotAccountMap[position.market_index]); - api.add(tokenMint, adjustedBalance); - }); + const tokenMint = getTokenMintFromMarketIndex(position.market_index) + const adjustedBalance = processSpotPosition(position, spotAccountMap[position.market_index]) + api.add(tokenMint, adjustedBalance) + }) } - // Process perp positions if (perpPositions?.length) { + perpPositions.map(position => { + const baseTokenMint = getPerpTokenMintFromMarketIndex(position.market_index) + const { baseBalance, quoteBalance } = processPerpPosition(position) + api.add(baseTokenMint, baseBalance) - perpPositions.map(async position => { - // Handle base asset - const baseTokenMint = getPerpTokenMintFromMarketIndex(position.market_index); - const { baseBalance, quoteBalance } = processPerpPosition(position); - api.add(baseTokenMint, baseBalance); - // - // Handle quote asset (always USDC) - const quoteTokenMint = getTokenMintFromMarketIndex(0); - // - api.add(quoteTokenMint, quoteBalance); + const quoteTokenMint = getTokenMintFromMarketIndex(0) + api.add(quoteTokenMint, quoteBalance) - const { cumulativeFundingRateLong, cumulativeFundingRateShort, } = getPerpMarketFundingRates(perpAccountMap[position.market_index]); - const currentCumulativeFundingRate = position.base_asset_amount > 0n ? cumulativeFundingRateLong : cumulativeFundingRateShort; - const difference = (currentCumulativeFundingRate - BigInt(position.last_cumulative_funding_rate)) / BigInt(10 ** 6); - const fundingRatePnl = (difference * (position.base_asset_amount) / BigInt(10 ** 6)); + const { cumulativeFundingRateLong, cumulativeFundingRateShort } = getPerpMarketFundingRates(perpAccountMap[position.market_index]) + const currentCumulativeFundingRate = position.base_asset_amount > 0n ? cumulativeFundingRateLong : cumulativeFundingRateShort + const difference = (currentCumulativeFundingRate - BigInt(position.last_cumulative_funding_rate)) / BigInt(10 ** 6) + const fundingRatePnl = (difference * (position.base_asset_amount) / BigInt(10 ** 6)) - api.add(quoteTokenMint, fundingRatePnl); + api.add(quoteTokenMint, fundingRatePnl) }) } } diff --git a/projects/vectis/spotMarkets.js b/projects/vectis/spotMarkets.js index e171a00e00..9ca75e4598 100644 --- a/projects/vectis/spotMarkets.js +++ b/projects/vectis/spotMarkets.js @@ -1,4 +1,3 @@ -const ADDRESSES = require('../helper/coreAssets.json') const anchor = require('@coral-xyz/anchor'); const { PublicKey } = require("@solana/web3.js"); const DRIFT_PROGRAM_ID = new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH') @@ -6,12 +5,27 @@ const DRIFT_PROGRAM_ID = new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn3 const SPOT_MARKETS = { 0: { name: 'USDC', - mint: ADDRESSES.solana.USDC, + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', decimals: 6 }, 1: { name: 'SOL', - mint: ADDRESSES.solana.SOL, + mint: 'So11111111111111111111111111111111111111112', + decimals: 9 + }, + 6: { + name: 'jitoSOL', + mint: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn', + decimals: 9 + }, + 16:{ + name:'INF', + mint:'5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm', + decimals: 9 + }, + 17:{ + name:'dSOL', + mint:'Dso1bDeDjCQxTrWHqUUi63oBvV7Mdm6WaobLbQ7gnPQ', decimals: 9 }, 19: { @@ -19,6 +33,11 @@ const SPOT_MARKETS = { mint: '27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4', decimals: 6 }, + 22: { + name: 'PYUSD', + mint: '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo', + decimals: 6 + }, 28: { name: 'USDS', mint: 'USDSwr9ApdHk5bvJKMjzff41FfuX8bSxdKcR81vTwcA', @@ -29,7 +48,7 @@ const SPOT_MARKETS = { const PERP_MARKETS = { 0: { name: 'SOL-PERP', - mint: ADDRESSES.solana.SOL, + mint: 'So11111111111111111111111111111111111111112', baseDecimals: 9, quoteDecimals: 6 }, From 74394ef2c2492a57d9e9fe6b635be20137fe6f4e Mon Sep 17 00:00:00 2001 From: Denis Date: Wed, 18 Dec 2024 13:00:10 +0200 Subject: [PATCH 1496/1768] Adding event on TVL chart (#12743) --- projects/amphor/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/amphor/index.js b/projects/amphor/index.js index 878b3c5968..df15db22ae 100644 --- a/projects/amphor/index.js +++ b/projects/amphor/index.js @@ -48,4 +48,5 @@ module.exports.hallmarks = [ [1710115200, 'Beta test closing'], [1712361600, 'ETH Boosted Vault Release'], [1718927999, 'Symbiotic LRT Vault Release'], + [1734454404, 'Migration to InceptionLRT'], ]; From 67b4ef2ed7f25b932eb802d082aa700b0cef4402 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 18 Dec 2024 13:56:15 +0000 Subject: [PATCH 1497/1768] Duckchain gogo (#12758) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/camelot-v2/index.js | 1 + projects/camelot/index.js | 3 +++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 3 +++ 5 files changed, 9 insertions(+) diff --git a/projects/camelot-v2/index.js b/projects/camelot-v2/index.js index ec282cb373..cc9f9e5631 100644 --- a/projects/camelot-v2/index.js +++ b/projects/camelot-v2/index.js @@ -13,6 +13,7 @@ const export2 = uniV3Export({ reya: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 2932166, isAlgebra: true, }, gravity: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 11988, isAlgebra: true, }, apechain: { factory: '0x10aA510d94E094Bd643677bd2964c3EE085Daffc', fromBlock: 60224, isAlgebra: true, }, + duckchain: { factory: '0xCf4062Ee235BbeB4C7c0336ada689ed1c17547b6', fromBlock: 1530060, isAlgebra: true, }, }) module.exports = mergeExports([export1, export2 ]) \ No newline at end of file diff --git a/projects/camelot/index.js b/projects/camelot/index.js index 82ea9cba7e..bf8159e28f 100644 --- a/projects/camelot/index.js +++ b/projects/camelot/index.js @@ -23,5 +23,8 @@ module.exports = { }, apechain: { tvl: getUniTVL({factory: '0x7d8c6B58BA2d40FC6E34C25f9A488067Fe0D2dB4', useDefaultCoreAssets: true}) + }, + duckchain: { + tvl: getUniTVL({factory: '0x7d8c6B58BA2d40FC6E34C25f9A488067Fe0D2dB4', useDefaultCoreAssets: true}) } }; \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 126e04d281..6ff0e11efb 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -93,6 +93,7 @@ "doge", "dogechain", "dsc", + "duckchain", "dydx", "dymension", "echelon", diff --git a/projects/helper/env.js b/projects/helper/env.js index 23c7da1cb9..4d2dc3347a 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -19,6 +19,7 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", + DUCKCHAIN_RPC: "https://rpc.duckchain.io,https://rpc-hk.duckchain.io", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 441bb7e182..b23178efb2 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -48,6 +48,9 @@ const fixBalancesTokens = { ink: { [ADDRESSES.optimism.WETH_1]: { coingeckoId: "ethereum", decimals: 18 }, }, + duckchain: { + ["0x7F9308E8d724e724EC31395f3af52e0593BB2e3f"]: { coingeckoId: "wrapped-ton", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 85fedd4254443e2e81f0c82c1c65db30b3deb3d9 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 18 Dec 2024 13:56:28 +0000 Subject: [PATCH 1498/1768] add spectra staking (#12759) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/spectra/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/spectra/index.js b/projects/spectra/index.js index cda61e4b6e..1b6a71bb2f 100644 --- a/projects/spectra/index.js +++ b/projects/spectra/index.js @@ -2,6 +2,11 @@ const { getLogs } = require("../helper/cache/getLogs"); const abi = require("./abi.json"); const config = require("./config.json"); const sdk = require("@defillama/sdk"); +const { staking } = require("../helper/staking.js") + +// staking - SPECTRA token +const SPECTRA = "0x64fcc3a02eeeba05ef701b7eed066c6ebd5d4e51" +const veSPECTRA = "0x6a89228055c7c28430692e342f149f37462b478b" module.exports = { methodology: `All deposited underlying in Spectra Principal Tokens and all underlying supplied as liquidity in Spectra Markets`, @@ -121,3 +126,5 @@ Object.keys(config).forEach((chain) => { return logs.map((i) => i.pt); } }); + +module.exports.base.staking = staking(veSPECTRA, SPECTRA) \ No newline at end of file From 1c0314b72cdaa33d3bf514c79cc7a492035c330a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:10:23 +0100 Subject: [PATCH 1499/1768] update litecoin api --- projects/helper/chain/litecoin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/chain/litecoin.js b/projects/helper/chain/litecoin.js index 400d6f6d20..b8c42f51c1 100644 --- a/projects/helper/chain/litecoin.js +++ b/projects/helper/chain/litecoin.js @@ -4,7 +4,7 @@ const { PromisePool } = require('@supercharge/promise-pool') // const url = addr => 'https://chainz.cryptoid.info/ltc/api.dws?q=getbalance&a=' + addr const url1 = addr => 'https://ltc.tokenview.io/api/address/balancetrend/ltc/' + addr -const url = addr => 'https://explorer.litecoin.net/api/address/' + addr +const url = addr => 'https://litecoinspace.org/api/address/' + addr async function getBalance(addr) { try { From 2177d81a7c95f639f0f6fa8e10875aaea6171070 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:36:19 +0100 Subject: [PATCH 1500/1768] increase chunk size for non-polygon chains and add support for OMAX LP tokens --- projects/helper/cache/vestingHelper.js | 2 +- projects/helper/utils.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/helper/cache/vestingHelper.js b/projects/helper/cache/vestingHelper.js index f64477caf7..2741276743 100644 --- a/projects/helper/cache/vestingHelper.js +++ b/projects/helper/cache/vestingHelper.js @@ -16,7 +16,7 @@ async function vestingHelper({ tokens = getUniqueAddresses(tokens) blacklist = getUniqueAddresses(blacklist) tokens = tokens.filter(t => !blacklist.includes(t)) - const chunkSize = chain === 'polygon' ? 250 : 500 // polygon has a lower gas limit + const chunkSize = chain === 'polygon' ? 250 : 2000 // polygon has a lower gas limit const chunks = sliceIntoChunks(tokens, chunkSize) const finalBalances = {} for (let i = 0; i < chunks.length; i++) { diff --git a/projects/helper/utils.js b/projects/helper/utils.js index 86edb86dbb..2102c3d093 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -101,6 +101,7 @@ function isLP(symbol, token, chain) { if (['fantom', 'nova',].includes(chain) && ['NLT'].includes(symbol)) return true if (chain === 'ethereumclassic' && symbol === 'ETCMC-V2') return true if (chain === 'shibarium' && ['SSLP', 'ChewyLP'].includes(symbol)) return true + if (chain === 'omax' && ['OSWAP-V2'].includes(symbol)) return true let label if (symbol.startsWith('ZLK-LP') || symbol.includes('DMM-LP') || (chain === 'avax' && 'DLP' === symbol) || symbol === 'fChe-LP') From caedd2a811857039f237c1b02e27b911be6b9209 Mon Sep 17 00:00:00 2001 From: Brendon Votteler Date: Wed, 18 Dec 2024 17:38:31 +0100 Subject: [PATCH 1501/1768] Add LBTC to BOB (#12760) --- projects/bob-fusion/index.js | 1 + projects/bob-gateway/index.js | 1 + projects/bob/index.js | 1 + 3 files changed, 3 insertions(+) diff --git a/projects/bob-fusion/index.js b/projects/bob-fusion/index.js index f663c7552d..6e6d8336a3 100644 --- a/projects/bob-fusion/index.js +++ b/projects/bob-fusion/index.js @@ -16,6 +16,7 @@ const enabledAddresses = [ "0xbdBb63F938c8961AF31eaD3deBa5C96e6A323DD1", // eDLLR "0xbdab72602e9AD40FC6a6852CAf43258113B8F7a5", // eSOV "0xe7c3755482d0dA522678Af05945062d4427e0923", // ALEX + "0x8236a87084f8B84306f72007F36F2618A5634494", // LBTC ] module.exports = { diff --git a/projects/bob-gateway/index.js b/projects/bob-gateway/index.js index 954e389fcd..e51903ef41 100644 --- a/projects/bob-gateway/index.js +++ b/projects/bob-gateway/index.js @@ -38,6 +38,7 @@ module.exports = { ADDRESSES.bob.FBTC, ADDRESSES.bob.uniBTC, ADDRESSES.bob.pumpBTC, + "0xA45d4121b3D47719FF57a947A9d961539Ba33204", // LBTC ], owners: gateways, }); diff --git a/projects/bob/index.js b/projects/bob/index.js index 07184113b5..371413167c 100644 --- a/projects/bob/index.js +++ b/projects/bob/index.js @@ -15,6 +15,7 @@ const tokens = [ "0xbdBb63F938c8961AF31eaD3deBa5C96e6A323DD1", // eDLLR "0xbdab72602e9AD40FC6a6852CAf43258113B8F7a5", // eSOV "0xe7c3755482d0dA522678Af05945062d4427e0923", // ALEX + "0x8236a87084f8B84306f72007F36F2618A5634494", // LBTC ]; From d36020ee6dc011a9f97ebb2a6feb696036f1e97b Mon Sep 17 00:00:00 2001 From: MD Date: Wed, 18 Dec 2024 17:39:02 +0100 Subject: [PATCH 1502/1768] update impermax treasury (#12761) --- projects/treasury/impermax.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/projects/treasury/impermax.js b/projects/treasury/impermax.js index 8ec65d3c2a..27e981b126 100644 --- a/projects/treasury/impermax.js +++ b/projects/treasury/impermax.js @@ -1,12 +1,25 @@ const { nullAddress, treasuryExports } = require("../helper/treasury"); -const treasury = "0x7f959c082bc30f3ea88187fac1a640438ad7bf20"; +const treasury = "0xc28f68cd2df0fcc50f0058fb20abbc77bec8bdc6"; +const operations = "0x2157bfbb446744fc92bd95c3911eb58d0a9b01bd"; module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, ], - owners: [treasury,], + owners: [treasury, operations], }, -}) \ No newline at end of file + base: { + tokens: [ + nullAddress, + ], + owners: [treasury, operations], + }, + blast: { + tokens: [ + nullAddress, + ], + owners: [treasury, operations], + }, +}) From 53da7cd71ad9ae15690c4678dae5ede1d38d29b6 Mon Sep 17 00:00:00 2001 From: rogi-sh <46889545+rogi-sh@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:39:10 +0100 Subject: [PATCH 1503/1768] Add Traders Collateral to TVL (Javsphere) (#12762) Co-authored-by: igorshelkovenkov Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/javsphere/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/javsphere/index.js b/projects/javsphere/index.js index 597cbb5088..076b8815ee 100644 --- a/projects/javsphere/index.js +++ b/projects/javsphere/index.js @@ -5,15 +5,16 @@ const FREEZER_BASE = '0x03e225D2bd32F5ecE539005B57F9B94A743ADBFB' const VESTING_BASE = '0x42a40321843220e9811A1385D74d9798436f7002' const JAV_BASE = '0xEdC68c4c54228D273ed50Fc450E253F685a2c6b9' const LEVERAGEX_BASE_EARN = '0xfd916d70eb2d0e0e1c17a6a68a7fbede3106b852' +const LEVERAGEX_BASE_DIAMOND = '0xBF35e4273db5692777EA475728fDbBa092FFa1B3' async function tvl(api) { const config = await api.fetchList({ lengthAbi: 'tokensCount', itemAbi: "function tokens(uint256) view returns (address asset, bytes32 priceFeed, uint256 targetWeightage, bool isActive)", target: LEVERAGEX_BASE_EARN }) const tokens = config.map(i => i.asset) - return api.sumTokens({ owner: LEVERAGEX_BASE_EARN, tokens, }) + return api.sumTokens({ owners: [LEVERAGEX_BASE_EARN, LEVERAGEX_BASE_DIAMOND], tokens, }) } module.exports = { - methodology: `We count the total value locked from staking and freezer of javsphers native token JAV). `, + methodology: `We count the TVL of LeverageX Trading platform leveragex.trade (LPs and Traders). And TVL from staking and freezer of javsphers native token JAV.`, hallmarks: [ [1733837635, "Migration to BASE"], ], From 9881eb2254c285f6f830edd61377d05915026596 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:41:30 +0000 Subject: [PATCH 1504/1768] git checkout -b bitkumb-cex (#12764) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/bitkub-cex/index.js | 210 +++++++++++++++++++++ projects/helper/bitcoin-book/bitkub-cex.js | 17 ++ projects/helper/bitcoin-book/index.js | 4 +- 3 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 projects/bitkub-cex/index.js create mode 100644 projects/helper/bitcoin-book/bitkub-cex.js diff --git a/projects/bitkub-cex/index.js b/projects/bitkub-cex/index.js new file mode 100644 index 0000000000..27de8a889c --- /dev/null +++ b/projects/bitkub-cex/index.js @@ -0,0 +1,210 @@ +const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require("../helper/bitcoin-book/index.js"); + +const config = { + bitcoin: { owners: bitcoinAddressBook.bitkub }, + ethereum: { + owners: [ + "0x1579B5f6582C7a04f5fFEec683C13008C4b0A520", + "0xaD0703a267f97e19034FD564d731C4e6d888f9ef", + "0x831e8C86197C3993eb1238b3Ac22E42e3B7f2Fd9", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + "0xE35bb4845149eCC6799C98ceEeF7ff7c85440e6f", + "0x59E0cDA5922eFbA00a57794faF09BF6252d64126", + "0x326d9f47ba49bbaac279172634827483af70a601", + "0x4A3b441962BB481cdffF2650D84EBEC0f119CbB7", + "0x6B130820c449A27b35256A3c99942adbD53AAC18", + "0xFBA420CdAEE2df4e38a622d36616c3547AB6aaB4", + ], + }, + cardano: { + owners: [ + "addr1q8080hxmacdlnhrjllmurq35uj8jnj4ak0egxyl0zx6y9hns6jxls0ngn2qadghy4h7dterk0gzm3y7czmh8zlsfvmesug72j9", + "addr1q9lnc0jsh3f76hmapmsf8m7d6a32gm993gyhjspfvjgpdatl8sl9p0zna40h6rhqj0hum4mz53k2tzsf09qzjeyszm6s6n08gw", + "addr1vx7vlgvuupzvvls99penvatpm2c4j9ljscevzsnn3awk8ys6xynxk", + "addr1q8rgxa3edn03lywl8c9hk6p3c6rpyf9frhqe6a97qtrjktkxsdmrjmxlr7ga70st0d5rr35xzgj2j8wpn46tuqk89vhqaglq5q", + "addr1qyswadm6cz8u2lt8eh752d8434dgtjuvkmp3yv00klcuqm50s7wwjnhjjrt6h206nlzavqmsaqfllzslny5zyhfhemgslhpqe5", + "addr1q9pag8w4fhlfntk53te5ggjcxfv3a47pjs3kp79espx0xa3ry9xxlmzqcs8t8xj28xmw5l34pcdshnm80hjlsl0rlgwst42fps", + "addr1q8w6ydejn4v89cxmvmltzg4g0y4xkg84p3sqf3gmdst032pef9780gqwzm4c5q3m4juvp5q08e37yx9rvhfxahv7kywqn7h8jp", + "addr1q93njnfcfeky7ygfg5wjk3pms74qnxtashr7xmwnzykxpgp4yjdypphupnvrnskz8uj55cuzydmnmmnjvy70hytezjssux9ahu", + "addr1qxdsu34cmfw7er4zmd4702szx7yhc9gayrnyv6lsm89k6mafmzzku8yt4xqu7tqh3qctas87ukfswf0h3ytq9c92razqph7vpw", + "addr1qylmz3tepjdum5alfegjw80xawkqxrqy0lzl9ndhrcmr0dg34hvrr6m7qg538lpd6ppvxe7gp47rm36vyjw9cckuc0qsg26ngm", + "addr1q8j70zld3p2dhpgkxksprpsmzm4qhfhm2l6w9wk44gqs6264x2gg8f3gacy3x74ew8felyagrtq3lztx4cnx90cs09fsp87nrj", + "addr1q94vgjd7zfesgq06vgtrqe9q9g2rjtl6yn35gepwta9eqz25ts95j7frk9yh479d2fqln76xj4gldjflczkqwq003q3s39lprc", + "addr1q9vp536dm7jz05h8qfux247yl4c2cnzrz6kj9p3wh6u98gxuef7ar9t9kpnwpnnksgz8x4tuqtup6jch7yg55kns3p5s4vhaqa", + "addr1qxt89e3xnepa336w0t6td4as2awn0e57nk6f025r26rwug8q8t28pdfqtkt90eeafdf4axmzrh46cg65u47z59tscj3qfpxyxx", + "addr1q9fe0wv28yd6pse9hrwqn8rhcudj42e4z3a5vveqyqww6uys8ta3zga2drsxq42e003wxm7lvxt9skmrnst8f6z7sytqke4up9", + "addr1q8km36sd4wgt6f5e3n557nk454tqwxzg670fxylsztsccq5yy7w9y0uz4hlc3j2veln52xu3ktrrrzkr4p9ays0uhu5q6vukqh", + "addr1qx26c2mdztwk02fyn43692lzqcxscf0ujye06vv3jadhsazwram6xhx09z4yka4q6uexkelc92df9dysnjf5nhajvmnq2e4qwf", + "addr1qxxm602az76en6rjyvurmdpv7sj8jwxxfxv9jvjrttvrxt5l8pzavzkxpxuha8ra90t0h3s2zs5dhv2jmaq3mm6snfkqdmj5vl", + "addr1qxrs00m9qntkxhru8vdmd4xz562rv3ajck36l9yvcs06nwzcx8u53x99sahetdtaascmug9363m5sjjx8aullxgswvesy5td9l", + "addr1q9czs903atc9hmz9vf8sdrqgk33dz9hnwdgpgx98q4fsnj9t3n4wl5p8j9uqg4ewj740uupwjsv4c8p0eckuh3p0tjasl8v77f", + "addr1q9xfm9pxac0vhxym802eagwmtc0aus5w5uhc0tg9rslzzhfcj99akd57ewpta8ww9wf3vp9af3psmyw62vy00tvk3yaq9c3yw6", + "addr1q98xhywsa3xgu79ftrjyrfg6e2wrxfgqvepnudusw58ee6vmw0j8gzw6hmyuefah02purkfvqj6x2pz2wpjr26mr8r7qv6v2qa", + ], + }, + base: { + owners: [ + "0x7b7B40D0FfC52005AdE856D4F65008BFf7d4D4a6", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + "0x4EBBb4DeEd5dA01B1F882F237BA3a19e83Baaeea", + ], + }, + algorand: { + owners: [ + "CT7HPFSYMKHPJES4GEEA5VE6ML7PF4JUOKNSJNDK7MXYNYLMMTFJ7XDETY", + "Q3GDAVXJLVHL2YNTIP35LMXEIZRGLLANSUGXGG4O2O44RZYYFNAU32OBNU", + "6CBNVPFCWAPEA2C2Y34JP7JDDNZI6YXG5JMPNCSYZOLB24IF3CALRRUSUQ", + "B6PJYYQSVT7F3NNJMGTR7MGS6AA5RLHY5LUGSWJSRXUQQQJZEFZ3QQ2BPE", + ], + }, + bsc: { + owners: [ + "0xC68C8d9d435c1C8a04909A7D8eA588d1031ae1E9", + "0xAdf4c208d546E7F1Ec24cab1CcDA9B47B90B8540", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + "0x2B8A2A03883E790fd8731823fcaC3E7af0a6dab3", + "0xe8FbDA2Ac282a0EBb73d3f4089AD130312eDb8DA", + "0xa2FF973Bf5A7c33cE4591226b03cf0afc5F16D37", + "0xd8A184BBEB7098E45a7bDCe1f88BFb5785Cb22bA", + "0x427E2cb82551D247daA712ebECf5FaC7F1d955Ad", + "0x1ecCd85c9E21f247FadB70F6cFf94B14cb737d03", + "0x3A67638883EfF7856b286ccd373d36476C45407a", + "0x45De26036ebe8a611FD361324872E887B5839564", + "0x85f44C42bAA806047f1d9aAea362333200FC5d10", + "0x8F19c19Fd4B6b3363fd1f214FF7781FBceBdba6d", + "0x165c97f4a371e69A747678bA1893Be023b284f4a", + "0x034bda447330D010554A5a93A22fF45a2505f494", + "0x42b3cd5676FFD76D29A587Fe8aAdE7e35BF7D1B5", + "0xBf36D6540c310996a21537c0193ACA1756884C40", + "0x6Fc29dFF13345574FaD530a8DBCC7Bb4A43Ad045", + "0x56152e13828f78cDCC90A6b016dF0aeC0985e2f3", + "0xc686D5a4A1017BC1B751F25eF882A16AB1A81B63", + "0x074b08B84E7400E9E5446CcE14d446b36B6351B5", + ], + }, + aptos: { + owners: [ + "0x73f6a587b4bc245bf3eeaa31b7ffe490d4c297a4960023b9548c1a4187bbe826", + ], + }, + arbitrum: { + owners: [ + "0x3ad60935c48f59cad57794eea41c60574735b4c9", + "0x799cb7688637824025F2Ae0BE78baA4854EB10f9", + "0x77aB048B5A14385450DfE21a676930E391B0c50C", + "0x0573AdF35a54475CBe10992Ba7C7dC11a80f39Ab", + "0x3040028E91D2a5D1E780c8E1a771A1A243f8921A", + "0xb8a63Da460063aB54aE52c73693Fc554E38E7794", + "0x7836c2eaD68809CEB6168E70558E46eB454209B9", + "0xc49839a2eDd1A2c4B23b080734a72CA9ff8DF666", + "0xCacb823a3D0C5a8490B1d3E60d1f33AB1eEB0387", + "0xFa87f3ae8Bf869d4f6138F47a5682dD9E4458EE3", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + ], + }, + avax: { + owners: [ + "0xCee64C0fD6E455B629ee82404094Bb0FD7a015d3", + "0xf521f4f06253a2c9db5732c6838b82cf472ccb6b", + "0xed450b3a875eaab5366cdc6746b1aa95c1f87009", + "0x16eCE576723AE9640053C2a5e100E21Ae6879915", + "0xaE0B49663C51C8e00795e935186e7C8D425Aa4Fd", + "0x134282ea729a0a129f331d9950d399f22545e8b8", + "0x376AD7FB3842475725D276D77b85883474B9050C", + "0x91013c9c7c2a856B26dF52A8A117Afeb9FC90379", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + ], + }, + litecoin: { + owners: [ + "ltc1qdjslxvcf0sdp7glpm7uyj97dnc8ml32c820jjr", + "MV6PFbiFu9hAzav77zvArKnVbepqzgLai6", + "LX3BfLPmTpNAqemj9QZKu4SLTMrU9M4W4a", + ], + }, + mantle: { + owners: [ + "0x93593B52373775B6387Bb136fb662a1B2B95D28C", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + ], + }, + optimism: { + owners: [ + "0xda4231EF1768176536EEE3ec187315E60572BBD4", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + "0x18f59d6945C3847d837bC7bF2E402C2F91FdBF04", + "0xE24568D364A170B9D768AF5AaB2E9bFfFE628fAA", + "0xB2a4bE10ff7599e748a59EF66DF574EA14FdD28e", + "0x4BB9326ac2721cECc34737FCCE2FeA5fe78Ec88F", + "0x87F05730C7fC9D20EE8f2776b6E12675e344d323", + "0xfE7Ad27596CA67A134Cc227FCCEEe02fD7BaCC46", + "0x4da9F5048B530EC1B0A415d3d4D82f1C0A0F3d77", + "0x34d68b60F2BB5983a85dCE33A9Fbc74135EA05d6", + ], + }, + polygon: { + owners: [ + "0xCa7404EED62a6976Afc335fe08044B04dBB7e97D", + "0x98a81ce4e94249beb329f04b9595e10735ae6ab0", + "0xac72565ccf186f10e6a7a3964492c62be5757e31", + "0x9573A11d939753737E8F09f80f07f6462C093a1c", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + ], + }, + solana: { + owners: [ + "CqLu65KkFvGi3DUrR9o9aUC4LP2yUywFHZn8WoNLNVgy", + "99GQKbo1m2dU2ETGtEB1of9F6QHne5o9HHjAc7MyiVSn", + "FEpW539FYXJLpuKxPEuFZhtBHqv3o3V5qKtQa8wxN6qQ", + "7Z4YASPhNRbebWGx4GuzEWFAETZyRdN1GQTFTnM8t5c2", + "9ZxAqUEP5aYBCHakuVt9ojL15jfy9oMiaeQv5ewk2c7J", + "EwA9sKvmKwTpKr9BqYmsYi2UjKEMm3aPsihmFfT7Q9DM", + ], + }, + tron: { + owners: [ + "TUokA66synv9BN4T2VPSRZivNedcbkhfJF", + "TN6yULseUiJF7WZUruRQqMTUb1VTDBdsqG", + "TRHQmybCizoiMCA3ev4pNTb5PLJmgpSztQ", + "TLpzN1ztwi47kK8Wip2VvmDMFwnMyWnHwj", + ], + }, + ripple: { + owners: [ + "rnrqyM7kS6wmC5demJm9vrfdN2vLgS8LfY", + "rE3Cc3i6163Qzo7oc6avFQAxQE4gyCWhGP", + "rsgwNP2cyRHAcEbuRmboDQ4pmgemMNVZR3", + "rN2AVDJj927YbdAvTXoDtq8uswbQvFU42t", + "rfZCcK6EMCYeAX3y86X281xwgRLcH82SAw", + "rwa1MPnDwpRsgJ4jmZHuBo42xK9YVpp45P", + ], + }, + era: { + owners: [ + "0xe65eE83E7B466CB3836f666BaAeB4ed6d29B5723", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + ], + }, + core: { + owners: [ + "0x1CA1817eD440b26Fb005748f3CE9f8db160A5C0a", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + ], + }, + fantom: { + owners: [ + "0xE9BB729A7eA588c2ad10acaF647124503Dbb08d1", + "0x7A1CF8CE543F4838c964FB14D403Cc6ED0bDbaCC", + "0xDD374d8202D43a18BE95C8B64C41a87a9898889f", + ], + }, + ton: { + owners: [ + "UQC99FRwIlV2iLvDwFDyIfSVFQms5fUKtVZKidKuFTKItH2h", + "UQDByM-88YEJtGq4UTZx3FOgZFZ6URHPYD11wf9AcBrajchg", + ], + }, +}; + +module.exports = cexExports(config); diff --git a/projects/helper/bitcoin-book/bitkub-cex.js b/projects/helper/bitcoin-book/bitkub-cex.js new file mode 100644 index 0000000000..ffa3a87c4c --- /dev/null +++ b/projects/helper/bitcoin-book/bitkub-cex.js @@ -0,0 +1,17 @@ +module.exports = [ + "15ZAumgvBkRBpBkvuB699FszE8KW7sUqof", + "3JgjA1xMGhjfwuS2RK7zomuesTbCt4bLyE", + "3Q4Yt1QPe3hfyHok78PCowKd5rJG1hUvjH", + "36u1EMxV4NGMwEoS6WLSHHqww7kM2AGfVR", + "bc1qnh70mytjrnykrlufhz4tsgc3dfphrgsefwm0zx", + "1VHhZ3vZ2rhrT8a5QCt5Sd23Y5APBk9QU", + "bc1qlsg4ph439lemctx2vx6ydpc5sx8d2trv8ry25u", + "1iqw8qwMDcwkkw7AiEXqsxwQQ4qgmRpoP", + "bc1qxj30n45488xf7jc8lrx0val5d36ty7dql495j8", + "12ken5PwHeA6YnD3272S1beaSdGN46cEBh", + "bc1q85sqvgccu9d26mfw8j50y6evmyund0d7sg7rc89csyu3uh0c7f6s5g30nw", + "3AavzRkkbhtQjFJ3CLwA3FPoazxsFZM5go", + "bc1que2ellarxvz4f9pa88f6etejvj9mtsmlse22k8nzygnht6h4tlvqtpk9lf", + "33PkD3DjT6YYao2NbAS7bqFRy6nCTdGXBf", + "18DDXRwzkWvjg87P4fk9CB5k3AC25kxBsU", +]; diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 7393a67786..1d6eea7950 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -90,6 +90,7 @@ const nerveNetworkBridge = require('./nervenetworkbridge.js') const nexusbtc = require('./nexusbtc') const tapbit = require('./tapbit-cex.js') const jbtc = require('./jbtc') +const bitkub = require('./bitkub-cex.js') const p2pb2b = ['39BFtTzZjj6o2s7eewefFQxqM4617VmhEK'] const teleswap = [ @@ -198,5 +199,6 @@ module.exports = { nerveNetworkBridge, nexusbtc, tapbit, - jbtc + jbtc, + bitkub } From 0460522ffb8691301496ba8ff369d6a29fbeef50 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:12:07 +0100 Subject: [PATCH 1505/1768] update swissborg #12756 --- projects/helper/bitcoin-book/swissborg.js | 1 + projects/swissborg/index.js | 1 + 2 files changed, 2 insertions(+) diff --git a/projects/helper/bitcoin-book/swissborg.js b/projects/helper/bitcoin-book/swissborg.js index d9b9a863f4..9f241f25b5 100644 --- a/projects/helper/bitcoin-book/swissborg.js +++ b/projects/helper/bitcoin-book/swissborg.js @@ -5,4 +5,5 @@ module.exports = [ '1Mgs8zLJ7JyngcNRUscayyPHnnYJpJS5x2', 'bc1qc8ee9860cdnkyej0ag5hf49pcx7uvz89lkwpr9', '1JgXCkk3gjmgfgjT2vvnjpvqfvNNTFCRpM', + '3jvARuePRR6KpNAeYYGRQzs8W4VYsWWxe4BfoTSTZhUr', ] \ No newline at end of file diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index ba5c888a26..7f9a53c47e 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -21,6 +21,7 @@ const config = { '0x8F0d8b27bF808976Fa94f03e2230b4bca95bf3C4', '0xe2484A7Ac1b9Cb6D8E55fd00e129aB913172bea6', '0xdbe15F6573108B6736c70779C683Ca633c18aFe2', + '0xa2E07DB4e92F66071Ca68984517972F5625AB325', ], }, bitcoin: { From 8945fac327b20003eea0c7f37a0b2ca85925798b Mon Sep 17 00:00:00 2001 From: Antoine <67124021+antoineborg@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:12:56 +0100 Subject: [PATCH 1506/1768] Add new SwissBorg wallets (#12756) --- projects/swissborg/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/swissborg/index.js b/projects/swissborg/index.js index 7f9a53c47e..4f8a3445ed 100644 --- a/projects/swissborg/index.js +++ b/projects/swissborg/index.js @@ -50,6 +50,7 @@ const config = { 'Fe7SEekiKygziaEGKxsDsgLVzrCfNvVBvAYsaJBwFA8s', 'AR2ecEWY2vfsXmd4fUxc196LhbX5p8TnhvJg8t3fgYUN', '7Sng9GTnkjjb8WTF2kYX8JWqGHHwJGk5Ke9639zREUAR', + '3jvARuePRR6KpNAeYYGRQzs8W4VYsWWxe4BfoTSTZhUr', ], }, polkadot: { From eeb437de987bc9e56300cadacd7f4216270e7313 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:13:31 +0100 Subject: [PATCH 1507/1768] bugfix swissborg #12756 --- projects/helper/bitcoin-book/swissborg.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/helper/bitcoin-book/swissborg.js b/projects/helper/bitcoin-book/swissborg.js index 9f241f25b5..d9b9a863f4 100644 --- a/projects/helper/bitcoin-book/swissborg.js +++ b/projects/helper/bitcoin-book/swissborg.js @@ -5,5 +5,4 @@ module.exports = [ '1Mgs8zLJ7JyngcNRUscayyPHnnYJpJS5x2', 'bc1qc8ee9860cdnkyej0ag5hf49pcx7uvz89lkwpr9', '1JgXCkk3gjmgfgjT2vvnjpvqfvNNTFCRpM', - '3jvARuePRR6KpNAeYYGRQzs8W4VYsWWxe4BfoTSTZhUr', ] \ No newline at end of file From 7226f9d61b72b614908f238e9c135a483db817bb Mon Sep 17 00:00:00 2001 From: Lutro <76906369+lutr0@users.noreply.github.com> Date: Wed, 18 Dec 2024 22:54:27 +0100 Subject: [PATCH 1508/1768] feat: add Sophon chain (#12748) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: 0xsign <99134502+0xsign@users.noreply.github.com> Co-authored-by: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Co-authored-by: VarekStorm <163447238+VarekStorm@users.noreply.github.com> Co-authored-by: VarekStorm Co-authored-by: Linkie Link Co-authored-by: Bao Nguyen <151540392+baonguyen1904@users.noreply.github.com> Co-authored-by: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Co-authored-by: Denis Co-authored-by: Define101 <93603962+Define101@users.noreply.github.com> Co-authored-by: Brendon Votteler Co-authored-by: MD Co-authored-by: rogi-sh <46889545+rogi-sh@users.noreply.github.com> Co-authored-by: igorshelkovenkov Co-authored-by: Antoine <67124021+antoineborg@users.noreply.github.com> --- projects/helper/chains.json | 1 + projects/helper/coreAssets.json | 9 +++++++++ projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 10 ++++++++++ projects/syncswap/index.js | 24 +++++++++++++++--------- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 6ff0e11efb..02faf84c60 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -303,6 +303,7 @@ "sommelier", "songbird", "sonic", + "sophon", "sora", "stacks", "stafi", diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index be3f826f7e..d11c8d04e6 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -2086,5 +2086,14 @@ "ETH": "0xDd4b9b3Ce03faAbA4a3839c8B5023b7792be6e2C", "VINU": "0x00c1E515EA9579856304198EFb15f525A0bb50f6", "WVC": "0xEd8c5530a0A086a12f57275728128a60DFf04230" + }, + "sophon": { + "ETH": "0x72af9f169b619d85a47dfa8fefbcd39de55c567d", + "USDT": "0x6386da73545ae4e2b2e0393688fa8b65bb9a7169", + "USDC": "0x9aa0f72392b5784ad86c6f3e899bcc053d00db4f", + "WSTETH": "0x60d02f185f80644e1a5ae35497736dd31d1b078b", + "WEETH": "0x5e9fc50b44988b66ba84500f8bc32c0493fe8f8d", + "DAI": "0x88171a5bbacd92ca5e25575c5904581c80b025dd", + "SDAI": "0xeccbb9360d235548473cb8c752735f68e652439b" } } \ No newline at end of file diff --git a/projects/helper/env.js b/projects/helper/env.js index 4d2dc3347a..1dd47e9c79 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -20,6 +20,7 @@ const DEFAULTS = { RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", DUCKCHAIN_RPC: "https://rpc.duckchain.io,https://rpc-hk.duckchain.io", + SOPHON_RPC_MULTICALL: "0x5f4867441d2416cA88B1b3fd38f21811680CD2C8", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index b23178efb2..ea6fd085f0 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -38,6 +38,7 @@ const ibcMappings = { } const fixBalancesTokens = { + // Sample Code ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain @@ -48,6 +49,15 @@ const fixBalancesTokens = { ink: { [ADDRESSES.optimism.WETH_1]: { coingeckoId: "ethereum", decimals: 18 }, }, + sophon: { + [ADDRESSES.sophon.ETH]: { coingeckoId: "ethereum", decimals: 18 }, + [ADDRESSES.sophon.USDT]: { coingeckoId: "tether", decimals: 6 }, + [ADDRESSES.sophon.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, + [ADDRESSES.sophon.WSTETH]: { coingeckoId: "wrapped-steth", decimals: 18 }, + [ADDRESSES.sophon.WEETH]: { coingeckoId: "wrapped-eeth", decimals: 18 }, + [ADDRESSES.sophon.DAI]: { coingeckoId: "dai", decimals: 18 }, + [ADDRESSES.sophon.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, + }, duckchain: { ["0x7F9308E8d724e724EC31395f3af52e0593BB2e3f"]: { coingeckoId: "wrapped-ton", decimals: 18 }, }, diff --git a/projects/syncswap/index.js b/projects/syncswap/index.js index b24b4c8d10..170dd73e6c 100644 --- a/projects/syncswap/index.js +++ b/projects/syncswap/index.js @@ -43,21 +43,27 @@ async function tvl(api) { const config = { era: { fromBlock: 9775, - stableFactorys: ['0x5b9f21d407F35b10CbfDDca17D5D84b129356ea3','0x81251524898774F5F2FCaE7E7ae86112Cb5C317f'], - classicFactorys: ['0xf2DAd89f2788a8CD54625C60b55cD3d2D0ACa7Cb','0x0a34FBDf37C246C0B401da5f00ABd6529d906193'], - aquaFactorys: ['0x20b28B1e4665FFf290650586ad76E977EAb90c5D','0xFfa499b019394d9bEB5e21FC54AD572E4942302b','0x0754870C1aAb00eDCFABDF4e6FEbDD30e90f327d'] + stableFactorys: ['0x5b9f21d407F35b10CbfDDca17D5D84b129356ea3', '0x81251524898774F5F2FCaE7E7ae86112Cb5C317f'], + classicFactorys: ['0xf2DAd89f2788a8CD54625C60b55cD3d2D0ACa7Cb', '0x0a34FBDf37C246C0B401da5f00ABd6529d906193'], + aquaFactorys: ['0x20b28B1e4665FFf290650586ad76E977EAb90c5D', '0xFfa499b019394d9bEB5e21FC54AD572E4942302b', '0x0754870C1aAb00eDCFABDF4e6FEbDD30e90f327d'] }, linea: { fromBlock: 716, - stableFactorys: ['0xE4CF807E351b56720B17A59094179e7Ed9dD3727','0x61Abf754fc031C544236053495a193f3518e9101','0x024A096bAb43587d24004C95C3e20FcB7518Ad86'], - classicFactorys: ['0x37BAc764494c8db4e54BDE72f6965beA9fa0AC2d','0x9573994Ae6C9b35627976d26FA89e507e71FBaA2','0xb8AbaEa25E42DA5ac6897C9DAb0a8157885fE32b'], - aquaFactorys: ['0x7a31060d8524c21496a352BE65549eEf1e864fb0','0x1080EE857D165186aF7F8d63e8ec510C28A6d1Ea'] + stableFactorys: ['0xE4CF807E351b56720B17A59094179e7Ed9dD3727', '0x61Abf754fc031C544236053495a193f3518e9101', '0x024A096bAb43587d24004C95C3e20FcB7518Ad86'], + classicFactorys: ['0x37BAc764494c8db4e54BDE72f6965beA9fa0AC2d', '0x9573994Ae6C9b35627976d26FA89e507e71FBaA2', '0xb8AbaEa25E42DA5ac6897C9DAb0a8157885fE32b'], + aquaFactorys: ['0x7a31060d8524c21496a352BE65549eEf1e864fb0', '0x1080EE857D165186aF7F8d63e8ec510C28A6d1Ea'] + }, + sophon: { + fromBlock: 38459, + stableFactorys: ["0x8c9d66ba3e1d7681cffffa3c7d9807adae368e74"], + classicFactorys: ["0x432bcc3bc62de9186f9e8763c82d43e418681e6c"], + aquaFactorys: ["0xa2e2f6b5db704fde654db69895c89523332e538e"], }, scroll: { fromBlock: 80875, - stableFactorys: ['0xE4CF807E351b56720B17A59094179e7Ed9dD3727','0x5BEBDA7E264b03bB963CB2418f40C5ffcefb7A9e','0xA2acA673C00495A184F88De533BBa8e1b7f38D00'], - classicFactorys: ['0x37BAc764494c8db4e54BDE72f6965beA9fa0AC2d','0xDAEdEcF3F1Caf8d9050A0C973B77E40bA8024F69','0x76f549af692efA64952d02c075226df9878Fb54C'], - aquaFactorys: ['0xa033eAbcCfd9b71543E34dec43935467A230Ce2d','0x87aeb51d606056F48D241C4072f55ACd9D937018'] + stableFactorys: ['0xE4CF807E351b56720B17A59094179e7Ed9dD3727', '0x5BEBDA7E264b03bB963CB2418f40C5ffcefb7A9e', '0xA2acA673C00495A184F88De533BBa8e1b7f38D00'], + classicFactorys: ['0x37BAc764494c8db4e54BDE72f6965beA9fa0AC2d', '0xDAEdEcF3F1Caf8d9050A0C973B77E40bA8024F69', '0x76f549af692efA64952d02c075226df9878Fb54C'], + aquaFactorys: ['0xa033eAbcCfd9b71543E34dec43935467A230Ce2d', '0x87aeb51d606056F48D241C4072f55ACd9D937018'] }, } From 5f502ef6157717e179f98d37e6296d35a1d9d477 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:13:40 +0100 Subject: [PATCH 1509/1768] track gasp.xyz --- projects/gasp-xyz/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/gasp-xyz/index.js diff --git a/projects/gasp-xyz/index.js b/projects/gasp-xyz/index.js new file mode 100644 index 0000000000..dab5bf6292 --- /dev/null +++ b/projects/gasp-xyz/index.js @@ -0,0 +1,14 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const config = { + ethereum: '0x79d968d9017B96f202aD4673A2c1BBbdc905A4ca', + arbitrum: '0x3aDdEb54ddd43Eb40235eC32DfA7928F28A44bb5', + base: '0x308e483afDD225D6cb7bF4d44B8e4a03DFD9c0De', +} + +Object.keys(config).forEach(chain => { + const owner = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owner, fetchCoValentTokens: true }) + } +}) \ No newline at end of file From aac0a6123ee8e4c3a2a6ac0176e165392cd93ca4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:14:36 +0100 Subject: [PATCH 1510/1768] gasp: add comment --- projects/gasp-xyz/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/gasp-xyz/index.js b/projects/gasp-xyz/index.js index dab5bf6292..68a7c6e430 100644 --- a/projects/gasp-xyz/index.js +++ b/projects/gasp-xyz/index.js @@ -1,5 +1,6 @@ const { sumTokensExport } = require('../helper/unwrapLPs') +// taken from https://gasp-stash-prod-dot-direct-pixel-353917.oa.r.appspot.com/affirmed-network/list const config = { ethereum: '0x79d968d9017B96f202aD4673A2c1BBbdc905A4ca', arbitrum: '0x3aDdEb54ddd43Eb40235eC32DfA7928F28A44bb5', From a4a58fbebf594cf6384777a717ca0d86f93db4d0 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:17:17 +0100 Subject: [PATCH 1511/1768] Update: DefiEdge (#12777) --- projects/defiedge/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/defiedge/index.js b/projects/defiedge/index.js index b6fa4ce46e..593ca05004 100644 --- a/projects/defiedge/index.js +++ b/projects/defiedge/index.js @@ -20,6 +20,8 @@ async function getTvl(api) { } module.exports = { + hallmarks: [[1730332800, "Definitive Sunset of DefiEdge"]], + deadFrom: '2024-10-31', doublecounted: true, misrepresentedTokens: true, timetravel: false, From 93010c30205a5901247ae517f838f7c7ec279216 Mon Sep 17 00:00:00 2001 From: Michalis Kargakis Date: Thu, 19 Dec 2024 11:18:21 +0100 Subject: [PATCH 1512/1768] Add Ostium trading collateral contract (#12776) --- projects/ostium/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/ostium/index.js b/projects/ostium/index.js index 84cb47d2ab..1427ac341b 100644 --- a/projects/ostium/index.js +++ b/projects/ostium/index.js @@ -2,7 +2,10 @@ const ADDRESSES = require('../helper/coreAssets.json'); const { sumTokensExport } = require('../helper/unwrapLPs'); const owners = [ + // OLP vault '0x20D419a8e12C45f88fDA7c5760bb6923Cee27F98', + // Trading collateral + '0xcCd5891083A8acD2074690F65d3024E7D13d66E7', ]; const tokens = [ From 1fb31d7c765dc6a9f256a054a7477fbe38f9ed5a Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:23:08 +0100 Subject: [PATCH 1513/1768] Update: Beefstake (#12774) --- projects/beefstake/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/beefstake/index.js b/projects/beefstake/index.js index d96ff8d4d4..0aae034382 100644 --- a/projects/beefstake/index.js +++ b/projects/beefstake/index.js @@ -11,6 +11,7 @@ async function fetch() { } module.exports = { + deadFrom: "2024-06-01", timetravel: false, misrepresentedTokens: true, vite:{ From a699b0e406d740e768e20e5b7c28cc1b866938f2 Mon Sep 17 00:00:00 2001 From: !ruby <43858546+alexandersazonof@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:23:44 +0300 Subject: [PATCH 1514/1768] Add sonic (#12773) --- projects/sacra/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/sacra/index.js b/projects/sacra/index.js index e9391e979e..363a05c0ee 100644 --- a/projects/sacra/index.js +++ b/projects/sacra/index.js @@ -11,12 +11,21 @@ const controllerReal = '0x6ce857d3037e87465b003aCbA264DDF2Cec6D5E4'; const tresuryReal = '0xd0C1378c177E961D96c06b0E8F6E7841476C81Ef'; const rewardPoolReal = '0xb35E67FD20070C3d3dC5EEa29D62e95b707471cA'; +// sonic contracts +const controllerSonic = '0x75e1e98650c119c4E3dCE3070CE6A5397Ed70c6a'; +const tresurySonic = '0x3bDbd2Ed1A214Ca4ba4421ddD7236ccA3EF088b6'; +const rewardPoolSonic = '0xda08F7DE9923acEe24CE292Ec2b20D45b1522Cb6'; + + module.exports = { - methodology: `We count the WFTM and USDC on treasuty, reward pool and controller contracts`, + methodology: `We count the WFTM, USDC and wS on treasuty, reward pool and controller contracts`, fantom: { tvl: sumTokensExport({ token: ADDRESSES.fantom.WFTM, owners: [controllerFantom, tresuryFantom, rewardPoolFantom] }) }, real: { tvl: sumTokensExport({ token: ADDRESSES.real.USDC, owners: [controllerReal, tresuryReal, rewardPoolReal] }) }, + sonic: { + tvl: sumTokensExport({ token: ADDRESSES.sonic.wS, owners: [controllerSonic, tresurySonic, rewardPoolSonic] }) + } } \ No newline at end of file From f7abf9abeaed5be9b1e95b08ece44db6779ac729 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:44:16 +0100 Subject: [PATCH 1515/1768] Sonic Market (#12778) Co-authored-by: Xavier --- projects/clober-v2/index.js | 15 ++++++++--- projects/sonic-market-amm/index.js | 4 +++ projects/sonic-market-orderbook/index.js | 33 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 projects/sonic-market-amm/index.js create mode 100644 projects/sonic-market-orderbook/index.js diff --git a/projects/clober-v2/index.js b/projects/clober-v2/index.js index d704c67ef2..65c6b40aa1 100644 --- a/projects/clober-v2/index.js +++ b/projects/clober-v2/index.js @@ -1,4 +1,6 @@ const { getLogs2 } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getUniqueAddresses } = require('../helper/utils') const abi = { openEvent: 'event Open(uint192 indexed id, address indexed base, address indexed quote, uint64 unitSize, uint24 makerPolicy, uint24 takerPolicy, address hooks)', @@ -9,11 +11,18 @@ const config = { era: { factory: '0xAaA0e933e1EcC812fc075A81c116Aa0a82A5bbb8', fromBlock: 34448160, }, } +function customCacheFunction({ cache, logs }) { + if (!cache.logs) cache.logs = [] + const tokens = logs.map(({ base, quote }) => [base, quote]).flat() + cache.logs.push(...tokens) + cache.logs = getUniqueAddresses(cache.logs) + return cache +} + async function tvl(api) { const { factory, fromBlock } = config[api.chain] - const logs = await getLogs2({ api, factory, eventAbi: abi.openEvent, fromBlock, extraKey: 'open-address', }) - const tokens = logs.map(({ base, quote }) => [base, quote]).flat() - return api.sumTokens({ owner: factory, tokens, }) + const tokens = await getLogs2({ api, factory, eventAbi: abi.openEvent, fromBlock, extraKey: 'open-address', customCacheFunction, skipCacheRead: true }) + return sumTokens2({ api, owner: factory, tokens, permitFailure: true }) } module.exports = { diff --git a/projects/sonic-market-amm/index.js b/projects/sonic-market-amm/index.js new file mode 100644 index 0000000000..aaef76582b --- /dev/null +++ b/projects/sonic-market-amm/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'sonic': '0x01D6747dD2d65dDD90FAEC2C84727c2706ee28E2' +}) \ No newline at end of file diff --git a/projects/sonic-market-orderbook/index.js b/projects/sonic-market-orderbook/index.js new file mode 100644 index 0000000000..aba82ce753 --- /dev/null +++ b/projects/sonic-market-orderbook/index.js @@ -0,0 +1,33 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getUniqueAddresses } = require('../helper/utils') + +const abi = { + openEvent: 'event Open(uint192 indexed id, address indexed base, address indexed quote, uint64 unitSize, uint24 makerPolicy, uint24 takerPolicy, address hooks)', +} + +const config = { + sonic: { factory: '0xD4aD5Ed9E1436904624b6dB8B1BE31f36317C636', fromBlock: 297198, }, +} + +function customCacheFunction({ cache, logs }) { + if (!cache.logs) cache.logs = [] + const tokens = logs.map(({ base, quote }) => [base, quote]).flat() + cache.logs.push(...tokens) + cache.logs = getUniqueAddresses(cache.logs) + return cache +} + +async function tvl(api) { + const { factory, fromBlock } = config[api.chain] + const tokens = await getLogs2({ api, factory, eventAbi: abi.openEvent, fromBlock, extraKey: 'open-address', customCacheFunction, skipCacheRead: true }) + return sumTokens2({ api, owner: factory, tokens, permitFailure: true }) +} + +module.exports = { + methodology: "TVL consists of assets deposited into the Sonic Market Book Manager contract", +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From 32276ac2e073b615b497fa40696b9a1a03829635 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:45:41 +0100 Subject: [PATCH 1516/1768] fix velar --- projects/velar-amm/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/velar-amm/api.js b/projects/velar-amm/api.js index 58e64eda5c..524311d2b7 100644 --- a/projects/velar-amm/api.js +++ b/projects/velar-amm/api.js @@ -39,7 +39,7 @@ async function uniTvl(api, factory, isStable = false) { token1Bal: reserve1?.value, }) sdk.log(`velar-amm: ${i}/${pairCount}`) - await sleep(1100) + await sleep(3100) } return transformDexBalances({ chain: 'stacks', data, balances: api.getBalances() }) } \ No newline at end of file From c849a8f2638727f1641215eb360a0d9026513281 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:15:32 +0100 Subject: [PATCH 1517/1768] track qomswap #12769 --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 7 +++++-- projects/qomswap/index.js | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 projects/qomswap/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 02faf84c60..bf332e5fba 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -267,6 +267,7 @@ "proton", "pulse", "q", + "qom", "quasar", "quicksilver", "radixdlt", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ea6fd085f0..a1aa3c8865 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -38,7 +38,7 @@ const ibcMappings = { } const fixBalancesTokens = { - + // Sample Code ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain @@ -59,8 +59,11 @@ const fixBalancesTokens = { [ADDRESSES.sophon.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, }, duckchain: { - ["0x7F9308E8d724e724EC31395f3af52e0593BB2e3f"]: { coingeckoId: "wrapped-ton", decimals: 18 }, + "0x7F9308E8d724e724EC31395f3af52e0593BB2e3f": { coingeckoId: "the-open-network", decimals: 18 }, }, + qom: { + '0xa26dfBF98Dd1A32FAe56A3D2B2D60A8a41b0bDF0': { coingeckoId: "wrapped-qom", decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/qomswap/index.js b/projects/qomswap/index.js new file mode 100644 index 0000000000..f45ad0177c --- /dev/null +++ b/projects/qomswap/index.js @@ -0,0 +1,4 @@ +const { uniTvlExport } = require('../helper/unknownTokens') + +module.exports = uniTvlExport('qom', '0x475f361993D6FAcBF32fB82B66be0fB40f3d974C') + From d9591344a4c419bd8b8d67c6397d25dcc44b35c6 Mon Sep 17 00:00:00 2001 From: mdcryptonfts <105838382+mdcryptonfts@users.noreply.github.com> Date: Thu, 19 Dec 2024 06:16:53 -0500 Subject: [PATCH 1518/1768] Added thriveonmars project (#12768) Co-authored-by: Mike D --- projects/thriveonmars/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/thriveonmars/index.js diff --git a/projects/thriveonmars/index.js b/projects/thriveonmars/index.js new file mode 100644 index 0000000000..aec445e302 --- /dev/null +++ b/projects/thriveonmars/index.js @@ -0,0 +1,18 @@ +const { get_account_tvl } = require("../helper/chain/eos"); + +// Thrive On Mars +// https://thriveonmars.com +async function wax() { + const accounts = ["play.mars"]; + const tokens = [ + ["eosio.token", "WAX", "wax"] + ]; + return await get_account_tvl(accounts, tokens, "wax"); +} + +module.exports = { + methodology: `Thrive On Mars TVL is achieved by querying token balances from NFT gaming contracts`, + wax: { + tvl: wax + }, +} \ No newline at end of file From 33a32e59a6575cdcb283925a86df46bba6cdd9e1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:27:26 +0100 Subject: [PATCH 1519/1768] track datadex on vana #12767 --- projects/datadex/index.js | 4 ++++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 7 ++++++- 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 projects/datadex/index.js diff --git a/projects/datadex/index.js b/projects/datadex/index.js new file mode 100644 index 0000000000..72c6241793 --- /dev/null +++ b/projects/datadex/index.js @@ -0,0 +1,4 @@ +const { uniV3Export } = require('../helper/uniswapV3') +module.exports = uniV3Export({ + vana: { factory: '0xc2a0d530e57B1275fbce908031DA636f95EA1E38', fromBlock: 763744 }, +}) \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index bf332e5fba..09c5a4091f 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -339,6 +339,7 @@ "ultron", "umee", "unit0", + "vana", "vechain", "velas", "venom", diff --git a/projects/helper/env.js b/projects/helper/env.js index 1dd47e9c79..e7902dda2f 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -21,6 +21,7 @@ const DEFAULTS = { RPC_PROXY_URL: "https://rpc-proxy.llama.fi", DUCKCHAIN_RPC: "https://rpc.duckchain.io,https://rpc-hk.duckchain.io", SOPHON_RPC_MULTICALL: "0x5f4867441d2416cA88B1b3fd38f21811680CD2C8", + VANA_RPC_MULTICALL: "0xFe92b91F3326e58557478c28EeAe1936E0c7148a", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index a1aa3c8865..8304cbe9d3 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -63,7 +63,12 @@ const fixBalancesTokens = { }, qom: { '0xa26dfBF98Dd1A32FAe56A3D2B2D60A8a41b0bDF0': { coingeckoId: "wrapped-qom", decimals: 18 }, - } + }, + vana: { + [ADDRESSES.null]: { coingeckoId: 'vana', decimals: 18 }, + '0x00eddd9621fb08436d0331c149d1690909a5906d': { coingeckoId: 'vana', decimals: 18 }, + '0xf1815bd50389c46847f0bda824ec8da914045d14': { coingeckoId: 'usd-coin', decimals: 6 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From c0a89604523a94bcf23b0fa891ed0fe03feee21b Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:42:00 +0100 Subject: [PATCH 1520/1768] Add JOE in Folks xChain (#12779) --- projects/folks-xchain/constants.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/folks-xchain/constants.js b/projects/folks-xchain/constants.js index efaf73e65d..583eaf367d 100644 --- a/projects/folks-xchain/constants.js +++ b/projects/folks-xchain/constants.js @@ -34,6 +34,10 @@ const HubPools = { poolAddress: "0x307bCEC89624660Ed06C97033EDb7eF49Ab0EB2D", tokenAddress: '0xbc78D84Ba0c46dFe32cf2895a19939c86b81a777', }, + { // JOE + poolAddress: "0x5e5a2007a8D613C4C98F425097166095C875e6eE", + tokenAddress: '0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd', + }, ], 'ethereum': [ // excluding USDC cause bridged From f37f50caa674a6516d030e85fbb7bcd866fb66d1 Mon Sep 17 00:00:00 2001 From: Daniil <34062256+mellaught@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:45:07 +0300 Subject: [PATCH 1521/1768] Added the info regarding the companies merge. (#12766) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/genesis-lrt/index.js | 2 +- projects/inception-lrt/index.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/genesis-lrt/index.js b/projects/genesis-lrt/index.js index 9f7799cc39..b7ab940d5b 100644 --- a/projects/genesis-lrt/index.js +++ b/projects/genesis-lrt/index.js @@ -7,7 +7,7 @@ async function tvl(api) { module.exports = { hallmarks: [ - [1714953600,"Genesis Merges with InceptionLRT"] + [1714953600, "Genesis Merges with InceptionLRT"] ], doublecounted: true, ethereum: { tvl: tvl, } diff --git a/projects/inception-lrt/index.js b/projects/inception-lrt/index.js index 6f54675793..0fa72a37e4 100644 --- a/projects/inception-lrt/index.js +++ b/projects/inception-lrt/index.js @@ -12,7 +12,8 @@ async function tvl_eth(api) { module.exports = { hallmarks: [ - [1714953600,"Genesis Merges with InceptionLRT"] + [1714953600, "Genesis Merges with InceptionLRT"], + [1734530420, "Amphor Labs Merges with InceptionLRT"] ], doublecounted: true, ethereum: { tvl: tvl_eth, } , From e694cf45f93c94ed54d12ec55c8e498301bef546 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:53:11 +0100 Subject: [PATCH 1522/1768] update bitkub --- projects/bitkub-cex/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/projects/bitkub-cex/index.js b/projects/bitkub-cex/index.js index 27de8a889c..de34b02ac5 100644 --- a/projects/bitkub-cex/index.js +++ b/projects/bitkub-cex/index.js @@ -205,6 +205,25 @@ const config = { "UQDByM-88YEJtGq4UTZx3FOgZFZ6URHPYD11wf9AcBrajchg", ], }, + doge: { + owners: [ + 'DTqm2UCi6AS1nSCo9jZ8AejZ3k1ZcF8qix', + 'A2is3pqH2jz8jcRNV2QEFnLF3FAP5hBEoB', + 'DBrNiTbgpHHeveemLNnKwNDEJwXRGGRb1L', + 'D788kYSZYsVWSoLVejipE1Q4cN8Spom5eU', + 'DNvZftCnAsfrzzfe6R3dF6Sugz7W4Qgs6b', + 'DPYV66VirzChkotHXPryAhcfvyQmeArV2y', + 'DHBERwF4LVLVwQzDtfPz9zEtKPnWW9NSDH', + 'DTWmAfdTkrtqv7GmN2vE74VTkXkgQUFRSn', + 'DDm2XmWXhq3fxHd9fUaqnbmxanaFuKSG1s', + 'DHt3teN3iNSG7rJ8GaGz5EeHYFieCf8Qin', + 'D5GmmrSZ1xDut5Nj1s4C4ncA1v3EGfbk15', + 'DNpbFixXn611Qd9SZDBDjS4NhFPAXG8t1X', + 'D7pEtDnFU3ZgTykZt54SXvGeF1YSt2PVbe', + 'DCWvgKHcs1KUDqYe55rTX8m6uaJ67gaAp5', + 'DBdkivVhGhmbBRSsbt2s55MtZ38ngs86nS', + ] + } }; module.exports = cexExports(config); From 074a69dd4008560201aaab68188d25a9098d4e4e Mon Sep 17 00:00:00 2001 From: Mujahid Khan <106528609+mujahidkay@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:34:26 +0500 Subject: [PATCH 1523/1768] feat: add IST adapter (#12765) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/agoric/index.js | 58 +++++++++++++++++++++++++++++++++++++ projects/helper/chains.json | 1 + 2 files changed, 59 insertions(+) create mode 100644 projects/agoric/index.js diff --git a/projects/agoric/index.js b/projects/agoric/index.js new file mode 100644 index 0000000000..dad9523b75 --- /dev/null +++ b/projects/agoric/index.js @@ -0,0 +1,58 @@ +const { post } = require('../helper/http') + +const query = ` +query { + vaultManagerMetrics { + nodes { + liquidatingCollateralBrand + totalCollateral + } + } + oraclePrices { + nodes { + typeInAmount + typeOutAmount + typeInName + } + } + boardAuxes { + nodes { + allegedName + decimalPlaces + } + } +} +` + +const coingeckoMapping = { + 'stATOM': 'stride-staked-atom', + 'stkATOM': 'stkatom', + 'ATOM': 'cosmos', + 'stOSMO': 'stride-staked-osmo', + 'stTIA': 'stride-staked-tia', +} +const decimals = {} + +const tvl = async (api) => { + const { data: { vaultManagerMetrics, boardAuxes } } = await post('https://api.subquery.network/sq/agoric-labs/agoric-mainnet-v2', { query }) + + boardAuxes.nodes.forEach(board => { + decimals[board.allegedName] = 10 ** board.decimalPlaces + }) + + vaultManagerMetrics.nodes.forEach(vault => { + const key = vault.liquidatingCollateralBrand + if (!coingeckoMapping[key]) { + throw new Error(`Unknown coin ${key} (coingecko mapping is missing)`) + } + const decimal = decimals[key] ?? 1e6 + const balance = vault.totalCollateral / decimal + api.addCGToken(coingeckoMapping[key], balance) + }) +} + +module.exports = { + agoric: { + tvl, + }, +} diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 09c5a4091f..c353ff3087 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -3,6 +3,7 @@ "ace", "aelf", "aeternity", + "agoric", "ailayer", "airdao", "alephium", From f2ccb386c4a003f1020594f8ef8b581ff8aae937 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:34:59 +0100 Subject: [PATCH 1524/1768] Fix: Plenty (rateLimit) (#12781) --- projects/helper/chain/tezos.js | 2 +- projects/plenty/index.js | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/projects/helper/chain/tezos.js b/projects/helper/chain/tezos.js index 5bc17101dc..bf912105e8 100644 --- a/projects/helper/chain/tezos.js +++ b/projects/helper/chain/tezos.js @@ -86,7 +86,7 @@ async function resolveLPPosition({ balances = {}, owner, lpToken, transformAddre } async function sumTokens({ owners = [], balances = {}, includeTezos = false }) { - const { errors } = await PromisePool.withConcurrency(10) + const { errors } = await PromisePool.withConcurrency(5) .for(owners) .process(async item => { await getTokenBalances(item, includeTezos, { balances }) diff --git a/projects/plenty/index.js b/projects/plenty/index.js index 2e72d1b473..612b82c307 100644 --- a/projects/plenty/index.js +++ b/projects/plenty/index.js @@ -1,20 +1,16 @@ const { sumTokens2, } = require('../helper/chain/tezos') const { getConfig } = require("../helper/cache") -async function tvl() { - return sumTokens2({ owners: await getDexes(), includeTezos: true, }) -} +const API_URL = 'https://config.mainnet.plenty.network/pools' -async function getDexes() { - const data = await getConfig('tezos/plenty', "https://config.mainnet.plenty.network/pools") - return Object.keys(data) +const tvl = async () => { + const data = await getConfig('tezos/plenty', API_URL) + return sumTokens2({ owners: Object.keys(data), includeTezos: true, }) } module.exports = { timetravel: false, misrepresentedTokens: true, start: '2023-01-01', - tezos: { - tvl, - }, + tezos: { tvl }, } \ No newline at end of file From dcc5083b442437dba7ca49224be3e81e786885dd Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <72015889+0xtekgrinder@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:42:24 +0100 Subject: [PATCH 1525/1768] feat: rings adapter (#12780) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/tokenMapping.js | 4 +++ projects/rings/index.js | 43 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 projects/rings/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 8304cbe9d3..c375c83f42 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -69,6 +69,10 @@ const fixBalancesTokens = { '0x00eddd9621fb08436d0331c149d1690909a5906d': { coingeckoId: 'vana', decimals: 18 }, '0xf1815bd50389c46847f0bda824ec8da914045d14': { coingeckoId: 'usd-coin', decimals: 6 }, }, + sonic: { + '0x29219dd400f2Bf60E5a23d13Be72B486D4038894': { coingeckoId: "usd-coin", decimals: 6 }, + '0x309C92261178fA0CF748A855e90Ae73FDb79EBc7': { coingeckoId: "ethereum", decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/rings/index.js b/projects/rings/index.js new file mode 100644 index 0000000000..4e20b7b281 --- /dev/null +++ b/projects/rings/index.js @@ -0,0 +1,43 @@ +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/unwrapLPs"); + +module.exports = { + methodology: 'TVL counts the tokens deposited in the boring vaults.', + start: 1733726867 +} + +const config = { + ethereum: { + vaults: [ + '0xd3DCe716f3eF535C5Ff8d041c1A41C3bd89b97aE', + '0x3bcE5CB273F0F148010BbEa2470e7b5df84C7812', + ], + supportedAssets: [ + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC + '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT + '0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f', // GHO + '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI + '0xdC035D45d973E3EC169d2276DDab16f1e407384F', // USDS + '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // WSTETH + '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', // WEETH + ] + }, + sonic: { + vaults: [ + '0xd3DCe716f3eF535C5Ff8d041c1A41C3bd89b97aE', + '0x3bcE5CB273F0F148010BbEa2470e7b5df84C7812' + ], + supportedAssets: [ + '0x29219dd400f2Bf60E5a23d13Be72B486D4038894', // USDC + '0x309C92261178fA0CF748A855e90Ae73FDb79EBc7', // WETH + ] + }, +} + +Object.keys(config).forEach(chain => { + const { vaults, supportedAssets } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owners: vaults, tokens: supportedAssets}) + } +}) \ No newline at end of file From 2da10d106592769d42a26ed21e48c946504e4794 Mon Sep 17 00:00:00 2001 From: Aleks Wojewoda <66192641+alekswoje@users.noreply.github.com> Date: Thu, 19 Dec 2024 04:54:41 -0800 Subject: [PATCH 1526/1768] add fomogame to matchain (#12713) Co-authored-by: Aleks Wojewoda <66192641+Lawnmoers@users.noreply.github.com> --- projects/fomogame/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/fomogame/index.js diff --git a/projects/fomogame/index.js b/projects/fomogame/index.js new file mode 100644 index 0000000000..2f60bd52df --- /dev/null +++ b/projects/fomogame/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); +const coreAssets = require("../helper/coreAssets.json"); +const Fomo3D = [ + "0xba8be5277A06D2635553b331eAa0BCB6f4bDB809" +]; + +module.exports = { + methodology: "TVL includes a Fomo3D farm contracts", + matchain: { + tvl: sumTokensExport({ owners: Fomo3D, tokens: [coreAssets.null] }), + }, +}; From 424a7b4ed7d0f88c13e95ca00d14d84fd05942ce Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:12:25 +0100 Subject: [PATCH 1527/1768] move token mapping --- projects/helper/coreAssets.json | 21 ++++++++++++++++++--- projects/helper/tokenMapping.js | 30 ------------------------------ 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index d11c8d04e6..e3446d5dc6 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -2079,7 +2079,9 @@ }, "sonic": { "wS": "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38", - "WS_1": "0x832497895f05100e53f42dfa8fc758b4866b183a" + "WS_1": "0x832497895f05100e53f42dfa8fc758b4866b183a", + "USDC.e": "0x29219dd400f2Bf60E5a23d13Be72B486D4038894", + "WETH": "0x309C92261178fA0CF748A855e90Ae73FDb79EBc7" }, "vinu": { "USDT": "0xC0264277fcCa5FCfabd41a8bC01c1FcAF8383E41", @@ -2092,8 +2094,21 @@ "USDT": "0x6386da73545ae4e2b2e0393688fa8b65bb9a7169", "USDC": "0x9aa0f72392b5784ad86c6f3e899bcc053d00db4f", "WSTETH": "0x60d02f185f80644e1a5ae35497736dd31d1b078b", - "WEETH": "0x5e9fc50b44988b66ba84500f8bc32c0493fe8f8d", + "WEETH": "0x5e9fc50b44988b66ba84500f8bc32c0493fe8f8d", "DAI": "0x88171a5bbacd92ca5e25575c5904581c80b025dd", - "SDAI": "0xeccbb9360d235548473cb8c752735f68e652439b" + "SDAI": "0xeccbb9360d235548473cb8c752735f68e652439b", + }, + "ink": { + "WETH": "0x4200000000000000000000000000000000000006" + }, + "duckchain": { + "WTON": "0x7F9308E8d724e724EC31395f3af52e0593BB2e3f" + }, + "qom": { + "WQOM": "0xa26dfBF98Dd1A32FAe56A3D2B2D60A8a41b0bDF0" + }, + "vana": { + "WVANA": "0x00eddd9621fb08436d0331c149d1690909a5906d", + "USDC.e": "0xf1815bd50389c46847f0bda824ec8da914045d14" } } \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c375c83f42..349ea89ade 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -43,36 +43,6 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, - apechain: { - [ADDRESSES.null]: { coingeckoId: "apecoin", decimals: 18 }, - }, - ink: { - [ADDRESSES.optimism.WETH_1]: { coingeckoId: "ethereum", decimals: 18 }, - }, - sophon: { - [ADDRESSES.sophon.ETH]: { coingeckoId: "ethereum", decimals: 18 }, - [ADDRESSES.sophon.USDT]: { coingeckoId: "tether", decimals: 6 }, - [ADDRESSES.sophon.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, - [ADDRESSES.sophon.WSTETH]: { coingeckoId: "wrapped-steth", decimals: 18 }, - [ADDRESSES.sophon.WEETH]: { coingeckoId: "wrapped-eeth", decimals: 18 }, - [ADDRESSES.sophon.DAI]: { coingeckoId: "dai", decimals: 18 }, - [ADDRESSES.sophon.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, - }, - duckchain: { - "0x7F9308E8d724e724EC31395f3af52e0593BB2e3f": { coingeckoId: "the-open-network", decimals: 18 }, - }, - qom: { - '0xa26dfBF98Dd1A32FAe56A3D2B2D60A8a41b0bDF0': { coingeckoId: "wrapped-qom", decimals: 18 }, - }, - vana: { - [ADDRESSES.null]: { coingeckoId: 'vana', decimals: 18 }, - '0x00eddd9621fb08436d0331c149d1690909a5906d': { coingeckoId: 'vana', decimals: 18 }, - '0xf1815bd50389c46847f0bda824ec8da914045d14': { coingeckoId: 'usd-coin', decimals: 6 }, - }, - sonic: { - '0x29219dd400f2Bf60E5a23d13Be72B486D4038894': { coingeckoId: "usd-coin", decimals: 6 }, - '0x309C92261178fA0CF748A855e90Ae73FDb79EBc7': { coingeckoId: "ethereum", decimals: 18 }, - } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 600a349eb63a0b55248038ffcd08186e154a00d1 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Dec 2024 13:17:56 +0000 Subject: [PATCH 1528/1768] add mint chain --- projects/lineabank/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/lineabank/index.js b/projects/lineabank/index.js index 39cb80e2b0..3b8100dcc0 100644 --- a/projects/lineabank/index.js +++ b/projects/lineabank/index.js @@ -8,7 +8,8 @@ const config = { zklink: '0x4Ac518DbF0CC730A1c880739CFa98fe0bB284959', bsquared: '0x72f7a8eb9F83dE366AE166DC50F16074076C3Ea6', bob: '0x77cabFd057Bd7C81c011059F1bf74eC1fBeDa971', - btr: '0xf1E25704e75dA0496B46Bf4E3856c5480A3c247F' + btr: '0xf1E25704e75dA0496B46Bf4E3856c5480A3c247F', + mint: '0x0f225d10dd29D4703D42C5E93440F828bf04D150' } const abis = { From 0dd47e42a848cf7e5595a254e37cce9557b6b9ec Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:06:58 +0100 Subject: [PATCH 1529/1768] Fix coreAssets, (comma) (#12782) --- projects/helper/coreAssets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index e3446d5dc6..ab8ef93df0 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -2096,7 +2096,7 @@ "WSTETH": "0x60d02f185f80644e1a5ae35497736dd31d1b078b", "WEETH": "0x5e9fc50b44988b66ba84500f8bc32c0493fe8f8d", "DAI": "0x88171a5bbacd92ca5e25575c5904581c80b025dd", - "SDAI": "0xeccbb9360d235548473cb8c752735f68e652439b", + "SDAI": "0xeccbb9360d235548473cb8c752735f68e652439b" }, "ink": { "WETH": "0x4200000000000000000000000000000000000006" From da2acb568414477ac15bf2042c7688207715ad78 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:11:37 +0100 Subject: [PATCH 1530/1768] Update: RealT, (update API) (#12783) --- projects/realt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/realt.js b/projects/realt.js index 49e477d2be..faa866891c 100644 --- a/projects/realt.js +++ b/projects/realt.js @@ -4,7 +4,7 @@ const { get } = require('./helper/http') // Loop through all RealT tokens listed by realt.community API and accumulate tokenprice * supply, where supply is biggest of xdai or mainnet // See https://api.realt.community/ for reference async function xdaiTvl(api) { - let realt_tokens = await get('https://api.realt.community/v1/token') + let realt_tokens = await get('https://api.realtoken.community/v1/token') // Filter out deprecated contracts realt_tokens = realt_tokens.filter(t => !t['fullName'].startsWith('OLD-')).filter(t => t.xDaiContract && +t.tokenPrice) From a34303b77403ce426e0ffe9838d8b39f243a8eb8 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 19 Dec 2024 14:29:55 +0000 Subject: [PATCH 1531/1768] add adapters for 9mm v2 and v3 --- projects/9mm-v2/index.js | 12 ++++++++++++ projects/9mm-v3/index.js | 6 ++++++ 2 files changed, 18 insertions(+) create mode 100644 projects/9mm-v2/index.js create mode 100644 projects/9mm-v3/index.js diff --git a/projects/9mm-v2/index.js b/projects/9mm-v2/index.js new file mode 100644 index 0000000000..c6d31097e9 --- /dev/null +++ b/projects/9mm-v2/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + methodology: "Factory addresses (0x3a0Fa7884dD93f3cd234bBE2A0958Ef04b05E13b for PulseChain) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", + pulse: { + tvl: getUniTVL({ + factory: '0x3a0Fa7884dD93f3cd234bBE2A0958Ef04b05E13b', + useDefaultCoreAssets: true, + }), + }, +} \ No newline at end of file diff --git a/projects/9mm-v3/index.js b/projects/9mm-v3/index.js new file mode 100644 index 0000000000..ad02c07b3f --- /dev/null +++ b/projects/9mm-v3/index.js @@ -0,0 +1,6 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + pulse: { factory: '0xe50dbdc88e87a2c92984d794bcf3d1d76f619c68', fromBlock: 18942139, } , + base: { factory: '0x7b72C4002EA7c276dd717B96b20f4956c5C904E7', fromBlock: 15754625, } +}) \ No newline at end of file From b4a1be59eb21166e9647cc64bd3e9c57262e1d33 Mon Sep 17 00:00:00 2001 From: prim8bits Date: Thu, 19 Dec 2024 15:57:06 +0100 Subject: [PATCH 1532/1768] add kongswap dex (#12786) --- projects/kongswap/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/kongswap/index.js diff --git a/projects/kongswap/index.js b/projects/kongswap/index.js new file mode 100644 index 0000000000..41e8df6946 --- /dev/null +++ b/projects/kongswap/index.js @@ -0,0 +1,11 @@ +const { get } = require('../helper/http') + +module.exports = { + misrepresentedTokens: true, + icp: { tvl }, +} + +async function tvl(api) { + let { tvlUSD } = await get('https://api.kongswap.io/api/defillama/tvl') + api.addCGToken('tether', Math.round(tvlUSD)) +} From 52f395d88b46a5f1af6a043d0849a4ef5e28b4d4 Mon Sep 17 00:00:00 2001 From: doomsower <12031673+doomsower@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:58:01 +0300 Subject: [PATCH 1533/1768] fix: update gearbox methodology wording (#12784) --- projects/gearbox/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/gearbox/index.js b/projects/gearbox/index.js index 44405b03bf..e9cecaeaf5 100644 --- a/projects/gearbox/index.js +++ b/projects/gearbox/index.js @@ -3,7 +3,7 @@ ** ** ** This file has been generated from source code in https://github.com/Gearbox-protocol/defillama repo - ** Binary release: https://github.com/Gearbox-protocol/defillama/releases/tag/v1.4.1 + ** Binary release: https://github.com/Gearbox-protocol/defillama/releases/tag/v1.4.3 ** ** ** @@ -484,7 +484,7 @@ var adapter_default = { optimism: { tvl, }, - methodology: `Retrieves the tokens in each Gearbox pool (WETH/DAI/WBTC/USDC/wstETH) & value of all Credit Accounts (V1/V2/V3) denominated in the underlying token.`, + methodology: `Retrieves the tokens in each Gearbox pool & value of all Credit Accounts (V1/V2/V3) denominated in the underlying token.`, misrepresentedTokens: true, }; From 3c09f50eece74396c260be728392ca5fcdcdaf0a Mon Sep 17 00:00:00 2001 From: Bogdan Crisan Date: Thu, 19 Dec 2024 15:58:59 +0100 Subject: [PATCH 1534/1768] Prevent rate limiting error in emojicoin.fun TVL function (#12785) --- projects/emojicoin/index.js | 38 ++++++++++------ projects/helper/chain/aptos.js | 79 ++++++++++++++++++++-------------- 2 files changed, 72 insertions(+), 45 deletions(-) diff --git a/projects/emojicoin/index.js b/projects/emojicoin/index.js index 75a7f7872e..4d7c572da1 100644 --- a/projects/emojicoin/index.js +++ b/projects/emojicoin/index.js @@ -1,28 +1,42 @@ const ADDRESSES = require('../helper/coreAssets.json') const { function_view, timestampToVersion } = require("../helper/chain/aptos"); +// This function will get all markets and the associated TVL in APT async function getAllMarkets(ledgerVersion) { - // This function will get all markets and the associated TVL in APT - const registry = await function_view({ - functionStr: "0xface729284ae5729100b3a9ad7f7cc025ea09739cd6e7252aff0beb53619cafe::emojicoin_dot_fun::registry_view", - args: [], - type_arguments: [], - ledgerVersion, - }) - return registry.total_quote_locked.value + // If called with a ledger version too early, an error will be thrown by function_view. + // If that is the case, return 0 as it means the package wasn't deployed yet and the + // TVL is then 0. + try { + const registry = await function_view({ + functionStr: "0xface729284ae5729100b3a9ad7f7cc025ea09739cd6e7252aff0beb53619cafe::emojicoin_dot_fun::registry_view", + args: [], + type_arguments: [], + ledgerVersion, + }) + return registry.total_quote_locked.value; + } catch { + return 0; + } } +// Date at which the contract was deployed. +const DEPLOYED_AT_DATE = '2024-11-20'; + +// Block close to the start date but before it. +const DEPLOYED_AT_BLOCK = 254000000; + async function tvl(api) { - // const version = await timestampToVersion(api.timestamp, 1962588495); // this query is not working - const tvl_amount = await getAllMarkets(); + const version = await timestampToVersion(new Date(api.timestamp * 1000), DEPLOYED_AT_BLOCK); + const tvl_amount = await getAllMarkets(version); api.add(ADDRESSES.aptos.APT, tvl_amount); } module.exports = { - timetravel: false, + timetravel: true, methodology: "Aggregates TVL in all pools in Emojicoin.fun", aptos: { tvl, }, -}; \ No newline at end of file + start: DEPLOYED_AT_DATE, +}; diff --git a/projects/helper/chain/aptos.js b/projects/helper/chain/aptos.js index b3fe6f453e..01e416955a 100644 --- a/projects/helper/chain/aptos.js +++ b/projects/helper/chain/aptos.js @@ -124,46 +124,59 @@ function sumTokensExport(options) { return async (api) => sumTokens({ ...api, api, ...options }) } -const VERSION_GROUPING = 1000000 - -// If I can get this timestampQuery to work... everything will work seamlessly -async function timestampToVersion(timestamp, start_version = 1962588495, end_version = 1962588495 + VERSION_GROUPING) { - // eslint-disable-next-line no-constant-condition - while (true) { - let closestTransactions = await findClosestTransaction(timestamp, start_version, end_version) - if (closestTransactions.length < 1) { - start_version += VERSION_GROUPING - end_version += VERSION_GROUPING - } else { - return closestTransactions[0].version - } +const graphQLClient = new GraphQLClient("https://api.mainnet.aptoslabs.com/v1/graphql"); + +// Query to get the latest block. +const latestBlockQuery = `query LatestBlock { + block_metadata_transactions(order_by: {version: desc}, limit: 1) { + block_height } -} +}`; -const graphQLClient = new GraphQLClient("https://api.mainnet.aptoslabs.com/v1/graphql") -const timestampQuery = `query TimestampToVersion($timestamp: timestamp, $start_version: bigint, $end_version: bigint) { -block_metadata_transactions( - where: {timestamp: {_gte: $timestamp }, version: {_gte: $start_version, _lte: $end_version}} - limit: 1 - order_by: {version: asc} -) { +// Query to get a block. +const blockQuery = `query Block($block: bigint) { + block_metadata_transactions(limit: 1, where: {block_height: {_eq: $block}}) { timestamp version } }`; -async function findClosestTransaction(timestamp, start_version, end_version) { - let date = new Date(timestamp * 1000).toISOString() - - const results = await graphQLClient.request( - timestampQuery, - { - timestamp: date, - start_version, - end_version, - } - ) - return results.block_metadata_transactions +// Query to get a block range. +const blockRangeQuery = `query Block($firstBlock: bigint, $limit: Int) { + block_metadata_transactions(limit: $limit, where: {block_height: {_gte: $firstBlock}}, order_by: {block_height: asc}) { + timestamp + version + } +}`; + +// Given a timestamp, returns the transaction version that is closest to that timestamp. +const timestampToVersion = async (timestamp, minBlock = 0) => { + let left = minBlock; + let right = await graphQLClient.request(latestBlockQuery).then(r => Number(r.block_metadata_transactions[0].block_height)); + let middle; + while (left + 100 < right) { + middle = Math.round((left + right) / 2); + const middleBlock = await graphQLClient.request(blockQuery, { block: middle }).then(r => r.block_metadata_transactions[0]); + const middleBlockDate = new Date(middleBlock.timestamp); + if (middleBlockDate.getTime() === timestamp.getTime()) { + return Number(middleBlock.version); + } + if (timestamp.getTime() < middleBlockDate.getTime()) { + right = middle; + } else { + left = middle + 1; + } + } + const blocks = await graphQLClient.request( + blockRangeQuery, + { firstBlock: left, limit: right - left } + ).then(r => r.block_metadata_transactions); + const mappedBlocks = blocks.map((e) => ({ + version: Number(e.version), + delta: Math.abs(timestamp.getTime() - new Date(e.timestamp).getTime()) + })); + mappedBlocks.sort((a, b) => a.delta - b.delta); + return mappedBlocks[0].version; } module.exports = { From 8bc47bd3919ce6f5367c339e54502021df81655e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:09:27 +0100 Subject: [PATCH 1535/1768] cex: fix aptos & sui bug --- projects/helper/cex.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/helper/cex.js b/projects/helper/cex.js index 279a3ca7fb..3aba02bc49 100644 --- a/projects/helper/cex.js +++ b/projects/helper/cex.js @@ -256,6 +256,8 @@ const defaultTokens = { ADDRESSES.ton.TON_2, ADDRESSES.ton.TON_3, ], + sui: [], + aptos: [], } function cexExports(config) { From 0144daeeadd75f1ef6e5f4fd15eba5a2e0e25fe3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:23:52 +0100 Subject: [PATCH 1536/1768] fix datadex --- projects/datadex/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/datadex/index.js b/projects/datadex/index.js index 72c6241793..e62fd4939d 100644 --- a/projects/datadex/index.js +++ b/projects/datadex/index.js @@ -1,4 +1,4 @@ const { uniV3Export } = require('../helper/uniswapV3') module.exports = uniV3Export({ - vana: { factory: '0xc2a0d530e57B1275fbce908031DA636f95EA1E38', fromBlock: 763744 }, + vana: { factory: '0xc2a0d530e57B1275fbce908031DA636f95EA1E38', fromBlock: 763744, blacklistedTokens: ['0xbd2d7c728b224961fdb25ccf2a67eb3c25f5ec52'] }, }) \ No newline at end of file From 13dd11cae823a266ea05e8904c9e5128ac42bae4 Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:50:41 +0100 Subject: [PATCH 1537/1768] Update gAlgo hallmarks (#12787) --- projects/folks-galgo/index.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/projects/folks-galgo/index.js b/projects/folks-galgo/index.js index c4da6cdf71..3591023d4b 100644 --- a/projects/folks-galgo/index.js +++ b/projects/folks-galgo/index.js @@ -17,13 +17,13 @@ module.exports = { }; module.exports.hallmarks = [ - [1665158400, "Governance 5 Recommitment"], - [1673114400, "Governance 6 Recommitment"], - [1680879600, "Governance 7 Recommitment"], - [1688745600, "Governance 8 Recommitment"], - [1696694400, "Governance 9 Recommitment"], - [1704643200, "Governance 10 Recommitment"], - [1712505600, "Governance 11 Recommitment"], - [1720368000, "Governance 12 Recommitment"], - [1728316800, "Governance 13 Recommitment"], + [1664553600, "Algorand Governance Recommitment"], //5 + [1672502400, "Algo Gov"], //6 + [1680278400, "Algo Gov"], //7 + [1688140800, "Algo Gov"], //8 + [1696089600, "Algo Gov"], //9 + [1704038400, "Algo Gov"], //10 + [1711900800, "Algo Gov"], //11 + [1719763200, "Algo Gov"], //12 + [1727712000, "Algo Gov"], //13 ] \ No newline at end of file From 9dd7a3176336c547e71cf85b3f3239d9eaea5916 Mon Sep 17 00:00:00 2001 From: imfeng Date: Fri, 20 Dec 2024 00:57:45 +0800 Subject: [PATCH 1538/1768] update satoshi protocol vault assets TVL (#12739) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/satoshi-protocol/index.js | 44 +++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/projects/satoshi-protocol/index.js b/projects/satoshi-protocol/index.js index 1206ea125c..f5300078d6 100644 --- a/projects/satoshi-protocol/index.js +++ b/projects/satoshi-protocol/index.js @@ -6,18 +6,20 @@ const AssetConfigSettingEventABI = "event AssetConfigSetting(address asset,uint2 function createExports({ troveList, nymInformation, // { address, fromBlock } + aaveStrategyVaults, // { address, asset, aToken }[] + pellStrategyVaults, // { address, asset }[] }) { return { tvl: async (api) => { const tokens = []; const owners = []; - if(troveList) { + if (troveList) { owners.push(...troveList); const collaterals = await getCollateralsFromTrove(api, troveList); tokens.push(...collaterals); } - if(nymInformation) { + if (nymInformation) { const assetList = await getAssetListFromNymContract(api, nymInformation.address, nymInformation.fromBlock); assetList.forEach(asset => { owners.push(nymInformation.address); @@ -25,6 +27,27 @@ function createExports({ }) } + if (aaveStrategyVaults) { + const calls = [] + const tokens = [] + for (let index = 0; index < aaveStrategyVaults.length; index++) { + const { address: vault, aToken, asset } = aaveStrategyVaults[index]; + tokens.push(asset) + calls.push({ target: aToken, params: vault }) + } + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls }) + api.add(tokens, bals) + } + + if (pellStrategyVaults) { + const vaults = pellStrategyVaults.map(i => i.address) + const tokens = pellStrategyVaults.map(i => i.asset) + const strategies = await api.multiCall({ abi: 'address:pellStrategy', calls: vaults }) + const calls2 = strategies.map((v, i) => ({ target: v, params: vaults[i] })) + const bals = await api.multiCall({ abi: "function userUnderlyingView(address) external view returns (uint256)", calls: calls2 }) + api.add(tokens, bals) + } + return sumTokens2({ api, tokensAndOwners2: [tokens, owners] }) }, } @@ -36,7 +59,7 @@ async function getCollateralsFromTrove(api, troveList) { } async function getAssetListFromNymContract(api, nymContractAddress, fromBlock) { - const logs = await getLogs({api, target: nymContractAddress, fromBlock, eventAbi: AssetConfigSettingEventABI, onlyArgs: true}); + const logs = await getLogs({ api, target: nymContractAddress, fromBlock, eventAbi: AssetConfigSettingEventABI, onlyArgs: true }); const assetList = logs.map(item => item.asset); return assetList; } @@ -71,7 +94,20 @@ module.exports = { nymInformation: { address: '0x7253493c3259137431a120752e410b38d0c715C2', fromBlock: 4614620, - } + }, + aaveStrategyVaults: [ + { + address: '0x713dD0E14376a6d34D0Fde2783dca52c9fD852bA', + aToken: '0xd6890176e8d912142AC489e8B5D8D93F8dE74D60', // aBOBWBTC + asset: '0x03C7054BCB39f7b2e5B2c7AcB37583e32D70Cfa3', // BOB WBTC + } + ], + pellStrategyVaults: [ + { + address: '0x04485140d6618be431D8841de4365510717df4fd', + asset: '0x03C7054BCB39f7b2e5B2c7AcB37583e32D70Cfa3', // BOB WBTC + } + ], }), bsquared: createExports({ troveList: [ From e212c1e45a992842618302b7daffdb68c59ce19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pol=20Epi=C3=A9?= <36932762+PolEpie@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:59:04 +0100 Subject: [PATCH 1539/1768] Add SilverSwap on Sonic (#12790) --- projects/silverswap/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/silverswap/index.js diff --git a/projects/silverswap/index.js b/projects/silverswap/index.js new file mode 100644 index 0000000000..a8882973d8 --- /dev/null +++ b/projects/silverswap/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + sonic: { factory: '0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76', fromBlock: 186117, isAlgebra: true, } +}) From bdb6922f389635df4d82a71c7c2792440e63dd0a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:08:31 +0100 Subject: [PATCH 1540/1768] track bucket farm #12788 --- projects/bucket-farm/index.js | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 projects/bucket-farm/index.js diff --git a/projects/bucket-farm/index.js b/projects/bucket-farm/index.js new file mode 100644 index 0000000000..918ad6a383 --- /dev/null +++ b/projects/bucket-farm/index.js @@ -0,0 +1,48 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sui = require("../helper/chain/sui"); + +const Degen_Pool_IDs = [ + "0x27551889fb011f613614e6e82f02cb4aa8c0563df0f66adb1112983eb6bbf07c", + "0x3e7f71a129256659d6c18d77d6e5f0dcd7e624e993c97994b4a32e39c1453fdb", + "0xab90d38384dfaf833c57ce7802d2f87efd286ffa8dddf5474323dc2f2e20f052", + "0xcec648deeb201a2e9a9943805ae6b6b719ba9ebfd744b2f9c424a7f2fa3780d7", + "0xdd23fe747d2177e82d1489d05066b8a120d5a421712a0c1198eb5555450826d1", + "0x25a4b8edb9709d30f3c0078b6e4359fa3f12c766361db8ede6670736611a9ca7", + "0x28f9d5271674dd24e9128a5c678c648f0dc58a0218cd4cbe3a68380c0c71350b", + "0x532bf24a80898a3fac521c41d216d56ee068d81939d205cabb4ddfd977dd3489", + "0x5658fe1d89cb026e6f0cba279a34189547be588c560736b8e9501b5df0ba20f3", + "0x5baa72165855665ee2931c5ff8715c9a942c869547f53d85cacb591491938220", + "0x167824936eb94620eb44e0d63c244a4fc17f334bef8dbc73d8a8fafb150ad41f", + "0x1d07b16d18cc75dcb7fbc15e39a0262bcbbd1e06aa1c8cb62dfe5d8f3c664b60", + "0x6cab0d3cc431a20d429274a21182544199db6df21593bcf6286b4fda16f4b880", + "0xf2221e1cae8a7493cafd72a834152a72ee6a90c9eedbd666ee97ab43738be3b7", + "0xfbb32d268ba51d3afd8c9fcaffc48b0e7c5bec3194da0642c09c4c16e7aaac3f", + "0xa8997c5fca8cfea92990979650e8c16074baa25db33161fe1828c1f4f0c00882", + "0xcd9d4d72995d125ce842d2a4a9c1552e39a6ae23cf4f4c4042f68ca9428eb98a", + "0xdfffbeda682d4d9db915538d4a8580f4c30e9d7eb569403af4331e2819f6d377", + "0xe2cd0560105ff1e23ed3808d483e63bb842ce0d4d517036693b835c12fa06e51", + "0xeb20a9e131dff3948556232e49d0080f74dd71990e9cc405659c47ae3d26ba9a", + "0x02a94dfbf720bcef33b680b65803cd5eabddf40b088eb565e3d81c58061eca40", + "0x4e791ee7a25bc8621bbb044b6bd681d309b4eb10a80971dc2ad837dfadbda2ac", + "0x6781c47e118bf07b30d7cb2c9825b99c1335cae72f30e1804f8c42001b81a4a9", + "0xe07e240fae827025882887218e8690b2850ac59e3773bce334780d3e17de9b38", + "0xe9f02d4b83e78dff3e47cfc095fca1b18788779d5a96c77e76816ca0eb49390a" +]; + +async function tvl(api) { + const degenPools = await sui.getObjects(Degen_Pool_IDs); + for(degenPool of degenPools){ + const type = degenPool.type + let assetType = type.slice(type.indexOf("<"), type.indexOf(">")).split(",")[1].trim() + + if(assetType == "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI" || assetType == "0x41ff228bfd566f0c707173ee6413962a77e3929588d010250e4e76f0d1cc0ad4::ksui::KSUI") assetType = ADDRESSES.sui.SUI + + api.add(assetType, degenPool.fields.balance) + } +} + +module.exports = { + sui: { + tvl + } +} \ No newline at end of file From c8bdead64a3438aa6d0036e8f36b7478d132dc39 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:21:46 +0100 Subject: [PATCH 1541/1768] track goblin dex #12696 --- projects/goblin-dex/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/goblin-dex/index.js diff --git a/projects/goblin-dex/index.js b/projects/goblin-dex/index.js new file mode 100644 index 0000000000..2fa08a931f --- /dev/null +++ b/projects/goblin-dex/index.js @@ -0,0 +1,12 @@ +const { uniV3Export } = require('../helper/uniswapV3') +const { staking } = require('../helper/staking') + +module.exports = uniV3Export({ + smartbch: { factory: '0x08153648C209644a68ED4DC0aC06795F6563D17b', fromBlock: 14169895 }, + base: { factory: '0xE82Fa4d4Ff25bad8B07c4d1ebd50e83180DD5eB8', fromBlock: 21481309 }, + bsc: { factory: '0x30D9e1f894FBc7d2227Dd2a017F955d5586b1e14', fromBlock: 42363117 }, +}) + +module.exports.smartbch.staking = staking('0xfA3D02c971F6D97076b8405500c2210476C6A5E8','0x56381cb87c8990971f3e9d948939e1a95ea113a3') +module.exports.bsc.staking = staking('0xb4d117f9c404652030f3d12f6de58172317a2eda','0x701aca29ae0f5d24555f1e8a6cf007541291d110') +module.exports.base.staking = staking('0x866932399DEBdc1694Da094027137Ebb85D97206','0xcdba3e4c5c505f37cfbbb7accf20d57e793568e3') From 1fe77a771c75556112ae5ce6714d79510f781838 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 22:02:33 +0100 Subject: [PATCH 1542/1768] remove NOTE from coreAssets --- projects/1155Tech/index.js | 2 +- projects/canto-lending/index.js | 2 +- projects/cantohm/index.js | 2 +- projects/manifesto/index.js | 2 +- projects/synapse/config.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/1155Tech/index.js b/projects/1155Tech/index.js index 9fdf80684d..f893c7dcf6 100644 --- a/projects/1155Tech/index.js +++ b/projects/1155Tech/index.js @@ -5,6 +5,6 @@ const MARKET_1155TECH_CONTRACT = '0x33b77fAf955Ed3eDAf939ae66C4D7a2D78bc30C6'; module.exports = { methodology: 'Value of all Keys across all art markets is TVL in the protocol', canto: { - tvl: sumTokensExport({ owner: MARKET_1155TECH_CONTRACT, tokens: [ADDRESSES.canto.NOTE] }) + tvl: sumTokensExport({ owner: MARKET_1155TECH_CONTRACT, tokens: ['0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503'] }) } }; \ No newline at end of file diff --git a/projects/canto-lending/index.js b/projects/canto-lending/index.js index a8f26b9abb..ccd3c82344 100644 --- a/projects/canto-lending/index.js +++ b/projects/canto-lending/index.js @@ -9,7 +9,7 @@ const addresses = { NoteUSDCLP: '0x9571997a66D63958e1B3De9647C22bD6b9e7228c', CantoETHLP: '0x216400ba362d8FCE640085755e47075109718C8B', Comptroller: '0x5E23dC409Fc2F832f83CEc191E245A191a4bCc5C', - Note: ADDRESSES.canto.NOTE, + Note: '0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503', USDC: ADDRESSES.functionx.WFX, USDT: ADDRESSES.functionx.PUNDIX, ATOM: ADDRESSES.functionx.USDT, diff --git a/projects/cantohm/index.js b/projects/cantohm/index.js index ffedffea92..8921ba6596 100644 --- a/projects/cantohm/index.js +++ b/projects/cantohm/index.js @@ -12,7 +12,7 @@ module.exports = { tvl: sumTokensExport({ owner: '0xB8Ce90A08bdAdd3e6e6cD3173c0661FA94Aa81c5', tokens: [ - ADDRESSES.canto.NOTE, + '0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503', ADDRESSES.canto.WCANTO, ...lps, ], diff --git a/projects/manifesto/index.js b/projects/manifesto/index.js index a5817ea198..081aa1b6f0 100644 --- a/projects/manifesto/index.js +++ b/projects/manifesto/index.js @@ -15,7 +15,7 @@ module.exports = { tvl: sumTokensExport({ owner: '0x20636bd0E15be0e1faADE1b27f568e642f59814E', tokens: [ - ADDRESSES.canto.NOTE, + '0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503', ADDRESSES.canto.WCANTO, ADDRESSES.functionx.PURSE, ADDRESSES.functionx.WFX, diff --git a/projects/synapse/config.js b/projects/synapse/config.js index d0b9b8c941..382124df23 100644 --- a/projects/synapse/config.js +++ b/projects/synapse/config.js @@ -370,7 +370,7 @@ module.exports = { { pool: ADDRESSES.aurora.nUSD, tokens: [ - ADDRESSES.canto.NOTE, + '0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503', // "0xd8836af2e565d3befce7d906af63ee45a57e8f80", // nUSD ] }, From a46bd5b8effc4bca19582c9e914089229c964c91 Mon Sep 17 00:00:00 2001 From: sepezho <47150504+sepezho@users.noreply.github.com> Date: Thu, 19 Dec 2024 22:15:36 +0100 Subject: [PATCH 1543/1768] add new evaa.finance pool (#12796) --- projects/evaa/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/evaa/index.js b/projects/evaa/index.js index 2616a62cc1..045a507bbd 100644 --- a/projects/evaa/index.js +++ b/projects/evaa/index.js @@ -3,10 +3,11 @@ const ADDRESSES = require("../helper/coreAssets.json"); const evaaMainPool = "EQC8rUZqR_pWV1BylWUlPNBzyiTYVoBEmQkMIQDZXICfnuRr" const evaaLpPool = "EQBIlZX2URWkXCSg3QF2MJZU-wC5XkBoLww-hdWk2G37Jc6N" +const evaaAltsPool = "EQANURVS3fhBO9bivig34iyJQi97FhMbpivo1aUEAS2GYSu-"; module.exports = { methodology: 'Counts EVAA smartcontract balance as TVL.', ton: { - tvl: sumTokensExport({ owners: [evaaMainPool, evaaLpPool], tokens: [ADDRESSES.null]}), + tvl: sumTokensExport({ owners: [evaaMainPool, evaaLpPool, evaaAltsPool], tokens: [ADDRESSES.null]}), } } From fd7abd0822b825c0fb775dc0c9645919eebd0dfa Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:47:47 +0530 Subject: [PATCH 1544/1768] new pools (#12794) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 80 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index b59a51e9e6..6d3d101200 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -159,6 +159,76 @@ const ALPHAFI_BLUEFIN_TVL_IDS = [ token0Type: "0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD", token1Type: ADDRESSES.sui.USDC_CIRCLE }, + { //sui ausd + poolID: "0x89793208211927a4d1458a59d34b775aaec17af8c98a59a1ba97f7b005c0e587", + parentPoolID: "0xb30df44907da6e9f3c531563f19e6f4a203d70f26f8a33ad57881cd7781e592d", + investorID: "0x275e4df83f6f7b9dc75504d02e5d32f21ca03a5a8b017c622a8b42d3671e2888", + token0Type: ADDRESSES.sui.SUI, + token1Type: "0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD" + }, + { //alpha usdc + poolID: "0x4540c5e7de64088c0c2c30abc51f7e6bbe6bc48703667c108aa1de23f6aa40e6", + parentPoolID: "0x6595edf6d8c8b6894a5c6760843ae2fde81cb37d8586984dd1345b0f00bfecd8", + investorID: "0x187ca6f373d20465a730125c93e62a96c6a73354a1a8b35cbdd2b39278b7b141", + token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //wbtc usdc + poolID: "0xbc0de037958d7988710c40f4e7317f8f3ffca4fa3cc9e1c18bc1ebd7ec65cd6e", + parentPoolID: "0x38282481e3a024c50254c31ebfc4710e003fe1b219c0aa31482a860bd58c4ab0", + investorID: "0x9d14a391953d5b853fb22c4135657da341f4db3b341dd4d5f603cfb008e91745", + token0Type: ADDRESSES.sui.WBTC, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //navx vsui + poolID: "0xf495b997ae10b8bb0996c1ee56a1cc7832daec36a9380e0932e41256d97cabad", + parentPoolID: "0xa0b4fef70ccef039b94512d6384806979d4c201c5e12af9a4b0458454b80da35", + investorID: "0x3672719d64416d0f04575b500e853d9101dfca6488f705856c59ace1999e99d1", + token0Type: "0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX", + token1Type: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT" + }, + { //blue sui + poolID: "0xddecab961380225c95e6a6089660de2e6028170fbc2cd07ab79b8bf45e3c2645", + parentPoolID: "0xde705d4f3ded922b729d9b923be08e1391dd4caeff8496326123934d0fb1c312", + investorID: "0x56f05fc7b81cf45b8b223de9daba1ba82bf4ce32ba0bfa46c2780d78216b2b92", + token0Type: "0xe1b45a0e641b9955a20aa0ad1c1f4ad86aad8afb07296d4085e349a50e90bdca::blue::BLUE", + token1Type: ADDRESSES.sui.SUI + }, + { //blue usdc + poolID: "0x4b28663453af487a81d4fb2ba7c96cccd63978b83f950d3dcf60dd88116e3e91", + parentPoolID: "0x3717c637003c4274f20cde8c4eeadbffa2bbf16d995a0fe0f7bf99c03cf52e61", + investorID: "0xb1a991064c4cbf1d7fb64a01ce8b2e3aa2f7d25b3ff8de7cabc1cb9ccc0fc12f", + token0Type: "0xe1b45a0e641b9955a20aa0ad1c1f4ad86aad8afb07296d4085e349a50e90bdca::blue::BLUE", + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //send usdc + poolID: "0xd5757d9f00db3f21a0fa38a86a5c1d52ae44828cc59f1798550e2ccf260b2a34", + parentPoolID: "0xbd5b29a952040ccd47ce2822bddd4aba3affaae9d6ccdaf65aded5528e39b837", + investorID: "0xa57b9da796a2848853de7478ec64db63213cb409bfdf182c8b20c7a64896cbcc", + token0Type: "0xb45fcfcc2cc07ce0702cc2d229621e046c906ef14d9b25e8e4d25f6e8763fef7::send::SEND", + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //wbtc sui + poolID: "0x31cc72ec8a332d5e0ecd65c8d5d778333e1c8432a8826a88a8c51eb4e7dc6fac", + parentPoolID: "0xe71aa89df60e737f1b687f8dfbd51e2a9b35706e9e5540ce9b053bd53fcb9ec3", + investorID: "0x68d23ee66a167e39513747a75dd4af3fd2b5728a4653566bf3e813f684cf748b", + token0Type: ADDRESSES.sui.WBTC, + token1Type: ADDRESSES.sui.SUI + }, + { //deep sui + poolID: "0x46de57bfaa096c674492c3892caa261cf34cc46a2e539ece91f0db3e46e3f6c3", + parentPoolID: "0x1b06371d74082856a1be71760cf49f6a377d050eb57afd017f203e89b09c89a2", + investorID: "0x92454fe9c315328efb29607c30f6fb7b5ec55c0a8d9944285075386e381bbca0", + token0Type: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP", + token1Type: ADDRESSES.sui.SUI + }, + { //stsui sui + poolID: "0xf5e643282e76af102aada38c67aae7eaec1ba2fe3301871f9fcca482893f96f2", + parentPoolID: "0x73549e0918d10727e324ebeed11ab81ab46f8fadb11078a0641f117d9097b725", + investorID: "0xe348b843a54463afe5438fa76df127b2b78bc89caa9018ba70b3c2ba043f6a1e", + token0Type: "0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI", + token1Type: ADDRESSES.sui.SUI + }, ] @@ -208,6 +278,16 @@ const ALPHAFI_NAVI_TVL_IDS = [ tokenType: ADDRESSES.sui.ETH, expo: 8 }, + { + poolID: "0x55b7ae7eb570d3d2ee89a92dd8d958794f1e39c4ee067b28655359c0a152b3aa", + tokenType: "0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS", + expo: 6 + }, + { + poolID: "0x35f7260fefe3dde7fa5b4bf1319f15554934a94c74acd4ba54161f99470c348f", + tokenType: "0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX", + expo: 9 + }, ] const ALPHAFI_NAVI_LOOP_TVL_IDS = [ { //sui vsui From dc4c51cf6634da91b01e88f7dcf6489394ae55e4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Dec 2024 22:20:34 +0100 Subject: [PATCH 1545/1768] lint fix --- projects/bucket-farm/index.js | 2 +- projects/helper/chain/utils/ton-address.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/bucket-farm/index.js b/projects/bucket-farm/index.js index 918ad6a383..32401746d4 100644 --- a/projects/bucket-farm/index.js +++ b/projects/bucket-farm/index.js @@ -31,7 +31,7 @@ const Degen_Pool_IDs = [ async function tvl(api) { const degenPools = await sui.getObjects(Degen_Pool_IDs); - for(degenPool of degenPools){ + for(let degenPool of degenPools){ const type = degenPool.type let assetType = type.slice(type.indexOf("<"), type.indexOf(">")).split(",")[1].trim() diff --git a/projects/helper/chain/utils/ton-address.js b/projects/helper/chain/utils/ton-address.js index 62720d6da4..d704c7d436 100644 --- a/projects/helper/chain/utils/ton-address.js +++ b/projects/helper/chain/utils/ton-address.js @@ -126,7 +126,7 @@ class Address { address: new Address(r.workchain, r.hashPart), }; } else { - let addr = source.replace(/\-/g, "+").replace(/_/g, "/"); // Convert from url-friendly to true base64 + let addr = source.replace(/-/g, "+").replace(/_/g, "/"); // Convert from url-friendly to true base64 let r = parseFriendlyAddress(addr); return { isBounceable: r.isBounceable, From c6f27b89f10f9ffa6c24edfd77f9af50bb8a00cd Mon Sep 17 00:00:00 2001 From: 0x69mf <155231017+0x69mf@users.noreply.github.com> Date: Fri, 20 Dec 2024 06:06:19 +0800 Subject: [PATCH 1546/1768] feat: add duckchain-new-era adapter (#12757) Co-authored-by: mfer Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/duckchain-new-era/index.js | 86 +++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 projects/duckchain-new-era/index.js diff --git a/projects/duckchain-new-era/index.js b/projects/duckchain-new-era/index.js new file mode 100644 index 0000000000..03c147ebfd --- /dev/null +++ b/projects/duckchain-new-era/index.js @@ -0,0 +1,86 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const sdk = require('@defillama/sdk'); +const { sumTokensExport } = require('../helper/sumTokens'); +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { getConfig } = require('../helper/cache'); + +const defaultOwner = '0x6b0e12Cb3D78a931b74F51D09F3D34E3047c0E49'; // meson + +const config = { + merlin: { + tokens: [ + '0xB880fd278198bd590252621d4CD071b1842E9Bcd', // M-BTC + '0x93919784C523f39CACaa98Ee0a9d96c3F32b593e' // uniBTC + ], + }, +}; + +async function addCoinfg(id, ownerTokens) { + const { result } = await getConfig('meson', 'https://relayer.meson.fi/api/v1/list'); + const { address, tokens } = result.find(c => c.id === id) ?? {}; + if (!address) return; + ownerTokens.push([tokens.map(i => i.addr ?? nullAddress).filter(i => i), address]); + return ownerTokens; +} + +Object.keys(config).forEach(chain => { + const { id = chain, owner = defaultOwner, tokens } = config[chain]; + module.exports[chain] = { + tvl: async (api) => { + const ownerTokens = []; + if (tokens) ownerTokens.push([tokens, owner]); + await addCoinfg(id, ownerTokens); + return sumTokens2({ api, ownerTokens }); + } + }; +}); + +module.exports = { + methodology: "Summary of Dukchain staking assets", + ton: { + tvl: sumTokensExport({ + tokens: [ + ADDRESSES.null, // 用于追踪原生 TON + "EQCuPm01HldiduQ55xaBF_1kaW_WAUy5DHey8suqzU_MAJOR", + "EQAvlWFDxGF2lXm67y4yzC17wYKD9A0guwPkMs1gOsM__NOT", + "EQCvxJy4eG8hyHBFsZ7eePxrRsUQSFE_jpptRAYBmcG_DOGS", + "EQB4zZusHsbU2vVTPqjhlokIOoiZhEdCMT703CWEzhTOo__X", + "EQAJ8uWd7EBqsmpSWaRdf_I-8R8-XHwh3gsNKhy-UrdrPcUo", + "EQC98_qAmNEptUtPc7W6xdHh_ZHrBUFpw5Ft_IzNU20QAJav", + "EQD-cvR0Nz6XAyRBvbhz-abTrRC6sI5tvHvvpeQraV9UAAD7", + "EQAfF5j3JMIpZlLmACv7Ub7RH7WmiVMuV4ivcgNYHvNnqHTz" + ], + owners: [ + "UQABbkaGs-mjWe6ifQ2h11GOEdGRyAPNrZi41-MK1uX92ulc", // UTONIC Ton生态所有代币 + "EQCVarr_Agtk4A8_Sn5RO2M8QH9j5WQjdoN984P-b6TBZB8Z" // UTONIC 多签 + ], + onlyWhitelistedTokens: false + }) + }, + ethereum: { + tvl: sumTokensExport({ + ownerTokens: [ + [[ADDRESSES.null], "0xb4eE432B0fbb64CC5C4bbA74427436b5347E88A4"] // meson eth + ], + }), + }, + arbitrum: { + tvl: sumTokensExport({ + owners: ["0x5E8c3F0eA1d4004F32dFaE54bca88C78D065d869"], + tokens: [ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.USDT, ADDRESSES.arbitrum.USDC_CIRCLE,ADDRESSES.null,] // meson eth usdc and usdt + }), + }, + merlin: { //meson merlin + tvl: async (api) => { + const ownerTokens = []; + const { tokens } = config.merlin; + if (tokens) ownerTokens.push([tokens, defaultOwner]); + //await addCoinfg('merlin', ownerTokens); + return sumTokens2({ api, ownerTokens }); + } + }, +}; + + +// Excluding merlin tvl as it feels inorganic +delete module.exports.merlin \ No newline at end of file From 782608f6a37a0968b1b148bd84066d0a985ff76d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 09:34:22 +0100 Subject: [PATCH 1547/1768] update yieldnest #12801 --- projects/yieldnest/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index 7c3cc6bf56..deb2d6737a 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -22,8 +22,8 @@ module.exports = { bsc: { tvl: async (api) => { const ynBNB = '0x304B5845b9114182ECb4495Be4C91a273b74B509' - const ynBnbBalance = await api.call({ abi: 'uint256:totalAssets', target: ynBNB }) - api.add(ADDRESSES.null, ynBnbBalance) + const ynBTCk = '0x78839cE14a8213779128Ee4da6D75E1326606A56' + return api.erc4626Sum({ calls: [ynBNB, ynBTCk], isOG4626: true}) } }, } From ca89dd1f8cbe11bc73d335d1a290ef42ca119a0e Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Dec 2024 09:53:46 +0100 Subject: [PATCH 1548/1768] Fix: Tezos helper, change API endpoint (#12802) --- projects/helper/chain/tezos.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/chain/tezos.js b/projects/helper/chain/tezos.js index bf912105e8..a0c60de443 100644 --- a/projects/helper/chain/tezos.js +++ b/projects/helper/chain/tezos.js @@ -3,7 +3,7 @@ const http = require('../http') const sdk = require('@defillama/sdk') const { PromisePool } = require('@supercharge/promise-pool') -const RPC_ENDPOINT = 'https://api.tzkt.io' +const RPC_ENDPOINT = 'https://api.mainnet.tzkt.io' const usdtAddressTezos = ADDRESSES.tezos.USDt const transformAddressDefault = t => t == "tezos" ? "coingecko:tezos" : 'tezos:' + t From 5c78d5507c3ee1d078937ea69ce1d76011c8d18c Mon Sep 17 00:00:00 2001 From: Astrid <165300338+astrid-nova@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:54:46 +0300 Subject: [PATCH 1549/1768] track Vader AI (#12798) Co-authored-by: astrid-nova --- projects/vaderai/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/vaderai/index.js diff --git a/projects/vaderai/index.js b/projects/vaderai/index.js new file mode 100644 index 0000000000..331d27064f --- /dev/null +++ b/projects/vaderai/index.js @@ -0,0 +1,14 @@ +const { staking } = require('../helper/staking'); + +const vaderAddress = '0x731814e491571a2e9ee3c5b1f7f3b962ee8f4870'; + +module.exports = { + base: { + tvl: () => ({}), + staking: staking( + '0x1d6bb701eecedcd53966402064ce1c5b9eddc780', + vaderAddress + ), + }, + methodology: "$VADER coins can be staked in the protocol to earn rewards.", +}; From 8d654e61cf2b39f80ff0b8fbf685c965cfcd8fa7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:27:40 +0100 Subject: [PATCH 1550/1768] track memejob #12803 --- projects/memejob/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/memejob/index.js diff --git a/projects/memejob/index.js b/projects/memejob/index.js new file mode 100644 index 0000000000..4f868c6044 --- /dev/null +++ b/projects/memejob/index.js @@ -0,0 +1,11 @@ + +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') +const MEMEJOB_CONTRACT = "0x950230ea77Dc168df543609c2349C87dea57e876"; + +module.exports = { + methodology: "TVL is represented by all HBAR held in active bonding curves within MemeJob.", + hedera: { + tvl: sumTokensExport({ owner: MEMEJOB_CONTRACT, tokens: [ADDRESSES.null] }), + }, +}; \ No newline at end of file From 3e24d591a20fb30571033af875ea5c32d83eb728 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:31:00 +0100 Subject: [PATCH 1551/1768] bugfix --- projects/duckchain-new-era/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/duckchain-new-era/index.js b/projects/duckchain-new-era/index.js index 03c147ebfd..42ab996d33 100644 --- a/projects/duckchain-new-era/index.js +++ b/projects/duckchain-new-era/index.js @@ -1,5 +1,4 @@ const ADDRESSES = require('../helper/coreAssets.json'); -const sdk = require('@defillama/sdk'); const { sumTokensExport } = require('../helper/sumTokens'); const { sumTokens2 } = require('../helper/unwrapLPs'); const { getConfig } = require('../helper/cache'); @@ -19,7 +18,7 @@ async function addCoinfg(id, ownerTokens) { const { result } = await getConfig('meson', 'https://relayer.meson.fi/api/v1/list'); const { address, tokens } = result.find(c => c.id === id) ?? {}; if (!address) return; - ownerTokens.push([tokens.map(i => i.addr ?? nullAddress).filter(i => i), address]); + ownerTokens.push([tokens.map(i => i.addr ?? ADDRESSES.null).filter(i => i), address]); return ownerTokens; } From b3f7fafa6a435a25a7e4f7d2d0a8d6dc8f9eb903 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:53:16 +0100 Subject: [PATCH 1552/1768] track stacks-sbtc --- projects/ainn-layer2/index.js | 5 +---- projects/helper/bitcoin-book/index.js | 6 ++++++ projects/stacks-sbtc/index.js | 9 +++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 projects/stacks-sbtc/index.js diff --git a/projects/ainn-layer2/index.js b/projects/ainn-layer2/index.js index e14235bbff..34e9eec375 100644 --- a/projects/ainn-layer2/index.js +++ b/projects/ainn-layer2/index.js @@ -1,4 +1,3 @@ -const sdk = require('@defillama/sdk'); const { sumTokensExport } = require('../helper/sumTokens'); const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') @@ -6,9 +5,7 @@ const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: "Staking tokens via AINN Layer2 Dataset counts as TVL.", bitcoin: { - tvl: sdk.util.sumChainTvls([ - sumTokensExport({ owners: bitcoinAddressBook.ainn }), - ]), + tvl: sumTokensExport({ owners: bitcoinAddressBook.ainn }), }, zklink: { tvl: sumTokensExport({ diff --git a/projects/helper/bitcoin-book/index.js b/projects/helper/bitcoin-book/index.js index 1d6eea7950..bd4c9be54b 100644 --- a/projects/helper/bitcoin-book/index.js +++ b/projects/helper/bitcoin-book/index.js @@ -104,8 +104,14 @@ const bitomato = [ 'bc1qgmtx3caf8rlxmzw703ga2sljv3rkkj39e4ysk9', ] +const stacksSBTC = [ + // https://docs.stacks.co/concepts/sbtc/clarity-contracts/sbtc-deposit + 'bc1pl033nz4lj7u7wz3l2k2ew3f7af4sdja8r25ernl00thflwempayswr5hvc' +] + module.exports = { ...fetchers, + stacksSBTC, bitomato, bitlayerBridge, teleswap, diff --git a/projects/stacks-sbtc/index.js b/projects/stacks-sbtc/index.js new file mode 100644 index 0000000000..d6fee86510 --- /dev/null +++ b/projects/stacks-sbtc/index.js @@ -0,0 +1,9 @@ +const { sumTokensExport } = require('../helper/sumTokens'); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + + +module.exports = { + bitcoin: { + tvl: sumTokensExport({ owners: bitcoinAddressBook.stacksSBTC }), + }, +}; From ca43ad8e0e1e2371f78cbe7ea2f0eab3710b3e26 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:07:40 +0000 Subject: [PATCH 1553/1768] add double count sbtc stakestone (#12805) --- projects/stakestone-btc/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/stakestone-btc/index.js b/projects/stakestone-btc/index.js index 9d7ce6adfb..bec2f20850 100644 --- a/projects/stakestone-btc/index.js +++ b/projects/stakestone-btc/index.js @@ -23,3 +23,4 @@ module.exports = { tvl: ethTvl, } } +module.exports.doublecounted = true; \ No newline at end of file From 4335153bda84ec49333815e5596cdde4167bc9fe Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:45:43 +0100 Subject: [PATCH 1554/1768] Fix: Limitless-exchange (#12804) --- projects/limitless-exchange/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/limitless-exchange/index.js b/projects/limitless-exchange/index.js index 265a506c33..c4eb1608ec 100644 --- a/projects/limitless-exchange/index.js +++ b/projects/limitless-exchange/index.js @@ -1,14 +1,18 @@ const { getLogs2 } = require('../helper/cache/getLogs') + const eventAbi = "event FixedProductMarketMakerCreation(address indexed creator, address fixedProductMarketMaker, address indexed conditionalTokens, address indexed collateralToken, bytes32[] conditionIds, uint256 fee)"; + const config = [ { factory: "0x8E50578ACa3C5E2Ef5ed2aA4bd66429B5e44C16E", resolver: "0x15A61459d65D89A25a9e91e0dc9FC69598791505", fromBlock: 13547870 }, { factory: "0xc397D5d70cb3B56B26dd5C2824d49a96c4dabF50", resolver: "0xc9c98965297bc527861c898329ee280632b76e18", fromBlock: 13547845 }, ]; +const blacklistedTokens = ['0xd7788ffc73c9ae39ce24dfc1098b375792dd42ac'] + const getMarkets = async ({ factory, resolver, fromBlock }, api) => { const logs = await getLogs2({ api, target: factory, eventAbi, fromBlock }); const tokens = logs.map(i => i.collateralToken) - return api.sumTokens({ owner: resolver, tokens }); + return api.sumTokens({ owner: resolver, tokens, blacklistedTokens }); }; const tvl = async (api) => { From 79b376a4db422c7ed8430416e9752c7a1c53eff3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:16:46 +0100 Subject: [PATCH 1555/1768] Kopi (#12806) Co-authored-by: Andrew-kerslake --- projects/helper/chain/cosmos.js | 3 ++- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 14 +++++++++++++- projects/kopi/index.js | 16 ++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 projects/kopi/index.js diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index a315e9bb12..d144e1f1a8 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -43,7 +43,8 @@ const endPoints = { nibiru: "https://lcd.nibiru.fi", bostrom: "https://lcd.bostrom.cybernode.ai", joltify: "https://lcd.joltify.io", - noble: "https://noble-api.polkachu.com" + kopi: "https://rest.kopi.money", + noble: "https://noble-api.polkachu.com", }; const chainSubpaths = { diff --git a/projects/helper/chains.json b/projects/helper/chains.json index c353ff3087..a704317e89 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -179,6 +179,7 @@ "kinto", "kintsugi", "klaytn", + "kopi", "kroma", "kujira", "kusama", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 349ea89ade..f698d9733b 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -18,7 +18,10 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) // orbit brige: https://bridge.orbitchain.io/open/v1/api/monitor/rawTokenList -const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru'] +const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru', + 'kopi', + +] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', 'eclipse', ] @@ -35,6 +38,9 @@ const ibcMappings = { // Sample Code // 'ibc/CA1261224952DF089EFD363D8DBB30A8AB6D8CD181E60EE9E68E432F8DE14FE3': { coingeckoId: 'inter-stable-token', decimals: 6, }, // 'ibc/5A76568E079A31FA12165E4559BA9F1E9D4C97F9C2060B538C84DCD503815E30': { coingeckoId: 'injective-protocol', decimals: 18, }, + 'ibc:DE63D8AC34B752FB7D4CAA7594145EDE1C9FC256AC6D4043D0F12310EB8FC255': { coingeckoId: 'injective-protocol', decimals: 18, }, + 'ibc:25418646C017D377ADF3202FF1E43590D0DAE3346E594E8D78176A139A928F88': { coingeckoId: 'cosmos', decimals: 6, }, + 'ibc:D8A36AE90F20FE4843A8D249B1BCF0CCDDE35C4B605C8DED57BED20C639162D0': { coingeckoId: 'tether', decimals: 6, }, } const fixBalancesTokens = { @@ -43,6 +49,12 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + kopi: { + 'uasusdc': { coingeckoId: 'usd-coin', decimals: 6 }, + 'ucusdc': { coingeckoId: 'usd-coin', decimals: 6 }, + 'uasusdtinj': { coingeckoId: 'tether', decimals: 6 }, + 'ucusdtinj': { coingeckoId: 'tether', decimals: 6 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/kopi/index.js b/projects/kopi/index.js new file mode 100644 index 0000000000..dc7e08916a --- /dev/null +++ b/projects/kopi/index.js @@ -0,0 +1,16 @@ +const { sumTokens } = require('../helper/chain/cosmos'); + +async function tvl(api) { + return sumTokens({ api, owner: 'kopi14t4jnhmjejj08x5w8f4t0r3lv820gvh85xw8np', blacklistedTokens: [ + // excluding projects own tokens + 'ukopi', + 'ukusd', + ]}) +} + +module.exports = { + kopi: { + tvl + } +}; + From 34aadf0f8891013efbaf5b8e334b64b5dfa933a7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:32:17 +0100 Subject: [PATCH 1556/1768] track zivoe #12792 --- projects/zivoe/index.js | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 projects/zivoe/index.js diff --git a/projects/zivoe/index.js b/projects/zivoe/index.js new file mode 100644 index 0000000000..27b631ea5c --- /dev/null +++ b/projects/zivoe/index.js @@ -0,0 +1,49 @@ +const { getLogs2 } = require("../helper/cache/getLogs"); + +const LOANS_FROM_BLOCK = 20973423; + +// On-Chain Credit Locker +const OCC_USDC = "0xfAb4e880467e26ED46F00c669C28fEaC58262698"; + +// TVL Owners +const DAO = "0xB65a66621D7dE34afec9b9AC0755133051550dD7"; +const YDL = "0xfB7920B55887840643e20952f22Eb18dDC474B2B"; +const ST_STT = "0x0D45c292baCdC47CE850E4c83a2FA2e8509DEd5D"; +const ST_JTT = "0xcacdB1A5a11F824E02De4CA6E7b2D12BB278aA7c"; + +// TVL Asset +const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; + +async function borrowed(api) { + const loansIds = await getLogs2({ + api, + target: OCC_USDC, + eventAbi: "event OfferAccepted(uint256 indexed id, uint256 principal, address indexed borrower, uint256 paymentDueBy)", + fromBlock: LOANS_FROM_BLOCK, + customCacheFunction: ({ cache, logs }) => { + if (!cache.logs) cache.logs = [] + cache.logs.push(...logs.map(i => i.id.toString())) + cache.logs = [...new Set(cache.logs)] + return cache + }, + }); + + const loans = await api.multiCall({ + abi: "function loans(uint256) view returns (address borrower, uint256 principalOwed, uint256 APR, uint256 APRLateFee, uint256 paymentDueBy, uint256 paymentsRemaining, uint256 term, uint256 paymentInterval, uint256 offerExpiry, uint256 gracePeriod, int8 paymentSchedule, uint8 state)", + target: OCC_USDC, + calls: loansIds, + }); + const owedAmounts = loans.map(({ principalOwed }) => principalOwed); + + const occAsset = await api.call({ abi: "address:stablecoin", target: OCC_USDC }); + const tokens = Array(owedAmounts.length).fill(occAsset); + + api.addTokens(tokens, owedAmounts); +} + +module.exports = { + ethereum: { + tvl: () => ({}), + borrowed, + }, +}; From ba0dbe227f7bb09ef4314800fbda39c5e9437046 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:09:05 +0100 Subject: [PATCH 1557/1768] track swell chain --- package-lock.json | 6 +++--- projects/ambient-finance/index.js | 7 +++++-- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 22 +++++++++++++++++++++- projects/swellchain/index.js | 13 +++++++++++++ projects/tempest-finance/chains.js | 1 + projects/tempest-finance/index.js | 20 ++++++++++---------- 7 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 projects/swellchain/index.js diff --git a/package-lock.json b/package-lock.json index 177f1400cc..bb1274413d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.103", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.103.tgz", - "integrity": "sha512-wJSKpnYFzFZoK99jm3qDm6npZkb448Fw/E85VqcVBnvTFiYFyzU03J4KwZvMKO1YnWjegm5wOT9Hs4fMbvp/Dg==", + "version": "5.0.104", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.104.tgz", + "integrity": "sha512-5+H3OSiDNB5Lo9wnn6wojrFCLOcW5UZzb9o6M6xIddav+hlhHMQE9vEJdwoE+/BgX4ljbOMLbkyndCLvs3sETQ==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/ambient-finance/index.js b/projects/ambient-finance/index.js index 4739b3da09..c7f61e7190 100644 --- a/projects/ambient-finance/index.js +++ b/projects/ambient-finance/index.js @@ -7,16 +7,19 @@ const vault = { scroll: "0xaaaaAAAACB71BF2C8CaE522EA5fa455571A74106", blast: "0xaAaaaAAAFfe404EE9433EEf0094b6382D81fb958", ethereum: "0xAaAaAAAaA24eEeb8d57D431224f73832bC34f688", - canto: "0x9290c893ce949fe13ef3355660d07de0fb793618" + canto: "0x9290c893ce949fe13ef3355660d07de0fb793618", + swellchain: "0xaAAaAaaa82812F0a1f274016514ba2cA933bF24D", } const subgraphs = { scroll: 'https://ambindexer.net/scroll-gcgo/pool_list?chainId=0x82750', blast: 'https://ambindexer.net/blast-gcgo/pool_list?chainId=0x13e31', canto: "https://ambient-graphcache.fly.dev/gcgo/pool_list?chainId=0x1e14", - ethereum: sdk.graph.modifyEndpoint('DyHaLYK1keqcv3YD3VczKGYvxQGfGgV6bGTbZLMj5xME') + ethereum: sdk.graph.modifyEndpoint('DyHaLYK1keqcv3YD3VczKGYvxQGfGgV6bGTbZLMj5xME'), + swellchain: 'https://ambindexer.net/swell-gcgo/pool_list?chainId=0x783', } + async function tvl(api) { let pools if (subgraphs[api.chain].includes("gcgo")) { diff --git a/projects/helper/chains.json b/projects/helper/chains.json index a704317e89..ff9de7a5b4 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -308,6 +308,7 @@ "sonic", "sophon", "sora", + "swellchain", "stacks", "stafi", "staking", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index f698d9733b..3cc899face 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -54,7 +54,27 @@ const fixBalancesTokens = { 'ucusdc': { coingeckoId: 'usd-coin', decimals: 6 }, 'uasusdtinj': { coingeckoId: 'tether', decimals: 6 }, 'ucusdtinj': { coingeckoId: 'tether', decimals: 6 }, - } + }, + swellchain: { + [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, + [ADDRESSES.base.WETH]: { coingeckoId: 'ethereum', decimals: 18 }, + "0xb5668713E9BA8bC96f97D691663E70b54CE90b0A": { "coingeckoId": "wrapped-bitcoin-universal", "decimals": 18 }, + "0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3": { "coingeckoId": "lorenzo-stbtc", "decimals": 18 }, + "0x2826D136F5630adA89C1678b64A61620Aab77Aea": { "coingeckoId": "swell-network", "decimals": 18 }, + "0x1cf7b5f266A0F39d6f9408B90340E3E71dF8BF7B": { "coingeckoId": "swell-restaked-btc", "decimals": 8 }, + "0xb89c6ED617f5F46175E41551350725A09110bbCE": { "coingeckoId": "tether", "decimals": 6 }, + "0x99a38322cAF878Ef55AE4d0Eda535535eF8C7960": { "coingeckoId": "usd-coin", "decimals": 6 }, + "0xA6cB988942610f6731e664379D15fFcfBf282b44": { "coingeckoId": "wrapped-eeth", "decimals": 18 }, + "0x18d33689AE5d02649a859A1CF16c9f0563975258": { "coingeckoId": "restaked-swell-eth", "decimals": 18 }, + "0x09341022ea237a4DB1644DE7CCf8FA0e489D85B7": { "coingeckoId": "sweth", "decimals": 18 }, + "0x9cb41CD74D01ae4b4f640EC40f7A60cA1bCF83E7": { "coingeckoId": "renzo-restaked-lst", "decimals": 18 }, + "0x2416092f143378750bb29b79eD961ab195CcEea5": { "coingeckoId": "renzo-restaked-eth", "decimals": 18 }, + "0xc3eACf0612346366Db554C991D7858716db09f58": { "coingeckoId": "kelp-dao-restaked-eth", "decimals": 18 }, + "0x7c98E0779EB5924b3ba8cE3B17648539ed5b0Ecc": { "coingeckoId": "wrapped-steth", "decimals": 18 }, + "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34": { "coingeckoId": "ethena-usde", "decimals": 18 }, + "0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2": { "coingeckoId": "ethena-staked-usde", "decimals": 18 }, + "0x58538e6A46E07434d7E7375Bc268D3cb839C0133": { "coingeckoId": "ethena", "decimals": 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/swellchain/index.js b/projects/swellchain/index.js new file mode 100644 index 0000000000..4dc1ccbf5b --- /dev/null +++ b/projects/swellchain/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owners: [ + "0x7aA4960908B13D104bf056B23E2C76B43c5AACc8", + "0x758E0EE66102816F5C3Ec9ECc1188860fbb87812", + ], + fetchCoValentTokens: true, + }), + } +}; diff --git a/projects/tempest-finance/chains.js b/projects/tempest-finance/chains.js index fefbc9aee6..4d9f171e4d 100644 --- a/projects/tempest-finance/chains.js +++ b/projects/tempest-finance/chains.js @@ -7,4 +7,5 @@ module.exports = { base: 8453, arbitrum: 42161, scroll: 534352, + swellchain: 1923, } \ No newline at end of file diff --git a/projects/tempest-finance/index.js b/projects/tempest-finance/index.js index 915b98dbf0..330e8fb5c7 100644 --- a/projects/tempest-finance/index.js +++ b/projects/tempest-finance/index.js @@ -1,20 +1,20 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); const chains = require("./chains"); const axios = require("axios"); async function tvl(api) { - const response = await axios.get(`https://protocol-service-api.tempestfinance.xyz/api/v1/vaults?chainId=${chains[api.chain]}`) - const vaults = response.data.data.vaults; + const response = await axios.get(`https://protocol-service-api.tempestfinance.xyz/api/v1/vaults?chainId=${chains[api.chain]}`) + const vaults = response.data.data.vaults; - const tokens = vaults.map(vault => vault.mainAsset); - const balances = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults.map(vault => vault.address) }); + const tokens = vaults.map(vault => vault.mainAsset); + const balances = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults.map(vault => vault.address) }); - api.addTokens(tokens, balances) + api.addTokens(tokens, balances) + return sumTokens2({ api }) } Object.keys(chains).forEach(chain => { - module.exports[chain] = { - tvl: async (api) => { - return await tvl(api) - } - } + module.exports[chain] = { + tvl + } }) From c9132cc53fd55cb3c7884149ff1819e2af96adeb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:20:27 +0100 Subject: [PATCH 1558/1768] track kernel dao #12700 --- projects/kernel-dao/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/kernel-dao/index.js diff --git a/projects/kernel-dao/index.js b/projects/kernel-dao/index.js new file mode 100644 index 0000000000..43ca55a118 --- /dev/null +++ b/projects/kernel-dao/index.js @@ -0,0 +1,21 @@ +/** + * Kernel DAO contracts + * + * @see https://github.com/Kelp-DAO/kernel-smart-contracts-private/blob/develop/doc/contract-address/Mainnet.md + */ +const ASSET_REGISTRY = '0xd0B91Fc0a323bbb726faAF8867CdB1cA98c44ABB'; + + +async function tvl(api) { + const tokens = await api.call({ abi: 'address[]:getAssets', target: ASSET_REGISTRY}) + const vaults = await api.multiCall({ abi: 'function getVault(address) view returns (address)', calls: tokens, target: ASSET_REGISTRY}) + return api.sumTokens({ tokensAndOwners2: [tokens, vaults]}) +} + +module.exports = { + methodology: 'Calculates total TVL.', + start: 1733817000, + bsc: { + tvl, + } +}; From fed136930a283c12df10b123b6ed4b84c5cc729f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:07:44 +0100 Subject: [PATCH 1559/1768] track panoptic #12770 --- projects/panoptic/index.js | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 projects/panoptic/index.js diff --git a/projects/panoptic/index.js b/projects/panoptic/index.js new file mode 100644 index 0000000000..494beaa0a5 --- /dev/null +++ b/projects/panoptic/index.js @@ -0,0 +1,77 @@ +const { getLogs2 } = require('../helper/cache/getLogs') +const { cachedGraphQuery } = require("../helper/cache"); +const { addUniV3LikePosition } = require('../helper/unwrapLPs'); + +const FACTORY = '0x000000000000010a1DEc6c46371A28A071F8bb01' +const SFPM = '0x0000000000000DEdEDdD16227aA3D836C5753194' + + +const SFPMChunksQuery = ` +query SFPMChunks($lastId: ID, $block: Int) { + chunks(first: 1000 + block: {number: $block} + where: {and: [{id_gt: $lastId}, { netLiquidity_gt: 100}]} + ) { + netLiquidity + tickLower + tickUpper + id + pool { id } + } +}` + +const abi = { + "PoolDeployed": "event PoolDeployed(address indexed poolAddress, address indexed uniswapPool, address collateralTracker0, address collateralTracker1)", + "PoolInitialized": "event PoolInitialized(address indexed uniswapPool, uint64 poolId, int24 minEnforcedTick, int24 maxEnforcedTick)", +} + +const config = { + ethereum: { + graphUrl: 'https://api.goldsky.com/api/public/project_cl9gc21q105380hxuh8ks53k3/subgraphs/panoptic-subgraph-mainnet/1.0.2/gn', + startBlock: 21389983, + safeBlockLimit: 50 + } +} + + +async function tvl(api) { + const chain = api.chain + const { startBlock, graphUrl, safeBlockLimit } = config[chain] + + const poolDeployedLogs = await getLogs2({ api, target: FACTORY, fromBlock: startBlock, eventAbi: abi.PoolDeployed, }) + const uniPools = poolDeployedLogs.map(log => log.uniswapPool.toLowerCase()) + const token0s = await api.multiCall({ abi: 'address:token0', calls: uniPools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: uniPools }) + const slot0s = await api.multiCall({ abi: 'function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)', calls: uniPools }) + + const poolData = {} + const ownerTokens = [] + uniPools.forEach((pool, i) => { + // to compte tokens locked in panoptic pools + ownerTokens.push([[token0s[i], token1s[i]], poolDeployedLogs[i].poolAddress]) + + // to compute value locked in uni v3 pools + poolData[pool] = { + token0: token0s[i], + token1: token1s[i], + tick: slot0s[i].tick, + } + }) + + await api.sumTokens({ ownerTokens }) + + const chunks = await cachedGraphQuery(`panoptic/sfpm-chunks`, graphUrl, SFPMChunksQuery, { api, useBlock: true, fetchById: true, safeBlockLimit, }) + chunks.forEach(chunk => { + const { token0, token1, tick, } = poolData[chunk.pool.id.toLowerCase()] ?? {} + if (!tick) return; + addUniV3LikePosition({ api, token0, token1, tick, liquidity: chunk.netLiquidity, tickUpper: chunk.tickUpper, tickLower: chunk.tickLower, }) + }) +} + +module.exports = { + ethereum: { + tvl, + methodology: 'This adapter counts tokens held by all PanopticPool contracts created by the PanopticFactory, as well as the token composition of all Uniswap liquidity held by the SemiFungiblePositionManager (which is used by every PanopticPool to manage liquidity).', + start: 1734049991, + }, +} \ No newline at end of file From e97dc3c04dba8d07de990d9e8102cede72640079 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:12:14 +0100 Subject: [PATCH 1560/1768] Fix: Betfolio (#12807) --- projects/betfolio/index.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/projects/betfolio/index.js b/projects/betfolio/index.js index e321d49224..be944728a7 100644 --- a/projects/betfolio/index.js +++ b/projects/betfolio/index.js @@ -1,23 +1,23 @@ const { getConfig } = require('../helper/cache') const ADDRESSES = require('../helper/coreAssets.json') -const config = { - polygon: ADDRESSES.polygon.USDC_CIRCLE, -} +const USDC = ADDRESSES.polygon.USDC_CIRCLE -async function getContracts() { - const [list0Res, list1Res] = await Promise.all([ +const tvl = async (api) => { + const [list0Res,list1Res] = await Promise.all([ getConfig('betfolio', 'https://api.betfolio.co/api/v1/user/predictionList?limit=1000&duration=&type='), getConfig('betfolioSoloPrediction', 'https://api.betfolio.co/api/v1/user/getSoloPredictions?limit=1000&type=All&theme=All&solo_type=All') - ]); - return [...list0Res.data.list, ...list1Res.data.list].map(i => i.contract_address) + ]) + + const owners = [...list0Res.data.list, ...list1Res.data.list].map( + (i) => i.contract_address + .includes('_') ? i.contract_address + .split('_')[0] : i.contract_address + ); + + return api.sumTokens({ owners, tokens: [USDC] }) } -Object.keys(config).forEach(chain => { - module.exports[chain] = { - tvl: async (api) => { - const owners = await getContracts(api) - return api.sumTokens({ owners, tokens: [config[chain]] }) - } - } -}) \ No newline at end of file +module.exports = { + polygon: { tvl } +} \ No newline at end of file From 66b82cce8d0a3f4621d2607fa7851b284a53f966 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:15:25 +0100 Subject: [PATCH 1561/1768] track zeebu #12684 --- projects/zeebu/index.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 projects/zeebu/index.js diff --git a/projects/zeebu/index.js b/projects/zeebu/index.js new file mode 100644 index 0000000000..4a7ed172a7 --- /dev/null +++ b/projects/zeebu/index.js @@ -0,0 +1,21 @@ +const { staking } = require('../helper/staking') + +const VOTING_ESCROW_ADDRESSES = { + ethereum: '0x8e76Cdf3b14c540aB54aFa7f8492AC1d16Ecfb35', + base: '0xcf08d1ec5d8e566d95299399307f75f98d6aea03', + bsc: '0xd3e8cD2eDbf252860E02ffb245fD654b1ab30f30', +}; + +const ZBU_ADDRESSES = { + ethereum: '0xe77f6aCD24185e149e329C1C0F479201b9Ec2f4B', + base: '0x2C8C89C442436CC6C0a77943E09c8Daf49Da3161', + bsc: '0x4D3dc895a9EDb234DfA3e303A196c009dC918f84', +}; + + +Object.keys(VOTING_ESCROW_ADDRESSES).forEach(chain => { + module.exports[chain] = { + tvl: () => ({}), + staking: staking(VOTING_ESCROW_ADDRESSES[chain], ZBU_ADDRESSES[chain]) + } +}) \ No newline at end of file From fa50f60c5e3d43e3a707c4776d510123de5011da Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:46:56 +0100 Subject: [PATCH 1562/1768] track jeth #12597 --- projects/jbtc/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/jbtc/index.js b/projects/jbtc/index.js index bc1d995856..9b66d22e76 100644 --- a/projects/jbtc/index.js +++ b/projects/jbtc/index.js @@ -1,9 +1,12 @@ -const { sumTokensExport } = require('../helper/sumTokens') +const { sumTokensExport, nullAddress, } = require('../helper/sumTokens') const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') module.exports = { methodology: 'Total amount of BTC locked in Bitcoin network on wallet bc1qmukuv7j57umsd5tgg9fw88eqap57rzphkfckyp', bitcoin: { tvl: sumTokensExport({ owner: bitcoinAddressBook.jbtc }), - } + }, + ethereum: { + tvl: sumTokensExport({ owners: ['0x7e90Ef7D172843dB68e42FC5fAA8CB7C1803Dcfa'], tokens: [nullAddress] }), + }, } From 57ee4d1ff9f3c72c3757aefea2ff7c9a1fea6062 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:13:40 +0100 Subject: [PATCH 1563/1768] Fix: Ottopia (#12809) --- projects/ottopia/index.js | 44 ++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/projects/ottopia/index.js b/projects/ottopia/index.js index f0bf14740d..d64ddc6c0e 100644 --- a/projects/ottopia/index.js +++ b/projects/ottopia/index.js @@ -1,37 +1,33 @@ const sdk = require("@defillama/sdk"); -const { GraphQLClient, gql } = require("graphql-request"); +const { request, gql } = require("graphql-request"); const { staking } = require("../helper/staking"); const CLAM = "0xC250e9987A032ACAC293d838726C511E6E1C029d"; const PearlBank = "0x845EB7730a8D37e8D190Fb8bb9c582038331B48a"; -async function tvl({timestamp}, block, chainBlocks) { - let endpoint = sdk.graph.modifyEndpoint('CejrrsnSQAxHJBpkgiBrLHQZ7h2MkK9QArM8bJvN9GuQ'); - let graphQLClient = new GraphQLClient(endpoint); - let query = gql` - query tvl($start: BigInt!, $end: BigInt!) { - protocolMetrics( - where: { timestamp_gte: $start, timestamp_lt: $end } - orderBy: timestamp - orderDirection: desc - first: 1 - ) { - treasuryMarketValue - timestamp - } +const endpoint = sdk.graph.modifyEndpoint('CejrrsnSQAxHJBpkgiBrLHQZ7h2MkK9QArM8bJvN9GuQ') + +const query = gql` + query tvl { + protocolMetrics( + first: 1 + orderBy: timestamp + orderDirection: desc + ) { + treasuryMarketValue + timestamp } - `; - const results = await graphQLClient.request(query, { - start: timestamp - 2 * 60 * 60 * 1000, - end: timestamp, - }) - return { - usd: parseFloat(results.protocolMetrics[0].treasuryMarketValue), - }; + } +`; + +async function tvl(api) { + const results = await request(endpoint, query) + return api.addUSDValue(parseFloat(results.protocolMetrics[0].treasuryMarketValue)) } module.exports = { - methodology: "This adapter uses otterclam's subgraph to fetch tvl data.", + deadFrom: '2024-08-14', + methodology: "This adapter uses otterclam's subgraph to fetch tvl data.", polygon: { tvl, staking: staking(PearlBank, CLAM), From 1f41f9f3648c5546fc97b9b07546f5bfb61d8d5d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:44:26 +0100 Subject: [PATCH 1564/1768] Add b14g adapter and refactor codebase (#12810) Co-authored-by: nguyenquangthang1997 Co-authored-by: thangnq <31512662+nguyenquangthang1997@users.noreply.github.com> --- projects/b14g/index.js | 27 +++++++++++++++ projects/helper/bitcoin-book/fetchers.js | 43 ++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 projects/b14g/index.js diff --git a/projects/b14g/index.js b/projects/b14g/index.js new file mode 100644 index 0000000000..eee96df07d --- /dev/null +++ b/projects/b14g/index.js @@ -0,0 +1,27 @@ +const { getLogs2 } = require("../helper/cache/getLogs"); +const { sumTokens } = require("../helper/chain/bitcoin"); +const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') + +module.exports = { + core: { + tvl: async function tvl(api) { + const logs = await getLogs2({ + api, + target: "0x04EA61C431F7934d51fEd2aCb2c5F942213f8967", + eventAbi: 'event CreateRewardReceiver(address indexed from, address indexed rewardReceiver, uint256 portion, uint256 time)', + fromBlock: 19942300, + }) + const receiverRewards = logs.map(i => i.rewardReceiver) + const coreStakeAmounts = await api.multiCall({ abi: 'uint256:totalCoreStake', calls: receiverRewards }) + api.addGasToken(coreStakeAmounts) + } + }, + bitcoin: { + tvl: async () => { + let owners = await bitcoinAddressBook.b14g() + return sumTokens({ owners }) + } + } +} + + diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index 185aa59908..4ec6e415ea 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -1,4 +1,4 @@ -const { getConfig } = require('../cache') +const { getConfig, getCache, setCache, } = require('../cache') const axios = require('axios'); const { getEnv } = require('../env') const { get } = require('../http') @@ -10,7 +10,7 @@ module.exports = { btcfi_cdp: async () => { const target = "0x0000000000000000000000000000000000000100"; const api = new sdk.ChainApi({ chain: 'bfc' }) - const round = await api.call({ abi: 'uint32:current_round', target}) + const round = await api.call({ abi: 'uint32:current_round', target }) return api.call({ abi: 'function vault_addresses(uint32 pool_round) view returns (string[])', target, params: round }) }, bedrock: async () => { @@ -48,6 +48,45 @@ module.exports = { userInfos.forEach(i => staticAddresses.push(i.depositAddress)) return staticAddresses }, + + b14g: async () => { + + return getConfig('b14g/bit-addresses', undefined, { + fetcher: async () => { + const btcTxHashLockApi = 'https://api.b14g.xyz/restake/marketplace/defillama/btc-tx-hash' + const { data: { result } } = await get(btcTxHashLockApi) + const hashes = result.map(r => r.txHash) + const hashMap = await getCache('b14g/hash-map', 'core',) ?? {} + for (const hash of hashes) { + if (hashMap[hash]) continue; + const addresses = [] + const tx = await get(`https://mempool.space/api/tx/${reserveBytes(hash.slice(2))}`) + let vinAddress = tx.vin.map(el => el.prevout.scriptpubkey_address); + tx.vout.forEach(el => { + if (el.scriptpubkey_type !== "op_return" && !vinAddress.includes(el.scriptpubkey_address)) { + addresses.push(el.scriptpubkey_address) + } + }) + hashMap[hash] = addresses + } + await setCache('b14g/hash-map', 'core', hashMap) + return [...new Set(Object.values(hashMap).flat())] + } + }) + + function reserveBytes(txHashTemp) { + let txHash = '' + if (txHashTemp.length % 2 === 1) { + txHashTemp = '0' + txHashTemp + } + txHashTemp = txHashTemp.split('').reverse().join('') + for (let i = 0; i < txHashTemp.length - 1; i += 2) { + txHash += txHashTemp[i + 1] + txHashTemp[i] + } + return txHash + } + }, + lombard: async () => { const API_URL = 'https://mainnet.prod.lombard.finance/api/v1/addresses' const BATCH_SIZE = 1000 From 1282304fc173f737630ead0d82af94c52be7a841 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:21:25 +0100 Subject: [PATCH 1565/1768] Track goldsand #12512 --- projects/goldsand/index.js | 55 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 projects/goldsand/index.js diff --git a/projects/goldsand/index.js b/projects/goldsand/index.js new file mode 100644 index 0000000000..eaa498d555 --- /dev/null +++ b/projects/goldsand/index.js @@ -0,0 +1,55 @@ +const { getLogs2 } = require("../helper/cache/getLogs"); +const { nullAddress } = require("../helper/tokenMapping"); + +function customCacheFunction({ cache, logs }) { + if (!cache.logs) cache.logs = [] + let sum = cache.logs[0] ?? 0 + sum = logs.reduce((acc, curr) => acc + Number(curr.amount), sum) + cache.logs = [sum] + return cache +} + +module.exports = { + methodology: 'TVL is the sum of deposits minus the sum of withdrawals. Since there is no liquid staking token (yet) and deposited ETH greater than 32 is automatically staked in the beacon chain, the contract balance itself is not the TVL.', + hallmarks: [ + [1732231247, "Privately staked funds deposited to contract."], + ], + timetravel: false, + ethereum: { + tvl: async (api) => { + // Get Funded events + const [fundedLogs] = await getLogs2({ + api, + target: "0x6659423929E1a00119fc3F79C8e4F443cc6fd36f", + extraKey: 'Funded', + eventAbi: "event Funded (address indexed funder, uint256 indexed amount)", + fromBlock: 20966151, + customCacheFunction, + }) + + // Get FundedOnBehalf events + const [fundedOnBehalfLogs] = await getLogs2({ + api, + target: '0x6659423929E1a00119fc3F79C8e4F443cc6fd36f', + extraKey: 'FundedOnBehalf', + eventAbi: 'event FundedOnBehalf(address funder, address funderAccountAddress, uint256 amount)', + fromBlock: 20966151, + customCacheFunction, + }) + + // Get ETHWithdrawnForUser events + const [withdrawnForUserLogs] = await getLogs2({ + api, + target: '0x6659423929E1a00119fc3F79C8e4F443cc6fd36f', + extraKey: 'ETHWithdrawnForUser', + eventAbi: 'event ETHWithdrawnForUser(address recipient, address requestedBy, uint256 amount)', + fromBlock: 20966151, + customCacheFunction, + }) + api.addGasToken((fundedLogs + fundedOnBehalfLogs - withdrawnForUserLogs).toString()) + + // The withdrawl vault holds validator rewards until withdrawn. + return api.sumTokens({ owner: '0x22B35d437b3999F5C357C176adEeC1b8b0F35C13', tokens: [nullAddress] }) + }, + }, +} From c722970512ae00034b5ee9fb8ef56cc45b91c7ab Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:01:28 +0100 Subject: [PATCH 1566/1768] track hackenAI #12369 --- projects/hackenai/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/hackenai/index.js diff --git a/projects/hackenai/index.js b/projects/hackenai/index.js new file mode 100644 index 0000000000..86e2b6fde4 --- /dev/null +++ b/projects/hackenai/index.js @@ -0,0 +1,16 @@ +const { getConfig } = require('../helper/cache') + +const HAI_base = '0x73e2a6320314883ff8cc08b53f1460a5f4c47f2c'.toLowerCase() + +const staking = async (api) => { + const pools = await getConfig('hackenAI', 'https://api.atomica.org/srm-production-v2/v2/pool/list') + const owners = pools.filter(pool => pool.chainId === api.chainId && pool.capitalToken?.address.toLowerCase() === HAI_base).map(pool => pool.id) + return api.sumTokens({ owners, token: HAI_base }) +} + +module.exports = { + base: { + tvl: () => ({}), staking, + }, + methodology: 'We count the HAI staked in the Flash Pools contracts' +} \ No newline at end of file From 93f39f872ba96b6eb9d1983bff3b99abd5181ed5 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 20 Dec 2024 17:55:08 +0000 Subject: [PATCH 1567/1768] remove skem token --- projects/uniswap/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index cc57513de3..a146cf3d62 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -17,7 +17,7 @@ const blacklists = { base: ['0xb17d69c91135516b0256c67e8bd32cd238b56161'], ethereum: ['0xa850478adaace4c08fc61de44d8cf3b64f359bec', '0x055284a4ca6532ecc219ac06b577d540c686669d', '0x8c0411f2ad5470a66cb2e9c64536cfb8dcd54d51', '0x277667eb3e34f134adf870be9550e9f323d0dc24', '0x4c83a7f819a5c37d64b4c5a2f8238ea082fa1f4e', '0x290a6a7460b308ee3f19023d2d00de604bcf5b42', '0x4b5ab61593a2401b1075b90c04cbcdd3f87ce011', '0x582d23c7ec6b59afd041a522ff64ff081e8c0d2d', '0x1f98431c8ad98523631ae4a59f267346ea31f984', '0xaf44e10ed87d90f28bff2d1fbef1f64b090f5ebb', '0xdfef6416ea3e6ce587ed42aa7cb2e586362cbbfa', '0x7e9c15c43f0d6c4a12e6bdff7c7d55d0f80e3e23', '0x1111111becab3c8866712ebf23fc4741010b8dce', '0x77777777b79f2fa437bf526169f98aa0c884c4b7', '0x630d98424efe0ea27fb1b3ab7741907dffeaad78'], arbitrum: ['0xd4d2f4110878a33ea5b97f0665e518253446161a', '0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1',], - polygon: ['0x8d52c2d70a7c28a9daac2ff12ad9bfbf041cd318', '0x1f98431c8ad98523631ae4a59f267346ea31f984', '0xd5302a8ead77b85ea3326b45f4714e0b3432b233', '0xc951ab482ff11d8df636742e1f1c3fc8037427a9',], + polygon: ['0x8d52c2d70a7c28a9daac2ff12ad9bfbf041cd318', '0x1f98431c8ad98523631ae4a59f267346ea31f984', '0xd5302a8ead77b85ea3326b45f4714e0b3432b233', '0xc951ab482ff11d8df636742e1f1c3fc8037427a9', '0xbF7970D56a150cD0b60BD08388A4A75a27777777'], } function v3TvlPaged(chain) { From 3eb0929690b0baac21a8c99adbd00408e5fc70c5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 22:08:56 +0100 Subject: [PATCH 1568/1768] track elys #12731 --- projects/elys-dex/index.js | 22 ++++++++++++++++++++++ projects/helper/chain/cosmos.js | 1 + projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 6 +++++- 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 projects/elys-dex/index.js diff --git a/projects/elys-dex/index.js b/projects/elys-dex/index.js new file mode 100644 index 0000000000..e8ede9cab0 --- /dev/null +++ b/projects/elys-dex/index.js @@ -0,0 +1,22 @@ +const { get } = require('../helper/http') +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(api) { + let key = '' + const pools = [] + do { + const { pagination: { next_key }, pool } = await get('https://api.elys.network/elys-network/elys/amm/pool?pagination.count_total=true&pagination.per_page=1000&pagination.key=' + key) + key = next_key + pools.push(...pool) + } while (key) + pools.forEach(pool => { + pool.pool_assets.forEach(({ token: { denom, amount } }) => api.add(denom, amount)) + }) + + return sumTokens2({ api }) +} + + +module.exports = { + elys: { tvl, } +} \ No newline at end of file diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index d144e1f1a8..e625c8edba 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -45,6 +45,7 @@ const endPoints = { joltify: "https://lcd.joltify.io", kopi: "https://rest.kopi.money", noble: "https://noble-api.polkachu.com", + elys: "https://api.elys.network", // https://api.elys.network/#/Query/ElysAmmPoolAll }; const chainSubpaths = { diff --git a/projects/helper/chains.json b/projects/helper/chains.json index ff9de7a5b4..c7b0927258 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -103,6 +103,7 @@ "elastos", "elrond", "elsm", + "elys", "empire", "energi", "energyweb", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 3cc899face..2403c7424f 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -19,7 +19,7 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru', - 'kopi', + 'kopi', 'elys', ] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', @@ -41,6 +41,7 @@ const ibcMappings = { 'ibc:DE63D8AC34B752FB7D4CAA7594145EDE1C9FC256AC6D4043D0F12310EB8FC255': { coingeckoId: 'injective-protocol', decimals: 18, }, 'ibc:25418646C017D377ADF3202FF1E43590D0DAE3346E594E8D78176A139A928F88': { coingeckoId: 'cosmos', decimals: 6, }, 'ibc:D8A36AE90F20FE4843A8D249B1BCF0CCDDE35C4B605C8DED57BED20C639162D0': { coingeckoId: 'tether', decimals: 6, }, + 'ibc:45D6B52CAD911A15BD9C2F5FFDA80E26AFCB05C7CD520070790ABC86D2B24229': { coingeckoId: 'celestia', decimals: 6, }, } const fixBalancesTokens = { @@ -75,6 +76,9 @@ const fixBalancesTokens = { "0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2": { "coingeckoId": "ethena-staked-usde", "decimals": 18 }, "0x58538e6A46E07434d7E7375Bc268D3cb839C0133": { "coingeckoId": "ethena", "decimals": 18 }, }, + elys: { + 'uelys': { coingeckoId: 'elys-network', decimals: 6 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 4f44606a0fa1f10c5bfdc0ce92d073828d30cc38 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 20 Dec 2024 22:33:02 +0100 Subject: [PATCH 1569/1768] Add theo-network integration for TVL calculation # 12673 --- projects/theo-network/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/theo-network/index.js diff --git a/projects/theo-network/index.js b/projects/theo-network/index.js new file mode 100644 index 0000000000..a02ebfb8e6 --- /dev/null +++ b/projects/theo-network/index.js @@ -0,0 +1,20 @@ +const { getConfig } = require('../helper/cache') + +const config = { + ethereum: {}, + arbitrum: {}, + base: {}, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const { [chain]: data } = await getConfig('theo-network', "https://vaults.theo.xyz/vaults/vaultInfo"); + + const calls = Object.values(data).map(i => i.contract) + const tokens = Object.values(data).map(i => i.asset) + const bals = await api.multiCall({ abi: 'uint256:totalBalance', calls }) + api.add(tokens, bals) + } + } +}) \ No newline at end of file From 6b88947f7c69d9baa21ffedfeebf30cfab305baf Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 20 Dec 2024 22:53:08 +0000 Subject: [PATCH 1570/1768] add sonic --- projects/sushiswap-v3/index.js | 4 ++++ projects/sushiswap/api.js | 1 + 2 files changed, 5 insertions(+) diff --git a/projects/sushiswap-v3/index.js b/projects/sushiswap-v3/index.js index 64f6fd8beb..26fed017ce 100644 --- a/projects/sushiswap-v3/index.js +++ b/projects/sushiswap-v3/index.js @@ -70,6 +70,10 @@ module.exports = uniV3Export({ factory: "0x2F255d3f3C0A3726c6c99E74566c4b18E36E3ce6", fromBlock: 3945310, }, + sonic: { + factory: "0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e", + fromBlock: 347590 + }, // boba: { factory: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904', fromBlock: 998556, }, polygon_zkevm: { factory: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", diff --git a/projects/sushiswap/api.js b/projects/sushiswap/api.js index 1efce7786f..018fc36f9d 100644 --- a/projects/sushiswap/api.js +++ b/projects/sushiswap/api.js @@ -124,6 +124,7 @@ module.exports = { tvl: getUniTVL({ factory: '0x33d91116e0370970444B0281AB117e161fEbFcdD', useDefaultCoreAssets: true, }), }, blast: { tvl: getUniTVL({ factory: '0x42Fa929fc636e657AC568C0b5Cf38E203b67aC2b', useDefaultCoreAssets: true, }) }, + sonic: { tvl: getUniTVL({ factory: '0xB45e53277a7e0F1D35f2a77160e91e25507f1763', useDefaultCoreAssets: true }) }, core: { tvl: tvl2 }, rsk: { tvl: tvl2 }, europa: { tvl: getUniTVL({ factory: '0x1aaF6eB4F85F8775400C1B10E6BbbD98b2FF8483', useDefaultCoreAssets: true, }) }, From 8a0656b2efdac354b62ad6e78203aa37920a5abd Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sat, 21 Dec 2024 12:18:19 +0000 Subject: [PATCH 1571/1768] bitget more wallets (#12816) --- projects/bitget/index.js | 251 ++++++++++++++++--------- projects/helper/bitcoin-book/bitget.js | 4 + 2 files changed, 170 insertions(+), 85 deletions(-) diff --git a/projects/bitget/index.js b/projects/bitget/index.js index 8cc714db9e..9b169d8057 100644 --- a/projects/bitget/index.js +++ b/projects/bitget/index.js @@ -1,128 +1,209 @@ -const { cexExports } = require('../helper/cex') -const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require("../helper/bitcoin-book/index.js"); const config = { bsc: { owners: [ - '0x0639556F03714A74a5fEEaF5736a4A64fF70D206', - '0x149ded7438caf5e5bfdc507a6c25436214d445e1', - '0x3a7d1a8c3a8dc9d48a68e628432198a2ead4917c', - '0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689' + "0x0639556F03714A74a5fEEaF5736a4A64fF70D206", + "0x149ded7438caf5e5bfdc507a6c25436214d445e1", + "0x3a7d1a8c3a8dc9d48a68e628432198a2ead4917c", + "0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689", + "0xa316c725bc8401c97d6d96f283c14b827541744e", + "0xc43999113f8fe724d91356c26105def1449ebdfd", + "0x8911b8f5127eec40c14e1ad0500dc4dbd279d7a7", + "0x1ff33329a8f8c1927131cbb72362b00abeea02d3", + "0x5bdf85216ec1e38d6458c870992a69e38e03f7ef", + "0x80097a87a7dcde470e34c10b5cceb85abf83b531", + "0xe4786cfe980ef5a6428a2fffafabf24f1fc79b64", + "0x4c1d7de286d7c20df5f2ba44b3bc706c1e03bf13", + "0xac65bdf867103ae2c3a75cdd4b68f9d7178c604f", + "0x14b5f559c27bc00c39f668a88471498d68d18768", + "0xe7b3b0a59b026ec1fef16561daf93672a61bafec", + "0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23", + "0x1084203d70950bd7a93aef75eb32a51df2422a07", + "0xbcf6011192399df75a96b0a4ce47c4820853e9e5", + "0x864a7fa57e0f8902a2de4892e925f1272edbe3fa", ], }, ethereum: { owners: [ - '0x0639556F03714A74a5fEEaF5736a4A64fF70D206', - '0x1Ae3739E17d8500F2b2D80086ed092596A116E0b', - '0x2bf7494111a59bD51f731DCd4873D7d71F8feEEC', - '0x31a36512d4903635b7dd6828a934c3915a5809be', - '0x461f6dCdd5Be42D41FE71611154279d87c06B406', - '0x5bdf85216ec1e38d6458c870992a69e38e03f7ef', - '0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689', - '0x9E00816F61a709fa124D36664Cd7b6f14c13eE05', - '0xdFE4B89cf009BFfa33D9BCA1f19694FC2d4d943d', - '0xe2b406ec9227143a8830229eeb3eb6e24b5c60be', - '0xe6a421f24d330967a3af2f4cdb5c34067e7e4d75', - '0xe80623a9d41f2f05780d9cd9cea0f797fd53062a', - '0xf646d9B7d20BABE204a89235774248BA18086dae', - '0x1d5ba5414f2983212e03bf7725add9eb4cdb00dc', //add on 12/01/2024 - '0x51971c86b04516062c1e708cdc048cb04fbe959f', //add on 12/01/2024 - '0x5051e9860c1889eb1bfa394365364b3dd61787f1', //add on 12/01/2024 - '0x731309e453972598ea05d706c6ee6c3c21ab4d2a', //add on 12/01/2024 - '0x842ea89f73add9e4fe963ae7929fdc1e80acdb52', //add on 12/01/2024 - '0x1a96e5da1315efcf9b75100f5757d5e8b76abb0c', //add on 12/01/2024 - '0x4dfc15890972ecea7a213bda2b478dabc382e7a1', //add on 12/01/2024 - '0x70213959a644baa94840bbfb4129550bceceb3c2', // add on 27/05/2024 - '0x54a679e853281a440911f72eae0e24107e9413dc', // add on 27/05/2024 - '0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23', // add on 27/05/2024 - '0x0edd5b0de0fe748be331186bf0aa878f47f601db', // add on 27/05/2024 - '0x4121217c238db06e942f3d87371106d30d0f8c84', // add on 27/05/2024 - '0xed470553f61f23cd30ccf51ab066dc1598ed0c4f', // add on 27/05/2024 - '0x59708733fbbf64378d9293ec56b977c011a08fd2', // add on 27/05/2024 - '0xaab0039de2a8dba8696ee4d42c0d1aa30d7e1059', // add on 27/05/2024 - '0xf207b2f9f9417fc73cad069f7aa5ae1c6a5b428d', // add on 27/05/2024 - '0x4d216d2682f3997f6c19420beee4530d08d0ea5f', // add on 27/05/2024 - '0xdbe46a02322e636b92296954637e1d7db9d5ed26', // add on 27/05/2024 - ] + "0x0639556F03714A74a5fEEaF5736a4A64fF70D206", + "0x1Ae3739E17d8500F2b2D80086ed092596A116E0b", + "0x2bf7494111a59bD51f731DCd4873D7d71F8feEEC", + "0x31a36512d4903635b7dd6828a934c3915a5809be", + "0x461f6dCdd5Be42D41FE71611154279d87c06B406", + "0x5bdf85216ec1e38d6458c870992a69e38e03f7ef", + "0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689", + "0x9E00816F61a709fa124D36664Cd7b6f14c13eE05", + "0xdFE4B89cf009BFfa33D9BCA1f19694FC2d4d943d", + "0xe2b406ec9227143a8830229eeb3eb6e24b5c60be", + "0xe6a421f24d330967a3af2f4cdb5c34067e7e4d75", + "0xe80623a9d41f2f05780d9cd9cea0f797fd53062a", + "0xf646d9B7d20BABE204a89235774248BA18086dae", + "0x1d5ba5414f2983212e03bf7725add9eb4cdb00dc", //add on 12/01/2024 + "0x51971c86b04516062c1e708cdc048cb04fbe959f", //add on 12/01/2024 + "0x5051e9860c1889eb1bfa394365364b3dd61787f1", //add on 12/01/2024 + "0x731309e453972598ea05d706c6ee6c3c21ab4d2a", //add on 12/01/2024 + "0x842ea89f73add9e4fe963ae7929fdc1e80acdb52", //add on 12/01/2024 + "0x1a96e5da1315efcf9b75100f5757d5e8b76abb0c", //add on 12/01/2024 + "0x4dfc15890972ecea7a213bda2b478dabc382e7a1", //add on 12/01/2024 + "0x70213959a644baa94840bbfb4129550bceceb3c2", // add on 27/05/2024 + "0x54a679e853281a440911f72eae0e24107e9413dc", // add on 27/05/2024 + "0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23", // add on 27/05/2024 + "0x0edd5b0de0fe748be331186bf0aa878f47f601db", // add on 27/05/2024 + "0x4121217c238db06e942f3d87371106d30d0f8c84", // add on 27/05/2024 + "0xed470553f61f23cd30ccf51ab066dc1598ed0c4f", // add on 27/05/2024 + "0x59708733fbbf64378d9293ec56b977c011a08fd2", // add on 27/05/2024 + "0xaab0039de2a8dba8696ee4d42c0d1aa30d7e1059", // add on 27/05/2024 + "0xf207b2f9f9417fc73cad069f7aa5ae1c6a5b428d", // add on 27/05/2024 + "0x4d216d2682f3997f6c19420beee4530d08d0ea5f", // add on 27/05/2024 + "0xdbe46a02322e636b92296954637e1d7db9d5ed26", // add on 27/05/2024 + "0xbff5092f83bd810e0926068b89633bf66eaa037b", + "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", + "0x80097a87a7dcde470e34c10b5cceb85abf83b531", + "0xe4786cfe980ef5a6428a2fffafabf24f1fc79b64", + "0x4c1d7de286d7c20df5f2ba44b3bc706c1e03bf13", + "0xac65bdf867103ae2c3a75cdd4b68f9d7178c604f", + "0x14b5f559c27bc00c39f668a88471498d68d18768", + "0xe7b3b0a59b026ec1fef16561daf93672a61bafec", + "0x3c2a309d9005433c1bc2c92ef1be06489e5bf258", + "0xa7fc83c0cdf12cdccb8e7e5350994aa8ae881c9a", + "0xe368759445438b8ec4e50bf4094e939341174e62", + "0x2dd64ee5ea8706097a5674154288989e3dbe3a05", + "0x85cf18558263505e1152c0e478763aa68b4e8f31", + "0x72049af618eba3a50e9e4eb85bf4476bff0a76ca", + "0xa700c091687afbfada6b84b5e02a5e672ee35597", + "0xd509ff5d6e530401b53cc7d3b80607824d85ff60", + "0x255e91ab794da40d39a5aceff20d98841df873af", + "0x9756b4eedc434ca23dffd209c8ea01d4c95ff881", + "0x9a449ef3665f60af503ea5b8ef5191aeb315b809", + "0x58751ce78f174b58b8f5e345244984a78524a899", + "0x9f199b93ae33c330880bdb31422fca37c6d3fb14", + "0x9c9c8f4f33679ce7f2c46cbf8ab4feb4cf45fe46", + "0x8028270e06fca18e212306a7c93bfee52b440fc5", + "0x0635ac6675e05c7f58383493bb7d1a513cd65688", + ], }, tron: { owners: [ - 'TAa8e7U7seCy7NcZ52xYVQXXybFfwvsUxz', - 'TBXEdr2pD1tszUNAkVX18K7nie1MptkZ1y', - 'TBytnmJqL47n8bAP2NgPWfboXCwEUfEayv', - 'TFrRVZFoHty7scd2a1q6BDxPU5fyqiB4iR', - 'TGJagVsVg9QSePG5GreotgdefgaXPRo8SH', - 'TGZ959FTLRk8droUqDNgLxML1X9mEVej8q', - 'TYiQTHtgLo6KX6hYgbKLJsTbWK5hu9X5MG', - 'TZHW3PJe6VoyV8NWAaeukqWNRe3bVU7u8n', - 'TBM2FK4KBEEsMVYjm4WAW2Q8Es2NKdmUB8', //add on 12/01/2024 - 'TCvfZC9h6fFXnF7KbHPgY4jgfen93VkfVW', //add on 12/01/2024 - 'TGp7SNzjrctsWNwaFFN2PNTh3b1Kgxdtib', //add on 12/01/2024 - 'TBpo1Sh7vKCLrfxocZHd8CA5wc2R75kSJM', // add on 27/05/2024 - 'TMauqkA78pfysSTn8jD1dvEUkjme2gEEdn', // add on 27/05/2024 - 'TKPqvBMU2v23RyjjViKvp16kiHPx7FnrHQ', // add on 27/05/2024 - 'TVSdtELybCCa9DPDH15CMAPjeRcENAmDJZ', // add on 27/05/2024 - ] + "TAa8e7U7seCy7NcZ52xYVQXXybFfwvsUxz", + "TBXEdr2pD1tszUNAkVX18K7nie1MptkZ1y", + "TBytnmJqL47n8bAP2NgPWfboXCwEUfEayv", + "TFrRVZFoHty7scd2a1q6BDxPU5fyqiB4iR", + "TGJagVsVg9QSePG5GreotgdefgaXPRo8SH", + "TGZ959FTLRk8droUqDNgLxML1X9mEVej8q", + "TYiQTHtgLo6KX6hYgbKLJsTbWK5hu9X5MG", + "TZHW3PJe6VoyV8NWAaeukqWNRe3bVU7u8n", + "TBM2FK4KBEEsMVYjm4WAW2Q8Es2NKdmUB8", //add on 12/01/2024 + "TCvfZC9h6fFXnF7KbHPgY4jgfen93VkfVW", //add on 12/01/2024 + "TGp7SNzjrctsWNwaFFN2PNTh3b1Kgxdtib", //add on 12/01/2024 + "TBpo1Sh7vKCLrfxocZHd8CA5wc2R75kSJM", // add on 27/05/2024 + "TMauqkA78pfysSTn8jD1dvEUkjme2gEEdn", // add on 27/05/2024 + "TKPqvBMU2v23RyjjViKvp16kiHPx7FnrHQ", // add on 27/05/2024 + "TVSdtELybCCa9DPDH15CMAPjeRcENAmDJZ", // add on 27/05/2024 + "TYPUgo9ZtYk34XgBHbCHJCaoYZ5RejhhVD", + "TKurFA1LqaLU6cYa7QKbYqFceT3Xf22pNT", + "TN9DMsWq8CwE9GZV4akjxUzwG93PPceuiV", + "TYAdiDkvjsSPMQt8AvA8jWJrXKcjyKb5rs", + "TTky11V7Q3ng6hkYjLs3R3YkeDB8suQ7dC", + "TJ8kFqncqv3GP15DTcbzufX5HFgFMCK3kC", + "TEk5sAuuk6URqvT5tL7hrUB65NGEgq895X", + "TJ7hhYhVhaxNx6BPyq7yFpqZrQULL3JSdb", + "TWpNmnuq6EFMRnxWQTGGf47gjkkbtYJdbm", + "TKfMrRSwhuLoTHcziSeNEAdSjaTe2677md", + "TQQ29P8gw2Tp8XeYKC8vasQmJ7rvHGFhiG", + "TUktrKwLLGGjks6DoN1zGta8muskbd9tnk", + "TFfNrnZzHVMQ7DsHLvcTyvZheqabG4KW4W", + "TKCFasXqJw3ezQiF1qYWYd78Edfb2NvpBV", + ], }, bitcoin: { - owners: bitcoinAddressBook.bitget + owners: bitcoinAddressBook.bitget, }, arbitrum: { owners: [ - '0x0639556F03714A74a5fEEaF5736a4A64fF70D206', - '0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689', - '0x5bdf85216ec1e38d6458c870992a69e38e03f7ef', //add on 12/01/2024 - ] + "0x0639556F03714A74a5fEEaF5736a4A64fF70D206", + "0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689", + "0x5bdf85216ec1e38d6458c870992a69e38e03f7ef", //add on 12/01/2024 + "0x14b5f559c27bc00c39f668a88471498d68d18768", + "0x81fb786799ebacc67abc0abaf5589aa0d7773fa0", + "0xf2c1a45ec2013c686c9568a4f250158c425e4373", + "0xe7b3b0a59b026ec1fef16561daf93672a61bafec", + "0x0c4681e6c0235179ec3d4f4fc4df3d14fdd96017", + "0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23", + ], }, optimism: { owners: [ - '0x0639556F03714A74a5fEEaF5736a4A64fF70D206', - '0x5bdf85216ec1e38d6458c870992a69e38e03f7ef', - '0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689' - ] + "0x0639556F03714A74a5fEEaF5736a4A64fF70D206", + "0x5bdf85216ec1e38d6458c870992a69e38e03f7ef", + "0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689", + "0x14b5f559c27bc00c39f668a88471498d68d18768", + "0xe7b3b0a59b026ec1fef16561daf93672a61bafec", + "0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23", + ], }, era: { - owners: [ - '0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689' - ] + owners: ["0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689"], }, - fantom :{ - owners: ['0x5bdf85216ec1e38d6458c870992a69e38e03f7ef'] + fantom: { + owners: ["0x5bdf85216ec1e38d6458c870992a69e38e03f7ef"], }, cronos: { - owners: ['0x0639556F03714A74a5fEEaF5736a4A64fF70D206'] + owners: ["0x0639556F03714A74a5fEEaF5736a4A64fF70D206"], }, avax: { owners: [ - '0x0639556F03714A74a5fEEaF5736a4A64fF70D206', - '0x5bdf85216ec1e38d6458c870992a69e38e03f7ef' - ] + "0x0639556F03714A74a5fEEaF5736a4A64fF70D206", + "0x5bdf85216ec1e38d6458c870992a69e38e03f7ef", + "0xe7b3b0a59b026ec1fef16561daf93672a61bafec", + "0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23", + ], }, polygon: { owners: [ - '0x0639556F03714A74a5fEEaF5736a4A64fF70D206', - '0x5bdf85216ec1e38d6458c870992a69e38e03f7ef', - '0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689' - ] + "0x0639556F03714A74a5fEEaF5736a4A64fF70D206", + "0x5bdf85216ec1e38d6458c870992a69e38e03f7ef", + "0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689", + "0x14b5f559c27bc00c39f668a88471498d68d18768", + "0xe7b3b0a59b026ec1fef16561daf93672a61bafec", + "0x1ab4973a48dc892cd9971ece8e01dcc7688f8f23", + "0x9b0cb31f3e9232196aeaa7cac03ea95c5a4f0e35", + ], }, ripple: { owners: [ - 'r3AEihLNr81VYUf5PdfH5wLPqtJJyJs6yY', - 'rGDreBvnHrX1get7na3J4oowN19ny4GzFn' - ] + "r3AEihLNr81VYUf5PdfH5wLPqtJJyJs6yY", + "rGDreBvnHrX1get7na3J4oowN19ny4GzFn", + ], }, solana: { - owners: ['A77HErqtfN1hLLpvZ9pCtu66FEtM8BveoaKbbMoZ4RiR'] + owners: [ + "A77HErqtfN1hLLpvZ9pCtu66FEtM8BveoaKbbMoZ4RiR", + "3bLkLrRvkwHMrqyoCaDSCn6bZnpfJCVsHxcmznUwB1p5", + "42zAGwv37eZFwwcExfCAV9oSw2kNQX3aBxsbM6zvQECM", + "YiZeibU6zzEHyKiSTjygXUPkMktKj9a3DCAcWmZ4XjF", + "AvLGED7RBzYv4AuvkgFSCFMqyB2WjUff7TVKVEv5MjMs", + "48Zo7g9SReCWmNtCvr2es4H9CLCRQHrSND2Wzi61sCsQ", + "57WSBnNTC2MaqpY6NWLdNjhrELced4jSGV2hLSpjzct9", + "DP1FqoBnE23QNNz4LpT9FCQvETdJN4nph5c11NiinrGg", + "AyhsmFptkM251V1AoH2gf8d4QUnxUkkmaDqFfFwBwGni", + ], }, metis: { - owners: ['0x5bdf85216ec1e38d6458c870992a69e38e03f7ef'] + owners: ["0x5bdf85216ec1e38d6458c870992a69e38e03f7ef"], }, kava: { - owners: ['0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689'] + owners: ["0x97b9d2102a9a65a26e1ee82d59e42d1b73b68689"], }, starknet: { - owners: ['0x0299b9008e2d3fa88de6d06781fc9f32f601b2626cb0efa8e8c19f2b17837ed1'] + owners: [ + "0x0299b9008e2d3fa88de6d06781fc9f32f601b2626cb0efa8e8c19f2b17837ed1", + ], + }, + ton: { + owners: ["UQDJlZqZfh1OQ4PY2ze4bSEBznjc8fGzkE2YiP5XLvDv1JNr"], }, -} +}; -module.exports = cexExports(config) \ No newline at end of file +module.exports = cexExports(config); diff --git a/projects/helper/bitcoin-book/bitget.js b/projects/helper/bitcoin-book/bitget.js index 0b7284235f..2a34841573 100644 --- a/projects/helper/bitcoin-book/bitget.js +++ b/projects/helper/bitcoin-book/bitget.js @@ -11,4 +11,8 @@ module.exports = [ '3DSST4myyyRbiGzgCBE1RVHY7GRjDCh4n9', // add on 27/05/2024 '3Nu84pbqfcfaFztQ74qc9ni2PH5HGM1bzS', // add on 27/05/2024 '34hatYbZ27CLLoZWhuJHzBgoTCwXEv8GwT', // add on 27/05/2024 + '3Gm1h16ov9cH4o4mChapGUai61K1bAXL3c', + '1PX5L73e5325fdrSwDHNTuq8RMM9JKR34q', + '1PPyiSbdQeo83ezje6Yv8L3UWpDcx4NtSB', + '1NZc5p5YQ21tGjVrurzczq56SVq2tiH6dt' ] \ No newline at end of file From 6fe7407769fe75db08817db7284a6c407f409f00 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 21 Dec 2024 14:08:12 +0100 Subject: [PATCH 1572/1768] sushi: track sonic --- projects/helper/env.js | 1 + projects/sushiswap-v3/index.js | 1 + projects/sushiswap/api.js | 1 + 3 files changed, 3 insertions(+) diff --git a/projects/helper/env.js b/projects/helper/env.js index e7902dda2f..e0ea508568 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -22,6 +22,7 @@ const DEFAULTS = { DUCKCHAIN_RPC: "https://rpc.duckchain.io,https://rpc-hk.duckchain.io", SOPHON_RPC_MULTICALL: "0x5f4867441d2416cA88B1b3fd38f21811680CD2C8", VANA_RPC_MULTICALL: "0xFe92b91F3326e58557478c28EeAe1936E0c7148a", + FILECOIN_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", } const ENV_KEYS = [ diff --git a/projects/sushiswap-v3/index.js b/projects/sushiswap-v3/index.js index 26fed017ce..d16680e299 100644 --- a/projects/sushiswap-v3/index.js +++ b/projects/sushiswap-v3/index.js @@ -99,6 +99,7 @@ module.exports = uniV3Export({ blast: { factory: '0x7680d4b43f3d1d54d6cfeeb2169463bfa7a6cf0d', fromBlock: 284122, }, //europa: { factory: '0x51d15889b66A2c919dBbD624d53B47a9E8feC4bB', fromBlock: 5124251, }, rsk: { factory: '0x46B3fDF7B5cde91Ac049936bF0Bdb12C5D22202E', fromBlock: 6365060, }, //this one + sonic: { factory: '0x46B3fDF7B5cde91Ac049936bF0Bdb12C5D22202E', fromBlock: 1, }, //this one }); const config = { diff --git a/projects/sushiswap/api.js b/projects/sushiswap/api.js index 018fc36f9d..515e0dbfda 100644 --- a/projects/sushiswap/api.js +++ b/projects/sushiswap/api.js @@ -134,6 +134,7 @@ module.exports = { linea: { tvl: getUniTVL({ factory: '0xFbc12984689e5f15626Bad03Ad60160Fe98B303C', useDefaultCoreAssets: true, }) }, thundercore: { tvl: tvl2 }, islm: { tvl: tvl2 }, + sonic: { tvl: tvl2 }, } // module.exports.polygon.tvl = getChainTVL('polygon') From 2b2b97a14acb30395b140c17b04243bb393807d0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 21 Dec 2024 14:09:42 +0100 Subject: [PATCH 1573/1768] remove dups --- projects/sushiswap-v3/index.js | 4 ---- projects/sushiswap/api.js | 1 - 2 files changed, 5 deletions(-) diff --git a/projects/sushiswap-v3/index.js b/projects/sushiswap-v3/index.js index d16680e299..0e97e040d1 100644 --- a/projects/sushiswap-v3/index.js +++ b/projects/sushiswap-v3/index.js @@ -70,10 +70,6 @@ module.exports = uniV3Export({ factory: "0x2F255d3f3C0A3726c6c99E74566c4b18E36E3ce6", fromBlock: 3945310, }, - sonic: { - factory: "0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e", - fromBlock: 347590 - }, // boba: { factory: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904', fromBlock: 998556, }, polygon_zkevm: { factory: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", diff --git a/projects/sushiswap/api.js b/projects/sushiswap/api.js index 515e0dbfda..a732fcf382 100644 --- a/projects/sushiswap/api.js +++ b/projects/sushiswap/api.js @@ -124,7 +124,6 @@ module.exports = { tvl: getUniTVL({ factory: '0x33d91116e0370970444B0281AB117e161fEbFcdD', useDefaultCoreAssets: true, }), }, blast: { tvl: getUniTVL({ factory: '0x42Fa929fc636e657AC568C0b5Cf38E203b67aC2b', useDefaultCoreAssets: true, }) }, - sonic: { tvl: getUniTVL({ factory: '0xB45e53277a7e0F1D35f2a77160e91e25507f1763', useDefaultCoreAssets: true }) }, core: { tvl: tvl2 }, rsk: { tvl: tvl2 }, europa: { tvl: getUniTVL({ factory: '0x1aaF6eB4F85F8775400C1B10E6BbbD98b2FF8483', useDefaultCoreAssets: true, }) }, From c0b70d03e8d58ecf8320ab212107467ddea693e6 Mon Sep 17 00:00:00 2001 From: tyler-tsai Date: Sat, 21 Dec 2024 23:06:52 +0800 Subject: [PATCH 1574/1768] feat: add pumpBTC (#12812) Co-authored-by: Tyler Tsai --- projects/helio-money/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index a3f27e05cf..e5e7ec45b9 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -106,7 +106,13 @@ module.exports = { // vUSDT, PSM - LSR // [ADDRESSES.bsc.USDT, "0x5763DDeB60c82684F3D0098aEa5076C0Da972ec7"], - ["0xfd5840cd36d94d7229439859c0112a4185bc0255","0xf76D9cFD08dF91491680313B1A5b44307129CDa9"] + ["0xfd5840cd36d94d7229439859c0112a4185bc0255","0xf76D9cFD08dF91491680313B1A5b44307129CDa9"], + + // pumpBTC + [ + "0xf9C4FF105803A77eCB5DAE300871Ad76c2794fa4", + "0xEA44dDC58eC6b4902E19A353c554B6A4F32b9e6E", + ], ], }), pool2, From e8da87391d7f12565635ff168166dd27a7208d82 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 21 Dec 2024 22:35:57 +0000 Subject: [PATCH 1575/1768] upgrade sdk --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb1274413d..5347b3d839 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.104", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.104.tgz", - "integrity": "sha512-5+H3OSiDNB5Lo9wnn6wojrFCLOcW5UZzb9o6M6xIddav+hlhHMQE9vEJdwoE+/BgX4ljbOMLbkyndCLvs3sETQ==", + "version": "5.0.105", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.105.tgz", + "integrity": "sha512-FZ9j+THquVambKDYH9TnFaBpIbbGVLHfb5Kuv0N2UbX9G61h+G79QGrLtgOlXbJ4rJTjBUTX0dCPttYvjDw96g==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From e5eac33418363edd3074916ae597328d07a10ff1 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 22 Dec 2024 00:33:48 +0000 Subject: [PATCH 1576/1768] upgrade --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5347b3d839..8a3101e566 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.105", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.105.tgz", - "integrity": "sha512-FZ9j+THquVambKDYH9TnFaBpIbbGVLHfb5Kuv0N2UbX9G61h+G79QGrLtgOlXbJ4rJTjBUTX0dCPttYvjDw96g==", + "version": "5.0.106", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.106.tgz", + "integrity": "sha512-ZcEU+wtqrLzS76qEN71kpGwwry8uPl2eGH/1P96VbutcTevRKZ+MCqI8V7cP4d3aMm7GRlPO58inF2vRLCQnyA==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From 94a6c2f23e54e3ead6f3c379f054c63f120626e5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 22 Dec 2024 03:06:23 +0100 Subject: [PATCH 1577/1768] chore: update @defillama/sdk to version 5.0.107 --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a3101e566..c73c964100 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.106", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.106.tgz", - "integrity": "sha512-ZcEU+wtqrLzS76qEN71kpGwwry8uPl2eGH/1P96VbutcTevRKZ+MCqI8V7cP4d3aMm7GRlPO58inF2vRLCQnyA==", + "version": "5.0.107", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.107.tgz", + "integrity": "sha512-dP6la1NUjl8Cgq9f5EjMAJ5xkzQqJfROJgTYvyktVpYjVbPln9QYrFSSfT4ZGycwXq74wuv3yo/Nt/fZv8AEPw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From d57dde48df12968b2febc1384220feb5eec406ef Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sun, 22 Dec 2024 10:58:05 +0000 Subject: [PATCH 1578/1768] add more wallets pionex (#12823) --- projects/helper/bitcoin-book/pionex-cex.js | 7 +++++-- projects/pionex-cex/index.js | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/projects/helper/bitcoin-book/pionex-cex.js b/projects/helper/bitcoin-book/pionex-cex.js index ef591d3c19..b6f49b1587 100644 --- a/projects/helper/bitcoin-book/pionex-cex.js +++ b/projects/helper/bitcoin-book/pionex-cex.js @@ -1,5 +1,4 @@ module.exports = [ - "1D2Pds2XyiDe7CknDumKkdSECuepGsBCSR", "bc1qs0jdyydyd4kv7fwqre4suhz33mcuy3838xdsla", "1JkmFSbqijbrv6JdyVx2hNwyE8nzEy3Cs5", "bc1qctq0v0vecjxp4de66znkh0dcczkvuqjwwt0za4", @@ -15,5 +14,9 @@ module.exports = [ "bc1q0jkkjr2qr4wl3v399algvsjuk8g7vlm3yaqufu", "17UcdCaVWpmgpuZsKfKdWRUUViAzoQFY3H", "bc1qguymjgurnywqac3rrplr2nmkl26cf5jyyq3vkv", - "1D9YPYQevtEsk26exBjCY2pKfhDsXTxJEE" + "1D9YPYQevtEsk26exBjCY2pKfhDsXTxJEE", + "bc1qs5lsnltqwdvledqvgrf82prja04ej4xk2z7ktu", + "bc1qcc2h0dw6t79y4czk8newhazwgzlygyfawu7k30", + "bc1q7d9lknwmc7tnwcemapkymggne2sv0hxkg84vg6", + "bc1q9a67xl67smtue0ajutxttsla25a45x6fdpwccp" ] \ No newline at end of file diff --git a/projects/pionex-cex/index.js b/projects/pionex-cex/index.js index 5a5e2747f9..57d2e5131b 100644 --- a/projects/pionex-cex/index.js +++ b/projects/pionex-cex/index.js @@ -60,7 +60,11 @@ const config = { "0x67be8ce27ef8158d51d8593bb5b26eafacc955d9" ] }, - + avax: { + owners: [ + "0xF6D4E5a7c5215F91f59a95065190CCa24bf64554", + ] + }, } module.exports = cexExports(config) \ No newline at end of file From 96d22cfc8df3f43ded557afabe94ee8a223eb617 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sun, 22 Dec 2024 11:09:07 +0000 Subject: [PATCH 1579/1768] add ton wallets to bitget (#12824) --- projects/bitget/index.js | 55 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/projects/bitget/index.js b/projects/bitget/index.js index 9b169d8057..f0f6907614 100644 --- a/projects/bitget/index.js +++ b/projects/bitget/index.js @@ -202,7 +202,60 @@ const config = { ], }, ton: { - owners: ["UQDJlZqZfh1OQ4PY2ze4bSEBznjc8fGzkE2YiP5XLvDv1JNr"], + owners: [ + "UQDJlZqZfh1OQ4PY2ze4bSEBznjc8fGzkE2YiP5XLvDv1JNr", + "EQCnRoi95R9jLVrPONxTWEMMCuIlHBsYZjYZW5JwtoecbRl6", + "EQC5Jj1PfKD8PmwxdBDi47mtbLahHV0Qkrs39lVl2A4nPlPC", + "EQAkKBTk1NuRH9wuy5qJFesfCoZMvZXa2NV9mCet3t3ndwkH", + "EQDN9_DXwJA28GQnLjxCntVwvknvKes6c1tku8F5FQc3MkZo", + "EQAGQcXOz5QWPXW_faObcN7HfSx8ihstAzoQTV9ckqmrDfcQ", + "EQCUlDMK5NDVOmpbLAzGVkXfCXpmEJgKWHL4J7oHmuNkPxaH", + "EQAWLm0Xut7koqsFxI2j3YBvjI1M_tVHXFrgTysXvF4NQWu5", + "EQAGR25YDiUNCr7Fw2WnEYM0g8WB1XuQi-N9Vr2w4zjDEhg5", + "EQDpwKJP-qaqTyKIkOca6VUL_FOmxX5kO8McJA4YcnrBzlwi", + "EQAzZQL6-D71tTLTFbpxRQtmHJDoP85k2Lwf0r9kLzVV2VRy", + "EQCzCMf5tPWW9iUBdYhZclSYcbBccO02Gf1ak5QB7qly5Gsl", + "EQDi0d8gazctsfO4kOYNGFtnqgyfG2tv9goFCRyMAbQKxMA3", + "EQB6DclNqfSLlo37h7441Pq3KGKI23oE0wgf7uF3N22QicZ7", + "EQCHhe9euw_STGkR0Q9DwAlh6XSPpUKXoaxRfjxf52uwvmGB", + "EQAhO2gEwgghNaSoA9qOOzDP7VGu6a8q0hADNLf0cR07zMQr", + "EQBXPf6ZSQoEFwPpd-RyQTXFuL6gvqZ4OWEiR0UcqdXEywxy", + "EQDeJRmlJ95-HUwQKL23TgIrKKbjcOT-w_wn2NlxMI-Zu6i2", + "EQAPGaGPsc-vwzQB04IyW63UkbS08btCmfD51vvHm3FQFYbg", + "EQA182-9Kw_8YCugScsCS03ln3WVvp5gZpLU7lbS3xst3GiN", + "EQDqltnjUhoZxMd022XDb8egHj2IQOlegwXD0rfJL1d8eyOZ", + "EQDY6SAYmiZ2dc3qWZkqSB1JxPgyluCBNJe5DCeUBXKVvpC8", + "EQB5AOHMT1UHXa4WBh_LL3HWqPeYMSoCNfDarrUOSSiI-2LE", + "EQBi8zmTQRJNfGhdpG2RoHqhSWhN05fH5f6YaCCom4dsAnrT", + "EQBcPW3DG9p9UG-FiOVbq6BiXAxTWRYSgwkeSHK9vAHJauTe", + "EQAMReXSXKXMgNJsiQbeUYqG_BoETp6V11p2AQ0hBalCPUvU", + "EQD7T5jBR_4NTYpyQTsbE6UTcSgM31GM-tUQsxzwWAW8XyuS", + "EQB8Nfcr7iJARqpnwHI_dowkRu9k43b8AMj-p4RJTXosLWWv", + "EQDAflHltpSTd1j0X0ADBxyE9MSmi9sWiiLD1si4nNYYb7Kq", + "EQBAdstQfrjD8XODZjA6OL3sE64rEjDFSPSjgXdllH4EYbL_", + "EQCJCWcpv6SSYKI9XpCOM8wazXTay7Y9eJa1DjvqLrBj0DA4", + "EQBczmMu9joi0XxD36P0UDZqCmCVZ6lXkQ8EnX73Dz8bFxtS", + "EQDrU5ouMx-D_RBtqKuqPGpGvS-O4B-kUnXW-q7RulrPmAfa", + "EQCkEpUgZvV1vD4n1Zs3SSdxInEQh1QkxubbrmHonEywvJ5a", + "EQDHy0OTba2_affHgdhHNtC8DW0CjAYdM6np6HX8yjqFo1hL", + "EQA5O1iYS2jpYbP2_z0WCbWRmyiaDQ-thu-x_Jkhzu-DsnEc", + "EQCYL0iLg5WpiX2G8IBeFIGNVCy7LQ_hyf5iZ9A3ezFg5Atl", + "EQClK4F-Kyfg7-h7CFMedd4NOMQN3Q_GUXd8b1i863SAdeR3", + "EQC9yQc4ukdiARwzowoBnlQSI_t_WrW4vM3PZAJtlzmxkRGj", + "EQBCDb94YxZuR4CsuOu4G9N0pm1U6ezgOhHEBiEX2LWD2YJi", + "EQDKubNbxKBrbng_VL6CiPWG43crC3zogxRi-kSzxxPjw35F", + "EQBtm4dCmA6ee0TdGB7OM_ugptfPSJQnZ9t8lEn3333sNE0u", + "EQB9FPf68No-lbXCKDRKdswuMr1tAFdXKb5wb04CAtkTgPu7", + "EQDRb6dbCI6kvhE5Mdnp60wc7fNEU7bpTyZkvGnmOLMqv5tr", + "EQBABRMAjj3FdNo6KkeSP3wLrSL1oBPgogH_vojzNnI0ZI9l", + "EQAhwpa_TxKq4vPppejylixsCucMNrOJUUHOsEk6TP2ExnOS", + "EQDQPzhpD1ygMNgnPiD6k6d2S0FWMdJasy3Z3eOQTujARKDD", + "EQA8Q5etDAwMseoEFLPfN8xUL9wQhi3hNzs4eFlXNIuB81Tj", + "EQA70IHk3sI76igys6-kLC0TLxXo54s0qAwdbSRUOpqgneV3", + "EQDJlZqZfh1OQ4PY2ze4bSEBznjc8fGzkE2YiP5XLvDv1M6u", + "EQAXl6XExQorMSzpkn_28S79OwtY_zEURRGMLS5kMStdeQng", + "EQBggwBbNUqxxHhaqM6Ck-5cnBgukkjyfpyQdPNcFjQggwrJ", + ], }, }; From 3ee6634942d6ddb1880e60b1e16b6547b4e1a174 Mon Sep 17 00:00:00 2001 From: FantaHolic <96290246+0xfantaholic@users.noreply.github.com> Date: Sun, 22 Dec 2024 13:50:03 +0200 Subject: [PATCH 1580/1768] Updates/wagmi sonic (#12822) Co-authored-by: Ernest Isaev --- projects/wagmi-com/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/wagmi-com/index.js b/projects/wagmi-com/index.js index ab0bfb6f1c..fe6b758f0d 100644 --- a/projects/wagmi-com/index.js +++ b/projects/wagmi-com/index.js @@ -10,6 +10,7 @@ module.exports = uniV3Export({ zklink: { factory: '0x6175b648473F1d4c1549aAC3c2d007e7720585e6', fromBlock: 1339353, }, iotaevm: { factory: '0x01Bd510B2eA106917e711f9a05a42fC162bee2Ac', fromBlock: 143828, }, base: { factory: '0x576A1301B42942537d38FB147895fE83fB418fD4', fromBlock: 14250787, }, + sonic: { factory: '0x56CFC796bC88C9c7e1b38C2b0aF9B7120B079aef', fromBlock: 276406, } }) module.exports.kava = { tvl: uniV3GraphExport({ name: 'wagmi-kava', graphURL: 'https://kava.graph.wagmi.com/subgraphs/name/v3' }) } @@ -17,6 +18,7 @@ module.exports.kava = { tvl: uniV3GraphExport({ name: 'wagmi-kava', graphURL: 'h const stakingConfig = { metis: { swagmi: '0x5fb3983adc4dcc82a610a91d2e329f6401352558', wagmi: '0xaf20f5f19698f1d19351028cd7103b63d30de7d7', }, kava: { swagmi: '0x3690d1a9fb569c21372f8091527ab44f1dc9630f', wagmi: '0xaf20f5f19698f1d19351028cd7103b63d30de7d7', }, + sonic: { swagmi: '0x4b5d9db7910448e2F236509D9eE242673AFa28aA', wagmi: '0x0e0Ce4D450c705F8a0B6Dd9d5123e3df2787D16B', } } Object.keys(stakingConfig).forEach(chain => { From 97c2b3b210ab459a2d140a0ba0a049694f7cedb4 Mon Sep 17 00:00:00 2001 From: abs3ntdev <86447830+abs3ntdev@users.noreply.github.com> Date: Sun, 22 Dec 2024 05:56:15 -0600 Subject: [PATCH 1581/1768] feat: add corn to uniswap v3 (#12821) Co-authored-by: abs3ntdev --- projects/uniswap/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index a146cf3d62..3d71604d60 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -92,6 +92,7 @@ module.exports = { bob: { factory: "0xcb2436774C3e191c85056d248EF4260ce5f27A9D", fromBlock: 5188280 }, lisk: { factory: "0x0d922Fb1Bc191F64970ac40376643808b4B74Df9", fromBlock: 577168 }, wc: { factory: "0x7a5028BDa40e7B173C278C5342087826455ea25a", fromBlock: 1603366 }, + corn: { factory: "0xcb2436774C3e191c85056d248EF4260ce5f27A9D", fromBlock: 10878 }, }), filecoin: { tvl: filecoinTvl }, } @@ -111,4 +112,4 @@ module.exports.sei.tvl = async (api) => { const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) const ownerTokens = pools.map((pool, i) => [[token0s[i], token1s[i]], pool]) return sumTokens2({ api, ownerTokens }) -} \ No newline at end of file +} From 897663b423d4d3276554a48ce9bbb2cbb475aed2 Mon Sep 17 00:00:00 2001 From: antonyzhoudl Date: Sun, 22 Dec 2024 21:39:19 +0800 Subject: [PATCH 1582/1768] remove wrong address (#12825) --- projects/pionex-cex/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/projects/pionex-cex/index.js b/projects/pionex-cex/index.js index 57d2e5131b..6ef048c5df 100644 --- a/projects/pionex-cex/index.js +++ b/projects/pionex-cex/index.js @@ -16,7 +16,6 @@ const config = { "0x3c22c17501047d862b3a98e296079966aefd8df7", "0xbbb72ba600d8493fea284d5fe44919f7b60d53f5", "0x67be8ce27ef8158d51d8593bb5b26eafacc955d9", - "0xee5b5b923ffce93a870b3104b7ca09c3db80047a" ], }, bitcoin: { @@ -33,7 +32,6 @@ const config = { "TLK8GVBqJNmcyaN5mpSPSzQfTjsSxb7sC9", "TGgMNPxdyUgdYwMSbMkpTPvaSkrRakKqcK", "TAA7sxJ259JgstGPjanb5sB6ZJuCPtCobs", - "TJDENsfBJs4RFETt1X1W8wMDc8M5XnJhCe", "TKRksVBKDBATKcifm4FXFHcD1FmJQ2bp3x" ], }, From 2d258c4b99e9a340545177b7351a317f125ff7f4 Mon Sep 17 00:00:00 2001 From: antonyzhoudl Date: Mon, 23 Dec 2024 00:18:32 +0800 Subject: [PATCH 1583/1768] remove tron address (#12828) From 1e22d4fee166d920a685e4c63d1d31a4e3ae8816 Mon Sep 17 00:00:00 2001 From: 0xmDreamy <124707942+0xmDreamy@users.noreply.github.com> Date: Sun, 22 Dec 2024 23:22:18 +0700 Subject: [PATCH 1584/1768] feat(abracadabra): Add single-sided GM cauldrons (#12829) --- projects/abracadabra/market.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/abracadabra/market.json b/projects/abracadabra/market.json index f9957bf82f..dd0f5d0a27 100644 --- a/projects/abracadabra/market.json +++ b/projects/abracadabra/market.json @@ -11,7 +11,9 @@ "0x49De724D7125641F56312EBBcbf48Ef107c8FA57": "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", "0x780db9770dDc236fd659A39430A8a7cC07D0C320": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", "0x6B04C535C852AD19345571247ee12B5BF23dAcB6": "0x6985884C4392D348587B19cb9eAAf157F13271cd", - "0xFCE0b2fe7d7d5057C82A896e4D8EC0e4b813f71f": "0x58538e6A46E07434d7E7375Bc268D3cb839C0133" + "0xFCE0b2fe7d7d5057C82A896e4D8EC0e4b813f71f": "0x58538e6A46E07434d7E7375Bc268D3cb839C0133", + "0x9fF8b4C842e4a95dAB5089781427c836DAE94831": "0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77", + "0x625Fe79547828b1B54467E5Ed822a9A8a074bD61": "0x450bb6774Dd8a756274E0ab4107953259d2ac541" }, "avax": { "0x35fA7A723B3B39f15623Ff1Eb26D8701E7D6bB21": "0x0da67235dD5787D67955420C84ca1cEcd4E5Bb3b", From a811787a90494510cc6eb7a76bf970dc3940f4d7 Mon Sep 17 00:00:00 2001 From: Fisclend Date: Mon, 23 Dec 2024 00:22:31 +0800 Subject: [PATCH 1585/1768] Update index.js (#12827) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/fisclend/index.js | 1 + projects/helper/tokenMapping.js | 3 +++ utils/handleError.js | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/fisclend/index.js b/projects/fisclend/index.js index 4730fc90a4..da3d724db5 100644 --- a/projects/fisclend/index.js +++ b/projects/fisclend/index.js @@ -3,4 +3,5 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { apechain: compoundExports2({comptroller: '0xd11443B079D62700061F7311fC48C40B30BCEA91', cether: '0xB1974B31b60C7134978e5574F5f1fC8A16535b5D'}), wc: compoundExports2({comptroller: '0xE3de48DCF4968B419BB55421D6B5bF2c049DaFB2', cether: '0xCD04992D1D8d42BB432AD794103c3B498016Da88'}), + sonic: compoundExports2({comptroller: '0x65E8768B86350875DDE19A791f06FfB7a4ADA71b', cether: '0x0B19823EF1F4a6B1f7c52336F428F1a92e9f645E'}), } diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 2403c7424f..afec0b42a8 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -79,6 +79,9 @@ const fixBalancesTokens = { elys: { 'uelys': { coingeckoId: 'elys-network', decimals: 6 }, }, + wc: { + [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/utils/handleError.js b/utils/handleError.js index 049f9b2cd9..e360dc9dc7 100644 --- a/utils/handleError.js +++ b/utils/handleError.js @@ -22,7 +22,7 @@ function getStackMessage(stack) { if (!stack) return [] if (/ at (checkExportKeys)/.test(stack)) return [] - const isNodeMolule = m => /node_modules/.test(m) + const isNodeMolule = m => /node_modules/.test(m) && !/defillama/.test(m) const isNotLoggerMessage = m => !/log/.test(m) const isNotInternalMessage = m => !/node:internal/.test(m) From 5bd2b115d066344a25e9ea3d4c2f63ced9716c7f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 22 Dec 2024 17:51:15 +0100 Subject: [PATCH 1586/1768] track https://diamondswap.com #12820 --- projects/diamondswap/index.js | 43 +++++++++++++++++++++++++++++++++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 4 +++ 4 files changed, 49 insertions(+) create mode 100644 projects/diamondswap/index.js diff --git a/projects/diamondswap/index.js b/projects/diamondswap/index.js new file mode 100644 index 0000000000..cb6a9fcdaf --- /dev/null +++ b/projects/diamondswap/index.js @@ -0,0 +1,43 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +const { getLogs, getAddress } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +module.exports = uniTvlExports({ + odyssey: '0x7d57C45dC107497C5c5c0F544a84691D2b06BC83', + base: '0xdc93aca9bf72ceb35d1f2cd305bd8335b5b88757', + avax: '0x7ab5ac142799b0a3b6f95c27a1f2149ebcf5287d', +}) + + +async function tvl(api) { + const { factories } = config[api.chain] + const ownerTokens = [] + + for (const { factory, fromBlock } of factories) { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'], + fromBlock, + }) + const pools = logs.map(i => getAddress(i.data.slice(0, 64 + 2))) + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) + pools.map((pool, i) => ownerTokens.push([[token0s[i], token1s[i]], pool])) + } + return sumTokens2({ api, ownerTokens }) +} + +const config = { + ethereum: { factories: [{ factory: '0xE1046fcB1057ef82B68f3A6B8eBb0e411Cf334E0', fromBlock: 18024947, },], }, + bsc: { + factories: [{ + factory: '0x81a1417cbec636e631fa62b81f970a5ec23b39ca', fromBlock: + 32062831, + },], + }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index c7b0927258..56a633fc25 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -239,6 +239,7 @@ "oas", "oasis", "obyte", + "odyssey", "okexchain", "omax", "ontology", diff --git a/projects/helper/env.js b/projects/helper/env.js index e0ea508568..bf52b24321 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -23,6 +23,7 @@ const DEFAULTS = { SOPHON_RPC_MULTICALL: "0x5f4867441d2416cA88B1b3fd38f21811680CD2C8", VANA_RPC_MULTICALL: "0xFe92b91F3326e58557478c28EeAe1936E0c7148a", FILECOIN_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", + ODYSSEY_RPC_MULTICALL: "0xD5F04861e1249F488ef8898607cF7ad0F334d823", } const ENV_KEYS = [ diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index afec0b42a8..e5dae07fe4 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -82,6 +82,10 @@ const fixBalancesTokens = { wc: { [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, }, + odyssey: { + [ADDRESSES.null]: { coingeckoId: 'dione', decimals: 18 }, + '0xf21cbaf7bd040d686bd390957770d2ea652e4013': { coingeckoId: 'dione', decimals: 18 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) From 637c0ac01a3e13e67cf237cd00bb0643372ff7d0 Mon Sep 17 00:00:00 2001 From: gdupont Date: Sun, 22 Dec 2024 21:07:48 +0100 Subject: [PATCH 1587/1768] add lagoon protocol tvl (#12818) --- projects/lagoon/index.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 projects/lagoon/index.js diff --git a/projects/lagoon/index.js b/projects/lagoon/index.js new file mode 100644 index 0000000000..b358e56f0b --- /dev/null +++ b/projects/lagoon/index.js @@ -0,0 +1,26 @@ +const { sumERC4626VaultsExport } = require('../helper/erc4626'); +const sdk = require('@defillama/sdk'); + +const config = { + ethereum: { + lvTokens: { + totalAssets: [ + "0x07ed467acD4ffd13023046968b0859781cb90D9B", // 9Summits Flagship ETH + "0x03D1eC0D01b659b89a87eAbb56e4AF5Cb6e14BFc", + ], + }, + }, +}; + + + +const totalAssetsVaults = config.ethereum.lvTokens.totalAssets; + +const tvl = sdk.util.sumChainTvls([ + sumERC4626VaultsExport({ + vaults: totalAssetsVaults, + tokenAbi: 'asset', + balanceAbi: 'totalAssets', + }), +]); +module.exports['ethereum'] = { tvl }; From 3b195b06e659f09a2f85512332b5ef6fc562d4a3 Mon Sep 17 00:00:00 2001 From: Paul Razvan Berg Date: Mon, 23 Dec 2024 09:11:04 +0400 Subject: [PATCH 1588/1768] Sablier updates (#12815) --- projects/{sablier => sablier-legacy}/index.js | 35 ++++++++++--------- .../{sablier-v2 => sablier-lockup}/index.js | 34 +++++++++--------- 2 files changed, 37 insertions(+), 32 deletions(-) rename projects/{sablier => sablier-legacy}/index.js (91%) rename projects/{sablier-v2 => sablier-lockup}/index.js (98%) diff --git a/projects/sablier/index.js b/projects/sablier-legacy/index.js similarity index 91% rename from projects/sablier/index.js rename to projects/sablier-legacy/index.js index 4a1894a2d1..f5260b3156 100644 --- a/projects/sablier/index.js +++ b/projects/sablier-legacy/index.js @@ -11,6 +11,20 @@ const blacklistedTokens = [ ADDRESSES.ethereum.MKR, ] +const config = { + ethereum: { + owners: [ + "0xA4fc358455Febe425536fd1878bE67FfDBDEC59a", // v1.0.0 + "0xCD18eAa163733Da39c232722cBC4E8940b1D8888", // v1.1.0 + ] + }, + arbitrum: { owners: ['0xaDB944B478818d95659067E70D2e5Fc43Fa3eDe9'], }, + avax: { owners: ['0x73f503fad13203C87889c3D5c567550b2d41D7a4'], }, + bsc: { owners: ['0x05BC7f5fb7F248d44d38703e5C921A8c16825161'], }, + optimism: { owners: ['0x6C5927c0679e6d857E87367bb635decbcB20F31c'], }, + polygon: { owners: ['0xAC18EAB6592F5fF6F9aCf5E0DCE0Df8E49124C06'], }, +} + async function getTokens(api, owners, isVesting) { let tokens = (await Promise.all(owners.map(i => covalentGetTokens(i, api, { onlyWhitelisted: false, })))).flat().filter(i => !blacklistedTokens.includes(i)) tokens = getUniqueAddresses(tokens) @@ -20,8 +34,11 @@ async function getTokens(api, owners, isVesting) { const symbol = symbols[index]; return symbol ? { token, symbol } : null; }).filter(pair => pair !== null); - - return validTokens.filter(token => isWhitelistedToken(token.symbol, token.token, isVesting)).map(token => token.token); + // Filter vesting tokens + const whitelistedTokens = validTokens.filter(token => { + return isWhitelistedToken(token.symbol, token.token, isVesting); + }); + return whitelistedTokens.map(token => token.token); } async function tvl(api) { @@ -54,20 +71,6 @@ module.exports = { } }; -const config = { - ethereum: { - owners: [ - "0xA4fc358455Febe425536fd1878bE67FfDBDEC59a", // v1.0.0 - "0xCD18eAa163733Da39c232722cBC4E8940b1D8888", // v1.1.0 - ] - }, - arbitrum: { owners: ['0xaDB944B478818d95659067E70D2e5Fc43Fa3eDe9'], }, - avax: { owners: ['0x73f503fad13203C87889c3D5c567550b2d41D7a4'], }, - bsc: { owners: ['0x05BC7f5fb7F248d44d38703e5C921A8c16825161'], }, - optimism: { owners: ['0x6C5927c0679e6d857E87367bb635decbcB20F31c'], }, - polygon: { owners: ['0xAC18EAB6592F5fF6F9aCf5E0DCE0Df8E49124C06'], }, -} - Object.keys(config).forEach(chain => { module.exports[chain] = { tvl, vesting } }) \ No newline at end of file diff --git a/projects/sablier-v2/index.js b/projects/sablier-lockup/index.js similarity index 98% rename from projects/sablier-v2/index.js rename to projects/sablier-lockup/index.js index 25f8db886f..590012a459 100644 --- a/projects/sablier-v2/index.js +++ b/projects/sablier-lockup/index.js @@ -1,6 +1,23 @@ const { isWhitelistedToken } = require('../helper/streamingHelper') const { cachedGraphQuery } = require('../helper/cache') +const config = { + arbitrum: { endpoints: ['8BnGPBojHycDxVo83LP468pUo4xDyCQbtTpHGZXR6SiB'], }, + base: { endpoints: ['3pxjsW9rbDjmZpoQWzc5CAo4vzcyYE9YQyTghntmnb1K'], }, + blast: { endpoints: ['BXoC2ToMZXnTmCjWftQRPh9zMyM7ysijMN54Nxzb2CEY'], }, + avax: { endpoints: ['FdVwZuMV43yCb1nPmjnLQwmzS58wvKuLMPzcZ4UWgWAc'], }, + era: { endpoints: ['GY2fGozmfZiZ3xF2MfevohLR4YGnyxGxAyxzi9zmU5bY'], }, + bsc: { endpoints: ['BVyi15zcH5eUg5PPKfRDDesezMezh6cAkn8LPvh7MVAF'], }, + ethereum: { endpoints: ['5EgaXheiBXZBCkepyGUYAu8pN31Dkbh7bpGtnLPqaT5m'], }, + linea: { endpoints: ['FoJnatzCZKyp9XjZyUBaw1juTb5ydnFvJvWUxS3oRCHZ'], }, + mode: { endpoints: ['5ezGnVwNucVTW45WCb91VBiKBEdiqT4ceHDhh1KGigYG'], }, + optimism: { endpoints: ['6e6Dvs1yDpsWDDREZRqxGi54SVdvTNzUdKpKJxniKVrp'], }, + polygon: { endpoints: ['CsDNYv9XPUMP8vufuwDVKQrVhsxhzzRHezjLFFKZZbrx'], }, + scroll: { endpoints: ['HVcngokCByfveLwguuafrBC34xB65Ne6tpGrXHmqDSrh'], }, + xdai: { endpoints: ['EXhNLbhCbsewJPx4jx5tutNXpxwdgng2kmX1J7w1bFyu'], }, +} + + async function getTokensConfig(api, isVesting) { const ownerTokens = [] const { endpoints } = config[api.chain] @@ -14,6 +31,7 @@ async function getTokensConfig(api, isVesting) { const owners = contracts.map(i => i.address) let tokens = assets.map(i => i.id) const symbols = assets.map(i => i.symbol) + // Filter vesting tokens tokens = tokens.filter((v, i) => isWhitelistedToken(symbols[i], v, isVesting)) owners.forEach(owner => ownerTokens.push([tokens, owner])) } @@ -29,22 +47,6 @@ async function vesting(api) { return api.sumTokens(await getTokensConfig(api, true)) } -const config = { - ethereum: { endpoints: ['5EgaXheiBXZBCkepyGUYAu8pN31Dkbh7bpGtnLPqaT5m'], }, - arbitrum: { endpoints: ['8BnGPBojHycDxVo83LP468pUo4xDyCQbtTpHGZXR6SiB'], }, - bsc: { endpoints: ['BVyi15zcH5eUg5PPKfRDDesezMezh6cAkn8LPvh7MVAF'], }, - xdai: { endpoints: ['EXhNLbhCbsewJPx4jx5tutNXpxwdgng2kmX1J7w1bFyu'], }, - optimism: { endpoints: ['6e6Dvs1yDpsWDDREZRqxGi54SVdvTNzUdKpKJxniKVrp'], }, - polygon: { endpoints: ['CsDNYv9XPUMP8vufuwDVKQrVhsxhzzRHezjLFFKZZbrx'], }, - avax: { endpoints: ['FdVwZuMV43yCb1nPmjnLQwmzS58wvKuLMPzcZ4UWgWAc'], }, - base: { endpoints: ['3pxjsW9rbDjmZpoQWzc5CAo4vzcyYE9YQyTghntmnb1K'], }, - blast: { endpoints: ['BXoC2ToMZXnTmCjWftQRPh9zMyM7ysijMN54Nxzb2CEY'], }, - scroll: { endpoints: ['HVcngokCByfveLwguuafrBC34xB65Ne6tpGrXHmqDSrh'], }, - era: { endpoints: ['GY2fGozmfZiZ3xF2MfevohLR4YGnyxGxAyxzi9zmU5bY'], }, - mode: { endpoints: ['5ezGnVwNucVTW45WCb91VBiKBEdiqT4ceHDhh1KGigYG'], }, - linea: { endpoints: ['FoJnatzCZKyp9XjZyUBaw1juTb5ydnFvJvWUxS3oRCHZ'], }, -} - Object.keys(config).forEach(chain => { module.exports[chain] = { tvl, vesting } }) From 7a85190a3abda322ebf40ae3a05d40bd2d0e90b2 Mon Sep 17 00:00:00 2001 From: NeutralTrade Date: Mon, 23 Dec 2024 18:55:19 +0800 Subject: [PATCH 1589/1768] Neutral.trade adapter (#12674) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/chain/rpcProxy.js | 6 ++ projects/neutral-trade/constants.js | 123 ++++++++++++++++++++++++++++ projects/neutral-trade/index.js | 17 ++++ 3 files changed, 146 insertions(+) create mode 100644 projects/neutral-trade/constants.js create mode 100644 projects/neutral-trade/index.js diff --git a/projects/helper/chain/rpcProxy.js b/projects/helper/chain/rpcProxy.js index a1dd3ce6e6..ee05f6104b 100644 --- a/projects/helper/chain/rpcProxy.js +++ b/projects/helper/chain/rpcProxy.js @@ -20,6 +20,12 @@ module.exports = { return data } }, + drift: { + vaultTvl: async (vault, version) => { + const { data } = await client.get('/drift/vault_tvl', { params: { vault, version } }) + return data + } + }, injective: { mitoVaultQuery: async ({ address }) => { const { data } = await client.get('/injective/mito-vault/' + address) diff --git a/projects/neutral-trade/constants.js b/projects/neutral-trade/constants.js new file mode 100644 index 0000000000..17c9b3eaab --- /dev/null +++ b/projects/neutral-trade/constants.js @@ -0,0 +1,123 @@ +const DATA_URL = 'https://raw.githubusercontent.com/neutral-trade/vaults-data/main'; + +const START_TIMESTAMP = 1730419200; // 2024-11-01 + + +const TOKENS = { + USDC: { + name: 'USDC', + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + decimals: 6 + }, + SOL: { + name: 'SOL', + mint: 'So11111111111111111111111111111111111111112', + decimals: 9 + }, + WBTC: { + name: 'Wrapped BTC (Wormhole) (WBTC)', + mint: '3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh', + decimals: 8 + }, + WETH: { + name: 'Wrapped ETH (Wormhole) (WETH)', + mint: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs', + decimals: 8 + } +}; + +const VAULTS = [ + { + name: "USDC Basis (Perps Basket)", + address: "4cvgasNfbJ36yeMVJSkscgL2Yco9dFGdj52Wrg91fmHv", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/btcethfunding.json` + }, + { + name: "BTC Super Staking", + address: "BVddkVtFJLCihbVrtLo8e3iEd9NftuLunaznAxFFW8vf", + token: TOKENS.WBTC, + dataUrl: `${DATA_URL}/btcjlpnl.json` + }, + { + name: "ETH Super Staking", + address: "ENr5e1BMN5vFUHf4iCCPzR4GjWCKgtHnQcdniRQqMdEL", + token: TOKENS.WETH, + dataUrl: `${DATA_URL}/ethjlpnl.json` + }, + // { + // name: "USDC Staking (JLP Delta Neutral)", + // address: "9Fcn3Fd4d5ocrb12xCUtEvezxcjFEAyHBPfrZDiPt9Qj", + // token: TOKENS.USDC, + // dataUrl: `${DATA_URL}/jlpdn.json`, + // version: 1, + // }, + { + name: "USDC Staking (JLP Delta Neutral) v2", + address: "41Y8C4oxk4zgJT1KXyQr35UhZcfsp5mP86Z2G7UUzojU", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/jlpdnv2.json` + }, + { + name: "USDC Basis (Sanctum-INF)", + address: "CxL8eQmGhN9LKSoHj7bU95JekFPtyZoUc57mbehb5A56", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/solbasis.json` + }, + { + name: "SOL Super Staking", + address: "EuSLjg23BrtwYAk1t4TFe5ArYSXCVXLBqrHRBfWQiTeJ", + token: TOKENS.SOL, + dataUrl: `${DATA_URL}/soljlpnl.json` + }, + { + name: "JLP Traders Print", + address: "85XuR4kE5yxp1hk91WHAawinXZsuJowxy59STYYpM9pK", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/tradersprint.json` + }, + { + name: "JLP Traders Rekt", + address: "2r81MPMDjGSrbmGRwzDg6aqhe3t3vbKcrYfpes5bXckS", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/tradersrekt.json` + }, + { + name: "vip01", + address: "CZU38L2NyL6tqFxzYAGYkmkf2JG98tZfZ2CnUapVgXQe", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/vip01.json` + }, + { + name: "vip02", + address: "DUW6uWcrsjYmsYDjp9iGDN4JdRa2MqznjuxjKVok5Fsj", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/vip02.json` + }, + { + name: "vip03", + address: "Fd3k4c6Dv7m9673ae87P6duQrftY9UVfwiCxngNbJrUQ", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/vip03.json` + }, + // 'vip04', // currently inactive + { + name: "vip05", + address: "9BMEyctGvajEubk5iCRBnM9fkeTXUhrxaweYq34jZdC8", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/vip05.json` + }, + { + name: "vip06", + address: "6DFDj66PbPoTC16Sh51MJijoTTMYCbMCVC85tnc5UfQ3", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/vip06.json` + }, +]; + +module.exports = { + DATA_URL, + START_TIMESTAMP, + TOKENS, + VAULTS, +}; diff --git a/projects/neutral-trade/index.js b/projects/neutral-trade/index.js new file mode 100644 index 0000000000..6abdd85f65 --- /dev/null +++ b/projects/neutral-trade/index.js @@ -0,0 +1,17 @@ +const { VAULTS, START_TIMESTAMP } = require("./constants") +const { drift: { vaultTvl } } = require("../helper/chain/rpcProxy") + +async function tvl(api) { + for (const vault of VAULTS) { + const token_tvl = await vaultTvl(vault.address, vault.version); + api.add(vault.token.mint, token_tvl); + } +} + + +module.exports = { + start: START_TIMESTAMP, + timetravel: false, + methodology: "The combined TVL and PnL of all public and private vaults.", + solana: { tvl }, +}; From 1371b042e8bf366e48fc33a6619ac5cb155c6673 Mon Sep 17 00:00:00 2001 From: antonyzhoudl Date: Mon, 23 Dec 2024 19:20:14 +0800 Subject: [PATCH 1590/1768] remove conflict address (#12835) From ad62d3d632e3d57507dd750ebdec97aea18b868a Mon Sep 17 00:00:00 2001 From: Nghia Pham <57862573+ngfam@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:34:40 +0700 Subject: [PATCH 1591/1768] [PENDLE] Correct pendle market factory on base (#12840) --- projects/pendle/v2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pendle/v2.js b/projects/pendle/v2.js index d1eb41e6ce..69eeb16a58 100644 --- a/projects/pendle/v2.js +++ b/projects/pendle/v2.js @@ -58,7 +58,7 @@ const config = { }, base: { factories: [ - { factory: "0x5202F7477685686284b3F47B0A5334b15ea0393D", fromBlock: 22350099 }, // v3 + { factory: "0x59968008a703dC13E6beaECed644bdCe4ee45d13", fromBlock: 22350352 }, // v3 ], } }; From 1d1faa8f63546cf13f37f578c8bbf65d0f75321e Mon Sep 17 00:00:00 2001 From: Lander Date: Mon, 23 Dec 2024 19:36:17 +0800 Subject: [PATCH 1592/1768] Add Lander (#12834) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/lander/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/lander/index.js diff --git a/projects/lander/index.js b/projects/lander/index.js new file mode 100644 index 0000000000..f51e96289b --- /dev/null +++ b/projects/lander/index.js @@ -0,0 +1,5 @@ +const { compoundExports2 } = require("../helper/compound"); + +module.exports = { + bsc: compoundExports2({ comptroller: '0x344655CB08a25A7b2501CafB47CdF9490cE7fad3' }) +} From e8b4f14728e0d8ec3dde85eb85469b7bbe0a5b7b Mon Sep 17 00:00:00 2001 From: Jarekkkkk <86938582+Jarekkkkk@users.noreply.github.com> Date: Mon, 23 Dec 2024 19:40:06 +0800 Subject: [PATCH 1593/1768] [Bucket] refactoring the queries by fetching all the states from single shared object (#12832) --- projects/bucket-farm/index.js | 49 +++++++++++------------------------ 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/projects/bucket-farm/index.js b/projects/bucket-farm/index.js index 32401746d4..0ca121dd40 100644 --- a/projects/bucket-farm/index.js +++ b/projects/bucket-farm/index.js @@ -1,43 +1,24 @@ const ADDRESSES = require('../helper/coreAssets.json') const sui = require("../helper/chain/sui"); -const Degen_Pool_IDs = [ - "0x27551889fb011f613614e6e82f02cb4aa8c0563df0f66adb1112983eb6bbf07c", - "0x3e7f71a129256659d6c18d77d6e5f0dcd7e624e993c97994b4a32e39c1453fdb", - "0xab90d38384dfaf833c57ce7802d2f87efd286ffa8dddf5474323dc2f2e20f052", - "0xcec648deeb201a2e9a9943805ae6b6b719ba9ebfd744b2f9c424a7f2fa3780d7", - "0xdd23fe747d2177e82d1489d05066b8a120d5a421712a0c1198eb5555450826d1", - "0x25a4b8edb9709d30f3c0078b6e4359fa3f12c766361db8ede6670736611a9ca7", - "0x28f9d5271674dd24e9128a5c678c648f0dc58a0218cd4cbe3a68380c0c71350b", - "0x532bf24a80898a3fac521c41d216d56ee068d81939d205cabb4ddfd977dd3489", - "0x5658fe1d89cb026e6f0cba279a34189547be588c560736b8e9501b5df0ba20f3", - "0x5baa72165855665ee2931c5ff8715c9a942c869547f53d85cacb591491938220", - "0x167824936eb94620eb44e0d63c244a4fc17f334bef8dbc73d8a8fafb150ad41f", - "0x1d07b16d18cc75dcb7fbc15e39a0262bcbbd1e06aa1c8cb62dfe5d8f3c664b60", - "0x6cab0d3cc431a20d429274a21182544199db6df21593bcf6286b4fda16f4b880", - "0xf2221e1cae8a7493cafd72a834152a72ee6a90c9eedbd666ee97ab43738be3b7", - "0xfbb32d268ba51d3afd8c9fcaffc48b0e7c5bec3194da0642c09c4c16e7aaac3f", - "0xa8997c5fca8cfea92990979650e8c16074baa25db33161fe1828c1f4f0c00882", - "0xcd9d4d72995d125ce842d2a4a9c1552e39a6ae23cf4f4c4042f68ca9428eb98a", - "0xdfffbeda682d4d9db915538d4a8580f4c30e9d7eb569403af4331e2819f6d377", - "0xe2cd0560105ff1e23ed3808d483e63bb842ce0d4d517036693b835c12fa06e51", - "0xeb20a9e131dff3948556232e49d0080f74dd71990e9cc405659c47ae3d26ba9a", - "0x02a94dfbf720bcef33b680b65803cd5eabddf40b088eb565e3d81c58061eca40", - "0x4e791ee7a25bc8621bbb044b6bd681d309b4eb10a80971dc2ad837dfadbda2ac", - "0x6781c47e118bf07b30d7cb2c9825b99c1335cae72f30e1804f8c42001b81a4a9", - "0xe07e240fae827025882887218e8690b2850ac59e3773bce334780d3e17de9b38", - "0xe9f02d4b83e78dff3e47cfc095fca1b18788779d5a96c77e76816ca0eb49390a" -]; +const POINT_CENTER_ID = '0xc60fb4131a47aa52ac27fe5b6f9613ffe27832c5f52d27755511039d53908217' async function tvl(api) { - const degenPools = await sui.getObjects(Degen_Pool_IDs); - for(let degenPool of degenPools){ - const type = degenPool.type - let assetType = type.slice(type.indexOf("<"), type.indexOf(">")).split(",")[1].trim() + const pointCenter = await sui.getObject(POINT_CENTER_ID) + const poolStates = pointCenter.fields.pool_states.fields.contents.map((state)=>{ + const value = state.fields.value.fields + return{ + assetType: "0x" + value.asset_type, + totalStake: value.total_stake + } + }) - if(assetType == "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI" || assetType == "0x41ff228bfd566f0c707173ee6413962a77e3929588d010250e4e76f0d1cc0ad4::ksui::KSUI") assetType = ADDRESSES.sui.SUI - - api.add(assetType, degenPool.fields.balance) + for(const poolState of poolStates){ + let assetType = poolState.assetType + if(assetType == "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI" || assetType == "0x41ff228bfd566f0c707173ee6413962a77e3929588d010250e4e76f0d1cc0ad4::ksui::KSUI" || assetType == "0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI" || assetType == "0xfbdd50dd7bc7af482d308f8c5d8c66c23e3b59494ff92f2947b150f20b5f43fd::af_lp::AF_LP") { + assetType = ADDRESSES.sui.SUI + } + api.add(assetType, poolState.totalStake) } } From 85859522fbf010fb8234ce7ba9ca5cd665c444a0 Mon Sep 17 00:00:00 2001 From: Root Finance Date: Mon, 23 Dec 2024 12:40:36 +0100 Subject: [PATCH 1594/1768] Update TVL calculation with WOWO & EARLY Pools.js (#12831) --- projects/root-finance/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/projects/root-finance/index.js b/projects/root-finance/index.js index 42cf5917a9..f78a347648 100644 --- a/projects/root-finance/index.js +++ b/projects/root-finance/index.js @@ -31,6 +31,16 @@ const pools = [ { pool: 'component_rdx1czmq3me09q7p7g7hgsyaqctfw3he4hl6ypg6em2h7nyd2umk0dhhnq', resource: 'resource_rdx1thksg5ng70g9mmy9ne7wz0sc7auzrrwy7fmgcxzel2gvp8pj0xxfmf', + }, + // Adding WOWO Pool + { + pool: 'component_rdx1crsgd3yqvfh49599yrfpw08ezjwjuns04970mz2l4dnyxxhwzuecy5', + resource: 'resource_rdx1t4kc5ljyrwlxvg54s6gnctt7nwwgx89h9r2gvrpm369s23yhzyyzlx', + }, + // Adding EARLY Pool + { + pool: 'component_rdx1cr0pr68zxqvmfq2whn4nh22qcg2q5skdm7lt3qwvm6nfr2ccaryjsz', + resource: 'resource_rdx1t5xv44c0u99z096q00mv74emwmxwjw26m98lwlzq6ddlpe9f5cuc7s', } ]; From a20e09067f4d306773881d5fa270d50ae811a58d Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:56:40 +0000 Subject: [PATCH 1595/1768] remove wallets bitget (#12841) --- projects/bitget/index.js | 88 ++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/projects/bitget/index.js b/projects/bitget/index.js index f0f6907614..d91d15a080 100644 --- a/projects/bitget/index.js +++ b/projects/bitget/index.js @@ -202,56 +202,56 @@ const config = { ], }, ton: { - owners: [ + owners: [ //only wallets with more than 50k "UQDJlZqZfh1OQ4PY2ze4bSEBznjc8fGzkE2YiP5XLvDv1JNr", "EQCnRoi95R9jLVrPONxTWEMMCuIlHBsYZjYZW5JwtoecbRl6", - "EQC5Jj1PfKD8PmwxdBDi47mtbLahHV0Qkrs39lVl2A4nPlPC", + // "EQC5Jj1PfKD8PmwxdBDi47mtbLahHV0Qkrs39lVl2A4nPlPC", "EQAkKBTk1NuRH9wuy5qJFesfCoZMvZXa2NV9mCet3t3ndwkH", "EQDN9_DXwJA28GQnLjxCntVwvknvKes6c1tku8F5FQc3MkZo", - "EQAGQcXOz5QWPXW_faObcN7HfSx8ihstAzoQTV9ckqmrDfcQ", - "EQCUlDMK5NDVOmpbLAzGVkXfCXpmEJgKWHL4J7oHmuNkPxaH", - "EQAWLm0Xut7koqsFxI2j3YBvjI1M_tVHXFrgTysXvF4NQWu5", + // "EQAGQcXOz5QWPXW_faObcN7HfSx8ihstAzoQTV9ckqmrDfcQ", + // "EQCUlDMK5NDVOmpbLAzGVkXfCXpmEJgKWHL4J7oHmuNkPxaH", + // "EQAWLm0Xut7koqsFxI2j3YBvjI1M_tVHXFrgTysXvF4NQWu5", "EQAGR25YDiUNCr7Fw2WnEYM0g8WB1XuQi-N9Vr2w4zjDEhg5", - "EQDpwKJP-qaqTyKIkOca6VUL_FOmxX5kO8McJA4YcnrBzlwi", - "EQAzZQL6-D71tTLTFbpxRQtmHJDoP85k2Lwf0r9kLzVV2VRy", - "EQCzCMf5tPWW9iUBdYhZclSYcbBccO02Gf1ak5QB7qly5Gsl", - "EQDi0d8gazctsfO4kOYNGFtnqgyfG2tv9goFCRyMAbQKxMA3", - "EQB6DclNqfSLlo37h7441Pq3KGKI23oE0wgf7uF3N22QicZ7", - "EQCHhe9euw_STGkR0Q9DwAlh6XSPpUKXoaxRfjxf52uwvmGB", - "EQAhO2gEwgghNaSoA9qOOzDP7VGu6a8q0hADNLf0cR07zMQr", - "EQBXPf6ZSQoEFwPpd-RyQTXFuL6gvqZ4OWEiR0UcqdXEywxy", - "EQDeJRmlJ95-HUwQKL23TgIrKKbjcOT-w_wn2NlxMI-Zu6i2", - "EQAPGaGPsc-vwzQB04IyW63UkbS08btCmfD51vvHm3FQFYbg", - "EQA182-9Kw_8YCugScsCS03ln3WVvp5gZpLU7lbS3xst3GiN", - "EQDqltnjUhoZxMd022XDb8egHj2IQOlegwXD0rfJL1d8eyOZ", - "EQDY6SAYmiZ2dc3qWZkqSB1JxPgyluCBNJe5DCeUBXKVvpC8", - "EQB5AOHMT1UHXa4WBh_LL3HWqPeYMSoCNfDarrUOSSiI-2LE", - "EQBi8zmTQRJNfGhdpG2RoHqhSWhN05fH5f6YaCCom4dsAnrT", - "EQBcPW3DG9p9UG-FiOVbq6BiXAxTWRYSgwkeSHK9vAHJauTe", - "EQAMReXSXKXMgNJsiQbeUYqG_BoETp6V11p2AQ0hBalCPUvU", - "EQD7T5jBR_4NTYpyQTsbE6UTcSgM31GM-tUQsxzwWAW8XyuS", - "EQB8Nfcr7iJARqpnwHI_dowkRu9k43b8AMj-p4RJTXosLWWv", + // "EQDpwKJP-qaqTyKIkOca6VUL_FOmxX5kO8McJA4YcnrBzlwi", + // "EQAzZQL6-D71tTLTFbpxRQtmHJDoP85k2Lwf0r9kLzVV2VRy", + // "EQCzCMf5tPWW9iUBdYhZclSYcbBccO02Gf1ak5QB7qly5Gsl", + // "EQDi0d8gazctsfO4kOYNGFtnqgyfG2tv9goFCRyMAbQKxMA3", + // "EQB6DclNqfSLlo37h7441Pq3KGKI23oE0wgf7uF3N22QicZ7", + // "EQCHhe9euw_STGkR0Q9DwAlh6XSPpUKXoaxRfjxf52uwvmGB", + // "EQAhO2gEwgghNaSoA9qOOzDP7VGu6a8q0hADNLf0cR07zMQr", + // "EQBXPf6ZSQoEFwPpd-RyQTXFuL6gvqZ4OWEiR0UcqdXEywxy", + // "EQDeJRmlJ95-HUwQKL23TgIrKKbjcOT-w_wn2NlxMI-Zu6i2", + // "EQAPGaGPsc-vwzQB04IyW63UkbS08btCmfD51vvHm3FQFYbg", + // "EQA182-9Kw_8YCugScsCS03ln3WVvp5gZpLU7lbS3xst3GiN", + // "EQDqltnjUhoZxMd022XDb8egHj2IQOlegwXD0rfJL1d8eyOZ", + // "EQDY6SAYmiZ2dc3qWZkqSB1JxPgyluCBNJe5DCeUBXKVvpC8", + // "EQB5AOHMT1UHXa4WBh_LL3HWqPeYMSoCNfDarrUOSSiI-2LE", + // "EQBi8zmTQRJNfGhdpG2RoHqhSWhN05fH5f6YaCCom4dsAnrT", + // "EQBcPW3DG9p9UG-FiOVbq6BiXAxTWRYSgwkeSHK9vAHJauTe", + // "EQAMReXSXKXMgNJsiQbeUYqG_BoETp6V11p2AQ0hBalCPUvU", + // "EQD7T5jBR_4NTYpyQTsbE6UTcSgM31GM-tUQsxzwWAW8XyuS", + // "EQB8Nfcr7iJARqpnwHI_dowkRu9k43b8AMj-p4RJTXosLWWv", "EQDAflHltpSTd1j0X0ADBxyE9MSmi9sWiiLD1si4nNYYb7Kq", - "EQBAdstQfrjD8XODZjA6OL3sE64rEjDFSPSjgXdllH4EYbL_", - "EQCJCWcpv6SSYKI9XpCOM8wazXTay7Y9eJa1DjvqLrBj0DA4", - "EQBczmMu9joi0XxD36P0UDZqCmCVZ6lXkQ8EnX73Dz8bFxtS", - "EQDrU5ouMx-D_RBtqKuqPGpGvS-O4B-kUnXW-q7RulrPmAfa", - "EQCkEpUgZvV1vD4n1Zs3SSdxInEQh1QkxubbrmHonEywvJ5a", - "EQDHy0OTba2_affHgdhHNtC8DW0CjAYdM6np6HX8yjqFo1hL", - "EQA5O1iYS2jpYbP2_z0WCbWRmyiaDQ-thu-x_Jkhzu-DsnEc", - "EQCYL0iLg5WpiX2G8IBeFIGNVCy7LQ_hyf5iZ9A3ezFg5Atl", - "EQClK4F-Kyfg7-h7CFMedd4NOMQN3Q_GUXd8b1i863SAdeR3", - "EQC9yQc4ukdiARwzowoBnlQSI_t_WrW4vM3PZAJtlzmxkRGj", - "EQBCDb94YxZuR4CsuOu4G9N0pm1U6ezgOhHEBiEX2LWD2YJi", - "EQDKubNbxKBrbng_VL6CiPWG43crC3zogxRi-kSzxxPjw35F", - "EQBtm4dCmA6ee0TdGB7OM_ugptfPSJQnZ9t8lEn3333sNE0u", - "EQB9FPf68No-lbXCKDRKdswuMr1tAFdXKb5wb04CAtkTgPu7", - "EQDRb6dbCI6kvhE5Mdnp60wc7fNEU7bpTyZkvGnmOLMqv5tr", - "EQBABRMAjj3FdNo6KkeSP3wLrSL1oBPgogH_vojzNnI0ZI9l", - "EQAhwpa_TxKq4vPppejylixsCucMNrOJUUHOsEk6TP2ExnOS", - "EQDQPzhpD1ygMNgnPiD6k6d2S0FWMdJasy3Z3eOQTujARKDD", - "EQA8Q5etDAwMseoEFLPfN8xUL9wQhi3hNzs4eFlXNIuB81Tj", - "EQA70IHk3sI76igys6-kLC0TLxXo54s0qAwdbSRUOpqgneV3", + // "EQBAdstQfrjD8XODZjA6OL3sE64rEjDFSPSjgXdllH4EYbL_", + // "EQCJCWcpv6SSYKI9XpCOM8wazXTay7Y9eJa1DjvqLrBj0DA4", + // "EQBczmMu9joi0XxD36P0UDZqCmCVZ6lXkQ8EnX73Dz8bFxtS", + // "EQDrU5ouMx-D_RBtqKuqPGpGvS-O4B-kUnXW-q7RulrPmAfa", + // "EQCkEpUgZvV1vD4n1Zs3SSdxInEQh1QkxubbrmHonEywvJ5a", + // "EQDHy0OTba2_affHgdhHNtC8DW0CjAYdM6np6HX8yjqFo1hL", + // "EQA5O1iYS2jpYbP2_z0WCbWRmyiaDQ-thu-x_Jkhzu-DsnEc", + // "EQCYL0iLg5WpiX2G8IBeFIGNVCy7LQ_hyf5iZ9A3ezFg5Atl", + // "EQClK4F-Kyfg7-h7CFMedd4NOMQN3Q_GUXd8b1i863SAdeR3", + // "EQC9yQc4ukdiARwzowoBnlQSI_t_WrW4vM3PZAJtlzmxkRGj", + // "EQBCDb94YxZuR4CsuOu4G9N0pm1U6ezgOhHEBiEX2LWD2YJi", + // "EQDKubNbxKBrbng_VL6CiPWG43crC3zogxRi-kSzxxPjw35F", + // "EQBtm4dCmA6ee0TdGB7OM_ugptfPSJQnZ9t8lEn3333sNE0u", + // "EQB9FPf68No-lbXCKDRKdswuMr1tAFdXKb5wb04CAtkTgPu7", + // "EQDRb6dbCI6kvhE5Mdnp60wc7fNEU7bpTyZkvGnmOLMqv5tr", + // "EQBABRMAjj3FdNo6KkeSP3wLrSL1oBPgogH_vojzNnI0ZI9l", + // "EQAhwpa_TxKq4vPppejylixsCucMNrOJUUHOsEk6TP2ExnOS", + // "EQDQPzhpD1ygMNgnPiD6k6d2S0FWMdJasy3Z3eOQTujARKDD", + // "EQA8Q5etDAwMseoEFLPfN8xUL9wQhi3hNzs4eFlXNIuB81Tj", + // "EQA70IHk3sI76igys6-kLC0TLxXo54s0qAwdbSRUOpqgneV3", "EQDJlZqZfh1OQ4PY2ze4bSEBznjc8fGzkE2YiP5XLvDv1M6u", "EQAXl6XExQorMSzpkn_28S79OwtY_zEURRGMLS5kMStdeQng", "EQBggwBbNUqxxHhaqM6Ck-5cnBgukkjyfpyQdPNcFjQggwrJ", From b49fcf10ba9f1241284fd0347aa14bb97cc17ea4 Mon Sep 17 00:00:00 2001 From: 0xMBro Date: Mon, 23 Dec 2024 17:55:31 +0300 Subject: [PATCH 1596/1768] added dex tvl to projects/cybro (#12842) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/cybro/index.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/projects/cybro/index.js b/projects/cybro/index.js index 0e9c8b243c..5a3bf2a088 100644 --- a/projects/cybro/index.js +++ b/projects/cybro/index.js @@ -22,8 +22,31 @@ const vaults = [ '0x24e72c2c7be9b07942f6f8d3cdce995df699514d', ] +const dexes = [ + '0xe9041d3483a760c7d5f8762ad407ac526fbe144f', + '0xbfb18eda8961ee33e38678caf2bceb2d23aedfea', + '0xe472ccb182a51c589034957cd6291d0b64eaaab2', + '0x370498c028564de4491b8aa2df437fb772a39ec5', + '0xc95317e48451a97602e3ae09c237d1dd8ee83cd0', + '0x66e1bea0a5a934b96e2d7d54eddd6580c485521b', +] + async function tvl(api) { - return api.erc4626Sum2({ calls: vaults }) + const token0s = await api.multiCall({ abi: 'address:token0', calls: dexes}) + const token1s = await api.multiCall({ abi: 'address:token1', calls: dexes}) + const positionData = await api.multiCall({ abi: 'function getPositionAmounts() view returns (uint256 amount0, uint256 amount1)', calls: dexes}) + const ownerTokens = [] + dexes.forEach((dex, idx) => { + const token0 = token0s[idx] + const token1 = token1s[idx] + const { amount0, amount1 } = positionData[idx] + api.add(token0, amount0) + api.add(token1, amount1) + ownerTokens.push([[token0, token1], dex]) + }) + + await api.sumTokens({ ownerTokens }) + return api.erc4626Sum2({ calls: vaults }); } module.exports = { From f92e36b6a71073a40d83d42da5ffcc524e9d3a39 Mon Sep 17 00:00:00 2001 From: mutuarilabs Date: Mon, 23 Dec 2024 18:55:43 +0400 Subject: [PATCH 1597/1768] Updated Mutuari Pool address. (#12836) --- projects/mutuari/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/mutuari/index.js b/projects/mutuari/index.js index e7240c73e3..f79c40a92d 100644 --- a/projects/mutuari/index.js +++ b/projects/mutuari/index.js @@ -1,12 +1,12 @@ const { sumTokens2 } = require("../helper/unwrapLPs") async function tvl(api) { - const pool = await api.call({ target: '0x831fc32221924f8a6d47251327ef67ebcc5cd6dc', abi: "address:mutuariPool" }) + const pool = await api.call({ target: '0x72b674D0546fda0C9B5205178740c98398456EaE', abi: "address:mutuariPool" }) const tokens = await api.call({ target: pool, abi: "address[]:getReserves" }) return sumTokens2({ api, owner: pool, tokens,}) } async function borrowed(api) { - const [_, borrowed] = await api.call({ target: '0x831fc32221924f8a6d47251327ef67ebcc5cd6dc', abi: "function getGeneralInfo() view returns (uint256 totalSupplied, uint256 totalBorrowed)" }) + const [_, borrowed] = await api.call({ target: '0x72b674D0546fda0C9B5205178740c98398456EaE', abi: "function getGeneralInfo() view returns (uint256 totalSupplied, uint256 totalBorrowed)" }) api.addGasToken(borrowed) return sumTokens2({ api }) } From b557dac87ba9d99c64d71c13b9e26ffc87c0b06a Mon Sep 17 00:00:00 2001 From: m66260 <117136064+m66260@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:11:39 -0500 Subject: [PATCH 1598/1768] Add Base for project D8X (#12844) --- projects/d8x/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/d8x/index.js b/projects/d8x/index.js index 87622b002f..d59cde674c 100644 --- a/projects/d8x/index.js +++ b/projects/d8x/index.js @@ -5,6 +5,7 @@ const config = { polygon_zkevm: { factory: "0x900DfC161C34656a9D9c43307F92255C2aa06162" }, xlayer: { factory: "0xb24dB543749277E8625a59C061aE7574C8235475" }, arbitrum: { factory: "0x8f8BccE4c180B699F81499005281fA89440D1e95" }, + base : {factory: "0x7F3A4A9e5BB469F0F4977AA390760aF9EFCCd406"} }; async function tvl(api) { From 49595fc5797cf70879c2869cd0dc8486a59bd0c9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Dec 2024 00:44:23 +0100 Subject: [PATCH 1599/1768] track tren-finance #12843 --- projects/tren-finance/index.js | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 projects/tren-finance/index.js diff --git a/projects/tren-finance/index.js b/projects/tren-finance/index.js new file mode 100644 index 0000000000..482491b2eb --- /dev/null +++ b/projects/tren-finance/index.js @@ -0,0 +1,44 @@ +const SSL = ['0xDC4a311f0D852934d9b51C0eAc7c7e13EA1DF11b', '0xDFF4a68044eb68c60354810E9316B2B6DB88B3eb'] + +async function tvl(api) { + const stables = await api.multiCall({ abi: 'address:stable', calls: SSL }) + await api.sumTokens({ tokensAndOwners2: [stables, SSL] }) + const hyperPools = ['0xDC4a311f0D852934d9b51C0eAc7c7e13EA1DF11b'] + + const vaults = await api.multiCall({ abi: 'address:vault', calls: hyperPools }) + const vaultBalances = await api.multiCall({ abi: 'erc20:balanceOf', calls: vaults.map((v, i) => ({ target: v, params: hyperPools[i] })) }) + const vaultSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: vaults }) + const vToken0s = await api.multiCall({ abi: 'address:token0', calls: vaults }) + const vToken1s = await api.multiCall({ abi: 'address:token1', calls: vaults }) + const vTokenAmounts = await api.multiCall({ abi: 'function getTotalAmounts() view returns (uint256 total0, uint256 total1)', calls: vaults }) + + vaults.forEach((_vault, i) => { + const token0 = vToken0s[i] + const token1 = vToken1s[i] + const { total0, total1, } = vTokenAmounts[i] + const ratio = vaultBalances[i] / vaultSupplies[i] + api.add(token0, total0 * ratio) + api.add(token1, total1 * ratio) + }) + + const curvePoolVaults = ['0xDFF4a68044eb68c60354810E9316B2B6DB88B3eb'] + const curvePools = await api.multiCall({ abi: 'address:curvePool', calls: curvePoolVaults }) + const cBalances = await api.multiCall({ abi: 'erc20:balanceOf', calls: curvePools.map((v, i) => ({ target: v, params: curvePoolVaults[i] })) }) + const cSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: curvePools }) + + + for (const cPool of curvePools) { + const i = curvePools.indexOf(cPool) + const cTokens = await api.fetchList({ lengthAbi: 'N_COINS', itemAbi: 'coins', target: cPool }) + const ratio = cBalances[i] / cSupplies[i] + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: cTokens.map((v) => ({ target: v, params: cPool })) }) + for (let j=0; j Date: Tue, 24 Dec 2024 02:56:39 +0300 Subject: [PATCH 1600/1768] Added Arbitrum vaults (#12845) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/cybro/index.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/projects/cybro/index.js b/projects/cybro/index.js index 5a3bf2a088..eed091e92a 100644 --- a/projects/cybro/index.js +++ b/projects/cybro/index.js @@ -1,4 +1,4 @@ -const vaults = [ +const vaultsBlast = [ '0xe922bccf90d74f02a9d4203b377399314e008e41', '0xdccde9c6800bea86e2e91cf54a870ba3ff6faf9f', '0x0667ac28015ed7146f19b2d218f81218abf32951', @@ -22,6 +22,12 @@ const vaults = [ '0x24e72c2c7be9b07942f6f8d3cdce995df699514d', ] +const vaultsArbitrum = [ + '0x320cd9d00961fb45857a043efea77dc6b9db5d95', + '0x6f0acbaac51f3c72ddaa4edc6e20fc388d20adbc', + '0x951c846aa10cc3da45defed784c3802605f71769', +] + const dexes = [ '0xe9041d3483a760c7d5f8762ad407ac526fbe144f', '0xbfb18eda8961ee33e38678caf2bceb2d23aedfea', @@ -31,7 +37,7 @@ const dexes = [ '0x66e1bea0a5a934b96e2d7d54eddd6580c485521b', ] -async function tvl(api) { +async function tvlBlast(api) { const token0s = await api.multiCall({ abi: 'address:token0', calls: dexes}) const token1s = await api.multiCall({ abi: 'address:token1', calls: dexes}) const positionData = await api.multiCall({ abi: 'function getPositionAmounts() view returns (uint256 amount0, uint256 amount1)', calls: dexes}) @@ -46,11 +52,16 @@ async function tvl(api) { }) await api.sumTokens({ ownerTokens }) - return api.erc4626Sum2({ calls: vaults }); + return api.erc4626Sum2({ calls: vaultsBlast }); +} + +async function tvlArbitrum(api) { + return api.erc4626Sum2({ calls: vaultsArbitrum }); } module.exports = { doublecounted: true, methodology: "We calculate TVL based on the Total Supply of our proxy contracts through which users interact with vault's contracts", - blast: { tvl }, + blast: { tvl: tvlBlast }, + arbitrum: { tvl: tvlArbitrum }, }; From 01bf0295e05d613882fc2053fd68635c0fc737f3 Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 23 Dec 2024 15:57:28 -0800 Subject: [PATCH 1601/1768] Feature/additional chains (#12846) Co-authored-by: deepak --- projects/steer/index.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/projects/steer/index.js b/projects/steer/index.js index ff409d3ae8..fdaa8dca14 100644 --- a/projects/steer/index.js +++ b/projects/steer/index.js @@ -181,11 +181,34 @@ const supportedChains = [ { name: 'Zircuit', subgraphEndpoint: 'https://app.sentio.xyz/api/v1/graphql/rakesh/steer-protocol-zircuit', - headers: {'api-key': 'yu0Dep8seTmFjvlmAXN1ILNggARnx74MB' - }, + headers: {'api-key': 'yu0Dep8seTmFjvlmAXN1ILNggARnx74MB'}, chainId: 48900, identifier: 'zircuit' }, + { + name: 'Sonic', + subgraphEndpoint: 'https://api.0xgraph.xyz/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-sonic/prod/gn', + chainId: 146, + identifier: 'sonic' + }, + { + name: 'Moonbeam', + subgraphEndpoint: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-moonbeam/prod/gn', + chainId: 1284, + identifier: 'moonbeam' + }, + // { + // name: 'Sei', + // subgraphEndpoint: 'https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-v3-prod/1.0.5/gn', + // chainId: 1, // null? + // identifier: 'sei' // sei-network + // }, + { + name: 'Taiko', + subgraphEndpoint: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-taiko/1.1.1/gn', + chainId: 167000, + identifier: 'taiko' + }, ] // Fetch active vaults and associated data @todo limited to 1000 per chain From f14256a877b9c5b75611705035367dc00bdb4ea2 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 24 Dec 2024 09:33:29 +0000 Subject: [PATCH 1602/1768] cronos zk bridge --- projects/cronos-zk/index.js | 31 +++++++++++++++++++++++++++++++ projects/txBridge/index.js | 31 +++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 projects/cronos-zk/index.js diff --git a/projects/cronos-zk/index.js b/projects/cronos-zk/index.js new file mode 100644 index 0000000000..8de3a06614 --- /dev/null +++ b/projects/cronos-zk/index.js @@ -0,0 +1,31 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" +const gasQuery = '0x0000000000000000000000000000000000000001' +const gasAddress = '0x0000000000000000000000000000000000000000' +const chainId = 388 + +module.exports = { + ethereum: { + tvl: async (api) => { + const totalBalances = await sumTokens2({ + api, + owner: target, + fetchCoValentTokens: true, + }) + const balances = await api.multiCall({ + calls: [gasQuery, ...Object.keys(totalBalances)].map(token => ({ + target, params: [chainId, token.substring(token.indexOf(':') + 1)] + })), + abi: { "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "l1Token", "type": "address" }], "name": "chainBalance", "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], "stateMutability": "view", "type": "function" }, + permitFailure: true, + withMetadata: true + }) + api._balances._balances = {} + balances.map(call => { + const token = call.input.params[1] + api.add(token == gasQuery ? gasAddress : token, call.output) + }) + } + }, +}; diff --git a/projects/txBridge/index.js b/projects/txBridge/index.js index 3c27fe9844..bdb3b6df1d 100644 --- a/projects/txBridge/index.js +++ b/projects/txBridge/index.js @@ -1,16 +1,31 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); +const target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" +const gasQuery = '0x0000000000000000000000000000000000000001' +const gasAddress = '0x0000000000000000000000000000000000000000' +const chainId = 324 + module.exports = { ethereum: { - tvl: (api) => - sumTokens2({ + tvl: async (api) => { + const totalBalances = await sumTokens2({ api, - owners: [ - "0x32400084C286CF3E17e7B677ea9583e60a000324", - "0x57891966931Eb4Bb6FB81430E6cE0A03AAbDe063", - "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" - ], + owner: target, fetchCoValentTokens: true, - }), + }) + const balances = await api.multiCall({ + calls: [gasQuery, ...Object.keys(totalBalances)].map(token => ({ + target, params: [chainId, token.substring(token.indexOf(':') + 1)] + })), + abi: { "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "l1Token", "type": "address" }], "name": "chainBalance", "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], "stateMutability": "view", "type": "function" }, + permitFailure: true, + withMetadata: true + }) + api._balances._balances = {} + balances.map(call => { + const token = call.input.params[1] + api.add(token == gasQuery ? gasAddress : token, call.output) + }) + } }, }; From de48d8c27692c9b17c3a684d6a84239120448e10 Mon Sep 17 00:00:00 2001 From: NeutralTrade Date: Tue, 24 Dec 2024 18:31:52 +0800 Subject: [PATCH 1603/1768] add new Neutral.trade vaults (#12855) --- projects/neutral-trade/constants.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/projects/neutral-trade/constants.js b/projects/neutral-trade/constants.js index 17c9b3eaab..2ee6e705da 100644 --- a/projects/neutral-trade/constants.js +++ b/projects/neutral-trade/constants.js @@ -45,13 +45,13 @@ const VAULTS = [ token: TOKENS.WETH, dataUrl: `${DATA_URL}/ethjlpnl.json` }, - // { - // name: "USDC Staking (JLP Delta Neutral)", - // address: "9Fcn3Fd4d5ocrb12xCUtEvezxcjFEAyHBPfrZDiPt9Qj", - // token: TOKENS.USDC, - // dataUrl: `${DATA_URL}/jlpdn.json`, - // version: 1, - // }, + { + name: "USDC Staking (JLP Delta Neutral) v1", + //programId: "9Fcn3Fd4d5ocrb12xCUtEvezxcjFEAyHBPfrZDiPt9Qj", + address: "3Nkctq19AW7gs5hkxixUDjS9UVjmCwcNCo7rqPpub87c", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/jlpdn.json`, + }, { name: "USDC Staking (JLP Delta Neutral) v2", address: "41Y8C4oxk4zgJT1KXyQr35UhZcfsp5mP86Z2G7UUzojU", @@ -113,6 +113,12 @@ const VAULTS = [ token: TOKENS.USDC, dataUrl: `${DATA_URL}/vip06.json` }, + { + name: "vip07", + address: "HTLvAjqc6Wkzh4i4QNLHhQHZAnrtVvkGyYeyCiUWLe9b", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/vip07.json` + } ]; module.exports = { From 04461cca814d9c628bbea77e14537154fd147a64 Mon Sep 17 00:00:00 2001 From: santino <83203265+santinoYoung@users.noreply.github.com> Date: Tue, 24 Dec 2024 18:32:43 +0800 Subject: [PATCH 1604/1768] update desyn strategy rest api request (#12853) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/desyn-basisTrading/index.js | 3 ++- projects/desyn-farm/helper.js | 9 +++++---- projects/desyn-farm/index.js | 3 ++- projects/desyn-yieldAggregator/index.js | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/projects/desyn-basisTrading/index.js b/projects/desyn-basisTrading/index.js index 7cc8e8a537..f8b91bca80 100644 --- a/projects/desyn-basisTrading/index.js +++ b/projects/desyn-basisTrading/index.js @@ -7,6 +7,7 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { - tvl: getTvlFunction('strategy3', true) + // rest api type:: StrategyType3 + tvl: getTvlFunction('StrategyType3', true) } }) \ No newline at end of file diff --git a/projects/desyn-farm/helper.js b/projects/desyn-farm/helper.js index b123d9ce59..f6c67a4da3 100644 --- a/projects/desyn-farm/helper.js +++ b/projects/desyn-farm/helper.js @@ -6,10 +6,10 @@ const abi = { getBalance: "function getBalance(address) view returns (uint256)" } - +// The desyn asset arrangement needs to be requested via the rest api form async function getInfoListPool(strategy_type, chain) { - const data = await getConfig('desyn/' + strategy_type, `https://raw.githubusercontent.com/Meta-DesynLab/strategy-asset/refs/heads/main/main/${strategy_type}.json`) - return data.config[chain]?.safePools + const data = await getConfig('desyn/' + strategy_type, `https://api.desyn.io/etf/defillama/get_pool_list?strategy_type=${strategy_type}`) + return data.data.config[chain]?.safePools } // This is aSTETH, @@ -48,7 +48,8 @@ function getTvlFunction(strategy_type, isDoubleCounted) { const allBals = await api.multiCall({ abi: abi.getBalance, calls }) api.add(allTokens, allBals) - if (strategy_type === 'strategy2') + // rest api type:: StrategyType2 + if (strategy_type === 'StrategyType2') api.removeTokenBalance(leverageStaking) } } diff --git a/projects/desyn-farm/index.js b/projects/desyn-farm/index.js index 749fad3489..d296a2322c 100644 --- a/projects/desyn-farm/index.js +++ b/projects/desyn-farm/index.js @@ -11,6 +11,7 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { - tvl: getTvlFunction('strategy1', false) + // rest api type:: StrategyType1 + tvl: getTvlFunction('StrategyType1', false) } }) \ No newline at end of file diff --git a/projects/desyn-yieldAggregator/index.js b/projects/desyn-yieldAggregator/index.js index 32d14b79cc..660a093691 100644 --- a/projects/desyn-yieldAggregator/index.js +++ b/projects/desyn-yieldAggregator/index.js @@ -7,6 +7,7 @@ module.exports = { chains.forEach(chain => { module.exports[chain] = { - tvl: getTvlFunction('strategy2', true) + // rest api type:: StrategyType2 + tvl: getTvlFunction('StrategyType2', true) } }) \ No newline at end of file From e6ba99860e047e5436d0fb37e91ad693978ad457 Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Tue, 24 Dec 2024 18:32:59 +0800 Subject: [PATCH 1605/1768] add vectis vault E into tvl calculation (#12852) --- projects/vectis/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index c2980de5ea..bcf2bb46fa 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -19,9 +19,11 @@ const vaultUserAddresses = [ new PublicKey("4KvPuh1wG8j1pLnZUC5CuqTm2a41PWNtik1NwpLoRquE"), //Vault B new PublicKey("Hcs63usAc6cxWccycrVwx1mrNgNSpUZaUgFm7Lw9tSkR"), //Vault C new PublicKey("ARLwHJ3CYLkVTeW3nHvPBmGQ7SLQdhZbAkWHzYrq57rt"), //Vault D + new PublicKey("FyH3qGRQSG7AmdEsPEVDxdJJLnLhAn3CZ48acQU34LFr"), //Vault E new PublicKey("MzEPFp2LwCSMMPHLQsqfE7SN6xkPHZ8Uym2HfrH7g5P"), //Yield Compass A new PublicKey("CMiyE7M98DSPBEhQGTA6CzNodWkNuuW4y9HoocfK75nG"), //Yield Compass B new PublicKey("CnaXXuzc2S5UFSGoBRuKVNnzXBvxbaMwq6hZu5m91CAV") //LST Yield Compass + ]; From abedcf0757a47b9a240e54ebf24d4b737590aa7e Mon Sep 17 00:00:00 2001 From: maybeyonas Date: Tue, 24 Dec 2024 16:05:25 +0530 Subject: [PATCH 1606/1768] adding wsteth to swellchain tvl (#12850) --- projects/swellchain/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/swellchain/index.js b/projects/swellchain/index.js index 4dc1ccbf5b..0673aaa37d 100644 --- a/projects/swellchain/index.js +++ b/projects/swellchain/index.js @@ -4,8 +4,9 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owners: [ - "0x7aA4960908B13D104bf056B23E2C76B43c5AACc8", - "0x758E0EE66102816F5C3Ec9ECc1188860fbb87812", + "0x7aA4960908B13D104bf056B23E2C76B43c5AACc8", // L1StandardBridge + "0x758E0EE66102816F5C3Ec9ECc1188860fbb87812", // OptimismPortal2 + "0xecf3376512EDAcA4FBB63d2c67d12a0397d24121", // wstETH L1ERC20TokenBridge ], fetchCoValentTokens: true, }), From 65f38b336aa6547eca282f99d196507565a7c04b Mon Sep 17 00:00:00 2001 From: ExtraFi <110192631+ExtraFi@users.noreply.github.com> Date: Tue, 24 Dec 2024 18:40:36 +0800 Subject: [PATCH 1607/1768] Add Extra Finance Xlend (#12849) Co-authored-by: momo Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/extra-xlend/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/extra-xlend/index.js diff --git a/projects/extra-xlend/index.js b/projects/extra-xlend/index.js new file mode 100644 index 0000000000..033f5d7c16 --- /dev/null +++ b/projects/extra-xlend/index.js @@ -0,0 +1,11 @@ +const { aaveExports } = require("../helper/aave"); + +const config = { + optimism: { + dataProvider: '0xCC61E9470B5f0CE21a3F6255c73032B47AaeA9C0', + }, +} + +Object.keys(config).forEach((chain) => { + module.exports[chain] = aaveExports(chain, undefined, undefined, [config[chain].dataProvider], { v3: true }); +}); \ No newline at end of file From 4b4be7ca601fb6560e03de3b3ee06b40d31e9f8e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Dec 2024 11:45:30 +0100 Subject: [PATCH 1608/1768] track aixcb #12847 --- projects/aixcb/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/aixcb/index.js diff --git a/projects/aixcb/index.js b/projects/aixcb/index.js new file mode 100644 index 0000000000..6a81da4a4c --- /dev/null +++ b/projects/aixcb/index.js @@ -0,0 +1,25 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { staking } = require("../helper/staking"); + +// Token addresses +const AIXCB_TOKEN = "0x76C71F1703Fbf19FFdcF3051E1e684Cb9934510f"; +const WETH = ADDRESSES.base.WETH; + +// LP and staking addresses +const AERODROME_LP_TOKEN = "0x19C3c7EEfb070EE00ddE367A9768De1DF52cbE5d"; +const LP_STAKING = "0xEE5C223aD4055beE465244d8Cb344fb22DaDa570"; +const AIXCB_STAKING = "0xF5acA5c3a0B70f847dE4652AC77BD601ccFE8339"; + +async function stakingTvl(api) { + const totalStaked = await api.call({ abi: 'uint256:getTotalStaked', target: AIXCB_STAKING, }); + api.add(AIXCB_TOKEN, totalStaked); +} + +module.exports = { + methodology: 'TVL consists of aixCB tokens staked in the AIXCBStaking contract (getTotalStaked) and Aerodrome vAMM-aixCB/WETH LP tokens staked in the AIXCBLPStaking contract (totalStakedAmount).', + base: { + tvl: () => ({}), + staking: stakingTvl, + pool2: staking(LP_STAKING, AERODROME_LP_TOKEN), + }, +}; \ No newline at end of file From 5892efa5075f25341fe6926aa3fdf88d00900bb6 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 24 Dec 2024 11:02:37 +0000 Subject: [PATCH 1609/1768] more wallets bitkub (#12858) --- projects/bitkub-cex/index.js | 28 +++++++++------------- projects/helper/bitcoin-book/bitkub-cex.js | 20 ++++++++++++++++ 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/projects/bitkub-cex/index.js b/projects/bitkub-cex/index.js index de34b02ac5..cc9826be63 100644 --- a/projects/bitkub-cex/index.js +++ b/projects/bitkub-cex/index.js @@ -41,6 +41,7 @@ const config = { "addr1q9czs903atc9hmz9vf8sdrqgk33dz9hnwdgpgx98q4fsnj9t3n4wl5p8j9uqg4ewj740uupwjsv4c8p0eckuh3p0tjasl8v77f", "addr1q9xfm9pxac0vhxym802eagwmtc0aus5w5uhc0tg9rslzzhfcj99akd57ewpta8ww9wf3vp9af3psmyw62vy00tvk3yaq9c3yw6", "addr1q98xhywsa3xgu79ftrjyrfg6e2wrxfgqvepnudusw58ee6vmw0j8gzw6hmyuefah02purkfvqj6x2pz2wpjr26mr8r7qv6v2qa", + "addr1qxpah9ck505d7dvxvkvh33v5awrxv89vvjcduhfu29fr7dns6jxls0ngn2qadghy4h7dterk0gzm3y7czmh8zlsfvmesxrkkg7", ], }, base: { @@ -207,23 +208,16 @@ const config = { }, doge: { owners: [ - 'DTqm2UCi6AS1nSCo9jZ8AejZ3k1ZcF8qix', - 'A2is3pqH2jz8jcRNV2QEFnLF3FAP5hBEoB', - 'DBrNiTbgpHHeveemLNnKwNDEJwXRGGRb1L', - 'D788kYSZYsVWSoLVejipE1Q4cN8Spom5eU', - 'DNvZftCnAsfrzzfe6R3dF6Sugz7W4Qgs6b', - 'DPYV66VirzChkotHXPryAhcfvyQmeArV2y', - 'DHBERwF4LVLVwQzDtfPz9zEtKPnWW9NSDH', - 'DTWmAfdTkrtqv7GmN2vE74VTkXkgQUFRSn', - 'DDm2XmWXhq3fxHd9fUaqnbmxanaFuKSG1s', - 'DHt3teN3iNSG7rJ8GaGz5EeHYFieCf8Qin', - 'D5GmmrSZ1xDut5Nj1s4C4ncA1v3EGfbk15', - 'DNpbFixXn611Qd9SZDBDjS4NhFPAXG8t1X', - 'D7pEtDnFU3ZgTykZt54SXvGeF1YSt2PVbe', - 'DCWvgKHcs1KUDqYe55rTX8m6uaJ67gaAp5', - 'DBdkivVhGhmbBRSsbt2s55MtZ38ngs86nS', - ] - } + "A3UdEKpx5HR1hJvKKw7iVbwp6MRn3yZAiK", + "ACkC8PjakegrmPFaL12FVDPCn8HwdKzSCY", + "AAuxfoiADXxMgbZPZ42xE6TCnFnz2FK33e", + "A5XHmCEG2TbaUnCiZnganw29EsDDnUQXjj", + "A59WR7LTBiBbSx3QZbf7SwQ6q3PHnP33wK", + "A4RZ3WfKxyWDPvMkFGM2Uzo8rDd6wwBqK5", + "9tAKQbiRPJxosnuUFGivL2kP3UEEeqdnd1", + "AD7E3QXB5go9AtE2uueMr3Dw767eWi5ruy", + ], + }, }; module.exports = cexExports(config); diff --git a/projects/helper/bitcoin-book/bitkub-cex.js b/projects/helper/bitcoin-book/bitkub-cex.js index ffa3a87c4c..860ee4efe5 100644 --- a/projects/helper/bitcoin-book/bitkub-cex.js +++ b/projects/helper/bitcoin-book/bitkub-cex.js @@ -14,4 +14,24 @@ module.exports = [ "bc1que2ellarxvz4f9pa88f6etejvj9mtsmlse22k8nzygnht6h4tlvqtpk9lf", "33PkD3DjT6YYao2NbAS7bqFRy6nCTdGXBf", "18DDXRwzkWvjg87P4fk9CB5k3AC25kxBsU", + "bc1qx8mpvyhk098tnvxe67nj6tc5tf89vurxe6zluf", + "bc1q6tzshzl2f70xmrppxt565prggw897l2nx83ddpts8uqr0m3f2u4q0md0ul", + "32tgDscLHVDZ8xXjnC3QF85qYqat7SXRVN", + "bc1qmclnshk905yfhdfdnzvvzvcpdtxp88dk0mh4vw406dvcq8wjf99qazjm7n", + "bc1q5czmcet3mmkrqy3kmjl90w7dsh284gz9w2pyuzk4lhdzgf0y668sdwcyes", + "bc1q0yqgck69v4d0qf6zzrz49s8ndg9svwdjxua90afe93hkfaud3y4sqeae3c", + "bc1ql55wwe27lgus6yhjkjnuc3dapyzd0vl9349qew3kv4ngl3ne2gvq04td8x", + "3KVbHg9kPNnxrpTJ1CZkfqFsKQM5MWTTyM", + "bc1qc4q0xpeyc6fn77y4nk9hvgg5ulu8akgrswkdpa677vttl4mrrj6sv7qznw", + "bc1q8k3gnwzmplcdhhph2lxg94d8f3ny9fzdwu9ng8qfzplz4q06pg3sysqd3s", + "bc1qgyuw6rmhx6zykg3hnexgzuvkjy0lkwqjmx8m3vwrwql6v7qarpaqsxefkt", + "bc1q3923w0z09hw0kj5nnreu53ckx8jwm09kjd7uz2uqrggrhne54l0su7tml6", + "bc1ql2p9u59z2latfrf50uf33s2zh4xyp088pe4phf5p2ha0mtanxkrsl0xtae", + "bc1qzvuccq7d7z48y5990ecvxwnkwfwvdwxwjx7lg2", + "bc1q809j4zgpppx906gyk5mx7n499u7dsx3q7hmaydx4ze8pjxed0jyq32ehqj", + "bc1q8j67stj9mfse4rxmmjcy2tg44qkayqjkwwyx2yk05va5eradtftqqj4pex", + "bc1q275ytzvet94dc8szxh3pqhrnmcyn9mdsyhx93me3mxfpapwjqu4q9tl9fn", + "bc1qgdy96rwdv4x8t0plptv7756x4hlxgmra6g9nl38k2yk4k6dd766q9kc9lf", + "bc1qjpt89yyna4w9pu0l2zyv7zl0fzv7ghx6u7u2mchmg6wtyq8vdsmqdjdlu2", + "bc1q3uemzcassz2jxswh37wd0jw2l38v7yuq60cj46ftgmkpcs38xh0svv4gq9" ]; From 464d032243a3c77191a576552db47e34563c02f3 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 24 Dec 2024 11:06:26 +0000 Subject: [PATCH 1610/1768] fix bitkub (#12859) --- projects/bitkub-cex/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/projects/bitkub-cex/index.js b/projects/bitkub-cex/index.js index cc9826be63..96871b4c1d 100644 --- a/projects/bitkub-cex/index.js +++ b/projects/bitkub-cex/index.js @@ -216,6 +216,21 @@ const config = { "A4RZ3WfKxyWDPvMkFGM2Uzo8rDd6wwBqK5", "9tAKQbiRPJxosnuUFGivL2kP3UEEeqdnd1", "AD7E3QXB5go9AtE2uueMr3Dw767eWi5ruy", + 'DTqm2UCi6AS1nSCo9jZ8AejZ3k1ZcF8qix', + 'A2is3pqH2jz8jcRNV2QEFnLF3FAP5hBEoB', + 'DBrNiTbgpHHeveemLNnKwNDEJwXRGGRb1L', + 'D788kYSZYsVWSoLVejipE1Q4cN8Spom5eU', + 'DNvZftCnAsfrzzfe6R3dF6Sugz7W4Qgs6b', + 'DPYV66VirzChkotHXPryAhcfvyQmeArV2y', + 'DHBERwF4LVLVwQzDtfPz9zEtKPnWW9NSDH', + 'DTWmAfdTkrtqv7GmN2vE74VTkXkgQUFRSn', + 'DDm2XmWXhq3fxHd9fUaqnbmxanaFuKSG1s', + 'DHt3teN3iNSG7rJ8GaGz5EeHYFieCf8Qin', + 'D5GmmrSZ1xDut5Nj1s4C4ncA1v3EGfbk15', + 'DNpbFixXn611Qd9SZDBDjS4NhFPAXG8t1X', + 'D7pEtDnFU3ZgTykZt54SXvGeF1YSt2PVbe', + 'DCWvgKHcs1KUDqYe55rTX8m6uaJ67gaAp5', + 'DBdkivVhGhmbBRSsbt2s55MtZ38ngs86nS', ], }, }; From 479abdd4b0bdb02f4d7cb63981cdd31aea12af28 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 24 Dec 2024 11:15:47 +0000 Subject: [PATCH 1611/1768] pendle solvbtc --- projects/pendle/v2.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/pendle/v2.js b/projects/pendle/v2.js index 69eeb16a58..209b052a69 100644 --- a/projects/pendle/v2.js +++ b/projects/pendle/v2.js @@ -130,7 +130,11 @@ Object.keys(config).forEach((chain) => { ? 18 : decimals[i])); let index = tokenAssetTypeSy.indexOf(sy[i]); if (index !== -1) { - value = (value * exchangeRates[index]) / 10 ** 18; + value = (value * exchangeRates[index]) / 10 ** ([ + '0x141ec2d606f12ff959d7d07cde6811e5fdff2831', + '0xec30e55b51d9518cfcf5e870bcf89c73f5708f72', + '0xd5cf704dc17403343965b4f9cd4d7b5e9b20cc52' + ].includes(sy[i].toLowerCase()) ? v.decimals : 18); } api.add(v.uAsset.toLowerCase(), value); }); From 4759c353121566e80d5fe984e8079d74890c12d1 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 24 Dec 2024 12:49:29 +0000 Subject: [PATCH 1612/1768] remove duplicate + add wallets reya (#12862) --- projects/helper/bitcoin-book/chakra.js | 3 --- projects/reya-bridge/index.js | 10 +++++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/projects/helper/bitcoin-book/chakra.js b/projects/helper/bitcoin-book/chakra.js index 00ca490b99..cb266e59e8 100644 --- a/projects/helper/bitcoin-book/chakra.js +++ b/projects/helper/bitcoin-book/chakra.js @@ -82,7 +82,6 @@ module.exports = [ 'bc1pgs95cjhpq5uedepr6ghvhx9upwdmrq3c67xt2drhkv2etjjlqnsqvxsu69', 'bc1p8r84f5a6vvtl0gedshjzp4rv5mx88ra3etqch9du65fmqwglu0zst80e44', 'bc1p348nh5crmn6zj66a9k4cjmrlrkszj4vaq33sgr6jzhtpyh2qcezspgep7h', - 'bc1pane2m0z8ymreh67xkathhrst8jm4ljw53nkq3da23fmmf6gm522sf03t55', 'bc1pdhc4g25eysun4st2rhhfsusnk4ekhxp85xr2x4uq859tyxnap94sua2k4h', 'bc1phzxznmd5yqp7x07kkes6q7sjcalnyd9pjddrfhywwv23ca7994jquww9fx', 'bc1p7ekf7lt6f3alzzh8gkyjrv0xthp8r9gz28qa4wpam4lv432wn8nquwpuan', @@ -94,7 +93,6 @@ module.exports = [ 'bc1pu5wre7gar0d8tgslaeu5epj62yvx667wuaun2n589nx55xzf42csg34qsq', 'bc1plpjxvkkhj9qfuqnrjtnyvwxfm9j4rdq4jtwhu34anm8etzkyfc2s94vzw3', 'bc1p0tnltsu0qz29xluwntvvcr29aw230tdhqygwg5mru8qqhdvw580sqlznpx', - 'bc1pswxs924q5t24yvvemauja7dvwlduz0nutkq6eu0ug9ptm74kcyys4hrwpe', 'bc1pdcgcjztkqgnrhnm9xqdv87qtqhtr7vxdvpmpux8xzefeypqw39vs9a5z9j', 'bc1pkkn0trywnslz5datc3lz087rgzd8z9644svwykpl2983lzkw9xyqspd2d5', 'bc1pl30rp47rlxrfrtlplzz94kt7g2cr9lhjcygwfjp3tqqt0td7arwq5e25wg', @@ -1927,7 +1925,6 @@ module.exports = [ 'bc1pqgexvgnln9g3jv9cdk5gfuwk94qx0cazx55fndzks0gjpd0hjctsuqc3al', 'bc1p2yxq7kzue2nmlu92gezng4z32x6g5ka7k6trftj8a42zl9c64jgshkqm58', 'bc1pkd9arump85yy9nyjng3lgm0272y8ne44z3j65v3k3r8pyzv37zmqp4apgk', - 'bc1p5ls64xdx47r20ygvewucs05q003cttwuwj7t2uvauypf0aeny0fsu7kwum', 'bc1ppw9czgjcmk3t38xezc4me90dq6e7yyf2gt00mnn5q4c5esv6l9csh563qn', 'bc1p3fc28a90j6ayx0snpfwkc98447xdvqv6euv6rswt4dd22yxmx32s38yzk3', 'bc1psen0kgkez4n0jpekukflet2yqmjm8gq5vqcdxdv69lm6szld8q0sz0a5t6', diff --git a/projects/reya-bridge/index.js b/projects/reya-bridge/index.js index 759eab1cbe..5c52fe787d 100644 --- a/projects/reya-bridge/index.js +++ b/projects/reya-bridge/index.js @@ -20,8 +20,9 @@ module.exports = { owners: [ "0x9239609eED7c40C6DDcEC25D247Ef205103590B6", // usdc vault "0xAd7bdD85fdA879fe7771A2546939972F202C1BaE", // eth vault + "0xCbEcd69ceFA64F55b72F8ac288FC5c452819B608" // usdc vault 2 ], - tokens: [ADDRESSES.optimism.USDC, ADDRESSES.optimism.WETH], + tokens: [ADDRESSES.optimism.USDC, ADDRESSES.optimism.WETH, ADDRESSES.optimism.USDC_CIRCLE], }), }, polygon: { @@ -31,8 +32,10 @@ module.exports = { owners: [ "0xC0acBb471465FCf848746D1837d8358aB891546c", // usdc vault "0x72384be7092144cD9a57526B486827E4eA632351", // eth vault + "0xBC31ec84bd7BC2c97B9413F6E473cE96Be153a25" // usdc vault 2 + ], + tokens: [ADDRESSES.polygon.USDC, ADDRESSES.polygon.WETH, ADDRESSES.polygon.USDC_CIRCLE ], - tokens: [ADDRESSES.polygon.USDC, ADDRESSES.polygon.WETH], }), }, base: { @@ -53,8 +56,9 @@ module.exports = { owners: [ "0xa0E9B6DA89BD0303A8163B81B8702388bE0Fde77", // usdc vault "0xD7BBE2f6D1B52A27D2dAC28298DE3974a3d13047", // eth vault + "0x11B3a7E08Eb2FdEa2745e4CB64648b10B28524A8" // usdc vault 2 ], - tokens: [ADDRESSES.arbitrum.USDC, ADDRESSES.arbitrum.WETH], + tokens: [ADDRESSES.arbitrum.USDC, ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.USDC_CIRCLE], }), }, }; From ba03fd3990f73527738355c6e3da9e13b9e54fc8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 24 Dec 2024 18:00:44 +0100 Subject: [PATCH 1613/1768] zeebu: track pool2 #12863 --- projects/zeebu/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/zeebu/index.js b/projects/zeebu/index.js index 4a7ed172a7..eb559cc0ae 100644 --- a/projects/zeebu/index.js +++ b/projects/zeebu/index.js @@ -18,4 +18,6 @@ Object.keys(VOTING_ESCROW_ADDRESSES).forEach(chain => { tvl: () => ({}), staking: staking(VOTING_ESCROW_ADDRESSES[chain], ZBU_ADDRESSES[chain]) } -}) \ No newline at end of file +}) + +module.exports.base.pool2 = staking('0x45dd22aCe398002b34cB37b363B2F02C7dd47842', '0xC3889F9764d68BDF2e16f237206746344172A147') \ No newline at end of file From b07b36f7b0e45a04f8cabedcee4510ec29b0f2c8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Dec 2024 11:04:50 +0100 Subject: [PATCH 1614/1768] track bitzip: #12866 --- projects/bitzap/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/bitzap/index.js diff --git a/projects/bitzap/index.js b/projects/bitzap/index.js new file mode 100644 index 0000000000..7813e05738 --- /dev/null +++ b/projects/bitzap/index.js @@ -0,0 +1,16 @@ + +const config = { + btr: { factory: '0xe4fb0d76c7ba28dd4d115ff63c0b14d8d7f9838a', }, +} + +Object.keys(config).forEach(chain => { + const { factory, } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const pools = await api.fetchList({ lengthAbi: 'pool_count', itemAbi: 'pool_list', target: factory }) + const tokens = await api.multiCall({ abi: 'function get_coins(address) view returns (address[])', calls: pools, target: factory }) + const ownerTokens = pools.map((p, i) => [tokens[i], p]) + return api.sumTokens({ ownerTokens, blacklistedTokens: pools }) + } + } +}) \ No newline at end of file From 3c05eca3bb76b889e7877a41b58a830f357ebee0 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Wed, 25 Dec 2024 09:42:34 -0700 Subject: [PATCH 1615/1768] List new market of Avalon DeFi Lending (#12865) --- projects/avalon-finance/index.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index 457adca3f7..de30b159c4 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -3,6 +3,8 @@ const { aaveExports } = require('../helper/aave') const methodologies = require('../helper/methodologies') const { mergeExports } = require('../helper/utils') + + //@note Main & Innovative Markets const mainMarket = { merlin: aaveExports('', '0x6aB5d5E96aC59f66baB57450275cc16961219796', undefined, ['0x5F314b36412765f3E1016632fD1Ad528929536CA'], {v3: true}), @@ -14,6 +16,8 @@ const mainMarket = { mode: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), klaytn: aaveExports('', '', undefined, ['0xddD3D480521bc027596e078BCd1b838d50Daa076'], { v3: true }), // Kaia V3 Main zeta: aaveExports('', '', undefined, ['0xA34F1a928024E3609C8968fEA90C747e8D1fA20f'], { v3: true }), // Zetachain V3 Main + corn: aaveExports('', '', undefined, ['0x56552f4407113894Bfce34b5b88C57b941AFc519'], { v3: true }), // Corn V3 Main + duckchain: aaveExports('', '', undefined, ['0x100AC26ad2c253B18375f1dC4BC0EeeB66DEBc88'], { v3: true }), // Duckchain V3 Main } const innovativeMarket = { @@ -34,6 +38,8 @@ const pumpBTCMarkets = { ethereum: aaveExports('', '0xE00A3FE97714765A1a2054E850724Fd1320FaCc0', undefined, ['0x2eE0438BCC1876cEA2c6fc43dD21417cF3D1c2eF'], { v3: true }), bsc: aaveExports('', '0xb1C93Ba1286b6CCA1496C266f0eBfCe94b0C0cc0', undefined, ['0x58c937fa2D147117dB43d187f9411151edfFf03c'], { v3: true }), zeta: aaveExports('', '', undefined, ['0xC5b05b7092257Ee3eEAf013198d30F1E8179B6C9'], { v3: true }), + arbitrum: aaveExports('', '', undefined, ['0x2c4aEB7C9f0D196a51136B3c7bec49cB2DBD1966'], { v3: true }), + corn: aaveExports('', '', undefined, ['0x867885c1dB3020E25A86Db7e20E35dC7b81d76A2'], { v3: true }), } const unibtcMarkets = { @@ -41,6 +47,7 @@ const unibtcMarkets = { btr: aaveExports('', '', undefined, ['0x898D0EF6E20B7597728AEB41169c22608Fe4b234'], { v3: true }), bsc: aaveExports('', '', undefined, ['0xF828A73cB00072843241C6294ed778F26854fe5C'], { v3: true }), mode: aaveExports('', '', undefined, ['0x8F016F5dac399F20B34E35CBaF1dFf12eeE2dE74'], { v3: true }), + iotex: aaveExports('', '', undefined, ['0x28292e1ca36e400FB7d0B66AaA99EB808E3Cb8cB'], { v3: true }), } const stbtcMarkets = { @@ -53,6 +60,12 @@ const otherProtocolTokenMarkets = { ethereum: aaveExports('', '0x3975BE5E668b189b8Ac9049B96A9D9561c4F5273', undefined, ['0x87Ed94868f6fbaA834Db81a1C5854c445caCaB67'], { v3: true }), // BSC - WBTC bsc: aaveExports('', '', undefined, ['0xA34F1a928024E3609C8968fEA90C747e8D1fA20f'], { v3: true }), + // Kaia - stKaia + klaytn: aaveExports('', '', undefined, ['0x276c5119f63119921667842dA3B71EE10Ac486eA'], { v3: true }), + // Sonic - beetSonic + sonic: aaveExports('', '', undefined, ['0x28350E38f241d7F24106CE5eaB1684D6ebEB4700'], { v3: true }), + // Duckchain - MBTC + duckchain: aaveExports('', '', undefined, ['0x912b425D867a09608A884C83b3D5075E9037Aa6a'], { v3: true }), } const obtcMarkets = { @@ -69,13 +82,18 @@ const xaumMarkets = { const lbtcMarkets = { bsc: aaveExports('', '', undefined, ['0x5b9b3C211B81627Cc6b46824CB26829F31A587dc'], { v3: true }), + corn: aaveExports('', '', undefined, ['0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'], { v3: true }), } const listaMarkets = { bsc: aaveExports('', '', undefined, ['0x5157f63bE7808DEB090Eee7762e917745896A09E'], { v3: true }), // BSC - ListaDAO } +const uniIotxMarkets = { + iotex: aaveExports('', '', undefined, ['0x2c4aEB7C9f0D196a51136B3c7bec49cB2DBD1966'], { v3: true }), +} + module.exports = mergeExports( - mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, + mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, uniIotxMarkets ) module.exports.methodology = methodologies.lendingMarket From 78ee89842b97ccc0f213c3097d42da749e1ac052 Mon Sep 17 00:00:00 2001 From: dusan-mrsic <51543421+dusan-mrsic@users.noreply.github.com> Date: Wed, 25 Dec 2024 18:11:24 +0100 Subject: [PATCH 1616/1768] feature: update chi-protocol tvl data (#12870) --- projects/chi-protocol/index.js | 9 ++++----- projects/helper/coreAssets.json | 1 + 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/chi-protocol/index.js b/projects/chi-protocol/index.js index 117d14ce92..b2da5f975e 100644 --- a/projects/chi-protocol/index.js +++ b/projects/chi-protocol/index.js @@ -2,14 +2,13 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs'); const { pool2s } = require("../helper/pool2"); -const RESERVE_HOLDER = '0x037528457Cf5b0b9DAb641Fd7F0Ce8Fc9690318d'; -const USC_STAKING = '0x60aBb55c8488698153dB0AF2af362EdB25A505e3'; +const RESERVE_HOLDER = '0xc36303ef9c780292755B5a9593Bfa8c1a7817E2a'; const CHI_STAKING = '0xaB1dCa1C0f948c268652eedC676966002Ae241c6'; const CHI_LOCKING = '0xE3dD17ff009bAC84e32130fcA5f01C908e956603'; const CHI_VESTING = '0x426DBAa2B33cE1B833C13b72503F5128AFef79fC'; const STETH = ADDRESSES.ethereum.STETH; const WETH = ADDRESSES.ethereum.WETH -const USC = '0x38547D918b9645F2D94336B6b61AEB08053E142c'; +const WEETH = ADDRESSES.ethereum.WEETH; const CHI = '0x3b21418081528845a6DF4e970bD2185545b712ba'; const stakingPool2Contracts = [ @@ -25,14 +24,14 @@ async function tvl(api) { const owner = RESERVE_HOLDER; const tokens = [ STETH, - WETH + WETH, + WEETH, ]; return sumTokens2({ owner, tokens, api }) } async function staking(api) { const tokensAndOwners = [ - // [USC, USC_STAKING], [CHI, CHI_STAKING], [CHI, CHI_LOCKING] ]; diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index ab8ef93df0..58df64f120 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -4,6 +4,7 @@ "WETH": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "WSTETH": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", "STETH": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84", + "WEETH": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", "sfrxETH": "0xac3e018457b222d93114458476f3e3416abbe38f", "USDC": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "LINK": "0x514910771af9ca656af840dff83e8264ecf986ca", From 59af8cf051560f8299ddb00b0ed0d9e5ab572a0d Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Thu, 26 Dec 2024 01:12:43 +0800 Subject: [PATCH 1617/1768] add StakeStone Berachain Vault (#12869) --- projects/stakestone-berastone/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/stakestone-berastone/index.js diff --git a/projects/stakestone-berastone/index.js b/projects/stakestone-berastone/index.js new file mode 100644 index 0000000000..a72cb080b1 --- /dev/null +++ b/projects/stakestone-berastone/index.js @@ -0,0 +1,16 @@ +const vaultABI = { + "getUnderlyings": "function getUnderlyings() external view returns (address[])" +} + +const Vault = '0x8f88aE3798E8fF3D0e0DE7465A0863C9bbB577f0'; + +const Tvl = async (api) => { + const underlyings = await api.call({ abi: vaultABI.getUnderlyings, target: Vault }) + return api.sumTokens({ owner: Vault, tokens: underlyings }) +} + +module.exports = { + ethereum: { + tvl: Tvl, + } +} From d416c5a2ce69ccc4eef076d7507b43d302294d50 Mon Sep 17 00:00:00 2001 From: Akarsh Maurya Date: Thu, 26 Dec 2024 00:13:17 +0700 Subject: [PATCH 1618/1768] Added eth adapter (#12871) --- projects/velvet-capital-v3/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/velvet-capital-v3/index.js b/projects/velvet-capital-v3/index.js index 4e748c2082..d5730c9809 100644 --- a/projects/velvet-capital-v3/index.js +++ b/projects/velvet-capital-v3/index.js @@ -3,7 +3,8 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const config = { base: { address: '0xf93659fb357899e092813bc3a2959ceDb3282a7f', blacklistedTokens: [ADDRESSES.bsc.USDT, "0x96af5739ca66ca55ab71ac9f308720d5044995ee","0xca4f1536cd29d42bcbc8211f1b621ba9e817433f"]}, - bsc: { address: '0xA1fe1C37Bf899C7F7521082C002dFA4fEbAaA8dd', blacklistedTokens: [ADDRESSES.optimism.WETH_1] } + bsc: { address: '0xA1fe1C37Bf899C7F7521082C002dFA4fEbAaA8dd', blacklistedTokens: [ADDRESSES.optimism.WETH_1] }, + ethereum: { address: '0x7c530c9ED5E734964453Ce62Ae9C4e31a247738B'} } const abi = { From 28670d33aa4929e80d45330988afc5579f94ce60 Mon Sep 17 00:00:00 2001 From: kevin gondokusumo Date: Thu, 26 Dec 2024 14:44:02 +0800 Subject: [PATCH 1619/1768] feat: add mach fi comptroller and cether --- projects/machfi/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/machfi/index.js diff --git a/projects/machfi/index.js b/projects/machfi/index.js new file mode 100644 index 0000000000..afdcbd436b --- /dev/null +++ b/projects/machfi/index.js @@ -0,0 +1,5 @@ +const { compoundExports2 } = require('../helper/compound') + +module.exports = { + sonic: compoundExports2({comptroller: '0xxx', cether: '0xxx'}), +} From e46402621d890c4b6edebd745c087dc0fc7884d0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:53:56 +0100 Subject: [PATCH 1620/1768] Add Pryzm Protocol TVL adapter (#12877) Co-authored-by: MadReza --- projects/helper/chain/cosmos.js | 1 + projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 2 +- projects/pryzm/index.js | 77 +++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 projects/pryzm/index.js diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index e625c8edba..50b4ad6e81 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -46,6 +46,7 @@ const endPoints = { kopi: "https://rest.kopi.money", noble: "https://noble-api.polkachu.com", elys: "https://api.elys.network", // https://api.elys.network/#/Query/ElysAmmPoolAll + pryzm: "https://api.pryzm.zone" }; const chainSubpaths = { diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 56a633fc25..8ded60ebd3 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -269,6 +269,7 @@ "pool2", "posi", "proton", + "pryzm", "pulse", "q", "qom", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index e5dae07fe4..f1f7caf85b 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -19,7 +19,7 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru', - 'kopi', 'elys', + 'kopi', 'elys', "pryzm" ] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', diff --git a/projects/pryzm/index.js b/projects/pryzm/index.js new file mode 100644 index 0000000000..4eaa3969ea --- /dev/null +++ b/projects/pryzm/index.js @@ -0,0 +1,77 @@ +const { get } = require('../helper/http') +const { endPoints, } = require('../helper/chain/cosmos'); + +const host_chains = { + cosmos: { + hostChainId: "uatom", + coinGeckoId: "cosmos", + decimals: 1e6, + }, + + injective: { + hostChainId: "inj", + coinGeckoId: "injective-protocol", + decimals: 1e18, + }, + + osmosis: { + hostChainId: "uosmo", + coinGeckoId: "osmosis", + decimals: 1e6, + }, + + terra2: { + hostChainId: "uluna", + coinGeckoId: "terra-luna-2", + decimals: 1e6, + }, + + celestia: { + hostChainId: "utia", + coinGeckoId: "celestia", + decimals: 1e6, + }, +}; + +const endpoint = endPoints["pryzm"] +const amm_vault_address = "pryzm1y7d08j5uy7kgurnv4pwag8h34m2cgptcwe75wn"; + +function tvlOnChain(chain) { + return async (api) => { + const [{ amount: coin }, { host_chain_state: state }] = + await Promise.all([ + await get(`${endpoint}/cosmos/bank/v1beta1/supply/by_denom?denom=c:${chain.hostChainId}`), + await get(`${endpoint}/pryzm/icstaking/v1/host_chain_state/${chain.hostChainId}`), + ]); + + const balance = coin.amount * state.exchange_rate / chain.decimals + api.addCGToken(chain.coinGeckoId, balance) + }; +} + +async function tvl(api) { + const { balances: data } = + await get(`${endpoint}/cosmos/bank/v1beta1/balances/${amm_vault_address}?pagination.limit=1000`); + + for (const { denom, amount } of data) { + if (denom.startsWith("c:") || + denom.startsWith("p:") || + denom.startsWith("y:") || + denom.startsWith("lp:") + ) { + continue + } + api.add(denom, amount); + } +} + +module.exports = { + methodology: "Counts the liquidity on liquid staking module and all AMM pools", + pryzm: { + tvl + }, +}; + +for (const chainName of Object.keys(host_chains)) { + module.exports[chainName] = { tvl: tvlOnChain(host_chains[chainName]) }; +} \ No newline at end of file From 94c810c0fb8eec12a87d37563c303a6fcc7d538f Mon Sep 17 00:00:00 2001 From: Alex <163602313+alexcarterdev@users.noreply.github.com> Date: Thu, 26 Dec 2024 13:44:52 +0300 Subject: [PATCH 1621/1768] add Orbs TVL adapter (#12878) Co-authored-by: alexcarterdev --- projects/orbs/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/orbs/index.js diff --git a/projects/orbs/index.js b/projects/orbs/index.js new file mode 100644 index 0000000000..924664ef4f --- /dev/null +++ b/projects/orbs/index.js @@ -0,0 +1,11 @@ +const { staking } = require('../helper/staking'); + +module.exports = { + ethereum: { + tvl: () => ({}), + staking: staking( + '0x01d59af68e2dcb44e04c50e05f62e7043f2656c3', + '0xff56Cc6b1E6dEd347aA0B7676C85AB0B3D08B0FA' + ), + }, +}; From 3e9d5148ea2ef24189a10b9e87639ac2efaa8bd4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Dec 2024 12:24:19 +0100 Subject: [PATCH 1622/1768] pryzm: add workaround for IBC denom clashing --- projects/pryzm/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/pryzm/index.js b/projects/pryzm/index.js index 4eaa3969ea..be25fec293 100644 --- a/projects/pryzm/index.js +++ b/projects/pryzm/index.js @@ -61,7 +61,10 @@ async function tvl(api) { ) { continue } - api.add(denom, amount); + if (denom === 'ibc/DA59C009A0B3B95E0549E6BF7B075C8239285989FF457A8EDDBB56F10B2A6986') + api.addCGToken('terra-luna-2', amount/1e6) + else + api.add(denom, amount); } } From b41af577b30ca9167dc01d595cd75f09ce84be88 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Dec 2024 12:26:40 +0100 Subject: [PATCH 1623/1768] pryzm: add workaround for IBC denom clashing --- projects/pryzm/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pryzm/index.js b/projects/pryzm/index.js index be25fec293..22f541c9f6 100644 --- a/projects/pryzm/index.js +++ b/projects/pryzm/index.js @@ -61,7 +61,7 @@ async function tvl(api) { ) { continue } - if (denom === 'ibc/DA59C009A0B3B95E0549E6BF7B075C8239285989FF457A8EDDBB56F10B2A6986') + if (denom === 'ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395') api.addCGToken('terra-luna-2', amount/1e6) else api.add(denom, amount); From 979ceac40ed8c402c26772f43715178597b5d1ca Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:47:32 +0000 Subject: [PATCH 1624/1768] add wallet reya (#12881) --- projects/reya-bridge/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/reya-bridge/index.js b/projects/reya-bridge/index.js index 5c52fe787d..39287b0152 100644 --- a/projects/reya-bridge/index.js +++ b/projects/reya-bridge/index.js @@ -34,8 +34,7 @@ module.exports = { "0x72384be7092144cD9a57526B486827E4eA632351", // eth vault "0xBC31ec84bd7BC2c97B9413F6E473cE96Be153a25" // usdc vault 2 ], - tokens: [ADDRESSES.polygon.USDC, ADDRESSES.polygon.WETH, ADDRESSES.polygon.USDC_CIRCLE - ], + tokens: [ADDRESSES.polygon.USDC, ADDRESSES.polygon.WETH, ADDRESSES.polygon.USDC_CIRCLE], }), }, base: { @@ -43,10 +42,11 @@ module.exports = { sumTokens2({ api, owners: [ - "0x77e61C6fcAEe80CA578B818DD583d2b78f99289C", // usdc vault + "0x77e61C6fcAEe80CA578B818DD583d2b78f99289C", // dai vault "0x2b3A8ABa1E055e879594cB2767259e80441E0497", // eth vault + "0xd71629697b71e2df26b4194f43f6eaed3b367ac0", //usdc real vault ], - tokens: [ADDRESSES.base.USDC, ADDRESSES.base.WETH], + tokens: [ADDRESSES.base.USDC, ADDRESSES.base.WETH, ADDRESSES.base.DAI], }), }, arbitrum: { From 054615a4e8a98daed1a2c135f02dbe6ff14a3a36 Mon Sep 17 00:00:00 2001 From: paulccccc Date: Thu, 26 Dec 2024 20:14:05 +0800 Subject: [PATCH 1625/1768] feat: asBNB and asCAKE (#12876) Co-authored-by: user Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/astherus-asBNB/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 projects/astherus-asBNB/index.js diff --git a/projects/astherus-asBNB/index.js b/projects/astherus-asBNB/index.js new file mode 100644 index 0000000000..afbeda68f5 --- /dev/null +++ b/projects/astherus-asBNB/index.js @@ -0,0 +1,22 @@ +const asBNB = "0x77734e70b6E88b4d82fE632a168EDf6e700912b6" + +module.exports = { + doublecounted: true, + bsc: { + tvl: async (api) => { + + // cake tvl + const locker = '0x8E6Ce60cbC6402B8b780AdCfc069A00c177D2B18' + const veCake = await api.call({ abi: 'address:veToken', target: locker }) + const cake = await api.call({ abi: 'address:token', target: locker }) + const totalDeposits = await api.call({ abi: 'erc20:balanceOf', target: veCake, params: locker }) + api.add(cake, totalDeposits) + + // asBNB tvl + const asBNBMinter = '0x2f31ab8950c50080e77999fa456372f276952fd8' + const token = await api.call({ abi: 'address:token', target: asBNBMinter}) + const bal = await api.call({ abi: 'uint256:totalTokens', target: asBNBMinter}) + api.add(token, bal) + }, + } +} \ No newline at end of file From 4c25824472912fa4076404cf7d1757189671a18a Mon Sep 17 00:00:00 2001 From: sofa-org <161308389+sofa-org@users.noreply.github.com> Date: Thu, 26 Dec 2024 20:26:16 +0800 Subject: [PATCH 1626/1768] add polygon and more vaults (#12882) --- projects/sofa-org/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/projects/sofa-org/index.js b/projects/sofa-org/index.js index ca253f321c..6b788102d7 100644 --- a/projects/sofa-org/index.js +++ b/projects/sofa-org/index.js @@ -47,6 +47,10 @@ const config = { ], // scrvusd crvtokens: [ + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', + '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', '0x0655977FEb2f289A4aB78af67BAB0d17aAb84367', @@ -57,6 +61,10 @@ const config = { '0x9832e7E40d5a1495cA7bdbCd6A5C0A90D28F6cFA', '0x99595455Ba95b286F8e2614470b865e34f034Aa1', '0xf421B050647CF6eB757dE873F212e04a5e324487', + "0x267adC3E106b72ce3b0F2BbDb6c638A12110CF8C", + "0x31D22b4afEC06e67A37AF38A62a6ec9546c1bF8A", + "0x5e5E689284a614127Af9deA546b8D943B8b80e5c", + "0x4A1Bc9d8B2eD7BF9B9C1979037992Cff064E4F40", ], }, arbitrum: { @@ -127,6 +135,25 @@ const config = { ], crvUSDVaults: [ ], + }, + polygon: { + vaults: [ + ], + aVaults: [ + // aBnbUSDT + '0x4FD90c6B2a81d65a10E366dC5051D4D1A2A1c021', + '0x89c82D1B7616B0a465311FF077db6Bc21d43eA22', + '0x842E97BaA96cFE1534F1A50Da112C7800134656A', + '0x46706780749bC41E7Ab99D13BC1B2a74Df40A7DA', + '0x53b4b7312e543435f77f25648Fa9B269d0918bc5', + '0x40144BC227f78A288FE9Ae6F4C7389C92C5aD9CF', + '0x41Df07a5E58D551164fCAEaD4c1ee67B77a84776', + '0xD0fb7977df47d7Fe946A21679DAbCe877f7A3a05', + ], + crvtokens: [ + ], + crvUSDVaults: [ + ], } } From a637ddf331bbc13c64474674fe10164c9db6582f Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Thu, 26 Dec 2024 20:26:30 +0800 Subject: [PATCH 1627/1768] fix StakeStone BeraVault TVL calculation: add Boyco deployed amount (#12880) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/stakestone-berastone/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/stakestone-berastone/index.js b/projects/stakestone-berastone/index.js index a72cb080b1..5b9d05f38a 100644 --- a/projects/stakestone-berastone/index.js +++ b/projects/stakestone-berastone/index.js @@ -1,15 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') + const vaultABI = { - "getUnderlyings": "function getUnderlyings() external view returns (address[])" + "getUnderlyings": "function getUnderlyings() external view returns (address[])", + "assetsBorrowed": "function assetsBorrowed() external view returns (uint256)" } const Vault = '0x8f88aE3798E8fF3D0e0DE7465A0863C9bbB577f0'; const Tvl = async (api) => { + const usedTVL = await api.call({ abi: vaultABI.assetsBorrowed, target: Vault }) + api.add(ADDRESSES.ethereum.WETH, usedTVL); + const underlyings = await api.call({ abi: vaultABI.getUnderlyings, target: Vault }) return api.sumTokens({ owner: Vault, tokens: underlyings }) } module.exports = { + doublecounted: true, ethereum: { tvl: Tvl, } From fcabb7690c7da4391d127fe84cc4282313d594aa Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Thu, 26 Dec 2024 13:17:18 +0000 Subject: [PATCH 1628/1768] bitlayer wallets (#12883) --- projects/helper/bitcoin-book/bitlayer-bridge.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/helper/bitcoin-book/bitlayer-bridge.js b/projects/helper/bitcoin-book/bitlayer-bridge.js index 9d8065ff19..6a92535a38 100644 --- a/projects/helper/bitcoin-book/bitlayer-bridge.js +++ b/projects/helper/bitcoin-book/bitlayer-bridge.js @@ -1,12 +1,10 @@ module.exports = [ "132Cka5Vdw9FcFX3eb28xikKAMvhuMJGwi", - "3JszuRdFFEz1WbQKam4XjAtnZsYX62RLMX", - "33uhW878fbvVxZuZ216q2XvgdajLdG4rN4", - "32a7u8tM45GPSdjzy7PbRvuncEvHFxnYR4", - "3D3a4fPJ5HKw43Qd6QHtoJ6RvMUL7UBDT5", "bc1p87c2auxxj372evzhd5f5huddtrladtkn3z4p94ew32qvwcsgujestjj45r", "bc1puqn6dw6etk6yg8zruvf2s94cmhxkfncsaumwhtfhu5qy3e6m94sq37eq66", "bc1pvnh3zy48ml3nhzhqrtc7endhj9rrtrv5puy2775p3jwka8y99aqsz78uu2", "bc1pxpp82hc4t4flkyqtjdnzr3q72qh9st78gfge50vzlrjtp9c6yn4s5zq5vk", "bc1p7agkadaau66jtva9n8k5pg3lsctuyqur8a2l5y9hzwqkh5nlmd0skuhws3", + "bc1q6are922g2ltnmdll0mesrmdzn5w2xguu7czred", + "bc1qcpw6j7j72peplt0j34cd8uu5a886t6kkm57zgn" ] \ No newline at end of file From 7907e99f28e1802629f0ddcaa89ead74e9d1129e Mon Sep 17 00:00:00 2001 From: NeutralTrade Date: Thu, 26 Dec 2024 22:53:33 +0800 Subject: [PATCH 1629/1768] Neutral.trade add new vaults (#12885) --- projects/neutral-trade/constants.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/neutral-trade/constants.js b/projects/neutral-trade/constants.js index 2ee6e705da..28ccc53d31 100644 --- a/projects/neutral-trade/constants.js +++ b/projects/neutral-trade/constants.js @@ -58,6 +58,12 @@ const VAULTS = [ token: TOKENS.USDC, dataUrl: `${DATA_URL}/jlpdnv2.json` }, + { + name: "USDC Staking (JLP Delta Neutral) v3", + address: "7ngzeBygEksaBvKzHEeihqoLpDpWqTNRMVh2wCyb6NP8", + token: TOKENS.USDC, + dataUrl: `${DATA_URL}/jlpdnv3.json` + }, { name: "USDC Basis (Sanctum-INF)", address: "CxL8eQmGhN9LKSoHj7bU95JekFPtyZoUc57mbehb5A56", @@ -118,6 +124,12 @@ const VAULTS = [ address: "HTLvAjqc6Wkzh4i4QNLHhQHZAnrtVvkGyYeyCiUWLe9b", token: TOKENS.USDC, dataUrl: `${DATA_URL}/vip07.json` + }, + { + name: "vip08", + address: "CYUyHzu6Z3JyBhfkQpZZwWqa2zpcmzaK1xXS96n8ea1U", + token: TOKENS.SOL, + dataUrl: `${DATA_URL}/vip08.json` } ]; From d68e9daacdd1ed82dbd49ddf1084e61cb1d47f9a Mon Sep 17 00:00:00 2001 From: Dmytro Steblyna <80773046+dimast-x@users.noreply.github.com> Date: Thu, 26 Dec 2024 14:53:56 +0000 Subject: [PATCH 1630/1768] add scroll support for yellow network (#12884) --- projects/yellow/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/yellow/index.js b/projects/yellow/index.js index fdf8a8b522..c62f69ac39 100644 --- a/projects/yellow/index.js +++ b/projects/yellow/index.js @@ -6,6 +6,7 @@ const vaults = { ethereum: {}, linea: {}, polygon: {}, + scroll: {}, } module.exports = { From 35066f17bbcc5d3bede9efb8e3cbc4e885a97a68 Mon Sep 17 00:00:00 2001 From: Alfredo Ferreira <15140256+aaoferreira@users.noreply.github.com> Date: Thu, 26 Dec 2024 15:57:38 +0100 Subject: [PATCH 1631/1768] update contango scroll graph url (#12868) --- projects/contango-v2/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/contango-v2/index.js b/projects/contango-v2/index.js index 00a537adc4..22d51d4189 100644 --- a/projects/contango-v2/index.js +++ b/projects/contango-v2/index.js @@ -65,8 +65,7 @@ const config = { scroll: { contango: CONTANGO_PROXY, contango_lens: CONTANGO_LENS_PROXY, - graphUrl: - "https://graph.contango.xyz:18000/subgraphs/name/contango-xyz/v2-scroll", + graphUrl: alchemyGraphUrl('scroll'), }, }; From df3f47ce4fd0f4d3be7bbe1ce5275648b06ff14b Mon Sep 17 00:00:00 2001 From: dsarvaiya <114975126+dsarvaiya@users.noreply.github.com> Date: Fri, 27 Dec 2024 04:51:56 +0530 Subject: [PATCH 1632/1768] TVL adapter for ZEEBU (#12867) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/Zeebu/index.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 projects/Zeebu/index.js diff --git a/projects/Zeebu/index.js b/projects/Zeebu/index.js new file mode 100644 index 0000000000..e885c16d61 --- /dev/null +++ b/projects/Zeebu/index.js @@ -0,0 +1,38 @@ +const { stakings } = require("../helper/staking"); +const { pool2s } = require("../helper/pool2"); + +const VOTING_ESCROW_ADDRESSES = { + ethereum: '0x8e76Cdf3b14c540aB54aFa7f8492AC1d16Ecfb35', + base: '0xcf08d1ec5d8e566d95299399307f75f98d6aea03', + bsc: '0xd3e8cD2eDbf252860E02ffb245fD654b1ab30f30', +}; + +const ZBU_ADDRESSES = { + ethereum: '0xe77f6aCD24185e149e329C1C0F479201b9Ec2f4B', + base: '0x2C8C89C442436CC6C0a77943E09c8Daf49Da3161', + bsc: '0x4D3dc895a9EDb234DfA3e303A196c009dC918f84', +}; + +const lpTokens = [ + '0xC3889F9764d68BDF2e16f237206746344172A147' +]; + +const stackingcontract = [ + '0x45dd22aCe398002b34cB37b363B2F02C7dd47842' +]; + +module.exports = { + ethereum: { + staking : stakings([VOTING_ESCROW_ADDRESSES["ethereum"]],ZBU_ADDRESSES["ethereum"]), + tvl: () => ({}) + }, + base: { + staking : stakings([VOTING_ESCROW_ADDRESSES["base"]],ZBU_ADDRESSES["base"]), + pool2: pool2s(stackingcontract,lpTokens), + }, + bsc: { + staking : stakings([VOTING_ESCROW_ADDRESSES["bsc"]],ZBU_ADDRESSES["bsc"]), + }, + methodology: + 'Counts ZBU tokens locked in Voting Escrow contracts across Ethereum, Base, and BSC.', +}; From e50da3a41873e62018c345684b8121f36d9331b0 Mon Sep 17 00:00:00 2001 From: 0xgaulle Date: Fri, 27 Dec 2024 00:31:21 +0100 Subject: [PATCH 1633/1768] Gondi v3 (#12886) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/gondi-v3/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/gondi-v3/index.js diff --git a/projects/gondi-v3/index.js b/projects/gondi-v3/index.js new file mode 100644 index 0000000000..38ebb7ee33 --- /dev/null +++ b/projects/gondi-v3/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport, } = require('../helper/unwrapLPs'); + +// https://docs.gondi.xyz/protocol-contracts +const multiSourceLoan = "0xf65b99ce6dc5f6c556172bcc0ff27d3665a7d9a8"; +const userVault = "0x823de2c44369e94cac3da789ad4b6493e27e4bfe"; + +module.exports = { + methodology: `Counts the floor value of all deposited NFTs with Chainlink price feeds.`, + ethereum: { + tvl: sumTokensExport({ owners: [multiSourceLoan, userVault], resolveNFTs: true, }), + } +} From a04af3b067a02fc1b06aaaad0458c4b55d8da3cf Mon Sep 17 00:00:00 2001 From: SolidiTea <109915806+SolidiTea@users.noreply.github.com> Date: Fri, 27 Dec 2024 00:31:50 +0100 Subject: [PATCH 1634/1768] Adds missing adapters for Lynx (#12887) Co-authored-by: SolidiTea <> --- projects/lynx/index.js | 245 +++++++++++++++++++++++++++++++++-------- 1 file changed, 200 insertions(+), 45 deletions(-) diff --git a/projects/lynx/index.js b/projects/lynx/index.js index b1234d9e1e..55a61557e3 100644 --- a/projects/lynx/index.js +++ b/projects/lynx/index.js @@ -2,78 +2,111 @@ const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const config = { - linea: { + // Engine Chips + sonic: { tokenAndOwnerPair: [ [ - // veLVC Token - "0xcc22F6AA610D1b2a0e89EF228079cB3e1831b1D1", - // OFTChipAdapter (owner) - "0xc5e782e2a4e2cfcb7ed454cf5a7b6aa2bb424b90", + // wS Token + ADDRESSES.sonic.wS, + // EngineChip (owner) + "0x0e7a7a477ab4dDFB2d7a500D33c38A19372a70Fc" ], - ], - }, - mode: { - tokenAndOwnerPair: [ [ - // MODE Token - "0xDfc7C877a950e49D2610114102175A06C2e3167a", - // OFTChipAdapter (owner) - "0x3b7ED1cDF0Fc64d95c0D0428b9Cc99b6A9a5CB94", + // AG Token + "0x005851f943ee2957b1748957f26319e4f9edebc1", + // EngineChip (owner) + "0x4461913eCa88EDE2d76B576C8fA5D08535bb714A" ], - ], + ] }, fantom: { tokenAndOwnerPair: [ [ // WFTM Token ADDRESSES.fantom.WFTM, - // OFTChipAdapter (owner) - "0x614aA983f54409D475aeC5D18120FECFD6320eF4" - ], - [ - // FTM Token - "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", - // OFTChipAdapter (owner) + // EngineChip (owner) "0x614aA983f54409D475aeC5D18120FECFD6320eF4" ], + // [ + // // FTM Token + // "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + // // EngineChip (owner) + // "0x614aA983f54409D475aeC5D18120FECFD6320eF4" + // ], [ // USDC Token - ADDRESSES.fantom.USDC, - // OFTChipAdapter (owner) + "0x2F733095B80A04b38b0D10cC884524a3d09b836a", + // EngineChip (owner) "0x194609ea1C1D77e66eaB28C48CE266A48f3bC30a", ], + [ + // SPIRIT Token + "0x5cc61a78f164885776aa610fb0fe1257df78e59b", + // EngineChip (owner) + "0x1401C2C092df468862e23502B88A8795e2e9aecf", + ], [ // FSONIC Token "0x05e31a691405d06708a355c029599c12d5da8b28", - // OFTChipAdapter (owner) + // EngineChip (owner) "0xCCC0d9d276176FED7E6918dCf99F23DCAaCFcAc5" ], [ // BRUSH Token "0x85dec8c4b2680793661bca91a8f129607571863d", - // OFTChipAdapter (owner) - "0xcbd1a63a84af4baa9541331420ff98d8fca3ba1c", + // EngineChip (owner) + "0xCBd1A63A84af4BAA9541331420fF98d8Fca3ba1C", ], [ // POLTER Token "0x5c725631FD299703D0A74C23F89a55c6B9A0C52F", - // OFTChipAdapter (owner) - "0x089cd8ac58d9a1488b3cdfdfeb20963e7bb33732", + // EngineChip (owner) + "0x089cD8AC58D9a1488b3cDfDfeb20963e7BB33732", ], [ // fBUX Token "0x1e2Ea3f3209D66647f959CF00627107e079B870d", - // OFTChipAdapter (owner) - "0x86facb048fee156a16104531bd36cdff118d8107", + // EngineChip (owner) + "0x86fAcB048FEe156A16104531Bd36CDfF118d8107", ], [ // fTAILS Token "0x5cF90b977C86415a53CE3B7bE13b26f6abdDfee2", - // OFTChipAdapter (owner) - "0x2c241eefc4b61ed475d7f1ded112df99e5de0e8f", + // EngineChip (owner) + "0x2c241eeFc4b61ed475d7f1DeD112df99E5De0E8F", + ], + [ + // sGOAT Token + "0x43f9a13675e352154f745d6402e853fecc388aa5", + // EngineChip (owner) + "0xa8ddbf9B7E307100ba689C02CC1360112d660206", + ], + [ + // EQUAL Token + "0x3fd3a0c85b70754efc07ac9ac0cbbdce664865a6", + // EngineChip (owner) + "0x59698CA79B8568F25294d6Eab6281667712079eE", ], ], }, + boba: { + tokenAndOwnerPair: [ + [ + // BOBA Token + ADDRESSES.boba.BOBA, + // EngineChip (owner) + "0x9beABD8699E2306c5632C80E663dE9953e104C3f" + ], + [ + // USDC Token + ADDRESSES.boba.USDC, + // EngineChip (owner) + "0xcDD339d704Fb8f35A3a2f7d9B064238D33DC7550" + ], + ] + }, + + // OFT Chips fuse: { tokenAndOwnerPair: [ [ @@ -102,11 +135,33 @@ const config = { ], ], }, + linea: { + tokenAndOwnerPair: [ + [ + // veLVC Token + "0xcc22F6AA610D1b2a0e89EF228079cB3e1831b1D1", + // OFTChipAdapter (owner) + "0xc5e782e2a4e2cfcb7ed454cf5a7b6aa2bb424b90", + ], + [ + // LVC Token + "0xcc22F6AA610D1b2a0e89EF228079cB3e1831b1D1", + // OFTChipAdapter (owner) + "0x55f2f3fA843C1755e17eb5F32D29a35c99a3aF09", + ], + ], + }, arbitrum: { tokenAndOwnerPair: [ [ // stEUR Token - ADDRESSES.celo.STEUR, + ADDRESSES.arbitrum.ARB, + // OFTChipAdapter (owner) + "0x094DE4d315198Df981D3a20ceFc3381B2182a572", + ], + [ + // stEUR Token + "0x004626a008b1acdc4c74ab51644093b155e59a23", // OFTChipAdapter (owner) "0xc5e782e2a4e2cfcb7ed454cf5a7b6aa2bb424b90", ], @@ -120,7 +175,7 @@ const config = { // EUROs Token "0x643b34980e635719c15a2d4ce69571a258f940e9", // OFTChipAdapter (owner) - "0x3552fe61af3f6d3235dd1cb75402d4281d1fbac6", + "0x3552fE61af3F6d3235Dd1CB75402d4281d1FbaC6", ], [ // GRAI Token @@ -128,6 +183,36 @@ const config = { // OFTChipAdapter (owner) "0xBe1fa4177fBf43683434CecD5563DA6Ea00FD474", ], + [ + // SLIZ Token + "0x463913D3a3D3D291667D53B8325c598Eb88D3B0e", + // OFTChipAdapter (owner) + "0x1E1F546dF45A82F2a29E709C85331E3974dC26b0", + ], + [ + // SCALES Token + "0xe6af844d5740b6b297b6dd7fb2ce299ee9e3d16f", + // OFTChipAdapter (owner) + "0x1E71Fad2d453dAb287Dad8CD003CA24A9d9194EA", + ], + [ + // USDFI Token + "0x249c48e22e95514ca975de31f473f30c2f3c0916", + // OFTChipAdapter (owner) + "0x24d6318B87ABB45B62D981693FCF25A5956F41e2", + ], + [ + // STABLE Token + "0x666966ef3925b1c92fa355fda9722899f3e73451", + // OFTChipAdapter (owner) + "0x2E2a9b820BDDfD54487f8d5A0Dfd5940D5Dac6A9", + ], + [ + // uniBTC Token + "0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a", + // OFTChipAdapter (owner) + "0xCf3562bbe462A249a4b2B2a421dF00b93E081066", + ], ], }, optimism: { @@ -140,34 +225,46 @@ const config = { ], ], }, - polygon: { + mantle: { tokenAndOwnerPair: [ [ - // MAI Token - "0xa3fa99a148fa48d14ed51d610c367c61876997f1", + // aUSD Token + "0xD2B4C9B0d70e3Da1fBDD98f469bD02E77E12FC79", // OFTChipAdapter (owner) - "0x7279d1cff1510e503b6be64fbbad64088034504c", + "0xC5E782E2A4E2cFCb7eD454CF5a7b6aa2bB424B90", ], + ], + }, + polygon: { + tokenAndOwnerPair: [ [ // WMATIC Token ADDRESSES.polygon.WMATIC_2, // OFTChipAdapter (owner) "0x028815b56433a4aae10087290d1ed9ef7437068f", ], - ], - }, - mantle: { - tokenAndOwnerPair: [ [ - // aUSD Token - "0xD2B4C9B0d70e3Da1fBDD98f469bD02E77E12FC79", + // MIMATIC Token + "0xa3fa99a148fa48d14ed51d610c367c61876997f1", // OFTChipAdapter (owner) - "0xC5E782E2A4E2cFCb7eD454CF5a7b6aa2bB424B90", + "0x7279d1cFf1510E503B6Be64fBBAd64088034504C", ], ], }, bsc: { tokenAndOwnerPair: [ + [ + // wBNB Token + ADDRESSES.bsc.WBNB, + // OFTChipAdapter (owner) + "0x67ac4355787fe8313D6cAfd23aEa4463704fBaeC", + ], + [ + // USDT Token + ADDRESSES.bsc.USDT, + // OFTChipAdapter (owner) + "0x7eDb95ba0294EfD054221141FcC8f12F2Ada1129", + ], [ // lisUSD Token "0x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5", @@ -176,6 +273,64 @@ const config = { ], ], }, + mode: { + tokenAndOwnerPair: [ + [ + // MODE Token + "0xDfc7C877a950e49D2610114102175A06C2e3167a", + // OFTChipAdapter (owner) + "0x3b7ED1cDF0Fc64d95c0D0428b9Cc99b6A9a5CB94", + ], + [ + // ION Token + "0x18470019bF0E94611f15852F7e93cf5D65BC34CA", + // OFTChipAdapter (owner) + "0xD22c72aB0f4967edB876d84773BfF0b60A92e51a", + ], + ], + }, + celo: { + tokenAndOwnerPair: [ + [ + // CELO Token + ADDRESSES.celo.CELO, + // OFTChipAdapter (owner) + "0x7279d1cFf1510E503B6Be64fBBAd64088034504C", + ], + [ + // USDT Token + ADDRESSES.celo.USDT_1, + // OFTChipAdapter (owner) + "0xA36cB6e644cCE5fB98bDa9aa538927B2c934D8fa", + ], + ] + }, + zircuit: { + tokenAndOwnerPair: [ + [ + // ZRC Token + "0xfd418e42783382e86ae91e445406600ba144d162", + // OFTChipAdapter (owner) + "0xa624818151078Ccc936BF056DEf51114808BFE16", + ], + ] + }, + ethereum: { + tokenAndOwnerPair: [ + [ + // WEETh Token + ADDRESSES.ethereum.WEETH, + // OFTChipAdapter (owner) + "0x66Aaf6Da70dA10aC8dC024E668edcade1C8F5b44", + ], + [ + // TUNA Token + "0xadd353fb2e2c563383ff3272a500f3e7134dafe4", + // OFTChipAdapter (owner) + "0x3b7ED1cDF0Fc64d95c0D0428b9Cc99b6A9a5CB94", + ], + ], + } }; Object.keys(config).forEach((chain) => { From 1d56eafa7c249025e30ec3699f1c283a7ba22de1 Mon Sep 17 00:00:00 2001 From: WindfallStaking <149843003+WindfallStaking@users.noreply.github.com> Date: Thu, 26 Dec 2024 15:32:06 -0800 Subject: [PATCH 1635/1768] Add Windfall Project Adapter (#12888) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/windfall/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 projects/windfall/index.js diff --git a/projects/windfall/index.js b/projects/windfall/index.js new file mode 100644 index 0000000000..d4afc50580 --- /dev/null +++ b/projects/windfall/index.js @@ -0,0 +1,17 @@ +const { sumTokensExport } = require("../helper/unwrapLPs") +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + methodology: 'Counts the number of tokens in the Windfall contract.', +}; + +const config = { + canto: { tokens: ['0xEe602429Ef7eCe0a13e4FfE8dBC16e101049504C'], owners: ['0x2d9dDE57Ec40baF970Dbc8f7933861013B661c93'] }, + blast: { tokens: [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH], owners: ['0x0a4C236254C4C0bD5DD710f1fa12D7791d491358', '0x6d89540c22868ff9e3676423162a9e909BBB2558',] }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport(config[chain]) + } +}) \ No newline at end of file From f806f863677b41693d47a8db1c60986233bb482c Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 27 Dec 2024 11:24:19 +0000 Subject: [PATCH 1636/1768] wallets gate (#12890) --- projects/gate-io/index.js | 197 +++++++++++++++--------- projects/helper/bitcoin-book/gate-io.js | 1 + 2 files changed, 128 insertions(+), 70 deletions(-) diff --git a/projects/gate-io/index.js b/projects/gate-io/index.js index b91e6d5440..4499b8885c 100644 --- a/projects/gate-io/index.js +++ b/projects/gate-io/index.js @@ -1,113 +1,170 @@ -const { cexExports } = require('../helper/cex') -const bitcoinAddressBook = require('../helper/bitcoin-book/index.js') +const { cexExports } = require("../helper/cex"); +const bitcoinAddressBook = require("../helper/bitcoin-book/index.js"); const config = { ethereum: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0x234ee9e35f8e9749a002fc42970d570db716453b', + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x234ee9e35f8e9749a002fc42970d570db716453b", //'0x925206b8a707096Ed26ae47C84747fE0bb734F59', //this should never be here, its the WBT token wallet - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0x35b31ae2604dd81d9456205025ea02418dba8242", + "0xd87C8e083AECc5405B0107c90D8E0C7F70996B84", + "0x60618B3c6E3164c4a72d352Bde263A5D15f9F7eE", ], }, avax: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ], }, arbitrum: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ], }, polygon: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ], }, fantom: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ], }, bsc: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ], }, optimism: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ], }, era: { owners: [ - '0x0d0707963952f2fba59dd06f2b425ace40b492fe', - '0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c', - '0x234ee9e35f8e9749a002fc42970d570db716453b', - // '0x925206b8a707096Ed26ae47C84747fE0bb734F59', - '0xD793281182A0e3E023116004778F45c29fc14F19', - '0xc882b111a75c0c657fc507c04fbfcd2cc984f071', - '0x85FAa6C1F2450b9caEA300838981C2e6E120C35c', - '0xeb01f8cdae433e7b55023ff0b2da44c4c712dce2', - ] + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x234ee9e35f8e9749a002fc42970d570db716453b", + // '0x925206b8a707096Ed26ae47C84747fE0bb734F59', + "0xD793281182A0e3E023116004778F45c29fc14F19", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x85FAa6C1F2450b9caEA300838981C2e6E120C35c", + "0xeb01f8cdae433e7b55023ff0b2da44c4c712dce2", + ], }, bitcoin: { - owners: bitcoinAddressBook.gateIo + owners: bitcoinAddressBook.gateIo, }, tron: { owners: [ - 'TBA6CypYJizwA9XdC7Ubgc5F1bxrQ7SqPt', - 'TCYpJ6MMzd9ytoUvD82HnS58iV75QimPh6', - 'TFptbWaARrWTX5Yvy3gNG5Lm8BmhPx82Bt', - ] + "TBA6CypYJizwA9XdC7Ubgc5F1bxrQ7SqPt", + "TCYpJ6MMzd9ytoUvD82HnS58iV75QimPh6", + "TDHkXgDHEiK5WhaKTccJenZKRyUMTxoREx", + "TN1K2zNVA399AHbp51yyPPfjaD9JNLfQpo", + "TUt2HuZFZvXAMmF9uh7BqujvMXsZ4F1pif", + ], }, - cardano:{ + cardano: { owners: [ - 'DdzFFzCqrhseMuShaXzLDGDBa8jGEjdEjNc83jouqdqBQzk5R52MedutUq3QGdMPiauR5SjbttqdBjDA5g6rf3H6LjpvK3dFsf8yZ6qo', - 'DdzFFzCqrhtBatWqyFge4w6M6VLgNUwRHiXTAg3xfQCUdTcjJxSrPHVZJBsQprUEc5pRhgMWQaGciTssoZVwrSKmG1fneZ1AeCtLgs5Y', - ] + "DdzFFzCqrhseMuShaXzLDGDBa8jGEjdEjNc83jouqdqBQzk5R52MedutUq3QGdMPiauR5SjbttqdBjDA5g6rf3H6LjpvK3dFsf8yZ6qo", + "DdzFFzCqrhtBatWqyFge4w6M6VLgNUwRHiXTAg3xfQCUdTcjJxSrPHVZJBsQprUEc5pRhgMWQaGciTssoZVwrSKmG1fneZ1AeCtLgs5Y", + ], }, - solana:{ + solana: { owners: [ - 'CLNEVwuSAiGsvPtE74yLhda4beNfd8qfZXVKkUcAJZDL', - 'HiRpdAZifEsZGdzQ5Xo5wcnaH3D2Jj9SoNsUzcYNK78J', - 'u6PJ8DtQuPFnfmwHbGFULQ4u4EgjDiyYKjVEsynXq2w' - ] + "u6PJ8DtQuPFnfmwHbGFULQ4u4EgjDiyYKjVEsynXq2w", + "HiRpdAZifEsZGdzQ5Xo5wcnaH3D2Jj9SoNsUzcYNK78J", + "CLNEVwuSAiGsvPtE74yLhda4beNfd8qfZXVKkUcAJZDL", + "CVMV7614DjSjY114GwHhG1HNFXofceziDpuGz7VjDD5K", + "G9XFfWz6adb9wFDKN2v7HfmJDgAc2hirrTwBmca4w26C", + ], }, ripple: { owners: [ - 'rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d', - 'rLzxZuZuAHM7k3FzfmhGkXVwScM4QSxoY7', - 'rNnWmrc1EtNRe5SEQEs9pFibcjhpvAiVKF', - 'rNu9U5sSouNoFunHp9e9trsLV6pvsSf54z', - ] + "rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d", + "rLzxZuZuAHM7k3FzfmhGkXVwScM4QSxoY7", + "rNnWmrc1EtNRe5SEQEs9pFibcjhpvAiVKF", + "rNu9U5sSouNoFunHp9e9trsLV6pvsSf54z", + ], }, starknet: { owners: [ - '0x00e91830f84747f37692127b20d4e4f9b96482b1007592fee1d7c0136ee60e6d' - ] - } -} + "0x00e91830f84747f37692127b20d4e4f9b96482b1007592fee1d7c0136ee60e6d", + ], + }, + algorand: { + owners: [ + "BVMEUTF37WNEQ6GYCZISRFHGLEMOKT5OCPPTTJXVED6JBSXKF6YJJRZRI4", + "7BL55CRKRASIQI263JQ5H5A4JJQFSHL7RWXMCKM6YDZAIJVEZQ76SXF2S4", + ], + }, + base: { + owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + }, + litecoin: { + owners: [ + "LaH52f9sspcacPMf2Z7mU5tkhKcWJxvAgA", + "LYyhXjiwi7qcrf1QVwdPpFSptwRZ8L8PuW", + "Lc3BUJTitygdVPCyiBTwA2HephzBKnHPaH", + "LNyjBuigbWcHYQYbVKxk15u3Ux23QvEnS9", + "LQFZFmkrmxuyL5TCjuVxngM4wRFdM2a9EW", + "MQ4wXRL6etqkEPrLm4f1FKu2eXTM7EMgXo", + ], + }, + manta: { + owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + }, + mantle: { + owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + }, + polkadot: { + owners: [ + "1JVrK16XZm9vyZjHoYVPjtZ35LvTQ4oyufMoUFTFpAUhath", + "16ccyj8JqnP8d2DSaifgek6kSSBAu5cGtd4mu2uXTg4H6mSU", + "14ooXLY2gmiUTVym9SnKxNwEgcoikXzMEav2kiLjr7pPPHPR", + "1665ypcQXKmqXtjE9yuWsZqK5MQmBQokFjPGLq5SvoKAWBjQ", + ], + }, + scroll: { + owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + }, + sei: { + owners: ["sei1xunyznpjmj9jv5e2zwngp2qrzmulr2gg45sg0h"], + }, + stacks: { + owners: [ + "SP33XEHK2SXXH625VG6W6665WBBPX1ENQVKNEYCYY", + "SP15R31KXD5C0N9ESSG7B28M3DP6ZQE2GSED759B3", + ], + }, + taiko: { + owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + }, +}; -module.exports = cexExports(config) +module.exports = cexExports(config); diff --git a/projects/helper/bitcoin-book/gate-io.js b/projects/helper/bitcoin-book/gate-io.js index 2a8cb8f5a9..059c5c5a78 100644 --- a/projects/helper/bitcoin-book/gate-io.js +++ b/projects/helper/bitcoin-book/gate-io.js @@ -5,4 +5,5 @@ module.exports = [ '1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9', '1HpED69tpKSaEaWpY3Udt1DtcVcuCUoh2Y', '3HroDXv8hmzKRtaSfBffRgedKpru8fgy6M', + '1ECeVF6wfbiihCRrrpRnkbwrWsZfYmixMG' ] \ No newline at end of file From 727872a1d62db19b2e7353c954bbeb61fd9a854d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 27 Dec 2024 12:00:54 +0000 Subject: [PATCH 1637/1768] zoth --- projects/zoth/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 projects/zoth/index.js diff --git a/projects/zoth/index.js b/projects/zoth/index.js new file mode 100644 index 0000000000..5719feac64 --- /dev/null +++ b/projects/zoth/index.js @@ -0,0 +1,16 @@ +const vaultManagers = { + ethereum: "0x2f52C3664Ff2b12A1A8Bc7B6020C7E92DBa781aE", +} + +Object.keys(vaultManagers).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const { details } = await api.call({ abi, target: vaultManagers[chain], }) + details.map(({ collateralAddress, subVaultAddress }) => { + api.add(collateralAddress, subVaultAddress) + }) + } + } +}) + +const abi = { "inputs": [], "name": "getAllSubVaults", "outputs": [{ "internalType": "address[]", "name": "collaterals", "type": "address[]" }, { "components": [{ "internalType": "string", "name": "integrationType", "type": "string" }, { "internalType": "address", "name": "collateralAddress", "type": "address" }, { "internalType": "address", "name": "subVaultAddress", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "ltv", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }, { "internalType": "uint256", "name": "registeredAt", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdatedAt", "type": "uint256" }, { "internalType": "enum DataTypes.TokenType", "name": "tokenType", "type": "uint8" }], "internalType": "struct DataTypes.CollateralDetails[]", "name": "details", "type": "tuple[]" }], "stateMutability": "view", "type": "function" } \ No newline at end of file From 092d22a0f882e848566c330ec082d48aa811fbc7 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 27 Dec 2024 12:47:53 +0000 Subject: [PATCH 1638/1768] fix --- projects/zoth/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/projects/zoth/index.js b/projects/zoth/index.js index 5719feac64..a406e87473 100644 --- a/projects/zoth/index.js +++ b/projects/zoth/index.js @@ -6,9 +6,7 @@ Object.keys(vaultManagers).forEach(chain => { module.exports[chain] = { tvl: async (api) => { const { details } = await api.call({ abi, target: vaultManagers[chain], }) - details.map(({ collateralAddress, subVaultAddress }) => { - api.add(collateralAddress, subVaultAddress) - }) + await api.sumTokens({ tokensAndOwners: details.map(({ collateralAddress, subVaultAddress }) => [collateralAddress, subVaultAddress]) }) } } }) From aab613b8126a674fd12733654b246bbbd9491660 Mon Sep 17 00:00:00 2001 From: yan12138a Date: Fri, 27 Dec 2024 22:44:29 +0800 Subject: [PATCH 1639/1768] Update vertex protocol TVL calculation. (#12892) --- projects/vertex/index.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/projects/vertex/index.js b/projects/vertex/index.js index 34acb291b6..241e606192 100644 --- a/projects/vertex/index.js +++ b/projects/vertex/index.js @@ -31,6 +31,23 @@ const seiConfig = { "perpEngine": "0x0F54f46979C62aB73D03Da60eBE044c8D63F724f" } +const baseConfig = { + "querier": "0x57237f44e893468efDD568cA7dE1EA8A57d14c1b", + "clearinghouse": "0xE46Cb729F92D287F6459bDA6899434E22eCC48AE", + "clearinghouseLiq": "0xA35Cd71DDC7aab953377314a56a663E9706F1354", + "endpoint": "0x92C2201D48481e2d42772Da02485084A4407Bbe2", + "spotEngine": "0xe818be1DA4E53763bC77df904aD1B5A1C5A61626", + "perpEngine": "0x5BD184F408932F9E6bA00e44A071bCCb8977fb47" +} + +const sonicConfig = { + "querier": "0xcC7895C391041231BfB5837A6923A4A26586d14f", + "clearinghouse": "0x447c9aEe069F6A13007eb9D2d2a4Bb4Ad92AB721", + "clearinghouseLiq": "0xd52e4Cb7D6e769a4957C9Da1bd33E0B12D956789", + "endpoint": "0x2f5F835d778eBE8c28fC743E50EB9a68Ca93c2Fa", + "spotEngine": "0xEa555556ab1973973e4f9d3378277Ab156de783d", + "perpEngine": "0x9100770dE5268B969e540650D003D909d5012826" +} module.exports = { arbitrum: { @@ -48,7 +65,19 @@ module.exports = { sei: { tvl: sumTokensExport({ owners: [seiConfig.clearinghouse, seiConfig.endpoint], - tokens: [ADDRESSES.sei.USDC, ADDRESSES.sei.USDT], + tokens: [ADDRESSES.sei.USDC, ADDRESSES.sei.WSEI], + }) + }, + base: { + tvl: sumTokensExport({ + owners: [baseConfig.clearinghouse, baseConfig.endpoint], + tokens: [ADDRESSES.base.USDC, ADDRESSES.base.WETH], + }) + }, + sonic: { + tvl: sumTokensExport({ + owners: [sonicConfig.clearinghouse, sonicConfig.endpoint], + tokens: [ADDRESSES.sonic["USDC.e"], ADDRESSES.sonic.wS], }) } } \ No newline at end of file From 2bece8fc1b41a56af458c6a503b192bbfcd1198f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:55:17 +0100 Subject: [PATCH 1640/1768] remove duplicate zeebu --- projects/Zeebu/index.js | 38 -------------------------------------- projects/zeebu/index.js | 31 +++++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 46 deletions(-) delete mode 100644 projects/Zeebu/index.js diff --git a/projects/Zeebu/index.js b/projects/Zeebu/index.js deleted file mode 100644 index e885c16d61..0000000000 --- a/projects/Zeebu/index.js +++ /dev/null @@ -1,38 +0,0 @@ -const { stakings } = require("../helper/staking"); -const { pool2s } = require("../helper/pool2"); - -const VOTING_ESCROW_ADDRESSES = { - ethereum: '0x8e76Cdf3b14c540aB54aFa7f8492AC1d16Ecfb35', - base: '0xcf08d1ec5d8e566d95299399307f75f98d6aea03', - bsc: '0xd3e8cD2eDbf252860E02ffb245fD654b1ab30f30', -}; - -const ZBU_ADDRESSES = { - ethereum: '0xe77f6aCD24185e149e329C1C0F479201b9Ec2f4B', - base: '0x2C8C89C442436CC6C0a77943E09c8Daf49Da3161', - bsc: '0x4D3dc895a9EDb234DfA3e303A196c009dC918f84', -}; - -const lpTokens = [ - '0xC3889F9764d68BDF2e16f237206746344172A147' -]; - -const stackingcontract = [ - '0x45dd22aCe398002b34cB37b363B2F02C7dd47842' -]; - -module.exports = { - ethereum: { - staking : stakings([VOTING_ESCROW_ADDRESSES["ethereum"]],ZBU_ADDRESSES["ethereum"]), - tvl: () => ({}) - }, - base: { - staking : stakings([VOTING_ESCROW_ADDRESSES["base"]],ZBU_ADDRESSES["base"]), - pool2: pool2s(stackingcontract,lpTokens), - }, - bsc: { - staking : stakings([VOTING_ESCROW_ADDRESSES["bsc"]],ZBU_ADDRESSES["bsc"]), - }, - methodology: - 'Counts ZBU tokens locked in Voting Escrow contracts across Ethereum, Base, and BSC.', -}; diff --git a/projects/zeebu/index.js b/projects/zeebu/index.js index eb559cc0ae..dfa9eb0f0a 100644 --- a/projects/zeebu/index.js +++ b/projects/zeebu/index.js @@ -1,4 +1,5 @@ -const { staking } = require('../helper/staking') +const { stakings } = require("../helper/staking"); +const { pool2s } = require("../helper/pool2"); const VOTING_ESCROW_ADDRESSES = { ethereum: '0x8e76Cdf3b14c540aB54aFa7f8492AC1d16Ecfb35', @@ -12,12 +13,26 @@ const ZBU_ADDRESSES = { bsc: '0x4D3dc895a9EDb234DfA3e303A196c009dC918f84', }; +const lpTokens = [ + '0xC3889F9764d68BDF2e16f237206746344172A147' +]; -Object.keys(VOTING_ESCROW_ADDRESSES).forEach(chain => { - module.exports[chain] = { - tvl: () => ({}), - staking: staking(VOTING_ESCROW_ADDRESSES[chain], ZBU_ADDRESSES[chain]) - } -}) +const stackingcontract = [ + '0x45dd22aCe398002b34cB37b363B2F02C7dd47842' +]; -module.exports.base.pool2 = staking('0x45dd22aCe398002b34cB37b363B2F02C7dd47842', '0xC3889F9764d68BDF2e16f237206746344172A147') \ No newline at end of file +module.exports = { + ethereum: { + staking: stakings([VOTING_ESCROW_ADDRESSES["ethereum"]], ZBU_ADDRESSES["ethereum"]), + tvl: () => ({}) + }, + base: { + staking: stakings([VOTING_ESCROW_ADDRESSES["base"]], ZBU_ADDRESSES["base"]), + pool2: pool2s(stackingcontract, lpTokens), + }, + bsc: { + staking: stakings([VOTING_ESCROW_ADDRESSES["bsc"]], ZBU_ADDRESSES["bsc"]), + }, + methodology: + 'Counts ZBU tokens locked in Voting Escrow contracts across Ethereum, Base, and BSC.', +}; From ca9d1011fa31b9562a91a5b86d6e1c7cf4b642ce Mon Sep 17 00:00:00 2001 From: enoch-roots <117774949+enoch-roots@users.noreply.github.com> Date: Fri, 27 Dec 2024 10:17:53 -0600 Subject: [PATCH 1641/1768] nirvana v2 adapter (#12811) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/nirvana-v2/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/nirvana-v2/index.js diff --git a/projects/nirvana-v2/index.js b/projects/nirvana-v2/index.js new file mode 100644 index 0000000000..b0b6961e34 --- /dev/null +++ b/projects/nirvana-v2/index.js @@ -0,0 +1,12 @@ +const { sumTokens2 } = require('../helper/solana') + +async function tvl(api) { + return sumTokens2({ tokenAccounts: ['FhTJEGXVwj4M6NQ1tPu9jgDZUXWQ9w2hP89ebZHwrJPS'] }) +} + +module.exports = { + timetravel: false, + solana: { + tvl, + } +} \ No newline at end of file From e54e776f0efb8585048add52eefae9c16a5de5e6 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 27 Dec 2024 16:32:33 +0000 Subject: [PATCH 1642/1768] eclipse bridge --- projects/eclipse-bridge/index.js | 13 +++++++++++++ projects/zoth/index.js | 14 -------------- 2 files changed, 13 insertions(+), 14 deletions(-) create mode 100644 projects/eclipse-bridge/index.js delete mode 100644 projects/zoth/index.js diff --git a/projects/eclipse-bridge/index.js b/projects/eclipse-bridge/index.js new file mode 100644 index 0000000000..d0a0e7e01d --- /dev/null +++ b/projects/eclipse-bridge/index.js @@ -0,0 +1,13 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owner: '0xd7e4b67e735733ac98a88f13d087d8aac670e644', + fetchCoValentTokens: true, + permitFailure: true + }), + }, +}; diff --git a/projects/zoth/index.js b/projects/zoth/index.js deleted file mode 100644 index a406e87473..0000000000 --- a/projects/zoth/index.js +++ /dev/null @@ -1,14 +0,0 @@ -const vaultManagers = { - ethereum: "0x2f52C3664Ff2b12A1A8Bc7B6020C7E92DBa781aE", -} - -Object.keys(vaultManagers).forEach(chain => { - module.exports[chain] = { - tvl: async (api) => { - const { details } = await api.call({ abi, target: vaultManagers[chain], }) - await api.sumTokens({ tokensAndOwners: details.map(({ collateralAddress, subVaultAddress }) => [collateralAddress, subVaultAddress]) }) - } - } -}) - -const abi = { "inputs": [], "name": "getAllSubVaults", "outputs": [{ "internalType": "address[]", "name": "collaterals", "type": "address[]" }, { "components": [{ "internalType": "string", "name": "integrationType", "type": "string" }, { "internalType": "address", "name": "collateralAddress", "type": "address" }, { "internalType": "address", "name": "subVaultAddress", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "ltv", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }, { "internalType": "uint256", "name": "registeredAt", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdatedAt", "type": "uint256" }, { "internalType": "enum DataTypes.TokenType", "name": "tokenType", "type": "uint8" }], "internalType": "struct DataTypes.CollateralDetails[]", "name": "details", "type": "tuple[]" }], "stateMutability": "view", "type": "function" } \ No newline at end of file From f6e6a8a58ebc0645464a24a797805f47d7be4f5b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 27 Dec 2024 16:53:49 +0000 Subject: [PATCH 1643/1768] shape, zora bridges --- projects/shape/index.js | 15 +++++++++++++++ projects/zora/index.js | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 projects/shape/index.js create mode 100644 projects/zora/index.js diff --git a/projects/shape/index.js b/projects/shape/index.js new file mode 100644 index 0000000000..cded2dc164 --- /dev/null +++ b/projects/shape/index.js @@ -0,0 +1,15 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B", + '0xEB06fFa16011B5628BaB98E29776361c83741dd3' + ], + fetchCoValentTokens: true, + }), + }, +}; diff --git a/projects/zora/index.js b/projects/zora/index.js new file mode 100644 index 0000000000..14e04e0898 --- /dev/null +++ b/projects/zora/index.js @@ -0,0 +1,15 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: (api) => + sumTokens2({ + api, + owners: [ + "0x3e2Ea9B92B7E48A52296fD261dc26fd995284631", + "0x1a0ad011913A150f69f6A19DF447A0CfD9551054", + ], + fetchCoValentTokens: true, + }), + }, +}; From daf838a8f9d29fe14d04121cfcb918938f73e3c2 Mon Sep 17 00:00:00 2001 From: hamman247 Date: Fri, 27 Dec 2024 15:00:02 -0400 Subject: [PATCH 1644/1768] Add BitUSD adapters --- projects/bitusd/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/bitusd/index.js diff --git a/projects/bitusd/index.js b/projects/bitusd/index.js new file mode 100644 index 0000000000..c3341944e4 --- /dev/null +++ b/projects/bitusd/index.js @@ -0,0 +1,10 @@ +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') + +module.exports = { + start: '2024-11-30', + sapphire: { + tvl: sumTokensExport({ owner: '0x9be6f065aFC34ca99e82af0f0BfB9a01E3f919eE', tokens: [nullAddress] }, + { owner: '0xa16ed0B92a27E8F7fFf1aB513c607115636cb63f', tokens: [nullAddress] }), + }, +} + From ad24dc14e89400bcd7619e9900f6c9b5e2e60929 Mon Sep 17 00:00:00 2001 From: AlehNat Date: Sun, 22 Dec 2024 23:14:52 +0100 Subject: [PATCH 1645/1768] add FIVA (https://www.thefiva.com) adapter --- projects/fiva/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/fiva/index.js diff --git a/projects/fiva/index.js b/projects/fiva/index.js new file mode 100644 index 0000000000..0cbafa144a --- /dev/null +++ b/projects/fiva/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require("../helper/chain/ton"); +const ADDRESSES = require("../helper/coreAssets.json"); + +const tsTON6mSyMinter = "EQAxGi9Al7hamLAORroxGkvfap6knGyzI50ThkP3CLPLTtOZ" + + +module.exports = { + methodology: 'Counts FIVA smartcontract balance as TVL.', + ton: { + tvl: sumTokensExport({ owners: [tsTON6mSyMinter], tokens: [ADDRESSES.null]}), + } +} From b342044bc6f57da0045f518fdae482b419b9f7ba Mon Sep 17 00:00:00 2001 From: 0xShad0w <44497716+0xShad0w@users.noreply.github.com> Date: Sat, 28 Dec 2024 07:57:38 +0000 Subject: [PATCH 1646/1768] add shadow-cl --- projects/shadow-cl/index.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 projects/shadow-cl/index.js diff --git a/projects/shadow-cl/index.js b/projects/shadow-cl/index.js new file mode 100644 index 0000000000..04f951dc51 --- /dev/null +++ b/projects/shadow-cl/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + sonic: { factory: '0xcD2d0637c94fe77C2896BbCBB174cefFb08DE6d7', fromBlock: 1705910, }, +}) \ No newline at end of file From 57ae700bc98c53e4dcfb89a090d848f33cd5a317 Mon Sep 17 00:00:00 2001 From: Define101 Date: Sat, 28 Dec 2024 11:06:46 +0000 Subject: [PATCH 1647/1768] fix my reepo --- projects/zeebu/index.js | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/projects/zeebu/index.js b/projects/zeebu/index.js index eb559cc0ae..e885c16d61 100644 --- a/projects/zeebu/index.js +++ b/projects/zeebu/index.js @@ -1,4 +1,5 @@ -const { staking } = require('../helper/staking') +const { stakings } = require("../helper/staking"); +const { pool2s } = require("../helper/pool2"); const VOTING_ESCROW_ADDRESSES = { ethereum: '0x8e76Cdf3b14c540aB54aFa7f8492AC1d16Ecfb35', @@ -12,12 +13,26 @@ const ZBU_ADDRESSES = { bsc: '0x4D3dc895a9EDb234DfA3e303A196c009dC918f84', }; +const lpTokens = [ + '0xC3889F9764d68BDF2e16f237206746344172A147' +]; -Object.keys(VOTING_ESCROW_ADDRESSES).forEach(chain => { - module.exports[chain] = { - tvl: () => ({}), - staking: staking(VOTING_ESCROW_ADDRESSES[chain], ZBU_ADDRESSES[chain]) - } -}) +const stackingcontract = [ + '0x45dd22aCe398002b34cB37b363B2F02C7dd47842' +]; -module.exports.base.pool2 = staking('0x45dd22aCe398002b34cB37b363B2F02C7dd47842', '0xC3889F9764d68BDF2e16f237206746344172A147') \ No newline at end of file +module.exports = { + ethereum: { + staking : stakings([VOTING_ESCROW_ADDRESSES["ethereum"]],ZBU_ADDRESSES["ethereum"]), + tvl: () => ({}) + }, + base: { + staking : stakings([VOTING_ESCROW_ADDRESSES["base"]],ZBU_ADDRESSES["base"]), + pool2: pool2s(stackingcontract,lpTokens), + }, + bsc: { + staking : stakings([VOTING_ESCROW_ADDRESSES["bsc"]],ZBU_ADDRESSES["bsc"]), + }, + methodology: + 'Counts ZBU tokens locked in Voting Escrow contracts across Ethereum, Base, and BSC.', +}; From 661c4756eb93a35bb13dbddb19b083c106466bf6 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sat, 28 Dec 2024 11:24:45 +0000 Subject: [PATCH 1648/1768] fix zebbu (#12901) --- projects/zeebu/index.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/projects/zeebu/index.js b/projects/zeebu/index.js index d4b0402706..5b583d7e15 100644 --- a/projects/zeebu/index.js +++ b/projects/zeebu/index.js @@ -13,12 +13,26 @@ const ZBU_ADDRESSES = { bsc: '0x4D3dc895a9EDb234DfA3e303A196c009dC918f84', }; +const lpTokens = [ + '0xC3889F9764d68BDF2e16f237206746344172A147' +]; -Object.keys(VOTING_ESCROW_ADDRESSES).forEach(chain => { - module.exports[chain] = { - tvl: () => ({}), - staking: staking(VOTING_ESCROW_ADDRESSES[chain], ZBU_ADDRESSES[chain]) - } -}) +const stackingcontract = [ + '0x45dd22aCe398002b34cB37b363B2F02C7dd47842' +]; -module.exports.base.pool2 = staking('0x45dd22aCe398002b34cB37b363B2F02C7dd47842', '0xC3889F9764d68BDF2e16f237206746344172A147') \ No newline at end of file +module.exports = { + ethereum: { + staking: stakings([VOTING_ESCROW_ADDRESSES["ethereum"]], ZBU_ADDRESSES["ethereum"]), + tvl: () => ({}) + }, + base: { + staking: stakings([VOTING_ESCROW_ADDRESSES["base"]], ZBU_ADDRESSES["base"]), + pool2: pool2s(stackingcontract, lpTokens), + }, + bsc: { + staking: stakings([VOTING_ESCROW_ADDRESSES["bsc"]], ZBU_ADDRESSES["bsc"]), + }, + methodology: + 'Counts ZBU tokens locked in Voting Escrow contracts across Ethereum, Base, and BSC.', +}; \ No newline at end of file From 9eca2debf7c06593ed02ffed5ec7f34f5b8d4287 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sat, 28 Dec 2024 21:55:03 +0700 Subject: [PATCH 1649/1768] DackieSwap update Dackie address and staking contract --- projects/dackieswap-v2/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/dackieswap-v2/index.js b/projects/dackieswap-v2/index.js index 2fce6ef050..6a262b5d20 100644 --- a/projects/dackieswap-v2/index.js +++ b/projects/dackieswap-v2/index.js @@ -1,11 +1,11 @@ const { getUniTVL } = require("../helper/unknownTokens"); const { stakings } = require("../helper/staking"); -const DACKIE = "0xc2BC7A73613B9bD5F373FE10B55C59a69F4D617B"; +const DACKIE = "0x73326b4d0225c429bed050c11C4422d91470AaF4"; const stakingPools = [ // Lock & flexible pool - "0x4Ad387bcb03B92a6e22A72391Cc37493Fc388B05", + "0xF6C5b5Df9Bcee40cd474CCd6373f99b56dBCF5E5", ]; const config = { xlayer: '0x757cd583004400ee67e5cc3c7a60c6a62e3f6d30', From b666eca837723d5e8ea5b92e5511f23548deb614 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 28 Dec 2024 18:59:18 +0000 Subject: [PATCH 1650/1768] add sonic --- projects/solidly-v3/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/solidly-v3/index.js b/projects/solidly-v3/index.js index 24181e4bee..11689338ab 100644 --- a/projects/solidly-v3/index.js +++ b/projects/solidly-v3/index.js @@ -7,6 +7,7 @@ module.exports = uniV3Export({ base: { factory: "0x70fe4a44ea505cfa3a57b95cf2862d4fd5f0f687", fromBlock: 9672720, permitFailure: true }, arbitrum: { factory: "0x70fe4a44ea505cfa3a57b95cf2862d4fd5f0f687", fromBlock: 173576189, permitFailure: true, }, fantom: { factory: "0x70fe4a44ea505cfa3a57b95cf2862d4fd5f0f687", fromBlock: 73057898, permitFailure: true, }, + sonic: { factory: "0x777fAca731b17E8847eBF175c94DbE9d81A8f630", fromBlock: 514659, permitFailure: true, }, }); module.exports.hallmarks = [ [1693699200, "Solidly V3 launch"], From d27a849340618340215410333e5cd898660370ec Mon Sep 17 00:00:00 2001 From: Alien Deployer Date: Sat, 28 Dec 2024 23:01:09 +0300 Subject: [PATCH 1651/1768] update Stability: add base, real, sonic --- projects/stability/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/projects/stability/index.js b/projects/stability/index.js index b2c1d60017..4e6ab6c3b8 100644 --- a/projects/stability/index.js +++ b/projects/stability/index.js @@ -8,6 +8,15 @@ const config = { polygon: { vaultManager: '0x6008b366058B42792A2497972A3312274DC5e1A8', }, + base: { + vaultManager: '0x2ba8C6A519CEDB6d1C35cEb14E8642625E91F77C', + }, + real: { + vaultManager: '0x7146efaab12A083b9826c66162062c21eC70fe3c', + }, + sonic: { + vaultManager: '0x589a504f2ee9d054b483c700fa814863d639381e', + }, } Object.keys(config).forEach(chain => { From 93a00cc7509131b74900e85e210ab127a093effb Mon Sep 17 00:00:00 2001 From: Alien Deployer Date: Sat, 28 Dec 2024 23:03:05 +0300 Subject: [PATCH 1652/1768] remove outdated file --- projects/stability/abi.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 projects/stability/abi.json diff --git a/projects/stability/abi.json b/projects/stability/abi.json deleted file mode 100644 index 92693fc605..0000000000 --- a/projects/stability/abi.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "vaultAddresses": "function vaultAddresses() view returns (address[] memory vaultAddress)", - "strategy": "address:strategy", - "assetsAmounts": "function assetsAmounts() view returns (address[] memory assets_, uint[] memory amounts_)" -} \ No newline at end of file From 63e1e5b6cce009cbcca1d499bb72779c6cfcb655 Mon Sep 17 00:00:00 2001 From: 0xALUCARD <0xALUCARD@protonmail.com> Date: Sat, 28 Dec 2024 22:06:31 +0100 Subject: [PATCH 1653/1768] add spooky v2 and v3 on sonic --- projects/spookyswap-v3/index.js | 2 ++ projects/spookyswap/index.js | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/spookyswap-v3/index.js b/projects/spookyswap-v3/index.js index ea06e35f49..130009168b 100644 --- a/projects/spookyswap-v3/index.js +++ b/projects/spookyswap-v3/index.js @@ -2,9 +2,11 @@ const { uniV3Export } = require("../helper/uniswapV3"); const factory = "0x7928a2c48754501f3a8064765ECaE541daE5c3E6"; const factory_bttc = "0xE12b00681dD2e90f51d9Edf55CE1A7D171338165"; +const factory_sonic = "0x3D91B700252e0E3eE7805d12e048a988Ab69C8ad"; module.exports = uniV3Export({ fantom: { factory, fromBlock: 70992836, blacklistedTokens:['0x6e5e3ce13e2c7d4de000f93c4909164d0aa59f0b'] }, //eon: { factory, fromBlock: 679684 }, bittorrent: { factory: factory_bttc, fromBlock: 26441276 }, + sonic: { factory: factory_sonic, fromBlock: 286535 }, }) diff --git a/projects/spookyswap/index.js b/projects/spookyswap/index.js index cd7b2c9190..dd2a206e91 100644 --- a/projects/spookyswap/index.js +++ b/projects/spookyswap/index.js @@ -9,5 +9,8 @@ module.exports={ }, bittorrent: { tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0xee4bc42157cf65291ba2fe839ae127e3cc76f741' }), + }, +sonic: { + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0xEE4bC42157cf65291Ba2FE839AE127e3Cc76f741' }), } -} \ No newline at end of file +} From 19d66e2df34284641cc700bbf3bddc7045f8a9e6 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sun, 29 Dec 2024 11:08:45 +0000 Subject: [PATCH 1654/1768] mimas borrowed (#12908) --- projects/mimas-finance/index.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/projects/mimas-finance/index.js b/projects/mimas-finance/index.js index 839232c6dd..3b6535801d 100644 --- a/projects/mimas-finance/index.js +++ b/projects/mimas-finance/index.js @@ -1,5 +1,5 @@ -const ADDRESSES = require('../helper/coreAssets.json') -const {compoundExports} = require('../helper/compound') +const ADDRESSES = require('../helper/coreAssets.json'); +const { compoundExports } = require('../helper/compound'); const { stakingUnknownPricedLP } = require("../helper/staking"); const token = "0x10C9284E6094b71D3CE4E38B8bFfc668199da677"; @@ -8,13 +8,27 @@ const stakingContract = "0x268E2E1e5a465034Ee5742DA578feb41B228ad7B"; const wCRO = ADDRESSES.cronos.WCRO_1; const mmCRO = "0xff024211741059a2540b01f5Be2e75fC0c1b3d82"; +const customCompoundExports = (comptroller, cToken, underlying) => { + const originalExports = compoundExports(comptroller, cToken, underlying); + return { + ...originalExports, + borrowed: async () => 0, // Hard-code borrowed to 0 + }; +}; + module.exports = { cronos: { - ...compoundExports( + ...customCompoundExports( "0xdD8c94211dD19155EFFbd57EAb6D4e0DE31A3b9E", mmCRO, - wCRO, + wCRO + ), + staking: stakingUnknownPricedLP( + stakingContract, + token, + "cronos", + "0xf56FDfeeF0Ba3de23DaB13a85602bd7BF135E80f", + addr => `cronos:${addr}` ), - staking: stakingUnknownPricedLP(stakingContract, token, "cronos", "0xf56FDfeeF0Ba3de23DaB13a85602bd7BF135E80f", addr=>`cronos:${addr}`) - } -} + }, +}; From 2966ae5dd2190010bea4696914093ad4005fe1bc Mon Sep 17 00:00:00 2001 From: Tyler Tsai Date: Sun, 29 Dec 2024 23:57:43 +0800 Subject: [PATCH 1655/1768] feat: add new stake pool --- projects/helio-money/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index e5e7ec45b9..5bcaae15a4 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -9,22 +9,30 @@ const lisLPs = [ "0xC23d348f9cC86dDB059ec798e87E7F76FBC077C1", // Lista LP aHAY-USDT "0xF6aB5cfdB46357f37b0190b793fB199D62Dcf504", // Lista LP UV-17-THE "0x1Cf9c6D475CdcA67942d41B0a34BD9cB9D336C4d", // Lista LP sAMM-HAY/FRAX + "0x9eb77a54a33069a319d91f493e6b1c9066fb38f7" // Lista LP pancake lisUSD/USDT + ]; + const abi = { lpToken: "address:lpToken", - lpTotalSupply: "uint256:lpTotalSupply", + totalSupply: "uint256:totalSupply", }; const pool2 = async (api) => { const [lisLpTokens, lisLpBalances] = await Promise.all([ api.multiCall({calls: lisLPs.map((lis) => ({ target: lis })), abi: abi.lpToken }), - api.multiCall({calls: lisLPs.map((lis) => ({ target: lis })), abi: abi.lpTotalSupply }), + api.multiCall({calls: lisLPs.map((lis) => ({ target: lis })), abi: abi.totalSupply }), ]); + lisLPs.forEach((_lp, i) => { + api.add(lisLpTokens[i], lisLpBalances[i]) }) + + + } module.exports = { From f6830b6dba1812fcba04c702b9c8bfd71723001c Mon Sep 17 00:00:00 2001 From: LpcAries <291482574@qq.com> Date: Mon, 30 Dec 2024 10:27:26 +0800 Subject: [PATCH 1656/1768] add morph config --- projects/izumi-iziswap/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/izumi-iziswap/index.js b/projects/izumi-iziswap/index.js index bb866ab412..49088c8938 100644 --- a/projects/izumi-iziswap/index.js +++ b/projects/izumi-iziswap/index.js @@ -37,6 +37,7 @@ const poolHelpers = { 'core': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], 'gravity': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], 'iotex': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], + 'morph': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], } // iziswap liquidityManager contracts const blacklistedTokens = [ From d065f2a9875c59532845eb85eed7f68da438cbd1 Mon Sep 17 00:00:00 2001 From: Jun Luo Date: Mon, 30 Dec 2024 14:15:22 +0800 Subject: [PATCH 1657/1768] bedrock LRT: brBTC --- projects/brbtc/index.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 projects/brbtc/index.js diff --git a/projects/brbtc/index.js b/projects/brbtc/index.js new file mode 100644 index 0000000000..5333cd9e7d --- /dev/null +++ b/projects/brbtc/index.js @@ -0,0 +1,39 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2, } = require('../helper/unwrapLPs') + +const chainConfigs = { + ethereum: { + addr: "0x2eC37d45FCAE65D9787ECf71dc85a444968f6646", + vault: "0x1419b48e5C1f5ce413Cf02D6dcbe1314170E3386", + assets: [ + ADDRESSES.ethereum.WBTC,//WBTC + "0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568",//uniBTC + "0xC96dE26018A54D51c097160568752c4E3BD6C364",//FBTC + "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",//cbBTC + "0x2F913C820ed3bEb3a67391a6eFF64E70c4B20b19",//MBTC + ], + }, + bsc: { + addr: "0x733a6c29eDA4a58931AE81b8d91e29f2EAf01df3", + vault: "0x1dF46ec5e86FeC4589b3fA7D60B6Dc7Ef890AD93", + assets: [ + ADDRESSES.bsc.BTCB,//BTCB + "0x6B2a01A5f79dEb4c2f3c0eDa7b01DF456FbD726a",//uniBTC + "0xC96dE26018A54D51c097160568752c4E3BD6C364",//FBTC + ], + } +} +module.exports = { + methodology: 'brBTC standing for Bedrock BTC, is designed specifically for Bitcoin holders seeking to participate in the next generation of DeFi opportunities. It accepts uniBTC and multiple wrapped BTC assets and Bedrock manages those assets on multiple trusted yield source layers such as Babylon, Kernel, Pell, Satlayer and etc.', + doublecounted: true, +} + +async function tvl(api) { + const cfg = chainConfigs[api.chain] ?? {} + if (!cfg) return; + return sumTokens2({ api, owner: cfg.vault, tokens: cfg.assets }) +} + +['ethereum', 'bsc'].forEach(chain => { + module.exports[chain] = { tvl: tvl } +}) \ No newline at end of file From 4e4347ffa8e184321528b519b36523c1fbf4199c Mon Sep 17 00:00:00 2001 From: "Guillermo M. Narvaja" Date: Mon, 30 Dec 2024 07:33:31 -0300 Subject: [PATCH 1658/1768] Ensuro: adds new contracts to the TVL calculation --- projects/ensuro/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/ensuro/index.js b/projects/ensuro/index.js index 5039e7d9f9..b2fe237f1c 100644 --- a/projects/ensuro/index.js +++ b/projects/ensuro/index.js @@ -27,6 +27,7 @@ const addressBook = { {name: "eToken Junior FortuneCredit", address: "0xb1Dff6ce862273adcA2B9eFD96A8976764Ac7414"}, {name: "eToken Junior Azzegura", address: "0x45435f79103472eD62fB9C92F04c50b188b22B99"}, {name: "eToken Junior Covest", address: "0x92624870dC092C36943682375Df8246BF126D410"}, + {name: "eToken Junior Poncho", address: "0x0AA6623Be5b293fDde18aE0095163785a0b0E4E3"}, // PremiumsAccounts {name: "PremiumsAccount Koala", address: "0xCCf5C404d32eB6E777088AB13837a1b8dCBA9328"}, {name: "PremiumsAccount Innov Zone", address: "0x4f43B8F252887F814ED689346fdb5Bd266394520"}, @@ -43,12 +44,14 @@ const addressBook = { {name: "PremiumsAccount FortuneCredit", address: "0xaF48bd33916836F5A3dD8C9095692d240A6A2567"}, {name: "PremiumsAccount Azzegura", address: "0x6CB730dF6B3DB5BAac5FD96F50b04005c1B3A5F7"}, {name: "PremiumsAccount Covest", address: "0x1D71E3901dB121F05A4a06F92440108055386355"}, + {name: "PremiumsAccount Poncho", address: "0xa490D80A80c8E547D040CE3aBBDCC8CcAD584e4c"}, // Main CFLs {name: "CFL Koala", address: "0xf6b7a278afFbc905b407E01893B287D516016ce0"}, {name: "CFL Spot", address: "0x48Ff8B1493c6A3545Aea3F0812f1303E2f958bF4"}, {name: "CFL Bliss", address: "0x936DAC0eeA5e4E90B8384B96d1aA6284Ce106f71"}, // MultiStrategy Vault - Vault that aggregates assets of several reserves {name: "MultiStrategy Vault", address: "0x1EE585dcea25cbDa16BE8cfeFa381A1F32acA418"}, + {name: "MultiStrategy Vault V2", address: "0x14F6DFEE761455247C6bf2b2b052a1F6245dD6FB"}, ], } }; From ad8144e9e6f56a8890d4d0e850cc715a4b0de12d Mon Sep 17 00:00:00 2001 From: LpcAries <291482574@qq.com> Date: Mon, 30 Dec 2024 18:53:58 +0800 Subject: [PATCH 1659/1768] add duckswap adapter --- projects/duckswap/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/duckswap/index.js diff --git a/projects/duckswap/index.js b/projects/duckswap/index.js new file mode 100644 index 0000000000..46f0c7692e --- /dev/null +++ b/projects/duckswap/index.js @@ -0,0 +1,10 @@ +const { iziswapExport } = require('../helper/iziswap') + +const poolHelpers = { + 'duckchain': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], +} // liquidityManager contracts + + +Object.keys(poolHelpers).forEach(chain => { + module.exports[chain] = { tvl: iziswapExport({ poolHelpers: poolHelpers[chain], }), } +}) \ No newline at end of file From 17204029e26704193ce7ceb1290bc10b36cf35a8 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Mon, 30 Dec 2024 13:19:07 +0100 Subject: [PATCH 1660/1768] feat: yield bearing assets --- projects/rings/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/rings/index.js b/projects/rings/index.js index 4e20b7b281..4db5d48d9a 100644 --- a/projects/rings/index.js +++ b/projects/rings/index.js @@ -14,11 +14,17 @@ const config = { ], supportedAssets: [ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC + '0x98C23E9d8f34FEFb1B7BD6a91B7FF122F4e16F5c', // AAVEUSDC '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT + '0x23878914EFE38d27C4D67Ab83ed1b93A74D4086a', // AAVEUSDT '0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f', // GHO + '0x1a88Df1cFe15Af22B3c4c783D4e6F7F9e0C1885d', // STKGHO '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI + '0x83F20F44975D03b1b09e64809B757c47f942BEeA', // SDAI '0xdC035D45d973E3EC169d2276DDab16f1e407384F', // USDS + '0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD', // SUSDS '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + '0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8', // AAVEWETH '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // WSTETH '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', // WEETH ] From d67570af6bf1fd6be9b84c227f1b5be4bd7ac214 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Mon, 30 Dec 2024 13:32:39 +0100 Subject: [PATCH 1661/1768] feat: replace weth by new address --- projects/rings/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/rings/index.js b/projects/rings/index.js index 4db5d48d9a..76bbd6825e 100644 --- a/projects/rings/index.js +++ b/projects/rings/index.js @@ -36,7 +36,7 @@ const config = { ], supportedAssets: [ '0x29219dd400f2Bf60E5a23d13Be72B486D4038894', // USDC - '0x309C92261178fA0CF748A855e90Ae73FDb79EBc7', // WETH + '0x50c42dEAcD8Fc9773493ED674b675bE577f2634b', // WETH ] }, } From ba36e14334ed79a7e249d9dc465c373e45c5f19f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 30 Dec 2024 12:45:50 +0000 Subject: [PATCH 1662/1768] remove duplication (not necessary tho) --- projects/helper/bitcoin-book/fetchers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index 4ec6e415ea..6a613cf7ee 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -46,7 +46,7 @@ module.exports = { const users = await api.call({ abi: 'address[]:getQualifiedUsers', target: '0xbee335BB44e75C4794a0b9B54E8027b111395943' }) const userInfos = await api.multiCall({ abi: abi.getQualifiedUserInfo, target: '0xbee335BB44e75C4794a0b9B54E8027b111395943', calls: users }) userInfos.forEach(i => staticAddresses.push(i.depositAddress)) - return staticAddresses + return Array.from(new Set(staticAddresses)) }, b14g: async () => { From 9c796e5379a081fb045134c4ba77738e579fd89c Mon Sep 17 00:00:00 2001 From: imef-femi Date: Mon, 30 Dec 2024 15:43:11 +0100 Subject: [PATCH 1663/1768] add satoshi-perps --- projects/satoshi-perps/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/satoshi-perps/index.js diff --git a/projects/satoshi-perps/index.js b/projects/satoshi-perps/index.js new file mode 100644 index 0000000000..fed2628d8e --- /dev/null +++ b/projects/satoshi-perps/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + core: { + tvl: gmxExports({ vault: '0x736Cad071Fdb5ce7B17F35bB22f68Ad53F55C207', fromBlock: 20537386, }), + }, +} \ No newline at end of file From 2316e7eb55dd51eb831b4abfd09adf3fd1670035 Mon Sep 17 00:00:00 2001 From: t0rbik Date: Mon, 30 Dec 2024 15:55:23 +0100 Subject: [PATCH 1664/1768] add iotaevm --- projects/graphene/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/graphene/index.js b/projects/graphene/index.js index f65523875b..a48c01035d 100644 --- a/projects/graphene/index.js +++ b/projects/graphene/index.js @@ -14,6 +14,10 @@ const config = { fromBlock: 18438182, controller: "0x7900f766F06e361FDDB4FdeBac5b138c4EEd8d4A", }, + iotaevm: { + fromBlock: 1936296, + controller: "0x0E4d23092A4a12caAd0E22e0892EcEC7C09DC51c", + }, }; Object.keys(config).forEach((chain) => { From 3441497f07bb6302dc316af6dc155cf12836acd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Pinto?= <87367287+Sk1mer12@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:42:47 +0000 Subject: [PATCH 1665/1768] Update index.js --- projects/yieldnest/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/yieldnest/index.js b/projects/yieldnest/index.js index deb2d6737a..9e26d6c82a 100644 --- a/projects/yieldnest/index.js +++ b/projects/yieldnest/index.js @@ -23,7 +23,8 @@ module.exports = { tvl: async (api) => { const ynBNB = '0x304B5845b9114182ECb4495Be4C91a273b74B509' const ynBTCk = '0x78839cE14a8213779128Ee4da6D75E1326606A56' - return api.erc4626Sum({ calls: [ynBNB, ynBTCk], isOG4626: true}) + const ynBNBx = '0x32C830f5c34122C6afB8aE87ABA541B7900a2C5F' + return api.erc4626Sum({ calls: [ynBNB, ynBTCk, ynBNBx], isOG4626: true}) } }, } From 4a0f389a40d666d393542042f654ceb34f135044 Mon Sep 17 00:00:00 2001 From: Michael Ghen Date: Mon, 30 Dec 2024 13:25:14 -0500 Subject: [PATCH 1666/1768] Added Run Money Adapter --- projects/run-money/index.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 projects/run-money/index.js diff --git a/projects/run-money/index.js b/projects/run-money/index.js new file mode 100644 index 0000000000..87ebfbc70c --- /dev/null +++ b/projects/run-money/index.js @@ -0,0 +1,32 @@ +const TRACKED_TOKENS = { + aUSDC: '0x4e65fE4DbA92790696d040ac24Aa414708F5c0AB', // Aave USDC on Base + aETH: '0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7' // Aave ETH on Base +}; + +// ClubPool contract address +const CONTRACT_ADDRESS = '0x1089db83561d4c9b68350e1c292279817ac6c8da'; + +async function tvl(api) { + const tokens = Object.values(TRACKED_TOKENS); + + const balances = await api.multiCall({ + abi: 'erc20:balanceOf', + calls: tokens.map(token => ({ + target: token, + params: [CONTRACT_ADDRESS] + })) + }); + + api.addTokens( + tokens, + balances + ); +} + +module.exports = { + methodology: "Measures TVL of Run Money by tracking aUSDC and aETH balances in the ClubPool contract.", + start: 21942754, // Deployment block of ClubPool + base: { + tvl + } +}; \ No newline at end of file From 4084102b62decd587769c813163be8654fa99277 Mon Sep 17 00:00:00 2001 From: samclassix Date: Mon, 30 Dec 2024 23:30:45 +0100 Subject: [PATCH 1667/1768] feat: update frankencoin with new graph, position v1 + v2 --- projects/frankencoin/index.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/projects/frankencoin/index.js b/projects/frankencoin/index.js index d5722c1fc8..d61914df26 100644 --- a/projects/frankencoin/index.js +++ b/projects/frankencoin/index.js @@ -1,14 +1,21 @@ -const { sumTokens2 } = require('../helper/unwrapLPs') -const { cachedGraphQuery } = require('../helper/cache') +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { graphQuery } = require('../helper/http'); -const MintingHub = "0x7bbe8F18040aF0032f4C2435E7a76db6F1E346DF"; -const Collaterals = ["0xb4272071ecadd69d933adcd19ca99fe80664fc08"]; // XCHF +// @dev: mapping of XCHF to its Bridge +const XCHFBridge = ["0xb4272071ecadd69d933adcd19ca99fe80664fc08", "0x7bbe8F18040aF0032f4C2435E7a76db6F1E346DF"]; async function tvl(api) { - const tokensAndOwners = Collaterals.map(i => [i, MintingHub]) - const { positions } = await cachedGraphQuery('frankencoin', 'https://api.thegraph.com/subgraphs/name/frankencoin-zchf/frankencoin-subgraph', '{ positions { position collateral } }') - positions.forEach(i => tokensAndOwners.push([i.collateral, i.position])) - return sumTokens2({ api, tokensAndOwners, }) + const tokensAndOwners = [XCHFBridge]; + + // @dev: query of positions from minting hubs via frankencoin graph (ponder) + const { positionV1s } = await graphQuery('https://ponder.frankencoin.com/', '{ positionV1s { items { position collateral } } }'); + const { positionV2s } = await graphQuery('https://ponder.frankencoin.com/', '{ positionV2s { items { position collateral } } }'); + + // @dev: mapping of positions from minting hubs + positionV1s?.items?.forEach(i => tokensAndOwners.push([i.collateral, i.position])); + positionV2s?.items?.forEach(i => tokensAndOwners.push([i.collateral, i.position])); + + return sumTokens2({ api, tokensAndOwners, }); } module.exports = { From d07098698cad01f651d0e4ea9e7caccfef8dc20f Mon Sep 17 00:00:00 2001 From: samclassix Date: Mon, 30 Dec 2024 23:35:12 +0100 Subject: [PATCH 1668/1768] feat: using cachedGraphQuery --- projects/frankencoin/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/frankencoin/index.js b/projects/frankencoin/index.js index d61914df26..09560c0f09 100644 --- a/projects/frankencoin/index.js +++ b/projects/frankencoin/index.js @@ -1,5 +1,5 @@ const { sumTokens2 } = require('../helper/unwrapLPs'); -const { graphQuery } = require('../helper/http'); +const { cachedGraphQuery } = require('../helper/cache') // @dev: mapping of XCHF to its Bridge const XCHFBridge = ["0xb4272071ecadd69d933adcd19ca99fe80664fc08", "0x7bbe8F18040aF0032f4C2435E7a76db6F1E346DF"]; @@ -8,8 +8,8 @@ async function tvl(api) { const tokensAndOwners = [XCHFBridge]; // @dev: query of positions from minting hubs via frankencoin graph (ponder) - const { positionV1s } = await graphQuery('https://ponder.frankencoin.com/', '{ positionV1s { items { position collateral } } }'); - const { positionV2s } = await graphQuery('https://ponder.frankencoin.com/', '{ positionV2s { items { position collateral } } }'); + const { positionV1s } = await cachedGraphQuery('frankencoinV1', 'https://ponder.frankencoin.com', '{ positionV1s { items { position collateral } } }'); + const { positionV2s } = await cachedGraphQuery('frankencoinV2', 'https://ponder.frankencoin.com', '{ positionV2s { items { position collateral } } }'); // @dev: mapping of positions from minting hubs positionV1s?.items?.forEach(i => tokensAndOwners.push([i.collateral, i.position])); From 6471939d92d857d452edb702f47712389e6f83ad Mon Sep 17 00:00:00 2001 From: kevin gondokusumo Date: Tue, 31 Dec 2024 11:21:12 +0800 Subject: [PATCH 1669/1768] chore: update address --- projects/machfi/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/machfi/index.js b/projects/machfi/index.js index afdcbd436b..295f7d84d7 100644 --- a/projects/machfi/index.js +++ b/projects/machfi/index.js @@ -1,5 +1,5 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { - sonic: compoundExports2({comptroller: '0xxx', cether: '0xxx'}), + sonic: compoundExports2({comptroller: '0x646F91AbD5Ab94B76d1F9C5D9490A2f6DDf25730', cether: '0x9F5d9f2FDDA7494aA58c90165cF8E6B070Fe92e6'}), } From d59f6778d9ed4e336b64c9b8e3f528ad4ab9a30f Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Tue, 31 Dec 2024 18:25:29 +0800 Subject: [PATCH 1670/1768] add Prime Standard and Prime A to TVL calculation --- projects/vectis/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index bcf2bb46fa..647b4d3ead 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -22,7 +22,10 @@ const vaultUserAddresses = [ new PublicKey("FyH3qGRQSG7AmdEsPEVDxdJJLnLhAn3CZ48acQU34LFr"), //Vault E new PublicKey("MzEPFp2LwCSMMPHLQsqfE7SN6xkPHZ8Uym2HfrH7g5P"), //Yield Compass A new PublicKey("CMiyE7M98DSPBEhQGTA6CzNodWkNuuW4y9HoocfK75nG"), //Yield Compass B - new PublicKey("CnaXXuzc2S5UFSGoBRuKVNnzXBvxbaMwq6hZu5m91CAV") //LST Yield Compass + new PublicKey("CnaXXuzc2S5UFSGoBRuKVNnzXBvxbaMwq6hZu5m91CAV"),//LST Yield Compass + new PublicKey("Fwfu73gfD5KzqtSAVKqmW414rshmYpoHY4nJ8LWqPyHB"), //Prime standard + new PublicKey("6NaF3EpArzHJ4x5GeTzjcUcdic29Rt4sy4pn6LP7iJ4r") //Prime A + From 942b4c848980baed4e2c4603ec0a73426725dca7 Mon Sep 17 00:00:00 2001 From: Weso <69535002+MirthFutures@users.noreply.github.com> Date: Tue, 31 Dec 2024 12:45:17 -0500 Subject: [PATCH 1671/1768] Adding Sonic Chain for Beefy (#12928) --- projects/beefy/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/beefy/index.js b/projects/beefy/index.js index 7a4d0c8172..003419f65d 100644 --- a/projects/beefy/index.js +++ b/projects/beefy/index.js @@ -40,6 +40,7 @@ const chains = { fuse: 122, heco: 128, polygon: 137, + sonic: 146, manta: 169, fantom: 250, fraxtal: 252, From a63ed6959e5acc1165049a746544b91d9c361762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kre=C5=A1imir=20Klas?= Date: Tue, 31 Dec 2024 17:38:51 +0000 Subject: [PATCH 1672/1768] kai: add suiUSDT vault to tracking --- projects/helper/coreAssets.json | 3 ++- projects/kai/index.js | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 58df64f120..aa812bbfb7 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1426,7 +1426,8 @@ "BUCK": "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", "SUI": "0x2::sui::SUI", "USDC_CIRCLE": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", - "ETH": "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH" + "ETH": "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH", + "suiUSDT": "0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT" }, "grove": { "WGRV": "0xE85f139488c689038028a3EB8fC38dcC29D4C340" diff --git a/projects/kai/index.js b/projects/kai/index.js index cd9c63b41d..d3b97e64bb 100644 --- a/projects/kai/index.js +++ b/projects/kai/index.js @@ -17,9 +17,13 @@ const UsdcVault = { id: '0x5663035df5f403ad5a015cc2a3264de30370650bc043c4dab4d0012ea5cb7671', tType: ADDRESSES.sui.USDC_CIRCLE } +const suiUsdtVault = { + id: '0x7a2e56773ad4d9bd4133c67ed0ae60187f00169b584a55c0204175897e41d166', + tType: ADDRESSES.sui.suiUSDT +} async function tvl(api) { - const vaults = [wUsdcVault, wUsdtVault, SuiVault, UsdcVault] + const vaults = [wUsdcVault, wUsdtVault, SuiVault, UsdcVault, suiUsdtVault] const vaultObjs = await sui.getObjects(vaults.map(v => v.id)) for (let i = 0; i < vaults.length; i++) { From e968b2d47d6dbe31c6268e573fd1bd1bc8668f40 Mon Sep 17 00:00:00 2001 From: sniffy Date: Wed, 1 Jan 2025 08:49:52 +0530 Subject: [PATCH 1673/1768] Adding YieldFi protocol --- projects/yield-fi/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 projects/yield-fi/index.js diff --git a/projects/yield-fi/index.js b/projects/yield-fi/index.js new file mode 100644 index 0000000000..c43a7ce743 --- /dev/null +++ b/projects/yield-fi/index.js @@ -0,0 +1,14 @@ +const config = { + ethereum: "0x1CE7D9942ff78c328A4181b9F3826fEE6D845A97", + optimism: '0x895e15020C3f52ddD4D8e9514eB83C39F53B1579', + bob: '0x895e15020C3f52ddD4D8e9514eB83C39F53B1579' +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: config[chain] }) + api.add(config[chain], supply) + } + } +}) \ No newline at end of file From 74cddd7ebc3cc8bf297b8319a8603faa6a6e4b3a Mon Sep 17 00:00:00 2001 From: swan-of-bodom Date: Thu, 2 Jan 2025 00:53:29 +0100 Subject: [PATCH 1674/1768] impermax-finance: add sonic and missing blast factory --- projects/impermax/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/projects/impermax/index.js b/projects/impermax/index.js index 0b5d8d3416..337639cc74 100644 --- a/projects/impermax/index.js +++ b/projects/impermax/index.js @@ -81,7 +81,13 @@ const config = { blast: { factories: [ '0x7b816c1ccafa7d3e71e279ed9dc3226484f6ef87', - '0xb3c80cfcdd177e3fce2e66870e4768d1ead89f6c' + '0xb3c80cfcdd177e3fce2e66870e4768d1ead89f6c', + '0xfff3C004D115002E0fe8Ef08bBB127aEF5B97bE1' + ] + }, + sonic: { + factories: [ + '0x26fca5916c20D252feEF7A58E39886d3d3112b91' ] } } @@ -170,7 +176,8 @@ const blacklistedPools = { mantle: [], optimism: [], real: [], - blast: [] + blast: [], + sonic: [] } module.exports = {} From efb10eac5f710160c1fa7411cd6c68d279f5f60f Mon Sep 17 00:00:00 2001 From: yanfeizuo <18856856693@163.com> Date: Thu, 2 Jan 2025 11:09:58 +0800 Subject: [PATCH 1675/1768] add core and bsc --- projects/sumer/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/sumer/index.js b/projects/sumer/index.js index 9170858fb4..703277d01b 100644 --- a/projects/sumer/index.js +++ b/projects/sumer/index.js @@ -7,4 +7,6 @@ module.exports = { ethereum: compoundExports2({ comptroller: '0x60A4570bE892fb41280eDFE9DB75e1a62C70456F' }), zklink: compoundExports2({ comptroller: '0xe6099D924efEf37845867D45E3362731EaF8A98D' }), bsquared: compoundExports2({ comptroller: '0xdD9C863197df28f47721107f94eb031b548B5e48' }), + core: compoundExports2({ comptroller: '0x7f5a7aE2688A7ba6a9B36141335044c058a08b3E' }), + bsc: compoundExports2({ comptroller: '0x15B5220024c3242F7D61177D6ff715cfac4909eD' }), } \ No newline at end of file From 8bdc5515045a7dd755cc3c348de0eb8453e7bbc3 Mon Sep 17 00:00:00 2001 From: 0xmer1in <39942523+0xmer1in@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:00:51 +0800 Subject: [PATCH 1676/1768] feat: add WOOFi Sonic --- projects/woofi.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/woofi.js b/projects/woofi.js index 1293b021b8..ce113a85a1 100644 --- a/projects/woofi.js +++ b/projects/woofi.js @@ -84,6 +84,11 @@ const wooPPConfig = { ADDRESSES.mantle.USDT, // USDT ADDRESSES.mantle.USDC, // USDC ], + sonic: [ + ADDRESSES.sonic.wS, //wS + '0x50c42dEAcD8Fc9773493ED674b675bE577f2634b', // WETH + ADDRESSES.sonic['USDC.e'], // USDC.e + ], } const chainConfig = { @@ -153,6 +158,12 @@ const chainConfig = { stakingContract: null, stakingContractV2: null, }, + mantle: { + wooPPContract: '0xEd9e3f98bBed560e66B89AaC922E29D4596A9642', + woo: null, + stakingContract: null, + stakingContractV2: null, + }, mantle: { wooPPContract: '0xEd9e3f98bBed560e66B89AaC922E29D4596A9642', woo: null, From 43d8099e6db9d2c003b34af034d5bfbf47a4402d Mon Sep 17 00:00:00 2001 From: 0xmer1in <39942523+0xmer1in@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:01:43 +0800 Subject: [PATCH 1677/1768] chore: WOOFi listing cmETH --- projects/woofi.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/woofi.js b/projects/woofi.js index ce113a85a1..a7d5039fa9 100644 --- a/projects/woofi.js +++ b/projects/woofi.js @@ -83,6 +83,7 @@ const wooPPConfig = { '0xcDA86A272531e8640cD7F1a92c01839911B90bb0', // mETH ADDRESSES.mantle.USDT, // USDT ADDRESSES.mantle.USDC, // USDC + '0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA', // cmETH ], sonic: [ ADDRESSES.sonic.wS, //wS From 4a083d966a826b402b1cafbb85f10f760e96aa1f Mon Sep 17 00:00:00 2001 From: 0xmer1in <39942523+0xmer1in@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:03:20 +0800 Subject: [PATCH 1678/1768] chore: fix bug --- projects/woofi.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/woofi.js b/projects/woofi.js index a7d5039fa9..1cce08d2c8 100644 --- a/projects/woofi.js +++ b/projects/woofi.js @@ -165,7 +165,7 @@ const chainConfig = { stakingContract: null, stakingContractV2: null, }, - mantle: { + sonic: { wooPPContract: '0xEd9e3f98bBed560e66B89AaC922E29D4596A9642', woo: null, stakingContract: null, From c1afc7502365ab69eb48ec45b0b05ffc3e2c8d24 Mon Sep 17 00:00:00 2001 From: Georgi Popov Date: Thu, 2 Jan 2025 09:50:31 +0200 Subject: [PATCH 1679/1768] Added new contracts --- projects/return-finance/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/return-finance/index.js b/projects/return-finance/index.js index 3efa30dd64..4e3068cd6e 100644 --- a/projects/return-finance/index.js +++ b/projects/return-finance/index.js @@ -10,13 +10,17 @@ const config = { "0xe5c26497D9492AD2328DFEE7dcA240e55cff1779", "0xc2d4d9070236bA4ffefd7cf565eb98d11bFeB8E1", "0x2C2f0FFbFA1B8b9C85400f1726e1bc0892e63D9F", + "0xb41C4126bb6145E8582946E2990ae61ab5b73b76" ], avax: [ "0x0271A46c049293448C2d4794bCD51f953Bf742e8", "0x3A3dAdbca3ec5a815431f45eca33EF1520388Ef2", ], polygon: ["0x0271A46c049293448C2d4794bCD51f953Bf742e8"], - base: ["0xd99d6D4EA1CDa97cC8eaE2A21007C47D3ae54d5F"], + base: [ + "0xd99d6D4EA1CDa97cC8eaE2A21007C47D3ae54d5F", + "0x4d95d8A4705Ca23D6679F6E2974b37CC0e89f632" + ], }; From 877d90a95b96a0f016bed10549c6d30b93fac735 Mon Sep 17 00:00:00 2001 From: tpktpj Date: Thu, 2 Jan 2025 01:06:04 -0700 Subject: [PATCH 1680/1768] feat: sonic-solv corn-solv bsc-usdx --- projects/avalon-finance/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/avalon-finance/index.js b/projects/avalon-finance/index.js index de30b159c4..fe1a314020 100644 --- a/projects/avalon-finance/index.js +++ b/projects/avalon-finance/index.js @@ -32,6 +32,8 @@ const solvMarkets = { core: aaveExports('', '0x410d2D3Dc79ec66A2Cfc3A4a0AD4af3a38D38bd0', undefined, ['0x802CB61844325dc9A161bC3A498E3BE1B7b6FE00'], { v3: true }), arbitrum: aaveExports('', '0xa2ddc06baDc817C612111137c0cf6Bd43634EE1a', undefined, ['0xEc579d2cE07401258710199Ff12a5bb56e086a6F'], { v3: true }), bob: aaveExports('', '', undefined, ['0xfabb0fDca4348d5A40EB1BB74AEa86A1C4eAd7E2'], { v3: true }), + corn: aaveExports('', '', undefined, ['0xf0d077728D424Ee6C6Eba82d23ce56C2e91E57Ea'], { v3: true }), + sonic: aaveExports('', '', undefined, ['0x23f02C2eeFe2010298Ab74059393326d3df59a02'], { v3: true }), } const pumpBTCMarkets = { @@ -93,7 +95,12 @@ const uniIotxMarkets = { iotex: aaveExports('', '', undefined, ['0x2c4aEB7C9f0D196a51136B3c7bec49cB2DBD1966'], { v3: true }), } + // BSC - USDX +const usdxMarkets = { + bsc: aaveExports('', '', undefined, ['0x9515dC23bBE46f9C9885D24Fa276745A11b7f9D8'], { v3: true }), +} + module.exports = mergeExports( - mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, uniIotxMarkets + mainMarket, innovativeMarket, solvMarkets, pumpBTCMarkets, unibtcMarkets, stbtcMarkets, otherProtocolTokenMarkets, obtcMarkets, ubtcMarkets, xaumMarkets, lbtcMarkets, listaMarkets, uniIotxMarkets, usdxMarkets ) module.exports.methodology = methodologies.lendingMarket From 52bc195bfe997a593e297f165f57c816f09bfbc1 Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Thu, 2 Jan 2025 17:33:13 +0800 Subject: [PATCH 1681/1768] add new JLP Vault to TVL calculation --- projects/vectis/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index 647b4d3ead..6db624249a 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -24,8 +24,8 @@ const vaultUserAddresses = [ new PublicKey("CMiyE7M98DSPBEhQGTA6CzNodWkNuuW4y9HoocfK75nG"), //Yield Compass B new PublicKey("CnaXXuzc2S5UFSGoBRuKVNnzXBvxbaMwq6hZu5m91CAV"),//LST Yield Compass new PublicKey("Fwfu73gfD5KzqtSAVKqmW414rshmYpoHY4nJ8LWqPyHB"), //Prime standard - new PublicKey("6NaF3EpArzHJ4x5GeTzjcUcdic29Rt4sy4pn6LP7iJ4r") //Prime A - + new PublicKey("6NaF3EpArzHJ4x5GeTzjcUcdic29Rt4sy4pn6LP7iJ4r"), //Prime A + new PublicKey("2XnEYxNovTmYDXkDb7zninKttt3j9i67sj96H7CV5wZw") // JLP Navigator II From 29b38cd367c882edaf2e0c26016fa73258566dc0 Mon Sep 17 00:00:00 2001 From: 0xajing <163371347+0xajing@users.noreply.github.com> Date: Thu, 2 Jan 2025 18:47:40 +0800 Subject: [PATCH 1682/1768] Update lorenzo bitcoin book (#12937) Co-authored-by: Leven Co-authored-by: lorenzo Co-authored-by: LevenR <156494841+LevenR@users.noreply.github.com> --- projects/helper/bitcoin-book/lorenzo.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/projects/helper/bitcoin-book/lorenzo.js b/projects/helper/bitcoin-book/lorenzo.js index 5af5737f5e..2de44a8956 100644 --- a/projects/helper/bitcoin-book/lorenzo.js +++ b/projects/helper/bitcoin-book/lorenzo.js @@ -30,5 +30,18 @@ module.exports = [ //cap2, Delegate to Lombard FP(609b4b8e27e214fd830e69a83a8270a03f7af356f64dde433a7e4b81b2399806) "bc1pa56692v3hxguvu8vgu5d7dh9twlj7wm87qvzvxdru3rnluv8nmdqk58ewz", //other vault bitcoin address - "bc1pu2e56xlz284s5lh9am2k2ys2lhtau5mgq6j9fgljxt7tegsgtp3spmvk0w" + "bc1pu2e56xlz284s5lh9am2k2ys2lhtau5mgq6j9fgljxt7tegsgtp3spmvk0w", + + // cap3 + "bc1pd8z0x5a34w3s3nvyzfjn5z9qchg52wm2exktqev76uc5mjq9lsxq6wsf0m", + "bc1pm3k5ssdpw7lyzqy4ndqvgs6mvanw046sktw79xfmw0znvrng2wps8qw6zy", + + // cap1, BBN target stake script address + "bc1pzr98tfuzxxjwkk3fq9k86ar98ttnj6zpf4x62099avdupj443x9qv5xdax", + // cap3, BBN target stake script address + "bc1pcrqesnduvztc080dvu0wdm6jzjvuf24g0kamn6p2h2ru0jmssljq69n7mv", + // cap3, BBN target stake script address + "bc1prku5dse3ps3hkyjn5lpu0qcypcmqmhqhh8wfuztpck5h5unx5wjq9mpjjv", + // cap3, BBN target stake script address + "bc1p9yrhpkm6klag7r0xq8f93degehxc086tnv2lsckg54cl2yl5wyeqdhx8v6" ] \ No newline at end of file From 517c9f2b7aca4f047ef3bb31414b2b451fbf7ff9 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 2 Jan 2025 16:40:03 +0300 Subject: [PATCH 1683/1768] bump some contracts support for spark finance --- projects/spark/index.js | 55 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/projects/spark/index.js b/projects/spark/index.js index b39e279077..73be1bf5a5 100644 --- a/projects/spark/index.js +++ b/projects/spark/index.js @@ -1,11 +1,54 @@ -const { sumTokens } = require("../helper/chain/fuel") +const { sumTokens } = require("../helper/chain/fuel"); async function tvl(api) { - const contractId = '0xfe2c524ad8e088f33d232a45dbea43e792861640b71aa1814b30506bf8430ee5' - return sumTokens({ api, owner: contractId, }) + const contractIds = [ + '0xfe2c524ad8e088f33d232a45dbea43e792861640b71aa1814b30506bf8430ee5', + '0xdafe498b31f24ea5577055e86bf77e96bcba2c39a7ae47abaa819c303a45a352', + '0x81e83f73530c262b0dbf5414649a875c48a48144de3c08ff68cb9d54b36f2eaa', + ]; + + try { + const balancesList = await Promise.all( + contractIds.map(async (contractId) => { + try { + const balances = await sumTokens({ api, owner: contractId }); + console.log(`Balances from contract ${contractId}:`, balances); + return balances; + } catch (err) { + console.error(`Error fetching balance for contract ${contractId}:`, err.message); + return {}; + } + }) + ); + + const combinedBalances = balancesList.reduce((acc, balances) => { + Object.entries(balances).forEach(([key, value]) => { + const numericValue = BigInt(value || 0); + acc[key] = acc[key] ? BigInt(Math.max(Number(acc[key]), Number(numericValue))) : numericValue; + }); + return acc; + }, {}); + + console.log("Final combined balances:", combinedBalances); + + const totalTvl = Object.values(combinedBalances).reduce((sum, value) => { + return sum + Number(value); + }, 0); + + const formattedBalances = Object.fromEntries( + Object.entries(combinedBalances).map(([key, value]) => [key, value.toString()]) + ); + + console.log("Formatted Balances for TVL:", formattedBalances); + + return formattedBalances; + } catch (err) { + console.error("Unexpected error during TVL calculation:", err.message); + return {}; + } } module.exports = { - fuel: { tvl }, - timetravel: false, -} \ No newline at end of file + fuel: { tvl }, + timetravel: false, +}; \ No newline at end of file From 00973395eb0074d79ceb2e222c8edc4b0bdde807 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 2 Jan 2025 17:33:03 +0300 Subject: [PATCH 1684/1768] remove try catch --- projects/spark/index.js | 68 ++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/projects/spark/index.js b/projects/spark/index.js index 73be1bf5a5..0bc5d2ce8e 100644 --- a/projects/spark/index.js +++ b/projects/spark/index.js @@ -7,45 +7,35 @@ async function tvl(api) { '0x81e83f73530c262b0dbf5414649a875c48a48144de3c08ff68cb9d54b36f2eaa', ]; - try { - const balancesList = await Promise.all( - contractIds.map(async (contractId) => { - try { - const balances = await sumTokens({ api, owner: contractId }); - console.log(`Balances from contract ${contractId}:`, balances); - return balances; - } catch (err) { - console.error(`Error fetching balance for contract ${contractId}:`, err.message); - return {}; - } - }) - ); - - const combinedBalances = balancesList.reduce((acc, balances) => { - Object.entries(balances).forEach(([key, value]) => { - const numericValue = BigInt(value || 0); - acc[key] = acc[key] ? BigInt(Math.max(Number(acc[key]), Number(numericValue))) : numericValue; - }); - return acc; - }, {}); - - console.log("Final combined balances:", combinedBalances); - - const totalTvl = Object.values(combinedBalances).reduce((sum, value) => { - return sum + Number(value); - }, 0); - - const formattedBalances = Object.fromEntries( - Object.entries(combinedBalances).map(([key, value]) => [key, value.toString()]) - ); - - console.log("Formatted Balances for TVL:", formattedBalances); - - return formattedBalances; - } catch (err) { - console.error("Unexpected error during TVL calculation:", err.message); - return {}; - } + const balancesList = await Promise.all( + contractIds.map(async (contractId) => { + const balances = await sumTokens({ api, owner: contractId }); + console.log(`Balances from contract ${contractId}:`, balances); + return balances; + }) + ); + + const combinedBalances = balancesList.reduce((acc, balances) => { + Object.entries(balances).forEach(([key, value]) => { + const numericValue = BigInt(value || 0); + acc[key] = acc[key] ? BigInt(Math.max(Number(acc[key]), Number(numericValue))) : numericValue; + }); + return acc; + }, {}); + + console.log("Final combined balances:", combinedBalances); + + const totalTvl = Object.values(combinedBalances).reduce((sum, value) => { + return sum + Number(value); + }, 0); + + const formattedBalances = Object.fromEntries( + Object.entries(combinedBalances).map(([key, value]) => [key, value.toString()]) + ); + + console.log("Formatted Balances for TVL:", formattedBalances); + + return formattedBalances; } module.exports = { From 1adb2709bed57629eb2606c24c0f2f155efc98e1 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 2 Jan 2025 23:47:54 +0000 Subject: [PATCH 1685/1768] add hallmark --- projects/aelin/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/aelin/index.js b/projects/aelin/index.js index 9470314fdf..68f8cc6e04 100644 --- a/projects/aelin/index.js +++ b/projects/aelin/index.js @@ -87,6 +87,9 @@ function pool2TVL(chain) { } module.exports = { + hallmarks : [ + [1702598400, "Frontend was shut down"] + ], ethereum: { tvl: tvl('ethereum'), pool2: pool2TVL('ethereum'), From 7c886913d02b590fa6a5c47acca53b0406d7c2f3 Mon Sep 17 00:00:00 2001 From: abs3ntdev <86447830+abs3ntdev@users.noreply.github.com> Date: Thu, 2 Jan 2025 18:03:41 -0600 Subject: [PATCH 1686/1768] add sonic to uniswap v3 (#12947) Co-authored-by: abs3ntdev --- projects/helper/coreAssets.json | 5 +++-- projects/uniswap/index.js | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index aa812bbfb7..98d184aef5 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -2083,7 +2083,8 @@ "wS": "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38", "WS_1": "0x832497895f05100e53f42dfa8fc758b4866b183a", "USDC.e": "0x29219dd400f2Bf60E5a23d13Be72B486D4038894", - "WETH": "0x309C92261178fA0CF748A855e90Ae73FDb79EBc7" + "WETH": "0x309C92261178fA0CF748A855e90Ae73FDb79EBc7", + "STS": "0xe5da20f15420ad15de0fa650600afc998bbe3955" }, "vinu": { "USDT": "0xC0264277fcCa5FCfabd41a8bC01c1FcAF8383E41", @@ -2113,4 +2114,4 @@ "WVANA": "0x00eddd9621fb08436d0331c149d1690909a5906d", "USDC.e": "0xf1815bd50389c46847f0bda824ec8da914045d14" } -} \ No newline at end of file +} diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index 3d71604d60..6ce7f47ac1 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -93,6 +93,7 @@ module.exports = { lisk: { factory: "0x0d922Fb1Bc191F64970ac40376643808b4B74Df9", fromBlock: 577168 }, wc: { factory: "0x7a5028BDa40e7B173C278C5342087826455ea25a", fromBlock: 1603366 }, corn: { factory: "0xcb2436774C3e191c85056d248EF4260ce5f27A9D", fromBlock: 10878 }, + sonic: { factory: "0xcb2436774C3e191c85056d248EF4260ce5f27A9D", fromBlock: 322744}, }), filecoin: { tvl: filecoinTvl }, } From 2e004f789a71c0cfef32eaa2969466a68be570d3 Mon Sep 17 00:00:00 2001 From: Vini murafa <06.poems_races@icloud.com> Date: Fri, 3 Jan 2025 01:05:53 +0100 Subject: [PATCH 1687/1768] **Typo Fix in `wanbridge.js`** (#12946) --- projects/wanbridge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/wanbridge.js b/projects/wanbridge.js index 893855b6eb..42d48e7fef 100644 --- a/projects/wanbridge.js +++ b/projects/wanbridge.js @@ -3,7 +3,7 @@ const { get } = require("./helper/http"); let ret; async function getTvl() { // This is an api which could get wanchain bridge's lockAddress, balance, tvl and price; - // The infomation is updated every 1 hour. + // The information is updated every 1 hour. if (!ret) { ret = await get("https://api.wanpos.xyz/api/tvl"); } From 60a89f47d305fe06787dd45778e921255a749b98 Mon Sep 17 00:00:00 2001 From: teenager-ETH Date: Fri, 3 Jan 2025 01:10:25 +0100 Subject: [PATCH 1688/1768] **Fix Typos in `chainge.js` and `defichain-dex.js`** (#12945) Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- projects/chainge.js | 2 +- projects/defichain-dex.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/chainge.js b/projects/chainge.js index 790526fcad..9e7bd63b61 100644 --- a/projects/chainge.js +++ b/projects/chainge.js @@ -25,4 +25,4 @@ Object.keys(config).forEach(chain => { module.exports[chain] = { tvl: sumTokensExport({ owner: chaingeAddress, tokens }) } -}) \ No newline at end of file +}) diff --git a/projects/defichain-dex.js b/projects/defichain-dex.js index 8d2144ce1f..2714258e88 100644 --- a/projects/defichain-dex.js +++ b/projects/defichain-dex.js @@ -11,10 +11,10 @@ async function tvl() { } module.exports = { - methodology: "Liquidity on the DEX, DUSD price is reduced by 30% because of the dex stabilty tax", + methodology: "Liquidity on the DEX, DUSD price is reduced by 30% because of the dex stability tax", timetravel: false, misrepresentedTokens: true, defichain: { tvl } -} \ No newline at end of file +} From 8de36008d848f3d3ec49f94bc205ec6289e0b488 Mon Sep 17 00:00:00 2001 From: 0xSuku <84302571+0xSuku@users.noreply.github.com> Date: Thu, 2 Jan 2025 23:56:00 -0300 Subject: [PATCH 1689/1768] feat: add fMoney adapter --- projects/fMoney/index.js | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/projects/fMoney/index.js b/projects/fMoney/index.js index 62d674259f..9cf60bbb67 100644 --- a/projects/fMoney/index.js +++ b/projects/fMoney/index.js @@ -1,24 +1,30 @@ - const { compoundExports2 } = require('../helper/compound') -const { sumBalancerLps } = require('../helper/unwrapLPs') - -const addresses = { - beetsVault: "0x8166994d9ebBe5829EC86Bd81258149B87faCfd3", - fuBUX: "0xcf211d1022f0B1aEC7CbAdCa1472fc20E6dFe3c6", - fBUX80lzUSDC20: "0x2ddcd6916ee7ccc6300cb0fe2919a341be0ee8bb" -} - -async function staking(api) { - return sumBalancerLps({}, [[addresses.fBUX80lzUSDC20, addresses.beetsVault]], 0, 0, undefined, api) -} +const { unwrapBalancerToken } = require('../helper/unwrapLPs') const config = { - fantom: '0xB911d8064c0AA338241f349eD802Ad4bae6ec034', + fantom: { + unitroller: '0xB911d8064c0AA338241f349eD802Ad4bae6ec034', + stakingPool: '0x9426d9077620efaae688d3c3b398fa814406ce4a', + owner: '0x6B0B150A7a37b1E592F553E2b7D71d6D1439dc57' + }, + sonic: { + unitroller: '0xd41e9fa6EC7A33f0A6AAE5E9420c9D60eC1727e4', + stakingPool: '0x3ec8254006658e11f9ab5eaf92d64f8528d09057', + owner: '0x44ece28720dbe441bbf1363e17b0cd71839090c8' + } } +async function staking(api) { + await unwrapBalancerToken({ + api, + balancerToken: config[api.chain].stakingPool, + owner: config[api.chain].owner, + isV2: true + }) + return api.getBalances() +} Object.keys(config).forEach(chain => { - module.exports[chain] = compoundExports2({ comptroller: config[chain] }) -}); - -module.exports.fantom.staking = staking \ No newline at end of file + module.exports[chain] = compoundExports2({ comptroller: config[chain].unitroller }) + module.exports[chain].staking = staking +}) \ No newline at end of file From 5aedd17ad4a38f1cb687008a901eacdf05c3dbb2 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Fri, 3 Jan 2025 04:35:24 +0000 Subject: [PATCH 1690/1768] fix address --- projects/djed-alliance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/djed-alliance/index.js b/projects/djed-alliance/index.js index f1dad7c7d5..6a752dc7c6 100644 --- a/projects/djed-alliance/index.js +++ b/projects/djed-alliance/index.js @@ -9,6 +9,6 @@ module.exports = { methodology: 'The TVL of Djed is the reserve belonging to the deployment. The TVL within a given blockchain is the sum of the TVLs of all known Djed deployments within that blockchain.', cardano: { - tvl: sumTokensExport({ owner: 'addr1zx82ru5f7p8ewhhdvahueg2s4gxs3gxl66fkygdekkjs74sm5kjdmrpmng059yellupyvwgay2v0lz6663swmds7hp0q4vpw0l', tokens: ['lovelace']}), + tvl: sumTokensExport({ owner: 'addr1z8mcpc26j64fmhhd6sv5qj5mk9xqnfxgm6k8zmk7h2rlu4qm5kjdmrpmng059yellupyvwgay2v0lz6663swmds7hp0qhxg9gt', tokens: ['lovelace']}), }, }; From 188693299102346b66d9a0ed5b9df6b30fca190b Mon Sep 17 00:00:00 2001 From: 0xhitgo <0xhitgo@protonmail.com> Date: Fri, 3 Jan 2025 15:32:55 +0530 Subject: [PATCH 1691/1768] feat: add missing chains for stryke-clamm tvl data Signed-off-by: 0xhitgo <0xhitgo@protonmail.com> --- projects/dopex-clamm/index.js | 131 ++++++++++++++++++++++------------ 1 file changed, 85 insertions(+), 46 deletions(-) diff --git a/projects/dopex-clamm/index.js b/projects/dopex-clamm/index.js index 2c0ee7ac86..97f4c2fe7b 100644 --- a/projects/dopex-clamm/index.js +++ b/projects/dopex-clamm/index.js @@ -1,7 +1,19 @@ -const { gql, request } = require('graphql-request'); +const { gql, request } = require("graphql-request"); + +const SUBGRAPH_ENDPOINTS = { + arbitrum: + "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/clamm-arbitrum/prod/gn", + sonic: + "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/clamm-sonic/prod/gn", + base: "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/clamm-base/prod/gn", + blast: + "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/clamm-blast/prod/gn", + mantle: + "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/clamm-mantle/prod/gn", +}; -const endpoint = 'https://api.0xgraph.xyz/subgraphs/name/dopex-v2-clamm-public'; -const abi = "function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)" +const abi = + "function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)"; const query = gql` query strikes($limit: Int!, $skip: Int!) { @@ -13,8 +25,12 @@ const query = gql` orderDirection: desc ) { pool - token0 {id} - token1 {id} + token0 { + id + } + token1 { + id + } tickLower tickUpper totalLiquidity @@ -22,68 +38,91 @@ const query = gql` } `; -async function fetchStrikes(limit, skip, allData = []) { +async function fetchStrikes(endpoint, limit, skip, allData = []) { const variables = { limit, skip }; const { strikes } = await request(endpoint, query, variables); allData.push(...strikes); if (strikes.length === limit) { - return fetchStrikes(limit, skip + limit, allData); + return fetchStrikes(endpoint, limit, skip + limit, allData); } return allData; } function addV3PositionBalances(strike, sqrtPricesMap) { - const tickToPrice = (tick) => 1.0001 ** tick - const token0 = strike.token0.id - const token1 = strike.token1.id - const liquidity = strike.totalLiquidity - const bottomTick = +strike.tickLower - const topTick = +strike.tickUpper - const tick = +sqrtPricesMap[strike.pool.toLowerCase()].tick - const sa = tickToPrice(bottomTick / 2) - const sb = tickToPrice(topTick / 2) - - let amount0 = 0 - let amount1 = 0 + const tickToPrice = (tick) => 1.0001 ** tick; + const token0 = strike.token0.id; + const token1 = strike.token1.id; + const liquidity = strike.totalLiquidity; + const bottomTick = +strike.tickLower; + const topTick = +strike.tickUpper; + const tick = +sqrtPricesMap[strike.pool.toLowerCase()].tick; + const sa = tickToPrice(bottomTick / 2); + const sb = tickToPrice(topTick / 2); + + let amount0 = 0; + let amount1 = 0; if (tick < bottomTick) { - amount0 = liquidity * (sb - sa) / (sa * sb) + amount0 = (liquidity * (sb - sa)) / (sa * sb); } else if (tick < topTick) { - const price = tickToPrice(tick) - const sp = price ** 0.5 + const price = tickToPrice(tick); + const sp = price ** 0.5; - amount0 = liquidity * (sb - sp) / (sp * sb) - amount1 = liquidity * (sp - sa) + amount0 = (liquidity * (sb - sp)) / (sp * sb); + amount1 = liquidity * (sp - sa); } else { - amount1 = liquidity * (sb - sa) + amount1 = liquidity * (sb - sa); } - return { token0, amount0, token1, amount1 } + return { token0, amount0, token1, amount1 }; } -async function tvl(api) { - const limit = 1000; - const allData = await fetchStrikes(limit, 0); - - let pools = allData.map(strike => strike.pool.toLowerCase()) - pools = [...new Set(pools)] - const sqrtPrices = await api.multiCall({ calls: pools, abi }) - const sqrtPricesMap = sqrtPrices.reduce((acc, item, i) => { - return { ...acc, [pools[i]]: item, } - }, {}); - - allData.forEach((strike) => { - const { token0, amount0, token1, amount1 } = addV3PositionBalances(strike, sqrtPricesMap); - api.add(token0, amount0); - api.add(token1, amount1); - }); +function tvlByChain(chain) { + return async function (api) { + const endpoint = SUBGRAPH_ENDPOINTS[chain]; + if (!endpoint) + throw new Error(`No subgraph endpoint configured for chain: ${chain}`); + + const limit = 1000; + const allData = await fetchStrikes(endpoint, limit, 0); + + let pools = allData.map((strike) => strike.pool.toLowerCase()); + pools = [...new Set(pools)]; + const sqrtPrices = await api.multiCall({ calls: pools, abi }); + const sqrtPricesMap = sqrtPrices.reduce((acc, item, i) => { + return { ...acc, [pools[i]]: item }; + }, {}); + + allData.forEach((strike) => { + const { token0, amount0, token1, amount1 } = addV3PositionBalances( + strike, + sqrtPricesMap + ); + api.add(token0, amount0); + api.add(token1, amount1); + }); + }; } module.exports = { - doublecounted: true, // tokens are stored in UNI-V3 pools - arbitrum: { tvl, }, + doublecounted: true, // tokens are stored in UNI-V3 pools + arbitrum: { + tvl: tvlByChain("arbitrum"), + }, + sonic: { + tvl: tvlByChain("sonic"), + }, + base: { + tvl: tvlByChain("base"), + }, + blast: { + tvl: tvlByChain("blast"), + }, + mantle: { + tvl: tvlByChain("mantle"), + }, + methodology: + "TVL is calculated by summing the value of all tokens in Stryke liquidity positions across supported chains", }; - - From 4a738d790f84ac9ad27352146678d0089afd09e8 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Fri, 3 Jan 2025 13:51:38 +0100 Subject: [PATCH 1692/1768] feat: usual morpho inside rings allocation --- projects/rings/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/rings/index.js b/projects/rings/index.js index 76bbd6825e..09362c7d70 100644 --- a/projects/rings/index.js +++ b/projects/rings/index.js @@ -27,6 +27,7 @@ const config = { '0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8', // AAVEWETH '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // WSTETH '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', // WEETH + '0xd63070114470f685b75B74D60EEc7c1113d33a3D' // USDO MORPHO ] }, sonic: { From 8dd4a3d037d47846afdb2aac98b8411f03d57b62 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Jan 2025 13:57:55 +0000 Subject: [PATCH 1693/1768] spark refactor --- projects/spark/index.js | 52 +++++++++-------------------------------- 1 file changed, 11 insertions(+), 41 deletions(-) diff --git a/projects/spark/index.js b/projects/spark/index.js index 0bc5d2ce8e..bf9c171e10 100644 --- a/projects/spark/index.js +++ b/projects/spark/index.js @@ -1,44 +1,14 @@ const { sumTokens } = require("../helper/chain/fuel"); -async function tvl(api) { - const contractIds = [ - '0xfe2c524ad8e088f33d232a45dbea43e792861640b71aa1814b30506bf8430ee5', - '0xdafe498b31f24ea5577055e86bf77e96bcba2c39a7ae47abaa819c303a45a352', - '0x81e83f73530c262b0dbf5414649a875c48a48144de3c08ff68cb9d54b36f2eaa', - ]; - - const balancesList = await Promise.all( - contractIds.map(async (contractId) => { - const balances = await sumTokens({ api, owner: contractId }); - console.log(`Balances from contract ${contractId}:`, balances); - return balances; - }) - ); - - const combinedBalances = balancesList.reduce((acc, balances) => { - Object.entries(balances).forEach(([key, value]) => { - const numericValue = BigInt(value || 0); - acc[key] = acc[key] ? BigInt(Math.max(Number(acc[key]), Number(numericValue))) : numericValue; - }); - return acc; - }, {}); - - console.log("Final combined balances:", combinedBalances); - - const totalTvl = Object.values(combinedBalances).reduce((sum, value) => { - return sum + Number(value); - }, 0); - - const formattedBalances = Object.fromEntries( - Object.entries(combinedBalances).map(([key, value]) => [key, value.toString()]) - ); - - console.log("Formatted Balances for TVL:", formattedBalances); - - return formattedBalances; -} - module.exports = { - fuel: { tvl }, - timetravel: false, -}; \ No newline at end of file + fuel: { + tvl: (api) => + sumTokens({ + api, owners: [ + '0xfe2c524ad8e088f33d232a45dbea43e792861640b71aa1814b30506bf8430ee5', + '0xdafe498b31f24ea5577055e86bf77e96bcba2c39a7ae47abaa819c303a45a352', + '0x81e83f73530c262b0dbf5414649a875c48a48144de3c08ff68cb9d54b36f2eaa', + ] + }) + } +} \ No newline at end of file From 64ab2b69850626d8d8e6aa617492bf9b5a42559f Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Sat, 4 Jan 2025 02:31:26 +0100 Subject: [PATCH 1694/1768] Update: Usual (#12952) --- projects/usual/index.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/projects/usual/index.js b/projects/usual/index.js index 6d5c7e3c2a..c06505226d 100644 --- a/projects/usual/index.js +++ b/projects/usual/index.js @@ -1,12 +1,18 @@ const { sumTokensExport } = require('../helper/unwrapLPs') -const USYC = '0x136471a34f6ef19fe571effc1ca711fdb8e49f2b' -const treasury = '0xdd82875f0840AAD58a455A70B88eEd9F59ceC7c7' +const tokens = [ + '0x136471a34f6ef19fe571effc1ca711fdb8e49f2b', // USYC + '0x437cc33344a0B27A429f795ff6B469C72698B291' // wM +] + +const owners = [ + '0xdd82875f0840AAD58a455A70B88eEd9F59ceC7c7', // treasury + '0x4Cbc25559DbBD1272EC5B64c7b5F48a2405e6470' // USUALM +] + module.exports = { methodology: 'TVL represents the value in RWA held by the protocol', - ethereum: { - tvl: sumTokensExport({ token: USYC, owner: treasury}) - } + ethereum: { tvl: sumTokensExport({ tokens, owners })} } \ No newline at end of file From 45b1fda2873104717555973aeee5f9940b49666b Mon Sep 17 00:00:00 2001 From: 0xMarkuss Date: Sat, 4 Jan 2025 08:36:00 +0700 Subject: [PATCH 1695/1768] add CrossFI Chain and xSwap protocol (#12956) --- projects/helper/chains.json | 1 + projects/helper/coreAssets.json | 3 +++ projects/helper/tokenMapping.js | 4 ++++ projects/xswap/index.js | 13 +++++++++++++ 4 files changed, 21 insertions(+) create mode 100644 projects/xswap/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 8ded60ebd3..90749bcd6f 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -77,6 +77,7 @@ "crescent", "cronos", "cronos_zkevm", + "crossfi", "csc", "cube", "curio", diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 98d184aef5..c8ab89f2f6 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -2113,5 +2113,8 @@ "vana": { "WVANA": "0x00eddd9621fb08436d0331c149d1690909a5906d", "USDC.e": "0xf1815bd50389c46847f0bda824ec8da914045d14" + }, + "crossfi": { + "WXFI" : "0xC537D12bd626B135B251cCa43283EFF69eC109c4" } } diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index f1f7caf85b..d05350f395 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -85,6 +85,10 @@ const fixBalancesTokens = { odyssey: { [ADDRESSES.null]: { coingeckoId: 'dione', decimals: 18 }, '0xf21cbaf7bd040d686bd390957770d2ea652e4013': { coingeckoId: 'dione', decimals: 18 }, + }, + crossfi: { + [ADDRESSES.null]: { coingeckoId: 'crossfi-2', decimals: 18 }, + [ADDRESSES.crossfi.WXFI]: { coingeckoId: 'crossfi-2', decimals: 18 }, } } diff --git a/projects/xswap/index.js b/projects/xswap/index.js new file mode 100644 index 0000000000..63e841b09c --- /dev/null +++ b/projects/xswap/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require('../helper/unknownTokens'); + +const factory = '0x3ca837175312070f4E4fF64972a199122Ee03805'; + +module.exports = { + crossfi: { + tvl: getUniTVL({ + factory, + chain: 'crossfi', + useDefaultCoreAssets: true, + }), + }, +}; \ No newline at end of file From 0fcc469ac5bebbbdc92cdf1bcd6fee7cac2f72be Mon Sep 17 00:00:00 2001 From: codeislight <104497451+codeislight1@users.noreply.github.com> Date: Sat, 4 Jan 2025 06:14:32 +0000 Subject: [PATCH 1696/1768] Add Swap X (#12929) --- projects/SwapX-algebra/index.js | 11 ++++++++ projects/SwapX-v2/index.js | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 projects/SwapX-algebra/index.js create mode 100644 projects/SwapX-v2/index.js diff --git a/projects/SwapX-algebra/index.js b/projects/SwapX-algebra/index.js new file mode 100644 index 0000000000..4cc6ff5bd0 --- /dev/null +++ b/projects/SwapX-algebra/index.js @@ -0,0 +1,11 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +const SWAPX_ALGEBRA_FACTORY = "0x8121a3F8c4176E9765deEa0B95FA2BDfD3016794" + +module.exports = uniV3Export({ + sonic: { + factory: SWAPX_ALGEBRA_FACTORY, + fromBlock: 1440914, + isAlgebra: true + } +}); \ No newline at end of file diff --git a/projects/SwapX-v2/index.js b/projects/SwapX-v2/index.js new file mode 100644 index 0000000000..a01635704a --- /dev/null +++ b/projects/SwapX-v2/index.js @@ -0,0 +1,47 @@ +const { transformDexBalances } = require("../helper/portedTokens"); +const { getLogs } = require("../helper/cache/getLogs"); + +const SWAPX_V2_FACTORY = "0x05c1be79d3aC21Cc4B727eeD58C9B2fF757F5663" +const PAIR_CREATED_TOPIC_1 = "0xc4805696c66d7cf352fc1d6bb633ad5ee82f6cb577c453024b6e0eb8306c6fc9"; // keccak256 hash of the event signature +const PAIR_CREATED_EVENT_ABI_1 = "event PairCreated(address indexed token0, address indexed token1, bool stable, address pair, uint)"; +const fromBlock = 1333667; +const erc20Abi = "erc20:balanceOf"; + +async function tvl(api) { + const getPairs = (logs) => { + return logs.map(log => ({ + token0: log.token0, + token1: log.token1, + pair: log.pair + })); + } + + const logs = getPairs(await getLogs({ + api, + target: SWAPX_V2_FACTORY, + fromBlock, + topic: PAIR_CREATED_TOPIC_1, + onlyArgs: true, + eventAbi: PAIR_CREATED_EVENT_ABI_1 + })); + + const tok0Bals = await api.multiCall({ abi: erc20Abi, calls: logs.map(log => ({ target: log.token0, params: log.pair })) }) + const tok1Bals = await api.multiCall({ abi: erc20Abi, calls: logs.map(log => ({ target: log.token1, params: log.pair })) }) + + return transformDexBalances({ + chain: api.chain, + data: logs.map((log, i) => ({ + token0: log.token0, + token0Bal: tok0Bals[i], + token1: log.token1, + token1Bal: tok1Bals[i], + })) + }) +} + +module.exports = { + misrepresentedTokens: true, + sonic: { + tvl + } +}; From 5cee999ff8e287894d0100a8d7f7d4cd396bb6e0 Mon Sep 17 00:00:00 2001 From: "Jasmin@AvalonLabs" Date: Fri, 3 Jan 2025 23:40:46 -0700 Subject: [PATCH 1697/1768] feat: USDaLend: Corn, Sei, Sonic (#12961) --- projects/avalon-finance-usdalend/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/avalon-finance-usdalend/index.js b/projects/avalon-finance-usdalend/index.js index daad08e4b9..d3222c7709 100644 --- a/projects/avalon-finance-usdalend/index.js +++ b/projects/avalon-finance-usdalend/index.js @@ -5,10 +5,14 @@ const { mergeExports } = require('../helper/utils') //@note Main & Innovative Markets const getExports = address => aaveExports(address, '', undefined, [address], { v3: true }) + const mainMarket = { iotex: getExports('0xDB52DD393e3a5e95d3B7C7e1C42cC06bb807A369'), taiko: getExports('0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'), zircuit: getExports('0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'), + corn: getExports('0xa15c0c3D6Ad3FeE623BEd68391923c9Ff79a50c3'), + sei: getExports('0x5EcDC2432ED77cD8E2cE6183712c5cc712c40ec0'), + sonic: getExports('0x1C6E9510055B71429022B997E6602FbaEEb0481F'), } module.exports = mergeExports( From 60377798a73cb6f9a269d47b3b03912130688124 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Jan 2025 12:46:23 +0100 Subject: [PATCH 1698/1768] update sdk version --- package-lock.json | 6 +++--- projects/helper/env.js | 6 ------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index c73c964100..e105101bb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.107", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.107.tgz", - "integrity": "sha512-dP6la1NUjl8Cgq9f5EjMAJ5xkzQqJfROJgTYvyktVpYjVbPln9QYrFSSfT4ZGycwXq74wuv3yo/Nt/fZv8AEPw==", + "version": "5.0.109", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.109.tgz", + "integrity": "sha512-FRooEEJImkjp6gi0Kn9OH9aXxn7vXlm4fIU5Oi9z1AB8ZZbsfzjElonweenxkJu6lLzMenH/7Z4bTZAZVN3Lkw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/helper/env.js b/projects/helper/env.js index bf52b24321..bb4b847488 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -14,16 +14,10 @@ const DEFAULTS = { APTOS_RPC: 'https://fullnode.mainnet.aptoslabs.com', SUI_RPC: 'https://fullnode.mainnet.sui.io/', SUI_GRAPH_RPC: 'https://sui-mainnet.mystenlabs.com/graphql', - FLOW_RPC: 'https://rest-mainnet.onflow.org', MULTIVERSX_RPC: 'https://api.multiversx.com', ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", - DUCKCHAIN_RPC: "https://rpc.duckchain.io,https://rpc-hk.duckchain.io", - SOPHON_RPC_MULTICALL: "0x5f4867441d2416cA88B1b3fd38f21811680CD2C8", - VANA_RPC_MULTICALL: "0xFe92b91F3326e58557478c28EeAe1936E0c7148a", - FILECOIN_RPC_MULTICALL: "0xcA11bde05977b3631167028862bE2a173976CA11", - ODYSSEY_RPC_MULTICALL: "0xD5F04861e1249F488ef8898607cF7ad0F334d823", } const ENV_KEYS = [ From 9e62ce7ccf1caee285f3e32f3a1d4fc4ffade492 Mon Sep 17 00:00:00 2001 From: NightHarbor Date: Sun, 5 Jan 2025 16:23:32 +0100 Subject: [PATCH 1699/1768] Update OracleFreeDollar with V2 contracts (#12969) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/oraclefreedollar/index.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/projects/oraclefreedollar/index.js b/projects/oraclefreedollar/index.js index a1e60a0d54..b04e5093e0 100644 --- a/projects/oraclefreedollar/index.js +++ b/projects/oraclefreedollar/index.js @@ -1,16 +1,22 @@ const { getLogs2 } = require('../helper/cache/getLogs') const config = { - bsc: { factory: '0xFe00054AF44E24f0B4bd49b1A2d2984C4264aabE', fromBlock: 37882077, }, + bsc: { + factoryV1: '0xFe00054AF44E24f0B4bd49b1A2d2984C4264aabE', fromBlockV1: 37882077, + factoryV2: '0x70e318f5066597868a9026ecccC0e04D693d0fbD', fromBlockV2: 45094649, + }, } +const USDTBridge = ["0x55d398326f99059fF775485246999027B3197955", "0xAEaF85C740C7a6ee94183E848d0e557cB7FbeA47"]; Object.keys(config).forEach(chain => { - const { factory, fromBlock } = config[chain] + const { factoryV1, factoryV2, fromBlockV1, fromBlockV2 } = config[chain] module.exports[chain] = { tvl: async (api) => { - const logs = await getLogs2({ api, factory, eventAbi: 'event PositionOpened (address indexed owner, address indexed position, address ofd, address collateral, uint256 price)', fromBlock, }) - const tokensAndOwners = logs.map(log => [log.collateral, log.position]) + const tokensAndOwners = [USDTBridge] + const logsV1 = await getLogs2({ api, factory: factoryV1, eventAbi: 'event PositionOpened (address indexed owner, address indexed position, address ofd, address collateral, uint256 price)', fromBlock: fromBlockV1 }) + const logsV2 = await getLogs2({ api, factory: factoryV2, eventAbi: 'event PositionOpened(address indexed owner, address indexed position, address original, address collateral)', fromBlock: fromBlockV2 }) + logsV1.concat(logsV2).forEach(log => tokensAndOwners.push([log.collateral, log.position])) return api.sumTokens({ tokensAndOwners }) } } -}) \ No newline at end of file +}) From 6ab4bef73a7701fbe4307e4be559f8bcfa1b721b Mon Sep 17 00:00:00 2001 From: Zorag44 <75122924+Zorag44@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:08:26 +0530 Subject: [PATCH 1700/1768] added some more pools (#12965) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/alphafi/index.js | 47 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/projects/alphafi/index.js b/projects/alphafi/index.js index 6d3d101200..8515dc487c 100644 --- a/projects/alphafi/index.js +++ b/projects/alphafi/index.js @@ -229,9 +229,52 @@ const ALPHAFI_BLUEFIN_TVL_IDS = [ token0Type: "0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI", token1Type: ADDRESSES.sui.SUI }, + { // stsui usdc + poolID: "0x95f0543f861584f1a3c3129c46901d5c5cc1d44e77eb57aab63eec55cd128f29", + parentPoolID: "0x151d6959cb2a6d1a5b6cfec6d1eae690af0318e46e5fb3ec45dd4e3b67eebeda", + investorID: "0x65e4af88e543e41c410f969801d53e40acb23da7be811e4c61d05a7d7d235b3b", + token0Type: "0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI", + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { // alpha stsui + poolID: "0xd601c2d1f451a1493e8d071482272a83e6dafbcdb82b249ca5b3ac909c4138f3", + parentPoolID: "0xd4051b5dc76ca354e48813268aa79de38b274878ef6a9d274066ae5a47f46cc6", + investorID: "0x959f6df092073b23c0ad0278a9cf070b6779f2edc9b7124108207b4d7b4e94ca", + token0Type: "0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA", + token1Type: "0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI" + }, + { // suiusdt usdc + poolID: "0x5b975bf7d0f0e3784a5b2db8f0a3e0b45cdcc31b39a222e680716a6ad7eba67f", + parentPoolID: "0x0bd95d012d60190a6713ae51f2d833b24ae70c5fb07fcfb41db40f25549878b1", + investorID: "0x23c073d557e4512f1811bd7c767047de13de14c59bb9607373613531250910b7", + token0Type: ADDRESSES.sui.suiUSDT, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, ] - +const ALPHAFI_BLUEFIN_AUTOBALANCE_TVL_IDS = [ + { //sui usdc + poolID: "0x1ec0aacf500624de90dd21478da12fca4726b3837e78993aee1c82f631e8364d", + parentPoolID: "0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa", + investorID: "0xcf2a8bfaafd4b50f068826e3e4217925b4280836d8f182e3481c3725269c2a1f", + token0Type: ADDRESSES.sui.SUI, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //usdt usdc + poolID: "0x65a167f16da65732fc71ec5b8714e5beb293e931d54820f1fea188bbcf09383d", + parentPoolID: "0x0321b68a0fca8c990710d26986ba433d06b351deba9384017cd6175f20466a8f", + investorID: "0x685c0569675bb46b838941568f1123c03eeef374dc4160c7d9b3abbc3b93f25c", + token0Type: ADDRESSES.sui.USDT, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, + { //suiUsdt Usdc + poolID: "0x8b68333ff71fa008bb2c8bc26d5989fba51cec27393172bb6bbfdbd360489542", + parentPoolID: "0x0bd95d012d60190a6713ae51f2d833b24ae70c5fb07fcfb41db40f25549878b1", + investorID: "0x07506ea66cb73fa60dbea5177c974ca6c98d7cd8ee2fae631af6e79f139f99ec", + token0Type: ADDRESSES.sui.suiUSDT, + token1Type: ADDRESSES.sui.USDC_CIRCLE + }, +] const ALPHAFI_NAVI_TVL_IDS = [ { poolID: "0x643f84e0a33b19e2b511be46232610c6eb38e772931f582f019b8bbfb893ddb3", @@ -413,7 +456,7 @@ async function addPoolTVL4(api, alphafiBucketPools){ async function tvl(api) { - await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS), addPoolTVL4(api, ALPHAFI_BUCKET_TVL_IDS), addPoolTVL(api, ALPHAFI_BLUEFIN_TVL_IDS)]) + await Promise.all([addPoolTVL(api, ALPHAFI_CETUS_TVL_IDS), addPoolTVL2(api, ALPHAFI_NAVI_TVL_IDS), addPoolTVL3(api, ALPHAFI_NAVI_LOOP_TVL_IDS), addPoolTVL4(api, ALPHAFI_BUCKET_TVL_IDS), addPoolTVL(api, ALPHAFI_BLUEFIN_TVL_IDS), addPoolTVL(api, ALPHAFI_BLUEFIN_AUTOBALANCE_TVL_IDS)]); } async function pool2(api) { From 7aa69b3ddef2d2a8a21c0540402840ce5e3d1edf Mon Sep 17 00:00:00 2001 From: stanli1231 Date: Sun, 5 Jan 2025 23:45:21 +0800 Subject: [PATCH 1701/1768] Latch Project TVL Adapter (#12874) --- projects/latch/index.js | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 projects/latch/index.js diff --git a/projects/latch/index.js b/projects/latch/index.js new file mode 100644 index 0000000000..72f7c7146b --- /dev/null +++ b/projects/latch/index.js @@ -0,0 +1,44 @@ +const BN = require('bn.js'); +const sdk = require('@defillama/sdk'); + +const atUSD = '0xc4af68Dd5b96f0A544c4417407773fEFDc97F58d'; +const atETH = '0xc314b8637B05A294Ae9D9C29300d5f667c748baD'; +const NAV = '0x5D3920CCC068039E5B6FE680CaB7Aa09fE8E053C'; +const abi = 'function getNavByTimestamp(address,uint48) view returns (uint256 , uint48 )'; + +const tvl = async (api) => { + const chainEth = 'ethereum'; + const chainGravity = 'gravity'; + + const ethApi = new sdk.ChainApi({ chain: chainEth, timestamp: api.timestamp }); + const gravityApi = new sdk.ChainApi({ chain: chainGravity }); + + await Promise.all([ethApi.getBlock(), gravityApi.getBlock()]); + + const [usdNav, ethNav, usdtSupply, ethSupply] = await Promise.all([ + ethApi.call({ target: NAV, params: [atUSD, api.timestamp], abi }), + ethApi.call({ target: NAV, params: [atETH, api.timestamp], abi }), + gravityApi.call({ abi: 'erc20:totalSupply', target: atUSD }), + gravityApi.call({ abi: 'erc20:totalSupply', target: atETH }), + ]); + + // Convert results to BN + const usdNavBN = new BN(usdNav[0].toString()); + const ethNavBN = new BN(ethNav[0].toString()); + const usdtSupplyBN = new BN(usdtSupply.toString()); + const ethSupplyBN = new BN(ethSupply.toString()); + + // Perform calculations + const usdtResult = usdtSupplyBN.mul(usdNavBN).div(new BN('10').pow(new BN(30))); + const ethResult = ethSupplyBN.mul(ethNavBN).div(new BN('10').pow(new BN(18))); + + // Add results to API + api.add('0xdac17f958d2ee523a2206206994597c13d831ec7', usdtResult.toString()); + api.add('0x0000000000000000000000000000000000000000', ethResult.toString()); +}; + +module.exports = { + ethereum: { + tvl: tvl, + }, +}; \ No newline at end of file From 35bacc9e59e8317c2060debb6234ee5254658d62 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Jan 2025 16:52:27 +0100 Subject: [PATCH 1702/1768] PR #12879 --- projects/latch/index.js | 58 ++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/projects/latch/index.js b/projects/latch/index.js index 72f7c7146b..8ec0d728c6 100644 --- a/projects/latch/index.js +++ b/projects/latch/index.js @@ -1,44 +1,26 @@ -const BN = require('bn.js'); -const sdk = require('@defillama/sdk'); - -const atUSD = '0xc4af68Dd5b96f0A544c4417407773fEFDc97F58d'; -const atETH = '0xc314b8637B05A294Ae9D9C29300d5f667c748baD'; -const NAV = '0x5D3920CCC068039E5B6FE680CaB7Aa09fE8E053C'; -const abi = 'function getNavByTimestamp(address,uint48) view returns (uint256 , uint48 )'; +const { sumTokens2 } = require('../helper/unwrapLPs'); const tvl = async (api) => { - const chainEth = 'ethereum'; - const chainGravity = 'gravity'; - - const ethApi = new sdk.ChainApi({ chain: chainEth, timestamp: api.timestamp }); - const gravityApi = new sdk.ChainApi({ chain: chainGravity }); - - await Promise.all([ethApi.getBlock(), gravityApi.getBlock()]); - - const [usdNav, ethNav, usdtSupply, ethSupply] = await Promise.all([ - ethApi.call({ target: NAV, params: [atUSD, api.timestamp], abi }), - ethApi.call({ target: NAV, params: [atETH, api.timestamp], abi }), - gravityApi.call({ abi: 'erc20:totalSupply', target: atUSD }), - gravityApi.call({ abi: 'erc20:totalSupply', target: atETH }), - ]); - - // Convert results to BN - const usdNavBN = new BN(usdNav[0].toString()); - const ethNavBN = new BN(ethNav[0].toString()); - const usdtSupplyBN = new BN(usdtSupply.toString()); - const ethSupplyBN = new BN(ethSupply.toString()); - - // Perform calculations - const usdtResult = usdtSupplyBN.mul(usdNavBN).div(new BN('10').pow(new BN(30))); - const ethResult = ethSupplyBN.mul(ethNavBN).div(new BN('10').pow(new BN(18))); - - // Add results to API - api.add('0xdac17f958d2ee523a2206206994597c13d831ec7', usdtResult.toString()); - api.add('0x0000000000000000000000000000000000000000', ethResult.toString()); + const depositPools = [ + '0xFE606EEc8Eb8e6Ad8E8654968a15650F5331a023', + '0x7cC08f23a6E8222c86a62fCE3d4d252dd1b8f90C', + ] + + const proxies = [ + '0xa116b4680b52973426B6D2a92DcC972b8DbcB46F', + ] + + const tokens = await api.multiCall({ abi: 'address:ASSET_TOKEN', calls: depositPools }) + const stakingPools = await api.multiCall({ abi: 'address:treasury', calls: depositPools }) + const nextTreasuries = await api.multiCall({ abi: 'address:nextTreasury', calls: stakingPools }) + const withdrawPools = await api.multiCall({ abi: 'address:withdrawPool', calls: stakingPools }) + + await sumTokens2({ api, tokens, owners: depositPools.concat(withdrawPools), }) + return sumTokens2({ api, tokens, owners: nextTreasuries.concat(stakingPools).concat(proxies), fetchCoValentTokens: true, tokenConfig: { onlyWhitelisted: false, } }) }; module.exports = { - ethereum: { - tvl: tvl, - }, + ethereum: { + tvl, + }, }; \ No newline at end of file From 710c7660a2f01c1f9dfd5bcab2129cf86dff992e Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sun, 5 Jan 2025 21:39:39 +0000 Subject: [PATCH 1703/1768] fix --- projects/helper/env.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/helper/env.js b/projects/helper/env.js index bb4b847488..5b576c1a37 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -18,6 +18,7 @@ const DEFAULTS = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', RENEC_RPC: "https://api-mainnet-beta.renec.foundation:8899/", RPC_PROXY_URL: "https://rpc-proxy.llama.fi", + FLOW_RPC: "https://mainnet.evm.nodes.onflow.org" } const ENV_KEYS = [ From 38ac20eaa3c73e8a45df6929965cd8696093ab7a Mon Sep 17 00:00:00 2001 From: CreampanFi <140930991+Creamapan@users.noreply.github.com> Date: Mon, 6 Jan 2025 05:48:51 +0800 Subject: [PATCH 1704/1768] CreampanFinance Update index.js (#12902) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/CreampanFinance/index.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/projects/CreampanFinance/index.js b/projects/CreampanFinance/index.js index b0bc1d4876..cc0a93c392 100644 --- a/projects/CreampanFinance/index.js +++ b/projects/CreampanFinance/index.js @@ -7,13 +7,27 @@ const accounts = Object.values({ account3: 'cro1pduq0ga2ans0sspph6r5hcf77cqypz6de7n64y', account4: 'cro1fncg0fsr8vt30qaqmzqxunnrkxr6a7xxkfpr7y', account5: 'cro1hhfh6xaflg8zwhwvrs7sgur2pyfunjqeu8wsd6', + account6: 'cro1a2vawclcntewtjd5jfjf44dr6mdfdyg8xzfe5t', + account7: 'cro1wc43z84u8keas3ffw4ynapwe0hzfen3xx03dpd', + account8: 'cro1ujkwlnfnl3mmka4twqx07azxk6djlplddcn48h', + account9: 'cro16wzuj3a9tdqk9z3edx587athz2kk75gj2l6etk', + account10: 'cro1hfx8t4nldtfk5w6h6eherfts4gtelvcn0dypc3', }) async function tvl(api) { const data = await Promise.all(accounts.map(account => queryV1Beta1({ chain: 'cronos', url: `/staking/v1beta1/delegations/${account}`, }))); - const factroy_contract_address = '0x66f5997b7810723aceeeb8a880846fc117081bd0'; + const data2 = await Promise.all(accounts.map(account => queryV1Beta1({ chain: 'cronos', url: `/staking/v1beta1/delegators/${account}/unbonding_delegations`, }))); + const factory_contract_address = '0x66f5997b7810723aceeeb8a880846fc117081bd0'; + const factoryV2_contract_address = '0xfd3300b2441072b35554f1043c3d3a413fd5c219'; data.map(i => i.delegation_responses).flat().forEach(i => api.add(ADDRESSES.cronos.WCRO, i.balance.amount * 1e10)) - return api.sumTokens({ owner: factroy_contract_address, tokens: [ADDRESSES.cronos.WCRO_1]}) + + for (let j = 0; j < accounts.length; j++) { + if (Number(data2[j].pagination.total) > 0) { + data2[j].unbonding_responses[0].entries.flat().forEach(i => api.add(ADDRESSES.cronos.WCRO, i.balance * 1e10)) + } + } + + return api.sumTokens({ owners: [factory_contract_address, factoryV2_contract_address], tokens: [ADDRESSES.cronos.WCRO_1] }) } module.exports = { From 4d349efdd1207860bce760a0f556d80eb858a416 Mon Sep 17 00:00:00 2001 From: "BT.Wood(Tang Bo Hao)" Date: Mon, 6 Jan 2025 05:49:29 +0800 Subject: [PATCH 1705/1768] feat: Update TVL query scripts for Fixes World. (#12904) --- projects/fixes-coins/index.js | 55 ++------------------------ projects/fixes-frc20-staking/index.js | 57 ++------------------------- projects/fixes-frc20/index.js | 43 ++------------------ 3 files changed, 10 insertions(+), 145 deletions(-) diff --git a/projects/fixes-coins/index.js b/projects/fixes-coins/index.js index 924a420ba0..7a6b5611b7 100644 --- a/projects/fixes-coins/index.js +++ b/projects/fixes-coins/index.js @@ -2,60 +2,11 @@ const { callCadence } = require("../helper/chain/flow"); let queryTVLCode = ` -import LiquidStaking from 0xd6f80565193ad727 -import stFlowToken from 0xd6f80565193ad727 -// Fixes Imports -import FRC20AccountsPool from 0xd2abb5dbf5e08666 -import FixesFungibleTokenInterface from 0xd2abb5dbf5e08666 -import FixesTokenLockDrops from 0xd2abb5dbf5e08666 -import FixesTradablePool from 0xd2abb5dbf5e08666 -import FRC20Indexer from 0xd2abb5dbf5e08666 +import FixesTVL from 0xd2abb5dbf5e08666 access(all) fun main(): UFix64 { - // singleton resource and constants - let acctsPool = FRC20AccountsPool.borrowAccountsPool() - let frc20Indexer = FRC20Indexer.getIndexer() - let stFlowTokenKey = "@".concat(Type<@stFlowToken.Vault>().identifier) - - // dictionary of addresses - let addrsDict = acctsPool.getAddresses(type: FRC20AccountsPool.ChildAccountType.FungibleToken) - // dictionary of tickers and total locked token balances - let tickerTotal: {String: UFix64} = {} - // This is the soft burned LP value which is fully locked in the BlackHole Vault - var flowLockedInBondingCurve = 0.0 - addrsDict.forEachKey(fun (key: String): Bool { - if let addr = addrsDict[key] { - // sum up all locked token balances in LockDrops Pool - if let dropsPool = FixesTokenLockDrops.borrowDropsPool(addr) { - let lockedTokenSymbol = dropsPool.getLockingTokenTicker() - tickerTotal[lockedTokenSymbol] = (tickerTotal[lockedTokenSymbol] ?? 0.0) + dropsPool.getTotalLockedTokenBalance() - } - // sum up all burned LP value in Tradable Pool - if let tradablePool = FixesTradablePool.borrowTradablePool(addr) { - flowLockedInBondingCurve = flowLockedInBondingCurve + tradablePool.getFlowBalanceInPool() - } - } - return true - }) - // sum up all locked token balances in LockDrops Pool - var totalLockingTokenTVL = 0.0 - tickerTotal.forEachKey(fun (key: String): Bool { - let lockedAmount = tickerTotal[key]! - if key == "" { - // this is locked FLOW - totalLockingTokenTVL = totalLockingTokenTVL + lockedAmount - } else if key == "fixes" { - // this is locked FIXES - let price = frc20Indexer.getBenchmarkValue(tick: "fixes") - totalLockingTokenTVL = totalLockingTokenTVL + lockedAmount * price - } else if key == stFlowTokenKey { - // this is locked stFlow - totalLockingTokenTVL = totalLockingTokenTVL + LiquidStaking.calcFlowFromStFlow(stFlowAmount: lockedAmount) - } - return true - }) - return totalLockingTokenTVL + flowLockedInBondingCurve + return FixesTVL.getAllLockedCoinFlowValue() } `; @@ -64,7 +15,7 @@ async function tvl() { const flowTokenTVL = await callCadence(queryTVLCode, true); return { flow: flowTokenTVL }; } catch (error) { - throw new Error("Couln't query scripts of Fixes coins", error); + throw new Error("Couln't query scripts of Fixes coins. Error: " + error.message); } } diff --git a/projects/fixes-frc20-staking/index.js b/projects/fixes-frc20-staking/index.js index 119d797cb1..c3c371fb1d 100644 --- a/projects/fixes-frc20-staking/index.js +++ b/projects/fixes-frc20-staking/index.js @@ -2,60 +2,11 @@ const { callCadence } = require("../helper/chain/flow"); let queryTVLCode = ` -import FRC20Staking from 0xd2abb5dbf5e08666 -import FRC20AccountsPool from 0xd2abb5dbf5e08666 -import FRC20Marketplace from 0xd2abb5dbf5e08666 -import FRC20Storefront from 0xd2abb5dbf5e08666 -import FRC20Indexer from 0xd2abb5dbf5e08666 +import FixesTVL from 0xd2abb5dbf5e08666 access(all) fun main(): UFix64 { - let acctsPool = FRC20AccountsPool.borrowAccountsPool() - let stakingTokens = acctsPool.getAddresses(type: FRC20AccountsPool.ChildAccountType.Staking) - - var totalTVL = 0.0 - let ticks = stakingTokens.keys - - for tick in ticks { - let stakingAddr = stakingTokens[tick]! - let stakingPool = FRC20Staking.borrowPool(stakingAddr) - if stakingPool == nil { - continue - } - - let indexer = FRC20Indexer.getIndexer() - // calculate floor price - let benchmarkPrice = indexer.getBenchmarkValue(tick: tick) - var floorPrice = benchmarkPrice - - if let marketAddr = acctsPool.getFRC20MarketAddress(tick: tick) { - if let market = FRC20Marketplace.borrowMarket(marketAddr) { - let buyPriceRanks = market.getPriceRanks(type: FRC20Storefront.ListingType.FixedPriceBuyNow) - if buyPriceRanks.length > 0 { - var i = 0 - let floorPriceRank = buyPriceRanks[i] - let listIds = market.getListedIds(type: FRC20Storefront.ListingType.FixedPriceBuyNow, rank: floorPriceRank) - if listIds.length > 0 { - if let listing = market.getListedItem( - type: FRC20Storefront.ListingType.FixedPriceBuyNow, - rank: floorPriceRank, - id: listIds[0] - ) { - if let details = listing.getDetails() { - floorPrice = details.pricePerToken() - } - } - } - } - } - } // end if - - var details = stakingPool!.getDetails() - let validStaked = details.totalStaked - details.totalUnstakingLocked - - totalTVL = totalTVL + (validStaked * (floorPrice - benchmarkPrice)) - } - return totalTVL + return FixesTVL.getAllStakedFlowValue() } `; @@ -64,9 +15,9 @@ async function tvl() { const flowTokenTVL = await callCadence(queryTVLCode, true); return { flow: flowTokenTVL }; } catch (error) { + console.error(error.message); throw new Error( - "Couln't query scripts of fixes 𝔉rc20 treasury pool", - error + "Couln't query scripts of fixes 𝔉rc20 treasury pool. Error: " + error.message ); } } diff --git a/projects/fixes-frc20/index.js b/projects/fixes-frc20/index.js index 332ac4ca58..626d810951 100644 --- a/projects/fixes-frc20/index.js +++ b/projects/fixes-frc20/index.js @@ -2,47 +2,11 @@ const { callCadence } = require("../helper/chain/flow"); let queryTVLCode = ` -import FRC20Indexer from 0xd2abb5dbf5e08666 -import FGameLottery from 0xd2abb5dbf5e08666 -import FGameLotteryRegistry from 0xd2abb5dbf5e08666 -import FGameLotteryFactory from 0xd2abb5dbf5e08666 -import FRC20FTShared from 0xd2abb5dbf5e08666 -import FRC20Staking from 0xd2abb5dbf5e08666 -import FRC20AccountsPool from 0xd2abb5dbf5e08666 +import FixesTVL from 0xd2abb5dbf5e08666 access(all) fun main(): UFix64 { - let indexer = FRC20Indexer.getIndexer() - let tokens = indexer.getTokens() - var totalBalance = 0.0 - // all treasury pool balance - for tick in tokens { - let balance = indexer.getPoolBalance(tick: tick) - totalBalance = totalBalance + balance - } - - // FLOW lottery jackpot balance - let registry = FGameLotteryRegistry.borrowRegistry() - let flowLotteryPoolName = FGameLotteryFactory.getFIXESMintingLotteryPoolName() - if let poolAddr = registry.getLotteryPoolAddress(flowLotteryPoolName) { - if let poolRef = FGameLottery.borrowLotteryPool(poolAddr) { - let jackpotBalance = poolRef.getJackpotPoolBalance() - totalBalance = totalBalance + jackpotBalance - } - } - - // Unclaimed FLOW Reward in the staking reward pool - let acctsPool = FRC20AccountsPool.borrowAccountsPool() - let platformStakingTick = FRC20FTShared.getPlatformStakingTickerName() - if let stakingPoolAddr = acctsPool.getFRC20StakingAddress(tick: platformStakingTick) { - if let stakingPool = FRC20Staking.borrowPool(stakingPoolAddr) { - if let detail = stakingPool.getRewardDetails("") { - totalBalance = totalBalance + detail.totalReward - } - } - } - - return totalBalance + return FixesTVL.getAllTreasuryFlowValue() } `; @@ -52,8 +16,7 @@ async function tvl() { return { flow: flowTokenTVL }; } catch (error) { throw new Error( - "Couln't query scripts of fixes 𝔉rc20 treasury pool", - error + "Couln't query scripts of fixes 𝔉rc20 treasury pool. Error: " + error.message ); } } From 22db43098d76b2b410ec14de1cd836558b5b3adb Mon Sep 17 00:00:00 2001 From: AquaDEX <3sker@proton.me> Date: Sun, 5 Jan 2025 23:58:02 +0200 Subject: [PATCH 1706/1768] Add Waterfall network (#12921) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/aquadex-v3/index.js | 5 +++++ projects/helper/chains.json | 1 + projects/helper/env.js | 1 + projects/helper/tokenMapping.js | 3 +++ 4 files changed, 10 insertions(+) create mode 100644 projects/aquadex-v3/index.js diff --git a/projects/aquadex-v3/index.js b/projects/aquadex-v3/index.js new file mode 100644 index 0000000000..f02bf5326b --- /dev/null +++ b/projects/aquadex-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + water: { factory: '0xc8F2534FF7c88EFeacF4Fdb0E81D87c6235C3bEA', fromBlock: 1, }, +}) \ No newline at end of file diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 90749bcd6f..92ea8bcc2e 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -355,6 +355,7 @@ "vite", "vive", "wan", + "water", "waves", "wax", "wc", diff --git a/projects/helper/env.js b/projects/helper/env.js index 5b576c1a37..6d8ae9d7df 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -5,6 +5,7 @@ const BOOL_KEYS = [ ] const DEFAULTS = { + WATER_MULTICALL_RPC: "0x63cee78B11774535132fd773C5dDe3c4b41CD07f", EVMOS_MULTICALL_CHUNK_SIZE: "3", // evmos reduced gas limit, this is a workaround to make multicall work STARKNET_RPC: 'https://starknet-mainnet.public.blastapi.io', COVALENT_KEY: 'ckey_72cd3b74b4a048c9bc671f7c5a6', diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index d05350f395..c36d7e61c6 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -50,6 +50,9 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, + water: { + '0xC807C5FfFf748eF435Ddb99b181846Edd1e70041': { coingeckoId: "water-3", decimals: 18 }, + }, kopi: { 'uasusdc': { coingeckoId: 'usd-coin', decimals: 6 }, 'ucusdc': { coingeckoId: 'usd-coin', decimals: 6 }, From 70cf9deae0b759ed8a62d0827fadf5957b0fe8dc Mon Sep 17 00:00:00 2001 From: cosi10a1 Date: Mon, 6 Jan 2025 05:17:59 +0700 Subject: [PATCH 1707/1768] Add ILoop project (#12923) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/iloop/iloop_sc_mainnet.json | 169 +++++++++++++++++++++++++++ projects/iloop/index.js | 27 +++++ 2 files changed, 196 insertions(+) create mode 100644 projects/iloop/iloop_sc_mainnet.json create mode 100644 projects/iloop/index.js diff --git a/projects/iloop/iloop_sc_mainnet.json b/projects/iloop/iloop_sc_mainnet.json new file mode 100644 index 0000000000..30200dbf2c --- /dev/null +++ b/projects/iloop/iloop_sc_mainnet.json @@ -0,0 +1,169 @@ +{ + "address": "3i8rGP3ex8cjs7YYWrQeE4nWizuaStsVNUXpRGtMbs3H", + "metadata": { + "name": "iloop_sc", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [], + "accounts": [ + { + "name": "Reserve", + "discriminator": [ + 43, + 242, + 204, + 202, + 26, + 247, + 59, + 127 + ] + } + ], + "events": [], + "errors": [], + "types": [ + { + "name": "Reserve", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "lending_market", + "type": "pubkey" + }, + { + "name": "liquidity_mint", + "type": "pubkey" + }, + { + "name": "liquidity_supply", + "type": "pubkey" + }, + { + "name": "liquidity_supply_amount", + "type": "u64" + }, + { + "name": "liquidity_price", + "type": "u64" + }, + { + "name": "liquidity_price_account", + "type": "pubkey" + }, + { + "name": "liquidity_price_max_age_price_seconds", + "type": "u64" + }, + { + "name": "liquidity_price_updated_at", + "type": "u64" + }, + { + "name": "collateral_mint", + "type": "pubkey" + }, + { + "name": "collateral_supply", + "type": "pubkey" + }, + { + "name": "collateral_supply_amount", + "type": "u64" + }, + { + "name": "borrow_rate", + "type": "u64" + }, + { + "name": "deposit_rate", + "type": "u64" + }, + { + "name": "borrow_enabled", + "type": "u64" + }, + { + "name": "borrowed_amount", + "type": "u64" + }, + { + "name": "borrowed_collateral_amount", + "type": "u64" + }, + { + "name": "max_withdraw_per_day", + "type": "u64" + }, + { + "name": "withdrew_today", + "type": "u64" + }, + { + "name": "last_withdrew_at", + "type": "i64" + }, + { + "name": "margin_rate", + "type": "u64" + }, + { + "name": "optimal_utilization_rate_1", + "type": "u64" + }, + { + "name": "optimal_utilization_rate_2", + "type": "u64" + }, + { + "name": "max_borrow_rate", + "type": "u64" + }, + { + "name": "reserve_factor", + "type": "u64" + }, + { + "name": "max_multiply", + "type": "u64" + }, + { + "name": "max_supply", + "type": "u64" + }, + { + "name": "liquidation_threshold", + "type": "u64" + }, + { + "name": "liquidation_penalty", + "type": "u64" + }, + { + "name": "flash_loan_enabled", + "type": "u64" + }, + { + "name": "utilization_cap", + "type": "u64" + }, + { + "name": "apy", + "type": "u64" + }, + { + "name": "updated_at", + "type": "i64" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/projects/iloop/index.js b/projects/iloop/index.js new file mode 100644 index 0000000000..64523d8dc8 --- /dev/null +++ b/projects/iloop/index.js @@ -0,0 +1,27 @@ +const { Program, } = require('@coral-xyz/anchor'); +const iloopIdl = require('./iloop_sc_mainnet.json'); +const { sumTokens2, getProvider } = require("../helper/solana"); + +async function tvl() { + const provider = getProvider(); + const iloopProgram = new Program(iloopIdl, provider); + const reserves = await iloopProgram.account.reserve.all(); + const tokenAccounts = reserves.map(({ account }) => account.liquiditySupply.toBase58()); + return sumTokens2({ tokenAccounts }) +} +async function borrowed(api) { + const provider = getProvider(); + const iloopProgram = new Program(iloopIdl, provider); + const reserves = await iloopProgram.account.reserve.all(); + for (const { account } of reserves) { + api.add(account.liquidityMint.toBase58(), account.borrowedAmount) + } +} + +module.exports = { + timetravel: false, + solana: { + tvl, borrowed, + }, + methodology: 'TVL consists of deposits made to the protocol, borrowed tokens are not counted.', +}; From d29395ace7c30a0d8901f6db8cd26ef30611a2cf Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Sun, 5 Jan 2025 22:27:24 +0000 Subject: [PATCH 1708/1768] Add new denoms to Quicksilver (#12963) --- projects/quicksilver/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/quicksilver/index.js b/projects/quicksilver/index.js index f6c616da25..6abfdf1e42 100644 --- a/projects/quicksilver/index.js +++ b/projects/quicksilver/index.js @@ -13,6 +13,10 @@ const coinGeckoIds = { usaga: "saga-2", ubld: "agoric", utia: "celestia", + aarch: "archway", + ppica: "picasso", + uflix: "omniflix-network", + inj: "injective", }; async function tvl() { @@ -23,7 +27,7 @@ async function tvl() { zones.forEach((zone) => { const balance = supply.find((coin) => coin.denom === zone.local_denom); if (!balance) return - const amount = zone.base_denom === "adydx" ? balance.amount / 1e18 : balance.amount / Math.pow(10, 6) + const amount = balance.amount / Math.pow(10, zone.decimals) const id = coinGeckoIds[zone.base_denom] sdk.util.sumSingleBalance(balances, id, amount * zone.redemption_rate); }); From 0f9194a5c4b0b09d2b08bd9d2a12cd597bf1876c Mon Sep 17 00:00:00 2001 From: tstemko <57684389+tstemko@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:28:12 -0500 Subject: [PATCH 1709/1768] Add Sonic and Zircuit to tvl calc (#12970) Co-authored-by: Tatyana Stemkovski --- projects/ichifarm/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index 119f8af691..93e6d65a02 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -169,11 +169,22 @@ const config = { { factory: '0x9FAb4bdD4E05f5C023CCC85D2071b49791D7418F', fromBlock: 4728729, isAlgebra: false, }, // Uniswap ] }, + sonic: { + vaultConfigs: [ + { factory: '0x7D18F2D60E4fd6F485419727515807d09A542eb9', fromBlock: 1971740, isAlgebra: false, }, // Equalizer + { factory: '0x34513e8A327987Bb44acF5A925a7f3b4092d8b5F', fromBlock: 1476044, isAlgebra: true, }, // SwapX + ] + }, taiko: { vaultConfigs: [ { factory: '0x9FAb4bdD4E05f5C023CCC85D2071b49791D7418F', fromBlock: 11578, isAlgebra: true, }, // Henjin ] }, + zircuit: { + vaultConfigs: [ + { factory: '0x1A58D4CFF22C7E2e0c4cCf4a0010b87822d024A1', fromBlock: 5104000, isAlgebra: true, }, // Ocelex + ] + }, } Object.keys(config).forEach(chain => { From f0552664c0124a1333357ee0807261bbe6d4482e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:36:52 +0100 Subject: [PATCH 1710/1768] track mantra amm #12972 --- package.json | 1 + projects/helper/chain/cosmos.js | 3 ++- projects/helper/chains.json | 31 ++++++++++++++-------------- projects/helper/tokenMapping.js | 5 ++++- projects/mantra-amm/index.js | 36 +++++++++++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 projects/mantra-amm/index.js diff --git a/package.json b/package.json index 16a0dbca56..4d6d92c336 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "biggest-files": "find ./projects -name '*.js' -not -path './projects/helper/*' -not -path './projects/curve/*' -not -path './projects/sigmao/*' -exec du -sh {} \\; | sort -rh | head -n 100", "check-bitcoin-duplicates": "node utils/scripts/checkBTCDupsv2.js", "string-timestamp": "node utils/scripts/stringTimestamp.js", + "sort-chains": "node projects/helper/getChainList.js", "postinstall": "echo 'run \"npm update @defillama/sdk\" if you want lastest sdk changes' " }, "author": "", diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index 50b4ad6e81..aea053b971 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -45,6 +45,7 @@ const endPoints = { joltify: "https://lcd.joltify.io", kopi: "https://rest.kopi.money", noble: "https://noble-api.polkachu.com", + mantra: "https://api.mantrachain.io", elys: "https://api.elys.network", // https://api.elys.network/#/Query/ElysAmmPoolAll pryzm: "https://api.pryzm.zone" }; @@ -313,7 +314,7 @@ async function sumTokens({ balances, owners = [], chain, owner, tokens, blacklis .for(owners) .process(async (owner, i) => { await getBalance2({ balances, owner, chain, tokens, blacklistedTokens, api, }) - if (chain === 'osmosis' && owners.length > 100) + if (chain === 'osmosis' && owners.length > 100) await sleep(3000) }); diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 92ea8bcc2e..4c34046086 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -9,14 +9,14 @@ "alephium", "algorand", "alv", + "ancient8", + "apechain", "aptos", "arbitrum", "arbitrum_nova", - "assetchain", - "ancient8", "archway", "area", - "apechain", + "assetchain", "astar", "astrzk", "aura", @@ -34,10 +34,10 @@ "bitcoincash", "bitgert", "bitindi", + "bitkub", "bitrock", "bittensor", "bittorrent", - "bitkub", "blast", "bob", "boba", @@ -49,8 +49,8 @@ "bouncebit", "bsc", "bsquared", - "btr", "btn", + "btr", "bytomsidechain", "callisto", "candle", @@ -90,8 +90,8 @@ "degen", "dexalot", "dexit", - "dfs", "dfk", + "dfs", "doge", "dogechain", "dsc", @@ -115,11 +115,11 @@ "equilibrium", "era", "ergo", - "etlk", "ethereum", "ethereumclassic", "ethf", "ethpow", + "etlk", "etn", "europa", "everscale", @@ -133,8 +133,8 @@ "fraxtal", "fsc", "ftn", - "functionx", "fuel", + "functionx", "fuse", "fusion", "genesys", @@ -146,8 +146,8 @@ "gravity", "gravitybridge", "grove", - "harmony", "ham", + "harmony", "heco", "hedera", "heiko", @@ -199,10 +199,11 @@ "lukso", "lung", "manta", - "massa", "manta_atlantic", "mantle", + "mantra", "map", + "massa", "matchain", "mayachain", "meer", @@ -278,8 +279,8 @@ "quicksilver", "radixdlt", "rari", - "real", "rbn", + "real", "reef", "regen", "rei", @@ -312,7 +313,6 @@ "sonic", "sophon", "sora", - "swellchain", "stacks", "stafi", "staking", @@ -324,6 +324,7 @@ "stride", "sui", "svm", + "swellchain", "sx", "syscoin", "taiko", @@ -365,6 +366,7 @@ "xdc", "xlayer", "xpla", + "xsat", "zeniq", "zeta", "zilliqa", @@ -374,6 +376,5 @@ "zklink", "zksync", "zora", - "zyx", - "xsat" -] + "zyx" +] \ No newline at end of file diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index c36d7e61c6..a3c555ca8f 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -19,7 +19,7 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru', - 'kopi', 'elys', "pryzm" + 'kopi', 'elys', "pryzm", "mantra", ] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', @@ -92,6 +92,9 @@ const fixBalancesTokens = { crossfi: { [ADDRESSES.null]: { coingeckoId: 'crossfi-2', decimals: 18 }, [ADDRESSES.crossfi.WXFI]: { coingeckoId: 'crossfi-2', decimals: 18 }, + }, + mantra: { + uom: { coingeckoId: 'mantra-dao', decimals: 6 }, } } diff --git a/projects/mantra-amm/index.js b/projects/mantra-amm/index.js new file mode 100644 index 0000000000..8ab368def4 --- /dev/null +++ b/projects/mantra-amm/index.js @@ -0,0 +1,36 @@ +const { queryContract } = require("../helper/chain/cosmos"); + +const chain = 'mantra' +const mantraPoolManager = 'mantra1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjqagspfm' + +/** + * Get all pools in the DEX + * @returns {Promise}, total_share: {denom: string, amount: string}}>>} + */ +async function getDexPools() { + const response = await queryContract({ + chain, + contract: mantraPoolManager, + data: { + pools: {} + } + }) + return response.pools +} + +async function tvl(api) { + const allPools = await getDexPools() + allPools.forEach(pool => { + pool.pool_info.assets.forEach(asset => { + api.add(asset.denom, asset.amount) + }) + }) +} + +module.exports = { + timetravel: false, + methodology: "Counts the liquidity on MANTRA Chain AMM pools", + mantra: { + tvl + } +} \ No newline at end of file From f7cc477c6c42c74d873a21cac263b6229d7bf775 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:06:03 +0100 Subject: [PATCH 1711/1768] Add astrolend adapter and refactor code (#12975) Co-authored-by: Whanod --- projects/astrolend/idl.json | 146 +++++++++++++++++++++++++ projects/astrolend/index.js | 32 ++++++ projects/astrolend/utils/conversion.js | 93 ++++++++++++++++ projects/helper/solana.js | 16 +++ projects/nxfi/index.js | 21 +--- 5 files changed, 291 insertions(+), 17 deletions(-) create mode 100644 projects/astrolend/idl.json create mode 100644 projects/astrolend/index.js create mode 100644 projects/astrolend/utils/conversion.js diff --git a/projects/astrolend/idl.json b/projects/astrolend/idl.json new file mode 100644 index 0000000000..944881bdd8 --- /dev/null +++ b/projects/astrolend/idl.json @@ -0,0 +1,146 @@ +{ + "events": [], + "accounts": [{"discriminator": [142, 49, 166, 242, 50, 66, 97, 188], "name": "Bank"}], + "address": "Astro1oWvtB7cBTwi3efLMFB47WXx7DJDQeoxi235kA", + "instructions": [], + "metadata": {"description": "Created with Anchor", "name": "astrolend", "spec": "0.1.0", "version": "0.1.0"}, + "types": [ + { + "name": "Bank", + "repr": {"kind": "c"}, + "serialization": "bytemuckunsafe", + "type": { + "fields": [ + {"name": "mint", "type": "pubkey"}, + {"name": "mint_decimals", "type": "u8"}, + {"name": "group", "type": "pubkey"}, + {"name": "_pad0", "type": {"array": ["u8", 7]}}, + {"name": "asset_share_value", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "liability_share_value", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "liquidity_vault", "type": "pubkey"}, + {"name": "liquidity_vault_bump", "type": "u8"}, + {"name": "liquidity_vault_authority_bump", "type": "u8"}, + {"name": "insurance_vault", "type": "pubkey"}, + {"name": "insurance_vault_bump", "type": "u8"}, + {"name": "insurance_vault_authority_bump", "type": "u8"}, + {"name": "_pad1", "type": {"array": ["u8", 4]}}, + {"name": "collected_insurance_fees_outstanding", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "fee_vault", "type": "pubkey"}, + {"name": "fee_vault_bump", "type": "u8"}, + {"name": "fee_vault_authority_bump", "type": "u8"}, + {"name": "_pad2", "type": {"array": ["u8", 6]}}, + {"name": "collected_group_fees_outstanding", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "total_liability_shares", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "total_asset_shares", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "last_update", "type": "i64"}, + {"name": "config", "type": {"defined": {"name": "BankConfig"}}}, + { + "docs": [ + "Bank Config Flags", + "", + "- EMISSIONS_FLAG_BORROW_ACTIVE: 1", + "- EMISSIONS_FLAG_LENDING_ACTIVE: 2", + "- PERMISSIONLESS_BAD_DEBT_SETTLEMENT: 4", + "" + ], + "name": "flags", + "type": "u64" + }, + { + "docs": [ + "Emissions APR.", + "Number of emitted tokens (emissions_mint) per 1e(bank.mint_decimal) tokens (bank mint) (native amount) per 1 YEAR." + ], + "name": "emissions_rate", + "type": "u64" + }, + {"name": "emissions_remaining", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "emissions_mint", "type": "pubkey"}, + {"name": "_padding_0", "type": {"array": [{"array": ["u64", 2]}, 28]}}, + {"name": "_padding_1", "type": {"array": [{"array": ["u64", 2]}, 32]}} + ], + "kind": "struct" + } + }, + { + "name": "WrappedI80F48", + "repr": {"align": 8, "kind": "c"}, + "serialization": "bytemuck", + "type": {"fields": [{"name": "value", "type": {"array": ["u8", 16]}}], "kind": "struct"} + }, + { + "docs": ["TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)"], + "name": "BankConfig", + "repr": {"kind": "c"}, + "serialization": "bytemuckunsafe", + "type": { + "fields": [ + {"name": "asset_weight_init", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "asset_weight_maint", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "liability_weight_init", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "liability_weight_maint", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "deposit_limit", "type": "u64"}, + {"name": "interest_rate_config", "type": {"defined": {"name": "InterestRateConfig"}}}, + {"name": "operational_state", "type": {"defined": {"name": "BankOperationalState"}}}, + {"name": "oracle_setup", "type": {"defined": {"name": "OracleSetup"}}}, + {"name": "oracle_keys", "type": {"array": ["pubkey", 5]}}, + {"name": "_pad0", "type": {"array": ["u8", 6]}}, + {"name": "borrow_limit", "type": "u64"}, + {"name": "risk_tier", "type": {"defined": {"name": "RiskTier"}}}, + {"name": "auto_padding_0", "type": {"array": ["u8", 7]}}, + {"name": "_pad1", "type": {"array": ["u8", 7]}}, + { + "docs": [ + "USD denominated limit for calculating asset value for initialization astrol requirements.", + "Example, if total SOL deposits are equal to $1M and the limit it set to $500K,", + "then SOL assets will be discounted by 50%.", + "", + "In other words the max value of liabilities that can be backed by the asset is $500K.", + "This is useful for limiting the damage of orcale attacks.", + "", + "Value is UI USD value, for example value 100 -> $100" + ], + "name": "total_asset_value_init_limit", + "type": "u64" + }, + {"docs": ["Time window in seconds for the oracle price feed to be considered live."], "name": "oracle_max_age", "type": "u16"}, + {"name": "_padding", "type": {"array": ["u8", 38]}} + ], + "kind": "struct" + } + }, + { + "name": "InterestRateConfig", + "repr": {"kind": "c"}, + "serialization": "bytemuck", + "type": { + "fields": [ + {"name": "optimal_utilization_rate", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "plateau_interest_rate", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "max_interest_rate", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "insurance_fee_fixed_apr", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "insurance_ir_fee", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "protocol_fixed_fee_apr", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "protocol_ir_fee", "type": {"defined": {"name": "WrappedI80F48"}}}, + {"name": "_padding", "type": {"array": [{"array": ["u64", 2]}, 8]}} + ], + "kind": "struct" + } + }, + { + "name": "BankOperationalState", + "repr": {"kind": "rust"}, + "type": {"kind": "enum", "variants": [{"name": "Paused"}, {"name": "Operational"}, {"name": "ReduceOnly"}]} + }, + { + "name": "OracleSetup", + "repr": {"kind": "rust"}, + "type": { + "kind": "enum", + "variants": [{"name": "None"}, {"name": "PythLegacy"}, {"name": "SwitchboardV2"}, {"name": "PythPushOracle"}, {"name": "SwitchboardPull"}] + } + }, + {"name": "RiskTier", "repr": {"kind": "rust"}, "type": {"kind": "enum", "variants": [{"name": "Collateral"}, {"name": "Isolated"}]}} + ], + "errors": [] +} \ No newline at end of file diff --git a/projects/astrolend/index.js b/projects/astrolend/index.js new file mode 100644 index 0000000000..ec82246f11 --- /dev/null +++ b/projects/astrolend/index.js @@ -0,0 +1,32 @@ +const { Program } = require("@coral-xyz/anchor"); +const { getProvider, sumTokens2 } = require("../helper/solana"); +const idl = require('./idl.json') +const wrappedI80F48toBigNumber = require("./utils/conversion") + +let _banks + +async function getBanks() { + if (_banks) return _banks + const provider = getProvider('eclipse') + const program = new Program(idl, provider) + _banks = program.account.bank.all() + return _banks +} + +async function tvl(api) { + const banks = await getBanks() + return sumTokens2({ api, tokenAccounts: banks.map(bank => bank.account.liquidityVault) }); +} + +async function borrowed(api) { + const banks = await getBanks() + + banks.forEach(bank => { + api.add(bank.account.mint.toString(), wrappedI80F48toBigNumber(bank.account.totalLiabilityShares.value)) + }) +} + +module.exports = { + timetravel: false, + eclipse: { tvl, borrowed, }, +} diff --git a/projects/astrolend/utils/conversion.js b/projects/astrolend/utils/conversion.js new file mode 100644 index 0000000000..75e4c926e2 --- /dev/null +++ b/projects/astrolend/utils/conversion.js @@ -0,0 +1,93 @@ +function decodeI80F48FromHex(hex, fractionalBytes = 6, signChar = "") { + // 1) Parse the hex as BigInt + let value = BigInt(hex); + + // 2) Apply sign if needed + if (signChar === "-") { + value = -value; + } + + // 3) Separate integer/fractional bits + // Typically I80F48 -> 48 fractional bits = 6 bytes * 8 bits/byte. + const fractionBits = 8n * BigInt(fractionalBytes); + + // integerPart = value >> 48 + let integerPart = value >> fractionBits; + + // fractionalPart = value & ((1 << 48) - 1) + let fractionalPart = value & ((1n << fractionBits) - 1n); + + // Remember if final result should be negative + const isNegative = integerPart < 0n; + if (isNegative) { + integerPart = -integerPart; + fractionalPart = -fractionalPart; + // With two’s complement, you might have to do more nuance, + // but typically I80F48 is stored as a signed 128-bit or so. + // For many Solana-based I80F48 implementations, the fractional portion + // is treated as positive magnitude once you know the sign. + } + + // 4) Convert integer part to decimal string + const integerString = integerPart.toString(10); + + // 5) Convert fractional part to decimal string by repeated "multiply by 10, divide by 2^48" + let fractionString = ""; + const denominator = 1n << fractionBits; + + // Ensure fractionalPart is positive for the loop + if (fractionalPart < 0n) { + fractionalPart = -fractionalPart; + } + + while (fractionalPart !== 0n) { + fractionalPart *= 10n; + const digit = fractionalPart / denominator; + fractionString += digit.toString(10); + fractionalPart = fractionalPart % denominator; + } + + // Combine integer + fractional + let result = fractionString.length > 0 + ? integerString + "." + fractionString + : integerString; + + // Re-apply negative if needed + if (isNegative) { + result = "-" + result; + } + + return result; +} + +// -------------------------------------------------------------------- +// USAGE EXAMPLE: + +// Suppose we have 16 bytes in I80F48 format, with 8 fractional bytes (48 bits). +// (Adjust fractionalBytes as needed for your situation.) +const I80F48_FRACTIONAL_BYTES = 6; // typical for "I80F48" = 48 fractional bits + +function wrappedI80F48toBigNumber(wrapped) { + const I80F48_TOTAL_BYTES = 16 + let bytesLE = wrapped; + if (bytesLE.length !== I80F48_TOTAL_BYTES) { + throw new Error(`Expected a ${I80F48_TOTAL_BYTES}-byte buffer`); + } + + let bytesBE = bytesLE.slice(); + bytesBE.reverse(); + + let signChar = ""; + const msb = bytesBE[0]; + if (msb & 0x80) { + signChar = "-"; + bytesBE = bytesBE.map((v) => ~v & 0xff); + } + + let hex = signChar + "0x" + bytesBE.map((v) => v.toString(16).padStart(2, "0")).join(""); + const decimalString = decodeI80F48FromHex(hex, 6) + return decimalString.split(".")[0] + +} + +module.exports = wrappedI80F48toBigNumber diff --git a/projects/helper/solana.js b/projects/helper/solana.js index c525e7cc96..fbc591600b 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -409,6 +409,21 @@ async function runInChunks(inputs, fn, { chunkSize = 99, sleepTime } = {}) { return results.flat() } +function i80f48ToNumber(i80f48) { + if (i80f48.value) i80f48 = i80f48.value + // Create a mask with the lower 48 bits set to 1 + const mask = BigInt((1n << 48n) - 1n) + + // Shift right by 48 bits to get the integer part + const integerPart = BigInt(i80f48) >> BigInt(48) + + // Use bitwise AND to get the fractional part + const fractionalPart = BigInt(i80f48) & mask + + // Convert to regular numbers and add together + return Number(integerPart) + Number(fractionalPart) / Number(1n << 48n) +} + module.exports = { endpoint: endpoint(), getMultipleAccounts, @@ -428,4 +443,5 @@ module.exports = { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddress, + i80f48ToNumber, }; diff --git a/projects/nxfi/index.js b/projects/nxfi/index.js index 041e5deb22..93990ef65d 100644 --- a/projects/nxfi/index.js +++ b/projects/nxfi/index.js @@ -1,22 +1,8 @@ const { Program } = require("@project-serum/anchor"); -const { getProvider, sumTokens2, } = require("../helper/solana"); +const { getProvider, sumTokens2, i80f48ToNumber, } = require("../helper/solana"); const idl = require('./idl') -function i80f48ToNumber(i80f48) { - if (i80f48.value) i80f48 = i80f48.value - // Create a mask with the lower 48 bits set to 1 - const mask = BigInt((1n << 48n) - 1n) - - // Shift right by 48 bits to get the integer part - const integerPart = BigInt(i80f48) >> BigInt(48) - - // Use bitwise AND to get the fractional part - const fractionalPart = BigInt(i80f48) & mask - - // Convert to regular numbers and add together - return Number(integerPart) + Number(fractionalPart) / Number(1n << 48n) -} async function tvl() { const provider = getProvider() @@ -24,11 +10,12 @@ async function tvl() { const reserves = await program.account.reserve.all() return sumTokens2({ tokenAccounts: reserves.map(r => r.account.tokenInfo.tokenAccount.toString()) }); } + async function borrowed(api) { const provider = getProvider() const program = new Program(idl, 'NxFiv1eeKtKT6dQEP2erBwz2DSKCTdb8WSsxVDwVGJ1', provider) const reserves = await program.account.reserve.all() - reserves.map(r=>{ + reserves.map(r => { const amount = i80f48ToNumber(r.account.creditDebit.debtNtokenRatio) * i80f48ToNumber(r.account.creditDebit.reserveDebtNtokenAmount) const mint = r.account.tokenMint.toString() api.add(mint, amount) @@ -37,5 +24,5 @@ async function borrowed(api) { module.exports = { timetravel: false, - solana: { tvl,borrowed }, + solana: { tvl, borrowed }, } From 97f52365cf65ba1d63746280338f36e785aad10a Mon Sep 17 00:00:00 2001 From: Max Weng Date: Mon, 6 Jan 2025 19:07:54 +0800 Subject: [PATCH 1712/1768] Add Support to Base (#12974) Co-authored-by: Gerald --- projects/union-finance/index.js | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/projects/union-finance/index.js b/projects/union-finance/index.js index daeafe7650..86474d309a 100644 --- a/projects/union-finance/index.js +++ b/projects/union-finance/index.js @@ -1,22 +1,26 @@ - const ADDRESSES = require('../helper/coreAssets.json'); const methodologies = require('../helper/methodologies'); const config = { ethereum: { userManager: "0x49c910Ba694789B58F53BFF80633f90B8631c195", - DAI: ADDRESSES.ethereum.DAI, - uDAI: "0x954F20DF58347b71bbC10c94827bE9EbC8706887", + underlying: ADDRESSES.ethereum.DAI, + uToken: "0x954F20DF58347b71bbC10c94827bE9EbC8706887", }, arbitrum: { userManager: "0xb71F3D4342AaE0b8D531E14D2CF2F45d6e458A5F", - DAI: ADDRESSES.optimism.DAI, - uDAI: "0x954F20DF58347b71bbC10c94827bE9EbC8706887", + underlying: ADDRESSES.arbitrum.DAI, + uToken: "0x954F20DF58347b71bbC10c94827bE9EbC8706887", }, optimism: { userManager: "0x8E195D65b9932185Fcc76dB5144534e0f3597628", - DAI: ADDRESSES.optimism.DAI, - uDAI: "0xE478b5e7A423d7CDb224692d0a816CA146A744b2", + underlying: ADDRESSES.optimism.DAI, + uToken: "0xE478b5e7A423d7CDb224692d0a816CA146A744b2", + }, + base: { + userManager: "0xfd745A1e2A220C6aC327EC55d2Cb404CD939f56b", + underlying: ADDRESSES.base.USDC, + uToken: "0xc2447f36FfdA08E278D25D08Ea91D942f0C2d6ea", }, }; @@ -28,19 +32,20 @@ const abi = { }; async function tvl(api) { - const { userManager, DAI, uDAI } = config[api.chain] + const { userManager, underlying, uToken } = config[api.chain] + console.log({ userManager, underlying, uToken }) const bals = await api.batchCall([ { target: userManager, abi: abi.totalStaked }, - { target: uDAI, abi: abi.totalRedeemable }, - { target: uDAI, abi: abi.totalReserves }, + { target: uToken, abi: abi.totalRedeemable }, + { target: uToken, abi: abi.totalReserves }, ]) - bals.forEach(i => api.add(DAI, i)) + bals.forEach(i => api.add(underlying, i)) } async function borrowed(api) { - const { DAI, uDAI } = config[api.chain] - const borrows = await api.call({ target: uDAI, abi: abi.totalBorrows, }) - api.add(DAI, borrows) + const { underlying, uToken } = config[api.chain] + const borrows = await api.call({ target: uToken, abi: abi.totalBorrows, }) + api.add(underlying, borrows) } module.exports = { From 911bc8235866b8f1fcb55f5e9228496d3859eb08 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:18:29 +0100 Subject: [PATCH 1713/1768] update fx #12949 --- projects/fx-Protocol/index.js | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/projects/fx-Protocol/index.js b/projects/fx-Protocol/index.js index 914f8e1235..a3943238dc 100644 --- a/projects/fx-Protocol/index.js +++ b/projects/fx-Protocol/index.js @@ -1,12 +1,12 @@ const ADDRESSES = require('../helper/coreAssets.json') const treasuries = [ - "0x0e5CAA5c889Bdf053c9A76395f62267E653AFbb0", - "0xED803540037B0ae069c93420F89Cd653B6e3Df1f", - "0xcfEEfF214b256063110d3236ea12Db49d2dF2359", - "0x781BA968d5cc0b40EB592D5c8a9a3A4000063885", - "0x38965311507D4E54973F81475a149c09376e241e", - "0x63Fe55B3fe3f74B42840788cFbe6229869590f83", - "0xdFac83173A96b06C5D6176638124d028269cfCd2" + "0x0e5CAA5c889Bdf053c9A76395f62267E653AFbb0", + "0xED803540037B0ae069c93420F89Cd653B6e3Df1f", + "0xcfEEfF214b256063110d3236ea12Db49d2dF2359", + "0x781BA968d5cc0b40EB592D5c8a9a3A4000063885", + "0x38965311507D4E54973F81475a149c09376e241e", + "0x63Fe55B3fe3f74B42840788cFbe6229869590f83", + "0xdFac83173A96b06C5D6176638124d028269cfCd2" ]; const baseTokenRate = [ // '', @@ -21,6 +21,9 @@ const cvxAddress = ADDRESSES.ethereum.CVX; const aCVX = "0xb0903Ab70a7467eE5756074b31ac88aEBb8fB777"; const uniBTC = "0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568"; const uniBTC_Genesis_Gauge = "0x1D20671A21112E85b03B00F94Fd760DE0Bef37Ba" +const fxUSD_stabilityPool = "0x65C9A641afCEB9C0E6034e558A319488FA0FA3be" +const fxUSD_stabilityPool_Gauge = "0xEd92dDe3214c24Ae04F5f96927E3bE8f8DbC3289" + module.exports = { doublecounted: true, ethereum: { @@ -42,14 +45,6 @@ async function getACVXInfo(api) { return totalAssets / totalSupply } -async function getUniBTCTvl(api) { - const totalSupply = await api.api.call( - { - target: uniBTC_Genesis_Gauge, - abi: 'uint256:totalSupply', - }) - return totalSupply -} async function getBaseTokenRate(api) { const rates = await api.multiCall({ abi: 'uint256:getRate', calls: baseTokenRate }) rates.splice(0, 0, 1e18); @@ -63,13 +58,14 @@ async function tvl(api) { const tokens = await api.multiCall({ abi: 'address:baseToken', calls: treasuries }) const bals = await api.multiCall({ abi: 'uint256:totalBaseToken', calls: treasuries }) const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) - const uniBTCTvl = await getUniBTCTvl(api) bals.forEach((bal, i) => { if (tokens[i].toLowerCase() === aCVX.toLowerCase()) { - api.add(cvxAddress, bal/(rates[i]/1e18)*aCvxRate / 10 ** (18 - decimals[i])) + api.add(cvxAddress, bal / (rates[i] / 1e18) * aCvxRate / 10 ** (18 - decimals[i])) } else { - api.add(tokens[i], bal/(rates[i]/1e18) / 10 ** (18 - decimals[i])) + api.add(tokens[i], bal / (rates[i] / 1e18) / 10 ** (18 - decimals[i])) } }) - api.add(uniBTC, uniBTCTvl) + + const tokensAndOwners = [[uniBTC, uniBTC_Genesis_Gauge], [ADDRESSES.ethereum.USDC, fxUSD_stabilityPool]] + return api.sumTokens({ tokensAndOwners }) } \ No newline at end of file From 5984321aaaad1a4d95f204e44aca59f8d47bc617 Mon Sep 17 00:00:00 2001 From: hoomp3 Date: Mon, 6 Jan 2025 06:26:52 -0500 Subject: [PATCH 1714/1768] Add Omega (#12960) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/helper/coreAssets.json | 10 ++++- projects/omega/index.js | 74 +++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 projects/omega/index.js diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index c8ab89f2f6..caf3334767 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1491,7 +1491,13 @@ "WMNT": "0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8", "WETH": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead1111", "USDT": "0x201eba5cc46d216ce6dc03f6a759e8e766e956ae", - "USDC": "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9" + "USDC": "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9", + "cmETH": "0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA", + "mETH": "0xcDA86A272531e8640cD7F1a92c01839911B90bb0", + "FBTC": "0xC96dE26018A54D51c097160568752c4E3BD6C364", + "AUSD": "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a", + "USDe": "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", + "sUSDe": "0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2" }, "linea": { "WETH": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", @@ -2117,4 +2123,4 @@ "crossfi": { "WXFI" : "0xC537D12bd626B135B251cCa43283EFF69eC109c4" } -} +} \ No newline at end of file diff --git a/projects/omega/index.js b/projects/omega/index.js new file mode 100644 index 0000000000..7c44ac0719 --- /dev/null +++ b/projects/omega/index.js @@ -0,0 +1,74 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const CONTRACTS = [ + { + asset: ADDRESSES.mantle.mETH, + lendingPool: "0x68F108F6bDbe14b77f5d042b1b43bb36c60F8580", + collateralManager: "0xb092b9543B2C18D0857C3e81fACAE8c0CC08e079", + }, + { + asset: ADDRESSES.mantle.cmETH, + lendingPool: "0x0819EC86Bf7278547B6962392f49Fa0e88A04b7b", + collateralManager: "0xd2698b234b23966258578e0539a5d5aAb8d49893", + }, + { + asset: ADDRESSES.mantle.WETH, + lendingPool: "0x1B69264CA6E951B14db2Cf330dE2744524A22040", + collateralManager: "0x911A9E6b1C1FA4A8CEc88153c4C841f579899308", + }, + { + asset: ADDRESSES.mantle.WMNT, + lendingPool: "0xA49C0FA50768c4560feD129e90D3734a12711E8A", + collateralManager: "0x5181F0Ed157CA00ab3D899e131D424d456884078", + }, + { + asset: ADDRESSES.mantle.USDT, + lendingPool: "0x5dad97d4973B60870AAe284eF3EC6d74Bffc011D", + collateralManager: "0x709a5B78980b17E7f7C20b59f5a3e4E744e4590f", + }, + { + asset: ADDRESSES.mantle.USDe, + lendingPool: "0xa803861Ae852Cb34A4fD8F1b756C0cE3b29A2928", + collateralManager: "0x382c41175ebC9c906Fb52148AFFD7aFB5158ECcf", + }, + { + asset: ADDRESSES.mantle.AUSD, + lendingPool: "0x55A31051066bA19b765f2B8D49FE68367C2094ef", + collateralManager: "0x99845253B0d208f977f14756Fa5C93B73ca73CA6", + }, + { + asset: ADDRESSES.mantle.sUSDe, + lendingPool: "0x768f82Ca2055A7068FeA33f22b5a3cC8681598Ef", + collateralManager: "0xa7C81aA29409Fd2a4D26b3ea4529a4413dc6a352", + }, + { + asset: ADDRESSES.mantle.FBTC, + lendingPool: "0x72c7d27320e042417506e594697324dB5Fbf334C", + collateralManager: "0x0e27103CD0002ED9694E8865BEfd6e2167132BA9", + }, +]; + +async function tvl(api) { + const lendingPoolTvls = await api.multiCall({ + abi: "uint256:getTotalSupply", + calls: CONTRACTS.map((contract) => contract.lendingPool), + }); + + for (const [index, lendingPoolTvl] of lendingPoolTvls.entries()) { + api.add(CONTRACTS[index].asset, lendingPoolTvl); + } + + await sumTokens2({ + api, + tokensAndOwners: [ + ...CONTRACTS.map((contract) => [contract.asset, contract.collateralManager,]), + ], + }); +} + +module.exports = { + mantle: { + tvl, + }, +}; From 8d61b5ec65327f4a8d5633acd6dfbc4b1a544c77 Mon Sep 17 00:00:00 2001 From: Fuxing Loh <4266087+fuxingloh@users.noreply.github.com> Date: Mon, 6 Jan 2025 19:35:26 +0800 Subject: [PATCH 1715/1768] Add SatLayer Adapter (#12962) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/satlayer/index.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 projects/satlayer/index.js diff --git a/projects/satlayer/index.js b/projects/satlayer/index.js new file mode 100644 index 0000000000..0cfc17c3c9 --- /dev/null +++ b/projects/satlayer/index.js @@ -0,0 +1,26 @@ + + +const { getLogs2 } = require('../helper/cache/getLogs') +const { getUniqueAddresses } = require('../helper/tokenMapping') +const factory = '0x42a856dbEBB97AbC1269EAB32f3bb40C15102819' + +module.exports = { + methodology: 'Total amount of BTC staked and restaked on SatLayer.' +} + +const config = { + ethereum: { factory, fromBlock: 20564864 }, + bsc: { factory, fromBlock: 42094094 }, + btr: { factory: "0x2E3c78576735802eD94e52B7e71830e9E44a9a1C", fromBlock: 4532898 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (api) => { + const logs = await getLogs2({ api, factory, eventAbi: "event CapChanged(address token, uint256 cap)", fromBlock, }) + const tokens = getUniqueAddresses(logs.map(log => log.token)) + return api.sumTokens({ owner: factory, tokens }) + } + } +}) \ No newline at end of file From fdd8747371251f7f94fe4c08919b3d589f862430 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:56:39 +0100 Subject: [PATCH 1716/1768] Add dLEND and dTrinity adapters with updated methodologies (#12985) Co-authored-by: fromstupig Co-authored-by: 0xstupig <42228347+0xstupig@users.noreply.github.com> --- projects/dtrinity-dlend/index.js | 6 ++++++ projects/dtrinity/index.js | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 projects/dtrinity-dlend/index.js create mode 100644 projects/dtrinity/index.js diff --git a/projects/dtrinity-dlend/index.js b/projects/dtrinity-dlend/index.js new file mode 100644 index 0000000000..ca0cc26075 --- /dev/null +++ b/projects/dtrinity-dlend/index.js @@ -0,0 +1,6 @@ +const { aaveExports, methodology } = require('../helper/aave') + +module.exports = { + fraxtal: aaveExports(null, undefined, undefined, ['0xFB3adf4c845fD6352D24F3F0981eb7954401829c'], { v3: true, blacklistedTokens: ['0x788D96f655735f52c676A133f4dFC53cEC614d4A'] }), + methodology, +} diff --git a/projects/dtrinity/index.js b/projects/dtrinity/index.js new file mode 100644 index 0000000000..f8ebd1ff88 --- /dev/null +++ b/projects/dtrinity/index.js @@ -0,0 +1,26 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const dUSDCollateralVault = "0x624E12dE7a97B8cFc1AD1F050a1c9263b1f4FeBC" + +async function getAMOTvl(api) { + const fraxDUSDCurveLP = '0x9CA648D2f51098941688Db9a0beb1DadC2D1B357' + const fraxDUSDCurveLPBal = await api.call({ abi: 'erc20:balanceOf', target: fraxDUSDCurveLP, params: '0x0B0BD5F8A6f4c72a09748fA915Af12Ca423B7240' }) + const fraxDUSDCurveLPFraxBal = await api.call({ abi: 'erc20:balanceOf', params: fraxDUSDCurveLP, target: ADDRESSES.fraxtal.FRAX }) + const fraxDUSDCurveLPSupply = await api.call({ abi: 'erc20:totalSupply', target: fraxDUSDCurveLP, }) + const fraxBal = fraxDUSDCurveLPFraxBal * fraxDUSDCurveLPBal / fraxDUSDCurveLPSupply + api.add(ADDRESSES.fraxtal.FRAX, fraxBal) +} + +const tvl = async (api) => { + await getAMOTvl(api) + + const tokens = await api.call({ abi: 'address[]:listCollateral', target: dUSDCollateralVault }) + return api.sumTokens({ owner: dUSDCollateralVault, tokens }) +} + +module.exports = { + methodology: 'Includes TVL for dLEND and TVL for dUSD.', + fraxtal: { + tvl, + } +}; \ No newline at end of file From 67f02761a597b28e5afb69ab0d2476563980ffc4 Mon Sep 17 00:00:00 2001 From: astroKo <58788656+astroKo@users.noreply.github.com> Date: Mon, 6 Jan 2025 20:19:32 +0000 Subject: [PATCH 1717/1768] yel-finance: add sonic potions tvl (#12987) --- projects/yel/index.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/projects/yel/index.js b/projects/yel/index.js index 0087bc801a..2fc07724cb 100644 --- a/projects/yel/index.js +++ b/projects/yel/index.js @@ -1,4 +1,4 @@ -const { sumUnknownTokens, getTokenPrices } = require('../helper/unknownTokens') +const { sumUnknownTokens } = require('../helper/unknownTokens') const { sumTokens2 } = require('../helper/unwrapLPs') const { normalizeAddress, @@ -41,6 +41,21 @@ const config = { [ADDRESSES.base.USDC, '0xE7349C94BDE0D13599Ed496342857bb231FeF02B', '0xabb4D7866e1059bD21581FC5FC6D49388D30a323'], ['0x1509706a6c66CA549ff0cB464de88231DDBe213B', '0x8a27CE3A836C8A9D962D86C099f229f3baF3EB4a', '0xFfeC8bAAa8cf32Bc7F85ea6a7C44Ad541309FD1F'] ], + }, + sonic: { + ownTokensAndOwners: [ + // Token Potion(lToken) slToken + ['0x949185D3BE66775Ea648F4a306740EA9eFF9C567', '0x6E074300A7Bf53af6e20f1f07dDDfeedAE5598A8', '0x64E869D31aE8A567059872f597A8529CBd88DC98'] + ], + tokensAndOwners: [ + // Token Potion(lToken) slToken + [ADDRESSES.sonic.wS, '0x7Ba0abb5f6bDCbf6409BB2803CdF801215424490', '0x24419689ac4A2D3Dafa07623129545f9b2156405'], + [ADDRESSES.sonic['USDC.e'], '0x995171196618b7FE0F0C6D606D79583DD1c8ff60', '0x5573aDB63D3eb7473C68Fdb2033CCbAc51a0Be0a'], + + ['0x79bbF4508B1391af3A0F4B30bb5FC4aa9ab0E07C', '0x92Dd17b19F74E696502Ee9eD478901F24c5d9a9A', '0x153ea9DF2B7977A8670a6EdF10b814d229D8d9Ef'], + ['0x0e0Ce4D450c705F8a0B6Dd9d5123e3df2787D16B', '0xecf1b589F47511D23b026eF53D16FEbB89Aa5f3A', '0x590159e00c05E4C91f562Fe862cc90d75af5d28b'] + + ], } } @@ -65,7 +80,7 @@ async function tvl( api, coveredAssets){ ] }) - let potionSupply = Number( + let potionSupply = Number( await api.call({ abi : 'erc20:totalSupply', target : potion, @@ -81,7 +96,7 @@ async function tvl( api, coveredAssets){ api.add(originalToken, totalTokenBalance) } -} +} Object.keys(config).forEach(chain => { const { farms = [], lps = [], ownTokens = [], ownTokensAndOwners, tokensAndOwners, } = config[chain] @@ -119,4 +134,4 @@ Object.keys(config).forEach(chain => { } }, } -}) \ No newline at end of file +}) From 5c67264c83a747726e43497f66e3b2d968e33ae3 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 6 Jan 2025 21:58:30 +0100 Subject: [PATCH 1718/1768] Fix: Graphene (#12979) --- projects/graphene/index.js | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/projects/graphene/index.js b/projects/graphene/index.js index a48c01035d..80359a8a1d 100644 --- a/projects/graphene/index.js +++ b/projects/graphene/index.js @@ -1,7 +1,6 @@ -const { getLogs } = require("../helper/cache/getLogs"); const { sumTokens2 } = require("../helper/unwrapLPs"); -const config = { +const CONFIG = { base: { fromBlock: 5314581, controller: "0xfbF069Dbbf453C1ab23042083CFa980B3a672BbA", @@ -20,22 +19,16 @@ const config = { }, }; -Object.keys(config).forEach((chain) => { - const { controller, fromBlock } = config[chain]; - module.exports[chain] = { - tvl: async (api) => { - const logs = await getLogs({ - api, - target: controller, - topic: "PairCreated(uint128,address,address)", - eventAbi: - "event PairCreated(uint128 indexed pairId, address indexed token0, address indexed token1)", - onlyArgs: true, - fromBlock, - }); - const tokens = logs.map((i) => [i.token0, i.token1]).flat(); +const abi = { + pairs: "function pairs() view returns (address[2][])" +} - return sumTokens2({ api, owner: controller, tokens }); - }, - }; -}); +const tvl = async (api) => { + const { controller } = CONFIG[api.chain] + const tokens = (await api.call({ target: controller, abi: abi.pairs })).flat() + return sumTokens2({ api, owner: controller, tokens }) +} + +Object.keys(CONFIG).forEach((chain) => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From 63473a07a4651c866beeaf59171f72c3b6149f00 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:10:46 +0100 Subject: [PATCH 1719/1768] track https://primestaking.xyz/ #12989 --- projects/primestaking-xyz/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/primestaking-xyz/index.js diff --git a/projects/primestaking-xyz/index.js b/projects/primestaking-xyz/index.js new file mode 100644 index 0000000000..5511d341e5 --- /dev/null +++ b/projects/primestaking-xyz/index.js @@ -0,0 +1,10 @@ +const xdcStakeRewardTokenAddress = '0x7f115F68A789F819047b94EFA0114AA9829b83d8' + +const tvl = async (api) => { + const totalSupply = await api.call({ abi: 'erc20:totalSupply', target: xdcStakeRewardTokenAddress, }) + api.addGasToken(totalSupply) +} + +module.exports = { + xdc: { tvl } +} \ No newline at end of file From ef46618e7dcc95f55c620935120ed0adda566d16 Mon Sep 17 00:00:00 2001 From: krishnafractol <137801527+krishnafractol@users.noreply.github.com> Date: Tue, 7 Jan 2025 03:00:17 +0530 Subject: [PATCH 1720/1768] Defi Listing - Upshift Updated Vault Addresses (#12980) Co-authored-by: krishna7860 --- projects/upshift/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/upshift/index.js b/projects/upshift/index.js index 982cb10fab..8bec8eecc5 100644 --- a/projects/upshift/index.js +++ b/projects/upshift/index.js @@ -1,6 +1,6 @@ const { sumERC4626VaultsExport } = require('../helper/erc4626') const config = { - ethereum: ["0xB7858b66dFA38b9Cb74d00421316116A7851c273", "0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42", "0x18a5a3D575F34e5eBa92ac99B0976dBe26f9F869", "0xEBac5e50003d4B17Be422ff9775043cD61002f7f", "0xd684AF965b1c17D628ee0d77cae94259c41260F4"], + ethereum: ["0xB7858b66dFA38b9Cb74d00421316116A7851c273", "0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42", "0x18a5a3D575F34e5eBa92ac99B0976dBe26f9F869", "0xEBac5e50003d4B17Be422ff9775043cD61002f7f", "0xd684AF965b1c17D628ee0d77cae94259c41260F4", "0x5Fde59415625401278c4d41C6beFCe3790eb357f"], avax: ["0x3408b22d8895753C9A3e14e4222E981d4E9A599E"], base: ["0x4e2D90f0307A93b54ACA31dc606F93FE6b9132d2"] } From 7d6d76d6efc39d89ed923522003393781c757157 Mon Sep 17 00:00:00 2001 From: InkySwap Date: Mon, 6 Jan 2025 21:32:07 +0000 Subject: [PATCH 1721/1768] feat: add inkyswap uni v2 tvl adapter (#12988) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/inkyswap/index.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 projects/inkyswap/index.js diff --git a/projects/inkyswap/index.js b/projects/inkyswap/index.js new file mode 100644 index 0000000000..6f52f46f15 --- /dev/null +++ b/projects/inkyswap/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + ink: '0x458C5d5B75ccBA22651D2C5b61cB1EA1e0b0f95D' +}) \ No newline at end of file From 9d5857be5392637454f397df6666c86a36a399ac Mon Sep 17 00:00:00 2001 From: tstemko <57684389+tstemko@users.noreply.github.com> Date: Mon, 6 Jan 2025 16:32:26 -0500 Subject: [PATCH 1722/1768] Add PCS and Uni v3 on Base and Ubeswap on Celo to tvl calc (#12986) Co-authored-by: Tatyana Stemkovski --- projects/ichifarm/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index 93e6d65a02..4317e4b75a 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -49,6 +49,8 @@ const config = { base: { vaultConfigs: [ { factory: '0xfBf38920cCbCFF7268Ad714ae5F9Fad6dF607065', fromBlock: 10607512, isAlgebra: false, }, // Equalizer + { factory: '0x24430E837efB64EF87bb32be03437fc6005EEF74', fromBlock: 22095330, isAlgebra: false, }, // PancakeSwap + { factory: '0xaBe5B5AC472Ead17B4B4CaC7fAF42430748ab3b3', fromBlock: 12978552, isAlgebra: false, }, // Uniswap ] }, blast: { @@ -67,6 +69,7 @@ const config = { celo: { vaultConfigs: [ { factory: '0x9FAb4bdD4E05f5C023CCC85D2071b49791D7418F', fromBlock: 24256269, isAlgebra: false, }, // Uniswap v3 + { factory: '0x8D05f6870106707BaeCFCf5C0570DB7a583eb92A', fromBlock: 27821113, isAlgebra: false, }, // Ubeswap ] }, eon: { From c17762e0b5bb70310e0139b223eaf9ff40c6a40c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:58:25 +0100 Subject: [PATCH 1723/1768] fix solfarm #12978 --- package-lock.json | 6 +++--- projects/solfarm.js | 10 ++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e105101bb5..794800f1dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1009,9 +1009,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.109", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.109.tgz", - "integrity": "sha512-FRooEEJImkjp6gi0Kn9OH9aXxn7vXlm4fIU5Oi9z1AB8ZZbsfzjElonweenxkJu6lLzMenH/7Z4bTZAZVN3Lkw==", + "version": "5.0.110", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.110.tgz", + "integrity": "sha512-qqU+NcxoPVKQ0hWqsLFxMsAma/RsOxE1Hga/h8jjIqQjSipShkwJ1rU8niwJKxHm3/ZDVT70fIFmSJit80lJZg==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", diff --git a/projects/solfarm.js b/projects/solfarm.js index 687f1e8d1c..50bf77972e 100644 --- a/projects/solfarm.js +++ b/projects/solfarm.js @@ -1,9 +1,7 @@ -const { get } = require('./helper/http') +const { sumTokens2 } = require('./helper/solana') -async function fetch() { - var response = await get('https://api.tulip.garden/tvl') - - return response.total; +async function tvl() { + return sumTokens2({ owner: '8gEGZbUfVE1poBq71VHKX9LU7ca4x8wTUyZgcbyQe51s'}) } module.exports = { @@ -11,5 +9,5 @@ module.exports = { [1667865600, "FTX collapse"] ], timetravel: false, - fetch + solana: { tvl } } From 40c7fe5684ba0623d0de4dce294803481e66e71e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Jan 2025 09:12:33 +0100 Subject: [PATCH 1724/1768] track https://v2.monstro.fun --- projects/monstro-fun/index.js | 26 ++++++++++++++++++++++++++ projects/treasury/monstro-fun.js | 21 +++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 projects/monstro-fun/index.js create mode 100644 projects/treasury/monstro-fun.js diff --git a/projects/monstro-fun/index.js b/projects/monstro-fun/index.js new file mode 100644 index 0000000000..3a3a2b77a5 --- /dev/null +++ b/projects/monstro-fun/index.js @@ -0,0 +1,26 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const BASE_CONTRACT = '0x813303b6F253C74D997020518227f87Ff721F53F'; +// 0xdbe214c863d6b2ecf5d79012e5d03aab09c57e28 +const ABI_GOLEMZ = "function golemzLatestStats() view returns (uint256 totalInvested, uint256 currentTVL, uint256 insurance, uint256 totalPaidOut)"; // 0x07f2a4b640d0c780d52d476ac2b674d8a22bc1b1 +const ABI_POOLZ = "function poolzLatestStats() view returns (uint256 totalInvested, uint256 currentTVL, uint256 insurance, uint256 totalPaidOut)"; // 0x4d0eb0e7e851787065f694b2e12e75bfa97be08e + +async function getInvestedValue(api, contractAddress, abi) { + const response = await api.call({ target: contractAddress, abi, }); + + return api.add(ADDRESSES.base.USDC, response.totalInvested) +} + +async function tvl(api) { + await getInvestedValue(api, BASE_CONTRACT, ABI_GOLEMZ); + await getInvestedValue(api, BASE_CONTRACT, ABI_POOLZ); +} + +module.exports = { + methodology: 'Sums the total invested value from farmz, golemz, and poolz contracts based on their respective latestStats functions.', + hallmarks: [[1734804000, "BSC->Base ecosystem migration"]], + misrepresentedTokens: true, + base: { + tvl, + }, +}; \ No newline at end of file diff --git a/projects/treasury/monstro-fun.js b/projects/treasury/monstro-fun.js new file mode 100644 index 0000000000..2f36a918f9 --- /dev/null +++ b/projects/treasury/monstro-fun.js @@ -0,0 +1,21 @@ +const BASE_CONTRACT = '0x813303b6F253C74D997020518227f87Ff721F53F'; +const ABI_FARMZ = "function farmzLatestStats() view returns (uint256 totalInvested, uint256 currentTVL, uint256 insurance, uint256 totalPaidOut)" +// 0xdbe214c863d6b2ecf5d79012e5d03aab09c57e28 +const ADDRESSES = require('../helper/coreAssets.json') + +async function getInvestedValue(api, contractAddress, abi) { + const response = await api.call({ target: contractAddress, abi, }); + + return api.add(ADDRESSES.base.USDC, response.totalInvested) +} + +async function tvl(api) { + await getInvestedValue(api, BASE_CONTRACT, ABI_FARMZ); +} + +module.exports = { + misrepresentedTokens: true, + base: { + tvl, + }, +}; \ No newline at end of file From 689e2edecf4fa765d2897f4b60e5b7c542548665 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:14:14 +0100 Subject: [PATCH 1725/1768] Goldstation (#12998) Co-authored-by: Booyoun Co-authored-by: jaejeonglee --- projects/goldstation-dex-v3/index.js | 6 ++++++ projects/goldstation-dex/index.js | 16 ++------------- projects/goldstation-rwa/index.js | 29 +++++++++++++--------------- 3 files changed, 21 insertions(+), 30 deletions(-) create mode 100644 projects/goldstation-dex-v3/index.js diff --git a/projects/goldstation-dex-v3/index.js b/projects/goldstation-dex-v3/index.js new file mode 100644 index 0000000000..849813e57b --- /dev/null +++ b/projects/goldstation-dex-v3/index.js @@ -0,0 +1,6 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + + +module.exports = uniV3Export({ + avax: { factory: "0xF72f4652785a5186EDF7b93a9cfd246FeFc0ef5c", fromBlock: 52760680, }, +}) diff --git a/projects/goldstation-dex/index.js b/projects/goldstation-dex/index.js index 4540d2a5aa..5b00a45bf4 100644 --- a/projects/goldstation-dex/index.js +++ b/projects/goldstation-dex/index.js @@ -1,23 +1,11 @@ -const { getUniTVL } = require('../helper/unknownTokens'); +const { getUniTVL } = require('../helper/unknownTokens') const { sumTokensExport } = require('../helper/unwrapLPs'); -const { uniV3Export } = require("../helper/uniswapV3"); module.exports = { - misrepresentedTokens: true, klaytn: { - tvl: getUniTVL({ factory: '0x347E5ce6764DF9DF85487BEA523D3e242762aE88', useDefaultCoreAssets: true }), + tvl: getUniTVL({ factory: '0x347E5ce6764DF9DF85487BEA523D3e242762aE88', useDefaultCoreAssets: false }), staking: sumTokensExport({ tokensAndOwners: [ ['0x4836cc1f355bb2a61c210eaa0cd3f729160cd95e', '0x4d55B04AC52b2CA41ad04337FF13CbAefbdC8954'], ]}) }, - avax: { - tvl: uniV3Export({ - avax: { - factory: "0xF72f4652785a5186EDF7b93a9cfd246FeFc0ef5c", - fromBlock: 52760680, - isAlgebra: false, - }, - }), - }, } - diff --git a/projects/goldstation-rwa/index.js b/projects/goldstation-rwa/index.js index 9bdf133e74..c909ffcc89 100644 --- a/projects/goldstation-rwa/index.js +++ b/projects/goldstation-rwa/index.js @@ -1,25 +1,22 @@ -const { sumUnknownTokens } = require('../helper/unknownTokens'); +const KAIA_GPC = '0x27397bfbefd58a437f2636f80a8e70cfc363d4ff'; +const AVALANCHE_GPC = '0x1b27D7A06DeEa4d5CB4fd60c164153C90f64281D'; -const GPC = '0x27397bfbefd58a437f2636f80a8e70cfc363d4ff'; - -async function tvl(api) { - const supply = await api.call({ abi: 'erc20:totalSupply', target: GPC }) - api.add(GPC, supply) +async function kaiaGpcTotalSupply(api) { + const supply = await api.call({ abi: 'erc20:totalSupply', target: KAIA_GPC }) + api.add(KAIA_GPC, supply) +} - const lps = [ - '0xCd13CD31fb61345Abe7B7376A4664784622817EE', - '0xF1294AA9CF51fB138CB30324D2A7CE5c53DD6876', - '0xD8219DeE0BEf8f8CE618572A572f87ea27Ac8285', - '0xB5E70F160077163A2D90F4828Ef2EfF7e5F57915', - '0xf2426f8b8cb0352fd03319300b6d4d6837915d45' - ] - return sumUnknownTokens({ api, lps, useDefaultCoreAssets: true }) +async function avalancheTotalSupply(api) { + const supply = await api.call({ abi: 'erc20:totalSupply', target: AVALANCHE_GPC }) + api.add(AVALANCHE_GPC, supply) } module.exports = { - misrepresentedTokens: true, klaytn: { - tvl, + tvl:kaiaGpcTotalSupply, + }, + avax: { + tvl: avalancheTotalSupply, } } From 2b65f69fb04dcc6e1043e69a1d6db7f240087cb1 Mon Sep 17 00:00:00 2001 From: stanli1231 Date: Tue, 7 Jan 2025 17:18:23 +0800 Subject: [PATCH 1726/1768] update: add missing eth proxy (#12994) --- projects/latch/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/latch/index.js b/projects/latch/index.js index 8ec0d728c6..2aab05309f 100644 --- a/projects/latch/index.js +++ b/projects/latch/index.js @@ -8,6 +8,7 @@ const tvl = async (api) => { const proxies = [ '0xa116b4680b52973426B6D2a92DcC972b8DbcB46F', + '0x97cA296139f114BF3040Cf05D05c240B770c627E' ] const tokens = await api.multiCall({ abi: 'address:ASSET_TOKEN', calls: depositPools }) From 4c8dc9a4c3c36ec06e3e594814675affb01658c0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:39:27 +0100 Subject: [PATCH 1727/1768] track neptune #12991 --- projects/neptune/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 projects/neptune/index.js diff --git a/projects/neptune/index.js b/projects/neptune/index.js new file mode 100644 index 0000000000..f9e3911486 --- /dev/null +++ b/projects/neptune/index.js @@ -0,0 +1,20 @@ +const { getUniTVL } = require('../helper/unknownTokens.js') +const config = { + swellchain: { + factory: '0xD78a40cA54090f4178c9c9212c78e9E0C2722231', + }, +} + +Object.keys(config).forEach(chain => { + const { factory, } = config[chain] + module.exports[chain] = { + tvl: getUniTVL({ + factory, useDefaultCoreAssets: true, fetchBalances: true, abis: { + allPairsLength: 'uint256:allPoolsLength', + allPairs: "function allPools(uint) view returns (address)", + } + }) + } +}) + +module.exports.misrepresentedTokens = true \ No newline at end of file From e8819d280c3edebbe87242ca2b487d5effbc3f3f Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:42:20 +0000 Subject: [PATCH 1728/1768] umoja btc (#13001) --- projects/umoja-ybtc/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/umoja-ybtc/index.js diff --git a/projects/umoja-ybtc/index.js b/projects/umoja-ybtc/index.js new file mode 100644 index 0000000000..63c4d30eb9 --- /dev/null +++ b/projects/umoja-ybtc/index.js @@ -0,0 +1,11 @@ +const yBTC = "0xba3e932310cd1dbf5bd13079bd3d6bae4570886f" + +//BASIS TRADING, BTC COLLECTOR WALLET IS bc1qmus43e5gascs00t7jsf02k7gllhc5antew6n5y +module.exports = { + arbitrum: { + tvl: async (api) => { + const supply = await api.call({ abi: 'erc20:totalSupply', target: yBTC }) + api.add(yBTC, supply) + }, + } +} \ No newline at end of file From f5d667b94c6e83413677bf6ebb753c745574830c Mon Sep 17 00:00:00 2001 From: thomas-cloud579 <81407403+thomas-cloud579@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:31:10 +0800 Subject: [PATCH 1729/1768] update:gateio chains&addresses (#12993) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Co-authored-by: Booyoun Co-authored-by: jaejeonglee Co-authored-by: stanli1231 --- projects/gate-io/index.js | 1629 ++++++++++++++++++++++- projects/helper/bitcoin-book/gate-io.js | 4 +- projects/helper/chain/acala.js | 30 + projects/helper/chain/aelf.js | 22 + projects/helper/chain/aeternity.js | 28 + projects/helper/chain/alephium.js | 12 + projects/helper/chain/astar.js | 30 + projects/helper/chain/bifrost.js | 30 + projects/helper/chain/bittensor.js | 39 + projects/helper/chain/cosmos.js | 7 +- projects/helper/sumTokens.js | 30 +- projects/helper/tokenMapping.js | 17 +- 12 files changed, 1805 insertions(+), 73 deletions(-) create mode 100644 projects/helper/chain/acala.js create mode 100644 projects/helper/chain/aelf.js create mode 100644 projects/helper/chain/aeternity.js create mode 100644 projects/helper/chain/astar.js create mode 100644 projects/helper/chain/bifrost.js create mode 100644 projects/helper/chain/bittensor.js diff --git a/projects/gate-io/index.js b/projects/gate-io/index.js index 4499b8885c..528f2cfd69 100644 --- a/projects/gate-io/index.js +++ b/projects/gate-io/index.js @@ -1,13 +1,13 @@ const { cexExports } = require("../helper/cex"); const bitcoinAddressBook = require("../helper/bitcoin-book/index.js"); + const config = { - ethereum: { - owners: [ + "ethereum": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0x234ee9e35f8e9749a002fc42970d570db716453b", - //'0x925206b8a707096Ed26ae47C84747fE0bb734F59', //this should never be here, its the WBT token wallet "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", @@ -15,156 +15,1653 @@ const config = { "0x35b31ae2604dd81d9456205025ea02418dba8242", "0xd87C8e083AECc5405B0107c90D8E0C7F70996B84", "0x60618B3c6E3164c4a72d352Bde263A5D15f9F7eE", - ], + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1f92332145465f3e536b7be301dde8d420478387", + "0x2bea9375c50f41f828c4e8eb0da3194449b5f062", + "0x54c82d26624e85000d1387ee7c9580c3c6d7b5b7", + "0x0fc73ffb9a0ded685234428e103d26b3762df460", + "0x7750fe679d47a9e00575ad46043297a234e83fa2", + "0xa2df23519a6059dbc6f027f6cf8e59bdaecaf56f", + "0x4bbe1961bd0a6cd1fe3cd8947be15bd8ae2ee562", + "0xd793281182a0e3e023116004778f45c29fc14f19", + "0x354e0184a6a6e634ccb07388e2617e05e427563c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - avax: { - owners: [ + "avax": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", - ], + ] }, - arbitrum: { - owners: [ + "arbitrum": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", - ], + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - polygon: { - owners: [ + "polygon": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", - ], + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x54c82d26624e85000d1387ee7c9580c3c6d7b5b7", + "0x1f92332145465f3e536b7be301dde8d420478387", + "0x7750fe679d47a9e00575ad46043297a234e83fa2", + "0x0fc73ffb9a0ded685234428e103d26b3762df460", + "0xa2df23519a6059dbc6f027f6cf8e59bdaecaf56f", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - fantom: { - owners: [ + "fantom": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", - ], + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - bsc: { - owners: [ + "bsc": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", - ], + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - optimism: { - owners: [ + "optimism": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", - ], + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - era: { - owners: [ + "era": { + "owners": [ "0x0d0707963952f2fba59dd06f2b425ace40b492fe", "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", "0x234ee9e35f8e9749a002fc42970d570db716453b", - // '0x925206b8a707096Ed26ae47C84747fE0bb734F59', "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", "0x85FAa6C1F2450b9caEA300838981C2e6E120C35c", - "0xeb01f8cdae433e7b55023ff0b2da44c4c712dce2", - ], + "0xeb01f8cdae433e7b55023ff0b2da44c4c712dce2" + ] }, bitcoin: { owners: bitcoinAddressBook.gateIo, }, - tron: { - owners: [ + "tron": { + "owners": [ "TBA6CypYJizwA9XdC7Ubgc5F1bxrQ7SqPt", "TCYpJ6MMzd9ytoUvD82HnS58iV75QimPh6", "TDHkXgDHEiK5WhaKTccJenZKRyUMTxoREx", "TN1K2zNVA399AHbp51yyPPfjaD9JNLfQpo", "TUt2HuZFZvXAMmF9uh7BqujvMXsZ4F1pif", - ], + "TCr9697xxWMbZznvpJh8uVQzAQR9cLXZm9", + "TDyR4wBeodpigiKmnwyBQC8UfsCH1T25XF", + "THhVZfr2Q4J3spWK84Je4ALiFyrnnSq6nN", + "TZJNuEg5VaYLR9kdQfjj7WE6jh4vt9JMp2" + ] }, - cardano: { - owners: [ + "cardano": { + "owners": [ "DdzFFzCqrhseMuShaXzLDGDBa8jGEjdEjNc83jouqdqBQzk5R52MedutUq3QGdMPiauR5SjbttqdBjDA5g6rf3H6LjpvK3dFsf8yZ6qo", "DdzFFzCqrhtBatWqyFge4w6M6VLgNUwRHiXTAg3xfQCUdTcjJxSrPHVZJBsQprUEc5pRhgMWQaGciTssoZVwrSKmG1fneZ1AeCtLgs5Y", - ], + "addr1qyzppj9mh28q9d7x070j7aphnn6dx5lsh203zukzs7q68jqf08fcmxg8h9tvx8m529hjjnm9g3pt8vlkh95em7nup32sm78295", + "addr1q9lqxlvk2dk8sffhr56gc4c4lckpv56l4r7wwh474caywurve9ssnt966vmezsfsppfm5sxgu5sqxacp8t7kpjzp9yxqn24ckj" + ] }, - solana: { - owners: [ + "solana": { + "owners": [ "u6PJ8DtQuPFnfmwHbGFULQ4u4EgjDiyYKjVEsynXq2w", "HiRpdAZifEsZGdzQ5Xo5wcnaH3D2Jj9SoNsUzcYNK78J", "CLNEVwuSAiGsvPtE74yLhda4beNfd8qfZXVKkUcAJZDL", "CVMV7614DjSjY114GwHhG1HNFXofceziDpuGz7VjDD5K", "G9XFfWz6adb9wFDKN2v7HfmJDgAc2hirrTwBmca4w26C", - ], + "E2tbmDk29G6jHdrgwHC6kXGFfDsyrXUyWjD3e3ZB4oNp", + "EnYo9PZuYwhJNi2hnk5AgsJaoNegscFF5CJkSPx1f7td", + "HMbkbJVNitT3t4EtaDJeUtwfTFGYcjU6vhE7h7dqxDzJ" + ] }, - ripple: { - owners: [ + "ripple": { + "owners": [ "rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d", "rLzxZuZuAHM7k3FzfmhGkXVwScM4QSxoY7", "rNnWmrc1EtNRe5SEQEs9pFibcjhpvAiVKF", "rNu9U5sSouNoFunHp9e9trsLV6pvsSf54z", - ], + "rhnS6iYGnrmh8NEgEKq3sBgF4FMLD9dHGf" + ] }, - starknet: { - owners: [ + "starknet": { + "owners": [ "0x00e91830f84747f37692127b20d4e4f9b96482b1007592fee1d7c0136ee60e6d", - ], + "0x016dd5370bfa06e862508e8b81b8f676327b55404231bfb5b34c1df10ddd8963" + ] }, - algorand: { - owners: [ + "algorand": { + "owners": [ "BVMEUTF37WNEQ6GYCZISRFHGLEMOKT5OCPPTTJXVED6JBSXKF6YJJRZRI4", "7BL55CRKRASIQI263JQ5H5A4JJQFSHL7RWXMCKM6YDZAIJVEZQ76SXF2S4", - ], + // "YGR5VO4VWBTWPWZKXBPNBPUGCM5BLP7DVAH2AF6LXAZBM5QKQGAXY5IXII" // getting account not found error + ] }, - base: { - owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + "base": { + "owners": [ + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x1f92332145465f3e536b7be301dde8d420478387", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - litecoin: { - owners: [ + "litecoin": { + "owners": [ "LaH52f9sspcacPMf2Z7mU5tkhKcWJxvAgA", "LYyhXjiwi7qcrf1QVwdPpFSptwRZ8L8PuW", "Lc3BUJTitygdVPCyiBTwA2HephzBKnHPaH", "LNyjBuigbWcHYQYbVKxk15u3Ux23QvEnS9", "LQFZFmkrmxuyL5TCjuVxngM4wRFdM2a9EW", "MQ4wXRL6etqkEPrLm4f1FKu2eXTM7EMgXo", - ], + "LZZH8R24wpRVN9g2qM9Rh2BmfcTvThDtpE" + ] }, - manta: { - owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + "manta": { + "owners": [ + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - mantle: { - owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + "mantle": { + "owners": [ + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - polkadot: { - owners: [ + "polkadot": { + "owners": [ "1JVrK16XZm9vyZjHoYVPjtZ35LvTQ4oyufMoUFTFpAUhath", "16ccyj8JqnP8d2DSaifgek6kSSBAu5cGtd4mu2uXTg4H6mSU", "14ooXLY2gmiUTVym9SnKxNwEgcoikXzMEav2kiLjr7pPPHPR", "1665ypcQXKmqXtjE9yuWsZqK5MQmBQokFjPGLq5SvoKAWBjQ", - ], + "123tA7zfH9XdqHX5v9W4mB4VfmrjE95yJvdvMbpWv5V851rX", + "15NtvAi8CGHrbaUBvXdki8GXc5YfHM9yTv6HGmaYDetLH2ob", + "15dZTKqG6YZiQNiisMZP1DT4J6J9bmEEC4Bkz24nMC1ccRe2" + ] }, - scroll: { - owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + "scroll": { + "owners": [ + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] }, - sei: { - owners: ["sei1xunyznpjmj9jv5e2zwngp2qrzmulr2gg45sg0h"], + "sei": { + "owners": [ + "sei1xunyznpjmj9jv5e2zwngp2qrzmulr2gg45sg0h", + "sei155svs6sgxe55rnvs6ghprtqu0mh69kehwl7mxz", + "sei1jm068whkhkxk48gx80ppm2m0nwy677prmjk402", + "sei1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9vsqw3v" + ] }, - stacks: { - owners: [ + "stacks": { + "owners": [ "SP33XEHK2SXXH625VG6W6665WBBPX1ENQVKNEYCYY", "SP15R31KXD5C0N9ESSG7B28M3DP6ZQE2GSED759B3", - ], + "SP3RWVFCERVDYEE1F9630H13P0Q0GEAGDC9MW9BJ0" + ] + }, + "taiko": { + "owners": [ + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "acala": { + "owners": [ + "21B6SER8NUWRVZcNM8LjAkYoVvms1EN1sKCfxJgTtN7MWpWm", + "26VDZeYLgh8QBcG5e3TvRkkzuHc7SuuUn2c63sLY6E19vDaU", + "24gQ7Fx4XgTk262QCmaZjPbV9UEfJNHZ7zTLuYmkUfmGCMwH", + "25FVW68A3B38AAWpyrRzV8vn4vybqBTBMKdbRc1YrCqD64b7" + ] + }, + "aelf": { + "owners": [ + "2ZwykiMYYMPx7NUodb4Z9VRzYqLrrxEpPcVuNKwT3kSQaSerQW", + "21Te3eubq6Yc7kv2FzVUvBLiyQnTZVe7nXodvexsKSZYBeoYuR", + "MTCNynuhCFJsFAwExEsXWe6tnydfnyv7WqA1SxVfsE9DT3YiG" + ] + }, + "aeternity": { + "owners": [ + "ak_6sssiKcg7AywyJkfSdHz52RbDUq5cZe4V4hcvghXnrPz4H4Qg", + "ak_2tNbVhpU6Bo3xGBJYATnqc62uXjR8yBv9e63TeYCpa6ASgEz94", + "ak_2UHGyGVYKx8L7EgPw88x3Dm2CK9WerYSTVWDf6RLuNEUxKu6q8" + ] + }, + "agoric": { + "owners": [ + "agoric155svs6sgxe55rnvs6ghprtqu0mh69keh3wdjs4", + "agoric1jm068whkhkxk48gx80ppm2m0nwy677pryr9uea", + "agoric1xunyznpjmj9jv5e2zwngp2qrzmulr2gg29rpeq", + "agoric1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9npn88m" + ] + }, + "ailayer": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "airdao": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "alephium": { + "owners": [ + "17R6Ptkz9i1LhiKyMhnitUMkgFygGeeQUFZvRx6GgV8Fc", + "13fKFYVSosvQZKhPP8izubADEn6q9a4np3uqw3YWjA6Hk", + "133kTjVSJA9VDrybSVCWahbQ5BQ5WevtLmHoGKp83dGPT" + ] + }, + "apechain": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "aptos": { + "owners": [ + "0x0cf869189c785beaaad2f5c636ced4805aeae9cbf49070dc93aed2f16b99012a", + // address not found + // "0x8b88f330e9ee14c6571d6707c48858bdd126d715c5df145eee58f4f4f6217898", + // "0x107ffec1dd5c5faa26dbff442253ae9fc2cb026e3e9b55a6613c10cc90904a40" + ] + }, + "arbitrum_nova": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "archway": { + "owners": [ + "archway155svs6sgxe55rnvs6ghprtqu0mh69kehkcnf25", + "archway1jm068whkhkxk48gx80ppm2m0nwy677prr4m8ru", + "archway1xunyznpjmj9jv5e2zwngp2qrzmulr2ggdna6rp", + "archway1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn95hdua6" + ] + }, + "astar": { + "owners": [ + "WEo9Gi7T28niGb3pTwcHFDgGW4PjKDQvcS1stTxa68v73nQ", + "bYvGgqKmEkmQKEm7P4oYFRsfrteAzksqKqRyT82mx2iWSZt", + "Zk6pJF3cE67Eo15g7BSqtGMv3XC2T8xBHggq8ZFAPnpnpnY", + "aKCD8R97ifVNsVWTC2sbdbeqWG8ZGJaQcrwMBo3XvrmgR4N" + ] + }, + "aura": { + "owners": [ + "aura155svs6sgxe55rnvs6ghprtqu0mh69kehc9c0z6", + "aura1jm068whkhkxk48gx80ppm2m0nwy677prdgsptj", + "aura1xunyznpjmj9jv5e2zwngp2qrzmulr2ggrwkut0", + "aura1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn962x645" + ] + }, + "aurora": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "band": { + "owners": [ + "band155svs6sgxe55rnvs6ghprtqu0mh69keh6u00ct", + "band1jm068whkhkxk48gx80ppm2m0nwy677pr038p3r", + "band1xunyznpjmj9jv5e2zwngp2qrzmulr2ggphpu37", + "band1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9cn3609" + ] + }, + "beam": { + "owners": [ + "11d33ef5b07f977a51dc3aad64c49abf56c759c0059a468926b82a133a15b39d7bc" + ] + }, + "bifrost": { + "owners": [ + "c2TQGFWqK1WsKzWizpdf9V6uzCgnVqw7Yz9Va7G2wjQPHTY", + "hLaXgNj9XdVZNeE1uwpv9hJKM2wEBPQ2GPZb8mLEodCnpB2", + "fXm5HnSzWxqPrQYae4UDnXnZXfV5dmUNEEpSpCYdFPK4z69", + "g6rU7xYW1YDXvtyMiutyXs5UzQRcSw6bZR4xsSLznTFxfxW" + ] + }, + "binance": { + "owners": [ + "bnb155svs6sgxe55rnvs6ghprtqu0mh69kehphsppd", + "bnb1jm068whkhkxk48gx80ppm2m0nwy677pr56c0g9", + "bnb1nj68zufj3axulhletk4qut5ztn30fah9nhscg0", + "bnb1hv30rmjgu0wvtyyrzvm6njs8u2dc5l6aydw3gh", + "bnb1r4vvasqg7tsh9u4kl68ywskg3rq8juf6f640jz", + "bnb1agsyvgg2m45p5pef5xaetemhwcp3v84qgprhzq", + "bnb1hpcfdtv84srdq7n9a7mhnnmd3jwuda97dqzftu", + "bnb19yhugy8qzps8rur4mnp6tnz8w6nh7qrqz05yj0", + "bnb1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9rcw5kr" + ] + }, + "bitchain": { + "owners": [ + "1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9", + "18AV9vQZYm6yvG1W5JadaHSHR2b2xzujLf", + "1EkkGXR7dTbZbrKFKoe6YEP4gj4GzMeKvw", + "1HpED69tpKSaEaWpY3Udt1DtcVcuCUoh2Y", + "14kmvhQrWrNEHbrSKBySj4qHGjemDtS3SF", + "162bzZT2hJfv5Gm3ZmWfWfHJjCtMD6rHhw", + "3HroDXv8hmzKRtaSfBffRgedKpru8fgy6M", + "1FLKsCiEsABS7LysfDA8R181TQ6eLjoxPv" + ] + }, + "bitcoincash": { + "owners": [ + "1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9", + "18AV9vQZYm6yvG1W5JadaHSHR2b2xzujLf", + "1EkkGXR7dTbZbrKFKoe6YEP4gj4GzMeKvw", + "1HpED69tpKSaEaWpY3Udt1DtcVcuCUoh2Y", + "14kmvhQrWrNEHbrSKBySj4qHGjemDtS3SF", + "162bzZT2hJfv5Gm3ZmWfWfHJjCtMD6rHhw", + "3HroDXv8hmzKRtaSfBffRgedKpru8fgy6M", + "1FLKsCiEsABS7LysfDA8R181TQ6eLjoxPv" + ] + }, + "bitgert": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "bitkub": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "bittensor": { + "owners": [ + "5CNChyk2fnVgVSZDLAVVFb4QBTMGm6WfuQvseBG6hj8xWzKP", + "5HgKqPsEz17fBVCvd5cgWbGbapBXCn48p8LHjjvAub2kvVyd", + "5FsWP1GxpzT11xyFBojKpE75pzp54ESDA6BYbRMPJ2nsCZE5", + "5GSbmqT4LV2PA3TfxtakZySNkTZ1b3bqPRMo7UbBfZrp6d8k" + ] + }, + "bittorrent": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "blast": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "boba": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "bone": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "bouncebit": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "bsquared": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "btr": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "callisto": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "canto": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "celestia": { + "owners": [ + "celestia155svs6sgxe55rnvs6ghprtqu0mh69kehje7a6w", + "celestia1jm068whkhkxk48gx80ppm2m0nwy677pr85knnx", + "celestia1xunyznpjmj9jv5e2zwngp2qrzmulr2ggfjswnm", + "celestia1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9skqgdq" + ] + }, + "celo": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "chainx": { + "owners": [ + "5PwXDxpqSNF8oZN99EFY1PbFURdrsTmiHJ38sYYhdSKw5fjn", + "5VFeMNx3kas7Vc1rS9NjGPoSsnU7K9KBC1SYy7CmqJDjV5iE", + "5U1vHpXs74mqUAGbmxLoKmyE3RqbhQrsmJU4LqsnbH3nezDb" + ] + }, + "chz": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "clv": { + "owners": [ + "jHCPYN1HbjjwkKZnLYHYDS5onRwjVHSgTmkU7mDcxQFQ1C3BR", + "jHHhfVRQp3xZj1cS3qCfQh61yqJZjj8DvgTsXrnH2c7HobQWB", + "jHFtr32pXtwu4r6CNPvn3zirU5VCHaac12RiniTiEzZ3useUz", + "jHGTwRrzdQSUSzAgoB1dUkUBkzwwE7PmdFku3EWx3N67rmDRT" + ] + }, + "cmp": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "concordium": { + "owners": [ + "3rzzW6gBVMWXajrh3QLE8aFtmGQbdVFvCmKrcxsYBQxnfywfrR" + ] + }, + "conflux": { + "owners": [ + "cfx:aasusb60hfktf87fx1jg8m4cnnhebrew92f4swayt0", + "cfx:aase06fdw4cdrsrazhhzebshu9z2ds4zvu8j9zv3ad", + "cfx:aat80d5bu6rp5redv18g4yec8bv8ssheee8c9zur0a" + ] + }, + "core": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "cosmos": { + "owners": [ + "cosmos155svs6sgxe55rnvs6ghprtqu0mh69kehrn0dqr", + "cosmos1jm068whkhkxk48gx80ppm2m0nwy677prk78rft", + "cosmos1hpcfdtv84srdq7n9a7mhnnmd3jwuda970ya92j", + "cosmos19yhugy8qzps8rur4mnp6tnz8w6nh7qrqqttgnp", + "cosmos1xunyznpjmj9jv5e2zwngp2qrzmulr2ggccp7fk", + "cosmos1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9pu3chd", + "cosmos10v2gu0vvdeuv8pexnl98lmyva4cq8jkaa4845c" + ] + }, + "cronos": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0xa4992ccf2a74132936b87cbf28b5d52304ba3be7", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "cube": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "dash": { + "owners": [ + "XqjxbhVwksb7WXG5iJSh3bWnKSpvEYjG1P", + "XpSb6n51bAp9knuqBgxKPm4rX4dy3rjSjY", + "XsW53Lonn2fAPX7QPvnrjXugSqCbDcmBpj", + "XeSckx4kUZapSYT2B5HfabX575ETHqUX8i", + "XfiSpp6vf1tWEDMdReptNBy6ZYU3Gbozpo", + "7iaS3jCJWm5xRf7PvoLAm4eHFNhH3FETUG", + "Xq2AhTN8psQ2GHaTX6UMGXooHjgLGjFNkp" + ] + }, + "defichain": { + "owners": [ + "8W8yVQDEaQiJ5PB4Hy8CvKj9pBtD3zqkhb", + "8UqbzUnJQhwLKepomMdqGVHE1ohFpnzjSr", + "8VRBbA5ReQXCq9VS6m9s9G2AnUjd74nwQn" + ] + }, + "doge": { + "owners": [ + "DLCDJhnh6aGotar6b182jpzbNEyXb3C361", + "DJtqonMkvsVr8rVr4Pdf5zYfZrnaLSdnwi", + "DKRg7bL5s1NbWp1VMKhP1gbw6mqydnoX2u", + "DMxKkM6Y7jLrmahRGdUCRmPVVdMCZh7QKy", + "D8tsTxMVpGGWpc333my1Gpzt9sP4YQjoDx", + "DAAhXpPfziaCcGweJMWE4RSucLcee7NcqL", + "A8c3xNz2mqsDLFwv5KL5fpH12QEwDaoTXo", + "DKURQTetAa5ieMAUPo9gxmHcLXpwes8kH1" + ] + }, + "dydx": { + "owners": [ + "dydx155svs6sgxe55rnvs6ghprtqu0mh69keh22pfq5", + "dydx1jm068whkhkxk48gx80ppm2m0nwy677prl8f8fu", + "dydx1xunyznpjmj9jv5e2zwngp2qrzmulr2gg3p06fp", + "dydx1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9g9luh6", + "dydx10v2gu0vvdeuv8pexnl98lmyva4cq8jka5vf350" + ] + }, + "dymension": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "edg": { + "owners": [ + "hp7fFnvDbtF2PPydXhf33kXZULyqgUTJVYH7FkZVoKtfhoD", + "o8Enfv8XpWDiS3gvSprJ3xixqBEHN1vDCwhCpQdhfDh5EPb", + "mKRLHKrNoqZYup1VAwVbgoDD1on8pPzZAnx4Vqr66yoMFSJ", + "mtWj7VwtJQwgzJSGFnvMS8W8UYifdZcnVyCaZ5eTe3kF4Jj" + ] + }, + "elastos": { + "owners": [ + "EKk4HeHnLvMpxFiSbjVizcrCB1nVt39Bwe", + "EWwQTNN6ehrVLBh4imEYtQr61txBE2ARUk", + "Eb1wiohh195bcZrsPowoMdNRmaaJk4wbai", + "EftXuMPJRVxKjFKQ2Z3oiayi5hL4v56u5R", + "EdGT5d52SZhYASQpMdCydpnv1iiS4j2YoA" + ] + }, + "elrond": { + "owners": [ + "erd1p4vy5n9mlkdys7xczegj398xtyvw2nawz00nnfh4yr7fpjh297cqtsu7lw", + "erd1lptaaz323qjgsg67mfsa8aquffs9j8tl3khvz2v7creqgf4yeslsf2u99c", + "erd1cx3a4wu4kpnk0ke2hp0dp05xzvapt0lr4q86q97thqepvas2sxqsnh0533" + ] + }, + "elys": { + "owners": [ + "elys155svs6sgxe55rnvs6ghprtqu0mh69kehrnk2dp", + "elys1jm068whkhkxk48gx80ppm2m0nwy677prk77yyf", + "elys1xunyznpjmj9jv5e2zwngp2qrzmulr2ggcccey5", + "elys1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9pugl60" + ] + }, + "energyweb": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "enuls": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "eos": { + "owners": [ + "gateiowallet", + "ha2tanbqg4ge", + "eos32signhw1" + ] + }, + "eos_evm": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "equilibrium": { + "owners": [ + "cg3QZnNBPvXUiaAJzXqR1Ria2egcLXgmmRu9wGa2nQk5aV7FP", + "cg8igunJcEk6hGCxhpkYCginE43SayNKELcZMN8grcbyNtcg9", + "cg6usTPiL5jS36gj2PUeqzMciJE58pphJgaQcDp8513jVAtc8", + "cg7UxrDtRbE1REmDTAZWGk6x1Dgp5MdrvuuarjsMsNaoS4eUp" + ] + }, + "ergo": { + "owners": [ + "9iKFBBrryPhBYVGDKHuZQW7SuLfuTdUJtTPzecbQ5pQQzD4VykC", + "9gQYrh6yubA4z55u4TtsacKnaEteBEdnY4W2r5BLcFZXcQoQDcq", + "9f5WpnpDCAWHXk4HYARp7NKBJV58QSkCKAC2vucsaVBjPgKsght" + ] + }, + "ethereumclassic": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0x4bbe1961bd0a6cd1fe3cd8947be15bd8ae2ee562", + "0xd793281182a0e3e023116004778f45c29fc14f19", + "0x35b31ae2604dd81d9456205025ea02418dba8242", + "0x354e0184a6a6e634ccb07388e2617e05e427563c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "ethf": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x54c82d26624e85000d1387ee7c9580c3c6d7b5b7", + "0x7750fe679d47a9e00575ad46043297a234e83fa2", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xd793281182a0e3e023116004778f45c29fc14f19", + "0x354e0184a6a6e634ccb07388e2617e05e427563c" + ] + }, + "etlk": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "etn": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "evmos": { + "owners": [ + "evmos1p5rs093e2te0hfva6phjksj6eeqtfyh7ma0cjz", + "evmos1r39hpgukssmtng9feafqt3u8awqmk4vv7vvwtl", + "evmos1ezptzyd8tsxx2l79qlqyl07d9nycfur36wpmyf", + "evmos1ll4s7cv8rtxmfqudl3k4pqhsv0nn3eppwgmrq9" + ] + }, + "filecoin": { + "owners": [ + "f1d7mq36vf6osdhcd32i6k3wyb223mdjlxnafnala", + "f1z7izlq5yv2wkrt6ks4fnzscesnd6kntt6vovqai", + "f1pbcpx47wwpb5za2stdz3skfcplmk6zxi7hwv3sy" + ] + }, + "findora": { + "owners": [ + "fra1p4vy5n9mlkdys7xczegj398xtyvw2nawz00nnfh4yr7fpjh297cqsxfv7v", + "fra1lptaaz323qjgsg67mfsa8aquffs9j8tl3khvz2v7creqgf4yeslsjufhy6", + "fra1cx3a4wu4kpnk0ke2hp0dp05xzvapt0lr4q86q97thqepvas2sxqsgp6xsn" + ] + }, + "flare": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "flow": { + "owners": [ + "0xb65cb9286d8eab6c", + "0x4f45575f29f5dffb", + "0xa008dc1bf48aa10d" + ] + }, + "ftn": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "fuel": { + "owners": [ + "0x778c29331c90bc9d986dd790c6ed7225e1b9d0857952d4be81e91f0dfbc57a2e", + "0x188f36048cd9353bdd3809e349d20deab4cacad709d7cce64f2a417e55d27ec5", + "0xdd8861e6d56cfde6c3a017e246e0ff26d29ff30d08eef4e927d221a6a0b765c1" + ] + }, + "fuse": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "fusion": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "gochain": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "harmony": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "heco": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "heiko": { + "owners": [ + "hJFVeb7Z8zaQSPwjw8x6rRySFtxzk4KJrUCGs1pk71CQGyqd1", + "hJLomiXgMJo2R5zPeRsE3gyeTJKpzVzrKNugH7PQBD4J5NwfD", + "hJKa3eyGAfGw94YePmgC7kMpETyCUtGQ1xChnV85By388Z6px" + ] + }, + "hpb": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "hydra": { + "owners": [ + "HMaF9nmaCNua4vExqCTDb5iTfHYxdL6K8q", + "HLGsesLe2g8cKBtiJaxqwFGXruN1QGJji2", + "HLrTFYdmGNiUpgZLdzUsp21UdaQNh7E8Tb" + ] + }, + "hyperliquid": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "icon": { + "owners": [ + "hx548ad28ef8d6caed7f27f6001fb7a654ad8cca40", + "hx5130e85046609cda7c6f579c09946bcf6c86d81b", + "hx46a0528308c53c8d3e40f17b08f2c3fcfafb94d6", + "hxce12bc670be0e35dbb6ffb8935648d87fbd74154", + "hxffd3f84a64d2673b8b7564dd5307d16624553a3e" + ] }, - taiko: { - owners: ["0xc882b111a75c0c657fc507c04fbfcd2cc984f071"], + "icp": { + "owners": [ + "8fe706db7b08f957a15199e07761039a7718937aabcc0fe48bc380a4daf9afb0", + "8f079b740ca593e6741e8a552f06352d0e6c844f6fd75533e3bd575ec76cb147", + "6463450788218283a2959d7cf4e1bfbaf422753e5c4596b593ed9d3f4cf20497" + ] }, + "injective": { + "owners": [ + "inj155svs6sgxe55rnvs6ghprtqu0mh69kehf6cfjm", + "inj1s52g6m4h96lxyug2hejrqs6ffu26cuf5ym5mgq", + "inj1jm068whkhkxk48gx80ppm2m0nwy677pruhs8mn", + "inj1xunyznpjmj9jv5e2zwngp2qrzmulr2ggj3k6mw", + "inj1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9t4xu94", + "inj10v2gu0vvdeuv8pexnl98lmyva4cq8jkahus3xq" + ] + }, + "interlay": { + "owners": [ + "wd7oNzH5QHFCkwjRmAKXdkjyhcRmJ5QX1CTLB4M2FZSkcUFEd", + "wdD7W7hCcbTpjdn5UTEeq1kBu1nbYX64U7Ajb9ugKmJeQsYz5", + "wdBJgfJcLSTA5UFqo1xmUKP2PFyE6NYSYT8ar1b7Y9kQX9o1v", + "wdBsn48nRwwjTcLLDo3cu58MgBRy2uMcAgTm6XeMLXHUU3aH7" + ] + }, + "iotex": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "islm": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "kadena": { + "owners": [ + "k:0d584a4cbbfd9a4878d816512894e65918e54fae13df39a6f520fc90caea2fb0", + "k:f857de8a2a882488235eda61d3f41c4a60591d7f8daec1299ec0f20426a4cc3f", + "k:c1a3dabb95b06767db2ab85ed0be86133a15bfe3a80fa017cbb83216760a8181" + ] + }, + "kardia": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "karura": { + "owners": [ + "obmvFLKbtkyBSoSY4agQx1xCxVGts6yVS6QiwPrxevNxE7f", + "tuu3fTXv7NwsVT9pyhsfxE9cKKXLYeSQ9VppW3wAWpBMM7B", + "s75bGsFm6iHhyDUPhpWyb4drVx5C12Wk7M5gBV9YxaHdova", + "sgAz73MGbHfr3huAnfwjLPvmxh1ipC8ySXLCEiwvVeEXeBn" + ] + }, + "kava": { + "owners": [ + "kava155svs6sgxe55rnvs6ghprtqu0mh69kehlxmsky", + "kava1jm068whkhkxk48gx80ppm2m0nwy677pr2tn7lv", + "kava1hpcfdtv84srdq7n9a7mhnnmd3jwuda97n3fcu4", + "kava19yhugy8qzps8rur4mnp6tnz8w6nh7qrqu7l49x", + "kava1xunyznpjmj9jv5e2zwngp2qrzmulr2ggyd4rl3", + "kava1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9af99p2" + ] + }, + "kintsugi": { + "owners": [ + "a3aWepSsLfy67vUAAaKCiSnCj7G72feeTCgfKCBLivBWWTdFW", + "a3fpmwrzYzBi6cWossEKuhnQvWcwH7LBv7Q4jHjzo83QJs1ys", + "a3e1xVUQGqB3SSzaCRxSZ1RFQkoZpxnZzTMuz9RS1WVAR9BBL", + "a3eb3tJaNLfcpb54dD3HymAahgGJmVbjcgh6EfUfot2EN2oJB" + ] + }, + "klaytn": { + "owners": [ + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "kroma": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "kusuma": { + "owners": [ + "CspNJ5uJ9WcF6Nf6sJY9YRQL3dWZmKrMnmd2qY4BXMTGEgi", + "JBwViD7cN8aw92NPnRjQYdbjQTm1SsKGWB38QC8PPFFfLuc", + "DdCg75U3jH69QL1jDG7WybLxk9KLWM1gokBay77qng6dbhT", + "GP83KcqTMTvmcngxWYNiBU5yb6JruFPcU2Hz5dLmq1MwqGs", + "GxDS9nvxr3JuhH7jbPoTvoNu3qFPiR1qoCYW8s99N5JqhT5", + "GS988ESnKUHMYixhAZJLJjQkpBEGRN3AdEJbY7CXxauxoQo", + "J5VsgNemdBg2bfvHresAtBZdxE67WrS656Caup3MgsBE2y7", + "ErJ8h2WUY35Eb1cDMTCZgnht2kT2gKdKeNnw21tDDmRxSXL", + "HfQVohDHuXHr1Y9y3fZdNNANKhMHn4ndcVXaCN3rWW94hN7" + ] + }, + "linea": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "lisk": { + "owners": [ + "lskqov47at3sqaaf9bg38kymku92rcdax7refhpk3", + "lsko9dq4zcp7yu5fvr2owm672sxdpc5swapv3dbyk", + "lskwqe5qassrz55474rux63537nwasf53va79hczs" + ] + }, + "lukso": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "manta_atlantic": { + "owners": [ + "dfWrWfp3dJ7FNXyLCEW8gvmknvAyi9FTa5gFZeGUD7GaSbUXa", + "dfcAdoEAqcKsME1yuXRFtBmxzKXoxaw12zPeyjq8HK8UEzgZ6", + "dfaMpLqaZTKCh4VkE69NXVQoUZiSWSPP7LMWEbWZVhaEMH5hW", + "dfavujfkexon5CaEesEDxFA8mVBBSyCYjZggV7ZoJ57JJAbVb" + ] + }, + "matchain": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "merlin": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "meter": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "metis": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "mode": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "moonbeam": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "moonriver": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "naka": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "near": { + "owners": [ + "0d584a4cbbfd9a4878d816512894e65918e54fae13df39a6f520fc90caea2fb0", + "f857de8a2a882488235eda61d3f41c4a60591d7f8daec1299ec0f20426a4cc3f", + "c1a3dabb95b06767db2ab85ed0be86133a15bfe3a80fa017cbb83216760a8181" + ] + }, + "neo": { + "owners": [ + "AJN2SZJuF7j4mvKaMYAY9N8KsyD4j1fNdf", + "AVZNcHPDYuDj9rJCUZuN3A8DirNk8QPBEr", + "AZdusiiouLSqSEU19cccWNeZUXzsZEk2UB", + "AeWW4GQRKhKZYuvXnMicsLFqnekdpSofk6", + "AbtREY69Lm4mz71x7Rsnna53ig8zzXRrXK" + ] + }, + "neo3": { + "owners": [ + "NTWC7Hh5VYMQ5K8YJbyCLbmJ4RhfQ1Ej64", + "NY8VmiQ8if23Cr7Fe6xwXZ4a59JTVXHDCN", + "NcSZPD4ToU3v1C8NPK13hibCnZcPEqHD1a" + ] + }, + "neon_evm": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "neutron": { + "owners": [ + "neutron155svs6sgxe55rnvs6ghprtqu0mh69keh8vx06y", + "neutron1jm068whkhkxk48gx80ppm2m0nwy677prjpwpnv", + "neutron1xunyznpjmj9jv5e2zwngp2qrzmulr2ggu8gun3", + "neutron1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn99rc6d2" + ] + }, + "nibiru": { + "owners": [ + "nibi155svs6sgxe55rnvs6ghprtqu0mh69keh5kt5fs", + "nibi1jm068whkhkxk48gx80ppm2m0nwy677prpmr6qc", + "nibi1xunyznpjmj9jv5e2zwngp2qrzmulr2gg0a98q9", + "nibi1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9ke4p77" + ] + }, + "nuls": { + "owners": [ + "NULSd6Hge2GxNKwYRxxvnQynMK2gKt5YAVANR", + "NULSd6Hgd9SJyzE6cmFmPQQ6VcpcQPLvbM4K2", + "NULSd6HgdY5zjfxhHhQMyGnJmxZREDxr8Zhh1" + ] + }, + "oas": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "oasis": { + "owners": [ + "oasis1qppfyeugxmxdx5m4gpasg4xqg296zcdndy0k2zsg", + "oasis1qqz86qv538ff9y4exy6g3j724mq68wj7pu55rgwt", + "oasis1qp8f5gh8zgad5t47hc40ayw37ptcszrtsq6eh5de" + ] + }, + "okexchain": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "ontology": { + "owners": [ + "AJN2SZJuF7j4mvKaMYAY9N8KsyD4j1fNdf", + "AVZNcHPDYuDj9rJCUZuN3A8DirNk8QPBEr", + "AWGrHN1DUAo6Ao3yTHu4tUHZonPNAy9ZmU", + "AM1te97HdmaereEMgtLg7YvfUP624Ra4iF", + "ASPPqj8yCcCV2sWHQZwsYfWZS2FMfd3PF7", + "AZdusiiouLSqSEU19cccWNeZUXzsZEk2UB", + "AeWW4GQRKhKZYuvXnMicsLFqnekdpSofk6", + "AbtREY69Lm4mz71x7Rsnna53ig8zzXRrXK" + ] + }, + "op_bnb": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "orai": { + "owners": [ + "orai155svs6sgxe55rnvs6ghprtqu0mh69kehsqewps", + "orai1jm068whkhkxk48gx80ppm2m0nwy677pr9d3qgc", + "orai1xunyznpjmj9jv5e2zwngp2qrzmulr2ggtthag9", + "orai1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9j08mk7" + ] + }, + "osmosis": { + "owners": [ + "osmo155svs6sgxe55rnvs6ghprtqu0mh69kehtguak3", + "osmo1jm068whkhkxk48gx80ppm2m0nwy677pr795nle", + "osmo1xunyznpjmj9jv5e2zwngp2qrzmulr2ggsrjwly", + "osmo1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9f8zgpl" + ] + }, + "parallel": { + "owners": [ + "DVhKTLv9mkh42BZRKJTmWRjlT64T3zmm9SD8kMrqL7A", + "-FfeiiqIJIgjXtph0_QcSmBZHX-NrsEpnsDyBCakzD8", + "waPau5WwZ2fbKrhe0L6GEzoVv-OoD6AXy7gyFnYKgYE" + ] + }, + "persistence": { + "owners": [ + "persistence155svs6sgxe55rnvs6ghprtqu0mh69kehdlf7w8", + "persistence1jm068whkhkxk48gx80ppm2m0nwy677prcjps80", + "persistence1xunyznpjmj9jv5e2zwngp2qrzmulr2ggk58d8j", + "persistence1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn90shtef" + ] + }, + "pokt": { + "owners": [ + "ab04976668dd739f34df43e912d20dc487ac85d2", + "63755480647460bf0a5865caa76361d106bddf24", + "bd6cbae77b9016b4b932805485a1c7be77e5a059" + ] + }, + "polkadex": { + "owners": [ + "esm4teFDTrvy4VJ8msKTQmAywumeinGjzsrFzmTEB5FBiiekE", + "esrP1mfLgB9b3BLnVAEac2BC9K8UyDxHTnZfQs1tFH75X81FT", + "espaCKGkQ28vP1pYoixhFKp2dZK7X5QfY8XWfihKTfYqdQFGd", + "esq9Hi6vVXdVm9u3EW3Yg5ZMvUmrTcDqAMrgvEkZG35uaJ6tp" + ] + }, + "polygon_zkevm": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "proton": { + "owners": [ + "gatedeposit", + "gateiocold" + ] + }, + "radixdlt": { + "owners": [ + "account_rdx16y5vw2latcyn7h2leujsc0th2junpgxnafx0aqrher4yw7pmnmfyx8", + "account_rdx16xkm9wvwcwq0q8ly6hm6m86s90zcqxeexhnzn8l9jkgtk3t8z7j2yz", + "account_rdx169r653rp86kepz28wrzlxzy6ll2use5jmew5rz9h24uyj9cjqtl38n" + ] + }, + "reef": { + "owners": [ + "5CNChyk2fnVgVSZDLAVVFb4QBTMGm6WfuQvseBG6hj8xWzKP", + "5HgKqPsEz17fBVCvd5cgWbGbapBXCn48p8LHjjvAub2kvVyd", + "5FsWP1GxpzT11xyFBojKpE75pzp54ESDA6BYbRMPJ2nsCZE5", + "5GSbmqT4LV2PA3TfxtakZySNkTZ1b3bqPRMo7UbBfZrp6d8k" + ] + }, + "rei": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "rollux": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "ronin": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "rsk": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "rvn": { + "owners": [ + "RQLJqxjLPzB6Rb2hKb7bHbACFNhpq11zhv", + "RP2wM3JQEHQ8frgSnydDdkiGSzWscgUihs", + "RS6RHc3BR9F9Jat21DTkyXZ6Nm5VrLUKxt", + "RD2y1DJ97gAoMcDdnMxZpbAV317MvAuu8A", + "REJo55LKJ8UV9H8F2wVncBcWVULwtsoiKn", + "RPcWwibXTyz1BMM58P9FWXTDDfZExE78SG" + ] + }, + "secret": { + "owners": [ + "secret155svs6sgxe55rnvs6ghprtqu0mh69kehpkmyal", + "secret1jm068whkhkxk48gx80ppm2m0nwy677pr5mn25h", + "secret1xunyznpjmj9jv5e2zwngp2qrzmulr2gg6a4h52", + "secret1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9re9323" + ] + }, + "shibarium": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "shiden": { + "owners": [ + "WEo9Gi7T28niGb3pTwcHFDgGW4PjKDQvcS1stTxa68v73nQ", + "bYvGgqKmEkmQKEm7P4oYFRsfrteAzksqKqRyT82mx2iWSZt", + "Zk6pJF3cE67Eo15g7BSqtGMv3XC2T8xBHggq8ZFAPnpnpnY", + "aKCD8R97ifVNsVWTC2sbdbeqWG8ZGJaQcrwMBo3XvrmgR4N" + ] + }, + "songbird": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "sora": { + "owners": [ + "cnRnnKrqCX9TEZvCgVuiXbPbE1jmA3R55W6cLeKC43U8nVoma", + "cnX6uTGxQqN5DFxrPnpqirPoRR6bQV6cYQp1kjsr8FL2au8KM", + "cnVJ5ztN8gMQZ6SciMYxNA2dufHDxLYzckms1bZHLdmnhBbm7", + "cnVsBPiYEBqywEX798donumyCajxtsNAEz73G7cX91Jre5TfS" + ] + }, + "stafi": { + "owners": [ + "313h29qADPFh49f1QT8xwmD3xnCoZ4fDkijz797UWv4EKqmx", + "36Mp9ZxNXbsfkCJihNGACmRFN933zkCgfS9QChmYimx2jPEb", + "34YzhBN6NbD1ag53G6NoWQFjcKfbrCam1Pzf4PCm7Di91dtJ", + "358661YBt5nPikZU3BEEG9b2XnQYP1kPEjAuaSSZUkn5uMJq" + ] + }, + "starcoin": { + "owners": [ + "0x5aeae9cbf49070dc93aed2f16b99012a", + "0xd126d715c5df145eee58f4f4f6217898", + "0xc2cb026e3e9b55a6613c10cc90904a40" + ] + }, + "stellar": { + "owners": [ + "GBC6NRTTQLRCABQHIR5J4R4YDJWFWRAO4ZRQIM2SVI5GSIZ2HZ42RINW", + "GBJ746LVE2LFZ5OA2QEQUE35QHHI3OXZ75RH4USXY2GBFAKCBKQG3HKU", + "GCLP5OZ4SFU4X2MD4BGZKC7FFJY3NGM3Y6TVULOWLUNNWHEFNUJGAW5Y", + "GCE2HXJTGSI66KBPEVQYFU7N4KWAGRIG4TJPZTPWRGVSH2MZCC4EAY63", + "GBOL3FQURYYBAPWMAGMY5IS3ZFQRYOLBANZTVGGFL5MAN545QB5NAEUT" + ] + }, + "sui": { + "owners": [ + "0x62f36b79d7ea8ae189491854edd9318b29c75346792177b230a95f333ffa53ad", + "0x7ce04f66dca33c786c7375f73c4f7459e16b8a80cbbdd055e3782b3e176fa3d3", + "0x019b848f4511b354c314a4e5c1a40dbc247fe5d29c6bcb3495badb01751d549a" + ] + }, + "syscoin": { + "owners": [ + "ScM7oHdCXXZistSxPr7YjxyZ8tUf3HG8c2", + "Sb3kJNCGMpnm8A6hsEdB68XdLWHhkXietE", + "SSKc2QEBRfs7baYW7CVk4ZRsNz7n28P2j3", + "SbdKu3VPbXNddemLCe9CxuGa7BL538hBCx" + ] + }, + "tara": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "telos": { + "owners": [ + "gateioiotlos" + ] + }, + "tenet": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "terra": { + "owners": [ + "terra155svs6sgxe55rnvs6ghprtqu0mh69keh9h4dzr", + "terra1f62zqvvm6y2vlp6rhn94k9spsuqmh727twq8e4", + "terra1jm068whkhkxk48gx80ppm2m0nwy677prs6artt", + "terra1xunyznpjmj9jv5e2zwngp2qrzmulr2gg7um7tk", + "terra1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn98ctc4d" + ] + }, + "tezos": { + "owners": [ + "tz1hjem5Rpf4KAVbwMLJet75TDb8HjAKnTYk", + "KT18yTsDxUbVrenxZsbFSx6Ai72hRHod9pHV", + "tz1RRVLD5LEu8iaoTMGc5L1NiyiEGuSUtAwX", + "KT1PuUGWvCypTrNu7yweWCzpX6zyuy6nq6Wu", + "tz1fw6VKhBZ8N7HAvCwvXSkTvQ7YcUk3w9AK" + ] + }, + "theta": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "thorchain": { + "owners": [ + "thor155svs6sgxe55rnvs6ghprtqu0mh69keh95kk4u", + "thor1jm068whkhkxk48gx80ppm2m0nwy677prse7cu5", + "thor1xunyznpjmj9jv5e2zwngp2qrzmulr2gg7lc9uf", + "thor1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn98mgrzj" + ] + }, + "thundercore": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "tomochain": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "ton": { + "owners": [ + "0:3addd84bf73267312a477049fd9b8db761bf39c585c150f8e6f9451347af2b6c", + "0:09c592c5b17a555c1ace781f38303e5a115978f57cf22773b280d14028e7dd92", + "0:16ea6a34f0d704b6fac9b7592e003f6f28ae5d1a8a6ba9d1650e4dd30ab8eada" + ] + }, + "umee": { + "owners": [ + "umee155svs6sgxe55rnvs6ghprtqu0mh69keh39jjy3", + "umee1jm068whkhkxk48gx80ppm2m0nwy677pryg6ude", + "umee1xunyznpjmj9jv5e2zwngp2qrzmulr2gg2wupdy", + "umee1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9n2v8nl" + ] + }, + "vana": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "vechain": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0x246a2ecd9626f9eda55fffbff5216ed417a904f5", + "0x840760aed6bbd878c46c5850d3af0a61afcd09c8", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "velas": { + "owners": [ + "u6PJ8DtQuPFnfmwHbGFULQ4u4EgjDiyYKjVEsynXq2w", + "HiRpdAZifEsZGdzQ5Xo5wcnaH3D2Jj9SoNsUzcYNK78J", + "E2tbmDk29G6jHdrgwHC6kXGFfDsyrXUyWjD3e3ZB4oNp" + ] + }, + "venom": { + "owners": [ + "0:9f4fb4d07e97542c2200672b2819c1c3987c48a353c655858ba525c7e51bbfc7", + "0:595972816072851da891322300897c5e71255d2f2dbd1ca721568b6ac1e761db", + "0:c6c2f45369f7a281ed9771fcb2dc62863a2625e963074159af527169e470de29" + ] + }, + "vinu": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "vite": { + "owners": [ + "vite_f262f48ec1097880c83aa079dfb0baef5e68c4ff6c0b807b0a" + ] + }, + "waves": { + "owners": [ + "3P7LZSuVDv5pQS7NSCE1LyGCbQihzk1fQ2r", + "3PJL6FBmbQrYpvtWjRJEETAF7ngZ1cB4Hcj", + "3PMb9uuJm5VB9VUzNLhZGScEK8m7zGwDED3" + ] + }, + "wax": { + "owners": [ + "gateioiowaxp" + ] + }, + "wemix": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "xdc": { + "owners": [ + "0x0D0707963952f2fBA59dD06f2b425ace40b492Fe", + "0x1C4b70a3968436B9A0a9cf5205c787eb81Bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "xlayer": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "xpla": { + "owners": [ + "xpla155svs6sgxe55rnvs6ghprtqu0mh69keha5h3ts", + "xpla1jm068whkhkxk48gx80ppm2m0nwy677prgellzc", + "xpla1xunyznpjmj9jv5e2zwngp2qrzmulr2ggxlezz9", + "xpla1n5ukn9q2r5vrgt6su0e6cvm5lyxe2cn9lmfyu7" + ] + }, + "zeta": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421", + "0xcf6f5ec73942314c3ec864202b40dcbb1f9477a0" + ] + }, + "zilliqa": { + "owners": [ + "zil1e9k0rdjgh0khx06veut6ghwkggue6snmrlyg4w", + "zil1melkmjzv6v784dlk30rhx2ck4zccqpprsdd3jt", + "zil12zn46cppzsg0thgn7e66ugjd3c25hcl0acjaud", + "zil1jcmadzrm6w49gegqw94esdkyhfq75y4fxl9wrv", + "zil12acrew80f00m4v3cs4hw9yawx7m74fwdwtmdj5" + ] + }, + "zircuit": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "zkfair": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "zklink": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x85faa6c1f2450b9caea300838981c2e6e120c35c", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + }, + "era": { + "owners": [ + "0x0d0707963952f2fba59dd06f2b425ace40b492fe", + "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", + "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" + ] + } }; +const unsupportedChains = ['aeternity', 'beam', 'binance', 'bitchain', 'bitcoincash', 'bittensor', 'bone', 'callisto', 'chainx', 'clv', 'concordium', 'conflux', 'cmp', 'dash', 'cube', 'defichain', 'edg', 'elastos', 'elys', 'equilibrium', 'evmos', 'filecoin', 'findora', 'flow', 'fusion', 'heiko', 'hydra', 'hyperliquid', 'icon', 'icp', 'interlay', 'kadena', 'karura', 'kava', 'kintsugi', 'kusuma', 'manta_atlantic', 'lisk', 'neo', 'neo3', 'near', 'nibiru', 'nuls', 'ontology', 'oasis', 'parallel', 'pokt', 'polkadex', 'proton', 'reef', 'rvn', 'shiden', 'sora', 'stafi', 'starcoin', 'syscoin', 'stellar', 'telos', 'thorchain', 'velas', 'venom', 'vite', 'waves', 'wax', 'zilliqa', ] + +unsupportedChains.forEach(chain => delete config[chain]); + module.exports = cexExports(config); diff --git a/projects/helper/bitcoin-book/gate-io.js b/projects/helper/bitcoin-book/gate-io.js index 059c5c5a78..dbb53dc722 100644 --- a/projects/helper/bitcoin-book/gate-io.js +++ b/projects/helper/bitcoin-book/gate-io.js @@ -5,5 +5,7 @@ module.exports = [ '1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9', '1HpED69tpKSaEaWpY3Udt1DtcVcuCUoh2Y', '3HroDXv8hmzKRtaSfBffRgedKpru8fgy6M', - '1ECeVF6wfbiihCRrrpRnkbwrWsZfYmixMG' + '1ECeVF6wfbiihCRrrpRnkbwrWsZfYmixMG', + '1FhncfokiSDagazXbuVqKQ6ew4oyDmAzhG', + '1FLKsCiEsABS7LysfDA8R181TQ6eLjoxPv' ] \ No newline at end of file diff --git a/projects/helper/chain/acala.js b/projects/helper/chain/acala.js new file mode 100644 index 0000000000..f63d8d148e --- /dev/null +++ b/projects/helper/chain/acala.js @@ -0,0 +1,30 @@ +const sdk = require('@defillama/sdk') +const { post } = require('../http') +const { sleep } = require('../utils') + +const endpoint = 'https://acala.api.subscan.io/api/v2/scan/search' + +async function getBalance(key) { + const data = await post(endpoint, { key }, { + headers: { + 'Content-Type': 'application/json', + 'X-API-Key': 'f89d810db5ef4c4fbc83b987dc2ffcda' + } + }) + return +(data?.data?.account?.balance ?? 0) +} + +async function sumTokens({ balances = {}, owners = [] }) { + let total = 0 + for (const owner of owners) { + const balance = await getBalance(owner) + total += balance + await sleep(3000) + } + sdk.util.sumSingleBalance(balances, 'acala', total) + return balances +} + +module.exports = { + sumTokens +} \ No newline at end of file diff --git a/projects/helper/chain/aelf.js b/projects/helper/chain/aelf.js new file mode 100644 index 0000000000..a7c44bfe19 --- /dev/null +++ b/projects/helper/chain/aelf.js @@ -0,0 +1,22 @@ +const sdk = require('@defillama/sdk') +const { get } = require('../http') + + +async function getBalance(key) { + const data = await get(`https://explorer.aelf.io/api/viewer/balances?address=${key}`) + return +(data?.data?.[0]?.balance ?? 0) +} + +async function sumTokens({ balances = {}, owners = [] }) { + let total = 0 + for (const owner of owners) { + const balance = await getBalance(owner) + total += balance + } + sdk.util.sumSingleBalance(balances, 'aelf', total) + return balances +} + +module.exports = { + sumTokens +} \ No newline at end of file diff --git a/projects/helper/chain/aeternity.js b/projects/helper/chain/aeternity.js new file mode 100644 index 0000000000..a6e70584ad --- /dev/null +++ b/projects/helper/chain/aeternity.js @@ -0,0 +1,28 @@ +const axios = require('axios'); + +const endpoint = 'https://mainnet.aeternity.io/v2/accounts'; // Replace with the appropriate endpoint + +async function getBalance(address) { + try { + const response = await axios.get(`${endpoint}/${address}`); + const balance = response.data.balance; + return balance; + } catch (error) { + console.error('Error fetching token balance:', error); + return 0; + } +} + +async function sumTokens({ balances = {}, owners = [] }) { + let total = 0; + for (const owner of owners) { + const balance = await getBalance(owner); + total += balance; + } + sdk.util.sumSingleBalance(balances, 'aeternity', total); + return balances; +} + +module.exports = { + sumTokens +}; \ No newline at end of file diff --git a/projects/helper/chain/alephium.js b/projects/helper/chain/alephium.js index d1ff69bdb9..b7320e9fb9 100644 --- a/projects/helper/chain/alephium.js +++ b/projects/helper/chain/alephium.js @@ -70,7 +70,19 @@ function addressFromContractId(contractId) { return bs58.encode(bytes); } +async function sumTokens({ owners = [], owner }) { + if (owner) owners = [owner]; + let total = 0 + for (const owner of owners) + total += (await getAlphBalance(owner)).balance / 1e18 + + return { + alephium: total + } +} + module.exports = { + sumTokens, getAlphBalance, getTokensBalance, getTokenInfo, diff --git a/projects/helper/chain/astar.js b/projects/helper/chain/astar.js new file mode 100644 index 0000000000..8598f8e2e8 --- /dev/null +++ b/projects/helper/chain/astar.js @@ -0,0 +1,30 @@ +const sdk = require('@defillama/sdk') +const { post } = require('../http') +const { sleep } = require('../utils') + +const endpoint = 'https://astar.api.subscan.io/api/v2/scan/search' + +async function getBalance(key) { + const data = await post(endpoint, { key }, { + headers: { + 'Content-Type': 'application/json', + 'X-API-Key': 'f89d810db5ef4c4fbc83b987dc2ffcda' + } + }) + return +(data?.data?.account?.balance ?? 0) +} + +async function sumTokens({ balances = {}, owners = [] }) { + let total = 0 + for (const owner of owners) { + const balance = await getBalance(owner) + total += balance + await sleep(3000) + } + sdk.util.sumSingleBalance(balances, 'astar', total) + return balances +} + +module.exports = { + sumTokens +} \ No newline at end of file diff --git a/projects/helper/chain/bifrost.js b/projects/helper/chain/bifrost.js new file mode 100644 index 0000000000..2977c8e200 --- /dev/null +++ b/projects/helper/chain/bifrost.js @@ -0,0 +1,30 @@ +const sdk = require('@defillama/sdk') +const { post } = require('../http') +const { sleep } = require('../utils') + +const endpoint = 'https://bifrost.api.subscan.io/api/v2/scan/search' + +async function getBalance(key) { + const data = await post(endpoint, { key }, { + headers: { + 'Content-Type': 'application/json', + 'X-API-Key': 'f89d810db5ef4c4fbc83b987dc2ffcda' + } + }) + return +(data?.data?.account?.balance ?? 0) +} + +async function sumTokens({ balances = {}, owners = [] }) { + let total = 0 + for (const owner of owners) { + const balance = await getBalance(owner) + total += balance + await sleep(3000) + } + sdk.util.sumSingleBalance(balances, 'bifrost', total) + return balances +} + +module.exports = { + sumTokens +} \ No newline at end of file diff --git a/projects/helper/chain/bittensor.js b/projects/helper/chain/bittensor.js new file mode 100644 index 0000000000..a06165c3a7 --- /dev/null +++ b/projects/helper/chain/bittensor.js @@ -0,0 +1,39 @@ +const sdk = require('@defillama/sdk') +const { post } = require('../http') + +const TAO_STATS_SUBQUERY = "https://api.subquery.network/sq/TaoStats/bittensor-indexer"; + +async function getBalance(key) { + const query = `{ + query{ + account(id: "${key}"){ + id + nodeId + balanceTotal + balanceStaked + balanceFree + address + } + } + }`; + + + const { data: { query: { account: { balanceTotal } } } } = await post(TAO_STATS_SUBQUERY, { query, variables: {}, }); + return balanceTotal/1e9 +} + + +async function sumTokens({ balances = {}, owners = [] }) { + let total = 0 + for (const owner of owners) { + const balance = await getBalance(owner) + console.log(owner, balance) + total += balance + } + sdk.util.sumSingleBalance(balances, 'bittensor', total) + return balances +} + +module.exports = { + sumTokens +} \ No newline at end of file diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index aea053b971..8786dc487b 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -9,6 +9,7 @@ const ADDRESSES = require('../coreAssets.json') // https://proxy.atomscan.com/chains.json // https://cosmos-chain.directory/chains/cosmoshub // https://cosmos-chain.directory/chains +// https://celestia.publicnode.com/ const endPoints = { crescent: "https://mainnet.crescent.network:1317", osmosis: "https://lcd.osmosis.zone", @@ -47,7 +48,11 @@ const endPoints = { noble: "https://noble-api.polkachu.com", mantra: "https://api.mantrachain.io", elys: "https://api.elys.network", // https://api.elys.network/#/Query/ElysAmmPoolAll - pryzm: "https://api.pryzm.zone" + pryzm: "https://api.pryzm.zone", + agoric: 'https://as-proxy.gateway.atomscan.com/agoric-lcd', + band: 'https://laozi1.bandchain.org/api', + celestia: 'https://celestia-rest.publicnode.com', + dydx: 'https://dydx-rest.publicnode.com', }; const chainSubpaths = { diff --git a/projects/helper/sumTokens.js b/projects/helper/sumTokens.js index c376231260..9db72db6a3 100644 --- a/projects/helper/sumTokens.js +++ b/projects/helper/sumTokens.js @@ -20,11 +20,25 @@ const helpers = { "bitcoin": require("./chain/bitcoin"), "litecoin": require("./chain/litecoin"), "polkadot": require("./chain/polkadot"), + "acala": require("./chain/acala"), + "bifrost": require("./chain/bifrost"), + "aelf": require("./chain/aelf"), + "aeternity": require("./chain/aeternity"), + "alephium": require("./chain/alephium"), "hedera": require("./chain/hbar"), "stacks": require("./chain/stacks"), "starknet": require("./chain/starknet"), "brc20": require("./chain/brc20"), "doge": require("./chain/doge"), + "bittensor": require("./chain/bittensor"), + "fuel": require("./chain/fuel"), + "radixdlt": require("./chain/radixdlt"), +} + + +// some chains support both evm & non-evm, this is to handle if address provided is not evm +const altEVMHelper = { + "astar": require("./chain/astar"), } const geckoMapping = { @@ -60,11 +74,20 @@ async function sumTokens(options) { if (token) tokens = [token] if (owner) owners = [owner] + const nonEvmOwnerFound = chain !== 'tron' && owners.some(o => !o.startsWith('0x')) + const isAltEvm = altEVMHelper[chain] && nonEvmOwnerFound - if (!ibcChains.includes(chain) && !helpers[chain] && !specialChains.includes(chain)) + if (!ibcChains.includes(chain) && !helpers[chain] && !specialChains.includes(chain) && !isAltEvm) { + if (nonEvmOwnerFound) throw new Error('chain handler missing: ' + chain) return sumTokensEVM(options) + } + + + if (!isAltEvm) + owners = getUniqueAddresses(owners, chain) + else + owners = [...new Set(owners)] // retain case sensitivity - owners = getUniqueAddresses(owners, chain) blacklistedTokens = getUniqueAddresses(blacklistedTokens, chain) if (!['eos'].includes(chain)) tokens = getUniqueAddresses(tokens, chain).filter(t => !blacklistedTokens.includes(t)) @@ -80,7 +103,7 @@ async function sumTokens(options) { options.owners = owners options.tokens = tokens options.blacklistedTokens = blacklistedTokens - let helper = helpers[chain] + let helper = helpers[chain] || altEVMHelper[chain] if (ibcChains.includes(chain)) helper = helpers.cosmos @@ -118,6 +141,7 @@ async function sumTokens(options) { async function getRippleBalance(account) { const body = { "method": "account_info", "params": [{ account }] } const res = await post('https://s1.ripple.com:51234', body) + if (res.result.error === 'actNotFound') return 0 return res.result.account_data.Balance / 1e6 } diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index a3c555ca8f..1324599fc7 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -19,11 +19,12 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru', - 'kopi', 'elys', "pryzm", "mantra", + 'kopi', 'elys', "pryzm", "mantra", 'agoric', 'band', + 'celestia', 'dydx', ] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', - 'eclipse', + 'eclipse', 'acala', 'aelf', 'aeternity', 'alephium', 'bifrost', 'bittensor', ] const transformTokens = { @@ -53,6 +54,18 @@ const fixBalancesTokens = { water: { '0xC807C5FfFf748eF435Ddb99b181846Edd1e70041': { coingeckoId: "water-3", decimals: 18 }, }, + bittorrent: { + [ADDRESSES.null]: { coingeckoId: "bittorrent", decimals: 18 }, + }, + dymension: { + [ADDRESSES.null]: { coingeckoId: "dymension", decimals: 18 }, + }, + energyweb: { + [ADDRESSES.null]: { coingeckoId: "energy-web-token", decimals: 18 }, + }, + etn: { + [ADDRESSES.null]: { coingeckoId: "electroneum", decimals: 18 }, + }, kopi: { 'uasusdc': { coingeckoId: 'usd-coin', decimals: 6 }, 'ucusdc': { coingeckoId: 'usd-coin', decimals: 6 }, From 3ca80d783c7a0bdad47a0c28bd4bd595948dea2a Mon Sep 17 00:00:00 2001 From: brainspacer <87164010+brainspacer@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:36:52 +0400 Subject: [PATCH 1730/1768] Added Base to Fringe's list of supported chains. (#12999) --- projects/fringe-v2/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/fringe-v2/index.js b/projects/fringe-v2/index.js index c87bc5636a..374fb2e88f 100644 --- a/projects/fringe-v2/index.js +++ b/projects/fringe-v2/index.js @@ -5,5 +5,6 @@ getExports({ optimism: "0x088F23ac0c07A3Ce008FB88c4bacFF06FECC6158", polygon: "0x286475366f736fcEeB0480d7233ef169AE614Fe4", ethereum: "0x70467416507B75543C18093096BA4612a9261DB8", - era: "0x8f1d37769a56340542Fb399Cb1cA49d46Aa9fec8" + era: "0x8f1d37769a56340542Fb399Cb1cA49d46Aa9fec8", + base: "0x36a327E6db347fC7431509C02122A829Dc559BFE" }, module.exports) \ No newline at end of file From a929023373912d35c0fcf2c147173d557cebebe2 Mon Sep 17 00:00:00 2001 From: velo-tech <57611908+velo-tech@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:37:09 +0700 Subject: [PATCH 1731/1768] Update index.js Adding 2 new pools (#13000) --- projects/velo/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/velo/index.js b/projects/velo/index.js index 30ae9353b3..38414a3ec4 100644 --- a/projects/velo/index.js +++ b/projects/velo/index.js @@ -13,7 +13,9 @@ const AprFixLockedAddresses = [ "0xEfA6EAbcb5fa35827DDB236046B3DDB6d257022B", "0xc12A93bf62CfD50620BCfDDD903913903DF647B4", "0xc322a2110958c1365e88D88aef65Ebdf335b6E67", - "0x7dd617eacd7Fd35f69275f943Ff82218213796b7" + "0x7dd617eacd7Fd35f69275f943Ff82218213796b7", + "0xba5640094E940B32159daf38Ab8B86fE4D788a3C", + "0x4191754eCB1C460B82818beAA5fb6Ce7728bEbE8" ]; const AprFixLockWithChangeableRatioTvl = [ From be72f530a1627903498d845ed70c9d4a241e9227 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:57:16 +0100 Subject: [PATCH 1732/1768] fix rabbitx --- projects/rabbitx/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/rabbitx/index.js b/projects/rabbitx/index.js index 80f40d495c..3d667aa5c3 100644 --- a/projects/rabbitx/index.js +++ b/projects/rabbitx/index.js @@ -4,11 +4,11 @@ const { staking } = require('../helper/staking') module.exports = { ethereum: { - tvl: sumTokensExport({ owners: ['0xFc7f884DE22a59c0009C91733196b012Aecb8F41', '0x3b8F6D6970a24A58b52374C539297ae02A3c4Ae4', '0x7fAb440A0251dA67B316d2c0431E3Ccf4520Cd42',], tokens: [ADDRESSES.ethereum.USDT]}), + tvl: sumTokensExport({ owners: ['0xFc7f884DE22a59c0009C91733196b012Aecb8F41', '0x3b8F6D6970a24A58b52374C539297ae02A3c4Ae4', '0x7fAb440A0251dA67B316d2c0431E3Ccf4520Cd42','0x1171651A1917C7DE22cF2047D1D7Cb9d97039811',], tokens: [ADDRESSES.ethereum.USDT]}), staking: staking('0x0c378FB17E87B180256a87e3f671cd83Bf3236DB', '0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e'), }, blast: { - tvl: sumTokensExport({ owner: '0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e', tokens: [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]}), + tvl: sumTokensExport({ owners: ['0x3Ba925fdeAe6B46d0BB4d424D829982Cb2F7309e', '0x212f3a03b0e67f2d0afc7bca138707cf9fd6a0e6'], tokens: [ADDRESSES.blast.USDB, ADDRESSES.blast.WETH]}), staking: staking('0x67dBA61709D78806395acDBa3EF9Df686aF5dc24', '0x236bb48fcF61ce996B2C8C196a9258c176100c7d'), }, } From 2d76e54719af1ee75b024b02ec6fcf91fc444561 Mon Sep 17 00:00:00 2001 From: Giuseppe Palazzolo <38705839+palace22@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:59:12 +0100 Subject: [PATCH 1733/1768] Update gAlgo hallmarks with Gov 14 (#13004) --- projects/folks-galgo/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/folks-galgo/index.js b/projects/folks-galgo/index.js index 3591023d4b..42804a463d 100644 --- a/projects/folks-galgo/index.js +++ b/projects/folks-galgo/index.js @@ -26,4 +26,5 @@ module.exports.hallmarks = [ [1711900800, "Algo Gov"], //11 [1719763200, "Algo Gov"], //12 [1727712000, "Algo Gov"], //13 + [1735660800, "Algo Gov"], //14 ] \ No newline at end of file From 2333d9a98f0f59910ddc3f04b06a1c96e2a3dba4 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 7 Jan 2025 16:07:46 +0000 Subject: [PATCH 1734/1768] add taiko --- projects/lineabank/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/lineabank/index.js b/projects/lineabank/index.js index 3b8100dcc0..1cd38ee386 100644 --- a/projects/lineabank/index.js +++ b/projects/lineabank/index.js @@ -9,7 +9,8 @@ const config = { bsquared: '0x72f7a8eb9F83dE366AE166DC50F16074076C3Ea6', bob: '0x77cabFd057Bd7C81c011059F1bf74eC1fBeDa971', btr: '0xf1E25704e75dA0496B46Bf4E3856c5480A3c247F', - mint: '0x0f225d10dd29D4703D42C5E93440F828bf04D150' + mint: '0x0f225d10dd29D4703D42C5E93440F828bf04D150', + taiko: '0x803a61d82BaD2743bE35Be5dC6DEA0CccE82C056' } const abis = { From 8c02c0db169acd054594b7d9527447bf6a685119 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:39:14 +0100 Subject: [PATCH 1735/1768] lint fix --- projects/gate-io/index.js | 11 ++--------- projects/helper/chain/aeternity.js | 1 + 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/projects/gate-io/index.js b/projects/gate-io/index.js index 528f2cfd69..4ead38599b 100644 --- a/projects/gate-io/index.js +++ b/projects/gate-io/index.js @@ -109,7 +109,8 @@ const config = { "0xD793281182A0e3E023116004778F45c29fc14F19", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", "0x85FAa6C1F2450b9caEA300838981C2e6E120C35c", - "0xeb01f8cdae433e7b55023ff0b2da44c4c712dce2" + "0xeb01f8cdae433e7b55023ff0b2da44c4c712dce2", + "0xffeb0f61871acdb4838dfc6d5082f063e738e421" ] }, bitcoin: { @@ -1650,14 +1651,6 @@ const config = { "0xffeb0f61871acdb4838dfc6d5082f063e738e421" ] }, - "era": { - "owners": [ - "0x0d0707963952f2fba59dd06f2b425ace40b492fe", - "0x6596da8b65995d5feacff8c2936f0b7a2051b0d0", - "0x1c4b70a3968436b9a0a9cf5205c787eb81bb558c", - "0xffeb0f61871acdb4838dfc6d5082f063e738e421" - ] - } }; const unsupportedChains = ['aeternity', 'beam', 'binance', 'bitchain', 'bitcoincash', 'bittensor', 'bone', 'callisto', 'chainx', 'clv', 'concordium', 'conflux', 'cmp', 'dash', 'cube', 'defichain', 'edg', 'elastos', 'elys', 'equilibrium', 'evmos', 'filecoin', 'findora', 'flow', 'fusion', 'heiko', 'hydra', 'hyperliquid', 'icon', 'icp', 'interlay', 'kadena', 'karura', 'kava', 'kintsugi', 'kusuma', 'manta_atlantic', 'lisk', 'neo', 'neo3', 'near', 'nibiru', 'nuls', 'ontology', 'oasis', 'parallel', 'pokt', 'polkadex', 'proton', 'reef', 'rvn', 'shiden', 'sora', 'stafi', 'starcoin', 'syscoin', 'stellar', 'telos', 'thorchain', 'velas', 'venom', 'vite', 'waves', 'wax', 'zilliqa', ] diff --git a/projects/helper/chain/aeternity.js b/projects/helper/chain/aeternity.js index a6e70584ad..1ca93d824b 100644 --- a/projects/helper/chain/aeternity.js +++ b/projects/helper/chain/aeternity.js @@ -1,4 +1,5 @@ const axios = require('axios'); +const sdk = require('@defillama/sdk') const endpoint = 'https://mainnet.aeternity.io/v2/accounts'; // Replace with the appropriate endpoint From b83c5e7c11f921c34f63495ccedf113763106ae5 Mon Sep 17 00:00:00 2001 From: shapeshed Date: Tue, 7 Jan 2025 19:51:01 +0000 Subject: [PATCH 1736/1768] Add New Margined Vaults (#13006) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/margined-protocol/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/margined-protocol/index.js b/projects/margined-protocol/index.js index 712030b720..ef90f06432 100644 --- a/projects/margined-protocol/index.js +++ b/projects/margined-protocol/index.js @@ -12,6 +12,8 @@ const osmosisVaults = { OSMORedemption: "osmo15fqmdl8lfl9h0qflljd63ufw9j2m7xmsk3hu5vsn8xpta4hk5chqt7mddc", TIARedemption: "osmo1reyz7pwu7y9e7lmzqg6j4h7jcv32du7n7jhnk2lz93a9lxr56ess2qtgzl", ATOMRedemption: "osmo1hvl5kj4xzdj4udxjv2dzk2zfqhzkd9afqygwq3t84tn53e0250zqrltj48", + DYDXRedemption: "osmo1grs74ux62lukjdlfs9ll4myyulcyjcd4uzwpw3cgnzdygtsspp2se2ense", + BTCUSDC: "osmo193kjx80ag4tck2enuxcprxnrcusemmh5mun5k87c96d7swz6y2dqf39rxe", } const neutronVaults = { @@ -22,6 +24,7 @@ const neutronVaults = { NTRNUSDC: "neutron1t0fl9k43g86sv60ghx9vtwed9rpgtf49rxzm05ff477j23h52c6s0urdc7", TIAUSDC: "neutron1wv8pl7tsatzx6n9yaqfksvu5y0x7j50g6mhy636udwfn3vyqp0hsu7g8yk", ATOMUSDC: "neutron1krqwpk0kmphl93kykavp2fnr88g5rnrpk40c34a55yrl00tmfz0s99ewc6", + TIAFund: "neutron14q3umuuvyv6mndd5acuc3n8u5mlvrrq3kkzrputu3rkhz8nd2uzqmfl4v6", } const config = { From 967a6f5c0b341c469a8c19297c1065b519d84874 Mon Sep 17 00:00:00 2001 From: Himanshu Pandey Date: Wed, 8 Jan 2025 01:45:48 +0530 Subject: [PATCH 1737/1768] Update Subgraph URL (#13003) Co-authored-by: paoloswap <122459630+paoloswap@users.noreply.github.com> --- projects/swapsicle-v2/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/swapsicle-v2/index.js b/projects/swapsicle-v2/index.js index 0d1d0bac44..04d7290f05 100644 --- a/projects/swapsicle-v2/index.js +++ b/projects/swapsicle-v2/index.js @@ -45,11 +45,11 @@ const contracts = { const config = { mantle: { endpoint: - "https://subgraph-api.mantle.xyz/subgraphs/name/cryptoalgebra/analytics", + "https://subgraph-api.mantle.xyz/api/public/f077c8d4-0d6c-42d4-9bbd-050948dc5c86/subgraphs/swapsicle/analytics/prod/gn", }, telos: { endpoint: - "https://test.telos.subgraph.swapsicle.io/subgraphs/name/cryptoalgebra/analytics", + "https://api.telos.0xgraph.xyz/api/public/f59149ee-c99a-41d0-afe4-1c86170a98b0/subgraphs/swapsicle/analytics/prod/gn", }, taiko: { endpoint: @@ -120,4 +120,4 @@ Object.keys(config).forEach((chain) => { (api) => (chain !== 'taiko' ? ZombieVanStake(api) : 0), (api) => (chain !== 'taiko' ? ICZStake(api) : 0), ]); -}); +}); \ No newline at end of file From ff36b9a6c36787faaf2ee35ae8f699548e5d3f4f Mon Sep 17 00:00:00 2001 From: Maxime Desalle <70470326+maxdesalle@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:49:59 -0500 Subject: [PATCH 1738/1768] refactor: add chiliz (#13007) --- projects/sablier-lockup/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/sablier-lockup/index.js b/projects/sablier-lockup/index.js index 590012a459..557bcd413a 100644 --- a/projects/sablier-lockup/index.js +++ b/projects/sablier-lockup/index.js @@ -15,6 +15,7 @@ const config = { polygon: { endpoints: ['CsDNYv9XPUMP8vufuwDVKQrVhsxhzzRHezjLFFKZZbrx'], }, scroll: { endpoints: ['HVcngokCByfveLwguuafrBC34xB65Ne6tpGrXHmqDSrh'], }, xdai: { endpoints: ['EXhNLbhCbsewJPx4jx5tutNXpxwdgng2kmX1J7w1bFyu'], }, + chz: { endpoints: ['HKvzAuGjrEiza11W48waJy5csbhKpkMLF688arwHhT5f'], }, } From c545bb2f5256ae216e90b327a6cbda8b7d213b99 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:40:56 +0100 Subject: [PATCH 1739/1768] update credbull #12990 --- projects/credbull/index.js | 42 +++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/projects/credbull/index.js b/projects/credbull/index.js index fc22664bea..dd5fae54c2 100644 --- a/projects/credbull/index.js +++ b/projects/credbull/index.js @@ -1,15 +1,46 @@ const { getConfig } = require('../helper/cache'); -const STAKING_VAULT_CONTRACT = "0xe4a4d891f02DF7bFFc5ff9e691313DE8a9E76b91"; -const CBL_TOKEN = "0xD6b3d81868770083307840F513A3491960b95cb6"; +const cblConfigArbitrum = { + cbl: "0xD6b3d81868770083307840F513A3491960b95cb6", + cblStakingV2: "0xc0C1DaA773570C041c47cE12c397AdDFD6B7403F", +}; + +const fundConfigPolygon = { + liquidStoneFund: "0x2eda17eb596858566be933b26fae6fa4ee8ccd6d", + fundNavCalculator: "0xcdf038dd3b66506d2e5378aee185b2f0084b7a33", +}; +// Credbull DeFi Vaults v1 TVL (6 or 12 month fixed APY) async function tvl(api) { let vaults = await getConfig('credbull', "https://incredbull.io/api/vaults") vaults = vaults[api.chain] const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + return api.sumTokens({ tokensAndOwners2: [tokens, vaults] }) } +// Credbull Fund, including LiquidStone +async function borrowedFund(api) { + const fundNavResults = await api.multiCall({ + abi: 'function calcNav(address _vaultProxy) external returns (address denominationAsset, uint256 nav)', + calls: [fundConfigPolygon.liquidStoneFund], + target: fundConfigPolygon.fundNavCalculator, + excludeFailed: true, + }) + const vaultBalance = await api.call({ abi: 'erc20:balanceOf', target: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', params: fundConfigPolygon.liquidStoneFund }) + api.add('0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', vaultBalance * -1) + + fundNavResults.forEach((i) => { + api.add(i.denominationAsset, i.nav) + }); + api.getBalancesV2().removeNegativeBalances() +} + +async function polygonTvl(api) { + const vaultBalance = await api.call({ abi: 'erc20:balanceOf', target: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', params: fundConfigPolygon.liquidStoneFund }) + api.add('0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', vaultBalance) +} + async function borrowed(api) { let vaults = await getConfig('credbull', "https://incredbull.io/api/vaults") vaults = vaults[api.chain] @@ -21,12 +52,13 @@ async function borrowed(api) { } async function stakedCbl(api) { - const bals = await api.multiCall({ abi: 'address:totalAssets', calls: [STAKING_VAULT_CONTRACT,] }) - api.add(CBL_TOKEN, bals) + const bals = await api.multiCall({ abi: 'address:totalAssets', calls: [cblConfigArbitrum.cblStakingV2,] }) + api.add(cblConfigArbitrum.cbl, bals) } module.exports = { methodology: 'TVL consist of the sum of every deposit of all vaults for a given asset.', - btr: { tvl, borrowed, }, arbitrum: { tvl, borrowed, staking: stakedCbl }, + btr: { tvl, borrowed, }, + polygon: { borrowed: borrowedFund, tvl: polygonTvl }, }; From f35f4b96a3de837419ad221dd8e770357c4047a8 Mon Sep 17 00:00:00 2001 From: Efrain9502 <137243819+Efrain9502@users.noreply.github.com> Date: Wed, 8 Jan 2025 05:45:12 +0800 Subject: [PATCH 1740/1768] Add Haedal AMM Adapter (#12977) --- projects/haedal-amm/index.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 projects/haedal-amm/index.js diff --git a/projects/haedal-amm/index.js b/projects/haedal-amm/index.js new file mode 100644 index 0000000000..570a986902 --- /dev/null +++ b/projects/haedal-amm/index.js @@ -0,0 +1,19 @@ +const sui = require('../helper/chain/sui') + +async function suiTVL(api) { + const poolObjectID = '0x3b822ea230e2f63860b05d4166ddce7133c0d04838d8f93ce02a88098fe0c609' + const {fields:{pools:{fields: {contents:listPool}}}} = await sui.getObject(poolObjectID) + for( const pool of listPool){ + const {fields:{value: pool_id}} = pool + const {type,fields:{coins:{fields:{base_coin, quote_coin}}}} = await sui.getObject(pool_id) + const [coinA, coinB] = type.replace('>', '').split('<')[1].split(', ') + api.add(coinA, base_coin) + api.add(coinB, quote_coin) + } +} + +module.exports = { + sui: { + tvl: suiTVL, + } +} \ No newline at end of file From 59e557dfbd14108db555db249cad5f6bbb03f9c7 Mon Sep 17 00:00:00 2001 From: xblackbeard <118939025+xblackbeard@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:58:56 -0800 Subject: [PATCH 1741/1768] Add Blacksail Finance TVL adapter for Sonic Mainnet (#12932) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/blacksail/index.js | 48 +++++++++++++++++++++++ projects/helper/cache/sumUnknownTokens.js | 4 +- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 projects/blacksail/index.js diff --git a/projects/blacksail/index.js b/projects/blacksail/index.js new file mode 100644 index 0000000000..28fe21edc3 --- /dev/null +++ b/projects/blacksail/index.js @@ -0,0 +1,48 @@ +const { get } = require('../helper/http') +const { sumUnknownTokens } = require('../helper/unknownTokens') + +async function fetcher() { + const response = await get('https://api.blacksail.finance/stats'); + return response; +} + +const strats = [ + "0x11d58E28048132957FA344Be0Ae3FaE56bA185d2", "0x197329445441dFa5B725eA654A6f910f7669e83f", "0x14E19a5d30E75e252F02f6cFD3985b1b5c64D298", "0x33f02985658B7E2763859154B92A97d90F8Ec7ad", "0xAc57B713C630f188bc2d95c2ae3C27A1DE1DebA1", "0xDBa26763C6DbA30891453897Ef0b85C3Ab126Bb7", "0x6506920CF039087792BE09066712F4dC2186C749", "0xba5eC23096D5579b2052aA77317167E2d905D84E", "0xBdfF1fFbBdA067416c10719804EAC95A49B84EE4", "0xb896e66473915157534C77e06925d88E5b42C057", "0xe15825c6a9e26F47b436b9c3bd76b79daDfd7075", "0x613662ED769c0313cF228d76Fb3863456B6D0C5a", "0x88BF4D8efF256eEaE1Ccc7D5A93f23d88EC178f4", "0x2D5016734838FDf467016c9EF649327FD4110c71", "0x79f28bebd165D2B884f90e60b1946154A58752f1", "0xF5F2A9Ae7673dc28A327684b023A89248F8E8318", "0x0149Ed6072b343E587718f5B82dE7F665E44E403", "0x32259E464d130479eE4cB2c3F375d21A401Ab129", "0x3bBf53067B7C596De32092C789C051f5284c50bD", "0xc48077cDdbD8AC80aC1E7e22D510480ba700cbd1", "0x14A8B80078b818E62A53B39781C357610EC3C16F", "0xC84FcDF81b86D817A28d046eA89752030f6c1c4d", "0x491612ACe7d4ccd255fC5D08710ABF1b666a77DF", "0x4D6C1b29FD117790b8dA064d259821154fe99a42", "0x41b3407e368F96f58645543Bce307493631e303B", "0x30f10efC192BC2095f9085199F3916Cd043b2d44", "0xba6b2bb02854E174Ab9B995261B447154EAbd10a", "0x9Fb4B224Ab74DeB01899C4CdBC037419e2700aCF", "0x96c2BCed606bdddb1f1f0BAfe6a5dc8d746F8484", "0x1175D5fF8fA3cC545eAEb9697eB20237873281B3", "0x4d8C24Ab68B5C32c38BC39ab841B6cCE454C03aD", "0x4f796426B6d8cD98cE814837e03eCa4e8D66Dff3", "0x174A963186BB90852461D189035eB923f6fCc838", "0xAC76a4714f08F04F32DF75D647979f2660239078", "0x978526df622cE9b02b5A32f4D76C73d066b72FEb", "0x33B1C16403fF2BFbA0508e15eAEA58BDA1eDc48C", "0xe8F694512973eBE7D6FDA181872e6Ffb1B7eaB5c" +] + +async function tvl(api) { + const bals = await api.multiCall({ abi: 'uint256:balanceOf', calls: strats }) + const tokens = await api.multiCall({ abi: 'address:staking_token', calls: strats }) + const symbols = await api.multiCall({ abi: 'string:symbol', calls: tokens }) + const ichiVaults = [] + const ichiBals = [] + tokens.forEach((token, i) => { + if (symbols[i] === 'ICHI_Vault_LP') { + ichiVaults.push(token) + ichiBals.push(bals[i]) + } else + api.add(token, bals[i]) + }) + + // resolve ichi vaults + const iSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: ichiVaults }) + const iToken0s = await api.multiCall({ abi: 'address:token0', calls: ichiVaults }) + const iToken1s = await api.multiCall({ abi: 'address:token1', calls: ichiVaults }) + const iTokenBals = await api.multiCall({ abi: 'function getTotalAmounts() view returns (uint256 bal1, uint256 bal2)', calls: ichiVaults }) + + iSupplies.map((_, i) => { + const token0 = iToken0s[i] + const token1 = iToken1s[i] + const ratio = ichiBals[i] / iSupplies[i] + api.add(token0, iTokenBals[i].bal1 * ratio) + api.add(token1, iTokenBals[i].bal2 * ratio) + }) + + return sumUnknownTokens({ api, useDefaultCoreAssets: true, lps: tokens.filter((_, i) => symbols[i].startsWith('v-')), resolveLP: true, allLps: true, }) +} + +module.exports = { + sonic: { + tvl, + } +} \ No newline at end of file diff --git a/projects/helper/cache/sumUnknownTokens.js b/projects/helper/cache/sumUnknownTokens.js index e494f6871c..eb7b1e90a0 100644 --- a/projects/helper/cache/sumUnknownTokens.js +++ b/projects/helper/cache/sumUnknownTokens.js @@ -365,7 +365,7 @@ async function getTokenPrices({ async function sumUnknownTokens({ api, tokensAndOwners = [], balances, coreAssets = [], owner, tokens, chain = 'ethereum', block, restrictTokenRatio, blacklist = [], skipConversion = false, onlyLPs, minLPRatio, log_coreAssetPrices = [], log_minTokenValue = 1e6, owners = [], lps = [], useDefaultCoreAssets = false, cache = {}, resolveLP = false, abis, - ownerTokens = [], + ownerTokens = [], allLps = false, }) { if (api) { chain = api.chain ?? chain @@ -386,7 +386,7 @@ async function sumUnknownTokens({ api, tokensAndOwners = [], balances, ownerTokens.forEach(([tokens, owner]) => tokens.forEach(i => tokensAndOwners.push([i, owner]))) tokensAndOwners = tokensAndOwners.filter(t => !blacklist.includes(t[0])) await sumTokens2({ api, balances, chain, block, tokensAndOwners, skipFixBalances: true, resolveLP, abis }) - const { updateBalances, } = await getTokenPrices({ cache, coreAssets, lps: [...tokensAndOwners.map(t => t[0]), ...lps,], chain, block, restrictTokenRatio, blacklist, log_coreAssetPrices, log_minTokenValue, minLPRatio, abis, }) + const { updateBalances, } = await getTokenPrices({ cache, coreAssets, lps: [...tokensAndOwners.map(t => t[0]), ...lps,], chain, block, restrictTokenRatio, blacklist, log_coreAssetPrices, log_minTokenValue, minLPRatio, abis, allLps, }) await updateBalances(balances, { skipConversion, onlyLPs }) const fixBalances = await getFixBalances(chain) fixBalances(balances) From dbcc21806f0db0b98fde7003b1ec43033b11c9d7 Mon Sep 17 00:00:00 2001 From: Ss5h Date: Wed, 8 Jan 2025 16:38:40 +0900 Subject: [PATCH 1742/1768] add fee vault in btcfi-cdp (#13009) --- projects/helper/bitcoin-book/fetchers.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/projects/helper/bitcoin-book/fetchers.js b/projects/helper/bitcoin-book/fetchers.js index 6a613cf7ee..4d798dcc63 100644 --- a/projects/helper/bitcoin-book/fetchers.js +++ b/projects/helper/bitcoin-book/fetchers.js @@ -10,8 +10,13 @@ module.exports = { btcfi_cdp: async () => { const target = "0x0000000000000000000000000000000000000100"; const api = new sdk.ChainApi({ chain: 'bfc' }) - const round = await api.call({ abi: 'uint32:current_round', target }) - return api.call({ abi: 'function vault_addresses(uint32 pool_round) view returns (string[])', target, params: round }) + const round = await api.call({ abi: 'uint32:current_round', target}) + + const utxoVault = await api.call({ abi: 'function registration_info(address target, uint32 pool_round) view returns (address, string, string, address[], bytes[])', target, params: [target, round] }) + const vault = await api.call({ abi: 'function vault_addresses(uint32 pool_round) view returns (string[])', target, params: round }); + vault.push(utxoVault[2]) + + return vault }, bedrock: async () => { const API_URL = 'https://raw.githubusercontent.com/Bedrock-Technology/uniBTC/refs/heads/main/data/tvl/reserve_address.json' From a88f5c1816fb831bde7745e32998d22f0d618a9f Mon Sep 17 00:00:00 2001 From: stakestone-scdev Date: Wed, 8 Jan 2025 15:44:24 +0800 Subject: [PATCH 1743/1768] update StakeStone Berachain Vault (#13005) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/stakestone-berastone/index.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/projects/stakestone-berastone/index.js b/projects/stakestone-berastone/index.js index 5b9d05f38a..d23640a24e 100644 --- a/projects/stakestone-berastone/index.js +++ b/projects/stakestone-berastone/index.js @@ -5,19 +5,22 @@ const vaultABI = { "assetsBorrowed": "function assetsBorrowed() external view returns (uint256)" } -const Vault = '0x8f88aE3798E8fF3D0e0DE7465A0863C9bbB577f0'; +const ETHVault = '0x8f88aE3798E8fF3D0e0DE7465A0863C9bbB577f0'; +const BTCVault = '0xf401Cc9f467c7046796D9A8b44b0c1348b4DEec7'; -const Tvl = async (api) => { - const usedTVL = await api.call({ abi: vaultABI.assetsBorrowed, target: Vault }) - api.add(ADDRESSES.ethereum.WETH, usedTVL); +const tvl = async (api) => { + // to include assets moved to boyco vault + const usedTVL = await api.call({ abi: vaultABI.assetsBorrowed, target: ETHVault }) + api.add(ADDRESSES.ethereum.STONE, usedTVL); - const underlyings = await api.call({ abi: vaultABI.getUnderlyings, target: Vault }) - return api.sumTokens({ owner: Vault, tokens: underlyings }) + const vaults = [ETHVault, BTCVault]; + const tokens = await api.multiCall({ abi: vaultABI.getUnderlyings, calls: vaults}) + return api.sumTokens({ ownerTokens: tokens.map((t, i) => [t, vaults[i]]) }) } module.exports = { doublecounted: true, ethereum: { - tvl: Tvl, + tvl, } -} +} \ No newline at end of file From a8369b8d086681cbca168d3f02ce2566c817249b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 09:46:49 +0100 Subject: [PATCH 1744/1768] track verus dex: https://eth.verusbridge.io/ --- projects/helper/chains.json | 1 + projects/helper/tokenMapping.js | 10 +++++++- projects/verus-market/index.js | 42 +++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 projects/verus-market/index.js diff --git a/projects/helper/chains.json b/projects/helper/chains.json index 4c34046086..e850239e96 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -351,6 +351,7 @@ "vechain", "velas", "venom", + "verus", "vinu", "vision", "vite", diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 1324599fc7..2a72fef261 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -24,7 +24,7 @@ const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 's ] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', - 'eclipse', 'acala', 'aelf', 'aeternity', 'alephium', 'bifrost', 'bittensor', + 'eclipse', 'acala', 'aelf', 'aeternity', 'alephium', 'bifrost', 'bittensor', 'verus', ] const transformTokens = { @@ -108,6 +108,14 @@ const fixBalancesTokens = { }, mantra: { uom: { coingeckoId: 'mantra-dao', decimals: 6 }, + }, + verus: { + 'i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV': { coingeckoId: 'verus-coin', decimals: 0 }, + 'iGBs4DWztRNvNEJBt4mqHszLxfKTNHTkhM': { coingeckoId: 'dai', decimals: 0 }, + 'iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4': { coingeckoId: 'maker', decimals: 0 }, + 'i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X': { coingeckoId: 'ethereum', decimals: 0 }, + 'iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU': { coingeckoId: 'tbtc', decimals: 0 }, + 'i9oCSqKALwJtcv49xUKS2U2i79h1kX6NEY': { coingeckoId: 'tether', decimals: 0 }, } } diff --git a/projects/verus-market/index.js b/projects/verus-market/index.js new file mode 100644 index 0000000000..a1f3921794 --- /dev/null +++ b/projects/verus-market/index.js @@ -0,0 +1,42 @@ +const { get } = require('../helper/http') +const { transformDexBalances } = require('../helper/portedTokens') + + +// verus bridge address? https://etherscan.io/address/0x71518580f36feceffe0721f06ba4703218cd7f63 +async function tvl(api) { + const { data: { results } } = await get("https://marketapi.verus.services/getdefichaininfo") + + const blacklist = new Set(results.map(i => i.lp_address)) + const processed = new Set() + const data = [] + results.forEach(({ tokens, lp_address, }) => { + if (processed.has(lp_address)) return; + processed.add(lp_address) + + if (tokens.length < 2) return; + + const isXYPair = tokens.length === 2 + const noBlacklistedTokens = !tokens.some(i => blacklist.has(i.i_address)) + tokens = tokens.filter(i => !blacklist.has(i.i_address)) + + if (isXYPair & noBlacklistedTokens) { + data.push({ + token0: tokens[0].i_address, + token1: tokens[1].i_address, + token0Bal: tokens[0].reserves, + token1Bal: tokens[1].reserves, + }) + } else { + tokens.forEach(i => api.add(i.i_address, i.reserves)) + } + }) + + console.log(data.length) + return transformDexBalances({ data, api, }) +} + +module.exports = { + verus: { tvl }, + timetravel: false, + misrepresentedTokens: true, +} \ No newline at end of file From 6c1396d83ccc5c5f14f540cd203934038d39a720 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:33:53 +0100 Subject: [PATCH 1745/1768] bug fixes --- projects/ZTLN/index.js | 43 +++++++++++++----------------- projects/alexar/index.js | 12 +++++---- projects/helper/chain/bittensor.js | 1 - projects/helper/chain/cosmos.js | 3 +++ projects/helper/sumTokens.js | 4 ++- projects/helper/tokenMapping.js | 3 +-- projects/noble/index.js | 1 - projects/union-finance/index.js | 1 - projects/verus-market/index.js | 1 - 9 files changed, 32 insertions(+), 37 deletions(-) diff --git a/projects/ZTLN/index.js b/projects/ZTLN/index.js index f3d9acdf98..c8f8aff25d 100644 --- a/projects/ZTLN/index.js +++ b/projects/ZTLN/index.js @@ -13,38 +13,31 @@ query MyQuery { } `; -async function getTvl() { - try { - const data = await request(endpoint, query); - - const securities = data.securities || []; - - let tokens = 0; - const currencyDecimal = 10 ** 18; - - securities.forEach(security => { - security.secondaryInvestors.forEach(investor => { - const amt = parseFloat(investor.amount); - tokens += amt / currencyDecimal; - }); - }); +async function tvl(api) { + const data = await request(endpoint, query); - const price = 100.5; - const tvl = tokens * price; + const securities = data.securities || []; - // console.log("tvl", tvl); - return tvl; - } catch (error) { - console.error("Error fetching TVL:", error); - return 0; - } + let tokens = 0; + const currencyDecimal = 10 ** 18; + + securities.forEach(security => { + security.secondaryInvestors.forEach(investor => { + const amt = parseFloat(investor.amount); + tokens += amt / currencyDecimal; + }); + }); + + const price = 100.5; + const tvl = tokens * price + api.addUSDValue(tvl); } module.exports = { timetravel: false, + misrepresentedTokens: true, methodology: "The value in RWA held by the protocol", ethereum: { - fetch: getTvl + tvl }, - fetch: getTvl }; \ No newline at end of file diff --git a/projects/alexar/index.js b/projects/alexar/index.js index f904f2c268..73cbe4349d 100644 --- a/projects/alexar/index.js +++ b/projects/alexar/index.js @@ -1,8 +1,6 @@ const { getConfig } = require('../helper/cache') const { sumTokens } = require('../helper/sumTokens') -const blacklistedAssets = ['uaxl']; - const chainMapping = { avax: 'avalanche', cosmos: 'cosmoshub', @@ -11,9 +9,12 @@ const chainMapping = { }; const blackListChains = ['comdex', 'crescent']; -const chainListSupply = ['juno', 'cosmos', 'carbon', 'injective', 'kujira', 'osmosis', 'persistence', 'stargaze', 'secret', 'stargaze', 'umee', 'evmos', 'terra2']; +const chainListSupply = ['juno', 'cosmos', 'injective', 'kujira', 'osmosis', 'persistence', 'stargaze', 'secret', 'stargaze', 'umee', 'evmos', 'terra2']; const chainListTotal = ['avax', 'bsc', 'moonbeam', 'polygon', 'fantom', 'arbitrum', 'aurora', 'celo', 'kava', 'mantle', 'ethereum', 'base']; +const blacklistedTokensChain = { + ethereum: ['0x946fb08103b400d1c79e07acCCDEf5cfd26cd374'], // KIP tvl is higher than the circulating supply +} chainListSupply.concat(chainListTotal).forEach(chain => { if (blackListChains.includes(chain)) { @@ -25,6 +26,7 @@ chainListSupply.concat(chainListTotal).forEach(chain => { const config = await getConfig('alexar', 'https://api.axelarscan.io/api/getTVL') const tokensAndOwners = [] const owners = [] + const blacklistedTokens = blacklistedTokensChain[chain] || [] const mappedChain = chainMapping[chain] || chain; config.data.forEach(({ tvl: { [mappedChain]: assetTvl } = {} }) => { if (!assetTvl) return; @@ -42,8 +44,8 @@ chainListSupply.concat(chainListTotal).forEach(chain => { } }) if (tokensAndOwners.length > 0) - return api.sumTokens({ tokensAndOwners }) - return sumTokens({ chain, owners }) + return api.sumTokens({ tokensAndOwners, blacklistedTokens }) + return sumTokens({ chain, owners, blacklistedTokens, }) } }); diff --git a/projects/helper/chain/bittensor.js b/projects/helper/chain/bittensor.js index a06165c3a7..2278ee6547 100644 --- a/projects/helper/chain/bittensor.js +++ b/projects/helper/chain/bittensor.js @@ -27,7 +27,6 @@ async function sumTokens({ balances = {}, owners = [] }) { let total = 0 for (const owner of owners) { const balance = await getBalance(owner) - console.log(owner, balance) total += balance } sdk.util.sumSingleBalance(balances, 'bittensor', total) diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index 8786dc487b..9fa4cb73c2 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -10,6 +10,7 @@ const ADDRESSES = require('../coreAssets.json') // https://cosmos-chain.directory/chains/cosmoshub // https://cosmos-chain.directory/chains // https://celestia.publicnode.com/ +// https://api.axelarscan.io/api/getTVL const endPoints = { crescent: "https://mainnet.crescent.network:1317", osmosis: "https://lcd.osmosis.zone", @@ -53,6 +54,8 @@ const endPoints = { band: 'https://laozi1.bandchain.org/api', celestia: 'https://celestia-rest.publicnode.com', dydx: 'https://dydx-rest.publicnode.com', + carbon: 'https://rest.lavenderfive.com/carbon/', + evmos: 'https://evmos-api.polkachu.com', }; const chainSubpaths = { diff --git a/projects/helper/sumTokens.js b/projects/helper/sumTokens.js index 9db72db6a3..f1cc248167 100644 --- a/projects/helper/sumTokens.js +++ b/projects/helper/sumTokens.js @@ -39,6 +39,7 @@ const helpers = { // some chains support both evm & non-evm, this is to handle if address provided is not evm const altEVMHelper = { "astar": require("./chain/astar"), + "evmos": helpers.cosmos, } const geckoMapping = { @@ -74,7 +75,8 @@ async function sumTokens(options) { if (token) tokens = [token] if (owner) owners = [owner] - const nonEvmOwnerFound = chain !== 'tron' && owners.some(o => !o.startsWith('0x')) + const evmAddressExceptions = new Set(['tron', 'xdc']) + const nonEvmOwnerFound = !evmAddressExceptions.has(chain) && owners.some(o => !o.startsWith('0x')) const isAltEvm = altEVMHelper[chain] && nonEvmOwnerFound if (!ibcChains.includes(chain) && !helpers[chain] && !specialChains.includes(chain) && !isAltEvm) { diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 2a72fef261..207ee2db7d 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -1,4 +1,3 @@ -const { decimals } = require('@defillama/sdk/build/erc20') let coreAssets = require('./coreAssets.json') const ADDRESSES = coreAssets const nullAddress = ADDRESSES.null @@ -20,7 +19,7 @@ coreAssets = JSON.parse(JSON.stringify(coreAssets)) const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua', 'sei', 'archway', 'migaloo', 'secret', 'aura', 'xpla', 'bostrom', 'joltify', 'nibiru', 'kopi', 'elys', "pryzm", "mantra", 'agoric', 'band', - 'celestia', 'dydx', + 'celestia', 'dydx', 'carbon' ] const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo', 'mvc', 'renec', 'doge', 'stellar', 'massa', diff --git a/projects/noble/index.js b/projects/noble/index.js index 1eaac59235..2b8e8580ed 100644 --- a/projects/noble/index.js +++ b/projects/noble/index.js @@ -8,7 +8,6 @@ async function tvl(api) { do { const { supply, pagination } = await queryV1Beta1({ api, url: `${NOBLE_SUPPLY_URL}?pagination.key=${key || ''}` }) key = pagination.next_key - console.log(key) supply.forEach(i => api.add(i.denom, i.amount)) } while (key); IGNORE_DENOMS.forEach(denom => api.removeTokenBalance(denom)) diff --git a/projects/union-finance/index.js b/projects/union-finance/index.js index 86474d309a..ce9c466c5b 100644 --- a/projects/union-finance/index.js +++ b/projects/union-finance/index.js @@ -33,7 +33,6 @@ const abi = { async function tvl(api) { const { userManager, underlying, uToken } = config[api.chain] - console.log({ userManager, underlying, uToken }) const bals = await api.batchCall([ { target: userManager, abi: abi.totalStaked }, { target: uToken, abi: abi.totalRedeemable }, diff --git a/projects/verus-market/index.js b/projects/verus-market/index.js index a1f3921794..6b08dad2ff 100644 --- a/projects/verus-market/index.js +++ b/projects/verus-market/index.js @@ -31,7 +31,6 @@ async function tvl(api) { } }) - console.log(data.length) return transformDexBalances({ data, api, }) } From f6a4ed672dae3e51f981eb10ea66583ca587b80a Mon Sep 17 00:00:00 2001 From: Arpit Singh Date: Wed, 8 Jan 2025 15:09:36 +0530 Subject: [PATCH 1746/1768] LogX V2 - Rari, Mint and Polygon chain addition (#13011) --- projects/logx-v2/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/logx-v2/index.js b/projects/logx-v2/index.js index adc4a2f6c0..cbf99a443d 100644 --- a/projects/logx-v2/index.js +++ b/projects/logx-v2/index.js @@ -15,7 +15,10 @@ const config = { kroma: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], taiko: ['0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8','0x1d9B044393804CCFa2da3127470C9F65D4E0E5E6'], optimism: ['0x650e8941E4d90b70576fDF1b05dbDc962DA2cab8','0x4417613C0fe034f7D333BF8a6247EaAAF1d51965'], - linea: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'] + linea: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e','0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db'], + rari: ['0x1C70cc9F8236C4Ae2ce3d34d4Da4696Aea611f90',], + mint: ['0xaca5146bc74230e77DAB543d3a14F26c8c63939e', '0xdB29A58A53Ac438a5E325f1d7a41346aA63b7ece',], + polygon: ['0x1e7c3B771b27A29116E4Df5a2DCC54FDaAC902db', '0xaca5146bc74230e77DAB543d3a14F26c8c63939e',], } Object.keys(config).forEach(chain => { From 89b6ee3e6f7a58d128faa8b08ab5664def380f59 Mon Sep 17 00:00:00 2001 From: Benny Date: Wed, 8 Jan 2025 20:40:54 +1100 Subject: [PATCH 1747/1768] Add Fraxtal and Optimism to Curve Llamalend (#13012) --- projects/llamalend-curve/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/llamalend-curve/index.js b/projects/llamalend-curve/index.js index f9790d294b..00d34d51fd 100644 --- a/projects/llamalend-curve/index.js +++ b/projects/llamalend-curve/index.js @@ -1,7 +1,9 @@ const chainContracts = { ethereum: "0xeA6876DDE9e3467564acBeE1Ed5bac88783205E0", - arbitrum: "0xcaec110c784c9df37240a8ce096d352a75922dea" + arbitrum: "0xcaec110c784c9df37240a8ce096d352a75922dea", + fraxtal: "0xf3c9bdAB17B7016fBE3B77D17b1602A7db93ac66", + optimism: "0x5ea8f3d674c70b020586933a0a5b250734798bef" } const uniq = (arr) => Array.from(new Set(arr)) From 637ec907e8ead490f65112a1052e98d8a5d9e12a Mon Sep 17 00:00:00 2001 From: Nguyen Phu Cuong Date: Wed, 8 Jan 2025 16:43:37 +0700 Subject: [PATCH 1748/1768] Add Nodo Project (#13013) --- projects/nodo/index.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 projects/nodo/index.js diff --git a/projects/nodo/index.js b/projects/nodo/index.js new file mode 100644 index 0000000000..ecfcc41879 --- /dev/null +++ b/projects/nodo/index.js @@ -0,0 +1,41 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const config = { + avax: { + chaingeAddress: "0xB4623b02A0D9bCf0282600C08E4383c04A0E0AfC", + tokens: [ + "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7" + ] + }, + polygon: { + chaingeAddress: "0x1e579a1AE5DA042C925902F3Efec1035C9329283", + tokens: [ + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F" + ] + }, + base: { + chaingeAddress: "0xEcc253aeAeC63bcB2b8eC6A739A0972A817219A3", + tokens: [ + "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" + ] + }, + bsc: { + chaingeAddress: "0x916A6314e9d8E51BEB18b355ad52b4506262620f", + tokens: [ + "0x55d398326f99059fF775485246999027B3197955" + ] + }, + celo: { + chaingeAddress: "0x65583D94d848E398dE3ef8382e5827000eb99961", + tokens: [ + "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e" + ] + } +} + +Object.keys(config).forEach(chain => { + const { chaingeAddress, tokens } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owner: chaingeAddress, tokens }) + } +}) From 97675e97143ef8f524e2af46c7d435acd4b7c4fe Mon Sep 17 00:00:00 2001 From: astroKo <58788656+astroKo@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:09:22 +0000 Subject: [PATCH 1749/1768] yel-finance: add new potion (#13017) --- projects/yel/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/yel/index.js b/projects/yel/index.js index 2fc07724cb..9b499ba978 100644 --- a/projects/yel/index.js +++ b/projects/yel/index.js @@ -53,7 +53,8 @@ const config = { [ADDRESSES.sonic['USDC.e'], '0x995171196618b7FE0F0C6D606D79583DD1c8ff60', '0x5573aDB63D3eb7473C68Fdb2033CCbAc51a0Be0a'], ['0x79bbF4508B1391af3A0F4B30bb5FC4aa9ab0E07C', '0x92Dd17b19F74E696502Ee9eD478901F24c5d9a9A', '0x153ea9DF2B7977A8670a6EdF10b814d229D8d9Ef'], - ['0x0e0Ce4D450c705F8a0B6Dd9d5123e3df2787D16B', '0xecf1b589F47511D23b026eF53D16FEbB89Aa5f3A', '0x590159e00c05E4C91f562Fe862cc90d75af5d28b'] + ['0x0e0Ce4D450c705F8a0B6Dd9d5123e3df2787D16B', '0xecf1b589F47511D23b026eF53D16FEbB89Aa5f3A', '0x590159e00c05E4C91f562Fe862cc90d75af5d28b'], + ['0x9fDbC3f8Abc05Fa8f3Ad3C17D2F806c1230c4564', '0xdE31054Fb0ee7c6C39641db2e677011E276644aC', '0x017bdAd7eb46fC2721a5A148D43C0c25A11E740c'] ], } From e0457bd0e9f077fa9c66483d176094576662415b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:36:16 +0100 Subject: [PATCH 1750/1768] minor refactor --- projects/cronos-zk/index.js | 30 +++--------------------------- projects/txBridge/index.js | 30 +++--------------------------- projects/txBridge/util.js | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+), 54 deletions(-) create mode 100644 projects/txBridge/util.js diff --git a/projects/cronos-zk/index.js b/projects/cronos-zk/index.js index 8de3a06614..a0e11b966b 100644 --- a/projects/cronos-zk/index.js +++ b/projects/cronos-zk/index.js @@ -1,31 +1,7 @@ -const { sumTokens2 } = require("../helper/unwrapLPs"); - -const target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" -const gasQuery = '0x0000000000000000000000000000000000000001' -const gasAddress = '0x0000000000000000000000000000000000000000' -const chainId = 388 +const getTvl = require("../txBridge/util") module.exports = { ethereum: { - tvl: async (api) => { - const totalBalances = await sumTokens2({ - api, - owner: target, - fetchCoValentTokens: true, - }) - const balances = await api.multiCall({ - calls: [gasQuery, ...Object.keys(totalBalances)].map(token => ({ - target, params: [chainId, token.substring(token.indexOf(':') + 1)] - })), - abi: { "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "l1Token", "type": "address" }], "name": "chainBalance", "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], "stateMutability": "view", "type": "function" }, - permitFailure: true, - withMetadata: true - }) - api._balances._balances = {} - balances.map(call => { - const token = call.input.params[1] - api.add(token == gasQuery ? gasAddress : token, call.output) - }) - } + tvl: async (api) => getTvl(api, { chainId: 388, }), }, -}; +} diff --git a/projects/txBridge/index.js b/projects/txBridge/index.js index bdb3b6df1d..a58abcc44a 100644 --- a/projects/txBridge/index.js +++ b/projects/txBridge/index.js @@ -1,31 +1,7 @@ -const { sumTokens2 } = require("../helper/unwrapLPs"); - -const target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" -const gasQuery = '0x0000000000000000000000000000000000000001' -const gasAddress = '0x0000000000000000000000000000000000000000' -const chainId = 324 +const getTvl = require("./util") module.exports = { ethereum: { - tvl: async (api) => { - const totalBalances = await sumTokens2({ - api, - owner: target, - fetchCoValentTokens: true, - }) - const balances = await api.multiCall({ - calls: [gasQuery, ...Object.keys(totalBalances)].map(token => ({ - target, params: [chainId, token.substring(token.indexOf(':') + 1)] - })), - abi: { "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "l1Token", "type": "address" }], "name": "chainBalance", "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], "stateMutability": "view", "type": "function" }, - permitFailure: true, - withMetadata: true - }) - api._balances._balances = {} - balances.map(call => { - const token = call.input.params[1] - api.add(token == gasQuery ? gasAddress : token, call.output) - }) - } + tvl: async (api) => getTvl(api, { chainId: 324, }), }, -}; +} diff --git a/projects/txBridge/util.js b/projects/txBridge/util.js new file mode 100644 index 0000000000..bbff27fda1 --- /dev/null +++ b/projects/txBridge/util.js @@ -0,0 +1,20 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const _target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" +const gasQuery = '0x0000000000000000000000000000000000000001' +const gasAddress = '0x0000000000000000000000000000000000000000' + +module.exports = async (api, { chainId, target = _target } = {}) => { + const totalBalances = await sumTokens2({ api, owner: target, fetchCoValentTokens: true, balances: {} }) + const tokens = Object.keys(totalBalances).map(token => token.split(':')[1]).filter(token => token !== gasAddress) + tokens.unshift(gasQuery) + const balances = (await api.multiCall({ + target, + calls: tokens.map(token => ({ params: [chainId, token] })), + abi: "function chainBalance(uint256 chainId, address l1Token) view returns (uint256 balance)", + permitFailure: true, + })).map(i => i ?? 0) + tokens[0] = gasAddress + api.add(tokens, balances) + return api.getBalances() +} From d1834c699d5ee1a2540c4f198eec1b295b323a58 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:39:18 +0100 Subject: [PATCH 1751/1768] track grvt.io --- projects/grvt-io/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/grvt-io/index.js diff --git a/projects/grvt-io/index.js b/projects/grvt-io/index.js new file mode 100644 index 0000000000..8f0e6562d9 --- /dev/null +++ b/projects/grvt-io/index.js @@ -0,0 +1,7 @@ +const getTvl = require("../txBridge/util") + +module.exports = { + ethereum: { + tvl: async (api) => getTvl(api, { chainId: 325, }), + }, +} From 3354207152ced556431d4692fe272a2f5b59cf93 Mon Sep 17 00:00:00 2001 From: Shell Yu Date: Wed, 8 Jan 2025 23:36:31 +0800 Subject: [PATCH 1752/1768] update project equilibria adapter (#13018) --- projects/equilibria/index.js | 171 +++++++++++++++++------------------ 1 file changed, 85 insertions(+), 86 deletions(-) diff --git a/projects/equilibria/index.js b/projects/equilibria/index.js index 14c6cc39e7..9441ff0d0e 100644 --- a/projects/equilibria/index.js +++ b/projects/equilibria/index.js @@ -1,114 +1,113 @@ -const sdk = require("@defillama/sdk"); -const { sumTokensExport } = require("../helper/unwrapLPs"); - -const contracts = { +const config = { ethereum: { - boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", - staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", - eqbAddress: "0xfE80D611c6403f70e5B1b9B722D2B3510B740B2B", - eqbRewardsAddress: "0xd8967B2B15b3CDF96039b7407813B4037f73ec27", - pendleAddress: "0x808507121b80c02388fad14726482e061b8da827", + pendleBooster: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", + pendleProxy: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", + eqb: "0xfE80D611c6403f70e5B1b9B722D2B3510B740B2B", + vlEqb: "0xd8967B2B15b3CDF96039b7407813B4037f73ec27", + pendle: "0x808507121b80c02388fad14726482e061b8da827", + ePendle: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", + ePendleReward: "0x357F55b46821A6C6e476CC32EBB2674cD125e849", }, arbitrum: { - boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", - staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", - eqbRewardsAddress: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", - pendleAddress: "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", + pendleBooster: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", + pendleProxy: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", + eqb: "0xBfbCFe8873fE28Dfa25f1099282b088D52bbAD9C", + vlEqb: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", + pendle: "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", + ePendle: "0x3EaBE18eAE267D1B57f917aBa085bb5906114600", + ePendleReward: "0x9739d1E515C5291faA26D92a5D02761b6BbB4D6F", }, bsc: { - boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", - staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", - eqbRewardsAddress: "0x0140dE476f49B6B42f7b73612b6dc317aB91D3BC", - pendleAddress: "0xb3Ed0A426155B79B898849803E3B36552f7ED507", + pendleBooster: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", + pendleProxy: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", + eqb: "0x374Ca32fd7934c5d43240E1e73fa9B2283468609", + vlEqb: "0x0140dE476f49B6B42f7b73612b6dc317aB91D3BC", + pendle: "0xb3Ed0A426155B79B898849803E3B36552f7ED507", + ePendle: "0x898CA9B3ef8b6a30dA5fc7202f70E7992b3602B3", + ePendleReward: "0xE2dB20ce7D845f99338BbA4bdFF00e733801Dde7", }, optimism: { - boosterAddress: "0x18C61629E6CBAdB85c29ba7993f251b3EbE2B356", - staker: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", - eqbRewardsAddress: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", - pendleAddress: "0xBC7B1Ff1c6989f006a1185318eD4E7b5796e66E1", + pendleBooster: "0x18C61629E6CBAdB85c29ba7993f251b3EbE2B356", + pendleProxy: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", + eqb: "0xaf3A6f67Af1624d3878A8d30b09FAe7915DcA2a0", + vlEqb: "0x22Fc5A29bd3d6CCe19a06f844019fd506fCe4455", + pendle: "0xBC7B1Ff1c6989f006a1185318eD4E7b5796e66E1", + ePendle: "0x86a20111fEae36f3511A30c0640d2099b3A818C5", + ePendleReward: "0x898CA9B3ef8b6a30dA5fc7202f70E7992b3602B3", }, mantle: { - boosterAddress: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", - staker: "0x479603DE0a8B6D2f4D4eaA1058Eea0d7Ac9E218d", - eqbRewardsAddress: "0x71e0ce200a10f0bBFB9F924fE466ACf0B7401EbF", - pendleAddress: "0xd27B18915e7acc8FD6Ac75DB6766a80f8D2f5729", + pendleBooster: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", + pendleProxy: "0x479603DE0a8B6D2f4D4eaA1058Eea0d7Ac9E218d", + eqb: "0x3e7eF8f50246f725885102E8238CBba33F276747", + vlEqb: "0x71e0ce200a10f0bBFB9F924fE466ACf0B7401EbF", + pendle: "0xd27B18915e7acc8FD6Ac75DB6766a80f8D2f5729", + ePendle: "0x6EE066b813cd8C2586D86F79eD0025e81801b923", + ePendleReward: "0x741620136cf08a782c1Df1Fc9E3cAA760Cc4Fecc", + }, + base: { + pendleBooster: "0x2583A2538272f31e9A15dD12A432B8C96Ab4821d", + pendleProxy: "0x920873E5b302A619C54c908aDFB77a1C4256A3B8", + eqb: "0x010cd9b9be7E416E07793dc6Ce2F45868A80a50a", + vlEqb: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", + pendle: "0xA99F6e6785Da0F5d6fB42495Fe424BCE029Eeb3E", + ePendle: "0x741620136cf08a782c1Df1Fc9E3cAA760Cc4Fecc", + ePendleReward: "0xB2D167EB1Fff17EbD727B0a21e7f5F50424264c8", } }; -async function tvl(chain, block) { - const balances = {}; +const abi = { + "poolLength": "uint256:poolLength", + "poolInfo": "function poolInfo(uint256) view returns (address market, address token, address rewardPool, bool shutdown)" +}; + +const { staking } = require('../helper/staking') + +async function tvl(api) { + const { pendleBooster, vlEqb, pendleProxy, pendle } = config[api.chain]; - if (chain === "ethereum") { - const pendleLocked = await sdk.api2.abi.call({ + if (api.chain === "ethereum") { + const pendleLocked = await api.call({ target: "0x4f30A9D41B80ecC5B94306AB4364951AE3170210", - params: contracts[chain].staker, + params: pendleProxy, abi: "erc20:balanceOf", - block, }); - sdk.util.sumSingleBalance( - balances, - contracts[chain].pendleAddress, + api.add( + pendle, pendleLocked ); } - const poolLength = await sdk.api2.abi.call({ - chain, - block, - target: contracts[chain].boosterAddress, - abi: "function poolLength() view returns (uint256)", + const poolInfos = await api.fetchList({ + lengthAbi: abi.poolLength, + itemAbi: abi.poolInfo, + target: pendleBooster, }); - - const poolInfos = await Promise.all( - Array.from(Array(Number(poolLength)).keys()).map((params) => - sdk.api2.abi.call({ - chain, - block, - target: contracts[chain].boosterAddress, - params, - abi: "function poolInfo(uint256) view returns (address market, address token, address rewardPool, bool shutdown)", - }) - ) - ); // multicall fails here - - const { output: gaugeBalances } = await sdk.api.abi.multiCall({ - abi: "erc20:balanceOf", - calls: Array.from(new Set(poolInfos.map((p) => p.market))).map((i) => ({ - target: i, - params: contracts[chain].staker, - })), - chain, - block, - }); - - gaugeBalances.forEach(({ output, input }, i) => - sdk.util.sumSingleBalance( - balances, - chain + - ":" + - poolInfos.find( - (p) => p.market.toLowerCase() === input.target.toLowerCase() - ).market, - output - ) - ); - - return balances; + const poolTokens = poolInfos.map(pool => pool.market); + const blacklistedTokens = []; + if (vlEqb) blacklistedTokens.push(vlEqb); + return api.sumTokens({ tokens: poolTokens, owner: pendleProxy, blacklistedTokens }); } -const chains = ["ethereum", "arbitrum", 'bsc', 'optimism', 'mantle']; - -module.exports = { - doublecounted: true, -}; +Object.keys(config).forEach((chain) => { + const { eqb, vlEqb, ePendle, ePendleReward } = config[chain]; -chains.forEach((chain) => { module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => tvl(chain, block), + tvl, }; -}); -module.exports.ethereum.staking = sumTokensExport({ - owner: contracts.ethereum.eqbRewardsAddress, - tokens: [contracts.ethereum.eqbAddress], + const stakingContracts = []; + const stakingTokens= []; + if (eqb && vlEqb) { + stakingContracts.push(vlEqb); + stakingTokens.push(eqb); + } + + if (ePendle && ePendleReward) { + stakingContracts.push(ePendleReward); + stakingTokens.push(ePendle); + } + + if (stakingContracts.length) module.exports[chain].staking = staking(stakingContracts, stakingTokens); }); + +module.exports.doublecounted = true; From ec0202eca183ed863772ae587a5e6d1ed8babe25 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 8 Jan 2025 18:54:38 +0000 Subject: [PATCH 1753/1768] add hallmark --- projects/fisclend/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/fisclend/index.js b/projects/fisclend/index.js index da3d724db5..6715c16c29 100644 --- a/projects/fisclend/index.js +++ b/projects/fisclend/index.js @@ -1,6 +1,9 @@ const { compoundExports2 } = require('../helper/compound') module.exports = { + hallmarks: [ + [1735862400, "Rug Pull"] + ], apechain: compoundExports2({comptroller: '0xd11443B079D62700061F7311fC48C40B30BCEA91', cether: '0xB1974B31b60C7134978e5574F5f1fC8A16535b5D'}), wc: compoundExports2({comptroller: '0xE3de48DCF4968B419BB55421D6B5bF2c049DaFB2', cether: '0xCD04992D1D8d42BB432AD794103c3B498016Da88'}), sonic: compoundExports2({comptroller: '0x65E8768B86350875DDE19A791f06FfB7a4ADA71b', cether: '0x0B19823EF1F4a6B1f7c52336F428F1a92e9f645E'}), From 9929231f717c83e1e0aaf26ad1d50330e839f44c Mon Sep 17 00:00:00 2001 From: Real Shaman <85087525+realdealshaman@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:06:12 +0000 Subject: [PATCH 1754/1768] Update total staking Update total staking --- projects/apwine/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/apwine/index.js b/projects/apwine/index.js index 79522802e0..65d76621ae 100644 --- a/projects/apwine/index.js +++ b/projects/apwine/index.js @@ -108,7 +108,7 @@ module.exports = { doublecounted: true, ethereum: { tvl: tvl_from_registry('ethereum'), - staking: staking(veAPW, APW), + //staking: staking(veAPW, APW), }, polygon: { tvl: tvl_from_registry('polygon'), From cd34958c281ce5c56a0b0b0566c78bd805d9055b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:09:07 +0100 Subject: [PATCH 1755/1768] curve: track sonic --- projects/curve/contracts.json | 7 +++++++ projects/curve/index.js | 34 +++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/projects/curve/contracts.json b/projects/curve/contracts.json index 20f177d9e6..3ad5498ed0 100644 --- a/projects/curve/contracts.json +++ b/projects/curve/contracts.json @@ -214,5 +214,12 @@ "CurveStableswapFactoryNG": "0xd7E72f3615aa65b92A4DBdC211E296a35512988B", "CurveTwocryptoFactoryNG": "0x5Ea9DD3b6f042A34Df818C6c1324BC5A7c61427a", "CurveTricryptoFactoryNG": "0x7Ca46A636b02D4aBC66883D7FF164bDE506DC66a" + }, + "sonic": { + "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "wrapped": "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38", + "CurveStableswapFactoryNG": "0x7C2085419BE6a04f4ad88ea91bC9F5C6E6C463D8", + "CurveTwocryptoFactoryNG": "0x1A83348F9cCFD3Fe1A8C0adBa580Ac4e267Fe495", + "CurveTricryptoFactoryNG": "0x635742dCC8313DCf8c904206037d962c042EAfBd" } } \ No newline at end of file diff --git a/projects/curve/index.js b/projects/curve/index.js index 0d7b871d27..eb3247ee67 100644 --- a/projects/curve/index.js +++ b/projects/curve/index.js @@ -11,14 +11,14 @@ const contracts = require("./contracts.json"); const { getLogs } = require('../helper/cache/getLogs') const chains = [ - "ethereum", //-200M - "polygon", //-40M - "arbitrum", //G - "aurora", //G - "avax", //-30M - "fantom", //-80M - "optimism", //-6M - "xdai", //G + "ethereum", + "polygon", + "arbitrum", + "aurora", + "avax", + "fantom", + "optimism", + "xdai", "moonbeam", "celo", "kava", @@ -29,7 +29,9 @@ const chains = [ "mantle", "taiko", "corn", -]; // Object.keys(contracts); + "sonic", + "ink", +]; const registryIds = { stableswap: 0, stableFactory: 3, @@ -94,7 +96,7 @@ async function getPools(block, chain) { let { registriesMapping, addressProvider } = contracts[chain] if (!registriesMapping) { registriesMapping = {}; - if(addressProvider){ + if (addressProvider) { (await sdk.api.abi.multiCall({ block, chain, calls: Object.values(registryIds).map(r => ({ params: r })), @@ -259,7 +261,7 @@ module.exports = chainTypeExports(chains); module.exports.ethereum["staking"] = staking( contracts.ethereum.veCRV, contracts.ethereum.CRV -); +); module.exports.harmony = { tvl: async (api) => { @@ -267,10 +269,12 @@ module.exports.harmony = { // harmony hack return {}; } - return api.sumTokens({ owner: '0xC5cfaDA84E902aD92DD40194f0883ad49639b023', tokens: [ - "0xef977d2f931c1978db5f6747666fa1eacb0d0339", - "0x3c2b8be99c50593081eaa2a724f0b8285f5aba8f" - ]}) + return api.sumTokens({ + owner: '0xC5cfaDA84E902aD92DD40194f0883ad49639b023', tokens: [ + "0xef977d2f931c1978db5f6747666fa1eacb0d0339", + "0x3c2b8be99c50593081eaa2a724f0b8285f5aba8f" + ] + }) } }; From be0257253988534b74a94c7b1b783235c1073072 Mon Sep 17 00:00:00 2001 From: Antonio Viggiano Date: Wed, 8 Jan 2025 17:25:38 -0300 Subject: [PATCH 1756/1768] Add SizeCredit (mainnet) (#13024) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/size-credit/index.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/projects/size-credit/index.js b/projects/size-credit/index.js index 90d31b0c95..e2f29e7fc5 100644 --- a/projects/size-credit/index.js +++ b/projects/size-credit/index.js @@ -1,4 +1,7 @@ -const SIZE_FACTORY = '0x330Dc31dB45672c1F565cf3EC91F9a01f8f3DF0b' +const config = { + base: '0x330Dc31dB45672c1F565cf3EC91F9a01f8f3DF0b', + ethereum: '0x3A9C05c3Da48E6E26f39928653258D7D4Eb594C1' +} const abis = { SizeFactory: { @@ -13,7 +16,7 @@ const abis = { } async function tvl(api) { - const markets = await api.call({ abi: abis.SizeFactory.getMarkets, target: SIZE_FACTORY }) + const markets = await api.call({ abi: abis.SizeFactory.getMarkets, target: config[api.chain] }) const datas = await api.multiCall({ abi: abis.Size.data, calls: markets }) const borrowATokens = datas.map(data => data.borrowAToken) @@ -32,7 +35,7 @@ async function tvl(api) { } async function borrowed(api) { - const markets = await api.call({ abi: abis.SizeFactory.getMarkets, target: SIZE_FACTORY }) + const markets = await api.call({ abi: abis.SizeFactory.getMarkets, target: config[api.chain] }) const datas = await api.multiCall({ abi: abis.Size.data, calls: markets }) const debtTokens = datas.map(data => data.debtToken) @@ -43,9 +46,8 @@ async function borrowed(api) { return api.add(underlyingBorrowTokens, totalDebts) } -module.exports = { - base: { - tvl, - borrowed +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl, borrowed, } -} +}) From 7a5db6ce90b1f040ec794896ea8c200980c733fd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:28:18 +0100 Subject: [PATCH 1757/1768] fisclend: set borrowed as 0 --- projects/fisclend/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/fisclend/index.js b/projects/fisclend/index.js index 6715c16c29..d5c622f229 100644 --- a/projects/fisclend/index.js +++ b/projects/fisclend/index.js @@ -4,7 +4,10 @@ module.exports = { hallmarks: [ [1735862400, "Rug Pull"] ], + deadFrom: 1735862400, apechain: compoundExports2({comptroller: '0xd11443B079D62700061F7311fC48C40B30BCEA91', cether: '0xB1974B31b60C7134978e5574F5f1fC8A16535b5D'}), wc: compoundExports2({comptroller: '0xE3de48DCF4968B419BB55421D6B5bF2c049DaFB2', cether: '0xCD04992D1D8d42BB432AD794103c3B498016Da88'}), sonic: compoundExports2({comptroller: '0x65E8768B86350875DDE19A791f06FfB7a4ADA71b', cether: '0x0B19823EF1F4a6B1f7c52336F428F1a92e9f645E'}), } + +Object.keys(module.exports).forEach(key => module.exports[key].borrowed = () => ({})) \ No newline at end of file From 108a5cb0265d177ec4865c00b2ce358f7eadc1d5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:23:18 +0100 Subject: [PATCH 1758/1768] track sonic dexes --- projects/Equalizer/index.js | 3 +++ projects/dyorswap/index.js | 1 + projects/equalizer-cl/index.js | 5 +++++ projects/memebox-fi/index.js | 4 ++++ projects/mobiusdex-xyz/index.js | 4 ++++ 5 files changed, 17 insertions(+) create mode 100644 projects/equalizer-cl/index.js create mode 100644 projects/memebox-fi/index.js create mode 100644 projects/mobiusdex-xyz/index.js diff --git a/projects/Equalizer/index.js b/projects/Equalizer/index.js index 1d2e0a4657..f4ccf119a4 100644 --- a/projects/Equalizer/index.js +++ b/projects/Equalizer/index.js @@ -7,4 +7,7 @@ module.exports = { tvl: uniTvlExport("0xc6366EFD0AF1d09171fe0EBF32c7943BB310832a", "fantom", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: true, }), staking: staking("0x8313f3551C4D3984FfbaDFb42f780D0c8763Ce94", "0x3Fd3A0c85B70754eFc07aC9Ac0cbBDCe664865A6"), }, + sonic: { + tvl: uniTvlExport("0xDDD9845Ba0D8f38d3045f804f67A1a8B9A528FcC", "fantom", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: true, stablePoolSymbol: 's-'}), + } } diff --git a/projects/dyorswap/index.js b/projects/dyorswap/index.js index e4d27a2d89..1626095e85 100644 --- a/projects/dyorswap/index.js +++ b/projects/dyorswap/index.js @@ -9,6 +9,7 @@ const config = { xlayer: '0x2ccadb1e437aa9cdc741574bda154686b1f04c09', bob: '0x2CcaDb1e437AA9cDc741574bDa154686B1F04C09', ink: '0x6c86ab200661512fDBd27Da4Bb87dF15609A2806', + sonic: '0xd8863d794520285185197F97215c8B8AD04E8815', } module.exports = { diff --git a/projects/equalizer-cl/index.js b/projects/equalizer-cl/index.js new file mode 100644 index 0000000000..982eac7c96 --- /dev/null +++ b/projects/equalizer-cl/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + sonic: { factory: '0x7Ca1dCCFB4f49564b8f13E18a67747fd428F1C40', fromBlock: 548413, }, +}) \ No newline at end of file diff --git a/projects/memebox-fi/index.js b/projects/memebox-fi/index.js new file mode 100644 index 0000000000..f4d3a66990 --- /dev/null +++ b/projects/memebox-fi/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'sonic': '0x079463f811e6EB2E226908E79144CDDB59a7fB71' +}) \ No newline at end of file diff --git a/projects/mobiusdex-xyz/index.js b/projects/mobiusdex-xyz/index.js new file mode 100644 index 0000000000..9a590b3294 --- /dev/null +++ b/projects/mobiusdex-xyz/index.js @@ -0,0 +1,4 @@ +const { uniTvlExports } = require('../helper/unknownTokens') +module.exports = uniTvlExports({ + 'sonic': '0x475f2dDfA1A5da19F4a3F282F1305f285E742C45' +}) \ No newline at end of file From ba0080fa4e4f7fd7597d6842e8c292e470eadfe2 Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Wed, 8 Jan 2025 13:23:49 -0800 Subject: [PATCH 1759/1768] Add Sonic and Bob (#13025) --- projects/visor/config.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/visor/config.js b/projects/visor/config.js index cd8f232c71..3c67b92f00 100644 --- a/projects/visor/config.js +++ b/projects/visor/config.js @@ -160,6 +160,13 @@ const HYPE_REGISTRY = { apechain: [ ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 476343], // Camelot ], + sonic: [ + ["0x683292172E2175bd08e3927a5e72FC301b161300", 1825082], // Equalizer + ["0x2705176750a81d6b1C64c5081d55aA1B54681917", 2760689], // Shadow + ], + bob: [ + ["0xC27DDd78FC49875Fe6F844B72bbf31DFBB099881", 11706713], // Uniswap + ], }; Object.keys(HYPE_REGISTRY).forEach(chain => { From 707ecb2b8b7b5c07df4c3142188203d7925a6dc3 Mon Sep 17 00:00:00 2001 From: 0xYFLOW <139814596+0xYFLOW@users.noreply.github.com> Date: Thu, 9 Jan 2025 01:24:17 +0400 Subject: [PATCH 1760/1768] Update index.js (#13027) --- projects/yieldflow/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/yieldflow/index.js b/projects/yieldflow/index.js index 4f6f7dc694..ec358d77c2 100644 --- a/projects/yieldflow/index.js +++ b/projects/yieldflow/index.js @@ -86,6 +86,10 @@ const managers = [ '0x3Bd5B4422685F9321F0e5a8333067A4A049fC664', '0x1AC1d8911BBb2Fed8fD736e3649FC363001C8e07', '0x5ABf77610fabaD2DeF07A43eF6f66C1D2438dE7e', + + '0xc9aDB46B1Ea65EE8A7A7BD1aE0dfB82d7421751d', + '0x5309161C131f75F15c28BD1a5d3614001c8d9c10', + '0x2fd2c02534383ca0c973F92237Af2639021DaC23', ] async function tvl(api) { @@ -119,7 +123,8 @@ const config = { '0xFB04d48e4CE9C042188Ef933ff4cf58921Ab59B8', '0x36232356758c746A50AD5078815F09e39E34628d', '0xA0FDf5DC858ea552d51B4fa304e72cEB34e736fb', - '0xaC36A41da8f069C4874Dda60e073B5DcF889B56E' + '0xaC36A41da8f069C4874Dda60e073B5DcF889B56E', + '0x9D0731968AE480936c25ae841573842eEF6D65a4' ] } } From 3f8648808236d0ce3968449609c03775d55bfef0 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:25:00 +0100 Subject: [PATCH 1761/1768] Fix: Pixel-Swap (FIX) (#13021) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/pixel-swap/index.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/projects/pixel-swap/index.js b/projects/pixel-swap/index.js index a8cb5deee9..291dfbf3e7 100644 --- a/projects/pixel-swap/index.js +++ b/projects/pixel-swap/index.js @@ -1,15 +1,14 @@ const { get } = require('../helper/http') -async function tvl(api) { +async function tvl (api) { const res = await get("https://api.pixelswap.io/apis/tokens"); - const tokens = res.data.tokens.map(i => i.address); - const balances = res.data.tokens.map(i => i.tokenBalance); - - api.addTokens(tokens, balances); + + res.data.tokens.forEach(({ address, tokenBalance }) => { + if (!tokenBalance) return; + api.addTokens(address, tokenBalance) + }) } module.exports = { - ton: { - tvl, - } + ton: { tvl } }; From 98df2ac6e44c64bb7a1b158ae986723342201020 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:25:20 +0100 Subject: [PATCH 1762/1768] track WavesBridge TVL (#13016) Co-authored-by: Ivan <36043679+Blahdieblah@users.noreply.github.com> --- projects/helper/tokenMapping.js | 8 +++++- projects/wavesbridge/index.js | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 projects/wavesbridge/index.js diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 207ee2db7d..88f1164ad1 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -115,7 +115,13 @@ const fixBalancesTokens = { 'i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X': { coingeckoId: 'ethereum', decimals: 0 }, 'iS8TfRPfVpKo5FVfSUzfHBQxo9KuzpnqLU': { coingeckoId: 'tbtc', decimals: 0 }, 'i9oCSqKALwJtcv49xUKS2U2i79h1kX6NEY': { coingeckoId: 'tether', decimals: 0 }, - } + }, + unit0: { + '0xEb19000D90f17FFbd3AD9CDB8915D928F4980fD1': { coingeckoId: 'usd-coin', decimals: 6 }, + '0xb303d80db8415FD1d3C9FED68A52EEAc9a052671': { coingeckoId: 'tether', decimals: 6 }, + '0x1B100DE3F13E3f8Bb2f66FE58c1949c32E71248B': { coingeckoId: 'ethereum', decimals: 18 }, + '0x9CE808657ba90C65a2700b1cA5D943eC72834B52': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/wavesbridge/index.js b/projects/wavesbridge/index.js new file mode 100644 index 0000000000..38353161f6 --- /dev/null +++ b/projects/wavesbridge/index.js @@ -0,0 +1,46 @@ +const solana = require('../helper/solana'); +const waves = require("../helper/chain/waves"); +const { sumTokens2, } = require('../helper/unwrapLPs'); + +const data = { + bsc: { + contractAddress: "0x3AC7A6635d99F376c3c05442f7Eef62d349C3A55", + tokens: ["0xbA2aE424d960c26247Dd6c32edC70B295c744C43", "0x873CD8702d18Eb584CCdFFc10a5B88d62606cEEF",] + }, + ethereum: { + contractAddress: "0x3AC7A6635d99F376c3c05442f7Eef62d349C3A55", + tokens: ["0x1a920b0eaE5B49c51eBf042a61c3Fa58Dae04882", "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", "0x6982508145454Ce325dDbE47a25d4ec3d2311933", "0x4d224452801ACEd8B2F0aebE155379bb5D594381", "0x812Ba41e071C7b7fA4EBcFB62dF5F45f6fA853Ee",] + }, + unit0: { + contractAddress: "0x3AC7A6635d99F376c3c05442f7Eef62d349C3A55", + tokens: ["0xEb19000D90f17FFbd3AD9CDB8915D928F4980fD1", "0xb303d80db8415FD1d3C9FED68A52EEAc9a052671", "0x1B100DE3F13E3f8Bb2f66FE58c1949c32E71248B", "0x9CE808657ba90C65a2700b1cA5D943eC72834B52",] + }, +} + +async function tvl(api) { + const { contractAddress: owner, tokens } = data[api.chain]; + return sumTokens2({ api, owner, tokens }) +} + +async function solanaTvl() { + return solana.sumTokens2({ owner: '8eQ7p6cBh57pESr6oHT6PS9GtdLQdJVYebeCytf9mufe' }) +} + +async function wavesTvl(api) { + return waves.sumTokens({ owners: ['3P6Rk2XBo6MJm9seLfxvJ1VSGz54yWiYb9U'], api }) +} + +module.exports = { + methodology: "All tokens locked in WavesBridge smart contracts.", + timetravel: false, + waves: { + tvl: wavesTvl, + }, + solana: { + tvl: solanaTvl, + }, +} + +Object.keys(data).forEach(chain => { + module.exports[chain] = { tvl } +}) From 8e0944d80fc8d5f187869b52d96ed869ce96403f Mon Sep 17 00:00:00 2001 From: Samster91 <37342443+samster91@users.noreply.github.com> Date: Wed, 8 Jan 2025 23:16:40 +0100 Subject: [PATCH 1763/1768] Idle DAO new Vault (#13028) Co-authored-by: Samster91 Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/idle/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/idle/index.js b/projects/idle/index.js index 1b0c925d00..b7cd2d799a 100644 --- a/projects/idle/index.js +++ b/projects/idle/index.js @@ -57,7 +57,9 @@ const contracts = { ] }, optimism: { - + cdos: [ + "0xD2c0D848aA5AD1a4C12bE89e713E70B73211989B" // FalconX + ] }, arbitrum: { cdos: [ From f6334b82355623435cb24ca4d3ebe0204a277dd6 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 9 Jan 2025 02:46:23 +0000 Subject: [PATCH 1764/1768] add hallmark --- projects/moby/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/moby/index.js b/projects/moby/index.js index fb8b241eba..a1862e92b3 100644 --- a/projects/moby/index.js +++ b/projects/moby/index.js @@ -2,6 +2,9 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const ADDRESSES = require('../helper/coreAssets.json') module.exports = { + hallmarks: [ + [1736294400,"Private-key Leak Exploit"] + ], arbitrum: { tvl: sumTokensExport({ owners: [ From 59134836128c76e5f40886783fb83bfc4cd9d491 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:17:56 +0100 Subject: [PATCH 1765/1768] bugfix --- projects/curve/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/curve/index.js b/projects/curve/index.js index eb3247ee67..85295f3fdb 100644 --- a/projects/curve/index.js +++ b/projects/curve/index.js @@ -30,7 +30,6 @@ const chains = [ "taiko", "corn", "sonic", - "ink", ]; const registryIds = { stableswap: 0, From 654df7b98d036f7e4af1bb1756db774a6d5dcce3 Mon Sep 17 00:00:00 2001 From: EVMlord <85406816+EVMlord@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:35:27 +0100 Subject: [PATCH 1766/1768] Add support for ApeChain (#13032) --- projects/kimberlite/config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/kimberlite/config.js b/projects/kimberlite/config.js index 4da89a31c9..aa21ddd727 100644 --- a/projects/kimberlite/config.js +++ b/projects/kimberlite/config.js @@ -49,6 +49,11 @@ const config = { locker: "0xE4E56E5e234783BCb77A80e19C8B3B5b42588AAb", startBlock: 4533304 }, + kimberliteSafeApe: { + chain: "apechain", + locker: "0xE4E56E5e234783BCb77A80e19C8B3B5b42588AAb", + startBlock: 7797536 + }, } module.exports = { From c2be0f4ee42598d1134d3a4962c2bc39d7c329f6 Mon Sep 17 00:00:00 2001 From: NovaCrafter <165104067+NovaCrafter@users.noreply.github.com> Date: Thu, 9 Jan 2025 13:30:22 +0300 Subject: [PATCH 1767/1768] track Marlin Protocol TVL (#13029) Co-authored-by: NovaCrafter --- projects/marlinprotocol/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/marlinprotocol/index.js diff --git a/projects/marlinprotocol/index.js b/projects/marlinprotocol/index.js new file mode 100644 index 0000000000..50ca1cc023 --- /dev/null +++ b/projects/marlinprotocol/index.js @@ -0,0 +1,11 @@ +const { staking } = require('../helper/staking'); + +module.exports = { + arbitrum: { + tvl: () => ({}), + staking: staking( + "0xf90490186F370f324DEF2871F077668455f65253", + "0xdA0a57B710768ae17941a9Fa33f8B720c8bD9ddD" + ) + }, +}; \ No newline at end of file From e226e9eab025d2c3cdfa553599ab4e0601150245 Mon Sep 17 00:00:00 2001 From: mummyguy <120447666+mummyguy@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:52:10 +0700 Subject: [PATCH 1768/1768] Add navigator.exchange (#13033) Co-authored-by: mummyguy Co-authored-by: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> --- projects/navigator/index.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 projects/navigator/index.js diff --git a/projects/navigator/index.js b/projects/navigator/index.js new file mode 100644 index 0000000000..a01dbabaea --- /dev/null +++ b/projects/navigator/index.js @@ -0,0 +1,25 @@ +const { staking } = require("../helper/staking"); +const { gmxExports } = require("../helper/gmx"); +const { sumTokens2 } = require("../helper/unwrapLPs"); + +// sonic +const sonicVault = "0xe9263682E837eFabb145f8C632B9d2c518D90652"; +const sonicStaking = "0xEF8770E9506a8D1aAE3D599327a39Cf14B6B3dc4"; +const sonicNAVI = "0x6881B80ea7C858E4aEEf63893e18a8A36f3682f3"; + +// sonicV2 +const sonicV2Vault = "0x41cD8CaFc24A771031B9eB9C57cFC94D86045eB6"; +const sonicV2Assets = ["0x29219dd400f2bf60e5a23d13be72b486d4038894"] + +const tvl = async (api) => { + await Promise.all([ + gmxExports({ vault: sonicVault })(api), + sumTokens2({ api, tokens: sonicV2Assets, owner: sonicV2Vault })]) +}; + +module.exports = { + sonic: { + tvl, + staking: staking(sonicStaking, sonicNAVI) + } +}